blob: ea00965d4a1ba9b4ee79e1abe96fbc1260777d07 (
plain) (
blame)
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
#!/bin/sh -e
# This file is dedicated to the public domain.
case "`uname -s`" in
# weird people using Windows Bash might type ./compile, help them out :)
*NT*) # msys2 or busybox-w32
echo "You're on Windows, idiot! Running compile.bat for you.">&2
exec cmd /c compile.bat ;;
esac
case "`uname -r`" in
*Microsoft*)
echo "NOTE: building inside WSL. Use compile.bat to build for Windows!">&2
esac
mkdir -p .build/include
: "${CC:=clang --target=-i686-pc-linux-gnu}"
: "${HOSTCC:=clang}"
warnings="-Wall -pedantic -Wno-parentheses -Wno-missing-braces \
-Wno-gnu-zero-variadic-macro-arguments -Werror=implicit-function-declaration \
-Werror=vla"
stdflags="-std=c2x -D_DEFAULT_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64"
dbg=0
if [ "$1" = "dbg" ]; then dbg=1; fi
if [ "$dbg" = 1 ]; then
cflags="-O0 -g3 -masm=intel -fsanitize-trap=undefined -DSST_DBG"
ldflags="-O0 -g3"
else
cflags="-flto -O2 -fvisibility=hidden -masm=intel -ffreestanding"
ldflags="-flto -O2 -s -ffreestanding"
fi
objs=
cc() {
_bn="`basename "$1"`"
objs="$objs .build/$_bn.o"
_mn=" -DMODULE_NAME=${_bn%%.*}"
# ugly annoying special case
if [ "$_mn" = " -DMODULE_NAME=con_" ]; then _mn=" -DMODULE_NAME=con"
elif [ "$_mn" = "-DMODULE_NAME=sst" ]; then _mn=; fi
$CC -c -fpic -fno-ident $cflags $warnings -include src/1.h \
-I.build/include $stdflags$_mn -o ".build/${_bn%%.c}.o" "src/$1"
}
ld() {
$CC -shared -fpic -fuse-ld=lld $ldflags -L.build -ldl \
-ltier0 -lvstdlib -o .build/sst.so$objs
mv .build/sst.so sst.so
}
src="\
ac.c
alias.c
autojump.c
bind.c
chatrate.c
chunklets/fastspin.c
chunklets/msg.c
chunklets/x86.c
clientcon.c
con_.c
con_.S
crypto.c
democustom.c
demorec.c
engineapi.c
ent.c
errmsg.c
extmalloc.c
fastfwd.c
fixes.c
fov.c
gameinfo.c
gameserver.c
hexcolour.c
hook.c
hud.c
inputhud.c
kvsys.c
l4daddon.c
l4dmm.c
l4dreset.c
l4dwarp.c
nosleep.c
os.c
portalcolours.c
speedrun.c
sst.c
trace.c
xhair.c"
if [ "$dbg" = 1 ]; then src="$src \
dbg.c
udis86.c"
fi
$HOSTCC -O2 -fuse-ld=lld $warnings $stdflags \
-o .build/gluegen src/build/gluegen .c src/build/cmeta.c src/os.c
$HOSTCC -O2 -fuse-ld=lld $warnings $stdflags \
-o .build/mkgamedata src/build/mkgamedata.c src/os.c
$HOSTCC -O2 -fuse-ld=lld $warnings $stdflags \
-o .build/mkentprops src/build/mkentprops.c src/os.c
# pass only .c files to gluegen (ignore .S)
.build/gluegen `for s in $src; do if [ "${s##*.}" = "c" ]; then echo "src/$s"; fi; done`
.build/mkgamedata gamedata/engine.txt gamedata/gamelib.txt gamedata/inputsystem.txt \
gamedata/matchmaking.txt gamedata/vgui2.txt gamedata/vguimatsurface.txt gamedata/vphysics.txt
.build/mkentprops gamedata/entprops.txt
for s in $src; do cc "$s"; done
$CC -shared -fpic -fuse-ld=lld -O0 -w -o .build/libtier0.so src/stubs/tier0.c
$CC -shared -fpic -fuse-ld=lld -O0 -w -o .build/libvstdlib.so src/stubs/vstdlib.c
ld
$HOSTCC -O2 -g3 $warnings $stdflags -include test/test.h -o .build/bitbuf.test test/bitbuf.test.c
.build/bitbuf.test
$HOSTCC -O2 -g3 $warnings $stdflags -include test/test.h -o .build/x86.test test/x86.test.c
.build/x86.test
# vi: sw=4 tw=4 noet tw=80 cc=80
|