123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- # cgame building
- # builds the cgame for vanilla Q3 and TA
- # there are slight differences between Q3 and TA build:
- # -DMISSIONPACK
- # TA has cg_newdraw.c and ../ui/ui_shared.c
- # the config is passed in the imported variable TARGET_DIR
- # qvm building against native:
- # only native has cg_syscalls.c
- # only qvm has ../game/bg_lib.c
- # qvm uses a custom cg_syscalls.asm with equ stubs
- Import qw( BASE_CFLAGS TARGET_DIR INSTALL_DIR NO_VM NO_SO CC CXX LINK );
- $env = new cons(
- # the code has the very bad habit of doing things like #include "../ui/ui_shared.h"
- # this seems to confuse the dependency analysis, explicit toplevel includes seem to fix
- CPPPATH => '#cgame:#game:#q3_ui',
- CC => $CC,
- CXX => $CXX,
- LINK => $LINK,
- ENV => { PATH => $ENV{PATH}, HOME => $ENV{HOME} },
- CFLAGS => $BASE_CFLAGS . '-fPIC',
- LDFLAGS => '-shared -ldl -lm'
- );
- # for TA, use -DMISSIONPACK
- %ta_env_hash = $env->copy(
- CPPPATH => '#cgame:#game:#ui'
- );
- $ta_env_hash{CFLAGS} = '-DMISSIONPACK ' . $ta_env_hash{CFLAGS};
- $ta_env = new cons(%ta_env_hash);
- # qvm building
- # we heavily customize the cons environment
- $vm_env = new cons(
- # the code has the very bad habit of doing things like #include "../ui/ui_shared.h"
- # this seems to confuse the dependency analysis, explicit toplevel includes seem to fix
- CPPPATH => '#cgame:#game:#q3_ui',
- CC => 'q3lcc',
- CCCOM => '%CC %CFLAGS %_IFLAGS -c %< -o %>',
- SUFOBJ => '.asm',
- LINK => 'q3asm',
- CFLAGS => '-DQ3_VM -DCGAME -S -Wf-target=bytecode -Wf-g',
- # need to know where to find the compiler tools
- ENV => { PATH => $ENV{PATH} . ":./qvmtools", },
- );
- # TA qvm building
- %vm_ta_env_hash = $vm_env->copy(
- CPPPATH => '#cgame:#game:#ui'
- );
- $vm_ta_env_hash{CFLAGS} = '-DMISSIONPACK ' . $vm_ta_env_hash{CFLAGS};
- $vm_ta_env = new cons(%vm_ta_env_hash);
- # the file with vmMain function MUST be the first one of the list
- @FILES = qw(
- cg_main.c
- ../game/bg_misc.c
- ../game/bg_pmove.c
- ../game/bg_slidemove.c
- ../game/q_math.c
- ../game/q_shared.c
- cg_consolecmds.c
- cg_draw.c
- cg_drawtools.c
- cg_effects.c
- cg_ents.c
- cg_event.c
- cg_info.c
- cg_localents.c
- cg_marks.c
- cg_players.c
- cg_playerstate.c
- cg_predict.c
- cg_scoreboard.c
- cg_servercmds.c
- cg_snapshot.c
- cg_view.c
- cg_weapons.c
- );
- $FILESREF = \@FILES;
- # only in .so
- # (VM uses a custom .asm with equ stubs)
- @SO_FILES = qw(
- cg_syscalls.c
- );
- $SO_FILESREF = \@SO_FILES;
-
- # only for VM
- @VM_FILES = qw(
- ../game/bg_lib.c
- cg_syscalls.asm
- );
- $VM_FILESREF = \@VM_FILES;
- # common additionals for TA
- @TA_FILES = qw(
- cg_newdraw.c
- ../ui/ui_shared.c
- );
- $TA_FILESREF = \@TA_FILES;
- # FIXME CPU string
- if ($TARGET_DIR eq 'Q3')
- {
- if ($NO_SO eq 0)
- {
- Program $env 'cgamei386.so', @$FILESREF, @$SO_FILESREF;
- Install $env $INSTALL_DIR, 'cgamei386.so';
- }
- if ($NO_VM eq 0)
- {
- Depends $vm_env 'cgame.qvm', '#qvmtools/q3lcc';
- Depends $vm_env 'cgame.qvm', '#qvmtools/q3asm';
- Program $vm_env 'cgame.qvm', @$FILESREF, @$VM_FILESREF;
- Install $vm_env $INSTALL_DIR . '/vm', 'cgame.qvm';
- }
- }
- else
- {
- if ($NO_SO eq 0)
- {
- Program $ta_env 'cgamei386.so',
- @$FILESREF, @$SO_FILESREF, @$TA_FILESREF;
- Install $ta_env $INSTALL_DIR, 'cgamei386.so';
- }
- if ($NO_VM eq 0)
- {
- Depends $vm_env 'cgame.qvm', '#qvmtools/q3lcc';
- Depends $vm_env 'cgame.qvm', '#qvmtools/q3asm';
- Program $vm_ta_env 'cgame.qvm',
- @$FILESREF, @$VM_FILESREF, @$TA_FILESREF;
- Install $vm_ta_env $INSTALL_DIR . '/vm', 'cgame.qvm';
- }
- }
|