You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
3.0 KiB
86 lines
3.0 KiB
#!/bin/sh -e
|
|
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
die() {
|
|
echo "$@" >&2
|
|
exit 1
|
|
}
|
|
help() {
|
|
cat << EOF
|
|
--arch <name> Specify the target architecture (default: ppc64)
|
|
--os <name> Specify the OS sysroot to use (default: freebsd)
|
|
--sysroot <path> Specify sysroot to use
|
|
EOF
|
|
}
|
|
|
|
TARGET_ARCH="ppc64"
|
|
TARGET_OS="freebsd"
|
|
TARGET_CMAKE="$TARGET_ARCH-pc-$TARGET_OS"
|
|
BASE_DIR="$PWD"
|
|
|
|
while true; do
|
|
case "$1" in
|
|
--arch) shift; TARGET_ARCH=$1; [ -z "$TARGET_ARCH" ] && die "Expected argument";;
|
|
--os) shift; TARGET_OS=$1; [ -z "$TARGET_OS" ] && die "Expected argument";;
|
|
--sysroot) shift; SYSROOT=$1; [ -z "$SYSROOT" ] && die "Expected argument";;
|
|
--help) help "$@";;
|
|
--*) die "Invalid option $1" ;;
|
|
"$0" | "") break;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
[ -z "$SYSROOT" ] && SYSROOT="$HOME/opt/$TARGET_ARCH-$TARGET_OS/sysroot"
|
|
mkdir -p "$SYSROOT" && cd "$SYSROOT"
|
|
case "$TARGET_OS" in
|
|
freebsd*)
|
|
case "$TARGET_ARCH" in
|
|
ppc64pe) URL="https://download.freebsd.org/ftp/releases/powerpc/powerpc64pe/14.3-RELEASE/base.txz" break;;
|
|
ppc64le) URL="https://download.freebsd.org/ftp/releases/powerpc/powerpc64le/14.3-RELEASE/base.txz" break;;
|
|
ppc64) URL="https://download.freebsd.org/ftp/releases/powerpc/powerpc64/14.3-RELEASE/base.txz" break;;
|
|
ppc) URL="https://download.freebsd.org/ftp/releases/powerpc/powerpc/14.3-RELEASE/base.txz" break;;
|
|
amd64 | x86_64) URL="https://download.freebsd.org/ftp/releases/amd64/14.3-RELEASE/base.txz" break;;
|
|
arm64*) URL="https://download.freebsd.org/ftp/releases/arm64/$TARGET_ARCH/14.3-RELEASE/base.txz" break;;
|
|
arm*) URL="https://download.freebsd.org/ftp/releases/arm/$TARGET_ARCH/14.3-RELEASE/base.txz" break;;
|
|
*) die "Unknown arch $TARGET_ARCH" break;;
|
|
esac
|
|
[ -z "$TARGET_CMAKE" ] && TARGET_CMAKE="$TARGET_ARCH-pc-$TARGET_OS"
|
|
[ -f "base.txz" ] || fetch "$URL" || die "Can't download"
|
|
tar -xvzf base.txz
|
|
break;;
|
|
*) die "Unknown OS $TARGET_OS" break;;
|
|
esac
|
|
|
|
[ -z "$CC" ] && CC=$(which clang)
|
|
[ -z "$CXX" ] && CXX=$(which clang++)
|
|
|
|
TOOLCHAIN_FILE="$BASE_DIR/$TARGET_CMAKE-toolchain.cmake"
|
|
cat << EOF >"$TOOLCHAIN_FILE"
|
|
# Script to generate .cmake toolchain files :)
|
|
# See https://man.freebsd.org/cgi/man.cgi?query=cmake-toolchains&sektion=7&manpath=FreeBSD+13.2-RELEASE+and+Ports
|
|
|
|
set(CMAKE_SYSROOT "$SYSROOT")
|
|
set(CMAKE_STAGING_PREFIX "$SYSROOT")
|
|
|
|
set(CMAKE_C_COMPILER $CC)
|
|
set(CMAKE_CXX_COMPILER $CXX)
|
|
set(CMAKE_C_FLAGS "--target=$TARGET_CMAKE")
|
|
set(CMAKE_CXX_FLAGS "--target=$TARGET_CMAKE")
|
|
|
|
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
|
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
|
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
|
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
|
|
EOF
|
|
|
|
# cmake \
|
|
# -DCMAKE_TOOLCHAIN_FILE="$TOOLCHAIN_FILE" \
|
|
# -DCMAKE_BUILD_TYPE=Release \
|
|
# -B "build-$TARGET_CMAKE" \
|
|
# -DDYNARMIC_TESTS=ON \
|
|
# -DENABLE_QT=OFF \
|
|
# -DENABLE_SDL2=OFF \
|
|
# -DYUZU_USE_CPM=ON \
|
|
# -DYUZU_USE_EXTERNAL_FFMPEG=ON
|
|
#cmake --build "build-$TARGET_CMAKE" dynarmic_tests -- -j8
|