140 lines
3.5 KiB
Text
Executable file
140 lines
3.5 KiB
Text
Executable file
# game building
|
|
# builds the game for vanilla Q3 and TA
|
|
|
|
# there are slight differences between Q3 and TA build:
|
|
# -DMISSIONPACK
|
|
# the config is passed in the imported variable TARGET_DIR
|
|
|
|
# qvm building against native:
|
|
# only native has g_syscalls.c
|
|
# only qvm has ../game/bg_lib.c
|
|
# qvm uses a custom g_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 -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(
|
|
g_main.c
|
|
ai_chat.c
|
|
ai_cmd.c
|
|
ai_dmnet.c
|
|
ai_dmq3.c
|
|
ai_main.c
|
|
ai_team.c
|
|
ai_vcmd.c
|
|
bg_misc.c
|
|
bg_pmove.c
|
|
bg_slidemove.c
|
|
g_active.c
|
|
g_arenas.c
|
|
g_bot.c
|
|
g_client.c
|
|
g_cmds.c
|
|
g_combat.c
|
|
g_items.c
|
|
g_mem.c
|
|
g_misc.c
|
|
g_missile.c
|
|
g_mover.c
|
|
g_session.c
|
|
g_spawn.c
|
|
g_svcmds.c
|
|
g_target.c
|
|
g_team.c
|
|
g_trigger.c
|
|
g_utils.c
|
|
g_weapon.c
|
|
q_math.c
|
|
q_shared.c
|
|
);
|
|
$FILESREF = \@FILES;
|
|
|
|
# only in .so
|
|
# (VM uses a custom .asm with equ stubs)
|
|
@SO_FILES = qw(
|
|
g_syscalls.c
|
|
);
|
|
$SO_FILESREF = \@SO_FILES;
|
|
|
|
# only for VM
|
|
@VM_FILES = qw(
|
|
bg_lib.c
|
|
g_syscalls.asm
|
|
);
|
|
$VM_FILESREF = \@VM_FILES;
|
|
|
|
# FIXME CPU string?
|
|
# NOTE: $env $ta_env and $vm_env $vm_ta_env may not be necessary
|
|
# we could alter the $env and $ta_env based on $TARGET_DIR
|
|
# doing it this way to ensure homogeneity with cgame building
|
|
if ($TARGET_DIR eq 'Q3')
|
|
{
|
|
if ($NO_SO eq 0)
|
|
{
|
|
Program $env 'qagamei386.so', @$FILESREF, @$SO_FILESREF;
|
|
Install $env $INSTALL_DIR, 'qagamei386.so';
|
|
}
|
|
if ($NO_VM eq 0)
|
|
{
|
|
Depends $vm_env 'qagame.qvm', '#qvmtools/q3lcc';
|
|
Depends $vm_env 'qagame.qvm', '#qvmtools/q3asm';
|
|
Program $vm_env 'qagame.qvm', @$FILESREF, @$VM_FILESREF;
|
|
Install $vm_env $INSTALL_DIR . '/vm', 'qagame.qvm';
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if ($NO_SO eq 0)
|
|
{
|
|
Program $ta_env 'qagamei386.so', @$FILESREF, @$SO_FILESREF;
|
|
Install $ta_env $INSTALL_DIR, 'qagamei386.so';
|
|
}
|
|
if ($NO_VM eq 0)
|
|
{
|
|
Depends $vm_env 'qagame.qvm', '#qvmtools/q3lcc';
|
|
Depends $vm_env 'qagame.qvm', '#qvmtools/q3asm';
|
|
Program $vm_ta_env 'qagame.qvm', @$FILESREF, @$VM_FILESREF;
|
|
Install $vm_ta_env $INSTALL_DIR . '/vm', 'qagame.qvm';
|
|
}
|
|
}
|