summaryrefslogtreecommitdiffhomepage
path: root/compile
blob: 76dc6384da2e7639a8ecc20a622346f8b45f6131 (plain)
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
#!/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*)
		echo "You're on Windows, idiot! Running compile.bat for you."
		exec cmd /c compile.bat ;;
esac

mkdir -p .build/include

: "${CC:=clang --target=-i686-pc-linux-gnu -fuse-ld=lld}"
: "${HOSTCC:=clang -fuse-ld=lld}"

warnings="-Wall -pedantic -Wno-parentheses -Wno-missing-braces"

dbg=0
if [ "$dbg" = 1 ]; then
	cflags="-Og -g3"
	ldflags="-Og -g3"
else
	cflags="-O2"
	ldflags="-O2 -s"
fi

objs=
cc() {
	objs="$objs .build/${1%%.c}.o"
	$CC -m32 -c -flto -fpic $cflags $warnings -I.build/include \
		-D_FILE_OFFSET_BITS=64 -DFILE_BASENAME="${1%%.c}" \
		-o ".build/${1%%.c}.o" "src/$1"
}

ld() {
	$CC -m32 -shared -flto -fpic -fno-ident -fuse-ld=lld $ldflags \
		-L.build -ldl -ltier0 -lvstdlib -o sst.so$objs
}

src="\
	autojump.c
	con_.c
	demorec.c
	extmalloc.c
	fixes.c
	gamedata.c
	gameinfo.c
	hook.c
	kv.c
	nosleep.c
	sst.c
	x86.c"
if [ "$dbg" = 1 ]; then src="$src \
	dbg.c
	udis86.c"
fi

$HOSTCC -O2 -fuse-ld=lld $warnings -D_FILE_OFFSET_BITS=64 -o .build/codegen \
		src/build/codegen.c src/build/cmeta.c
$HOSTCC -O2 -fuse-ld=lld $warnings -D_FILE_OFFSET_BITS=64 -o .build/mkgamedata \
		src/build/mkgamedata.c src/kv.c
.build/codegen `for s in $src; do echo "src/$s"; done`
.build/mkgamedata gamedata/engine.kv gamedata/gamelib.kv gamedata/inputsystem.kv
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 -include test/test.h -o .build/bitbuf.test test/bitbuf.test.c
.build/bitbuf.test
# skipping this test on linux for now, since inline hooks aren't compiled in
#$HOSTCC -m32 -O2 -g3 -include test/test.h -o .build/hook.test test/hook.test.c
#.build/hook.test
$HOSTCC -O2 -g3 -include test/test.h -o .build/kv.test test/kv.test.c
.build/kv.test

# vi: sw=4 tw=4 noet tw=80 cc=80