1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
# 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';
}
|