[cmake] Build presets and System profiles
All checks were successful
eden-license / license-header (pull_request) Successful in 30s
All checks were successful
eden-license / license-header (pull_request) Successful in 30s
- Build Preset (Linux only): enables arch optimizations, e.g. generic, v3, zen2/4, armv8, armv9 - System Profiles: currently only steamdeck, uses an older sdl commit to fix virtual gamepad bug Signed-off-by: crueter <crueter@eden-emu.dev>
This commit is contained in:
parent
12d8cf79ea
commit
780f058d69
6 changed files with 102 additions and 54 deletions
|
@ -3,47 +3,53 @@
|
||||||
# SPDX-FileCopyrightText: 2025 eden Emulator Project
|
# SPDX-FileCopyrightText: 2025 eden Emulator Project
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
amd64|"")
|
amd64 | "")
|
||||||
echo "Making amd64-v3 optimized build of Eden"
|
echo "Making amd64-v3 optimized build of Eden"
|
||||||
ARCH="amd64_v3"
|
ARCH="amd64_v3"
|
||||||
ARCH_FLAGS="-march=x86-64-v3"
|
ARCH_FLAGS="-march=x86-64-v3"
|
||||||
;;
|
export EXTRA_CMAKE_FLAGS=(-DYUZU_BUILD_PRESET=v3)
|
||||||
steamdeck|zen2)
|
;;
|
||||||
echo "Making Steam Deck (Zen 2) optimized build of Eden"
|
steamdeck | zen2)
|
||||||
ARCH="steamdeck"
|
echo "Making Steam Deck (Zen 2) optimized build of Eden"
|
||||||
ARCH_FLAGS="-march=znver2 -mtune=znver2"
|
ARCH="steamdeck"
|
||||||
;;
|
ARCH_FLAGS="-march=znver2 -mtune=znver2"
|
||||||
rog-ally|allyx|zen4)
|
export EXTRA_CMAKE_FLAGS=(-DYUZU_BUILD_PRESET=zen2 -DYUZU_SYSTEM_PROFILE=steamdeck)
|
||||||
echo "Making ROG Ally X (Zen 4) optimized build of Eden"
|
;;
|
||||||
ARCH="rog-ally-x"
|
rog-ally | allyx | zen4)
|
||||||
ARCH_FLAGS="-march=znver4 -mtune=znver4"
|
echo "Making ROG Ally X (Zen 4) optimized build of Eden"
|
||||||
;;
|
ARCH="rog-ally-x"
|
||||||
legacy)
|
ARCH_FLAGS="-march=znver4 -mtune=znver4"
|
||||||
echo "Making amd64 generic build of Eden"
|
export EXTRA_CMAKE_FLAGS=(-DYUZU_BUILD_PRESET=zen2 -DYUZU_SYSTEM_PROFILE=steamdeck)
|
||||||
ARCH=amd64
|
;;
|
||||||
ARCH_FLAGS="-march=x86-64 -mtune=generic"
|
legacy)
|
||||||
;;
|
echo "Making amd64 generic build of Eden"
|
||||||
aarch64)
|
ARCH=amd64
|
||||||
echo "Making armv8-a build of Eden"
|
ARCH_FLAGS="-march=x86-64 -mtune=generic"
|
||||||
ARCH=aarch64
|
export EXTRA_CMAKE_FLAGS=(-DYUZU_BUILD_PRESET=generic)
|
||||||
ARCH_FLAGS="-march=armv8-a -mtune=generic -w"
|
;;
|
||||||
;;
|
aarch64)
|
||||||
armv9)
|
echo "Making armv8-a build of Eden"
|
||||||
echo "Making armv9-a build of Eden"
|
ARCH=aarch64
|
||||||
ARCH=armv9
|
ARCH_FLAGS="-march=armv8-a -mtune=generic -w"
|
||||||
ARCH_FLAGS="-march=armv9-a -mtune=generic -w"
|
export EXTRA_CMAKE_FLAGS=(-DYUZU_BUILD_PRESET=generic)
|
||||||
;;
|
;;
|
||||||
native)
|
armv9)
|
||||||
echo "Making native build of Eden"
|
echo "Making armv9-a build of Eden"
|
||||||
ARCH="$(uname -m)"
|
ARCH=armv9
|
||||||
ARCH_FLAGS="-march=native -mtune=native"
|
ARCH_FLAGS="-march=armv9-a -mtune=generic -w"
|
||||||
;;
|
export EXTRA_CMAKE_FLAGS=(-DYUZU_BUILD_PRESET=armv9)
|
||||||
*)
|
;;
|
||||||
echo "Invalid target $1 specified, must be one of native, amd64, steamdeck, zen2, allyx, rog-ally, zen4, legacy, aarch64, armv9"
|
native)
|
||||||
exit 1
|
echo "Making native build of Eden"
|
||||||
;;
|
ARCH="$(uname -m)"
|
||||||
|
ARCH_FLAGS="-march=native -mtune=native"
|
||||||
|
export EXTRA_CMAKE_FLAGS=(-DYUZU_BUILD_PRESET=native)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Invalid target $1 specified, must be one of native, amd64, steamdeck, zen2, allyx, rog-ally, zen4, legacy, aarch64, armv9"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
export ARCH_FLAGS="$ARCH_FLAGS -O3"
|
export ARCH_FLAGS="$ARCH_FLAGS -O3"
|
||||||
|
@ -55,10 +61,10 @@ fi
|
||||||
if [ "$1" != "" ]; then shift; fi
|
if [ "$1" != "" ]; then shift; fi
|
||||||
|
|
||||||
if [ "$TARGET" = "appimage" ]; then
|
if [ "$TARGET" = "appimage" ]; then
|
||||||
export EXTRA_CMAKE_FLAGS=(-DCMAKE_INSTALL_PREFIX=/usr -DYUZU_ROOM=ON -DYUZU_ROOM_STANDALONE=OFF -DYUZU_CMD=OFF)
|
export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" -DCMAKE_INSTALL_PREFIX=/usr -DYUZU_ROOM=ON -DYUZU_ROOM_STANDALONE=OFF -DYUZU_CMD=OFF)
|
||||||
else
|
else
|
||||||
# For the linux-fresh verification target, verify compilation without PCH as well.
|
# For the linux-fresh verification target, verify compilation without PCH as well.
|
||||||
export EXTRA_CMAKE_FLAGS=(-DYUZU_USE_PRECOMPILED_HEADERS=OFF)
|
export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" -DYUZU_USE_PRECOMPILED_HEADERS=OFF)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$DEVEL" != "true" ]; then
|
if [ "$DEVEL" != "true" ]; then
|
||||||
|
@ -86,7 +92,7 @@ export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" $@)
|
||||||
mkdir -p build && cd build
|
mkdir -p build && cd build
|
||||||
cmake .. -G Ninja \
|
cmake .. -G Ninja \
|
||||||
-DCMAKE_BUILD_TYPE="$BUILD_TYPE" \
|
-DCMAKE_BUILD_TYPE="$BUILD_TYPE" \
|
||||||
-DENABLE_QT_TRANSLATION=ON \
|
-DENABLE_QT_TRANSLATION=ON \
|
||||||
-DUSE_DISCORD_PRESENCE=ON \
|
-DUSE_DISCORD_PRESENCE=ON \
|
||||||
-DCMAKE_CXX_FLAGS="$ARCH_FLAGS" \
|
-DCMAKE_CXX_FLAGS="$ARCH_FLAGS" \
|
||||||
-DCMAKE_C_FLAGS="$ARCH_FLAGS" \
|
-DCMAKE_C_FLAGS="$ARCH_FLAGS" \
|
||||||
|
@ -99,12 +105,12 @@ cmake .. -G Ninja \
|
||||||
-DYUZU_USE_QT_WEB_ENGINE=$WEBENGINE \
|
-DYUZU_USE_QT_WEB_ENGINE=$WEBENGINE \
|
||||||
-DYUZU_USE_FASTER_LD=ON \
|
-DYUZU_USE_FASTER_LD=ON \
|
||||||
-DYUZU_ENABLE_LTO=ON \
|
-DYUZU_ENABLE_LTO=ON \
|
||||||
"${EXTRA_CMAKE_FLAGS[@]}"
|
"${EXTRA_CMAKE_FLAGS[@]}"
|
||||||
|
|
||||||
ninja -j${NPROC}
|
ninja -j${NPROC}
|
||||||
|
|
||||||
if [ -d "bin/Release" ]; then
|
if [ -d "bin/Release" ]; then
|
||||||
strip -s bin/Release/*
|
strip -s bin/Release/*
|
||||||
else
|
else
|
||||||
strip -s bin/*
|
strip -s bin/*
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -92,7 +92,6 @@ chmod +x ./sharun-aio
|
||||||
xvfb-run -a ./sharun-aio l -p -v -e -s -k \
|
xvfb-run -a ./sharun-aio l -p -v -e -s -k \
|
||||||
../$BUILDDIR/bin/eden* \
|
../$BUILDDIR/bin/eden* \
|
||||||
$LIBDIR/lib*GL*.so* \
|
$LIBDIR/lib*GL*.so* \
|
||||||
$LIBDIR/libSDL2*.so* \
|
|
||||||
$LIBDIR/dri/* \
|
$LIBDIR/dri/* \
|
||||||
$LIBDIR/vdpau/* \
|
$LIBDIR/vdpau/* \
|
||||||
$LIBDIR/libvulkan* \
|
$LIBDIR/libvulkan* \
|
||||||
|
|
3
.gitmodules
vendored
3
.gitmodules
vendored
|
@ -16,9 +16,6 @@
|
||||||
[submodule "opus"]
|
[submodule "opus"]
|
||||||
path = externals/opus
|
path = externals/opus
|
||||||
url = https://github.com/xiph/opus.git
|
url = https://github.com/xiph/opus.git
|
||||||
[submodule "SDL"]
|
|
||||||
path = externals/SDL
|
|
||||||
url = https://github.com/libsdl-org/SDL.git
|
|
||||||
[submodule "cpp-httplib"]
|
[submodule "cpp-httplib"]
|
||||||
path = externals/cpp-httplib
|
path = externals/cpp-httplib
|
||||||
url = https://github.com/yhirose/cpp-httplib.git
|
url = https://github.com/yhirose/cpp-httplib.git
|
||||||
|
|
|
@ -33,9 +33,9 @@ endif()
|
||||||
option(ENABLE_SDL2 "Enable the SDL2 frontend" ON)
|
option(ENABLE_SDL2 "Enable the SDL2 frontend" ON)
|
||||||
CMAKE_DEPENDENT_OPTION(YUZU_USE_BUNDLED_SDL2 "Download bundled SDL2 binaries" ON "ENABLE_SDL2;MSVC" OFF)
|
CMAKE_DEPENDENT_OPTION(YUZU_USE_BUNDLED_SDL2 "Download bundled SDL2 binaries" ON "ENABLE_SDL2;MSVC" OFF)
|
||||||
if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
|
if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
|
||||||
CMAKE_DEPENDENT_OPTION(YUZU_USE_EXTERNAL_SDL2 "Compile external SDL2" OFF "ENABLE_SDL2;NOT MSVC" OFF)
|
CMAKE_DEPENDENT_OPTION(YUZU_USE_EXTERNAL_SDL2 "Compile external SDL2" OFF "ENABLE_SDL2;NOT MSVC" OFF)
|
||||||
else()
|
else()
|
||||||
CMAKE_DEPENDENT_OPTION(YUZU_USE_EXTERNAL_SDL2 "Compile external SDL2" ON "ENABLE_SDL2;NOT MSVC" OFF)
|
CMAKE_DEPENDENT_OPTION(YUZU_USE_EXTERNAL_SDL2 "Compile external SDL2" ON "ENABLE_SDL2;NOT MSVC" OFF)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
cmake_dependent_option(ENABLE_LIBUSB "Enable the use of LibUSB" ON "NOT ANDROID" OFF)
|
cmake_dependent_option(ENABLE_LIBUSB "Enable the use of LibUSB" ON "NOT ANDROID" OFF)
|
||||||
|
@ -332,6 +332,41 @@ if (YUZU_ROOM)
|
||||||
add_definitions(-DYUZU_ROOM)
|
add_definitions(-DYUZU_ROOM)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Build/optimization presets
|
||||||
|
if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
||||||
|
if (ARCHITECTURE_x86_64)
|
||||||
|
set(YUZU_BUILD_PRESET "generic" CACHE STRING "Build preset to use. One of: generic, v3, zen2, zen4, native")
|
||||||
|
if (${YUZU_BUILD_PRESET} STREQUAL "generic")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=x86-64 -mtune=generic")
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=x86-64 -mtune=generic")
|
||||||
|
elseif (${YUZU_BUILD_PRESET} STREQUAL "v3")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=x86-64-v3 -mtune=generic")
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=x86-64-v3 -mtune=generic")
|
||||||
|
elseif (${YUZU_BUILD_PRESET} STREQUAL "zen2")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=znver2 -mtune=znver2")
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=znver2 -mtune=znver2")
|
||||||
|
elseif (${YUZU_BUILD_PRESET} STREQUAL "zen4")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=znver4 -mtune=znver4")
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=znver4 -mtune=znver4")
|
||||||
|
elseif (${YUZU_BUILD_PRESET} STREQUAL "native")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native -mtune=native")
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=native -mtune=native")
|
||||||
|
endif()
|
||||||
|
elseif(ARCHITECTURE_arm64)
|
||||||
|
set(YUZU_BUILD_PRESET "generic" CACHE STRING "Build preset to use. One of: generic, armv9")
|
||||||
|
if (${YUZU_BUILD_PRESET} STREQUAL "generic")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv8-a -mtune=generic")
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv8-a -mtune=generic")
|
||||||
|
elseif (${YUZU_BUILD_PRESET} STREQUAL "armv9")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv9-a -mtune=generic")
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv9-a -mtune=generic")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Other presets, e.g. steamdeck
|
||||||
|
set(YUZU_SYSTEM_PROFILE "generic" CACHE STRING "CMake and Externals profile to use. One of: generic, steamdeck")
|
||||||
|
|
||||||
# Configure C++ standard
|
# Configure C++ standard
|
||||||
# ===========================
|
# ===========================
|
||||||
|
|
||||||
|
@ -420,6 +455,7 @@ if (CMAKE_SYSTEM_NAME STREQUAL "Linux" OR ANDROID)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# find SDL2 exports a bunch of variables that are needed, so its easier to do this outside of the YUZU_find_package
|
# find SDL2 exports a bunch of variables that are needed, so its easier to do this outside of the YUZU_find_package
|
||||||
|
# TODO(crueter): combine this all with CPM.
|
||||||
if (ENABLE_SDL2)
|
if (ENABLE_SDL2)
|
||||||
if (YUZU_USE_BUNDLED_SDL2)
|
if (YUZU_USE_BUNDLED_SDL2)
|
||||||
# Detect toolchain and platform
|
# Detect toolchain and platform
|
||||||
|
|
13
externals/CMakeLists.txt
vendored
13
externals/CMakeLists.txt
vendored
|
@ -83,7 +83,18 @@ if (YUZU_USE_EXTERNAL_SDL2)
|
||||||
set(SDL_FILE ON)
|
set(SDL_FILE ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_subdirectory(SDL)
|
include(CPM)
|
||||||
|
set(CPM_SOURCE_CACHE ${CMAKE_SOURCE_DIR}/.cache/cpm)
|
||||||
|
set(CPM_USE_LOCAL_PACKAGES OFF)
|
||||||
|
|
||||||
|
if ("${YUZU_SYSTEM_PROFILE}" STREQUAL "steamdeck")
|
||||||
|
set(SDL_HASH cc016b0046)
|
||||||
|
set(SDL_PIPEWIRE OFF) # build errors out with this on
|
||||||
|
else()
|
||||||
|
set(SDL_HASH 2e4c12cd2c)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
CPMAddPackage("gh:libsdl-org/SDL#${SDL_HASH}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# ENet
|
# ENet
|
||||||
|
|
1
externals/SDL
vendored
1
externals/SDL
vendored
|
@ -1 +0,0 @@
|
||||||
Subproject commit 2e4c12cd2cb2c5d0b60ef2196b400339591e733c
|
|
Loading…
Add table
Add a link
Reference in a new issue