123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432 |
- # -*- mode: perl -*-
- # cons script for cgame game q3_ui ui .so and .qvm builds
- #
- # Oct. 2001 TTimo <ttimo@idsoftware.com>
- #
- # the top directory is
- # <config>-<cpu>-<OS>-<libc version>
- # where:
- # <config> is "debug" or "release"
- # <cpu> is "x86" or "ppc"
- # <OS> is "Linux" "BSD" "IRIX" etc.
- # <libc version> is major.minor of libc config
- # source the compiler version utility
- BEGIN {
- push @INC, './unix';
- }
- use Cons_gcc;
- # defaults
- $config = 'debug';
- $do_smp = 1;
- $do_masterserver = 0;
- $do_authserver = 0;
- $do_authport = 0;
- $do_setup = 0;
- $do_bspc = 0;
- $do_sdk = 0;
- $do_pk3 = 0;
- # those are exported
- $DO_WIN32 = 0;
- $NO_VM = 0;
- $NO_SO = 0;
- $CC='gcc';
- $CXX='g++';
- # detect an sdk build (don't attempt client build and other things)
- if ( -r 'unix/Conscript-client' )
- {
- $no_core = 0;
- }
- else
- {
- $no_core = 1;
- }
- # detection of CPU type
- $cpu = `uname -m`;
- chop ($cpu);
- if ($cpu +~ /i?86/)
- {
- $cpu = 'x86';
- }
- # OS
- $OS = `uname`;
- chop ($OS);
- # hacky win32 detection and win32 specifics code
- if ($OS =~ CYGWIN)
- {
- $DO_WIN32 = 1;
- }
- else
- {
- # libc .. do the little magic!
- $libc_cmd = '/lib/libc.so.6 |grep "GNU C "|grep version|awk -F "version " \'{ print $2 }\'|cut -b -3';
- $libc = `$libc_cmd`;
- chop ($libc);
- }
- if ($DO_WIN32 eq 1)
- {
- print("Win32 build\n");
- $config = $ARGV[0];
- # TODO: option to override $Q3BASE from command line
- $Q3BASE = $ENV{Q3BASE}; # FIXME: this doesn't play nice with cygwin path syntax
- print("\$Q3BASE: $Q3BASE\n");
- if($config eq 'debug')
- {
- $DIR = 'Debug';
- system("cp -v $DIR/quake3.exe \$Q3BASE");
- system("cp -v $DIR/cgamex86.dll $DIR/qagamex86.dll $DIR/uix86.dll \$Q3BASE/baseq3");
- }
- elsif ($config eq 'debug-TA')
- {
- $DIR = 'Debug_TA';
- system("cp -v $DIR/quake3.exe \$Q3BASE");
- system("cp -v $DIR/cgamex86.dll $DIR/qagamex86.dll $DIR/uix86.dll \$Q3BASE/missionpack");
- }
- elsif($config eq 'release-TA')
- {
- $DIR = 'Release_TA';
- # spank!
- system("./spank.sh");
- system("cp -v $DIR/quake3.exe \$Q3BASE");
- }
- else
- {
- printf("ERROR: no config option (debug debug-TA release-TA)");
- exit;
- }
- # copy selected stuff to shared media
- $DESTDIR='/cygdrive/e/incoming/Id/q3-1.32';
- system("cp -v $DIR/quake3.exe $DESTDIR");
- system("cp -v /cygdrive/e/Q3SetupMedia/quake3/CHANGES-1.32.txt $DESTDIR");
- exit;
- }
- if(@ARGV gt 0)
- {
- foreach $cmdopt (@ARGV)
- {
- if(lc($cmdopt) eq 'release')
- {
- $config = 'release';
- next;
- }
- elsif(lc($cmdopt) eq 'debug')
- {
- $config = 'debug';
- next;
- }
- elsif(lc($cmdopt) eq 'novm')
- {
- $NO_VM = 1;
- next;
- }
- elsif(lc($cmdopt) eq 'noso')
- {
- $NO_SO = 1;
- next;
- }
- elsif(lc($cmdopt) eq 'nosmp')
- {
- $do_smp = 0;
- next;
- }
- elsif(lc($cmdopt) =~ 'master_server=.*')
- {
- $do_masterserver = 1;
- $master_server = lc($cmdopt);
- $master_server =~ s/master_server=(.*)/\1/;
- next;
- }
- elsif(lc($cmdopt) =~ 'auth_server=.*')
- {
- $do_authserver = 1;
- $auth_server = lc($cmdopt);
- $auth_server =~ s/auth_server=(.*)/\1/;
- next;
- }
- elsif(lc($cmdopt) =~ 'auth_port=.*')
- {
- $do_authport = 1;
- $auth_port = lc($cmdopt);
- $auth_port =~ s/auth_port=(.*)/\1/;
- next;
- }
- elsif(lc($cmdopt) =~ 'setup')
- {
- $do_setup = 1;
- next;
- }
- elsif(lc($cmdopt) =~ 'bspc')
- {
- $do_bspc = 1;
- next;
- }
- elsif(lc($cmdopt) =~ 'sdk')
- {
- $do_sdk = 1;
- next;
- }
- elsif(lc($cmdopt) =~ 'pk3')
- {
- $do_pk3 = 1;
- next;
- }
- elsif(lc($cmdopt) =~ 'gcc=.*')
- {
- $CC=lc($cmdopt);
- $CC =~ s/gcc=(.*)/\1/;
- next;
- }
- elsif(lc($cmdopt) =~ 'g\+\+=.*')
- {
- $CXX=lc($cmdopt);
- $CXX=~s/g\+\+=(.*)/\1/;
- next;
- }
- else
- {
- # output an error & exit
- print("Error\n $0: Unknown command line option: [ $cmdopt ]\n");
- system("cons -h");
- exit;
- }
- }
- }
- if (($do_setup eq 1) && ($config ne 'release'))
- {
- print("Error\n $0: 'setup' requires 'release'\n");
- exit;
- }
- # sdk
- if ($do_sdk eq 1)
- {
- # extract the Q3 version from q_shared.h
- $line = `cat game/q_shared.h | grep Q3_VERSION`;
- chomp $line;
- $line =~ s/.*Q3\ (.*)\"/$1/;
- $Q3_VER = $line;
- $SDK_NAME = "linuxq3a-sdk-$Q3_VER.x86.run";
- Default "unix/$SDK_NAME";
- Export qw( SDK_NAME Q3_VER );
- Build 'unix/Conscript-sdk';
- return;
- }
- # build the config directory
- $CONFIG_DIR = $config . '-' . $cpu . '-' . $OS . '-' . $libc;
- $COMMON_CFLAGS = '-pipe -fsigned-char ';
- if ($config eq 'debug')
- {
- # use -Werror for better QA
- $BASE_CFLAGS = $COMMON_CFLAGS . '-g -Wall -Werror -O ';
- $BSPC_BASE_CFLAGS = $COMMON_CFLAGS . '-g -O -DLINUX -DBSPC -Dstricmp=strcasecmp ';
- }
- else
- {
- $BASE_CFLAGS = $COMMON_CFLAGS . '-DNDEBUG -O6 -mcpu=pentiumpro -march=pentium -fomit-frame-pointer -ffast-math -malign-loops=2 -malign-jumps=2 -malign-functions=2 -fno-strict-aliasing -fstrength-reduce ';
- $BSPC_BASE_CFLAGS = $BASE_CFLAGS . '-DLINUX -DBSPC -Dstricmp=strcasecmp ';
- }
- if ($do_masterserver eq 1)
- {
- $BASE_CFLAGS .= "-DMASTER_SERVER_NAME=\\\"$master_server\\\" ";
- }
- if ($do_authserver eq 1)
- {
- $BASE_CFLAGS .= "-DAUTHORIZE_SERVER_NAME=\\\"$auth_server\\\" ";
- }
- if ($do_authport eq 1)
- {
- $BASE_CFLAGS .= "-DPORT_AUTHORIZE=$auth_port ";
- }
- my @gcc_version = Cons_gcc::get_gcc_version($CC);
- print("GCC version: $gcc_version[1] - $gcc_version[2]\n");
- # with 2.95 you can link with gcc, this avoids nasty useless libstdc++ dependency
- if ($gcc_version[0] eq '2')
- {
- $LINK = $CC;
- } else {
- $LINK = $CXX;
- }
- my @ccache = Cons_gcc::get_ccache();
- if ($ccache[0] eq '1')
- {
- $CC = $ccache[1] . " " . $CC;
- $CXX = $ccache[1] . " " . $CXX;
- }
- print 'cpu : ' . $cpu . "\nOS : " . $OS . "\n";
- print "libc: " . $libc . "\n";
- print "configured for " . $config . " build\n";
- print 'CFLAGS: ' . $BASE_CFLAGS . "\n";
- # install config
- $INSTALL_BASEDIR='#install';
- Default $INSTALL_BASEDIR;
- sub build_tools {
- system("mkdir qvmtools 2>/dev/null");
- if (@_[0] eq 'q3lcc')
- {
- system("cd ../lcc ; make all ; cp /tmp/lcc ../code/qvmtools/q3lcc ; cp /tmp/rcc ../code/qvmtools/q3rcc ; cp /tmp/cpp ../code/qvmtools/q3cpp");
- }
- elsif (@_[0] eq 'q3asm')
- {
- system("cd ../q3asm ; make ; cp q3asm ../code/qvmtools");
- }
- else
- {
- printf("build_tools: @_[0] unrecognized command\n");
- die;
- }
- return 1;
- }
- # build tools
- $env_tools = new cons();
- Command $env_tools 'qvmtools/q3lcc', '[perl] &build_tools(\'q3lcc\')';
- Command $env_tools 'qvmtools/q3asm', '[perl] &build_tools(\'q3asm\')';
- if ($do_bspc eq 1)
- {
- # build bspc
- $BUILD_DIR = $CONFIG_DIR . '/bspc';
- Link $BUILD_DIR => '.';
- $INSTALL_DIR = $INSTALL_BASEDIR . '/utils';
- Export qw( BSPC_BASE_CFLAGS BUILD_DIR INSTALL_DIR CC CXX LINK );
- Build $BUILD_DIR . '/bspc/Conscript';
- }
- # build vanilla Q3
- $TARGET_DIR='Q3';
- $INSTALL_DIR = $INSTALL_BASEDIR . '/baseq3';
- $BUILD_DIR = $CONFIG_DIR . '/' . $TARGET_DIR . '/cgame';
- Link $BUILD_DIR => '.';
- Export qw( BASE_CFLAGS TARGET_DIR INSTALL_DIR NO_VM NO_SO CC CXX LINK );
- Build $BUILD_DIR . '/cgame/Conscript';
- $BUILD_DIR = $CONFIG_DIR . '/' . $TARGET_DIR . '/game';
- Link $BUILD_DIR => '.';
- Export qw( BASE_CFLAGS TARGET_DIR INSTALL_DIR NO_VM NO_SO CC CXX LINK );
- Build $BUILD_DIR . '/game/Conscript';
- $BUILD_DIR = $CONFIG_DIR . '/' . $TARGET_DIR . '/q3_ui';
- Link $BUILD_DIR => '.';
- Export qw( BASE_CFLAGS TARGET_DIR INSTALL_DIR NO_VM NO_SO CC CXX LINK );
- Build $BUILD_DIR . '/q3_ui/Conscript';
-
- # build TA
- $TARGET_DIR='TA';
- $INSTALL_DIR = $INSTALL_BASEDIR . '/missionpack';
- $BUILD_DIR = $CONFIG_DIR . "/" . $TARGET_DIR . '/cgame';
- Link $BUILD_DIR => '.';
- Export qw( BASE_CFLAGS TARGET_DIR INSTALL_DIR NO_VM NO_SO CC CXX LINK );
- Build $BUILD_DIR . '/cgame/Conscript';
- $BUILD_DIR = $CONFIG_DIR . "/" . $TARGET_DIR . '/game';
- Link $BUILD_DIR => '.';
- Export qw( BASE_CFLAGS TARGET_DIR INSTALL_DIR NO_VM NO_SO CC CXX LINK );
- Build $BUILD_DIR . '/game/Conscript';
- $BUILD_DIR = $CONFIG_DIR . '/' . $TARGET_DIR . '/ui';
- Link $BUILD_DIR => '.';
- Export qw( BASE_CFLAGS TARGET_DIR INSTALL_DIR NO_VM NO_SO CC CXX LINK );
- Build $BUILD_DIR . '/ui/Conscript';
- # core
- if ($no_core eq 1)
- {
- return;
- }
- $INSTALL_DIR = $INSTALL_BASEDIR;
- $BUILD_DIR = $CONFIG_DIR . '/core/dedicated';
- Link $BUILD_DIR => '.';
- $hack = $BASE_CFLAGS; # hit me!
- $BASE_CFLAGS .= '-DDEDICATED ';
- Export qw( BASE_CFLAGS BUILD_DIR INSTALL_DIR CC CXX LINK );
- Build $BUILD_DIR . '/unix/Conscript-dedicated';
- $BASE_CFLAGS = $hack;
- $TARGETNAME = 'linuxquake3';
- $BUILD_DIR = $CONFIG_DIR . '/core/client';
- $BASE_LDFLAGS = '';
- Link $BUILD_DIR => '.';
- Export qw( BASE_CFLAGS BASE_LDFLAGS BUILD_DIR INSTALL_DIR TARGETNAME CC CXX LINK );
- Build $BUILD_DIR . '/unix/Conscript-client';
- if ($do_smp eq 1)
- {
- $TARGETNAME = 'linuxquake3-smp';
- $BUILD_DIR = $CONFIG_DIR . '/core/client-smp';
- $BASE_CFLAGS .= '-DSMP ';
- $BASE_LDFLAGS = '-lpthread ';
-
- Link $BUILD_DIR => '.';
- Export qw( BASE_CFLAGS BASE_LDFLAGS BUILD_DIR INSTALL_DIR TARGETNAME CC CXX LINK );
- Build $BUILD_DIR . '/unix/Conscript-client';
- }
- if ($NO_VM eq 0 && $do_pk3 eq 1)
- {
- # build the PK3s
- $INSTALL_DIR = $INSTALL_BASEDIR;
- $BUILD_DIR = $CONFIG_DIR . '/pk3-builder';
- Link $BUILD_DIR => 'unix';
- Export qw( INSTALL_DIR BUILD_DIR CONFIG_DIR CC CXX LINK );
- Build $BUILD_DIR . '/Conscript-pk3';
- }
- if ($do_setup eq 1)
- {
- Link $CONFIG_DIR => '.';
- Export qw( INSTALL_BASEDIR );
- Build $CONFIG_DIR . '/unix/Conscript-setup';
- }
- Help
- "
- Usage: cons [-h] [ -- [release|debug] [novm] [noso] [nosmp] [master_server=<adr>] [auth_server=<adr>] [auth_port=<port>] [pk3] [bspc] [setup] [sdk]]
- Default build type is Debug, specifying '-- release' on the
- command line builds a Release version (NOTE that this option
- only affects the native libraries).
- novm: will not build the VMs
- noso: will not build the so
- below are for core builds only:
- nosmp : do not build the SMP-enabled version of the renderer
- pk3 : generate the pk3s on the fly (defined in unix/Conscript-pk3)
- bspc : build bspc
- setup : build setup
- sdk : build the mod sdk
- "
- ;
|