X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fxonotic.git;a=blobdiff_plain;f=misc%2Ftools%2Fall%2Fxonotic.subr;h=570305f8e23c3d0c00cd98aefa2e2b7fe9b8ec08;hp=c8b7f8f17dae6128324dd357d21ac1892c713347;hb=88f17a844b514babfa35f9a5b453654bbfaf701a;hpb=49de16c6f7d242cb8ea16223bb0bf3c747ae56b8 diff --git a/misc/tools/all/xonotic.subr b/misc/tools/all/xonotic.subr index c8b7f8f1..570305f8 100644 --- a/misc/tools/all/xonotic.subr +++ b/misc/tools/all/xonotic.subr @@ -3,6 +3,24 @@ case "$cmd" in update-maps) misc/tools/xonotic-map-compiler-autobuild download ;; + compile-map) + if [ $# -eq 0 ] ; then + msg "Usage: ./all compile-map mapname1 mapname2 mapname3" + msg "For example: ./all compile-map dance xoylent" + fi + if ! [ -f "netradiant/install/q3map2" ] ; then + msg "q3map2 needed! Building netradiant..." + make -C netradiant BUILD=native install/q3map2 + fi + for mapfile in "$@"; do + mapfile="data/xonotic-maps.pk3dir/maps/$mapfile.map" + if [ ! -f "$mapfile" ] ; then + msg "ERROR, $mapfile not found!" + else + verbose measure_time misc/tools/xonotic-map-compiler-optionsfile "$mapfile" + fi + done + ;; compile) cleand0=false cleandp=false @@ -10,7 +28,6 @@ case "$cmd" in cleanqc=false compiled0=false debug=debug - snowleopardhack=false if [ -z "$CC" ]; then export CC="gcc" fi @@ -28,6 +45,10 @@ case "$cmd" in cleanqc=true shift ;; + -qc) + cleanqc=true + shift + ;; -r|-p) case "$1" in -p) @@ -57,23 +78,14 @@ case "$cmd" in ;; esac done - if [ -n "$WE_HATE_OUR_USERS" ]; then - TARGETS="sv-$debug cl-$debug" - elif [ x"`uname`" = x"Darwin" ]; then - case "`uname -r`" in - ?.*) - TARGETS="sv-$debug cl-$debug sdl-$debug" - ;; - *) - # AGL cannot be compiled on systems with a kernel > 10.x (Snow Leopard) - snowleopardhack=true - TARGETS="sv-$debug sdl-$debug" - ;; - esac - export CC="$CC -fno-reorder-blocks -I$PWD/misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL.framework/Headers -F$PWD/misc/buildfiles/osx/Xonotic.app/Contents/Frameworks" + + if [ x"`uname`" = x"Darwin" ]; then + TARGETS="sv-$debug sdl-$debug" + export CC="$CC -fno-reorder-blocks" else TARGETS="sv-$debug cl-$debug sdl-$debug" fi + if [ $# -gt 0 ] && [ x"$1" = x"" ]; then # if we give the command make the arg "", it will surely fail (invalid filename), # so better handle it as an empty client option @@ -86,19 +98,13 @@ case "$cmd" in for X in $1; do case "$X" in sdl) - TARGETS="$TARGETS sdl-debug" - ;; - agl) - TARGETS="$TARGETS cl-debug" - if $snowleopardhack; then - export CC="$CC -arch i386" - fi + TARGETS="$TARGETS sdl-$debug" ;; glx|wgl) - TARGETS="$TARGETS cl-debug" + TARGETS="$TARGETS cl-$debug" ;; dedicated) - TARGETS="$TARGETS sv-debug" + TARGETS="$TARGETS sv-$debug" ;; *) BAD_TARGETS="$BAD_TARGETS $X" @@ -112,18 +118,43 @@ case "$cmd" in BAD_TARGETS= fi fi + + if [ -z "$MAKE" ]; then + MAKE=make + fi + if [ -z "$MAKEFLAGS" ]; then - if [ -f /proc/cpuinfo ]; then - ncpus=$((`grep -c '^processor :' /proc/cpuinfo || true`+0)) - if [ $ncpus -gt 1 ]; then - MAKEFLAGS=-j$ncpus - fi + ncpus=`getconf _NPROCESSORS_ONLN 2>/dev/null || getconf NPROCESSORS_ONLN 2>/dev/null || echo 1` + if [ $ncpus -gt 1 ]; then + MAKEFLAGS=-j$ncpus fi if [ -n "$WE_HATE_OUR_USERS" ]; then - MAKEFLAGS="$MAKEFLAGS DP_MAKE_TARGET=mingw LIB_JPEG= CFLAGS_LIBJPEG=" + MAKEFLAGS="$MAKEFLAGS DP_MAKE_TARGET=mingw" fi fi + if [ -n "$WE_HATE_OUR_USERS" ]; then + # win32: use SDL2 + MAKEFLAGS="$MAKEFLAGS SDL_CONFIG=$d0/misc/builddeps/win32/sdl/bin/sdl2-config" + + # win32: don't rely on jpeg includes + MAKEFLAGS="$MAKEFLAGS LIB_JPEG= CFLAGS_LIBJPEG=" + fi + + if [ x"`uname`" = x"Darwin" ]; then + # osx: use SDL2 + f=$d0/misc/buildfiles/osx/Xonotic.app/Contents/Frameworks + MAKEFLAGS="$MAKEFLAGS SDLCONFIG_MACOSXCFLAGS=-I$f/SDL2.framework/Headers SDLCONFIG_MACOSXLIBS=-F$f SDLCONFIG_MACOSXLIBS+=-framework SDLCONFIG_MACOSXLIBS+=SDL2 SDLCONFIG_MACOSXLIBS+=-framework SDLCONFIG_MACOSXLIBS+=Cocoa SDLCONFIG_MACOSXLIBS+=-I$f/SDL2.framework/Headers SDLCONFIG_MACOSXSTATICLIBS=-F$f SDLCONFIG_MACOSXSTATICLIBS+=-framework SDLCONFIG_MACOSXSTATICLIBS+=SDL2 SDLCONFIG_MACOSXSTATICLIBS+=-framework SDLCONFIG_MACOSXSTATICLIBS+=Cocoa SDLCONFIG_MACOSXSTATICLIBS+=-I$f/SDL2.framework/Headers" + fi + + # workaround ARM issue in DP's makefile.inc + case `uname -m` in + x86_64|*86) + ;; + *) + MAKEFLAGS="$MAKEFLAGS CFLAGS_SSE= CFLAGS_SSE2=" + ;; + esac if ! verbose $CC misc/tools/conftest.c -o conftest; then msg "" @@ -165,16 +196,24 @@ case "$cmd" in Linux) case `uname -m` in x86_64) - #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_blind_id".* .libs/ - #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_rijndael".* .libs/ - #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libgmp".* .libs/ - MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/ DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/" + # No cp commands, we want to use static linking instead. + export CC="$CC -I../../../../misc/builddeps/linux64/d0_blind_id/include" + export CC="$CC -L../../../../misc/builddeps/linux64/d0_blind_id/lib" + export CC="$CC -Wl,-rpath,../../../../misc/builddeps/linux64/d0_blind_id/lib" + export CC="$CC -I../../../../misc/builddeps/linux64/gmp/include" + export CC="$CC -L../../../../misc/builddeps/linux64/gmp/lib" + export CC="$CC -Wl,-rpath,../../../../misc/builddeps/linux64/gmp/lib" + MAKEFLAGS="$MAKEFLAGS DP_LINK_CRYPTO=shared DP_LINK_CRYPTO_RIJNDAEL=shared LIB_CRYPTO=../../../../misc/builddeps/linux64/d0_blind_id/lib/libd0_blind_id.a LIB_CRYPTO+=../../../../misc/builddeps/linux64/gmp/lib/libgmp.a LIB_CRYPTO_RIJNDAEL=../../../../misc/builddeps/linux64/d0_blind_id/lib/libd0_rijndael.a" ;; *86) - #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_blind_id".* .libs/ - #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_rijndael".* .libs/ - #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libgmp".* .libs/ - MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/ DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/" + # No cp commands, we want to use static linking instead. + export CC="$CC -I../../../../misc/builddeps/linux32/d0_blind_id/include" + export CC="$CC -L../../../../misc/builddeps/linux32/d0_blind_id/lib" + export CC="$CC -Wl,-rpath,../../../../misc/builddeps/linux32/d0_blind_id/lib" + export CC="$CC -I../../../../misc/builddeps/linux32/gmp/include" + export CC="$CC -L../../../../misc/builddeps/linux32/gmp/lib" + export CC="$CC -Wl,-rpath,../../../../misc/builddeps/linux32/gmp/lib" + MAKEFLAGS="$MAKEFLAGS DP_LINK_CRYPTO=shared DP_LINK_CRYPTO_RIJNDAEL=shared LIB_CRYPTO=../../../../misc/builddeps/linux32/d0_blind_id/lib/libd0_blind_id.a LIB_CRYPTO+=../../../../misc/builddeps/linux32/gmp/lib/libgmp.a LIB_CRYPTO_RIJNDAEL=../../../../misc/builddeps/linux32/d0_blind_id/lib/libd0_rijndael.a" ;; *) compiled0=true @@ -194,27 +233,36 @@ case "$cmd" in if $compiled0; then if $cleand0; then if [ -f Makefile ]; then - verbose make $MAKEFLAGS distclean + verbose $MAKE $MAKEFLAGS distclean fi fi if ! [ -f Makefile ]; then verbose sh autogen.sh verbose ./configure fi - verbose make $MAKEFLAGS + verbose $MAKE $MAKEFLAGS fi - verbose cd "$d0/fteqcc" + verbose cd "$d0/gmqcc" if $cleanqcc; then - verbose make $MAKEFLAGS clean + verbose $MAKE $MAKEFLAGS clean + fi + if [ -n "$WE_HATE_OUR_USERS" ]; then + verbose $MAKE $MAKEFLAGS gmqcc.exe + else + verbose $MAKE $MAKEFLAGS gmqcc fi - verbose make $MAKEFLAGS + if [ -n "$MSYSTEM" ]; then + DATAMAKE=mingw32-make + else + DATAMAKE=$MAKE + fi verbose cd "$d0/data/xonotic-data.pk3dir" if $cleanqc; then - verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS clean + verbose ${DATAMAKE} QCC="../../../../gmqcc/gmqcc" "$@" $MAKEFLAGS clean fi - verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS + verbose ${DATAMAKE} QCC="../../../../gmqcc/gmqcc" "$@" $MAKEFLAGS # 4 levels up: data, xonotic-data, qcsrc, server verbose cd "$d0/darkplaces" @@ -222,10 +270,10 @@ case "$cmd" in $ECHO "Warning: invalid empty client, default clients will be used." fi if $cleandp; then - verbose make $MAKEFLAGS clean + verbose $MAKE $MAKEFLAGS clean fi for T in $TARGETS; do - verbose make $MAKEFLAGS STRIP=: "$@" "$T" + verbose $MAKE $MAKEFLAGS STRIP=: "$@" "$T" done for T in $BAD_TARGETS; do $ECHO "Warning: discarded invalid client $T." @@ -242,15 +290,21 @@ case "$cmd" in export DYLD_FRAMEWORK_PATH="$d0/misc/buildfiles/osx/Xonotic.app/Contents/Frameworks" client=-sdl else - export LD_LIBRARY_PATH="$d0/d0_blind_id/.libs" + export LD_LIBRARY_PATH="$d0/d0_blind_id/.libs${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" client=-sdl fi case "$1" in - sdl|glx|agl|dedicated) + dedicated) + client=-$1 + shift + ;; + sdl|glx) + USE_RLWRAP=no client=-$1 shift ;; wgl) + USE_RLWRAP=no client= shift ;; @@ -278,13 +332,18 @@ case "$cmd" in if [ x"$USE_GDB" = x"yes" ]; then set -- gdb --args "$@" - elif [ x"$USE_GDB" = x"core" ] && which gdb >/dev/null 2>&1; then + USE_RLWRAP=no + elif [ x"$USE_GDB" = x"core" ]; then set -- gdb --batch -x savecore.gdb --args "$@" + USE_RLWRAP=no elif which catchsegv >/dev/null 2>&1; then set -- catchsegv "$@" fi + if [ x"$USE_RLWRAP" != x"no" ] && which rlwrap >/dev/null 2>&1; then + set -- rlwrap -A -g '^quit' -q "\"" -s 10000 -S ']' -w 100 "$@" + fi rm -f xonotic.core - "$@" || true + verbose measure_time "$@" || true if [ -f xonotic.core ]; then if yesno "The program has CRASHED. Do you want to examine the core dump?"; then gdb "$binary" xonotic.core @@ -300,11 +359,21 @@ case "$cmd" in fi ;; help) - $ECHO " $SELF compile [-c] [-r|-p] [-0] [sdl|glx|wgl|agl|dedicated]" + $ECHO " $SELF compile [-c] [-qc] [-r|-p] [-0] [sdl|glx|wgl|dedicated]" $ECHO " $SELF update-maps" - $ECHO " $SELF run [sdl|glx|wgl|agl|dedicated] options..." + $ECHO " $SELF run [sdl|glx|wgl|dedicated] options..." + $ECHO " $SELF compile-map mapname1 mapname2... (e.g. \"./all compile-map dance drain fuse\")" handled=false ;; + serverbench) + # TODO(rpolzer): Why does :anticheat: output differ? Total game time differs? Why? + verbose "$SELF" run "$@" -noconfig -nohome +exec serverbench.cfg |\ + tee /dev/stderr |\ + grep '^:' |\ + grep -v '^:gamestart:' |\ + grep -v '^:anticheat:' |\ + md5sum + ;; *) handled=false ;;