From dccd7874a9436f8e6386fa10c757310554480f9d Mon Sep 17 00:00:00 2001 From: Lock l00p Date: Thu, 28 Sep 2023 23:56:30 +0000 Subject: [PATCH] Got it to build... somehow --- misc/tools/all/emscripten.subr | 161 --------------- misc/tools/all/xonotic.subr | 364 ++++++++++++++++++++++++++++++++- 2 files changed, 363 insertions(+), 162 deletions(-) diff --git a/misc/tools/all/emscripten.subr b/misc/tools/all/emscripten.subr index fb90f541..e69de29b 100755 --- a/misc/tools/all/emscripten.subr +++ b/misc/tools/all/emscripten.subr @@ -1,161 +0,0 @@ -#Check for Emscripten -cleand0=false -cleandp=false -cleanqcc=false -cleanqc=false -compiled0= -if [ -z $EMSDK ] -then - echo "EMSDK not installed/set up correctly, cloning and setting up temporarily" - mkdir -f .tmp - git clone "https://github.com/emscripten-core/emsdk" ".tmp/emsdk" - .tmp/emsdk install latest - .tmp/emsdk activate latest - . .tmp/emsdk/emsdk_env.sh - -fi - -export CC="emcc -sUSE_SDL=2 -sUSE_LIBJPEG=1" - -export MAKE="emmake make" -while :; do - case "$1" in - -0) - compiled0=true - shift - ;; - -1) - compiled0=false - shift - ;; - -c) - cleand0=true - cleandp=true - cleanqcc=true - cleanqc=true - shift - ;; - -qc) - cleanqc=true - shift - ;; - -d|-p|-r) - case "$1" in - -d) - debug=debug - ;; - -p) - debug=profile - ;; - -r) - debug=release - ;; - esac - export CC="$CC -g" - case "`$CC -dumpversion`" in - [5-9]*|[1-9][0-9]*|4.[3-9]*|4.[1-9][0-9]*) - # gcc 4.3 or higher - # -march=native is broken < 4.3 - if $CC -mtune=native -march=native misc/tools/conftest.c -o conftest >/dev/null 2>&1; then - export CC="$CC -mtune=native -march=native" - fi - ;; - esac - if [ -n "$WE_HATE_OUR_USERS" ]; then - export CC="$CC -fno-common" - fi - shift - ;; - *) - break - ;; - esac -done -TARGETS="sdl-$debug" -if [ x"`uname`" = x"Darwin" ]; then - export CC="$CC -fno-reorder-blocks" -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 - BAD_TARGETS=" " - shift -elif [ -n "$1" ]; then - BAD_TARGETS= - TARGETS_SAVE=$TARGETS - TARGETS= - for X in $1; do - case "$X" in - sdl) - TARGETS="$TARGETS sdl-$debug" - ;; - dedicated) - export MAKE="make" - export CC="gcc" - TARGETS="$TARGETS sv-$debug" - ;; - *) - BAD_TARGETS="$BAD_TARGETS $X" - ;; - esac - done - if [ -n "$TARGETS" ]; then # at least a valid client - shift - else # no valid client, let's assume this option is not meant to be a client then - TARGETS=$TARGETS_SAVE - BAD_TARGETS= - fi -fi -if [ -z "$MAKEFLAGS" ]; then - ncpus=`getconf _NPROCESSORS_ONLN 2>/dev/null || getconf NPROCESSORS_ONLN 2>/dev/null || echo 1` - if [ $ncpus -gt 1 ]; then - MAKEFLAGS=-j$ncpus - fi -elif echo $MAKEFLAGS | head -c1 | grep -qv -; then # MAKEFLAGS starts with a single letter option - MAKEFLAGS=-$(echo $MAKEFLAGS) # echo here and above will trim whitespaces -fi -# No cp commands, we want to use static linking instead. -export CC="$CC -I../../../../misc/builddeps/emscripten/d0_blind_id/include" -export CC="$CC -L../../../../misc/builddeps/emscripten/d0_blind_id/lib" -export CC="$CC -Wl,-rpath,../../../../misc/builddeps/emscripten/d0_blind_id/lib" -export CC="$CC -I../../../../misc/builddeps/emscripten/gmp/include" -export CC="$CC -L../../../../misc/builddeps/emscripten/gmp/lib" -export CC="$CC -Wl,-rpath,../../../../misc/builddeps/emscripten/gmp/lib" -MAKEFLAGS="$MAKEFLAGS DP_LINK_CRYPTO=shared DP_LINK_CRYPTO_RIJNDAEL=shared LIB_CRYPTO=../../../../misc/builddeps/emscripten/d0_blind_id/lib/libd0_blind_id.a LIB_CRYPTO+=../../../../misc/builddeps/emscripten/gmp/lib/libgmp.a LIB_CRYPTO_RIJNDAEL=../../../../misc/builddeps/emscripten/d0_blind_id/lib/libd0_rijndael.a" -compiled0=false - -if $compiled0; then - if $cleand0; then - if [ -f Makefile ]; then - verbose $MAKE $MAKEFLAGS distclean - fi - fi - if ! [ -f Makefile ]; then - verbose sh autogen.sh - verbose emconfigure ./configure - fi - verbose $MAKE $MAKEFLAGS -fi -verbose cd "$d0/gmqcc" -MAKE="make" -if $cleanqcc; then - verbose $MAKE $MAKEFLAGS clean -fi -if [ -n "$WE_HATE_OUR_USERS" ]; then - verbose $MAKE $MAKEFLAGS gmqcc.exe -else - verbose $MAKE $MAKEFLAGS gmqcc -fi - -if [ -n "$MSYSTEM" ]; then - DATAMAKE=mingw32-make -else - DATAMAKE=make -fi -verbose cd "$d0/data/xonotic-data.pk3dir" -if $cleanqc; then - verbose ${DATAMAKE} QCC="../../../../gmqcc/gmqcc" "$@" $MAKEFLAGS clean -fi -verbose ${DATAMAKE} QCC="../../../../gmqcc/gmqcc" "$@" $MAKEFLAGS -# 4 levels up: data, xonotic-data, qcsrc, server diff --git a/misc/tools/all/xonotic.subr b/misc/tools/all/xonotic.subr index 5876ccfa..5f30aee8 100755 --- a/misc/tools/all/xonotic.subr +++ b/misc/tools/all/xonotic.subr @@ -23,7 +23,369 @@ case "$cmd" in done ;; compile-emscripten) - misc/tools/all/emscripten.subr $1 + #Check for Emscripten + cleand0=false + cleandp=false + cleanqcc=false + cleanqc=false + compiled0= + debug=release + if [ -z $EMSDK ]; + then + echo "EMSDK not installed/set up correctly, cloning and setting up temporarily" + mkdir -p .tmp + if [ ! -d ".tmp/emsdk" ] ; then git clone "https://github.com/emscripten-core/emsdk" ".tmp/emsdk"; fi + .tmp/emsdk/emsdk install latest + .tmp/emsdk/emsdk activate latest + cd .tmp/emsdk + . ./emsdk_env.sh + cd ../.. + + fi + export CC="emcc" + export CC="$CC -DSUPPORTIPV6 -sUSE_SDL=2 -sUSE_LIBJPEG=1" + while :; do + case "$1" in + -0) + compiled0=true + shift + ;; + -1) + compiled0=false + shift + ;; + -c) + cleand0=true + cleandp=true + cleanqcc=true + cleanqc=true + shift + ;; + -qc) + cleanqc=true + shift + ;; + -d|-p|-r) + case "$1" in + -d) + debug=debug + ;; + -p) + debug=profile + ;; + -r) + debug=release + ;; + esac + export CC="$CC -g" + case "`$CC -dumpversion`" in + [5-9]*|[1-9][0-9]*|4.[3-9]*|4.[1-9][0-9]*) + # gcc 4.3 or higher + # -march=native is broken < 4.3 + if $CC -mtune=native -march=native misc/tools/conftest.c -o conftest >/dev/null 2>&1; then + export CC="$CC -mtune=native -march=native" + fi + ;; + esac + if [ -n "$WE_HATE_OUR_USERS" ]; then + export CC="$CC -fno-common" + fi + shift + ;; + *) + break + ;; + esac + done + + TARGETS="sv-$debug sdl-$debug" + if [ x"`uname`" = x"Darwin" ]; then + export CC="$CC -fno-reorder-blocks" + 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 + BAD_TARGETS=" " + shift + elif [ -n "$1" ]; then + BAD_TARGETS= + TARGETS_SAVE=$TARGETS + TARGETS= + for X in $1; do + case "$X" in + sdl) + TARGETS="$TARGETS sdl-$debug" + ;; + dedicated) + TARGETS="$TARGETS sv-$debug" + ;; + *) + BAD_TARGETS="$BAD_TARGETS $X" + ;; + esac + done + if [ -n "$TARGETS" ]; then # at least a valid client + shift + else # no valid client, let's assume this option is not meant to be a client then + TARGETS=$TARGETS_SAVE + BAD_TARGETS= + fi + fi + + if [ -z "$MAKE" ]; then + MAKE=make + fi + + if [ -z "$MAKEFLAGS" ]; then + 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" + fi + elif echo $MAKEFLAGS | head -c1 | grep -qv -; then # MAKEFLAGS starts with a single letter option + MAKEFLAGS=-$(echo $MAKEFLAGS) # echo here and above will trim whitespaces + fi + + if [ -n "$WE_HATE_OUR_USERS" ]; then + # win32: use SDL2 + case `uname -m` in + x86_64) + MAKEFLAGS="$MAKEFLAGS SDL_CONFIG=$d0/misc/builddeps/win64/sdl/bin/sdl2-config" + ;; + *) + MAKEFLAGS="$MAKEFLAGS SDL_CONFIG=$d0/misc/builddeps/win32/sdl/bin/sdl2-config" + ;; + esac + + # 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 "" + msg "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + msg "~~~~~~~~~~ COMPILER ~~~~~~~~~~" + msg "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + msg "~~~~~~~~~~~~~~_...._~~~~~~~~~~" + msg "~~~~~~~~~~~,-' \\\`-._~~~~~~" + msg "~~~~~~~~~~/ --. >< \\~~~~~" + msg "~~~~~~~~~/ (*)> -<: \\~~~~" + msg "~~~~~~~~~( ^~-' (*) )~~~~" + msg "~~~~~~~~~\\ ^+-_/ |~~~~" + msg "~~~~~~~~~~\\ {vvv} |~~~~" + msg "~~~~~~~~~~,\\ , {^^^},/~~~~~" + msg "~~~~~~~~,/ \`---.....-'~~W~~~~" + msg "~~~~~~,/ \\_____/_\\_W~~/~~~~~" + msg "~~~~~/ /~~~\\__/~~~~~~" + msg "~~~~/ /~~~~~~~~~~~~~~" + msg "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + msg "~~~~~~~ Y U NO COMPILE ~~~~~~~" + msg "~~~~~~~~~~~~ CODE ~~~~~~~~~~~~" + msg "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + msg "" + exit 1 + fi + rm -f conftest conftest.wasm + + verbose cd "$d0/d0_blind_id" + if [ -z "$compiled0" ]; then + # In doubt, compile. + compiled0=true + + # compilation of crypto library failed + # use binaries then, if we can... + mkdir -p .libs + if [ -n "$WE_HATE_OUR_USERS" ]; then + case `uname -m` in + x86_64) + verbose cp "$d0/misc/buildfiles/win64/libd0_blind_id"-* .libs/ + verbose cp "$d0/misc/buildfiles/win64/libd0_rijndael"-* .libs/ + verbose cp "$d0/misc/buildfiles/win64/libgmp"-* .libs/ + compiled0=false + ;; + *) + verbose cp "$d0/misc/buildfiles/win32/libd0_blind_id"-* .libs/ + verbose cp "$d0/misc/buildfiles/win32/libd0_rijndael"-* .libs/ + verbose cp "$d0/misc/buildfiles/win32/libgmp"-* .libs/ + compiled0=false + ;; + esac + else + case "`uname`" in + Linux) + case `uname -m` in + *86) + # No cp commands, we want to use static linking instead. + export CC="$CC -I../../../../misc/builddeps/emscripten/d0_blind_id/include" + export CC="$CC -L../../../../misc/builddeps/emscripten/d0_blind_id/lib" + export CC="$CC -Wl,-rpath,../../../../misc/builddeps/emscripten/d0_blind_id/lib" + export CC="$CC -I../../../../misc/builddeps/emscripten/gmp/include" + export CC="$CC -L../../../../misc/builddeps/emscripten/gmp/lib" + export CC="$CC -Wl,-rpath,../../../../misc/builddeps/emscripten/gmp/lib" + MAKEFLAGS="$MAKEFLAGS DP_LINK_CRYPTO=shared DP_LINK_CRYPTO_RIJNDAEL=shared LIB_CRYPTO=../../../../misc/builddeps/emscripten/d0_blind_id/lib/libd0_blind_id.a LIB_CRYPTO+=../../../../misc/builddeps/emscripten/gmp/lib/libgmp.a LIB_CRYPTO_RIJNDAEL=../../../../misc/builddeps/emscripten/d0_blind_id/lib/libd0_rijndael.a" + compiled0=false + ;; + *) + export CC="$CC -I../../../../misc/builddeps/emscripten/d0_blind_id/include" + export CC="$CC -L../../../../misc/builddeps/emscripten/d0_blind_id/lib" + export CC="$CC -Wl,-rpath,../../../../misc/builddeps/emscripten/d0_blind_id/lib" + export CC="$CC -I../../../../misc/builddeps/emscripten/gmp/include" + export CC="$CC -L../../../../misc/builddeps/emscripten/gmp/lib" + export CC="$CC -Wl,-rpath,../../../../misc/builddeps/emscripten/gmp/lib" + MAKEFLAGS="$MAKEFLAGS DP_LINK_CRYPTO=shared DP_LINK_CRYPTO_RIJNDAEL=shared LIB_CRYPTO=../../../../misc/builddeps/emscripten/d0_blind_id/lib/libd0_blind_id.a LIB_CRYPTO+=../../../../misc/builddeps/emscripten/gmp/lib/libgmp.a LIB_CRYPTO_RIJNDAEL=../../../../misc/builddeps/emscripten/d0_blind_id/lib/libd0_rijndael.a" + compiled0=false + ;; + esac + ;; + Darwin) + verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_blind_id".* .libs/ + verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_rijndael".* .libs/ + compiled0=false + ;; + *) + msg "Always need to compile libd0_blind_id on `uname`." + ;; + esac + fi + fi + if $compiled0; then + if $cleand0; then + if [ -f Makefile ]; then + verbose $MAKE $MAKEFLAGS distclean + fi + fi + if ! [ -f Makefile ]; then + verbose sh autogen.sh + verbose emconfigure ./configure + fi + verbose $MAKE $MAKEFLAGS + fi + #switch back to normal to compile gmqcc + verbose cd "$d0/gmqcc" + if $cleanqcc; then + verbose $MAKE $MAKEFLAGS clean + fi + if [ -n "$WE_HATE_OUR_USERS" ]; then + verbose $MAKE CC=gcc 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 gmqcc.exe + else + verbose $MAKE CC=gcc 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 gmqcc + fi + + if [ -n "$MSYSTEM" ]; then + DATAMAKE=mingw32-make + else + DATAMAKE=$MAKE + fi + verbose cd "$d0/data/xonotic-data.pk3dir" + if $cleanqc; then + verbose ${DATAMAKE} QCC="../../../../gmqcc/gmqcc" "$@" $MAKEFLAGS clean + fi + verbose ${DATAMAKE} QCC="../../../../gmqcc/gmqcc" "$@" $MAKEFLAGS + # 4 levels up: data, xonotic-data, qcsrc, server + + verbose cd "$d0/darkplaces" + if [ x"$BAD_TARGETS" = x" " ]; then + $ECHO "Warning: invalid empty client, default clients will be used." + fi + if $cleandp; then + verbose emmake make $MAKEFLAGS clean + fi + for T in $TARGETS; do + verbose emmake make $MAKEFLAGS DP_SSE=0 CFLAGS_EXTRA="-I../../../../misc/builddeps/emscripten/d0_blind_id/include -L../../../../misc/builddeps/emscripten/d0_blind_id/lib -Wl,-rpath,../../../../misc/builddeps/emscripten/d0_blind_id/lib -I../../../../misc/builddeps/emscripten/gmp/include -L../../../../misc/builddeps/emscripten/gmp/lib -Wl,-rpath,../../../../misc/builddeps/emscripten/gmp/lib -sUSE_SDL=2 -sUSE_ZLIB=1 -sUSE_LIBJPEG=1 -sALLOW_MEMORY_GROWTH -sINITIAL_MEMORY=100MB" ftype=.o LDFLAGS_EXTRA="-sINITIAL_MEMORY=100MB" STRIP=: "$@" "$T" + done + for T in $BAD_TARGETS; do + $ECHO "Warning: discarded invalid client $T." + done + + verbose "$SELF" update-maps + ;; + run) + if [ -n "$WE_HATE_OUR_USERS" ]; then + case `uname -m` in + x86_64) + export PATH="$d0/misc/buildfiles/win64:$d0/d0_blind_id/.libs:$PATH" + ;; + *) + export PATH="$d0/misc/buildfiles/win32:$d0/d0_blind_id/.libs:$PATH" + ;; + esac + elif [ x"`uname`" = x"Darwin" ]; then + export DYLD_LIBRARY_PATH="$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS:$d0/d0_blind_id/.libs" + export DYLD_FRAMEWORK_PATH="$d0/misc/buildfiles/osx/Xonotic.app/Contents/Frameworks" + else + export LD_LIBRARY_PATH="$d0/d0_blind_id/.libs${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" + fi + + client=-sdl + USE_RLWRAP=no + case "$1" in + dedicated) + client=-$1 + USE_RLWRAP= + shift + ;; + sdl) + shift + ;; + esac + + if ! [ -x "darkplaces/darkplaces$client" ]; then + if [ -x "darkplaces/darkplaces$client.exe" ]; then + client=$client.exe + else + $ECHO "Client darkplaces/darkplaces$client not found, aborting" + exit 1 + fi + fi + set -- "darkplaces/darkplaces$client" -xonotic "$@" + + binary=$1 + + if [ x"$USE_GDB" = x"yes" ]; then + set -- gdb --args "$@" + 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 + 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 + #elif yesno "You did not want to examine the core dump. Do you want to provide it - including your DarkPlaces checkout - to the Xonotic developers?"; then + # tar cvzf xonotic.core.tar.gz xonotic.core darkplaces/*.c darkplaces/*.h + # # somehow send it + # rm -f xonotic.core.tar.gz + else + $ECHO "The core dump can be examined later by" + $ECHO " gdb $binary xonotic.core" + fi + exit 1 + fi ;; compile) cleand0=false -- 2.39.2