2004-08-22 10:07:47 +00:00
|
|
|
#!/usr/bin/perl
|
|
|
|
#(C)2004 AMX Mod X Development Team
|
|
|
|
# by David "BAILOPAN" Anderson
|
|
|
|
|
|
|
|
# output will occur in bin.x.proc
|
|
|
|
# where x is debug or opt and proc is ix86 or amd64
|
|
|
|
# You must use this script from the project src dir
|
|
|
|
|
|
|
|
#options =
|
|
|
|
# debug - enable gdb debugging
|
|
|
|
# amd64 - compile for AMD64
|
|
|
|
# proc=ix86 - assumed not amd64
|
|
|
|
# clean - clean the specifications above
|
|
|
|
|
|
|
|
$PROJECT = "engine_amxx";
|
|
|
|
$sdk = "../hlsdk/SourceCode";
|
|
|
|
$mm = "../metamod/metamod";
|
2004-08-30 22:24:43 +00:00
|
|
|
$gccf = "gcc";
|
2004-08-22 10:07:47 +00:00
|
|
|
|
|
|
|
@CPP_SOURCE_FILES = ("amxxmodule.cpp", "forwards.cpp", "messages.cpp", "entity.cpp", "globals.cpp", "amxxapi.cpp", "engine.cpp");
|
|
|
|
|
|
|
|
@C_SOURCE_FILES = ();
|
|
|
|
my %OPTIONS, %OPT;
|
|
|
|
|
|
|
|
$OPT{"debug"} = "-g -ggdb";
|
|
|
|
$OPT{"opt"} = "-O2 -ffast-math -funroll-loops -fomit-frame-pointer -s -DNDEBUG -Wall -Wno-unknown-pragmas -DOPT_TYPE=\"optimized\"";
|
|
|
|
|
|
|
|
$OPTIONS{"include"} = "-I$sdk -I. -I$mm -I$sdk/engine -I$sdk/common -I$sdk/pm_shared -I$sdk/dlls";
|
|
|
|
|
|
|
|
while ($cmd = shift)
|
|
|
|
{
|
|
|
|
if ($cmd =~ /amd64/) {
|
|
|
|
$OPTIONS{"amd64"} = 1;
|
|
|
|
} elsif ($cmd =~ /debug/) {
|
|
|
|
$OPTIONS{"debug"} = 1;
|
|
|
|
} elsif ($cmd =~ /proc=i(\d)86/) {
|
|
|
|
$proc = $1;
|
|
|
|
if ($OPTIONS{"amd64"})
|
|
|
|
{
|
|
|
|
die "You cannot compile for i".$proc."86 and AMD64.\n";
|
|
|
|
} else {
|
|
|
|
$OPTIONS{"proc"} = "i".$proc."86";
|
|
|
|
}
|
|
|
|
} elsif ($cmd =~ /clean/) {
|
|
|
|
$OPTIONS{"clean"} = 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2004-08-30 22:24:43 +00:00
|
|
|
$gcc = `$gccf --version`;
|
2004-08-22 10:07:47 +00:00
|
|
|
if ($gcc =~ /2\.9/)
|
|
|
|
{
|
|
|
|
$OPT{"opt"} .= " -malign-loops=2 -malign-jumps=2 -malign-functions=2";
|
|
|
|
} else {
|
2004-08-24 05:44:31 +00:00
|
|
|
$OPT{"opt"} .= " -falign-loops=2 -falign-jumps=2 ";
|
2004-08-22 10:07:47 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if ($OPTIONS{"debug"})
|
|
|
|
{
|
|
|
|
$cflags = $OPT{"debug"};
|
|
|
|
} else {
|
|
|
|
if (!$OPTIONS{"amd64"})
|
|
|
|
{
|
|
|
|
$proc = $OPTIONS{"proc"};
|
|
|
|
if (!$proc)
|
|
|
|
{
|
|
|
|
$proc = 3;
|
|
|
|
}
|
|
|
|
$cflags = "-march=i".$proc."86 ".$OPT{"opt"};
|
|
|
|
} else {
|
|
|
|
$cflags = $OPT{"opt"};
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($OPTIONS{"amd64"})
|
|
|
|
{
|
|
|
|
$cflags .= "-m64 -DSMALL_CELLSIZE=64 $cflags";
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($OPTIONS{"debug"})
|
|
|
|
{
|
|
|
|
$outdir = "bin.debug";
|
|
|
|
} else {
|
|
|
|
$outdir = "bin.opt";
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($OPTIONS{"amd64"})
|
|
|
|
{
|
|
|
|
$outdir .= ".amd64";
|
|
|
|
$bin = $PROJECT."_amd64.so";
|
|
|
|
} else {
|
|
|
|
$proc = $OPTIONS{"proc"};
|
|
|
|
if ($proc)
|
|
|
|
{
|
|
|
|
$outdir .= ".i".$proc."86";
|
|
|
|
$bin = $PROJECT."_i".$proc."86.so";
|
|
|
|
} else {
|
|
|
|
$outdir .= ".i386";
|
|
|
|
$bin = $PROJECT."_i386.so";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($OPTIONS{"clean"})
|
|
|
|
{
|
|
|
|
`rm $outdir/*.o`;
|
|
|
|
`rm $outdir/$bin`;
|
|
|
|
die("Project cleaned.\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
#create the dirs
|
|
|
|
#build link list
|
|
|
|
my @LINK;
|
|
|
|
for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
|
|
|
|
{
|
|
|
|
$file = $CPP_SOURCE_FILES[$i];
|
|
|
|
$file =~ s/\.cpp/\.o/;
|
|
|
|
push(@LINK, $outdir."/".$file);
|
|
|
|
}
|
|
|
|
for ($i=0; $i<=$#C_SOURCE_FILES; $i++)
|
|
|
|
{
|
|
|
|
$file = $C_SOURCE_FILES[$i];
|
|
|
|
$file =~ s/\.c/\.o/;
|
|
|
|
push(@LINK, $outdir."/".$file);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!(-d $outdir))
|
|
|
|
{
|
|
|
|
mkdir($outdir);
|
|
|
|
}
|
|
|
|
|
|
|
|
$inc = $OPTIONS{"include"};
|
|
|
|
|
|
|
|
for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
|
|
|
|
{
|
|
|
|
$file = $CPP_SOURCE_FILES[$i];
|
|
|
|
$ofile = $file;
|
|
|
|
$ofile =~ s/\.cpp/\.o/;
|
|
|
|
$ofile = "$outdir/$ofile";
|
2004-08-30 22:24:43 +00:00
|
|
|
$gcc = "$gccf $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile";
|
2004-08-22 10:07:47 +00:00
|
|
|
if (-e $ofile)
|
|
|
|
{
|
|
|
|
$file_time = (stat($file))[9];
|
|
|
|
$ofile_time = (stat($file))[9];
|
|
|
|
if ($file_time > $ofile_time)
|
|
|
|
{
|
|
|
|
print "$gcc\n";
|
|
|
|
`$gcc`;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
print "$gcc\n";
|
|
|
|
`$gcc`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
|
|
|
|
{
|
|
|
|
$file = $C_SOURCE_FILES[$i];
|
|
|
|
$ofile = $file;
|
|
|
|
$ofile =~ s/\.c/\.o/;
|
|
|
|
$ofile = "$outdir/$ofile";
|
|
|
|
$gcc = "cc $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile";
|
|
|
|
if (-e $ofile)
|
|
|
|
{
|
|
|
|
$file_time = (stat($file))[9];
|
|
|
|
$ofile_time = (stat($file))[9];
|
|
|
|
if ($file_time > $ofile_time)
|
|
|
|
{
|
|
|
|
print "$gcc\n";
|
|
|
|
`$gcc`;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
print "$gcc\n";
|
|
|
|
`$gcc`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2004-09-08 21:13:04 +00:00
|
|
|
$gcc = "$gccf $cflags -shared -fPIC -ldl -lm -o $outdir/$bin @LINK";
|
2004-08-30 06:38:11 +00:00
|
|
|
print "$gcc\n";
|
2004-08-22 10:07:47 +00:00
|
|
|
`$gcc`;
|