mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-15 23:40:29 +02:00
The GL contexts' CreateDrawContext made the thin3d presets and ContextReset made them again, leaking the first set on every context reset. Only ContextReset makes them now. The software renderer draws the same frame dumps on arm64 as on x86-64, so the frametests run on the arm64 runner too. b.sh --aarch64 and setup-cross.sh aarch64 give a headless build to run them under qemu locally.
160 lines
5.4 KiB
Bash
Executable File
160 lines
5.4 KiB
Bash
Executable File
#!/bin/bash
|
|
CMAKE=1
|
|
|
|
# Check arguments
|
|
while test $# -gt 0
|
|
do
|
|
case "$1" in
|
|
--ios) CMAKE_ARGS="-DCMAKE_TOOLCHAIN_FILE=cmake/Toolchains/ios.cmake ${CMAKE_ARGS}"
|
|
TARGET_OS=iOS
|
|
;;
|
|
--ios-xcode) CMAKE_ARGS="-DCMAKE_TOOLCHAIN_FILE=cmake/Toolchains/ios.cmake -DIOS_PLATFORM=OS -GXcode ${CMAKE_ARGS}"
|
|
TARGET_OS=iOS-xcode
|
|
;;
|
|
--fat) CMAKE_ARGS="-DCMAKE_OSX_ARCHITECTURES=arm64;x86_64 ${CMAKE_ARGS}"
|
|
;;
|
|
--x64) CMAKE_ARGS="-DCMAKE_OSX_ARCHITECTURES=x86_64 ${CMAKE_ARGS}"
|
|
;;
|
|
--arm64) CMAKE_ARGS="-DCMAKE_OSX_ARCHITECTURES=arm64 ${CMAKE_ARGS}"
|
|
;;
|
|
--no-png) CMAKE_ARGS="-DUSE_SYSTEM_LIBPNG=OFF ${CMAKE_ARGS}"
|
|
;;
|
|
--no-sdl2) CMAKE_ARGS="-DUSE_SYSTEM_LIBSDL2=OFF ${CMAKE_ARGS}"
|
|
;;
|
|
--rpi-armv6)
|
|
CMAKE_ARGS="-DCMAKE_TOOLCHAIN_FILE=cmake/Toolchains/raspberry.armv6.cmake ${CMAKE_ARGS}"
|
|
;;
|
|
--rpi)
|
|
CMAKE_ARGS="-DCMAKE_TOOLCHAIN_FILE=cmake/Toolchains/raspberry.armv7.cmake ${CMAKE_ARGS}"
|
|
;;
|
|
--rpi64)
|
|
CMAKE_ARGS="-DCMAKE_TOOLCHAIN_FILE=cmake/Toolchains/raspberry.armv8.cmake ${CMAKE_ARGS}"
|
|
;;
|
|
--loongarch64)
|
|
CMAKE_ARGS="-DCMAKE_TOOLCHAIN_FILE=cmake/Toolchains/loongarch64-linux-gnu.cmake -DHEADLESS=ON -DHEADLESS_CROSS=ON -DUSE_SYSTEM_LIBPNG=OFF -DUSE_SYSTEM_LIBSDL2=OFF ${CMAKE_ARGS}"
|
|
TARGET_OS=loongarch64
|
|
CROSS_STUB_CC=loongarch64-linux-gnu-gcc-14
|
|
;;
|
|
--aarch64)
|
|
CMAKE_ARGS="-DCMAKE_TOOLCHAIN_FILE=cmake/Toolchains/aarch64-linux-gnu.cmake -DHEADLESS=ON -DHEADLESS_CROSS=ON -DUSE_SYSTEM_LIBPNG=OFF -DUSE_SYSTEM_LIBSDL2=OFF ${CMAKE_ARGS}"
|
|
TARGET_OS=aarch64
|
|
CROSS_STUB_CC=aarch64-linux-gnu-gcc-14
|
|
;;
|
|
--riscv64)
|
|
CMAKE_ARGS="-DCMAKE_TOOLCHAIN_FILE=cmake/Toolchains/riscv64-linux-gnu.cmake -DHEADLESS=ON -DHEADLESS_CROSS=ON -DUSE_SYSTEM_LIBPNG=OFF -DUSE_SYSTEM_LIBSDL2=OFF ${CMAKE_ARGS}"
|
|
TARGET_OS=riscv64
|
|
CROSS_STUB_CC=riscv64-linux-gnu-gcc-14
|
|
;;
|
|
--simulator) echo "Simulator mode enabled"
|
|
CMAKE_ARGS="-DSIMULATOR=ON ${CMAKE_ARGS}"
|
|
;;
|
|
--release)
|
|
CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release ${CMAKE_ARGS}"
|
|
;;
|
|
--debug)
|
|
CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Debug ${CMAKE_ARGS}"
|
|
;;
|
|
--build)
|
|
# Compatibility flag: build is the default action of this script.
|
|
;;
|
|
--reldebug)
|
|
CMAKE_ARGS="-DCMAKE_BUILD_TYPE=RelWithDebInfo ${CMAKE_ARGS}"
|
|
;;
|
|
--headless) echo "Headless mode enabled"
|
|
CMAKE_ARGS="-DHEADLESS=ON ${CMAKE_ARGS}"
|
|
;;
|
|
--atlas-tool) echo "Atlas tool enabled"
|
|
CMAKE_ARGS="-DATLAS_TOOL=ON ${CMAKE_ARGS}"
|
|
;;
|
|
--libretro) echo "Build Libretro core"
|
|
CMAKE_ARGS="-DLIBRETRO=ON ${CMAKE_ARGS}"
|
|
;;
|
|
--libretro_android) echo "Build Libretro Android core"
|
|
CMAKE_ARGS="-DLIBRETRO=ON -DCMAKE_TOOLCHAIN_FILE=${NDK}/build/cmake/android.toolchain.cmake -DANDROID_ABI=${APP_ABI} ${CMAKE_ARGS}"
|
|
;;
|
|
--unittest) echo "Build unittest"
|
|
CMAKE_ARGS="-DUNITTEST=ON ${CMAKE_ARGS}"
|
|
;;
|
|
--no-package) echo "Packaging disabled"
|
|
PACKAGE=0
|
|
;;
|
|
--clang) echo "Clang enabled"
|
|
export CC=/usr/bin/clang
|
|
export CXX=/usr/bin/clang++
|
|
;;
|
|
--sanitize) echo "Enabling address-sanitizer if available"
|
|
CMAKE_ARGS="-DUSE_ASAN=ON ${CMAKE_ARGS}"
|
|
;;
|
|
--sanitizeub) echo "Enabling ub-sanitizer if available"
|
|
CMAKE_ARGS="-DUSE_UBSAN=ON ${CMAKE_ARGS}"
|
|
;;
|
|
--alderlake) echo "Alderlake opt"
|
|
CMAKE_ARGS="-DCMAKE_C_FLAGS=\"-march=alderlake\" -DCMAKE_CPP_FLAGS=\"-march=alderlake\""
|
|
;;
|
|
--no_mmap) echo "Disable mmap"
|
|
CMAKE_ARGS="-DUSE_NO_MMAP=ON ${CMAKE_ARGS}"
|
|
;;
|
|
--gles) echo "Using GLES/EGL"
|
|
CMAKE_ARGS="-DUSING_GLES2=ON -DUSING_EGL=ON ${CMAKE_ARGS}"
|
|
;;
|
|
*) MAKE_OPT="$1 ${MAKE_OPT}"
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
if [ ! -z "$TARGET_OS" ]; then
|
|
echo "Building for $TARGET_OS"
|
|
BUILD_DIR="$(tr [A-Z] [a-z] <<< build-"$TARGET_OS")"
|
|
else
|
|
echo "Building for native host."
|
|
BUILD_DIR="build"
|
|
fi
|
|
|
|
CORES_COUNT=4
|
|
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
|
|
CORES_COUNT="$(nproc)"
|
|
elif [[ "$OSTYPE" == "darwin"* ]]; then
|
|
CORES_COUNT="$(sysctl -n hw.physicalcpu)"
|
|
fi
|
|
|
|
# Strict errors. Any non-zero return exits this script
|
|
set -e
|
|
|
|
echo Building with $CORES_COUNT threads
|
|
|
|
mkdir -p ${BUILD_DIR}
|
|
|
|
# For the headless cross targets, build a comprehensive GL/GLX stub into
|
|
# <build>/stublibs/libGL.so so GLEW's static archive can resolve its symbols
|
|
# via PLT entries (a direct branch to address 0 overflows the relocation).
|
|
# This stub is always (re)generated to pick up any new needed symbols.
|
|
if [ ! -z "$CROSS_STUB_CC" ]; then
|
|
STUB_DIR=${BUILD_DIR}/stublibs
|
|
STUB_GL=${STUB_DIR}/libGL.so
|
|
mkdir -p "${STUB_DIR}"
|
|
STUB_C=$(mktemp /tmp/gl_stub_XXXXXX.c)
|
|
echo "/* ${TARGET_OS} GL/GLX stub - cross-compilation only */" > "$STUB_C"
|
|
# Collect all T (exported) symbols from GL/GLX libs, deduplicate, emit stubs
|
|
HOST_MULTIARCH=$(gcc -print-multiarch 2>/dev/null || dpkg-architecture -qDEB_HOST_MULTIARCH 2>/dev/null)
|
|
{
|
|
for lib in /usr/lib/$HOST_MULTIARCH/libGL.so.1 \
|
|
/usr/lib/$HOST_MULTIARCH/libGLX.so.0 \
|
|
/usr/lib/$HOST_MULTIARCH/libGLdispatch.so.0; do
|
|
[ -f "$lib" ] && nm -D "$lib" 2>/dev/null | awk '/^[0-9a-f]+ T /{ print $3 }'
|
|
done
|
|
# Always include the minimal GLX symbols GLEW directly references
|
|
printf '%s\n' glXGetProcAddressARB glXGetClientString glXQueryVersion \
|
|
glBindTexture glGetString glGetIntegerv
|
|
} | sort -u | awk '{ print "void "$1"(void){}" }' >> "$STUB_C"
|
|
$CROSS_STUB_CC -shared -fPIC -Wno-implicit-function-declaration \
|
|
-o "${STUB_GL}" "$STUB_C"
|
|
rm "$STUB_C"
|
|
fi
|
|
|
|
pushd ${BUILD_DIR}
|
|
|
|
cmake $CMAKE_ARGS ..
|
|
make -j$CORES_COUNT $MAKE_OPT
|
|
popd
|