# TA ui building # qvm building against native: # only native has ui_syscalls.c # qvm uses a custom ui_syscalls.asm with equ stubs # qvm has additional bg_lib.c 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:#ui', CC => $CC, CXX => $CXX, LINK => $LINK, ENV => { PATH => $ENV{PATH}, HOME => $ENV{HOME} }, CFLAGS => $BASE_CFLAGS . '-DMISSIONPACK -fPIC', LDFLAGS => '-shared -ldl -lm' ); # 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:#ui', CC => 'q3lcc', CCCOM => '%CC %CFLAGS %_IFLAGS -c %< -o %>', SUFOBJ => '.asm', LINK => 'q3asm', CFLAGS => '-DQ3_VM -DMISSIONPACK -S -Wf-target=bytecode -Wf-g', # need to know where to find the compiler tools ENV => { PATH => $ENV{PATH} . ":./qvmtools", }, ); # the file with vmMain function MUST be the first one of the list @FILES = qw( ui_main.c ui_atoms.c ui_gameinfo.c ui_players.c ui_util.c ui_shared.c ../game/bg_misc.c ../game/q_math.c ../game/q_shared.c ); $FILESREF = \@FILES; if ($NO_SO eq 0) { Program $env 'uii386.so', @$FILESREF, 'ui_syscalls.c'; Install $env $INSTALL_DIR, 'uii386.so'; } if ($NO_VM eq 0) { Depends $vm_env 'ui.qvm', '#qvmtools/q3lcc'; Depends $vm_env 'ui.qvm', '#qvmtools/q3asm'; Program $vm_env 'ui.qvm', @$FILESREF, '../game/bg_lib.c', 'ui_syscalls.asm'; Install $vm_env $INSTALL_DIR . '/vm', 'ui.qvm'; }