compile 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. #!/bin/sh -e
  2. # This file is dedicated to the public domain.
  3. case "`uname -s`" in
  4. # weird people using Windows Bash might type ./compile, help them out :)
  5. *NT*) # msys2 or busybox-w32
  6. echo "You're on Windows, idiot! Running compile.bat for you.">&2
  7. exec cmd /c compile.bat ;;
  8. esac
  9. case "`uname -r`" in
  10. *Microsoft*)
  11. echo "NOTE: building inside WSL. Use compile.bat to build for Windows!">&2
  12. esac
  13. mkdir -p .build/include
  14. : "${CC:=clang --target=-i686-pc-linux-gnu}"
  15. : "${HOSTCC:=clang}"
  16. warnings="-Wall -pedantic -Wno-parentheses -Wno-missing-braces \
  17. -Wno-gnu-zero-variadic-macro-arguments -Werror=implicit-function-declaration \
  18. -Werror=vla"
  19. stdflags="-std=c2x -D_DEFAULT_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64"
  20. dbg=0
  21. if [ "$dbg" = 1 ]; then
  22. cflags="-O0 -g3 -fsanitize-trap=undefined -DSST_DBG"
  23. ldflags="-O0 -g3"
  24. else
  25. cflags="-O2 -fvisibility=hidden"
  26. ldflags="-O2 -s"
  27. fi
  28. objs=
  29. cc() {
  30. _bn="`basename "$1"`"
  31. objs="$objs .build/${_bn%%.c}.o"
  32. _mn=" -DMODULE_NAME=${_bn%%.c}"
  33. # ugly annoying special case
  34. if [ "$_mn" = " -DMODULE_NAME=con_" ]; then _mn=" -DMODULE_NAME=con"
  35. elif [ "$_mn" = "-DMODULE_NAME=sst" ]; then _mn=; fi
  36. $CC -c -flto -fpic -fno-ident $cflags $warnings -I.build/include \
  37. $stdflags$_mn -o ".build/${_bn%%.c}.o" "src/$1"
  38. }
  39. ld() {
  40. $CC -shared -flto -fpic -fuse-ld=lld $ldflags -L.build -ldl \
  41. -ltier0 -lvstdlib -o .build/sst.so$objs
  42. mv .build/sst.so sst.so
  43. }
  44. src="\
  45. ac.c
  46. alias.c
  47. autojump.c
  48. bind.c
  49. chatrate.c
  50. chunklets/fastspin.c
  51. chunklets/msg.c
  52. clientcon.c
  53. con_.c
  54. crypto.c
  55. democustom.c
  56. demorec.c
  57. engineapi.c
  58. ent.c
  59. errmsg.c
  60. extmalloc.c
  61. fastfwd.c
  62. fixes.c
  63. fov.c
  64. gameinfo.c
  65. gameserver.c
  66. hexcolour.c
  67. hook.c
  68. hud.c
  69. inputhud.c
  70. kvsys.c
  71. l4daddon.c
  72. l4dmm.c
  73. l4dreset.c
  74. l4dwarp.c
  75. nosleep.c
  76. os.c
  77. portalcolours.c
  78. sst.c
  79. trace.c
  80. x86.c
  81. xhair.c"
  82. if [ "$dbg" = 1 ]; then src="$src \
  83. dbg.c
  84. udis86.c"
  85. fi
  86. $HOSTCC -O2 -fuse-ld=lld $warnings $stdflags \
  87. -o .build/gluegen src/build/gluegen .c src/build/cmeta.c src/os.c
  88. $HOSTCC -O2 -fuse-ld=lld $warnings $stdflags \
  89. -o .build/mkgamedata src/build/mkgamedata.c src/os.c
  90. $HOSTCC -O2 -fuse-ld=lld $warnings $stdflags \
  91. -o .build/mkentprops src/build/mkentprops.c src/os.c
  92. .build/gluegen `for s in $src; do echo "src/$s"; done`
  93. .build/mkgamedata gamedata/engine.txt gamedata/gamelib.txt gamedata/inputsystem.txt \
  94. gamedata/matchmaking.txt gamedata/vgui2.txt gamedata/vguimatsurface.txt
  95. .build/mkentprops gamedata/entprops.txt
  96. for s in $src; do cc "$s"; done
  97. $CC -shared -fpic -fuse-ld=lld -O0 -w -o .build/libtier0.so src/stubs/tier0.c
  98. $CC -shared -fpic -fuse-ld=lld -O0 -w -o .build/libvstdlib.so src/stubs/vstdlib.c
  99. ld
  100. $HOSTCC -O2 -g3 $warnings $stdflags -include test/test.h -o .build/bitbuf.test test/bitbuf.test.c
  101. .build/bitbuf.test
  102. # XXX: skipping this test on linux for now but should enable when we can test it
  103. #$HOSTCC -m32 -O2 -g3 -include test/test.h -o .build/hook.test test/hook.test.c
  104. #.build/hook.test
  105. $HOSTCC -O2 -g3 $warnings $stdflags -include test/test.h -o .build/kv.test test/kv.test.c
  106. .build/kv.test
  107. $HOSTCC -O2 -g3 $warnings $stdflags -include test/test.h -o .build/x86.test test/x86.test.c
  108. .build/x86.test
  109. # vi: sw=4 tw=4 noet tw=80 cc=80