# 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';
}
