#!/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 \ -Wno-gnu-zero-variadic-macro-arguments" 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 engineapi.c ent.c extmalloc.c fixes.c fov.c gamedata.c gameinfo.c hook.c kv.c l4dwarp.c nosleep.c portalcolours.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 $HOSTCC -O2 -fuse-ld=lld $warnings -D_FILE_OFFSET_BITS=64 -o .build/mkentprops \ src/build/mkentprops.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 .build/mkentprops gamedata/entprops.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