# Q3 ui building # qvm building against native: # only native has ui_syscalls.c # qvm uses a 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:#q3_ui', CC => $CC, CXX => $CXX, LINK => $LINK, ENV => { PATH => $ENV{PATH}, HOME => $ENV{HOME} }, CFLAGS => $BASE_CFLAGS . '-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:#q3_ui', CC => 'q3lcc', CCCOM => '%CC %CFLAGS %_IFLAGS -c %< -o %>', SUFOBJ => '.asm', LINK => 'q3asm', CFLAGS => '-DQ3_VM -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 ../game/bg_misc.c ../game/q_math.c ../game/q_shared.c ui_addbots.c ui_atoms.c ui_cdkey.c ui_cinematics.c ui_confirm.c ui_connect.c ui_controls2.c ui_credits.c ui_demo2.c ui_display.c ui_gameinfo.c ui_ingame.c ui_menu.c ui_mfield.c ui_mods.c ui_network.c ui_options.c ui_playermodel.c ui_players.c ui_playersettings.c ui_preferences.c ui_qmenu.c ui_removebots.c ui_serverinfo.c ui_servers2.c ui_setup.c ui_sound.c ui_sparena.c ui_specifyserver.c ui_splevel.c ui_sppostgame.c ui_spskill.c ui_startserver.c ui_team.c ui_teamorders.c ui_video.c ); $FILESREF = \@FILES; if ($NO_SO eq 0) { Program $env 'uii386.so', @$FILESREF, '../ui/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/ui_syscalls.asm'; Install $vm_env $INSTALL_DIR . '/vm', 'ui.qvm'; }