Compare commits
332 Commits
v0.0.4-rc3
...
master
| Author | SHA1 | Date |
|---|---|---|
|
|
50ec0892c6 | |
|
|
f4e7fc91ba | |
|
|
45c9f9bbb3 | |
|
|
8e373eb714 | |
|
|
75ebfaa090 | |
|
|
e3035ae8f2 | |
|
|
bcd22d9f8b | |
|
|
4e7c036c7e | |
|
|
19e2dba35a | |
|
|
0634b4a278 | |
|
|
ee428deb1e | |
|
|
07bc77c7e7 | |
|
|
72973fe582 | |
|
|
c263b6af6f | |
|
|
e46576b4c3 | |
|
|
89bcb73d47 | |
|
|
7d81a724ef | |
|
|
634686d59b | |
|
|
d0af14632e | |
|
|
c87986b276 | |
|
|
b600b90d53 | |
|
|
2b979024cb | |
|
|
5f676a6a55 | |
|
|
2ab5b37137 | |
|
|
f6547fac8c | |
|
|
9c685c1449 | |
|
|
aaf1a597ef | |
|
|
850fc372b7 | |
|
|
bad9d8043b | |
|
|
8e8e66f880 | |
|
|
fec5ac2298 | |
|
|
19494bc7ac | |
|
|
28a78d76fe | |
|
|
6b3f8e1b62 | |
|
|
aacc40254c | |
|
|
efd26c3e4d | |
|
|
a8093c2a3c | |
|
|
0f8b35c4cd | |
|
|
866881d0e3 | |
|
|
a56b8d3de8 | |
|
|
e544cb3cf6 | |
|
|
ca9f2d43be | |
|
|
e10f55d9db | |
|
|
71e035f83b | |
|
|
16f2564478 | |
|
|
75fda70db2 | |
|
|
b9e052b3a7 | |
|
|
69aff83ef4 | |
|
|
e07e269bd7 | |
|
|
08232ce642 | |
|
|
d536a66010 | |
|
|
8907523ee4 | |
|
|
9b1f6801a5 | |
|
|
ff03ef657a | |
|
|
5acddfde16 | |
|
|
913a74dbd3 | |
|
|
cbb92e75d3 | |
|
|
bd7d0e0466 | |
|
|
cce77b8d11 | |
|
|
c2f4449b1c | |
|
|
48ba1f3f24 | |
|
|
d59fcf01bf | |
|
|
b8456394f1 | |
|
|
a467dd1ba6 | |
|
|
c156f4760f | |
|
|
13f11ebf49 | |
|
|
6065e9aa09 | |
|
|
8ed0ed5828 | |
|
|
33067af283 | |
|
|
d0a054270e | |
|
|
2a3507c2b9 | |
|
|
f71f43561d | |
|
|
ecbfad4193 | |
|
|
d76b2b5d26 | |
|
|
cd9527072d | |
|
|
ffdaf7369a | |
|
|
5113f503d1 | |
|
|
a5f1c2bcb0 | |
|
|
2e432c9d17 | |
|
|
6637810fe6 | |
|
|
8118557c17 | |
|
|
1925726b96 | |
|
|
acf7deea95 | |
|
|
84fdbbaaa1 | |
|
|
638663b28e | |
|
|
df838a57fd | |
|
|
b2b73ecb62 | |
|
|
2b7b44c3e4 | |
|
|
385b7cad77 | |
|
|
7b537f6b72 | |
|
|
81367e6e33 | |
|
|
68aaab5947 | |
|
|
8b55a15808 | |
|
|
a692986bd7 | |
|
|
979ea5563b | |
|
|
643f11d972 | |
|
|
025bc799f7 | |
|
|
54af7abac4 | |
|
|
b2b98ac83a | |
|
|
9cf3a04af3 | |
|
|
55ab6f1472 | |
|
|
84839dec38 | |
|
|
3b81d2e333 | |
|
|
c974f3e0fb | |
|
|
4624b16cc6 | |
|
|
5e2c536a86 | |
|
|
283b94056d | |
|
|
770be31030 | |
|
|
acda082f40 | |
|
|
00193de0da | |
|
|
0d996e1df9 | |
|
|
998460b78b | |
|
|
52f6984347 | |
|
|
2f1f9be7a4 | |
|
|
c59d12b0cd | |
|
|
4a5bec1cfc | |
|
|
4f6195881c | |
|
|
7396149ab1 | |
|
|
eb7f74ce97 | |
|
|
64ff59e82f | |
|
|
6504c7cc4c | |
|
|
ddbb6f2219 | |
|
|
29fad5a89e | |
|
|
f74c590a8e | |
|
|
de449d2caa | |
|
|
1d13f7a666 | |
|
|
ea932fbf40 | |
|
|
6afe209b60 | |
|
|
338ea4e9d5 | |
|
|
368a8f9e3d | |
|
|
a3fa666510 | |
|
|
cb40b310f5 | |
|
|
9dbb8c33e2 | |
|
|
16c7c03b33 | |
|
|
9aa8e9b0a1 | |
|
|
4510e9ff7f | |
|
|
f61f0a28c6 | |
|
|
cb26ea154c | |
|
|
8663913510 | |
|
|
872e03c9a6 | |
|
|
651585963a | |
|
|
30e073b02b | |
|
|
b9da45cb1f | |
|
|
8663d7fa41 | |
|
|
30cbec7ad5 | |
|
|
1fbace438c | |
|
|
1ae084e87b | |
|
|
323e946d06 | |
|
|
cb4239829f | |
|
|
023a4bceca | |
|
|
4025925539 | |
|
|
f45491e128 | |
|
|
84e11a52ba | |
|
|
d72553f519 | |
|
|
291b5febec | |
|
|
ed0276582e | |
|
|
5406a153e1 | |
|
|
4ea8311113 | |
|
|
1a9b4b37e1 | |
|
|
51cc1bc6be | |
|
|
6ec6ca7c37 | |
|
|
833a38b443 | |
|
|
8df41f06c7 | |
|
|
4a7772f104 | |
|
|
170f113453 | |
|
|
ae501e256e | |
|
|
b7417f68ce | |
|
|
83a28dc251 | |
|
|
5768600c8b | |
|
|
6f9fb83a1d | |
|
|
a82cf247fd | |
|
|
8d9607ec60 | |
|
|
89f72d286a | |
|
|
ecd01e13fd | |
|
|
f544004b5d | |
|
|
9c5203d922 | |
|
|
b1daffad19 | |
|
|
3bae47cd94 | |
|
|
2f0dc4e0ba | |
|
|
1da0a380da | |
|
|
91596c6d1b | |
|
|
dceeccd04b | |
|
|
1cb8bcf531 | |
|
|
a27d35362d | |
|
|
a2236c1a43 | |
|
|
fafded39ef | |
|
|
6b36c6deb6 | |
|
|
c21f92340b | |
|
|
ea29f169e6 | |
|
|
4d7b51d798 | |
|
|
cad77dfac6 | |
|
|
87d4c67386 | |
|
|
1370f23675 | |
|
|
8440c2074d | |
|
|
5edcdea78f | |
|
|
4cacf56cec | |
|
|
c28b5ffc7d | |
|
|
f52ff56e70 | |
|
|
82f9d489e7 | |
|
|
9c3f2d2af5 | |
|
|
6f045383c5 | |
|
|
73f2535edc | |
|
|
d9874fa4bc | |
|
|
7234875a53 | |
|
|
14951348bf | |
|
|
b0cd47c005 | |
|
|
18af560a43 | |
|
|
8f430d25a6 | |
|
|
e6ff711613 | |
|
|
966fcc0c30 | |
|
|
80327312dd | |
|
|
742622a98d | |
|
|
011278b6a8 | |
|
|
76be55bc2f | |
|
|
a79eab9564 | |
|
|
46b32b7688 | |
|
|
55646657e1 | |
|
|
2b4d13c205 | |
|
|
8ad1d0c317 | |
|
|
fb1600b7d1 | |
|
|
8d31484f64 | |
|
|
e12a73e8a0 | |
|
|
e4cbcec2f1 | |
|
|
006f97f207 | |
|
|
6d80a5f823 | |
|
|
29717da45b | |
|
|
28f08e43f1 | |
|
|
b53aa06505 | |
|
|
b95c4d2d5d | |
|
|
d76edfc683 | |
|
|
3bc714a392 | |
|
|
1d629fe83c | |
|
|
ba3eda83d3 | |
|
|
e6850cbad5 | |
|
|
cfae726289 | |
|
|
bb94cff886 | |
|
|
370997f42e | |
|
|
5213cc5689 | |
|
|
bc9af86269 | |
|
|
00ec67d65b | |
|
|
fbd28a9d34 | |
|
|
3413fbd9da | |
|
|
bccc46a325 | |
|
|
f0fe283038 | |
|
|
b78390551c | |
|
|
62ea689949 | |
|
|
8c6a612062 | |
|
|
df3b9400a6 | |
|
|
c5bd7dc047 | |
|
|
557876b222 | |
|
|
22dfc560e0 | |
|
|
1d869e8495 | |
|
|
959f72297d | |
|
|
057d566ff4 | |
|
|
be592f0ab3 | |
|
|
bf68eede05 | |
|
|
1eed7efd09 | |
|
|
50f8d4130d | |
|
|
e4dccd5a5c | |
|
|
b9530ae80f | |
|
|
5130185d12 | |
|
|
db1dfc9755 | |
|
|
d7de298948 | |
|
|
363d861011 | |
|
|
30d75d4e52 | |
|
|
06b83a58a6 | |
|
|
1e06c6f752 | |
|
|
adc41bff70 | |
|
|
4edb70c8f0 | |
|
|
9da38715fe | |
|
|
7157d5167e | |
|
|
77d83b008a | |
|
|
69a84ee0a6 | |
|
|
5b019a81a7 | |
|
|
83332316aa | |
|
|
3141019fcd | |
|
|
4cc9aa691d | |
|
|
d96ab0df6a | |
|
|
c03f7cf284 | |
|
|
750fecda18 | |
|
|
1f422a8f70 | |
|
|
90877dfc85 | |
|
|
f882ff72eb | |
|
|
55cc4d5ede | |
|
|
09f03f5640 | |
|
|
7a98ee4ead | |
|
|
dfd042c809 | |
|
|
16ca7851c5 | |
|
|
0eed5100f9 | |
|
|
8d3b33c3aa | |
|
|
e3c942b209 | |
|
|
1b1e186a58 | |
|
|
e75ecfd4a0 | |
|
|
18135424df | |
|
|
1d2b9de496 | |
|
|
fe8017734b | |
|
|
33ee9de85a | |
|
|
e22756160c | |
|
|
a33956f738 | |
|
|
4642e82ca7 | |
|
|
97054357d2 | |
|
|
941caf31ce | |
|
|
c72144abad | |
|
|
d656e347c8 | |
|
|
8859809ebd | |
|
|
318998cbb5 | |
|
|
f58097e814 | |
|
|
1efef85352 | |
|
|
ea0e5d630c | |
|
|
9e610ea098 | |
|
|
41af6ea645 | |
|
|
91b0432591 | |
|
|
46239dafa1 | |
|
|
bf23921f07 | |
|
|
e63f71c787 | |
|
|
027085e5ba | |
|
|
f40025fd9b | |
|
|
ed39ec4738 | |
|
|
fe13539d72 | |
|
|
be218cc020 | |
|
|
c3cbe2d4d0 | |
|
|
79b162a37c | |
|
|
f3fbb3812f | |
|
|
d8caa74233 | |
|
|
17fe74ef11 | |
|
|
73713737c6 | |
|
|
61f3ce643c | |
|
|
f7f6a4cde4 | |
|
|
65fa1a37e2 | |
|
|
41192e6e3d | |
|
|
d8f2e22bf8 | |
|
|
51506ef836 |
|
|
@ -1,21 +1,137 @@
|
||||||
#!/bin/bash -e
|
#!/bin/sh -e
|
||||||
|
|
||||||
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
# SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
export NDK_CCACHE=$(which ccache)
|
NUM_JOBS=$(nproc 2>/dev/null || getconf _NPROCESSORS_ONLN 2>/dev/null || echo 2)
|
||||||
|
export CMAKE_BUILD_PARALLEL_LEVEL="${NUM_JOBS}"
|
||||||
|
ARTIFACTS_DIR="$PWD/artifacts"
|
||||||
|
|
||||||
if [ ! -z "${ANDROID_KEYSTORE_B64}" ]; then
|
: "${CCACHE:=false}"
|
||||||
|
RETURN=0
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
cat <<EOF
|
||||||
|
Usage: $0 [-t|--target FLAVOR] [-b|--build-type BUILD_TYPE]
|
||||||
|
[-h|--help] [-r|--release] [extra options]
|
||||||
|
|
||||||
|
Build script for Android.
|
||||||
|
Associated variables can be set outside the script,
|
||||||
|
and will apply both to this script and the packaging script.
|
||||||
|
bool values are "true" or "false"
|
||||||
|
|
||||||
|
Options:
|
||||||
|
-r, --release Enable update checker. If set, sets the DEVEL bool variable to false.
|
||||||
|
By default, DEVEL is true.
|
||||||
|
-t, --target <FLAVOR> Build flavor (variable: TARGET)
|
||||||
|
Valid values are: legacy, optimized, standard, chromeos
|
||||||
|
Default: standard
|
||||||
|
-b, --build-type <TYPE> Build type (variable: TYPE)
|
||||||
|
Valid values are: Release, RelWithDebInfo, Debug
|
||||||
|
Default: Debug
|
||||||
|
-n, --nightly Create a nightly build.
|
||||||
|
|
||||||
|
Extra arguments are passed to CMake (e.g. -DCMAKE_OPTION_NAME=VALUE)
|
||||||
|
Set the CCACHE variable to "true" to enable build caching.
|
||||||
|
The APK and AAB will be output into "artifacts".
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
exit "$RETURN"
|
||||||
|
}
|
||||||
|
|
||||||
|
die() {
|
||||||
|
echo "-- ! $*" >&2
|
||||||
|
RETURN=1 usage
|
||||||
|
}
|
||||||
|
|
||||||
|
target() {
|
||||||
|
[ -z "$1" ] && die "You must specify a valid target."
|
||||||
|
|
||||||
|
TARGET="$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
type() {
|
||||||
|
[ -z "$1" ] && die "You must specify a valid type."
|
||||||
|
|
||||||
|
TYPE="$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
case "$1" in
|
||||||
|
-r|--release) DEVEL=false ;;
|
||||||
|
-t|--target) target "$2"; shift ;;
|
||||||
|
-b|--build-type) type "$2"; shift ;;
|
||||||
|
-n|--nightly) NIGHTLY=true ;;
|
||||||
|
-h|--help) usage ;;
|
||||||
|
*) break ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
: "${TARGET:=standard}"
|
||||||
|
: "${TYPE:=Release}"
|
||||||
|
: "${DEVEL:=true}"
|
||||||
|
|
||||||
|
TARGET_LOWER=$(echo "$TARGET" | tr '[:upper:]' '[:lower:]')
|
||||||
|
|
||||||
|
case "$TARGET_LOWER" in
|
||||||
|
legacy) FLAVOR=Legacy ;;
|
||||||
|
optimized) FLAVOR=GenshinSpoof ;;
|
||||||
|
standard) FLAVOR=Mainline ;;
|
||||||
|
chromeos) FLAVOR=ChromeOS ;;
|
||||||
|
*) die "Invalid build flavor $TARGET."
|
||||||
|
esac
|
||||||
|
|
||||||
|
case "$TYPE" in
|
||||||
|
RelWithDebInfo|Release|Debug) ;;
|
||||||
|
*) die "Invalid build type $TYPE."
|
||||||
|
esac
|
||||||
|
|
||||||
|
LOWER_FLAVOR=$(echo "$FLAVOR" | sed 's/./\L&/')
|
||||||
|
LOWER_TYPE=$(echo "$TYPE" | sed 's/./\L&/')
|
||||||
|
|
||||||
|
if [ -n "${ANDROID_KEYSTORE_B64}" ]; then
|
||||||
export ANDROID_KEYSTORE_FILE="${GITHUB_WORKSPACE}/ks.jks"
|
export ANDROID_KEYSTORE_FILE="${GITHUB_WORKSPACE}/ks.jks"
|
||||||
base64 --decode <<< "${ANDROID_KEYSTORE_B64}" > "${ANDROID_KEYSTORE_FILE}"
|
echo "${ANDROID_KEYSTORE_B64}" | base64 --decode > "${ANDROID_KEYSTORE_FILE}"
|
||||||
|
SHA1SUM=$(keytool -list -v -storepass "${ANDROID_KEYSTORE_PASS}" -keystore "${ANDROID_KEYSTORE_FILE}" | grep SHA1 | cut -d " " -f3)
|
||||||
|
echo "-- Keystore SHA1 is ${SHA1SUM}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cd src/android
|
cd src/android
|
||||||
chmod +x ./gradlew
|
chmod +x ./gradlew
|
||||||
|
|
||||||
./gradlew assembleMainlineRelease
|
set -- "$@" -DUSE_CCACHE="${CCACHE}"
|
||||||
./gradlew bundleMainlineRelease
|
|
||||||
|
|
||||||
if [ ! -z "${ANDROID_KEYSTORE_B64}" ]; then
|
nightly() {
|
||||||
|
[ "$NIGHTLY" = "true" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
if nightly || [ "$DEVEL" != "true" ]; then
|
||||||
|
set -- "$@" -DENABLE_UPDATE_CHECKER=ON
|
||||||
|
fi
|
||||||
|
|
||||||
|
if nightly; then
|
||||||
|
NIGHTLY=true
|
||||||
|
else
|
||||||
|
NIGHTLY=false
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "-- building..."
|
||||||
|
|
||||||
|
./gradlew "copy${FLAVOR}${TYPE}Outputs" \
|
||||||
|
-Dorg.gradle.caching="${CCACHE}" \
|
||||||
|
-Dorg.gradle.parallel="${CCACHE}" \
|
||||||
|
-Dorg.gradle.workers.max="${NUM_JOBS}" \
|
||||||
|
-PYUZU_ANDROID_ARGS="$*" \
|
||||||
|
-Pnightly="$NIGHTLY" \
|
||||||
|
--info
|
||||||
|
|
||||||
|
if [ -n "${ANDROID_KEYSTORE_B64}" ]; then
|
||||||
rm "${ANDROID_KEYSTORE_FILE}"
|
rm "${ANDROID_KEYSTORE_FILE}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo "-- Done! APK and AAB artifacts are in ${ARTIFACTS_DIR}"
|
||||||
|
|
||||||
|
ls -l "${ARTIFACTS_DIR}/"
|
||||||
|
|
|
||||||
|
|
@ -1,22 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
GITDATE="$(git show -s --date=short --format='%ad' | sed 's/-//g')"
|
|
||||||
GITREV="$(git show -s --format='%h')"
|
|
||||||
ARTIFACTS_DIR="$PWD/artifacts"
|
|
||||||
mkdir -p "${ARTIFACTS_DIR}/"
|
|
||||||
|
|
||||||
REV_NAME="eden-android-${GITDATE}-${GITREV}"
|
|
||||||
BUILD_FLAVOR="mainline"
|
|
||||||
BUILD_TYPE_LOWER="release"
|
|
||||||
BUILD_TYPE_UPPER="Release"
|
|
||||||
|
|
||||||
cp src/android/app/build/outputs/apk/"${BUILD_FLAVOR}/${BUILD_TYPE_LOWER}/app-${BUILD_FLAVOR}-${BUILD_TYPE_LOWER}.apk" \
|
|
||||||
"${ARTIFACTS_DIR}/${REV_NAME}.apk" || echo "APK not found"
|
|
||||||
|
|
||||||
cp src/android/app/build/outputs/bundle/"${BUILD_FLAVOR}${BUILD_TYPE_UPPER}"/"app-${BUILD_FLAVOR}-${BUILD_TYPE_LOWER}.aab" \
|
|
||||||
"${ARTIFACTS_DIR}/${REV_NAME}.aab" || echo "AAB not found"
|
|
||||||
|
|
||||||
ls -la "${ARTIFACTS_DIR}/"
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
#!/bin/sh -e
|
#!/bin/sh -e
|
||||||
|
|
||||||
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
# SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
# specify full path if dupes may exist
|
# specify full path if dupes may exist
|
||||||
EXCLUDE_FILES="CPM.cmake CPMUtil.cmake GetSCMRev.cmake renderdoc_app.h tools/cpm tools/shellcheck.sh tools/update-cpm.sh tools/windows/vcvarsall.sh externals/stb externals/glad externals/getopt externals/gamemode externals/FidelityFX-FSR externals/demangle externals/bc_decoder"
|
EXCLUDE_FILES="CPM.cmake CPMUtil.cmake GetSCMRev.cmake renderdoc_app.h tools/cpm tools/shellcheck.sh tools/update-cpm.sh tools/windows/vcvarsall.sh externals/stb externals/glad externals/getopt externals/gamemode externals/FidelityFX-FSR externals/demangle externals/bc_decoder externals/cmake-modules"
|
||||||
|
|
||||||
# license header constants, please change when needed :))))
|
# license header constants, please change when needed :))))
|
||||||
YEAR=2025
|
YEAR=2026
|
||||||
HOLDER="Eden Emulator Project"
|
HOLDER="Eden Emulator Project"
|
||||||
LICENSE="GPL-3.0-or-later"
|
LICENSE="GPL-3.0-or-later"
|
||||||
|
|
||||||
|
|
@ -41,9 +41,8 @@ EOF
|
||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
case "$1" in
|
case "$1" in
|
||||||
(-uc) UPDATE=true; COMMIT=true ;;
|
|
||||||
(-u|--update) UPDATE=true ;;
|
(-u|--update) UPDATE=true ;;
|
||||||
(-c|--commit) COMMIT=true ;;
|
(-c|--commit) UPDATE=true; COMMIT=true ;;
|
||||||
("$0") break ;;
|
("$0") break ;;
|
||||||
("") break ;;
|
("") break ;;
|
||||||
(*) usage ;;
|
(*) usage ;;
|
||||||
|
|
@ -113,7 +112,7 @@ for file in $FILES; do
|
||||||
[ "$excluded" = "true" ] && continue
|
[ "$excluded" = "true" ] && continue
|
||||||
|
|
||||||
case "$file" in
|
case "$file" in
|
||||||
*.cmake|*.sh|CMakeLists.txt)
|
*.cmake|*.sh|*CMakeLists.txt)
|
||||||
begin="#"
|
begin="#"
|
||||||
;;
|
;;
|
||||||
*.kt*|*.cpp|*.h)
|
*.kt*|*.cpp|*.h)
|
||||||
|
|
@ -186,7 +185,7 @@ if [ "$UPDATE" = "true" ]; then
|
||||||
|
|
||||||
for file in $SRC_FILES $OTHER_FILES; do
|
for file in $SRC_FILES $OTHER_FILES; do
|
||||||
case $(basename -- "$file") in
|
case $(basename -- "$file") in
|
||||||
*.cmake|CMakeLists.txt)
|
*.cmake|*CMakeLists.txt)
|
||||||
begin="#"
|
begin="#"
|
||||||
shell="false"
|
shell="false"
|
||||||
;;
|
;;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/bash -e
|
#!/bin/bash -e
|
||||||
|
|
||||||
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
# SPDX-FileCopyrightText: Copyright 2026 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
|
||||||
|
|
@ -104,8 +104,7 @@ cmake .. -G Ninja \
|
||||||
-DYUZU_USE_QT_MULTIMEDIA=$MULTIMEDIA \
|
-DYUZU_USE_QT_MULTIMEDIA=$MULTIMEDIA \
|
||||||
-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 \
|
-DENABLE_LTO=ON \
|
||||||
-DDYNARMIC_ENABLE_LTO=ON \
|
|
||||||
"${EXTRA_CMAKE_FLAGS[@]}"
|
"${EXTRA_CMAKE_FLAGS[@]}"
|
||||||
|
|
||||||
ninja -j${NPROC}
|
ninja -j${NPROC}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/bash -ex
|
#!/bin/bash -ex
|
||||||
|
|
||||||
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
# SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
if [ "$COMPILER" == "clang" ]
|
if [ "$COMPILER" == "clang" ]
|
||||||
|
|
@ -32,9 +32,8 @@ cmake .. -G Ninja \
|
||||||
-DYUZU_ROOM_STANDALONE=OFF \
|
-DYUZU_ROOM_STANDALONE=OFF \
|
||||||
-DYUZU_USE_QT_MULTIMEDIA=${USE_MULTIMEDIA:-false} \
|
-DYUZU_USE_QT_MULTIMEDIA=${USE_MULTIMEDIA:-false} \
|
||||||
-DYUZU_USE_QT_WEB_ENGINE=${USE_WEBENGINE:-false} \
|
-DYUZU_USE_QT_WEB_ENGINE=${USE_WEBENGINE:-false} \
|
||||||
-DYUZU_ENABLE_LTO=ON \
|
-DENABLE_LTO=ON \
|
||||||
-DCMAKE_EXE_LINKER_FLAGS=" /LTCG" \
|
-DCMAKE_EXE_LINKER_FLAGS=" /LTCG" \
|
||||||
-DDYNARMIC_ENABLE_LTO=ON \
|
|
||||||
-DYUZU_USE_BUNDLED_QT=${BUNDLE_QT:-false} \
|
-DYUZU_USE_BUNDLED_QT=${BUNDLE_QT:-false} \
|
||||||
-DUSE_CCACHE=${CCACHE:-false} \
|
-DUSE_CCACHE=${CCACHE:-false} \
|
||||||
-DENABLE_UPDATE_CHECKER=${DEVEL:-true} \
|
-DENABLE_UPDATE_CHECKER=${DEVEL:-true} \
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,4 @@
|
||||||
blank_issues_enabled: false
|
blank_issues_enabled: false
|
||||||
contact_links:
|
contact_links:
|
||||||
- name: yuzu Discord
|
- name: Eden Discord
|
||||||
url: https://discord.com/invite/u77vRWY
|
url: https://discord.gg/HstXbPch7X
|
||||||
about: If you are experiencing an issue with yuzu, and you need tech support, or if you have a general question, try asking in the official yuzu Discord linked here. Piracy is not allowed.
|
|
||||||
- name: Community forums
|
|
||||||
url: https://community.citra-emu.org
|
|
||||||
about: This is an alternative place for tech support, however helpers there are not as active.
|
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ jobs:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Find Unused Strings
|
- name: Find Unused Strings
|
||||||
run: ./tools/find-unused-strings.sh
|
run: ./tools/unused-strings.sh
|
||||||
|
|
||||||
- name: Find Stale Translations
|
- name: Find Stale Translations
|
||||||
run: ./tools/stale-translations.sh
|
run: ./tools/stale-translations.sh
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,8 @@ CMakeLists.txt.user*
|
||||||
# *nix related
|
# *nix related
|
||||||
# Common convention for backup or temporary files
|
# Common convention for backup or temporary files
|
||||||
*~
|
*~
|
||||||
|
*.core
|
||||||
|
dtrace-out/
|
||||||
|
|
||||||
# Visual Studio CMake settings
|
# Visual Studio CMake settings
|
||||||
CMakeSettings.json
|
CMakeSettings.json
|
||||||
|
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
||||||
--- a/libs/context/CMakeLists.txt 2025-09-08 00:42:31.303651800 -0400
|
|
||||||
+++ b/libs/context/CMakeLists.txt 2025-09-08 00:42:40.592184300 -0400
|
|
||||||
@@ -146,7 +146,7 @@
|
|
||||||
set(ASM_LANGUAGE ASM)
|
|
||||||
endif()
|
|
||||||
elseif(BOOST_CONTEXT_ASSEMBLER STREQUAL armasm)
|
|
||||||
- set(ASM_LANGUAGE ASM_ARMASM)
|
|
||||||
+ set(ASM_LANGUAGE ASM_MARMASM)
|
|
||||||
else()
|
|
||||||
set(ASM_LANGUAGE ASM_MASM)
|
|
||||||
endif()
|
|
||||||
|
|
@ -1,14 +0,0 @@
|
||||||
diff --git a/libs/context/CMakeLists.txt b/libs/context/CMakeLists.txt
|
|
||||||
index 8210f65..0e59dd7 100644
|
|
||||||
--- a/libs/context/CMakeLists.txt
|
|
||||||
+++ b/libs/context/CMakeLists.txt
|
|
||||||
@@ -186,7 +186,8 @@ if(BOOST_CONTEXT_IMPLEMENTATION STREQUAL "fcontext")
|
|
||||||
set_property(SOURCE ${ASM_SOURCES} APPEND PROPERTY COMPILE_OPTIONS "/safeseh")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
- else() # masm
|
|
||||||
+ # armasm doesn't support most of these options
|
|
||||||
+ elseif(NOT BOOST_CONTEXT_ASSEMBLER STREQUAL armasm) # masm
|
|
||||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
|
||||||
set_property(SOURCE ${ASM_SOURCES} APPEND PROPERTY COMPILE_OPTIONS "-x" "assembler-with-cpp")
|
|
||||||
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
From ce992811fe8eb5ea7ad37e5b255bfecb0c313928 Mon Sep 17 00:00:00 2001
|
||||||
|
From: crueter <crueter@crueter.xyz>
|
||||||
|
Date: Sun, 7 Sep 2025 23:43:57 -0400
|
||||||
|
Subject: [PATCH] [algorithm] fix missing declaration error
|
||||||
|
|
||||||
|
Projects with restrictive error options won't compile without this
|
||||||
|
|
||||||
|
Signed-off-by: crueter <crueter@crueter.xyz>
|
||||||
|
---
|
||||||
|
include/jwt/algorithm.hpp | 2 ++
|
||||||
|
1 file changed, 2 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/include/jwt/algorithm.hpp b/include/jwt/algorithm.hpp
|
||||||
|
index 0e3b843..35347fe 100644
|
||||||
|
--- a/include/jwt/algorithm.hpp
|
||||||
|
+++ b/include/jwt/algorithm.hpp
|
||||||
|
@@ -63,6 +63,8 @@ using sign_func_t = sign_result_t (*) (const jwt::string_view key,
|
||||||
|
using verify_func_t = verify_result_t (*) (const jwt::string_view key,
|
||||||
|
const jwt::string_view head,
|
||||||
|
const jwt::string_view jwt_sign);
|
||||||
|
+
|
||||||
|
+verify_result_t is_secret_a_public_key(const jwt::string_view secret);
|
||||||
|
|
||||||
|
namespace algo {
|
||||||
|
|
||||||
|
|
@ -1,52 +1,62 @@
|
||||||
From e1a946ffb79022d38351a0623f819a5419965c3e Mon Sep 17 00:00:00 2001
|
From 436fc1978c78edd085d99b33275b24be0ac96aa0 Mon Sep 17 00:00:00 2001
|
||||||
From: crueter <crueter@eden-emu.dev>
|
From: crueter <crueter@eden-emu.dev>
|
||||||
Date: Fri, 24 Oct 2025 23:41:09 -0700
|
Date: Sun, 1 Feb 2026 16:21:10 -0500
|
||||||
Subject: [PATCH] [build] Fix MinGW missing GetAddrInfoExCancel definition
|
Subject: [PATCH] Fix build on MinGW
|
||||||
|
|
||||||
MinGW does not define GetAddrInfoExCancel in its wstcpi whatever header,
|
MinGW doesn't define GetAddrInfoExCancel.
|
||||||
so to get around this we can just load it with GetProcAddress et al.
|
|
||||||
|
|
||||||
Signed-off-by: crueter <crueter@eden-emu.dev>
|
Signed-off-by: crueter <crueter@eden-emu.dev>
|
||||||
---
|
---
|
||||||
httplib.h | 14 ++++++++++++--
|
httplib.h | 18 ++++++++++++++++--
|
||||||
1 file changed, 12 insertions(+), 2 deletions(-)
|
1 file changed, 16 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
diff --git a/httplib.h b/httplib.h
|
diff --git a/httplib.h b/httplib.h
|
||||||
index e15ba44..90a76dc 100644
|
index ec8d2a2..5f9a510 100644
|
||||||
--- a/httplib.h
|
--- a/httplib.h
|
||||||
+++ b/httplib.h
|
+++ b/httplib.h
|
||||||
@@ -203,11 +203,13 @@
|
@@ -203,14 +203,17 @@
|
||||||
#error Sorry, Visual Studio versions prior to 2015 are not supported
|
#error Sorry, Visual Studio versions prior to 2015 are not supported
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
-#pragma comment(lib, "ws2_32.lib")
|
-#pragma comment(lib, "ws2_32.lib")
|
||||||
-
|
-
|
||||||
|
#ifndef _SSIZE_T_DEFINED
|
||||||
using ssize_t = __int64;
|
using ssize_t = __int64;
|
||||||
|
#define _SSIZE_T_DEFINED
|
||||||
|
#endif
|
||||||
#endif // _MSC_VER
|
#endif // _MSC_VER
|
||||||
|
|
||||||
+#if defined(_MSC_VER) || defined(__MINGW32__)
|
+#if defined(_MSC_VER) || defined(__MINGW32__)
|
||||||
+#pragma comment(lib, "ws2_32.lib")
|
+#pragma comment(lib, "ws2_32.lib")
|
||||||
+#endif
|
+#endif
|
||||||
|
+
|
||||||
+
|
+
|
||||||
#ifndef S_ISREG
|
#ifndef S_ISREG
|
||||||
#define S_ISREG(m) (((m) & S_IFREG) == S_IFREG)
|
#define S_ISREG(m) (((m) & S_IFREG) == S_IFREG)
|
||||||
#endif // S_ISREG
|
#endif // S_ISREG
|
||||||
@@ -3557,7 +3559,15 @@ inline int getaddrinfo_with_timeout(const char *node, const char *service,
|
@@ -4528,7 +4531,17 @@ inline int getaddrinfo_with_timeout(const char *node, const char *service,
|
||||||
auto wait_result =
|
auto wait_result =
|
||||||
::WaitForSingleObject(event, static_cast<DWORD>(timeout_sec * 1000));
|
::WaitForSingleObject(event, static_cast<DWORD>(timeout_sec * 1000));
|
||||||
if (wait_result == WAIT_TIMEOUT) {
|
if (wait_result == WAIT_TIMEOUT) {
|
||||||
+#ifdef __MINGW32__
|
+#ifdef __MINGW32__
|
||||||
+ typedef INT(WSAAPI * PFN_GETADDRINFOEXCANCEL)(HANDLE * CancelHandle);
|
+ typedef INT(WSAAPI * PFN_GETADDRINFOEXCANCEL)(HANDLE * CancelHandle);
|
||||||
+ auto wsdll = LoadLibraryW((wchar_t *)"ws2_32.lib");
|
+ auto wsdll = LoadLibraryW((wchar_t *)"ws2_32.lib");
|
||||||
+ PFN_GETADDRINFOEXCANCEL GetAddrInfoExCancel = (PFN_GETADDRINFOEXCANCEL) GetProcAddress(wsdll, "GetAddrInfoExCancel");
|
+ PFN_GETADDRINFOEXCANCEL GetAddrInfoExCancel =
|
||||||
|
+ (PFN_GETADDRINFOEXCANCEL)GetProcAddress(wsdll, "GetAddrInfoExCancel");
|
||||||
+
|
+
|
||||||
+ if (cancel_handle) { GetAddrInfoExCancel(&cancel_handle); }
|
+ if (cancel_handle) { GetAddrInfoExCancel(&cancel_handle); }
|
||||||
+#else
|
+#else
|
||||||
if (cancel_handle) { ::GetAddrInfoExCancel(&cancel_handle); }
|
if (cancel_handle) { ::GetAddrInfoExCancel(&cancel_handle); }
|
||||||
+#endif
|
+#endif
|
||||||
|
+
|
||||||
::CloseHandle(event);
|
::CloseHandle(event);
|
||||||
return EAI_AGAIN;
|
return EAI_AGAIN;
|
||||||
}
|
}
|
||||||
--
|
@@ -13952,3 +13965,4 @@ inline SSL_CTX *Client::ssl_context() const {
|
||||||
2.51.0
|
} // namespace httplib
|
||||||
|
|
||||||
|
#endif // CPPHTTPLIB_HTTPLIB_H
|
||||||
|
+
|
||||||
|
--
|
||||||
|
2.51.2
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,16 @@
|
||||||
|
diff --git a/library/aesni.h b/library/aesni.h
|
||||||
|
index 754c984c79..59e27afd3e 100644
|
||||||
|
--- a/library/aesni.h
|
||||||
|
+++ b/library/aesni.h
|
||||||
|
@@ -35,7 +35,7 @@
|
||||||
|
/* GCC-like compilers: currently, we only support intrinsics if the requisite
|
||||||
|
* target flag is enabled when building the library (e.g. `gcc -mpclmul -msse2`
|
||||||
|
* or `clang -maes -mpclmul`). */
|
||||||
|
-#if (defined(__GNUC__) || defined(__clang__)) && defined(__AES__) && defined(__PCLMUL__)
|
||||||
|
+#if defined(__GNUC__) || defined(__clang__)
|
||||||
|
#define MBEDTLS_AESNI_HAVE_INTRINSICS
|
||||||
|
#endif
|
||||||
|
/* For 32-bit, we only support intrinsics */
|
||||||
diff --git a/library/aesni.c b/library/aesni.c
|
diff --git a/library/aesni.c b/library/aesni.c
|
||||||
index 2857068..3e104ab 100644
|
index 2857068..3e104ab 100644
|
||||||
--- a/library/aesni.c
|
--- a/library/aesni.c
|
||||||
|
|
@ -1,10 +0,0 @@
|
||||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
|
||||||
index 1811c42..bac9098 100644
|
|
||||||
--- a/CMakeLists.txt
|
|
||||||
+++ b/CMakeLists.txt
|
|
||||||
@@ -1,4 +1,4 @@
|
|
||||||
-cmake_minimum_required(VERSION 2.6)
|
|
||||||
+cmake_minimum_required(VERSION 3.5)
|
|
||||||
if(TEST_CPP)
|
|
||||||
project("mbed TLS" C CXX)
|
|
||||||
else()
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
||||||
diff --git a/library/aesni.h b/library/aesni.h
|
|
||||||
index 754c984c79..59e27afd3e 100644
|
|
||||||
--- a/library/aesni.h
|
|
||||||
+++ b/library/aesni.h
|
|
||||||
@@ -35,7 +35,7 @@
|
|
||||||
/* GCC-like compilers: currently, we only support intrinsics if the requisite
|
|
||||||
* target flag is enabled when building the library (e.g. `gcc -mpclmul -msse2`
|
|
||||||
* or `clang -maes -mpclmul`). */
|
|
||||||
-#if (defined(__GNUC__) || defined(__clang__)) && defined(__AES__) && defined(__PCLMUL__)
|
|
||||||
+#if defined(__GNUC__) || defined(__clang__)
|
|
||||||
#define MBEDTLS_AESNI_HAVE_INTRINSICS
|
|
||||||
#endif
|
|
||||||
/* For 32-bit, we only support intrinsics */
|
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
diff --git a/library/common.h b/library/common.h
|
||||||
|
index 50f2a29..c60d9dc 100644
|
||||||
|
--- a/library/common.h
|
||||||
|
+++ b/library/common.h
|
||||||
|
@@ -19,11 +19,11 @@
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
-#if defined(__ARM_NEON)
|
||||||
|
-#include <arm_neon.h>
|
||||||
|
+#if defined(MBEDTLS_PLATFORM_IS_WINDOWS_ON_ARM64)
|
||||||
|
+#include <arm64_neon.h>
|
||||||
|
#define MBEDTLS_HAVE_NEON_INTRINSICS
|
||||||
|
-#elif defined(MBEDTLS_PLATFORM_IS_WINDOWS_ON_ARM64)
|
||||||
|
-#include <arm64_neon.h>
|
||||||
|
+#elif (defined(__ANDROID__) && defined(__ARM_FP)) || defined(__ARM_NEON)
|
||||||
|
+#include <arm_neon.h>
|
||||||
|
#define MBEDTLS_HAVE_NEON_INTRINSICS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
From cc15da16e533b2a801934eab2dfeaf3c3949a1dc Mon Sep 17 00:00:00 2001
|
||||||
|
From: crueter <crueter@eden-emu.dev>
|
||||||
|
Date: Mon, 8 Sep 2025 12:28:55 -0400
|
||||||
|
Subject: [PATCH] [cmake] disable NEON runtime check on clang-cl
|
||||||
|
|
||||||
|
When enabling runtime NEON checking for clang-cl, the linker would error out with `undefined symbol: __emit`, since clang doesn't actually implement this instruction. Therefore it makes sense to disable the runtime check by default on this platform, until either this is fixed or a clang-cl compatible intrinsic check is added (I don't have enough knowledge of MSVC to do this)
|
||||||
|
---
|
||||||
|
cmake/OpusConfig.cmake | 7 ++++++-
|
||||||
|
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/cmake/OpusConfig.cmake b/cmake/OpusConfig.cmake
|
||||||
|
index e9319fbad..d0f459e88 100644
|
||||||
|
--- a/cmake/OpusConfig.cmake
|
||||||
|
+++ b/cmake/OpusConfig.cmake
|
||||||
|
@@ -71,7 +71,12 @@ elseif(OPUS_CPU_ARM AND NOT OPUS_DISABLE_INTRINSICS)
|
||||||
|
opus_detect_neon(COMPILER_SUPPORT_NEON)
|
||||||
|
if(COMPILER_SUPPORT_NEON)
|
||||||
|
option(OPUS_USE_NEON "Option to enable NEON" ON)
|
||||||
|
- option(OPUS_MAY_HAVE_NEON "Does runtime check for neon support" ON)
|
||||||
|
+ if (MSVC AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
||||||
|
+ set(NEON_RUNTIME_CHECK_DEFAULT OFF)
|
||||||
|
+ else()
|
||||||
|
+ set(NEON_RUNTIME_CHECK_DEFAULT ON)
|
||||||
|
+ endif()
|
||||||
|
+ option(OPUS_MAY_HAVE_NEON "Does runtime check for neon support" ${NEON_RUNTIME_CHECK_DEFAULT})
|
||||||
|
option(OPUS_PRESUME_NEON "Assume target CPU has NEON support" OFF)
|
||||||
|
if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64")
|
||||||
|
set(OPUS_PRESUME_NEON ON)
|
||||||
|
|
@ -0,0 +1,153 @@
|
||||||
|
From bf455b67b4eaa446ffae5d25410b141b7b1b1082 Mon Sep 17 00:00:00 2001
|
||||||
|
From: crueter <crueter@eden-emu.dev>
|
||||||
|
Date: Mon, 8 Sep 2025 12:08:20 -0400
|
||||||
|
Subject: [PATCH] [cmake] `OPUS_INSTALL` option; only default install if root
|
||||||
|
project
|
||||||
|
|
||||||
|
Signed-off-by: crueter <crueter@eden-emu.dev>
|
||||||
|
---
|
||||||
|
CMakeLists.txt | 112 ++++++++++++++++++++++++++++---------------------
|
||||||
|
1 file changed, 64 insertions(+), 48 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||||
|
index fcf034b19..08b5e16f8 100644
|
||||||
|
--- a/CMakeLists.txt
|
||||||
|
+++ b/CMakeLists.txt
|
||||||
|
@@ -4,6 +4,13 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
||||||
|
include(OpusPackageVersion)
|
||||||
|
get_package_version(PACKAGE_VERSION PROJECT_VERSION)
|
||||||
|
|
||||||
|
+# root project detection
|
||||||
|
+if(DEFINED PROJECT_NAME)
|
||||||
|
+ set(root_project OFF)
|
||||||
|
+else()
|
||||||
|
+ set(root_project ON)
|
||||||
|
+endif()
|
||||||
|
+
|
||||||
|
project(Opus LANGUAGES C VERSION ${PROJECT_VERSION})
|
||||||
|
|
||||||
|
include(OpusFunctions)
|
||||||
|
@@ -83,12 +90,16 @@ set(OPUS_DNN_FLOAT_DEBUG_HELP_STR "Run DNN computations as float for debugging p
|
||||||
|
option(OPUS_DNN_FLOAT_DEBUG ${OPUS_DNN_FLOAT_DEBUG_HELP_STR} OFF)
|
||||||
|
add_feature_info(OPUS_DNN_FLOAT_DEBUG OPUS_DNN_FLOAT_DEBUG ${OPUS_DNN_FLOAT_DEBUG_HELP_STR})
|
||||||
|
|
||||||
|
+set(OPUS_INSTALL_HELP_STR "Install Opus targets")
|
||||||
|
+option(OPUS_INSTALL ${OPUS_INSTALL_HELP_STR} ${root_project})
|
||||||
|
+add_feature_info(OPUS_INSTALL OPUS_INSTALL ${OPUS_INSTALL_HELP_STR})
|
||||||
|
+
|
||||||
|
set(OPUS_INSTALL_PKG_CONFIG_MODULE_HELP_STR "install pkg-config module.")
|
||||||
|
-option(OPUS_INSTALL_PKG_CONFIG_MODULE ${OPUS_INSTALL_PKG_CONFIG_MODULE_HELP_STR} ON)
|
||||||
|
+option(OPUS_INSTALL_PKG_CONFIG_MODULE ${OPUS_INSTALL_PKG_CONFIG_MODULE_HELP_STR} ${OPUS_INSTALL})
|
||||||
|
add_feature_info(OPUS_INSTALL_PKG_CONFIG_MODULE OPUS_INSTALL_PKG_CONFIG_MODULE ${OPUS_INSTALL_PKG_CONFIG_MODULE_HELP_STR})
|
||||||
|
|
||||||
|
set(OPUS_INSTALL_CMAKE_CONFIG_MODULE_HELP_STR "install CMake package config module.")
|
||||||
|
-option(OPUS_INSTALL_CMAKE_CONFIG_MODULE ${OPUS_INSTALL_CMAKE_CONFIG_MODULE_HELP_STR} ON)
|
||||||
|
+option(OPUS_INSTALL_CMAKE_CONFIG_MODULE ${OPUS_INSTALL_CMAKE_CONFIG_MODULE_HELP_STR} ${OPUS_INSTALL})
|
||||||
|
add_feature_info(OPUS_INSTALL_CMAKE_CONFIG_MODULE OPUS_INSTALL_CMAKE_CONFIG_MODULE ${OPUS_INSTALL_CMAKE_CONFIG_MODULE_HELP_STR})
|
||||||
|
|
||||||
|
set(OPUS_DRED_HELP_STR "enable DRED.")
|
||||||
|
@@ -613,53 +624,58 @@ if(OPUS_BUILD_FRAMEWORK)
|
||||||
|
OUTPUT_NAME Opus)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
-install(TARGETS opus
|
||||||
|
- EXPORT OpusTargets
|
||||||
|
- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
|
- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
|
- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||||
|
- FRAMEWORK DESTINATION ${CMAKE_INSTALL_PREFIX}
|
||||||
|
- PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/opus)
|
||||||
|
-
|
||||||
|
-if(OPUS_INSTALL_PKG_CONFIG_MODULE)
|
||||||
|
- set(prefix ${CMAKE_INSTALL_PREFIX})
|
||||||
|
- set(exec_prefix ${CMAKE_INSTALL_PREFIX})
|
||||||
|
- set(libdir ${CMAKE_INSTALL_FULL_LIBDIR})
|
||||||
|
- set(includedir ${CMAKE_INSTALL_FULL_INCLUDEDIR})
|
||||||
|
- set(VERSION ${PACKAGE_VERSION})
|
||||||
|
- if(HAVE_LIBM)
|
||||||
|
- set(LIBM "-lm")
|
||||||
|
+if (OPUS_INSTALL)
|
||||||
|
+ install(TARGETS opus
|
||||||
|
+ EXPORT OpusTargets
|
||||||
|
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
|
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
|
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||||
|
+ FRAMEWORK DESTINATION ${CMAKE_INSTALL_PREFIX}
|
||||||
|
+ PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/opus)
|
||||||
|
+
|
||||||
|
+ if(OPUS_INSTALL_PKG_CONFIG_MODULE)
|
||||||
|
+ set(prefix ${CMAKE_INSTALL_PREFIX})
|
||||||
|
+ set(exec_prefix ${CMAKE_INSTALL_PREFIX})
|
||||||
|
+ set(libdir ${CMAKE_INSTALL_FULL_LIBDIR})
|
||||||
|
+ set(includedir ${CMAKE_INSTALL_FULL_INCLUDEDIR})
|
||||||
|
+ set(VERSION ${PACKAGE_VERSION})
|
||||||
|
+ if(HAVE_LIBM)
|
||||||
|
+ set(LIBM "-lm")
|
||||||
|
+ endif()
|
||||||
|
+ configure_file(opus.pc.in opus.pc)
|
||||||
|
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/opus.pc
|
||||||
|
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
||||||
|
+ endif()
|
||||||
|
+
|
||||||
|
+ if(OPUS_INSTALL_CMAKE_CONFIG_MODULE)
|
||||||
|
+ set(CPACK_GENERATOR TGZ)
|
||||||
|
+ include(CPack)
|
||||||
|
+ set(CMAKE_INSTALL_PACKAGEDIR ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
|
||||||
|
+ install(EXPORT OpusTargets
|
||||||
|
+ NAMESPACE Opus::
|
||||||
|
+ DESTINATION ${CMAKE_INSTALL_PACKAGEDIR})
|
||||||
|
+
|
||||||
|
+ include(CMakePackageConfigHelpers)
|
||||||
|
+
|
||||||
|
+ set(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR})
|
||||||
|
+ configure_package_config_file(
|
||||||
|
+ ${PROJECT_SOURCE_DIR}/cmake/OpusConfig.cmake.in
|
||||||
|
+ OpusConfig.cmake
|
||||||
|
+ INSTALL_DESTINATION
|
||||||
|
+ ${CMAKE_INSTALL_PACKAGEDIR}
|
||||||
|
+ PATH_VARS
|
||||||
|
+ INCLUDE_INSTALL_DIR
|
||||||
|
+ INSTALL_PREFIX
|
||||||
|
+ ${CMAKE_INSTALL_PREFIX})
|
||||||
|
+
|
||||||
|
+ write_basic_package_version_file(OpusConfigVersion.cmake
|
||||||
|
+ VERSION ${PROJECT_VERSION}
|
||||||
|
+ COMPATIBILITY SameMajorVersion)
|
||||||
|
+
|
||||||
|
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/OpusConfig.cmake
|
||||||
|
+ ${CMAKE_CURRENT_BINARY_DIR}/OpusConfigVersion.cmake
|
||||||
|
+ DESTINATION ${CMAKE_INSTALL_PACKAGEDIR})
|
||||||
|
endif()
|
||||||
|
- configure_file(opus.pc.in opus.pc)
|
||||||
|
- install(FILES ${CMAKE_CURRENT_BINARY_DIR}/opus.pc
|
||||||
|
- DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
||||||
|
-endif()
|
||||||
|
-
|
||||||
|
-if(OPUS_INSTALL_CMAKE_CONFIG_MODULE)
|
||||||
|
- set(CPACK_GENERATOR TGZ)
|
||||||
|
- include(CPack)
|
||||||
|
- set(CMAKE_INSTALL_PACKAGEDIR ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
|
||||||
|
- install(EXPORT OpusTargets
|
||||||
|
- NAMESPACE Opus::
|
||||||
|
- DESTINATION ${CMAKE_INSTALL_PACKAGEDIR})
|
||||||
|
-
|
||||||
|
- include(CMakePackageConfigHelpers)
|
||||||
|
-
|
||||||
|
- set(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR})
|
||||||
|
- configure_package_config_file(${PROJECT_SOURCE_DIR}/cmake/OpusConfig.cmake.in
|
||||||
|
- OpusConfig.cmake
|
||||||
|
- INSTALL_DESTINATION
|
||||||
|
- ${CMAKE_INSTALL_PACKAGEDIR}
|
||||||
|
- PATH_VARS
|
||||||
|
- INCLUDE_INSTALL_DIR
|
||||||
|
- INSTALL_PREFIX
|
||||||
|
- ${CMAKE_INSTALL_PREFIX})
|
||||||
|
- write_basic_package_version_file(OpusConfigVersion.cmake
|
||||||
|
- VERSION ${PROJECT_VERSION}
|
||||||
|
- COMPATIBILITY SameMajorVersion)
|
||||||
|
- install(FILES ${CMAKE_CURRENT_BINARY_DIR}/OpusConfig.cmake
|
||||||
|
- ${CMAKE_CURRENT_BINARY_DIR}/OpusConfigVersion.cmake
|
||||||
|
- DESTINATION ${CMAKE_INSTALL_PACKAGEDIR})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(OPUS_BUILD_PROGRAMS)
|
||||||
|
|
@ -0,0 +1,287 @@
|
||||||
|
From 67bf3d1381b1faf59e87001d6156ba4e21cada14 Mon Sep 17 00:00:00 2001
|
||||||
|
From: crueter <crueter@eden-emu.dev>
|
||||||
|
Date: Mon, 29 Dec 2025 21:22:36 -0500
|
||||||
|
Subject: [PATCH] [cmake] refactor: shared/static handling
|
||||||
|
|
||||||
|
This significantly redoes the way shared and static libraries are
|
||||||
|
handled. Now, it's controlled by two options: `SPIRV_TOOLS_BUILD_STATIC`
|
||||||
|
and `SPIRV_TOOLS_BUILD_SHARED`.
|
||||||
|
|
||||||
|
The default configuration (no `BUILD_SHARED_LIBS` set, options left at
|
||||||
|
default) is to build shared ONLY if this is the master project, or
|
||||||
|
static ONLY if this is a subproject (e.g. FetchContent, CPM.cmake). Also
|
||||||
|
I should note that static-only (i.e. no shared) is now a supported
|
||||||
|
target, this is done because projects including it as a submodule e.g.
|
||||||
|
on Android or Windows may prefer this.
|
||||||
|
|
||||||
|
Now the shared/static handling:
|
||||||
|
- static ON, shared OFF: Only generates `.a` libraries.
|
||||||
|
- static ON, shared ON: Generates `.a` libraries, but also
|
||||||
|
`libSPIRV-Tools.so`
|
||||||
|
- static OFF, shared ON: Only generates `.so` libraries.
|
||||||
|
|
||||||
|
Notable TODOs:
|
||||||
|
- SPIRV-Tools-shared.pc seems redundant--how should we handle which one
|
||||||
|
to use in the case of distributions that distribute both types (MSYS2
|
||||||
|
for instance)?
|
||||||
|
* *Note: pkgconfig sucks at this and usually just leaves it up to the
|
||||||
|
user, so the optimal solution may indeed be doing absolutely
|
||||||
|
nothing.* CMake is unaffected :)
|
||||||
|
- use namespaces in the CMake config files pleaaaaase
|
||||||
|
|
||||||
|
This is going to change things a good bit for package maintainers, but
|
||||||
|
cest la vie. It's for the greater good, I promise.
|
||||||
|
|
||||||
|
Signed-off-by: crueter <crueter@eden-emu.dev>
|
||||||
|
---
|
||||||
|
CMakeLists.txt | 108 +++++++++++++++++++++++++-----------------
|
||||||
|
source/CMakeLists.txt | 62 ++++++++++++------------
|
||||||
|
2 files changed, 94 insertions(+), 76 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||||
|
index 4d843b4d2f..07201f690f 100644
|
||||||
|
--- a/CMakeLists.txt
|
||||||
|
+++ b/CMakeLists.txt
|
||||||
|
@@ -14,6 +14,15 @@
|
||||||
|
|
||||||
|
cmake_minimum_required(VERSION 3.22.1)
|
||||||
|
|
||||||
|
+# master project detection--useful for FetchContent/submodule inclusion
|
||||||
|
+set(master_project OFF)
|
||||||
|
+set(subproject ON)
|
||||||
|
+
|
||||||
|
+if (NOT DEFINED PROJECT_NAME)
|
||||||
|
+ set(master_project ON)
|
||||||
|
+ set(subproject OFF)
|
||||||
|
+endif()
|
||||||
|
+
|
||||||
|
project(spirv-tools)
|
||||||
|
|
||||||
|
# Avoid a bug in CMake 3.22.1. By default it will set -std=c++11 for
|
||||||
|
@@ -135,46 +144,49 @@ if (DEFINED SPIRV_TOOLS_EXTRA_DEFINITIONS)
|
||||||
|
add_definitions(${SPIRV_TOOLS_EXTRA_DEFINITIONS})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
-# Library build setting definitions:
|
||||||
|
-#
|
||||||
|
-# * SPIRV_TOOLS_BUILD_STATIC - ON or OFF - Defaults to ON.
|
||||||
|
-# If enabled the following targets will be created:
|
||||||
|
-# ${SPIRV_TOOLS}-static - STATIC library.
|
||||||
|
-# Has full public symbol visibility.
|
||||||
|
-# ${SPIRV_TOOLS}-shared - SHARED library.
|
||||||
|
-# Has default-hidden symbol visibility.
|
||||||
|
-# ${SPIRV_TOOLS} - will alias to one of above, based on BUILD_SHARED_LIBS.
|
||||||
|
-# If disabled the following targets will be created:
|
||||||
|
-# ${SPIRV_TOOLS} - either STATIC or SHARED based on SPIRV_TOOLS_LIBRARY_TYPE.
|
||||||
|
-# Has full public symbol visibility.
|
||||||
|
-# ${SPIRV_TOOLS}-shared - SHARED library.
|
||||||
|
-# Has default-hidden symbol visibility.
|
||||||
|
-#
|
||||||
|
-# * SPIRV_TOOLS_LIBRARY_TYPE - SHARED or STATIC.
|
||||||
|
-# Specifies the library type used for building SPIRV-Tools libraries.
|
||||||
|
-# Defaults to SHARED when BUILD_SHARED_LIBS=1, otherwise STATIC.
|
||||||
|
-#
|
||||||
|
-# * SPIRV_TOOLS_FULL_VISIBILITY - "${SPIRV_TOOLS}-static" or "${SPIRV_TOOLS}"
|
||||||
|
-# Evaluates to the SPIRV_TOOLS target library name that has no hidden symbols.
|
||||||
|
-# This is used by internal targets for accessing symbols that are non-public.
|
||||||
|
-# Note this target provides no API stability guarantees.
|
||||||
|
-#
|
||||||
|
-# Ideally, all of these will go away - see https://github.com/KhronosGroup/SPIRV-Tools/issues/3909.
|
||||||
|
-option(ENABLE_EXCEPTIONS_ON_MSVC "Build SPIRV-TOOLS with c++ exceptions enabled in MSVC" ON)
|
||||||
|
-option(SPIRV_TOOLS_BUILD_STATIC "Build ${SPIRV_TOOLS}-static target. ${SPIRV_TOOLS} will alias to ${SPIRV_TOOLS}-static or ${SPIRV_TOOLS}-shared based on BUILD_SHARED_LIBS" ON)
|
||||||
|
-if(SPIRV_TOOLS_BUILD_STATIC)
|
||||||
|
- set(SPIRV_TOOLS_FULL_VISIBILITY ${SPIRV_TOOLS}-static)
|
||||||
|
+# If BUILD_SHARED_LIBS is undefined, set it based on whether we are
|
||||||
|
+# the master project or a subproject
|
||||||
|
+if (NOT DEFINED BUILD_SHARED_LIBS)
|
||||||
|
+ set(BUILD_SHARED_LIBS ${master_project})
|
||||||
|
+endif()
|
||||||
|
+
|
||||||
|
+if (BUILD_SHARED_LIBS)
|
||||||
|
+ set(static_default OFF)
|
||||||
|
+else()
|
||||||
|
+ set(static_default ON)
|
||||||
|
+endif()
|
||||||
|
+
|
||||||
|
+option(SPIRV_TOOLS_BUILD_SHARED "Build ${SPIRV_TOOLS} as a shared library"
|
||||||
|
+ ${BUILD_SHARED_LIBS})
|
||||||
|
+option(SPIRV_TOOLS_BUILD_STATIC "Build ${SPIRV_TOOLS} as a static library"
|
||||||
|
+ ${static_default})
|
||||||
|
+
|
||||||
|
+# Avoid conflict between the dll import library and
|
||||||
|
+# the static library (thanks microsoft)
|
||||||
|
+if(CMAKE_STATIC_LIBRARY_PREFIX STREQUAL "" AND
|
||||||
|
+ CMAKE_STATIC_LIBRARY_SUFFIX STREQUAL ".lib")
|
||||||
|
+ set(SPIRV_TOOLS_STATIC_LIBNAME "${SPIRV_TOOLS}-static")
|
||||||
|
+else()
|
||||||
|
+ set(SPIRV_TOOLS_STATIC_LIBNAME "${SPIRV_TOOLS}")
|
||||||
|
+endif()
|
||||||
|
+
|
||||||
|
+if (SPIRV_TOOLS_BUILD_STATIC)
|
||||||
|
+ # If building a static library at all, always build other libraries as static,
|
||||||
|
+ # and link to the static SPIRV-Tools library.
|
||||||
|
set(SPIRV_TOOLS_LIBRARY_TYPE "STATIC")
|
||||||
|
-else(SPIRV_TOOLS_BUILD_STATIC)
|
||||||
|
- set(SPIRV_TOOLS_FULL_VISIBILITY ${SPIRV_TOOLS})
|
||||||
|
- if (NOT DEFINED SPIRV_TOOLS_LIBRARY_TYPE)
|
||||||
|
- if(BUILD_SHARED_LIBS)
|
||||||
|
- set(SPIRV_TOOLS_LIBRARY_TYPE "SHARED")
|
||||||
|
- else()
|
||||||
|
- set(SPIRV_TOOLS_LIBRARY_TYPE "STATIC")
|
||||||
|
- endif()
|
||||||
|
- endif()
|
||||||
|
-endif(SPIRV_TOOLS_BUILD_STATIC)
|
||||||
|
+ set(SPIRV_TOOLS_FULL_VISIBILITY ${SPIRV_TOOLS}-static)
|
||||||
|
+elseif (SPIRV_TOOLS_BUILD_SHARED)
|
||||||
|
+ # If only building a shared library, link other libraries to the
|
||||||
|
+ # shared library. Also, other libraries should be shared
|
||||||
|
+ set(SPIRV_TOOLS_LIBRARY_TYPE "SHARED")
|
||||||
|
+ set(SPIRV_TOOLS_FULL_VISIBILITY ${SPIRV_TOOLS}-shared)
|
||||||
|
+else()
|
||||||
|
+ message(FATAL_ERROR "You must set one of "
|
||||||
|
+ "SPIRV_TOOLS_BUILD_STATIC or SPIRV_TOOLS_BUILD_SHARED!")
|
||||||
|
+endif()
|
||||||
|
+
|
||||||
|
+option(ENABLE_EXCEPTIONS_ON_MSVC
|
||||||
|
+ "Build SPIRV-TOOLS with C++ exceptions enabled in MSVC" ON)
|
||||||
|
|
||||||
|
function(spvtools_default_compile_options TARGET)
|
||||||
|
target_compile_options(${TARGET} PRIVATE ${SPIRV_WARNINGS})
|
||||||
|
@@ -372,7 +384,7 @@ if (NOT "${SPIRV_SKIP_TESTS}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(SPIRV_LIBRARIES "-lSPIRV-Tools-opt -lSPIRV-Tools -lSPIRV-Tools-link")
|
||||||
|
-set(SPIRV_SHARED_LIBRARIES "-lSPIRV-Tools-shared")
|
||||||
|
+set(SPIRV_SHARED_LIBRARIES "-lSPIRV-Tools")
|
||||||
|
|
||||||
|
# Build pkg-config file
|
||||||
|
# Use a first-class target so it's regenerated when relevant files are updated.
|
||||||
|
@@ -388,7 +400,12 @@ add_custom_command(
|
||||||
|
-DSPIRV_LIBRARIES=${SPIRV_LIBRARIES}
|
||||||
|
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/write_pkg_config.cmake
|
||||||
|
DEPENDS "CHANGES" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/SPIRV-Tools.pc.in" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/write_pkg_config.cmake")
|
||||||
|
-add_custom_command(
|
||||||
|
+
|
||||||
|
+set(pc_files ${CMAKE_CURRENT_BINARY_DIR}/SPIRV-Tools.pc)
|
||||||
|
+
|
||||||
|
+# TODO(crueter): remove?
|
||||||
|
+if (SPIRV_TOOLS_BUILD_SHARED)
|
||||||
|
+ add_custom_command(
|
||||||
|
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/SPIRV-Tools-shared.pc
|
||||||
|
COMMAND ${CMAKE_COMMAND}
|
||||||
|
-DCHANGES_FILE=${CMAKE_CURRENT_SOURCE_DIR}/CHANGES
|
||||||
|
@@ -400,9 +417,12 @@ add_custom_command(
|
||||||
|
-DSPIRV_SHARED_LIBRARIES=${SPIRV_SHARED_LIBRARIES}
|
||||||
|
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/write_pkg_config.cmake
|
||||||
|
DEPENDS "CHANGES" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/SPIRV-Tools-shared.pc.in" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/write_pkg_config.cmake")
|
||||||
|
-add_custom_target(spirv-tools-pkg-config
|
||||||
|
- ALL
|
||||||
|
- DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/SPIRV-Tools-shared.pc ${CMAKE_CURRENT_BINARY_DIR}/SPIRV-Tools.pc)
|
||||||
|
+ set(pc_files ${pc_files} ${CMAKE_CURRENT_BINARY_DIR}/SPIRV-Tools-shared.pc)
|
||||||
|
+endif()
|
||||||
|
+
|
||||||
|
+add_custom_target(spirv-tools-pkg-config
|
||||||
|
+ ALL
|
||||||
|
+ DEPENDS ${pc_files})
|
||||||
|
|
||||||
|
# Install pkg-config file
|
||||||
|
if (ENABLE_SPIRV_TOOLS_INSTALL)
|
||||||
|
diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt
|
||||||
|
index bfa1e661bc..fd3712c70c 100644
|
||||||
|
--- a/source/CMakeLists.txt
|
||||||
|
+++ b/source/CMakeLists.txt
|
||||||
|
@@ -337,49 +337,44 @@ function(spirv_tools_default_target_options target)
|
||||||
|
)
|
||||||
|
set_property(TARGET ${target} PROPERTY FOLDER "SPIRV-Tools libraries")
|
||||||
|
spvtools_check_symbol_exports(${target})
|
||||||
|
- add_dependencies(${target} spirv-tools-build-version core_tables extinst_tables)
|
||||||
|
+ add_dependencies(${target}
|
||||||
|
+ spirv-tools-build-version core_tables extinst_tables)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
-# Always build ${SPIRV_TOOLS}-shared. This is expected distro packages, and
|
||||||
|
-# unlike the other SPIRV_TOOLS target, defaults to hidden symbol visibility.
|
||||||
|
-add_library(${SPIRV_TOOLS}-shared SHARED ${SPIRV_SOURCES})
|
||||||
|
-if (SPIRV_TOOLS_USE_MIMALLOC)
|
||||||
|
- target_link_libraries(${SPIRV_TOOLS}-shared PRIVATE mimalloc-static)
|
||||||
|
+if (SPIRV_TOOLS_BUILD_SHARED)
|
||||||
|
+ add_library(${SPIRV_TOOLS}-shared SHARED ${SPIRV_SOURCES})
|
||||||
|
+ if (SPIRV_TOOLS_USE_MIMALLOC)
|
||||||
|
+ target_link_libraries(${SPIRV_TOOLS}-shared PRIVATE mimalloc-static)
|
||||||
|
+ endif()
|
||||||
|
+
|
||||||
|
+ set_target_properties(${SPIRV_TOOLS}-shared PROPERTIES
|
||||||
|
+ OUTPUT_NAME "${SPIRV_TOOLS}")
|
||||||
|
+ spirv_tools_default_target_options(${SPIRV_TOOLS}-shared)
|
||||||
|
+
|
||||||
|
+ target_compile_definitions(${SPIRV_TOOLS}-shared
|
||||||
|
+ PRIVATE SPIRV_TOOLS_IMPLEMENTATION
|
||||||
|
+ PUBLIC SPIRV_TOOLS_SHAREDLIB)
|
||||||
|
+
|
||||||
|
+ list(APPEND SPIRV_TOOLS_TARGETS ${SPIRV_TOOLS}-shared)
|
||||||
|
endif()
|
||||||
|
-spirv_tools_default_target_options(${SPIRV_TOOLS}-shared)
|
||||||
|
-set_target_properties(${SPIRV_TOOLS}-shared PROPERTIES CXX_VISIBILITY_PRESET hidden)
|
||||||
|
-target_compile_definitions(${SPIRV_TOOLS}-shared
|
||||||
|
- PRIVATE SPIRV_TOOLS_IMPLEMENTATION
|
||||||
|
- PUBLIC SPIRV_TOOLS_SHAREDLIB
|
||||||
|
-)
|
||||||
|
|
||||||
|
if(SPIRV_TOOLS_BUILD_STATIC)
|
||||||
|
add_library(${SPIRV_TOOLS}-static STATIC ${SPIRV_SOURCES})
|
||||||
|
if (SPIRV_TOOLS_USE_MIMALLOC AND SPIRV_TOOLS_USE_MIMALLOC_IN_STATIC_BUILD)
|
||||||
|
target_link_libraries(${SPIRV_TOOLS}-shared PRIVATE mimalloc-static)
|
||||||
|
endif()
|
||||||
|
+
|
||||||
|
spirv_tools_default_target_options(${SPIRV_TOOLS}-static)
|
||||||
|
- # The static target does not have the '-static' suffix.
|
||||||
|
- set_target_properties(${SPIRV_TOOLS}-static PROPERTIES OUTPUT_NAME "${SPIRV_TOOLS}")
|
||||||
|
-
|
||||||
|
- # Create the "${SPIRV_TOOLS}" target as an alias to either "${SPIRV_TOOLS}-static"
|
||||||
|
- # or "${SPIRV_TOOLS}-shared" depending on the value of BUILD_SHARED_LIBS.
|
||||||
|
- if(BUILD_SHARED_LIBS)
|
||||||
|
- add_library(${SPIRV_TOOLS} ALIAS ${SPIRV_TOOLS}-shared)
|
||||||
|
- else()
|
||||||
|
- add_library(${SPIRV_TOOLS} ALIAS ${SPIRV_TOOLS}-static)
|
||||||
|
- endif()
|
||||||
|
+ set_target_properties(${SPIRV_TOOLS}-static PROPERTIES
|
||||||
|
+ OUTPUT_NAME "${SPIRV_TOOLS_STATIC_LIBNAME}")
|
||||||
|
|
||||||
|
- set(SPIRV_TOOLS_TARGETS ${SPIRV_TOOLS}-static ${SPIRV_TOOLS}-shared)
|
||||||
|
-else()
|
||||||
|
- add_library(${SPIRV_TOOLS} ${SPIRV_TOOLS_LIBRARY_TYPE} ${SPIRV_SOURCES})
|
||||||
|
- if (SPIRV_TOOLS_USE_MIMALLOC)
|
||||||
|
- target_link_libraries(${SPIRV_TOOLS} PRIVATE mimalloc-static)
|
||||||
|
- endif()
|
||||||
|
- spirv_tools_default_target_options(${SPIRV_TOOLS})
|
||||||
|
- set(SPIRV_TOOLS_TARGETS ${SPIRV_TOOLS} ${SPIRV_TOOLS}-shared)
|
||||||
|
+ list(APPEND SPIRV_TOOLS_TARGETS ${SPIRV_TOOLS}-static)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
+# Create the "SPIRV-Tools" target as an alias to either "SPIRV-Tools-static"
|
||||||
|
+# or "SPIRV-Tools-shared" depending on the value of SPIRV_TOOLS_BUILD_SHARED.
|
||||||
|
+add_library(${SPIRV_TOOLS} ALIAS ${SPIRV_TOOLS_FULL_VISIBILITY})
|
||||||
|
+
|
||||||
|
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
|
||||||
|
find_library(LIBRT rt)
|
||||||
|
if(LIBRT)
|
||||||
|
@@ -390,14 +385,17 @@ if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(ENABLE_SPIRV_TOOLS_INSTALL)
|
||||||
|
- if (SPIRV_TOOLS_USE_MIMALLOC AND (NOT SPIRV_TOOLS_BUILD_STATIC OR SPIRV_TOOLS_USE_MIMALLOC_IN_STATIC_BUILD))
|
||||||
|
+ if (SPIRV_TOOLS_USE_MIMALLOC AND
|
||||||
|
+ (NOT SPIRV_TOOLS_BUILD_STATIC OR SPIRV_TOOLS_USE_MIMALLOC_IN_STATIC_BUILD))
|
||||||
|
list(APPEND SPIRV_TOOLS_TARGETS mimalloc-static)
|
||||||
|
endif()
|
||||||
|
install(TARGETS ${SPIRV_TOOLS_TARGETS} EXPORT ${SPIRV_TOOLS}Targets)
|
||||||
|
export(EXPORT ${SPIRV_TOOLS}Targets FILE ${SPIRV_TOOLS}Target.cmake)
|
||||||
|
|
||||||
|
spvtools_config_package_dir(${SPIRV_TOOLS} PACKAGE_DIR)
|
||||||
|
- install(EXPORT ${SPIRV_TOOLS}Targets FILE ${SPIRV_TOOLS}Target.cmake DESTINATION ${PACKAGE_DIR})
|
||||||
|
+ install(EXPORT ${SPIRV_TOOLS}Targets
|
||||||
|
+ FILE ${SPIRV_TOOLS}Target.cmake
|
||||||
|
+ DESTINATION ${PACKAGE_DIR})
|
||||||
|
|
||||||
|
# Special config file for root library compared to other libs.
|
||||||
|
file(WRITE ${CMAKE_BINARY_DIR}/${SPIRV_TOOLS}Config.cmake
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
From b3622608433c183ba868a1dc8dd9cf285eb3b916 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Dario Petrillo <dario.pk1@gmail.com>
|
||||||
|
Date: Thu, 27 Nov 2025 23:12:38 +0100
|
||||||
|
Subject: [PATCH] avoid extra memset when clearing an empty table
|
||||||
|
|
||||||
|
---
|
||||||
|
include/ankerl/unordered_dense.h | 6 ++++--
|
||||||
|
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/include/ankerl/unordered_dense.h b/include/ankerl/unordered_dense.h
|
||||||
|
index 0835342..4938212 100644
|
||||||
|
--- a/include/ankerl/unordered_dense.h
|
||||||
|
+++ b/include/ankerl/unordered_dense.h
|
||||||
|
@@ -1490,8 +1490,10 @@ class table : public std::conditional_t<is_map_v<T>, base_table_type_map<T>, bas
|
||||||
|
// modifiers //////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void clear() {
|
||||||
|
- m_values.clear();
|
||||||
|
- clear_buckets();
|
||||||
|
+ if (!empty()) {
|
||||||
|
+ m_values.clear();
|
||||||
|
+ clear_buckets();
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
auto insert(value_type const& value) -> std::pair<iterator, bool> {
|
||||||
|
|
@ -13,7 +13,6 @@ Copyright: yuzu Emulator Project
|
||||||
License: GPL-2.0-or-later
|
License: GPL-2.0-or-later
|
||||||
|
|
||||||
Files: dist/qt_themes/default/icons/256x256/eden.png
|
Files: dist/qt_themes/default/icons/256x256/eden.png
|
||||||
dist/qt_themes/default/icons/256x256/eden_named.png
|
|
||||||
dist/yuzu.bmp
|
dist/yuzu.bmp
|
||||||
dist/eden.icns
|
dist/eden.icns
|
||||||
dist/eden.ico
|
dist/eden.ico
|
||||||
|
|
|
||||||
663
CMakeLists.txt
|
|
@ -1,87 +1,39 @@
|
||||||
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
# SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 3.22)
|
cmake_minimum_required(VERSION 3.22)
|
||||||
|
|
||||||
project(yuzu)
|
project(yuzu)
|
||||||
|
|
||||||
if (${CMAKE_SYSTEM_NAME} STREQUAL "SunOS")
|
|
||||||
set(PLATFORM_SUN ON)
|
|
||||||
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
|
|
||||||
set(PLATFORM_FREEBSD ON)
|
|
||||||
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD")
|
|
||||||
set(PLATFORM_OPENBSD ON)
|
|
||||||
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "NetBSD")
|
|
||||||
set(PLATFORM_NETBSD ON)
|
|
||||||
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "DragonFly")
|
|
||||||
set(PLATFORM_DRAGONFLYBSD ON)
|
|
||||||
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Haiku")
|
|
||||||
set(PLATFORM_HAIKU ON)
|
|
||||||
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
|
||||||
set(PLATFORM_LINUX ON)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# dumb heuristic to detect msys2
|
|
||||||
if (CMAKE_COMMAND MATCHES "msys64")
|
|
||||||
set(PLATFORM_MSYS ON)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
|
||||||
set(CXX_CLANG ON)
|
|
||||||
if (MSVC)
|
|
||||||
set(CXX_CLANG_CL ON)
|
|
||||||
endif()
|
|
||||||
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
|
||||||
set(CXX_GCC ON)
|
|
||||||
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
|
||||||
set(CXX_CL ON)
|
|
||||||
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM")
|
|
||||||
set(CXX_ICC ON)
|
|
||||||
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
|
|
||||||
set(CXX_APPLE ON)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules")
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules")
|
||||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/externals/cmake-modules")
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/externals/cmake-modules")
|
||||||
|
|
||||||
# https://gitlab.kitware.com/cmake/cmake/-/merge_requests/11112
|
set(CPM_SOURCE_CACHE ${CMAKE_SOURCE_DIR}/.cache/cpm)
|
||||||
# This works totally fine on MinGW64, but not CLANG{,ARM}64
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||||
if(MINGW AND CXX_CLANG)
|
|
||||||
set(CMAKE_SYSTEM_VERSION 10.0.0)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# NB: this does not account for SPARC
|
include(DetectPlatform)
|
||||||
# If you get Eden working on SPARC, please shoot crueter@crueter.xyz multiple emails
|
include(DetectArchitecture)
|
||||||
# and you will be hailed for eternity
|
include(DefaultConfig)
|
||||||
if (PLATFORM_SUN)
|
include(UseLTO)
|
||||||
# Terrific Solaris pkg shenanigans
|
include(FasterLinker)
|
||||||
list(APPEND CMAKE_PREFIX_PATH "${CMAKE_SYSROOT}/usr/lib/qt/6.6/lib/amd64/cmake")
|
include(UseCcache)
|
||||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SYSROOT}/usr/lib/qt/6.6/lib/amd64/cmake")
|
include(CMakeDependentOption)
|
||||||
|
include(CTest)
|
||||||
|
include(CPMUtil)
|
||||||
|
|
||||||
# Amazing - absolutely incredible
|
if (NOT DEFINED ARCHITECTURE)
|
||||||
list(APPEND CMAKE_PREFIX_PATH "${CMAKE_SYSROOT}/usr/lib/amd64/cmake")
|
message(FATAL_ERROR "Architecture didn't make it out of scope, did you delete DetectArchitecture.cmake?")
|
||||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SYSROOT}/usr/lib/amd64/cmake")
|
|
||||||
|
|
||||||
# For some mighty reason, doing a normal release build sometimes may not trigger
|
|
||||||
# the proper -O3 switch to materialize
|
|
||||||
if (CMAKE_BUILD_TYPE MATCHES "Release")
|
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3")
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3")
|
|
||||||
endif()
|
|
||||||
if (CMAKE_BUILD_TYPE MATCHES "RelWithDebInfo")
|
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2")
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2")
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Needed for FFmpeg w/ VAAPI and DRM
|
# Needed for FFmpeg w/ VAAPI and DRM
|
||||||
if (PLATFORM_OPENBSD)
|
if (PLATFORM_OPENBSD)
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I${CMAKE_SYSROOT}/usr/X11R6/include")
|
# OpenBSD 7.8 broke libcxx when upgrading, so we must define the PSTL backend manually
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${CMAKE_SYSROOT}/usr/X11R6/include")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I${CMAKE_SYSROOT}/usr/X11R6/include -D_LIBCPP_PSTL_BACKEND_SERIAL=1")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${CMAKE_SYSROOT}/usr/X11R6/include -D_LIBCPP_PSTL_BACKEND_SERIAL=1")
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L${CMAKE_SYSROOT}/usr/X11R6/lib")
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L${CMAKE_SYSROOT}/usr/X11R6/lib")
|
||||||
elseif (PLATFORM_NETBSD)
|
elseif (PLATFORM_NETBSD)
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I${CMAKE_SYSROOT}/usr/X11R7/include")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I${CMAKE_SYSROOT}/usr/X11R7/include -I${CMAKE_SYSROOT}/usr/pkg/include/c++/v1")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${CMAKE_SYSROOT}/usr/X11R7/include")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${CMAKE_SYSROOT}/usr/X11R7/include -I${CMAKE_SYSROOT}/usr/pkg/include/c++/v1")
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L${CMAKE_SYSROOT}/usr/X11R7/lib")
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L${CMAKE_SYSROOT}/usr/X11R7/lib")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
@ -90,37 +42,57 @@ if (PLATFORM_NETBSD)
|
||||||
set(ENV{PKG_CONFIG_PATH} "${PKG_CONFIG_PATH}:${CMAKE_SYSROOT}/usr/pkg/lib/ffmpeg7/pkgconfig")
|
set(ENV{PKG_CONFIG_PATH} "${PKG_CONFIG_PATH}:${CMAKE_SYSROOT}/usr/pkg/lib/ffmpeg7/pkgconfig")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# MSYS2 utilities
|
cmake_dependent_option(YUZU_STATIC_ROOM "Build a static room executable only (CI only)" OFF "PLATFORM_LINUX" OFF)
|
||||||
if (PLATFORM_MSYS)
|
if (YUZU_STATIC_ROOM)
|
||||||
include(FixMsysPaths)
|
set(YUZU_ROOM ON)
|
||||||
# really, really dumb heuristic to detect what environment we are in
|
set(YUZU_ROOM_STANDALONE ON)
|
||||||
macro(system var)
|
|
||||||
if (CMAKE_COMMAND MATCHES ${var})
|
|
||||||
set(MSYSTEM ${var})
|
|
||||||
endif()
|
|
||||||
endmacro()
|
|
||||||
|
|
||||||
system(mingw64)
|
# disable e v e r y t h i n g
|
||||||
system(clang64)
|
set(ENABLE_QT OFF)
|
||||||
system(clangarm64)
|
set(ENABLE_SDL2 OFF)
|
||||||
system(ucrt64)
|
set(YUZU_CMD OFF)
|
||||||
|
set(ENABLE_CUBEB OFF)
|
||||||
|
set(ENABLE_UPDATE_CHECKER OFF)
|
||||||
|
set(USE_DISCORD_PRESENCE OFF)
|
||||||
|
set(BUILD_TESTING OFF)
|
||||||
|
set(ENABLE_OPENSSL OFF)
|
||||||
|
set(ENABLE_WEB_SERVICE OFF)
|
||||||
|
set(ENABLE_LIBUSB OFF)
|
||||||
|
|
||||||
if (NOT DEFINED MSYSTEM)
|
# allow static libs for boost and mbedtls though
|
||||||
set(MSYSTEM msys2)
|
set(Boost_USE_STATIC_LIBS ON)
|
||||||
|
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
|
||||||
|
set(MBEDTLS_LIB_SUFFIX "_static")
|
||||||
|
set(YUZU_USE_CPM ON)
|
||||||
|
|
||||||
|
set(zstd_FORCE_BUNDLED ON)
|
||||||
|
set(fmt_FORCE_BUNDLED ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# we (generally) want to prioritize environment-specific binaries if possible
|
# common network mbedtls
|
||||||
# some, like autoconf, are not present on environments besides msys2 though
|
# common: xbyak? booost fmt lz4 zstd
|
||||||
set(CMAKE_PROGRAM_PATH C:/msys64/${MSYSTEM}/bin C:/msys64/usr/bin)
|
# network: enet boost
|
||||||
set(ENV{PKG_CONFIG_PATH} C:/msys64/${MSYSTEM}/lib/pkgconfig)
|
|
||||||
|
# qt stuff
|
||||||
|
option(ENABLE_QT "Enable the Qt frontend" ON)
|
||||||
|
option(ENABLE_QT_TRANSLATION "Enable translations for the Qt frontend" OFF)
|
||||||
|
option(ENABLE_UPDATE_CHECKER "Enable update checker (for Qt and Android)" OFF)
|
||||||
|
option(YUZU_USE_QT_MULTIMEDIA "Use QtMultimedia for Camera" OFF)
|
||||||
|
cmake_dependent_option(YUZU_USE_QT_WEB_ENGINE "Use QtWebEngine for web applet implementation" OFF "NOT YUZU_USE_BUNDLED_QT" OFF)
|
||||||
|
set(YUZU_QT_MIRROR "" CACHE STRING "What mirror to use for downloading the bundled Qt libraries")
|
||||||
|
cmake_dependent_option(YUZU_USE_BUNDLED_QT "Download bundled Qt binaries" "${MSVC}" "ENABLE_QT" OFF)
|
||||||
|
|
||||||
|
# non-linux bundled qt are static
|
||||||
|
if (YUZU_USE_BUNDLED_QT AND (APPLE OR NOT UNIX))
|
||||||
|
set(YUZU_STATIC_BUILD ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# TODO: does mingw need any of this anymore
|
||||||
# static stuff
|
# static stuff
|
||||||
option(YUZU_STATIC_BUILD "Use static libraries and executables if available" OFF)
|
option(YUZU_STATIC_BUILD "Use static libraries and executables if available" OFF)
|
||||||
|
|
||||||
|
# TODO: StaticBuild.cmake
|
||||||
if (YUZU_STATIC_BUILD)
|
if (YUZU_STATIC_BUILD)
|
||||||
include(StaticQtLibs)
|
|
||||||
|
|
||||||
# lol
|
# lol
|
||||||
set(Boost_USE_STATIC_LIBS ON)
|
set(Boost_USE_STATIC_LIBS ON)
|
||||||
set(BUILD_SHARED_LIBS OFF)
|
set(BUILD_SHARED_LIBS OFF)
|
||||||
|
|
@ -128,9 +100,6 @@ if (YUZU_STATIC_BUILD)
|
||||||
## find .a libs first (static, usually)
|
## find .a libs first (static, usually)
|
||||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
|
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
|
||||||
|
|
||||||
## some libraries define a Library::Name_static alternative ##
|
|
||||||
set(YUZU_STATIC_SUFFIX _static)
|
|
||||||
|
|
||||||
## some libraries use CMAKE_IMPORT_LIBRARY_SUFFIX e.g. Harfbuzz ##
|
## some libraries use CMAKE_IMPORT_LIBRARY_SUFFIX e.g. Harfbuzz ##
|
||||||
set(CMAKE_IMPORT_LIBRARY_SUFFIX ".a")
|
set(CMAKE_IMPORT_LIBRARY_SUFFIX ".a")
|
||||||
|
|
||||||
|
|
@ -161,109 +130,25 @@ if (YUZU_STATIC_BUILD)
|
||||||
set(YUZU_USE_BUNDLED_OPENSSL ON)
|
set(YUZU_USE_BUNDLED_OPENSSL ON)
|
||||||
|
|
||||||
set(HTTPLIB_USE_BROTLI_IF_AVAILABLE OFF)
|
set(HTTPLIB_USE_BROTLI_IF_AVAILABLE OFF)
|
||||||
|
|
||||||
|
## some libraries define a Library::Name_static alternative ##
|
||||||
|
set(MBEDTLS_LIB_SUFFIX _static)
|
||||||
elseif(APPLE)
|
elseif(APPLE)
|
||||||
# these libs do not properly provide static libs/let you do it with cmake
|
|
||||||
set(YUZU_USE_CPM ON)
|
set(YUZU_USE_CPM ON)
|
||||||
|
|
||||||
set(YUZU_USE_BUNDLED_FFMPEG ON)
|
set(YUZU_USE_BUNDLED_FFMPEG ON)
|
||||||
set(YUZU_USE_BUNDLED_SDL2 ON)
|
set(YUZU_USE_BUNDLED_SDL2 ON)
|
||||||
set(YUZU_USE_BUNDLED_OPENSSL ON)
|
set(YUZU_USE_BUNDLED_OPENSSL ON)
|
||||||
|
|
||||||
# IMPORTED_IMPLIB not set for imported target
|
# these libs do not properly provide static libs/let you do it with cmake
|
||||||
# TODO(crueter): wtf
|
|
||||||
set(fmt_FORCE_BUNDLED ON)
|
set(fmt_FORCE_BUNDLED ON)
|
||||||
set(SPIRV-Tools_FORCE_BUNDLED ON)
|
set(SPIRV-Tools_FORCE_BUNDLED ON)
|
||||||
set(SPIRV-Headers_FORCE_BUNDLED ON)
|
set(SPIRV-Headers_FORCE_BUNDLED ON)
|
||||||
set(zstd_FORCE_BUNDLED ON)
|
set(zstd_FORCE_BUNDLED ON)
|
||||||
|
set(MbedTLS_FORCE_BUNDLED ON)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Detect current compilation architecture and create standard definitions
|
|
||||||
# =======================================================================
|
|
||||||
|
|
||||||
include(CheckSymbolExists)
|
|
||||||
function(detect_architecture symbol arch)
|
|
||||||
if (NOT DEFINED ARCHITECTURE)
|
|
||||||
set(CMAKE_REQUIRED_QUIET 1)
|
|
||||||
check_symbol_exists("${symbol}" "" ARCHITECTURE_${arch})
|
|
||||||
unset(CMAKE_REQUIRED_QUIET)
|
|
||||||
|
|
||||||
# The output variable needs to be unique across invocations otherwise
|
|
||||||
# CMake's crazy scope rules will keep it defined
|
|
||||||
if (ARCHITECTURE_${arch})
|
|
||||||
set(ARCHITECTURE "${arch}" PARENT_SCOPE)
|
|
||||||
set(ARCHITECTURE_${arch} 1 PARENT_SCOPE)
|
|
||||||
add_definitions("-DARCHITECTURE_${arch}=1")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
if (NOT ENABLE_GENERIC)
|
|
||||||
# https://sourceforge.net/p/predef/wiki/Architectures/
|
|
||||||
# TODO: THIS IS FUCKING FLAWED ONLY THE FIRST SYMBOL THAT APPEARS WILL BE CONSIDERED :(
|
|
||||||
if (MSVC)
|
|
||||||
detect_architecture("_M_AMD64" x86_64)
|
|
||||||
detect_architecture("_M_IX86" x86)
|
|
||||||
detect_architecture("_M_ARM" arm)
|
|
||||||
detect_architecture("_M_ARM64" arm64)
|
|
||||||
else()
|
|
||||||
detect_architecture("__x86_64__" x86_64)
|
|
||||||
detect_architecture("__i386__" x86)
|
|
||||||
detect_architecture("__arm__" arm)
|
|
||||||
detect_architecture("__aarch64__" arm64)
|
|
||||||
endif()
|
|
||||||
detect_architecture("__ARM64__" arm64)
|
|
||||||
detect_architecture("__aarch64__" arm64)
|
|
||||||
detect_architecture("_M_ARM64" arm64)
|
|
||||||
|
|
||||||
detect_architecture("__arm__" arm)
|
|
||||||
detect_architecture("__TARGET_ARCH_ARM" arm)
|
|
||||||
detect_architecture("_M_ARM" arm)
|
|
||||||
|
|
||||||
detect_architecture("__x86_64" x86_64)
|
|
||||||
detect_architecture("__x86_64__" x86_64)
|
|
||||||
detect_architecture("__amd64" x86_64)
|
|
||||||
detect_architecture("_M_X64" x86_64)
|
|
||||||
|
|
||||||
detect_architecture("__i386" x86)
|
|
||||||
detect_architecture("__i386__" x86)
|
|
||||||
detect_architecture("_M_IX86" x86)
|
|
||||||
|
|
||||||
detect_architecture("__ia64" ia64)
|
|
||||||
detect_architecture("__ia64__" ia64)
|
|
||||||
detect_architecture("_M_IA64" ia64)
|
|
||||||
|
|
||||||
detect_architecture("__mips" mips)
|
|
||||||
detect_architecture("__mips__" mips)
|
|
||||||
detect_architecture("_M_MRX000" mips)
|
|
||||||
|
|
||||||
detect_architecture("__powerpc64__" ppc64)
|
|
||||||
detect_architecture("__ppc64__" ppc64)
|
|
||||||
detect_architecture("__PPC64__" ppc64)
|
|
||||||
detect_architecture("_ARCH_PPC64" ppc64)
|
|
||||||
|
|
||||||
detect_architecture("__ppc__" ppc)
|
|
||||||
detect_architecture("__ppc" ppc)
|
|
||||||
detect_architecture("__powerpc__" ppc)
|
|
||||||
detect_architecture("_ARCH_COM" ppc)
|
|
||||||
detect_architecture("_ARCH_PWR" ppc)
|
|
||||||
detect_architecture("_ARCH_PPC" ppc)
|
|
||||||
detect_architecture("_M_MPPC" ppc)
|
|
||||||
detect_architecture("_M_PPC" ppc)
|
|
||||||
|
|
||||||
detect_architecture("__riscv" riscv)
|
|
||||||
|
|
||||||
detect_architecture("__EMSCRIPTEN__" wasm)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (NOT DEFINED ARCHITECTURE)
|
|
||||||
set(ARCHITECTURE "GENERIC")
|
|
||||||
set(ARCHITECTURE_GENERIC 1)
|
|
||||||
add_definitions(-DARCHITECTURE_GENERIC=1)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
message(STATUS "Target architecture: ${ARCHITECTURE}")
|
|
||||||
|
|
||||||
if (MSVC AND ARCHITECTURE_x86)
|
if (MSVC AND ARCHITECTURE_x86)
|
||||||
message(FATAL_ERROR "Attempting to build with the x86 environment is not supported. \
|
message(FATAL_ERROR "Attempting to build with the x86 environment is not supported. \
|
||||||
This can typically happen if you used the Developer Command Prompt from the start menu; \
|
This can typically happen if you used the Developer Command Prompt from the start menu; \
|
||||||
|
|
@ -281,31 +166,21 @@ if (CXX_CLANG_CL)
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-reserved-identifier>
|
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-reserved-identifier>
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-deprecated-declarations>
|
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-deprecated-declarations>
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-cast-function-type-mismatch>
|
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-cast-function-type-mismatch>
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:/EHsc> # thanks microsoft
|
$<$<COMPILE_LANGUAGE:C,CXX>:/EHsc>)
|
||||||
)
|
|
||||||
|
|
||||||
# REQUIRED CPU features IN Windows-amd64
|
# REQUIRED CPU features IN Windows-amd64
|
||||||
if (ARCHITECTURE_x86_64)
|
if (ARCHITECTURE_x86_64)
|
||||||
add_compile_options(
|
add_compile_options(
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-msse4.1>
|
$<$<COMPILE_LANGUAGE:C,CXX>:-msse4.1>
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-mcx16>
|
$<$<COMPILE_LANGUAGE:C,CXX>:-mcx16>)
|
||||||
)
|
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(CPM_SOURCE_CACHE ${CMAKE_SOURCE_DIR}/.cache/cpm)
|
|
||||||
|
|
||||||
include(DownloadExternals)
|
|
||||||
include(CMakeDependentOption)
|
|
||||||
include(CTest)
|
|
||||||
|
|
||||||
# Disable Warnings as Errors for MSVC
|
# Disable Warnings as Errors for MSVC
|
||||||
if (MSVC AND NOT CXX_CLANG)
|
if (MSVC AND NOT CXX_CLANG)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3 /WX-")
|
# This was dripping into spirv, being overriden, and causing cl flag override warning
|
||||||
endif()
|
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3 /WX-")
|
||||||
|
set(CMAKE_CXX_FLAGS_INIT "${CMAKE_CXX_FLAGS_INIT} /W3 /WX-")
|
||||||
if (PLATFORM_FREEBSD OR PLATFORM_DRAGONFLYBSD)
|
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L${CMAKE_SYSROOT}/usr/local/lib")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Set bundled sdl2/qt as dependent options.
|
# Set bundled sdl2/qt as dependent options.
|
||||||
|
|
@ -316,21 +191,13 @@ cmake_dependent_option(ENABLE_SDL2 "Enable the SDL2 frontend" ON "NOT ANDROID" O
|
||||||
cmake_dependent_option(YUZU_USE_EXTERNAL_SDL2 "Build SDL2 from external source" OFF "ENABLE_SDL2;NOT MSVC" OFF)
|
cmake_dependent_option(YUZU_USE_EXTERNAL_SDL2 "Build SDL2 from external source" OFF "ENABLE_SDL2;NOT MSVC" OFF)
|
||||||
cmake_dependent_option(YUZU_USE_BUNDLED_SDL2 "Download bundled SDL2 build" "${MSVC}" "ENABLE_SDL2" OFF)
|
cmake_dependent_option(YUZU_USE_BUNDLED_SDL2 "Download bundled SDL2 build" "${MSVC}" "ENABLE_SDL2" OFF)
|
||||||
|
|
||||||
# qt stuff
|
|
||||||
option(ENABLE_QT "Enable the Qt frontend" ON)
|
|
||||||
option(ENABLE_QT_TRANSLATION "Enable translations for the Qt frontend" OFF)
|
|
||||||
option(ENABLE_UPDATE_CHECKER "Enable update checker (for Qt and Android)" OFF)
|
|
||||||
cmake_dependent_option(YUZU_USE_BUNDLED_QT "Download bundled Qt binaries" "${MSVC}" "ENABLE_QT" OFF)
|
|
||||||
option(YUZU_USE_QT_MULTIMEDIA "Use QtMultimedia for Camera" OFF)
|
|
||||||
option(YUZU_USE_QT_WEB_ENGINE "Use QtWebEngine for web applet implementation" OFF)
|
|
||||||
set(YUZU_QT_MIRROR "" CACHE STRING "What mirror to use for downloading the bundled Qt libraries")
|
|
||||||
|
|
||||||
option(ENABLE_CUBEB "Enables the cubeb audio backend" ON)
|
option(ENABLE_CUBEB "Enables the cubeb audio backend" ON)
|
||||||
|
|
||||||
set(EXT_DEFAULT OFF)
|
set(EXT_DEFAULT OFF)
|
||||||
if (MSVC OR ANDROID)
|
if (MSVC OR ANDROID)
|
||||||
set(EXT_DEFAULT ON)
|
set(EXT_DEFAULT ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
option(YUZU_USE_CPM "Use CPM to fetch system dependencies (fmt, boost, etc) if needed. Externals will still be fetched." ${EXT_DEFAULT})
|
option(YUZU_USE_CPM "Use CPM to fetch system dependencies (fmt, boost, etc) if needed. Externals will still be fetched." ${EXT_DEFAULT})
|
||||||
|
|
||||||
# ffmpeg
|
# ffmpeg
|
||||||
|
|
@ -339,13 +206,14 @@ cmake_dependent_option(YUZU_USE_EXTERNAL_FFMPEG "Build FFmpeg from external sour
|
||||||
|
|
||||||
# sirit
|
# sirit
|
||||||
set(BUNDLED_SIRIT_DEFAULT OFF)
|
set(BUNDLED_SIRIT_DEFAULT OFF)
|
||||||
if ((MSVC AND NOT (CMAKE_BUILD_TYPE MATCHES "Debug|RelWithDebInfo") OR ANDROID))
|
if (MSVC AND NOT (CMAKE_BUILD_TYPE MATCHES "Deb") OR ANDROID)
|
||||||
set(BUNDLED_SIRIT_DEFAULT ON)
|
set(BUNDLED_SIRIT_DEFAULT ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
option(YUZU_USE_BUNDLED_SIRIT "Download bundled sirit" ${BUNDLED_SIRIT_DEFAULT})
|
option(YUZU_USE_BUNDLED_SIRIT "Download bundled sirit" ${BUNDLED_SIRIT_DEFAULT})
|
||||||
|
|
||||||
# Re-allow on FreeBSD once its on mainline ports
|
# FreeBSD 15+ has libusb, versions below should disable it
|
||||||
cmake_dependent_option(ENABLE_LIBUSB "Enable the use of LibUSB" ON "WIN32 OR PLATFORM_LINUX OR APPLE" OFF)
|
cmake_dependent_option(ENABLE_LIBUSB "Enable the use of LibUSB" ON "WIN32 OR PLATFORM_LINUX OR PLATFORM_FREEBSD OR APPLE" OFF)
|
||||||
|
|
||||||
cmake_dependent_option(ENABLE_OPENGL "Enable OpenGL" ON "NOT WIN32 OR NOT ARCHITECTURE_arm64" OFF)
|
cmake_dependent_option(ENABLE_OPENGL "Enable OpenGL" ON "NOT WIN32 OR NOT ARCHITECTURE_arm64" OFF)
|
||||||
mark_as_advanced(FORCE ENABLE_OPENGL)
|
mark_as_advanced(FORCE ENABLE_OPENGL)
|
||||||
|
|
@ -357,68 +225,33 @@ cmake_dependent_option(USE_DISCORD_PRESENCE "Enables Discord Rich Presence" OFF
|
||||||
|
|
||||||
option(YUZU_TESTS "Compile tests" "${BUILD_TESTING}")
|
option(YUZU_TESTS "Compile tests" "${BUILD_TESTING}")
|
||||||
|
|
||||||
option(YUZU_ENABLE_LTO "Enable link-time optimization" OFF)
|
|
||||||
if(YUZU_ENABLE_LTO)
|
|
||||||
include(CheckIPOSupported)
|
|
||||||
check_ipo_supported(RESULT COMPILER_SUPPORTS_LTO)
|
|
||||||
if(NOT COMPILER_SUPPORTS_LTO)
|
|
||||||
message(FATAL_ERROR "Your compiler does not support interprocedural optimization (IPO). Re-run CMake with -DYUZU_ENABLE_LTO=OFF.")
|
|
||||||
endif()
|
|
||||||
set(CMAKE_POLICY_DEFAULT_CMP0069 NEW)
|
|
||||||
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION ${COMPILER_SUPPORTS_LTO})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
option(USE_CCACHE "Use ccache for compilation" OFF)
|
|
||||||
set(CCACHE_PATH "ccache" CACHE STRING "Path to ccache binary")
|
|
||||||
if(USE_CCACHE)
|
|
||||||
find_program(CCACHE_BINARY ${CCACHE_PATH})
|
|
||||||
if(CCACHE_BINARY)
|
|
||||||
message(STATUS "Found ccache at: ${CCACHE_BINARY}")
|
|
||||||
set(CMAKE_C_COMPILER_LAUNCHER ${CCACHE_BINARY})
|
|
||||||
set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_BINARY})
|
|
||||||
else()
|
|
||||||
message(FATAL_ERROR "USE_CCACHE enabled, but no executable found at: ${CCACHE_PATH}")
|
|
||||||
endif()
|
|
||||||
# Follow SCCache recommendations:
|
|
||||||
# <https://github.com/mozilla/sccache/blob/main/README.md?plain=1#L144>
|
|
||||||
if(WIN32)
|
|
||||||
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
||||||
string(REPLACE "/Zi" "/Z7" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
|
|
||||||
string(REPLACE "/Zi" "/Z7" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
|
|
||||||
elseif(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
|
|
||||||
string(REPLACE "/Zi" "/Z7" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
|
|
||||||
string(REPLACE "/Zi" "/Z7" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# TODO(crueter): CI this?
|
|
||||||
option(YUZU_DOWNLOAD_ANDROID_VVL "Download validation layer binary for android" ON)
|
option(YUZU_DOWNLOAD_ANDROID_VVL "Download validation layer binary for android" ON)
|
||||||
|
|
||||||
option(YUZU_LEGACY "Apply patches that improve compatibility with older GPUs (e.g. Snapdragon 865) at the cost of performance" OFF)
|
option(YUZU_LEGACY "Apply patches that improve compatibility with older GPUs (e.g. Snapdragon 865) at the cost of performance" OFF)
|
||||||
|
|
||||||
|
option(NIGHTLY_BUILD "Use Nightly qualifiers in the update checker and build metadata" OFF)
|
||||||
|
|
||||||
cmake_dependent_option(YUZU_ROOM "Enable dedicated room functionality" ON "NOT ANDROID" OFF)
|
cmake_dependent_option(YUZU_ROOM "Enable dedicated room functionality" ON "NOT ANDROID" OFF)
|
||||||
cmake_dependent_option(YUZU_ROOM_STANDALONE "Enable standalone room executable" ON "YUZU_ROOM" OFF)
|
cmake_dependent_option(YUZU_ROOM_STANDALONE "Enable standalone room executable" ON "YUZU_ROOM" OFF)
|
||||||
|
|
||||||
cmake_dependent_option(YUZU_CMD "Compile the eden-cli executable" ON "ENABLE_SDL2;NOT ANDROID" OFF)
|
cmake_dependent_option(YUZU_CMD "Compile the eden-cli executable" ON "ENABLE_SDL2;NOT ANDROID" OFF)
|
||||||
|
|
||||||
cmake_dependent_option(YUZU_CRASH_DUMPS "Compile crash dump (Minidump) support" OFF "WIN32 OR LINUX" OFF)
|
cmake_dependent_option(YUZU_CRASH_DUMPS "Compile crash dump (Minidump) support" OFF "WIN32 OR PLATFORM_LINUX" OFF)
|
||||||
|
|
||||||
option(YUZU_DOWNLOAD_TIME_ZONE_DATA "Always download time zone binaries" ON)
|
option(YUZU_DOWNLOAD_TIME_ZONE_DATA "Always download time zone binaries" ON)
|
||||||
set(YUZU_TZDB_PATH "" CACHE STRING "Path to a pre-downloaded timezone database")
|
set(YUZU_TZDB_PATH "" CACHE STRING "Path to a pre-downloaded timezone database")
|
||||||
|
|
||||||
cmake_dependent_option(YUZU_USE_FASTER_LD "Check if a faster linker is available" ON "LINUX" OFF)
|
|
||||||
|
|
||||||
cmake_dependent_option(YUZU_USE_BUNDLED_MOLTENVK "Download bundled MoltenVK lib" ON "APPLE" OFF)
|
cmake_dependent_option(YUZU_USE_BUNDLED_MOLTENVK "Download bundled MoltenVK lib" ON "APPLE" OFF)
|
||||||
|
|
||||||
option(YUZU_DISABLE_LLVM "Disable LLVM (useful for CI)" OFF)
|
option(YUZU_DISABLE_LLVM "Disable LLVM (useful for CI)" OFF)
|
||||||
|
|
||||||
set(DEFAULT_ENABLE_OPENSSL ON)
|
set(DEFAULT_ENABLE_OPENSSL ON)
|
||||||
if (ANDROID OR WIN32 OR APPLE OR PLATFORM_SUN)
|
if (ANDROID OR WIN32 OR APPLE OR PLATFORM_SUN OR PLATFORM_OPENBSD)
|
||||||
# - Windows defaults to the Schannel backend.
|
# - Windows defaults to the Schannel backend.
|
||||||
# - macOS defaults to the SecureTransport backend.
|
# - macOS defaults to the SecureTransport backend.
|
||||||
# - Android currently has no SSL backend as the NDK doesn't include any SSL
|
# - Android currently has no SSL backend as the NDK doesn't include any SSL
|
||||||
# library; a proper 'native' backend would have to go through Java.
|
# library; a proper 'native' backend would have to go through Java.
|
||||||
|
# - Solaris and OpenBSD have too old backends
|
||||||
# But you can force builds for those platforms to use OpenSSL if you have
|
# But you can force builds for those platforms to use OpenSSL if you have
|
||||||
# your own copy of it.
|
# your own copy of it.
|
||||||
set(DEFAULT_ENABLE_OPENSSL OFF)
|
set(DEFAULT_ENABLE_OPENSSL OFF)
|
||||||
|
|
@ -429,45 +262,24 @@ if (ENABLE_WEB_SERVICE OR USE_DISCORD_PRESENCE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
option(ENABLE_OPENSSL "Enable OpenSSL backend for ISslConnection" ${DEFAULT_ENABLE_OPENSSL})
|
option(ENABLE_OPENSSL "Enable OpenSSL backend for ISslConnection" ${DEFAULT_ENABLE_OPENSSL})
|
||||||
if (ENABLE_OPENSSL)
|
|
||||||
set(DEFAULT_YUZU_USE_BUNDLED_OPENSSL OFF)
|
set(DEFAULT_YUZU_USE_BUNDLED_OPENSSL OFF)
|
||||||
if (EXT_DEFAULT OR PLATFORM_SUN)
|
if (EXT_DEFAULT OR PLATFORM_SUN OR PLATFORM_OPENBSD)
|
||||||
set(DEFAULT_YUZU_USE_BUNDLED_OPENSSL ON)
|
set(DEFAULT_YUZU_USE_BUNDLED_OPENSSL ON)
|
||||||
endif()
|
endif()
|
||||||
option(YUZU_USE_BUNDLED_OPENSSL "Download bundled OpenSSL build" ${DEFAULT_YUZU_USE_BUNDLED_OPENSSL})
|
|
||||||
endif()
|
cmake_dependent_option(YUZU_USE_BUNDLED_OPENSSL "Download bundled OpenSSL build" ${DEFAULT_YUZU_USE_BUNDLED_OPENSSL} "ENABLE_OPENSSL" OFF)
|
||||||
|
|
||||||
if (ANDROID AND YUZU_DOWNLOAD_ANDROID_VVL)
|
if (ANDROID AND YUZU_DOWNLOAD_ANDROID_VVL)
|
||||||
# TODO(crueter): CPM this
|
AddJsonPackage(vulkan-validation-layers)
|
||||||
set(vvl_version "1.4.321.0")
|
|
||||||
set(vvl_zip_file "${CMAKE_BINARY_DIR}/externals/vvl-android.zip")
|
|
||||||
if (NOT EXISTS "${vvl_zip_file}")
|
|
||||||
# Download and extract validation layer release to externals directory
|
|
||||||
set(vvl_base_url "https://github.com/KhronosGroup/Vulkan-ValidationLayers/releases/download")
|
|
||||||
file(DOWNLOAD "${vvl_base_url}/vulkan-sdk-${vvl_version}/android-binaries-${vvl_version}.zip"
|
|
||||||
"${vvl_zip_file}" SHOW_PROGRESS)
|
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf "${vvl_zip_file}"
|
|
||||||
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/externals")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Copy the arm64 binary to src/android/app/main/jniLibs
|
set(abi ${CMAKE_ANDROID_ARCH_ABI})
|
||||||
set(vvl_lib_path "${CMAKE_CURRENT_SOURCE_DIR}/src/android/app/src/main/jniLibs/arm64-v8a/")
|
|
||||||
file(COPY "${CMAKE_BINARY_DIR}/externals/android-binaries-${vvl_version}/arm64-v8a/libVkLayer_khronos_validation.so"
|
set(vvl_lib_path "${CMAKE_CURRENT_SOURCE_DIR}/src/android/app/src/main/jniLibs/${abi}/")
|
||||||
|
file(COPY "${VVL_SOURCE_DIR}/${abi}/libVkLayer_khronos_validation.so"
|
||||||
DESTINATION "${vvl_lib_path}")
|
DESTINATION "${vvl_lib_path}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (ANDROID)
|
|
||||||
set(CMAKE_SKIP_INSTALL_RULES ON)
|
|
||||||
set(CMAKE_POLICY_VERSION_MINIMUM 3.5) # Workaround for Oboe
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Default to a Release build
|
|
||||||
get_property(IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
|
|
||||||
if (NOT IS_MULTI_CONFIG AND NOT CMAKE_BUILD_TYPE)
|
|
||||||
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE)
|
|
||||||
message(STATUS "Defaulting to a Release build")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(EXISTS ${PROJECT_SOURCE_DIR}/hooks/pre-commit AND NOT EXISTS ${PROJECT_SOURCE_DIR}/.git/hooks/pre-commit)
|
if(EXISTS ${PROJECT_SOURCE_DIR}/hooks/pre-commit AND NOT EXISTS ${PROJECT_SOURCE_DIR}/.git/hooks/pre-commit)
|
||||||
if (EXISTS ${PROJECT_SOURCE_DIR}/.git/)
|
if (EXISTS ${PROJECT_SOURCE_DIR}/.git/)
|
||||||
message(STATUS "Copying pre-commit hook")
|
message(STATUS "Copying pre-commit hook")
|
||||||
|
|
@ -475,25 +287,23 @@ if(EXISTS ${PROJECT_SOURCE_DIR}/hooks/pre-commit AND NOT EXISTS ${PROJECT_SOURCE
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
configure_file(${PROJECT_SOURCE_DIR}/dist/compatibility_list/compatibility_list.qrc
|
set(compat_base dist/compatibility_list/compatibility_list)
|
||||||
${PROJECT_BINARY_DIR}/dist/compatibility_list/compatibility_list.qrc
|
set(compat_qrc ${compat_base}.qrc)
|
||||||
|
set(compat_json ${compat_base}.json)
|
||||||
|
|
||||||
|
configure_file(${PROJECT_SOURCE_DIR}/${compat_qrc}
|
||||||
|
${PROJECT_BINARY_DIR}/${compat_qrc}
|
||||||
COPYONLY)
|
COPYONLY)
|
||||||
|
|
||||||
if (EXISTS ${PROJECT_SOURCE_DIR}/dist/compatibility_list/compatibility_list.json)
|
if (EXISTS ${PROJECT_SOURCE_DIR}/${compat_json})
|
||||||
configure_file("${PROJECT_SOURCE_DIR}/dist/compatibility_list/compatibility_list.json"
|
configure_file("${PROJECT_SOURCE_DIR}/${compat_json}"
|
||||||
"${PROJECT_BINARY_DIR}/dist/compatibility_list/compatibility_list.json"
|
"${PROJECT_BINARY_DIR}/${compat_json}"
|
||||||
COPYONLY)
|
COPYONLY)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (ENABLE_COMPATIBILITY_LIST_DOWNLOAD AND NOT EXISTS ${PROJECT_BINARY_DIR}/dist/compatibility_list/compatibility_list.json)
|
# TODO: Compat list download
|
||||||
message(STATUS "Downloading compatibility list for yuzu...")
|
if (NOT EXISTS ${PROJECT_BINARY_DIR}/${compat_json})
|
||||||
file(DOWNLOAD
|
file(WRITE ${PROJECT_BINARY_DIR}/${compat_json} "")
|
||||||
https://api.yuzu-emu.org/gamedb/
|
|
||||||
"${PROJECT_BINARY_DIR}/dist/compatibility_list/compatibility_list.json" SHOW_PROGRESS)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (NOT EXISTS ${PROJECT_BINARY_DIR}/dist/compatibility_list/compatibility_list.json)
|
|
||||||
file(WRITE ${PROJECT_BINARY_DIR}/dist/compatibility_list/compatibility_list.json "")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (YUZU_LEGACY)
|
if (YUZU_LEGACY)
|
||||||
|
|
@ -523,44 +333,51 @@ if ((ANDROID OR APPLE OR UNIX) AND (NOT PLATFORM_LINUX OR ANDROID) AND NOT WIN32
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Build/optimization presets
|
# Build/optimization presets
|
||||||
if (PLATFORM_LINUX OR CXX_CLANG)
|
if (CXX_GCC OR CXX_CLANG)
|
||||||
if (ARCHITECTURE_x86_64)
|
if (ARCHITECTURE_x86_64)
|
||||||
# See https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html
|
# See https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html
|
||||||
# Generic supports Pentium Pro instruction set and above
|
# Generic supports Pentium Pro instruction set and above
|
||||||
|
# TODO: if a value is unknown, pass that as march and mtune
|
||||||
set(YUZU_BUILD_PRESET "custom" CACHE STRING "Build preset to use. One of: custom, generic, v3, zen2, zen4, native")
|
set(YUZU_BUILD_PRESET "custom" CACHE STRING "Build preset to use. One of: custom, generic, v3, zen2, zen4, native")
|
||||||
|
|
||||||
if (${YUZU_BUILD_PRESET} STREQUAL "generic")
|
if (${YUZU_BUILD_PRESET} STREQUAL "generic")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=x86-64 -mtune=generic")
|
set(march x86-64)
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=x86-64 -mtune=generic")
|
set(mtune generic)
|
||||||
elseif (${YUZU_BUILD_PRESET} STREQUAL "v3")
|
elseif (${YUZU_BUILD_PRESET} STREQUAL "v3")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=x86-64-v3 -mtune=generic")
|
set(march x86-64-v3)
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=x86-64-v3 -mtune=generic")
|
set(mtune generic)
|
||||||
elseif (${YUZU_BUILD_PRESET} STREQUAL "zen2")
|
elseif (${YUZU_BUILD_PRESET} STREQUAL "zen2")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=znver2 -mtune=znver2")
|
set(march znver2)
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=znver2 -mtune=znver2")
|
set(mtune znver2)
|
||||||
elseif (${YUZU_BUILD_PRESET} STREQUAL "zen4")
|
elseif (${YUZU_BUILD_PRESET} STREQUAL "zen4")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=znver4 -mtune=znver4")
|
set(march znver4)
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=znver4 -mtune=znver4")
|
set(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()
|
endif()
|
||||||
elseif(ARCHITECTURE_arm64)
|
elseif(ARCHITECTURE_arm64)
|
||||||
# See https://gcc.gnu.org/onlinedocs/gcc/AArch64-Options.html
|
# See https://gcc.gnu.org/onlinedocs/gcc/AArch64-Options.html
|
||||||
set(YUZU_BUILD_PRESET "custom" CACHE STRING "Build preset to use. One of: custom, generic, armv9, native")
|
set(YUZU_BUILD_PRESET "custom" CACHE STRING "Build preset to use. One of: custom, generic, armv9, native")
|
||||||
|
set(mtune generic)
|
||||||
|
|
||||||
if (${YUZU_BUILD_PRESET} STREQUAL "generic")
|
if (${YUZU_BUILD_PRESET} STREQUAL "generic")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv8-a -mtune=generic")
|
set(march armv8-a)
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv8-a -mtune=generic")
|
|
||||||
elseif (${YUZU_BUILD_PRESET} STREQUAL "armv9")
|
elseif (${YUZU_BUILD_PRESET} STREQUAL "armv9")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv9-a -mtune=generic")
|
set(march armv9-a)
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv9-a -mtune=generic")
|
|
||||||
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()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if ("${YUZU_BUILD_PRESET}" STREQUAL "native")
|
||||||
|
set(march native)
|
||||||
|
set(mtune native)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (DEFINED march AND DEFINED mtune)
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=${march} -mtune=${mtune}")
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=${march} -mtune=${mtune}")
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Other presets, e.g. steamdeck
|
# Other presets, e.g. steamdeck
|
||||||
|
# TODO(crueter): Just have every Linux/Windows use old sdl2
|
||||||
set(YUZU_SYSTEM_PROFILE "generic" CACHE STRING "CMake and Externals profile to use. One of: generic, steamdeck")
|
set(YUZU_SYSTEM_PROFILE "generic" CACHE STRING "CMake and Externals profile to use. One of: generic, steamdeck")
|
||||||
|
|
||||||
# Configure C++ standard
|
# Configure C++ standard
|
||||||
|
|
@ -575,11 +392,14 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
|
||||||
# System imported libraries
|
# System imported libraries
|
||||||
# =======================================================================
|
# =======================================================================
|
||||||
|
|
||||||
include(CPMUtil)
|
# Prefer the -pthread flag on Linux.
|
||||||
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||||
|
find_package(Threads REQUIRED)
|
||||||
|
|
||||||
# openssl funniness
|
# openssl funniness
|
||||||
if (ENABLE_OPENSSL)
|
if (ENABLE_OPENSSL)
|
||||||
if (YUZU_USE_BUNDLED_OPENSSL)
|
if (YUZU_USE_BUNDLED_OPENSSL)
|
||||||
|
set(BUILD_SHARED_LIBS OFF)
|
||||||
AddJsonPackage(openssl)
|
AddJsonPackage(openssl)
|
||||||
if (OpenSSL_ADDED)
|
if (OpenSSL_ADDED)
|
||||||
add_compile_definitions(YUZU_BUNDLED_OPENSSL)
|
add_compile_definitions(YUZU_BUNDLED_OPENSSL)
|
||||||
|
|
@ -635,6 +455,15 @@ if (YUZU_USE_CPM)
|
||||||
add_library(lz4::lz4 ALIAS lz4_static)
|
add_library(lz4::lz4 ALIAS lz4_static)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# zstd
|
||||||
|
AddJsonPackage(zstd)
|
||||||
|
|
||||||
|
if (zstd_ADDED)
|
||||||
|
add_library(zstd::zstd ALIAS libzstd_static)
|
||||||
|
add_library(zstd::libzstd ALIAS libzstd_static)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (NOT YUZU_STATIC_ROOM)
|
||||||
# nlohmann
|
# nlohmann
|
||||||
AddJsonPackage(nlohmann)
|
AddJsonPackage(nlohmann)
|
||||||
|
|
||||||
|
|
@ -645,14 +474,6 @@ if (YUZU_USE_CPM)
|
||||||
add_library(ZLIB::ZLIB ALIAS zlibstatic)
|
add_library(ZLIB::ZLIB ALIAS zlibstatic)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# zstd
|
|
||||||
AddJsonPackage(zstd)
|
|
||||||
|
|
||||||
if (zstd_ADDED)
|
|
||||||
add_library(zstd::zstd ALIAS libzstd_static)
|
|
||||||
add_library(zstd::libzstd ALIAS libzstd_static)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Opus
|
# Opus
|
||||||
AddJsonPackage(opus)
|
AddJsonPackage(opus)
|
||||||
|
|
||||||
|
|
@ -667,7 +488,9 @@ if (YUZU_USE_CPM)
|
||||||
if (NOT TARGET Opus::opus)
|
if (NOT TARGET Opus::opus)
|
||||||
add_library(Opus::opus ALIAS opus)
|
add_library(Opus::opus ALIAS opus)
|
||||||
endif()
|
endif()
|
||||||
|
endif()
|
||||||
else()
|
else()
|
||||||
|
# TODO: we can probably just use CPM for this... right?
|
||||||
# Enforce the search mode of non-required packages for better and shorter failure messages
|
# Enforce the search mode of non-required packages for better and shorter failure messages
|
||||||
find_package(fmt 8 REQUIRED)
|
find_package(fmt 8 REQUIRED)
|
||||||
|
|
||||||
|
|
@ -688,10 +511,6 @@ else()
|
||||||
# wow
|
# wow
|
||||||
find_package(Boost 1.57.0 CONFIG REQUIRED OPTIONAL_COMPONENTS headers context system fiber filesystem)
|
find_package(Boost 1.57.0 CONFIG REQUIRED OPTIONAL_COMPONENTS headers context system fiber filesystem)
|
||||||
|
|
||||||
if (CMAKE_SYSTEM_NAME STREQUAL "Linux" OR ANDROID)
|
|
||||||
find_package(gamemode 1.7 MODULE)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (ENABLE_OPENSSL)
|
if (ENABLE_OPENSSL)
|
||||||
find_package(OpenSSL 1.1.1 REQUIRED)
|
find_package(OpenSSL 1.1.1 REQUIRED)
|
||||||
endif()
|
endif()
|
||||||
|
|
@ -732,10 +551,9 @@ endfunction()
|
||||||
|
|
||||||
if (APPLE)
|
if (APPLE)
|
||||||
# Umbrella framework for everything GUI-related
|
# Umbrella framework for everything GUI-related
|
||||||
find_library(COCOA_LIBRARY Cocoa)
|
find_library(COCOA_LIBRARY Cocoa REQUIRED)
|
||||||
|
find_library(IOKIT_LIBRARY IOKit REQUIRED)
|
||||||
set(PLATFORM_LIBRARIES ${COCOA_LIBRARY} ${IOKIT_LIBRARY} ${COREVIDEO_LIBRARY})
|
set(PLATFORM_LIBRARIES ${COCOA_LIBRARY} ${IOKIT_LIBRARY} ${COREVIDEO_LIBRARY})
|
||||||
# find_library(ICONV_LIBRARY iconv REQUIRED)
|
|
||||||
# list(APPEND PLATFORM_LIBRARIES ${ICONV_LIBRARY})
|
|
||||||
elseif (WIN32)
|
elseif (WIN32)
|
||||||
# Target Windows 10
|
# Target Windows 10
|
||||||
add_compile_definitions(_WIN32_WINNT=0x0A00 WINVER=0x0A00)
|
add_compile_definitions(_WIN32_WINNT=0x0A00 WINVER=0x0A00)
|
||||||
|
|
@ -746,10 +564,6 @@ elseif (WIN32)
|
||||||
endif()
|
endif()
|
||||||
elseif (PLATFORM_HAIKU)
|
elseif (PLATFORM_HAIKU)
|
||||||
# Haiku is so special :)
|
# Haiku is so special :)
|
||||||
# Some fucking genius decided to name an entire module "network" in 2019
|
|
||||||
# this caused great disaster amongst the Haiku community who had came first with
|
|
||||||
# their "libnetwork.so"; since CMake doesn't do magic, we have to use an ABSOLUTE PATH
|
|
||||||
# to the library itself, otherwise it will think we are linking to... our network thing
|
|
||||||
set(PLATFORM_LIBRARIES bsd /boot/system/lib/libnetwork.so)
|
set(PLATFORM_LIBRARIES bsd /boot/system/lib/libnetwork.so)
|
||||||
elseif (CMAKE_SYSTEM_NAME MATCHES "^(Linux|kFreeBSD|GNU|SunOS)$")
|
elseif (CMAKE_SYSTEM_NAME MATCHES "^(Linux|kFreeBSD|GNU|SunOS)$")
|
||||||
set(PLATFORM_LIBRARIES rt)
|
set(PLATFORM_LIBRARIES rt)
|
||||||
|
|
@ -760,22 +574,27 @@ message(STATUS "Platform Libraries: ${PLATFORM_LIBRARIES}")
|
||||||
add_subdirectory(externals)
|
add_subdirectory(externals)
|
||||||
|
|
||||||
# pass targets from externals
|
# pass targets from externals
|
||||||
find_package(libusb)
|
|
||||||
find_package(VulkanMemoryAllocator)
|
|
||||||
find_package(enet)
|
find_package(enet)
|
||||||
find_package(MbedTLS)
|
find_package(MbedTLS)
|
||||||
find_package(VulkanUtilityLibraries)
|
find_package(unordered_dense REQUIRED)
|
||||||
find_package(SimpleIni)
|
|
||||||
find_package(SPIRV-Tools)
|
|
||||||
find_package(sirit)
|
|
||||||
|
|
||||||
if (ARCHITECTURE_x86 OR ARCHITECTURE_x86_64)
|
if (ARCHITECTURE_x86 OR ARCHITECTURE_x86_64)
|
||||||
find_package(xbyak)
|
find_package(xbyak)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (ENABLE_WEB_SERVICE OR ENABLE_QT_UPDATE_CHECKER)
|
if (NOT YUZU_STATIC_ROOM)
|
||||||
# Workaround: httplib will kill itself if you attempt to do a find_package propagation
|
find_package(libusb)
|
||||||
# find_package(httplib CONFIG)
|
find_package(VulkanMemoryAllocator)
|
||||||
|
find_package(VulkanUtilityLibraries)
|
||||||
|
find_package(SimpleIni)
|
||||||
|
find_package(SPIRV-Tools)
|
||||||
|
find_package(sirit)
|
||||||
|
find_package(gamemode)
|
||||||
|
find_package(mcl)
|
||||||
|
find_package(frozen)
|
||||||
|
|
||||||
|
if (ARCHITECTURE_riscv64)
|
||||||
|
find_package(biscuit)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (ENABLE_WEB_SERVICE OR ENABLE_UPDATE_CHECKER)
|
if (ENABLE_WEB_SERVICE OR ENABLE_UPDATE_CHECKER)
|
||||||
|
|
@ -801,10 +620,19 @@ endif()
|
||||||
if (YUZU_TESTS OR DYNARMIC_TESTS)
|
if (YUZU_TESTS OR DYNARMIC_TESTS)
|
||||||
find_package(Catch2)
|
find_package(Catch2)
|
||||||
endif()
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Qt stuff
|
||||||
if (ENABLE_QT)
|
if (ENABLE_QT)
|
||||||
if (YUZU_USE_BUNDLED_QT)
|
if (YUZU_USE_BUNDLED_QT)
|
||||||
download_qt(6.8.3)
|
# Qt 6.8+ is broken on macOS (??)
|
||||||
|
if (APPLE)
|
||||||
|
AddQt(6.7.3)
|
||||||
|
else()
|
||||||
|
AddQt(6.9.3)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(YUZU_STATIC_BUILD ON)
|
||||||
else()
|
else()
|
||||||
message(STATUS "Using system Qt")
|
message(STATUS "Using system Qt")
|
||||||
if (NOT Qt6_DIR)
|
if (NOT Qt6_DIR)
|
||||||
|
|
@ -813,13 +641,13 @@ if (ENABLE_QT)
|
||||||
list(APPEND CMAKE_PREFIX_PATH "${Qt6_DIR}")
|
list(APPEND CMAKE_PREFIX_PATH "${Qt6_DIR}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
find_package(Qt6 REQUIRED COMPONENTS Widgets Concurrent)
|
find_package(Qt6 CONFIG REQUIRED COMPONENTS Widgets Charts Concurrent)
|
||||||
|
|
||||||
if (YUZU_USE_QT_MULTIMEDIA)
|
if (YUZU_USE_QT_MULTIMEDIA)
|
||||||
find_package(Qt6 REQUIRED COMPONENTS Multimedia)
|
find_package(Qt6 REQUIRED COMPONENTS Multimedia)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
if (PLATFORM_LINUX OR PLATFORM_FREEBSD)
|
||||||
# yes Qt, we get it
|
# yes Qt, we get it
|
||||||
set(QT_NO_PRIVATE_MODULE_WARNING ON)
|
set(QT_NO_PRIVATE_MODULE_WARNING ON)
|
||||||
find_package(Qt6 REQUIRED COMPONENTS DBus OPTIONAL_COMPONENTS GuiPrivate)
|
find_package(Qt6 REQUIRED COMPONENTS DBus OPTIONAL_COMPONENTS GuiPrivate)
|
||||||
|
|
@ -848,40 +676,36 @@ if (ENABLE_QT)
|
||||||
|
|
||||||
message(STATUS "Using target Qt at ${QT_TARGET_PATH}")
|
message(STATUS "Using target Qt at ${QT_TARGET_PATH}")
|
||||||
message(STATUS "Using host Qt at ${QT_HOST_PATH}")
|
message(STATUS "Using host Qt at ${QT_HOST_PATH}")
|
||||||
endif()
|
|
||||||
|
|
||||||
function(set_yuzu_qt_components)
|
## Components ##
|
||||||
|
|
||||||
# Best practice is to ask for all components at once, so they are from the same version
|
# Best practice is to ask for all components at once, so they are from the same version
|
||||||
set(YUZU_QT_COMPONENTS2 Core Widgets Concurrent)
|
set(YUZU_QT_COMPONENTS Core Widgets Charts Concurrent)
|
||||||
if (PLATFORM_LINUX)
|
if (PLATFORM_LINUX)
|
||||||
list(APPEND YUZU_QT_COMPONENTS2 DBus)
|
list(APPEND YUZU_QT_COMPONENTS DBus)
|
||||||
endif()
|
endif()
|
||||||
if (YUZU_USE_QT_MULTIMEDIA)
|
if (YUZU_USE_QT_MULTIMEDIA)
|
||||||
list(APPEND YUZU_QT_COMPONENTS2 Multimedia)
|
list(APPEND YUZU_QT_COMPONENTS Multimedia)
|
||||||
endif()
|
endif()
|
||||||
if (YUZU_USE_QT_WEB_ENGINE)
|
if (YUZU_USE_QT_WEB_ENGINE)
|
||||||
list(APPEND YUZU_QT_COMPONENTS2 WebEngineCore WebEngineWidgets)
|
list(APPEND YUZU_QT_COMPONENTS WebEngineCore WebEngineWidgets)
|
||||||
endif()
|
endif()
|
||||||
if (ENABLE_QT_TRANSLATION)
|
if (ENABLE_QT_TRANSLATION)
|
||||||
list(APPEND YUZU_QT_COMPONENTS2 LinguistTools)
|
list(APPEND YUZU_QT_COMPONENTS LinguistTools)
|
||||||
endif()
|
endif()
|
||||||
set(YUZU_QT_COMPONENTS ${YUZU_QT_COMPONENTS2} PARENT_SCOPE)
|
|
||||||
endfunction(set_yuzu_qt_components)
|
|
||||||
|
|
||||||
if(ENABLE_QT)
|
|
||||||
set_yuzu_qt_components()
|
|
||||||
find_package(Qt6 REQUIRED COMPONENTS ${YUZU_QT_COMPONENTS})
|
find_package(Qt6 REQUIRED COMPONENTS ${YUZU_QT_COMPONENTS})
|
||||||
set(QT_MAJOR_VERSION 6)
|
set(QT_MAJOR_VERSION 6)
|
||||||
# Qt6 sets cxx_std_17 and we need to undo that
|
# Qt6 sets cxx_std_17 and we need to undo that
|
||||||
set_target_properties(Qt6::Platform PROPERTIES INTERFACE_COMPILE_FEATURES "")
|
set_target_properties(Qt6::Platform PROPERTIES INTERFACE_COMPILE_FEATURES "")
|
||||||
|
|
||||||
|
## Qt Externals ##
|
||||||
|
|
||||||
|
# QuaZip
|
||||||
|
AddJsonPackage(quazip)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (UNIX AND NOT APPLE AND NOT ANDROID)
|
if (NOT YUZU_STATIC_ROOM AND NOT (YUZU_USE_BUNDLED_FFMPEG OR YUZU_USE_EXTERNAL_FFMPEG))
|
||||||
find_package(PkgConfig REQUIRED)
|
|
||||||
pkg_check_modules(LIBVA libva)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (NOT (YUZU_USE_BUNDLED_FFMPEG OR YUZU_USE_EXTERNAL_FFMPEG))
|
|
||||||
# Use system installed FFmpeg
|
# Use system installed FFmpeg
|
||||||
find_package(FFmpeg REQUIRED QUIET COMPONENTS ${FFmpeg_COMPONENTS})
|
find_package(FFmpeg REQUIRED QUIET COMPONENTS ${FFmpeg_COMPONENTS})
|
||||||
|
|
||||||
|
|
@ -892,67 +716,16 @@ if (NOT (YUZU_USE_BUNDLED_FFMPEG OR YUZU_USE_EXTERNAL_FFMPEG))
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (WIN32 AND YUZU_CRASH_DUMPS)
|
if (WIN32 AND YUZU_CRASH_DUMPS)
|
||||||
set(BREAKPAD_VER "breakpad-c89f9dd")
|
message(STATUS "YUZU_CRASH_DUMPS is unimplemented on Windows. Check back later.")
|
||||||
download_bundled_external("breakpad/" ${BREAKPAD_VER} "breakpad-win" BREAKPAD_PREFIX "c89f9dd")
|
# set(BREAKPAD_VER "breakpad-c89f9dd")
|
||||||
|
# download_bundled_external("breakpad/" ${BREAKPAD_VER} "breakpad-win" BREAKPAD_PREFIX "c89f9dd")
|
||||||
|
|
||||||
set(BREAKPAD_CLIENT_INCLUDE_DIR "${BREAKPAD_PREFIX}/include")
|
# set(BREAKPAD_CLIENT_INCLUDE_DIR "${BREAKPAD_PREFIX}/include")
|
||||||
set(BREAKPAD_CLIENT_LIBRARY "${BREAKPAD_PREFIX}/lib/libbreakpad_client.lib")
|
# set(BREAKPAD_CLIENT_LIBRARY "${BREAKPAD_PREFIX}/lib/libbreakpad_client.lib")
|
||||||
|
|
||||||
add_library(libbreakpad_client INTERFACE IMPORTED)
|
# add_library(libbreakpad_client INTERFACE IMPORTED)
|
||||||
target_link_libraries(libbreakpad_client INTERFACE "${BREAKPAD_CLIENT_LIBRARY}")
|
# target_link_libraries(libbreakpad_client INTERFACE "${BREAKPAD_CLIENT_LIBRARY}")
|
||||||
target_include_directories(libbreakpad_client INTERFACE "${BREAKPAD_CLIENT_INCLUDE_DIR}")
|
# target_include_directories(libbreakpad_client INTERFACE "${BREAKPAD_CLIENT_INCLUDE_DIR}")
|
||||||
endif()
|
|
||||||
|
|
||||||
# Prefer the -pthread flag on Linux.
|
|
||||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
|
||||||
find_package(Threads REQUIRED)
|
|
||||||
|
|
||||||
# Setup a custom clang-format target (if clang-format can be found) that will run
|
|
||||||
# against all the src files. This should be used before making a pull request.
|
|
||||||
# =======================================================================
|
|
||||||
|
|
||||||
set(CLANG_FORMAT_POSTFIX "-15")
|
|
||||||
find_program(CLANG_FORMAT
|
|
||||||
NAMES clang-format${CLANG_FORMAT_POSTFIX}
|
|
||||||
clang-format
|
|
||||||
PATHS ${PROJECT_BINARY_DIR}/externals)
|
|
||||||
# if find_program doesn't find it, try to download from externals
|
|
||||||
if (NOT CLANG_FORMAT)
|
|
||||||
if (WIN32 AND NOT CMAKE_CROSSCOMPILING)
|
|
||||||
message(STATUS "Clang format not found! Downloading...")
|
|
||||||
set(CLANG_FORMAT "${PROJECT_BINARY_DIR}/externals/clang-format${CLANG_FORMAT_POSTFIX}.exe")
|
|
||||||
file(DOWNLOAD
|
|
||||||
https://github.com/eden-emulator/ext-windows-bin/raw/master/clang-format${CLANG_FORMAT_POSTFIX}.exe
|
|
||||||
"${CLANG_FORMAT}" SHOW_PROGRESS
|
|
||||||
STATUS DOWNLOAD_SUCCESS)
|
|
||||||
if (NOT DOWNLOAD_SUCCESS EQUAL 0)
|
|
||||||
message(WARNING "Could not download clang format! Disabling the clang format target")
|
|
||||||
file(REMOVE ${CLANG_FORMAT})
|
|
||||||
unset(CLANG_FORMAT)
|
|
||||||
endif()
|
|
||||||
else()
|
|
||||||
message(WARNING "Clang format not found! Disabling the clang format target")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (CLANG_FORMAT)
|
|
||||||
set(SRCS ${PROJECT_SOURCE_DIR}/src)
|
|
||||||
set(CCOMMENT "Running clang format against all the .h and .cpp files in src/")
|
|
||||||
if (WIN32)
|
|
||||||
add_custom_target(clang-format
|
|
||||||
COMMAND powershell.exe -Command "Get-ChildItem '${SRCS}/*' -Include *.cpp,*.h -Recurse | Foreach {&'${CLANG_FORMAT}' -i $_.fullname}"
|
|
||||||
COMMENT ${CCOMMENT})
|
|
||||||
elseif(MINGW)
|
|
||||||
add_custom_target(clang-format
|
|
||||||
COMMAND find `cygpath -u ${SRCS}` -iname *.h -o -iname *.cpp | xargs `cygpath -u ${CLANG_FORMAT}` -i
|
|
||||||
COMMENT ${CCOMMENT})
|
|
||||||
else()
|
|
||||||
add_custom_target(clang-format
|
|
||||||
COMMAND find ${SRCS} -iname *.h -o -iname *.cpp | xargs ${CLANG_FORMAT} -i
|
|
||||||
COMMENT ${CCOMMENT})
|
|
||||||
endif()
|
|
||||||
unset(SRCS)
|
|
||||||
unset(CCOMMENT)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Include source code
|
# Include source code
|
||||||
|
|
@ -982,55 +755,11 @@ if (MSVC AND CXX_CLANG)
|
||||||
|
|
||||||
add_library(llvm-mingw-runtime STATIC IMPORTED)
|
add_library(llvm-mingw-runtime STATIC IMPORTED)
|
||||||
set_target_properties(llvm-mingw-runtime PROPERTIES
|
set_target_properties(llvm-mingw-runtime PROPERTIES
|
||||||
IMPORTED_LOCATION "${LIB_PATH}"
|
IMPORTED_LOCATION "${LIB_PATH}")
|
||||||
)
|
|
||||||
|
|
||||||
link_libraries(llvm-mingw-runtime)
|
link_libraries(llvm-mingw-runtime)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
#[[
|
|
||||||
search order:
|
|
||||||
- gold (GCC only) - the best, generally, but unfortunately not packaged anymore
|
|
||||||
- mold (GCC only) - generally does well on GCC
|
|
||||||
- ldd - preferred on clang
|
|
||||||
- bfd - the final fallback
|
|
||||||
- If none are found (macOS uses ld.prime, etc) just use the default linker
|
|
||||||
]]
|
|
||||||
if (YUZU_USE_FASTER_LD)
|
|
||||||
find_program(LINKER_BFD bfd)
|
|
||||||
if (LINKER_BFD)
|
|
||||||
set(LINKER bfd)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
find_program(LINKER_LLD lld)
|
|
||||||
if (LINKER_LLD)
|
|
||||||
set(LINKER lld)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (CXX_GCC)
|
|
||||||
find_program(LINKER_MOLD mold)
|
|
||||||
if (LINKER_MOLD AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "12.1")
|
|
||||||
set(LINKER mold)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
find_program(LINKER_GOLD gold)
|
|
||||||
if (LINKER_GOLD)
|
|
||||||
set(LINKER gold)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (LINKER)
|
|
||||||
message(NOTICE "Selecting ${LINKER} as linker")
|
|
||||||
add_link_options("-fuse-ld=${LINKER}")
|
|
||||||
else()
|
|
||||||
message(WARNING "No faster linker found--using default")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (LINKER STREQUAL "lld" AND CXX_GCC)
|
|
||||||
message(WARNING "Using lld on GCC may cause issues with certain LTO settings. If the program fails to compile, disable YUZU_USE_FASTER_LD, or install mold or GNU gold.")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Set runtime library to MD/MDd for all configurations
|
# Set runtime library to MD/MDd for all configurations
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
|
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
|
||||||
|
|
@ -1050,14 +779,6 @@ if(MSVC)
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (MINGW)
|
|
||||||
# This saves a truly ridiculous amount of time during linking
|
|
||||||
# In my tests, without this it takes 2 mins, with it takes 3-5 seconds
|
|
||||||
# or on GitHub Actions, 10 minutes -> 3 seconds
|
|
||||||
set(MINGW_FLAGS "-Wl,--strip-all -Wl,--gc-sections")
|
|
||||||
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} ${MINGW_FLAGS}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
add_subdirectory(src)
|
add_subdirectory(src)
|
||||||
|
|
||||||
# Set yuzu project or yuzu-cmd project as default StartUp Project in Visual Studio depending on whether QT is enabled or not
|
# Set yuzu project or yuzu-cmd project as default StartUp Project in Visual Studio depending on whether QT is enabled or not
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,3 @@
|
||||||
# SPDX-FileCopyrightText: Copyright 2025 crueter
|
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
# This is a slightly modified version of CPM.cmake
|
|
||||||
|
|
||||||
# CPM.cmake - CMake's missing package manager
|
# CPM.cmake - CMake's missing package manager
|
||||||
# ===========================================
|
# ===========================================
|
||||||
# See https://github.com/cpm-cmake/CPM.cmake for usage and update instructions.
|
# See https://github.com/cpm-cmake/CPM.cmake for usage and update instructions.
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
# SPDX-FileCopyrightText: Copyright 2025 crueter
|
# SPDX-FileCopyrightText: Copyright 2026 crueter
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: LGPL-3.0-or-later
|
||||||
|
|
||||||
|
set(CPM_SOURCE_CACHE "${PROJECT_SOURCE_DIR}/.cache/cpm" CACHE STRING "" FORCE)
|
||||||
|
|
||||||
if(MSVC OR ANDROID)
|
if(MSVC OR ANDROID)
|
||||||
set(BUNDLED_DEFAULT ON)
|
set(BUNDLED_DEFAULT ON)
|
||||||
|
|
@ -21,8 +23,17 @@ set(CPMUTIL_JSON_FILE "${CMAKE_CURRENT_SOURCE_DIR}/cpmfile.json")
|
||||||
|
|
||||||
if(EXISTS ${CPMUTIL_JSON_FILE})
|
if(EXISTS ${CPMUTIL_JSON_FILE})
|
||||||
file(READ ${CPMUTIL_JSON_FILE} CPMFILE_CONTENT)
|
file(READ ${CPMUTIL_JSON_FILE} CPMFILE_CONTENT)
|
||||||
|
if (NOT TARGET cpmfiles)
|
||||||
|
add_custom_target(cpmfiles)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
target_sources(cpmfiles PRIVATE ${CPMUTIL_JSON_FILE})
|
||||||
|
set_property(DIRECTORY APPEND PROPERTY
|
||||||
|
CMAKE_CONFIGURE_DEPENDS
|
||||||
|
"${CPMUTIL_JSON_FILE}")
|
||||||
else()
|
else()
|
||||||
message(WARNING "[CPMUtil] cpmfile ${CPMUTIL_JSON_FILE} does not exist, AddJsonPackage will be a no-op")
|
message(DEBUG "[CPMUtil] cpmfile ${CPMUTIL_JSON_FILE}"
|
||||||
|
"does not exist, AddJsonPackage will be a no-op")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Utility stuff
|
# Utility stuff
|
||||||
|
|
@ -30,6 +41,11 @@ function(cpm_utils_message level name message)
|
||||||
message(${level} "[CPMUtil] ${name}: ${message}")
|
message(${level} "[CPMUtil] ${name}: ${message}")
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
|
# propagate a variable to parent scope
|
||||||
|
macro(Propagate var)
|
||||||
|
set(${var} ${${var}} PARENT_SCOPE)
|
||||||
|
endmacro()
|
||||||
|
|
||||||
function(array_to_list array length out)
|
function(array_to_list array length out)
|
||||||
math(EXPR range "${length} - 1")
|
math(EXPR range "${length} - 1")
|
||||||
|
|
||||||
|
|
@ -61,43 +77,72 @@ function(get_json_element object out member default)
|
||||||
set("${out}" "${outvar}" PARENT_SCOPE)
|
set("${out}" "${outvar}" PARENT_SCOPE)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
# The preferred usage
|
# Determine whether or not a package has a viable system candidate.
|
||||||
function(AddJsonPackage)
|
function(SystemPackageViable JSON_NAME)
|
||||||
set(oneValueArgs
|
string(JSON object GET "${CPMFILE_CONTENT}" "${JSON_NAME}")
|
||||||
NAME
|
|
||||||
|
|
||||||
# these are overrides that can be generated at runtime, so can be defined separately from the json
|
parse_object(${object})
|
||||||
DOWNLOAD_ONLY
|
|
||||||
BUNDLED_PACKAGE
|
|
||||||
)
|
|
||||||
|
|
||||||
set(multiValueArgs OPTIONS)
|
string(REPLACE " " ";" find_args "${find_args}")
|
||||||
|
if (${package}_FORCE_BUNDLED)
|
||||||
cmake_parse_arguments(JSON "" "${oneValueArgs}" "${multiValueArgs}"
|
set(${package}_FOUND OFF)
|
||||||
"${ARGN}")
|
else()
|
||||||
|
find_package(${package} ${version} ${find_args} QUIET NO_POLICY_SCOPE)
|
||||||
list(LENGTH ARGN argnLength)
|
|
||||||
|
|
||||||
# single name argument
|
|
||||||
if(argnLength EQUAL 1)
|
|
||||||
set(JSON_NAME "${ARGV0}")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (NOT DEFINED CPMFILE_CONTENT)
|
set(${pkg}_VIABLE ${${package}_FOUND} PARENT_SCOPE)
|
||||||
cpm_utils_message(WARNING ${name} "No cpmfile, AddJsonPackage is a no-op")
|
set(${pkg}_PACKAGE ${package} PARENT_SCOPE)
|
||||||
return()
|
endfunction()
|
||||||
|
|
||||||
|
# Add several packages such that if one is bundled,
|
||||||
|
# all the rest must also be bundled.
|
||||||
|
function(AddDependentPackages)
|
||||||
|
set(_some_system OFF)
|
||||||
|
set(_some_bundled OFF)
|
||||||
|
|
||||||
|
foreach(pkg ${ARGN})
|
||||||
|
SystemPackageViable(${pkg})
|
||||||
|
|
||||||
|
if (${pkg}_VIABLE)
|
||||||
|
set(_some_system ON)
|
||||||
|
list(APPEND _system_pkgs ${${pkg}_PACKAGE})
|
||||||
|
else()
|
||||||
|
set(_some_bundled ON)
|
||||||
|
list(APPEND _bundled_pkgs ${${pkg}_PACKAGE})
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
if (_some_system AND _some_bundled)
|
||||||
|
foreach(pkg ${ARGN})
|
||||||
|
list(APPEND package_names ${${pkg}_PACKAGE})
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
string(REPLACE ";" ", " package_names "${package_names}")
|
||||||
|
string(REPLACE ";" ", " bundled_names "${_bundled_pkgs}")
|
||||||
|
foreach(sys ${_system_pkgs})
|
||||||
|
list(APPEND system_names ${sys}_FORCE_BUNDLED)
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
string(REPLACE ";" ", " system_names "${system_names}")
|
||||||
|
|
||||||
|
message(FATAL_ERROR "Partial dependency installation detected "
|
||||||
|
"for the following packages:\n${package_names}\n"
|
||||||
|
"You can solve this in one of two ways:\n"
|
||||||
|
"1. Install the following packages to your system if available:"
|
||||||
|
"\n\t${bundled_names}\n"
|
||||||
|
"2. Set the following variables to ON:"
|
||||||
|
"\n\t${system_names}\n"
|
||||||
|
"This may also be caused by a version mismatch, "
|
||||||
|
"such as one package being newer than the other.")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (NOT DEFINED JSON_NAME)
|
foreach(pkg ${ARGN})
|
||||||
cpm_utils_message(FATAL_ERROR "json package" "No name specified")
|
AddJsonPackage(${pkg})
|
||||||
endif()
|
endforeach()
|
||||||
|
endfunction()
|
||||||
string(JSON object ERROR_VARIABLE err GET "${CPMFILE_CONTENT}" "${JSON_NAME}")
|
|
||||||
|
|
||||||
if (err)
|
|
||||||
cpm_utils_message(FATAL_ERROR ${JSON_NAME} "Not found in cpmfile")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
|
# json util
|
||||||
|
macro(parse_object object)
|
||||||
get_json_element("${object}" package package ${JSON_NAME})
|
get_json_element("${object}" package package ${JSON_NAME})
|
||||||
get_json_element("${object}" repo repo "")
|
get_json_element("${object}" repo repo "")
|
||||||
get_json_element("${object}" ci ci OFF)
|
get_json_element("${object}" ci ci OFF)
|
||||||
|
|
@ -110,32 +155,12 @@ function(AddJsonPackage)
|
||||||
get_json_element("${object}" raw_disabled disabled_platforms "")
|
get_json_element("${object}" raw_disabled disabled_platforms "")
|
||||||
|
|
||||||
if(raw_disabled)
|
if(raw_disabled)
|
||||||
array_to_list("${raw_disabled}" ${raw_disabled_LENGTH} disabled_platforms)
|
array_to_list("${raw_disabled}"
|
||||||
|
${raw_disabled_LENGTH} disabled_platforms)
|
||||||
else()
|
else()
|
||||||
set(disabled_platforms "")
|
set(disabled_platforms "")
|
||||||
endif()
|
endif()
|
||||||
|
else()
|
||||||
AddCIPackage(
|
|
||||||
VERSION ${version}
|
|
||||||
NAME ${name}
|
|
||||||
REPO ${repo}
|
|
||||||
PACKAGE ${package}
|
|
||||||
EXTENSION ${extension}
|
|
||||||
MIN_VERSION ${min_version}
|
|
||||||
DISABLED_PLATFORMS ${disabled_platforms}
|
|
||||||
)
|
|
||||||
|
|
||||||
# pass stuff to parent scope
|
|
||||||
set(${package}_ADDED "${${package}_ADDED}"
|
|
||||||
PARENT_SCOPE)
|
|
||||||
set(${package}_SOURCE_DIR "${${package}_SOURCE_DIR}"
|
|
||||||
PARENT_SCOPE)
|
|
||||||
set(${package}_BINARY_DIR "${${package}_BINARY_DIR}"
|
|
||||||
PARENT_SCOPE)
|
|
||||||
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
get_json_element("${object}" hash hash "")
|
get_json_element("${object}" hash hash "")
|
||||||
get_json_element("${object}" hash_suffix hash_suffix "")
|
get_json_element("${object}" hash_suffix hash_suffix "")
|
||||||
get_json_element("${object}" sha sha "")
|
get_json_element("${object}" sha sha "")
|
||||||
|
|
@ -151,8 +176,10 @@ function(AddJsonPackage)
|
||||||
get_json_element("${object}" raw_patches patches "")
|
get_json_element("${object}" raw_patches patches "")
|
||||||
|
|
||||||
# okay here comes the fun part: REPLACEMENTS!
|
# okay here comes the fun part: REPLACEMENTS!
|
||||||
# first: tag gets %VERSION% replaced if applicable, with either git_version (preferred) or version
|
# first: tag gets %VERSION% replaced if applicable,
|
||||||
# second: artifact gets %VERSION% and %TAG% replaced accordingly (same rules for VERSION)
|
# with either git_version (preferred) or version
|
||||||
|
# second: artifact gets %VERSION% and %TAG% replaced
|
||||||
|
# accordingly (same rules for VERSION)
|
||||||
|
|
||||||
if(git_version)
|
if(git_version)
|
||||||
set(version_replace ${git_version})
|
set(version_replace ${git_version})
|
||||||
|
|
@ -166,7 +193,8 @@ function(AddJsonPackage)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(artifact)
|
if(artifact)
|
||||||
string(REPLACE "%VERSION%" "${version_replace}" artifact ${artifact})
|
string(REPLACE "%VERSION%" "${version_replace}"
|
||||||
|
artifact ${artifact})
|
||||||
string(REPLACE "%TAG%" "${tag}" artifact ${artifact})
|
string(REPLACE "%TAG%" "${tag}" artifact ${artifact})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
@ -177,9 +205,11 @@ function(AddJsonPackage)
|
||||||
foreach(IDX RANGE ${range})
|
foreach(IDX RANGE ${range})
|
||||||
string(JSON _patch GET "${raw_patches}" "${IDX}")
|
string(JSON _patch GET "${raw_patches}" "${IDX}")
|
||||||
|
|
||||||
set(full_patch "${CMAKE_SOURCE_DIR}/.patch/${JSON_NAME}/${_patch}")
|
set(full_patch
|
||||||
|
"${PROJECT_SOURCE_DIR}/.patch/${JSON_NAME}/${_patch}")
|
||||||
if(NOT EXISTS ${full_patch})
|
if(NOT EXISTS ${full_patch})
|
||||||
cpm_utils_message(FATAL_ERROR ${JSON_NAME} "specifies patch ${full_patch} which does not exist")
|
cpm_utils_message(FATAL_ERROR ${JSON_NAME}
|
||||||
|
"specifies patch ${full_patch} which does not exist")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
list(APPEND patches "${full_patch}")
|
list(APPEND patches "${full_patch}")
|
||||||
|
|
@ -201,6 +231,65 @@ function(AddJsonPackage)
|
||||||
if(bundled STREQUAL "unset" AND DEFINED JSON_BUNDLED_PACKAGE)
|
if(bundled STREQUAL "unset" AND DEFINED JSON_BUNDLED_PACKAGE)
|
||||||
set(bundled ${JSON_BUNDLED_PACKAGE})
|
set(bundled ${JSON_BUNDLED_PACKAGE})
|
||||||
endif()
|
endif()
|
||||||
|
endif()
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
# The preferred usage
|
||||||
|
function(AddJsonPackage)
|
||||||
|
set(oneValueArgs
|
||||||
|
NAME
|
||||||
|
|
||||||
|
# these are overrides that can be generated at runtime,
|
||||||
|
# so can be defined separately from the json
|
||||||
|
DOWNLOAD_ONLY
|
||||||
|
BUNDLED_PACKAGE
|
||||||
|
FORCE_BUNDLED_PACKAGE)
|
||||||
|
|
||||||
|
set(multiValueArgs OPTIONS)
|
||||||
|
|
||||||
|
cmake_parse_arguments(JSON "" "${oneValueArgs}" "${multiValueArgs}"
|
||||||
|
"${ARGN}")
|
||||||
|
|
||||||
|
list(LENGTH ARGN argnLength)
|
||||||
|
|
||||||
|
# single name argument
|
||||||
|
if(argnLength EQUAL 1)
|
||||||
|
set(JSON_NAME "${ARGV0}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT DEFINED CPMFILE_CONTENT)
|
||||||
|
cpm_utils_message(WARNING ${name}
|
||||||
|
"No cpmfile, AddJsonPackage is a no-op")
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT DEFINED JSON_NAME)
|
||||||
|
cpm_utils_message(FATAL_ERROR "json package" "No name specified")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
string(JSON object ERROR_VARIABLE
|
||||||
|
err GET "${CPMFILE_CONTENT}" "${JSON_NAME}")
|
||||||
|
|
||||||
|
if(err)
|
||||||
|
cpm_utils_message(FATAL_ERROR ${JSON_NAME} "Not found in cpmfile")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
parse_object(${object})
|
||||||
|
|
||||||
|
if(ci)
|
||||||
|
AddCIPackage(
|
||||||
|
VERSION ${version}
|
||||||
|
NAME ${name}
|
||||||
|
REPO ${repo}
|
||||||
|
PACKAGE ${package}
|
||||||
|
EXTENSION ${extension}
|
||||||
|
MIN_VERSION ${min_version}
|
||||||
|
DISABLED_PLATFORMS ${disabled_platforms})
|
||||||
|
|
||||||
|
else()
|
||||||
|
if (NOT DEFINED JSON_FORCE_BUNDLED_PACKAGE)
|
||||||
|
set(JSON_FORCE_BUNDLED_PACKAGE OFF)
|
||||||
|
endif()
|
||||||
|
|
||||||
AddPackage(
|
AddPackage(
|
||||||
NAME "${package}"
|
NAME "${package}"
|
||||||
|
|
@ -215,23 +304,20 @@ function(AddJsonPackage)
|
||||||
OPTIONS "${options}"
|
OPTIONS "${options}"
|
||||||
FIND_PACKAGE_ARGUMENTS "${find_args}"
|
FIND_PACKAGE_ARGUMENTS "${find_args}"
|
||||||
BUNDLED_PACKAGE "${bundled}"
|
BUNDLED_PACKAGE "${bundled}"
|
||||||
|
FORCE_BUNDLED_PACKAGE "${JSON_FORCE_BUNDLED_PACKAGE}"
|
||||||
SOURCE_SUBDIR "${source_subdir}"
|
SOURCE_SUBDIR "${source_subdir}"
|
||||||
|
|
||||||
GIT_VERSION ${git_version}
|
GIT_VERSION ${git_version}
|
||||||
GIT_HOST ${git_host}
|
GIT_HOST ${git_host}
|
||||||
|
|
||||||
ARTIFACT ${artifact}
|
ARTIFACT ${artifact}
|
||||||
TAG ${tag}
|
TAG ${tag})
|
||||||
)
|
endif()
|
||||||
|
|
||||||
# pass stuff to parent scope
|
# pass stuff to parent scope
|
||||||
set(${package}_ADDED "${${package}_ADDED}"
|
Propagate(${package}_ADDED)
|
||||||
PARENT_SCOPE)
|
Propagate(${package}_SOURCE_DIR)
|
||||||
set(${package}_SOURCE_DIR "${${package}_SOURCE_DIR}"
|
Propagate(${package}_BINARY_DIR)
|
||||||
PARENT_SCOPE)
|
|
||||||
set(${package}_BINARY_DIR "${${package}_BINARY_DIR}"
|
|
||||||
PARENT_SCOPE)
|
|
||||||
|
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
function(AddPackage)
|
function(AddPackage)
|
||||||
|
|
@ -278,8 +364,7 @@ function(AddPackage)
|
||||||
KEY
|
KEY
|
||||||
BUNDLED_PACKAGE
|
BUNDLED_PACKAGE
|
||||||
FORCE_BUNDLED_PACKAGE
|
FORCE_BUNDLED_PACKAGE
|
||||||
FIND_PACKAGE_ARGUMENTS
|
FIND_PACKAGE_ARGUMENTS)
|
||||||
)
|
|
||||||
|
|
||||||
set(multiValueArgs OPTIONS PATCHES)
|
set(multiValueArgs OPTIONS PATCHES)
|
||||||
|
|
||||||
|
|
@ -290,8 +375,17 @@ function(AddPackage)
|
||||||
cpm_utils_message(FATAL_ERROR "package" "No package name defined")
|
cpm_utils_message(FATAL_ERROR "package" "No package name defined")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
option(${PKG_ARGS_NAME}_FORCE_SYSTEM "Force the system package for ${PKG_ARGS_NAME}")
|
set(${PKG_ARGS_NAME}_CUSTOM_DIR "" CACHE STRING
|
||||||
option(${PKG_ARGS_NAME}_FORCE_BUNDLED "Force the bundled package for ${PKG_ARGS_NAME}")
|
"Path to a separately-downloaded copy of ${PKG_ARGS_NAME}")
|
||||||
|
option(${PKG_ARGS_NAME}_FORCE_SYSTEM
|
||||||
|
"Force the system package for ${PKG_ARGS_NAME}")
|
||||||
|
option(${PKG_ARGS_NAME}_FORCE_BUNDLED
|
||||||
|
"Force the bundled package for ${PKG_ARGS_NAME}")
|
||||||
|
|
||||||
|
if (DEFINED ${PKG_ARGS_NAME}_CUSTOM_DIR AND
|
||||||
|
NOT ${PKG_ARGS_NAME}_CUSTOM_DIR STREQUAL "")
|
||||||
|
set(CPM_${PKG_ARGS_NAME}_SOURCE ${${PKG_ARGS_NAME}_CUSTOM_DIR})
|
||||||
|
endif()
|
||||||
|
|
||||||
if(NOT DEFINED PKG_ARGS_GIT_HOST)
|
if(NOT DEFINED PKG_ARGS_GIT_HOST)
|
||||||
set(git_host github.com)
|
set(git_host github.com)
|
||||||
|
|
@ -319,7 +413,7 @@ function(AddPackage)
|
||||||
|
|
||||||
if(DEFINED PKG_ARGS_ARTIFACT)
|
if(DEFINED PKG_ARGS_ARTIFACT)
|
||||||
set(pkg_url
|
set(pkg_url
|
||||||
${pkg_git_url}/releases/download/${PKG_ARGS_TAG}/${PKG_ARGS_ARTIFACT})
|
"${pkg_git_url}/releases/download/${PKG_ARGS_TAG}/${PKG_ARGS_ARTIFACT}")
|
||||||
else()
|
else()
|
||||||
set(pkg_url
|
set(pkg_url
|
||||||
${pkg_git_url}/archive/refs/tags/${PKG_ARGS_TAG}.tar.gz)
|
${pkg_git_url}/archive/refs/tags/${PKG_ARGS_TAG}.tar.gz)
|
||||||
|
|
@ -331,17 +425,19 @@ function(AddPackage)
|
||||||
set(PKG_BRANCH ${PKG_ARGS_BRANCH})
|
set(PKG_BRANCH ${PKG_ARGS_BRANCH})
|
||||||
else()
|
else()
|
||||||
cpm_utils_message(WARNING ${PKG_ARGS_NAME}
|
cpm_utils_message(WARNING ${PKG_ARGS_NAME}
|
||||||
"REPO defined but no TAG, SHA, BRANCH, or URL specified, defaulting to master")
|
"REPO defined but no TAG, SHA, BRANCH, or URL"
|
||||||
|
"specified, defaulting to master")
|
||||||
set(PKG_BRANCH master)
|
set(PKG_BRANCH master)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(pkg_url ${pkg_git_url}/archive/refs/heads/${PKG_BRANCH}.tar.gz)
|
set(pkg_url ${pkg_git_url}/archive/refs/heads/${PKG_BRANCH}.tar.gz)
|
||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
cpm_utils_message(FATAL_ERROR ${PKG_ARGS_NAME} "No URL or repository defined")
|
cpm_utils_message(FATAL_ERROR ${PKG_ARGS_NAME}
|
||||||
|
"No URL or repository defined")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
cpm_utils_message(STATUS ${PKG_ARGS_NAME} "Download URL is ${pkg_url}")
|
cpm_utils_message(DEBUG ${PKG_ARGS_NAME} "Download URL is ${pkg_url}")
|
||||||
|
|
||||||
if(NOT DEFINED PKG_ARGS_KEY)
|
if(NOT DEFINED PKG_ARGS_KEY)
|
||||||
if(DEFINED PKG_ARGS_SHA)
|
if(DEFINED PKG_ARGS_SHA)
|
||||||
|
|
@ -400,7 +496,8 @@ function(AddPackage)
|
||||||
# because "technically" the hash is invalidated each week
|
# because "technically" the hash is invalidated each week
|
||||||
# but it works for now kjsdnfkjdnfjksdn
|
# but it works for now kjsdnfkjdnfjksdn
|
||||||
string(TOLOWER ${PKG_ARGS_NAME} lowername)
|
string(TOLOWER ${PKG_ARGS_NAME} lowername)
|
||||||
if (NOT EXISTS ${outfile} AND NOT EXISTS ${CPM_SOURCE_CACHE}/${lowername}/${pkg_key})
|
if(NOT EXISTS ${outfile} AND NOT EXISTS
|
||||||
|
${CPM_SOURCE_CACHE}/${lowername}/${pkg_key})
|
||||||
file(DOWNLOAD ${hash_url} ${outfile})
|
file(DOWNLOAD ${hash_url} ${outfile})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
@ -426,7 +523,7 @@ function(AddPackage)
|
||||||
- CPMUTIL_FORCE_BUNDLED
|
- CPMUTIL_FORCE_BUNDLED
|
||||||
- BUNDLED_PACKAGE
|
- BUNDLED_PACKAGE
|
||||||
- default to allow local
|
- default to allow local
|
||||||
]]#
|
]]
|
||||||
if(PKG_ARGS_FORCE_BUNDLED_PACKAGE)
|
if(PKG_ARGS_FORCE_BUNDLED_PACKAGE)
|
||||||
set_precedence(OFF OFF)
|
set_precedence(OFF OFF)
|
||||||
elseif(${PKG_ARGS_NAME}_FORCE_SYSTEM)
|
elseif(${PKG_ARGS_NAME}_FORCE_SYSTEM)
|
||||||
|
|
@ -437,7 +534,8 @@ function(AddPackage)
|
||||||
set_precedence(ON ON)
|
set_precedence(ON ON)
|
||||||
elseif(CPMUTIL_FORCE_BUNDLED)
|
elseif(CPMUTIL_FORCE_BUNDLED)
|
||||||
set_precedence(OFF OFF)
|
set_precedence(OFF OFF)
|
||||||
elseif (DEFINED PKG_ARGS_BUNDLED_PACKAGE AND NOT PKG_ARGS_BUNDLED_PACKAGE STREQUAL "unset")
|
elseif(DEFINED PKG_ARGS_BUNDLED_PACKAGE AND
|
||||||
|
NOT PKG_ARGS_BUNDLED_PACKAGE STREQUAL "unset")
|
||||||
if(PKG_ARGS_BUNDLED_PACKAGE)
|
if(PKG_ARGS_BUNDLED_PACKAGE)
|
||||||
set(local OFF)
|
set(local OFF)
|
||||||
else()
|
else()
|
||||||
|
|
@ -451,8 +549,7 @@ function(AddPackage)
|
||||||
|
|
||||||
if(DEFINED PKG_ARGS_VERSION)
|
if(DEFINED PKG_ARGS_VERSION)
|
||||||
list(APPEND EXTRA_ARGS
|
list(APPEND EXTRA_ARGS
|
||||||
VERSION ${PKG_ARGS_VERSION}
|
VERSION ${PKG_ARGS_VERSION})
|
||||||
)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
CPMAddPackage(
|
CPMAddPackage(
|
||||||
|
|
@ -469,8 +566,7 @@ function(AddPackage)
|
||||||
|
|
||||||
${EXTRA_ARGS}
|
${EXTRA_ARGS}
|
||||||
|
|
||||||
${PKG_ARGS_UNPARSED_ARGUMENTS}
|
${PKG_ARGS_UNPARSED_ARGUMENTS})
|
||||||
)
|
|
||||||
|
|
||||||
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_NAMES ${PKG_ARGS_NAME})
|
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_NAMES ${PKG_ARGS_NAME})
|
||||||
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_URLS ${pkg_git_url})
|
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_URLS ${pkg_git_url})
|
||||||
|
|
@ -514,24 +610,6 @@ function(AddPackage)
|
||||||
|
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
function(add_ci_package key)
|
|
||||||
set(ARTIFACT ${ARTIFACT_NAME}-${key}-${ARTIFACT_VERSION}.${ARTIFACT_EXT})
|
|
||||||
|
|
||||||
AddPackage(
|
|
||||||
NAME ${ARTIFACT_PACKAGE}
|
|
||||||
REPO ${ARTIFACT_REPO}
|
|
||||||
TAG v${ARTIFACT_VERSION}
|
|
||||||
GIT_VERSION ${ARTIFACT_VERSION}
|
|
||||||
ARTIFACT ${ARTIFACT}
|
|
||||||
|
|
||||||
KEY ${key}-${ARTIFACT_VERSION}
|
|
||||||
HASH_SUFFIX sha512sum
|
|
||||||
FORCE_BUNDLED_PACKAGE ON
|
|
||||||
)
|
|
||||||
|
|
||||||
set(ARTIFACT_DIR ${${ARTIFACT_PACKAGE}_SOURCE_DIR} PARENT_SCOPE)
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
# TODO(crueter): we could do an AddMultiArchPackage, multiplatformpackage?
|
# TODO(crueter): we could do an AddMultiArchPackage, multiplatformpackage?
|
||||||
# name is the artifact name, package is for find_package override
|
# name is the artifact name, package is for find_package override
|
||||||
function(AddCIPackage)
|
function(AddCIPackage)
|
||||||
|
|
@ -541,12 +619,17 @@ function(AddCIPackage)
|
||||||
REPO
|
REPO
|
||||||
PACKAGE
|
PACKAGE
|
||||||
EXTENSION
|
EXTENSION
|
||||||
MIN_VERSION
|
MIN_VERSION)
|
||||||
)
|
|
||||||
|
|
||||||
set(multiValueArgs DISABLED_PLATFORMS)
|
set(multiValueArgs DISABLED_PLATFORMS)
|
||||||
|
|
||||||
cmake_parse_arguments(PKG_ARGS "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
set(optionArgs MODULE)
|
||||||
|
|
||||||
|
cmake_parse_arguments(PKG_ARGS
|
||||||
|
"${optionArgs}"
|
||||||
|
"${oneValueArgs}"
|
||||||
|
"${multiValueArgs}"
|
||||||
|
${ARGN})
|
||||||
|
|
||||||
if(NOT DEFINED PKG_ARGS_VERSION)
|
if(NOT DEFINED PKG_ARGS_VERSION)
|
||||||
message(FATAL_ERROR "[CPMUtil] VERSION is required")
|
message(FATAL_ERROR "[CPMUtil] VERSION is required")
|
||||||
|
|
@ -587,51 +670,75 @@ function(AddCIPackage)
|
||||||
set(ARTIFACT_REPO ${PKG_ARGS_REPO})
|
set(ARTIFACT_REPO ${PKG_ARGS_REPO})
|
||||||
set(ARTIFACT_PACKAGE ${PKG_ARGS_PACKAGE})
|
set(ARTIFACT_PACKAGE ${PKG_ARGS_PACKAGE})
|
||||||
|
|
||||||
if ((MSVC AND ARCHITECTURE_x86_64) AND NOT "windows-amd64" IN_LIST DISABLED_PLATFORMS)
|
if(MSVC AND ARCHITECTURE_x86_64)
|
||||||
add_ci_package(windows-amd64)
|
set(pkgname windows-amd64)
|
||||||
|
elseif(MSVC AND ARCHITECTURE_arm64)
|
||||||
|
set(pkgname windows-arm64)
|
||||||
|
elseif(MINGW AND ARCHITECTURE_x86_64)
|
||||||
|
set(pkgname mingw-amd64)
|
||||||
|
elseif(MINGW AND ARCHITECTURE_arm64)
|
||||||
|
set(pkgname mingw-arm64)
|
||||||
|
elseif(ANDROID AND ARCHITECTURE_x86_64)
|
||||||
|
set(pkgname android-x86_64)
|
||||||
|
elseif(ANDROID AND ARCHITECTURE_arm64)
|
||||||
|
set(pkgname android-aarch64)
|
||||||
|
elseif(PLATFORM_SUN)
|
||||||
|
set(pkgname solaris-amd64)
|
||||||
|
elseif(PLATFORM_FREEBSD)
|
||||||
|
set(pkgname freebsd-amd64)
|
||||||
|
elseif(PLATFORM_LINUX AND ARCHITECTURE_x86_64)
|
||||||
|
set(pkgname linux-amd64)
|
||||||
|
elseif(PLATFORM_LINUX AND ARCHITECTURE_arm64)
|
||||||
|
set(pkgname linux-aarch64)
|
||||||
|
elseif(APPLE)
|
||||||
|
set(pkgname macos-universal)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if ((MSVC AND ARCHITECTURE_arm64) AND NOT "windows-arm64" IN_LIST DISABLED_PLATFORMS)
|
if (DEFINED pkgname AND NOT "${pkgname}" IN_LIST DISABLED_PLATFORMS)
|
||||||
add_ci_package(windows-arm64)
|
set(ARTIFACT
|
||||||
endif()
|
"${ARTIFACT_NAME}-${pkgname}-${ARTIFACT_VERSION}.${ARTIFACT_EXT}")
|
||||||
|
|
||||||
if ((MINGW AND ARCHITECTURE_x86_64) AND NOT "mingw-amd64" IN_LIST DISABLED_PLATFORMS)
|
AddPackage(
|
||||||
add_ci_package(mingw-amd64)
|
NAME ${ARTIFACT_PACKAGE}
|
||||||
endif()
|
REPO ${ARTIFACT_REPO}
|
||||||
|
TAG "v${ARTIFACT_VERSION}"
|
||||||
|
GIT_VERSION ${ARTIFACT_VERSION}
|
||||||
|
ARTIFACT ${ARTIFACT}
|
||||||
|
|
||||||
if ((MINGW AND ARCHITECTURE_arm64) AND NOT "mingw-arm64" IN_LIST DISABLED_PLATFORMS)
|
KEY "${pkgname}-${ARTIFACT_VERSION}"
|
||||||
add_ci_package(mingw-arm64)
|
HASH_SUFFIX sha512sum
|
||||||
endif()
|
FORCE_BUNDLED_PACKAGE ON
|
||||||
|
DOWNLOAD_ONLY ${PKG_ARGS_MODULE})
|
||||||
|
|
||||||
if (ANDROID AND NOT "android" IN_LIST DISABLED_PLATFORMS)
|
|
||||||
add_ci_package(android)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(PLATFORM_SUN AND NOT "solaris-amd64" IN_LIST DISABLED_PLATFORMS)
|
|
||||||
add_ci_package(solaris-amd64)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(PLATFORM_FREEBSD AND NOT "freebsd-amd64" IN_LIST DISABLED_PLATFORMS)
|
|
||||||
add_ci_package(freebsd-amd64)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if((PLATFORM_LINUX AND ARCHITECTURE_x86_64) AND NOT "linux-amd64" IN_LIST DISABLED_PLATFORMS)
|
|
||||||
add_ci_package(linux-amd64)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if((PLATFORM_LINUX AND ARCHITECTURE_arm64) AND NOT "linux-aarch64" IN_LIST DISABLED_PLATFORMS)
|
|
||||||
add_ci_package(linux-aarch64)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# TODO(crueter): macOS amd64/aarch64 split mayhaps
|
|
||||||
if (APPLE AND NOT "macos-universal" IN_LIST DISABLED_PLATFORMS)
|
|
||||||
add_ci_package(macos-universal)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (DEFINED ARTIFACT_DIR)
|
|
||||||
set(${ARTIFACT_PACKAGE}_ADDED TRUE PARENT_SCOPE)
|
set(${ARTIFACT_PACKAGE}_ADDED TRUE PARENT_SCOPE)
|
||||||
set(${ARTIFACT_PACKAGE}_SOURCE_DIR "${ARTIFACT_DIR}" PARENT_SCOPE)
|
set(${ARTIFACT_PACKAGE}_SOURCE_DIR
|
||||||
|
"${${ARTIFACT_PACKAGE}_SOURCE_DIR}" PARENT_SCOPE)
|
||||||
|
|
||||||
|
if (PKG_ARGS_MODULE)
|
||||||
|
list(APPEND CMAKE_PREFIX_PATH "${${ARTIFACT_PACKAGE}_SOURCE_DIR}")
|
||||||
|
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE)
|
||||||
|
endif()
|
||||||
else()
|
else()
|
||||||
find_package(${ARTIFACT_PACKAGE} ${ARTIFACT_MIN_VERSION} REQUIRED)
|
find_package(${ARTIFACT_PACKAGE} ${ARTIFACT_MIN_VERSION} REQUIRED)
|
||||||
endif()
|
endif()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
|
# Utility function for Qt
|
||||||
|
function(AddQt version)
|
||||||
|
if (NOT DEFINED version)
|
||||||
|
message(FATAL_ERROR "[CPMUtil] AddQt: version is required")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
AddCIPackage(
|
||||||
|
NAME Qt
|
||||||
|
PACKAGE Qt6
|
||||||
|
VERSION ${version}
|
||||||
|
MIN_VERSION 6
|
||||||
|
REPO crueter-ci/Qt
|
||||||
|
DISABLED_PLATFORMS
|
||||||
|
android-x86_64 android-aarch64
|
||||||
|
freebsd-amd64 solaris-amd64 openbsd-amd64
|
||||||
|
MODULE)
|
||||||
|
|
||||||
|
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
|
||||||
|
|
@ -1,66 +0,0 @@
|
||||||
# SPDX-FileCopyrightText: 2024 kleidis
|
|
||||||
|
|
||||||
function(copy_yuzu_Qt6_deps target_dir)
|
|
||||||
include(WindowsCopyFiles)
|
|
||||||
if (MSVC)
|
|
||||||
set(DLL_DEST "$<TARGET_FILE_DIR:${target_dir}>/")
|
|
||||||
set(Qt6_DLL_DIR "${Qt6_DIR}/../../../bin")
|
|
||||||
else()
|
|
||||||
set(DLL_DEST "${CMAKE_BINARY_DIR}/bin/")
|
|
||||||
set(Qt6_DLL_DIR "${Qt6_DIR}/../../../lib/")
|
|
||||||
endif()
|
|
||||||
set(Qt6_PLATFORMS_DIR "${Qt6_DIR}/../../../plugins/platforms/")
|
|
||||||
set(Qt6_STYLES_DIR "${Qt6_DIR}/../../../plugins/styles/")
|
|
||||||
set(Qt6_IMAGEFORMATS_DIR "${Qt6_DIR}/../../../plugins/imageformats/")
|
|
||||||
set(Qt6_RESOURCES_DIR "${Qt6_DIR}/../../../resources/")
|
|
||||||
set(PLATFORMS ${DLL_DEST}plugins/platforms/)
|
|
||||||
set(STYLES ${DLL_DEST}plugins/styles/)
|
|
||||||
set(IMAGEFORMATS ${DLL_DEST}plugins/imageformats/)
|
|
||||||
set(RESOURCES ${DLL_DEST}resources/)
|
|
||||||
if (MSVC)
|
|
||||||
windows_copy_files(${target_dir} ${Qt6_DLL_DIR} ${DLL_DEST}
|
|
||||||
Qt6Core$<$<CONFIG:Debug>:d>.*
|
|
||||||
Qt6Gui$<$<CONFIG:Debug>:d>.*
|
|
||||||
Qt6Widgets$<$<CONFIG:Debug>:d>.*
|
|
||||||
Qt6Network$<$<CONFIG:Debug>:d>.*
|
|
||||||
)
|
|
||||||
if (YUZU_USE_QT_MULTIMEDIA)
|
|
||||||
windows_copy_files(${target_dir} ${Qt6_DLL_DIR} ${DLL_DEST}
|
|
||||||
Qt6Multimedia$<$<CONFIG:Debug>:d>.*
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
if (YUZU_USE_QT_WEB_ENGINE)
|
|
||||||
windows_copy_files(${target_dir} ${Qt6_DLL_DIR} ${DLL_DEST}
|
|
||||||
Qt6OpenGL$<$<CONFIG:Debug>:d>.*
|
|
||||||
Qt6Positioning$<$<CONFIG:Debug>:d>.*
|
|
||||||
Qt6PrintSupport$<$<CONFIG:Debug>:d>.*
|
|
||||||
Qt6Qml$<$<CONFIG:Debug>:d>.*
|
|
||||||
Qt6QmlMeta$<$<CONFIG:Debug>:d>.*
|
|
||||||
Qt6QmlModels$<$<CONFIG:Debug>:d>.*
|
|
||||||
Qt6QmlWorkerScript$<$<CONFIG:Debug>:d>.*
|
|
||||||
Qt6Quick$<$<CONFIG:Debug>:d>.*
|
|
||||||
Qt6QuickWidgets$<$<CONFIG:Debug>:d>.*
|
|
||||||
Qt6WebChannel$<$<CONFIG:Debug>:d>.*
|
|
||||||
Qt6WebEngineCore$<$<CONFIG:Debug>:d>.*
|
|
||||||
Qt6WebEngineWidgets$<$<CONFIG:Debug>:d>.*
|
|
||||||
QtWebEngineProcess$<$<CONFIG:Debug>:d>.*
|
|
||||||
)
|
|
||||||
windows_copy_files(${target_dir} ${Qt6_RESOURCES_DIR} ${RESOURCES}
|
|
||||||
icudtl.dat
|
|
||||||
qtwebengine_devtools_resources.pak
|
|
||||||
qtwebengine_resources.pak
|
|
||||||
qtwebengine_resources_100p.pak
|
|
||||||
qtwebengine_resources_200p.pak
|
|
||||||
v8_context_snapshot.bin
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
windows_copy_files(yuzu ${Qt6_PLATFORMS_DIR} ${PLATFORMS} qwindows$<$<CONFIG:Debug>:d>.*)
|
|
||||||
windows_copy_files(yuzu ${Qt6_STYLES_DIR} ${STYLES} qmodernwindowsstyle$<$<CONFIG:Debug>:d>.*)
|
|
||||||
windows_copy_files(yuzu ${Qt6_IMAGEFORMATS_DIR} ${IMAGEFORMATS}
|
|
||||||
qjpeg$<$<CONFIG:Debug>:d>.*
|
|
||||||
qgif$<$<CONFIG:Debug>:d>.*
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
# Update for non-MSVC platforms if needed
|
|
||||||
endif()
|
|
||||||
endfunction(copy_yuzu_Qt6_deps)
|
|
||||||
|
|
@ -1,271 +0,0 @@
|
||||||
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
# This function downloads a binary library package from our external repo.
|
|
||||||
# Params:
|
|
||||||
# remote_path: path to the file to download, relative to the remote repository root
|
|
||||||
# prefix_var: name of a variable which will be set with the path to the extracted contents
|
|
||||||
set(CURRENT_MODULE_DIR ${CMAKE_CURRENT_LIST_DIR})
|
|
||||||
function(download_bundled_external remote_path lib_name cpm_key prefix_var version)
|
|
||||||
set(package_base_url "https://github.com/eden-emulator/")
|
|
||||||
set(package_repo "no_platform")
|
|
||||||
set(package_extension "no_platform")
|
|
||||||
set(CACHE_KEY "")
|
|
||||||
|
|
||||||
# TODO(crueter): Need to convert ffmpeg to a CI.
|
|
||||||
if (WIN32 OR FORCE_WIN_ARCHIVES)
|
|
||||||
if (ARCHITECTURE_arm64)
|
|
||||||
set(CACHE_KEY "windows")
|
|
||||||
set(package_repo "ext-windows-arm64-bin/raw/master/")
|
|
||||||
set(package_extension ".zip")
|
|
||||||
elseif(ARCHITECTURE_x86_64)
|
|
||||||
set(CACHE_KEY "windows")
|
|
||||||
set(package_repo "ext-windows-bin/raw/master/")
|
|
||||||
set(package_extension ".7z")
|
|
||||||
endif()
|
|
||||||
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
|
||||||
set(CACHE_KEY "linux")
|
|
||||||
set(package_repo "ext-linux-bin/raw/master/")
|
|
||||||
set(package_extension ".tar.xz")
|
|
||||||
elseif (ANDROID)
|
|
||||||
set(CACHE_KEY "android")
|
|
||||||
set(package_repo "ext-android-bin/raw/master/")
|
|
||||||
set(package_extension ".tar.xz")
|
|
||||||
else()
|
|
||||||
message(FATAL_ERROR "No package available for this platform")
|
|
||||||
endif()
|
|
||||||
string(CONCAT package_url "${package_base_url}" "${package_repo}")
|
|
||||||
string(CONCAT full_url "${package_url}" "${remote_path}" "${lib_name}" "${package_extension}")
|
|
||||||
message(STATUS "Resolved bundled URL: ${full_url}")
|
|
||||||
|
|
||||||
# TODO(crueter): DELETE THIS ENTIRELY, GLORY BE TO THE CI!
|
|
||||||
AddPackage(
|
|
||||||
NAME ${cpm_key}
|
|
||||||
VERSION ${version}
|
|
||||||
URL ${full_url}
|
|
||||||
DOWNLOAD_ONLY YES
|
|
||||||
KEY ${CACHE_KEY}
|
|
||||||
BUNDLED_PACKAGE ON
|
|
||||||
# TODO(crueter): hash
|
|
||||||
)
|
|
||||||
|
|
||||||
if (DEFINED ${cpm_key}_SOURCE_DIR)
|
|
||||||
set(${prefix_var} "${${cpm_key}_SOURCE_DIR}" PARENT_SCOPE)
|
|
||||||
message(STATUS "Using bundled binaries at ${${cpm_key}_SOURCE_DIR}")
|
|
||||||
else()
|
|
||||||
message(FATAL_ERROR "AddPackage did not set ${cpm_key}_SOURCE_DIR")
|
|
||||||
endif()
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
# Determine installation parameters for OS, architecture, and compiler
|
|
||||||
function(determine_qt_parameters target host_out type_out arch_out arch_path_out host_type_out host_arch_out host_arch_path_out)
|
|
||||||
if (WIN32)
|
|
||||||
set(host "windows")
|
|
||||||
set(type "desktop")
|
|
||||||
|
|
||||||
if (NOT tool)
|
|
||||||
if (MINGW)
|
|
||||||
set(arch "win64_mingw")
|
|
||||||
set(arch_path "mingw_64")
|
|
||||||
elseif (MSVC)
|
|
||||||
if ("arm64" IN_LIST ARCHITECTURE)
|
|
||||||
set(arch_path "msvc2022_arm64")
|
|
||||||
elseif ("x86_64" IN_LIST ARCHITECTURE)
|
|
||||||
set(arch_path "msvc2022_64")
|
|
||||||
else()
|
|
||||||
message(FATAL_ERROR "Unsupported bundled Qt architecture. Disable YUZU_USE_BUNDLED_QT and provide your own.")
|
|
||||||
endif()
|
|
||||||
set(arch "win64_${arch_path}")
|
|
||||||
|
|
||||||
if (CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "AMD64")
|
|
||||||
set(host_arch_path "msvc2022_64")
|
|
||||||
elseif (CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "ARM64")
|
|
||||||
set(host_arch_path "msvc2022_arm64")
|
|
||||||
endif()
|
|
||||||
set(host_arch "win64_${host_arch_path}")
|
|
||||||
else()
|
|
||||||
message(FATAL_ERROR "Unsupported bundled Qt toolchain. Disable YUZU_USE_BUNDLED_QT and provide your own.")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
elseif (APPLE)
|
|
||||||
set(host "mac")
|
|
||||||
set(type "desktop")
|
|
||||||
set(arch "clang_64")
|
|
||||||
set(arch_path "macos")
|
|
||||||
else()
|
|
||||||
set(host "linux")
|
|
||||||
set(type "desktop")
|
|
||||||
set(arch "linux_gcc_64")
|
|
||||||
set(arch_path "gcc_64")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(${host_out} "${host}" PARENT_SCOPE)
|
|
||||||
set(${type_out} "${type}" PARENT_SCOPE)
|
|
||||||
set(${arch_out} "${arch}" PARENT_SCOPE)
|
|
||||||
set(${arch_path_out} "${arch_path}" PARENT_SCOPE)
|
|
||||||
if (DEFINED host_type)
|
|
||||||
set(${host_type_out} "${host_type}" PARENT_SCOPE)
|
|
||||||
else()
|
|
||||||
set(${host_type_out} "${type}" PARENT_SCOPE)
|
|
||||||
endif()
|
|
||||||
if (DEFINED host_arch)
|
|
||||||
set(${host_arch_out} "${host_arch}" PARENT_SCOPE)
|
|
||||||
else()
|
|
||||||
set(${host_arch_out} "${arch}" PARENT_SCOPE)
|
|
||||||
endif()
|
|
||||||
if (DEFINED host_arch_path)
|
|
||||||
set(${host_arch_path_out} "${host_arch_path}" PARENT_SCOPE)
|
|
||||||
else()
|
|
||||||
set(${host_arch_path_out} "${arch_path}" PARENT_SCOPE)
|
|
||||||
endif()
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
# Download Qt binaries for a specific configuration.
|
|
||||||
function(download_qt_configuration prefix_out target host type arch arch_path base_path)
|
|
||||||
if (target MATCHES "tools_.*")
|
|
||||||
set(tool ON)
|
|
||||||
else()
|
|
||||||
set(tool OFF)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(install_args -c "${CURRENT_MODULE_DIR}/aqt_config.ini")
|
|
||||||
if (tool)
|
|
||||||
set(prefix "${base_path}/Tools")
|
|
||||||
list(APPEND install_args install-tool --outputdir "${base_path}" "${host}" desktop "${target}")
|
|
||||||
else()
|
|
||||||
set(prefix "${base_path}/${target}/${arch_path}")
|
|
||||||
list(APPEND install_args install-qt --outputdir "${base_path}" "${host}" "${type}" "${target}" "${arch}" -m qt_base)
|
|
||||||
|
|
||||||
if (YUZU_USE_QT_MULTIMEDIA)
|
|
||||||
list(APPEND install_args qtmultimedia)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (YUZU_USE_QT_WEB_ENGINE)
|
|
||||||
list(APPEND install_args qtpositioning qtwebchannel qtwebengine)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (NOT "${YUZU_QT_MIRROR}" STREQUAL "")
|
|
||||||
message(STATUS "Using Qt mirror ${YUZU_QT_MIRROR}")
|
|
||||||
list(APPEND install_args -b "${YUZU_QT_MIRROR}")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
message(STATUS "Install Args: ${install_args}")
|
|
||||||
|
|
||||||
if (NOT EXISTS "${prefix}")
|
|
||||||
message(STATUS "Downloading Qt binaries for ${target}:${host}:${type}:${arch}:${arch_path}")
|
|
||||||
set(AQT_PREBUILD_BASE_URL "https://github.com/miurahr/aqtinstall/releases/download/v3.3.0")
|
|
||||||
if (WIN32)
|
|
||||||
set(aqt_path "${base_path}/aqt.exe")
|
|
||||||
if (NOT EXISTS "${aqt_path}")
|
|
||||||
file(DOWNLOAD "${AQT_PREBUILD_BASE_URL}/aqt.exe" "${aqt_path}" SHOW_PROGRESS)
|
|
||||||
endif()
|
|
||||||
execute_process(COMMAND "${aqt_path}" ${install_args}
|
|
||||||
WORKING_DIRECTORY "${base_path}"
|
|
||||||
RESULT_VARIABLE aqt_res
|
|
||||||
OUTPUT_VARIABLE aqt_out
|
|
||||||
ERROR_VARIABLE aqt_err)
|
|
||||||
if (NOT aqt_res EQUAL 0)
|
|
||||||
message(FATAL_ERROR "aqt.exe failed: ${aqt_err}")
|
|
||||||
endif()
|
|
||||||
elseif (APPLE)
|
|
||||||
set(aqt_path "${base_path}/aqt-macos")
|
|
||||||
if (NOT EXISTS "${aqt_path}")
|
|
||||||
file(DOWNLOAD "${AQT_PREBUILD_BASE_URL}/aqt-macos" "${aqt_path}" SHOW_PROGRESS)
|
|
||||||
endif()
|
|
||||||
execute_process(COMMAND chmod +x "${aqt_path}")
|
|
||||||
execute_process(COMMAND "${aqt_path}" ${install_args}
|
|
||||||
WORKING_DIRECTORY "${base_path}"
|
|
||||||
RESULT_VARIABLE aqt_res
|
|
||||||
ERROR_VARIABLE aqt_err)
|
|
||||||
if (NOT aqt_res EQUAL 0)
|
|
||||||
message(FATAL_ERROR "aqt-macos failed: ${aqt_err}")
|
|
||||||
endif()
|
|
||||||
else()
|
|
||||||
find_program(PYTHON3_EXECUTABLE python3)
|
|
||||||
if (NOT PYTHON3_EXECUTABLE)
|
|
||||||
message(FATAL_ERROR "python3 is required to install Qt using aqt (pip mode).")
|
|
||||||
endif()
|
|
||||||
set(aqt_install_path "${base_path}/aqt")
|
|
||||||
file(MAKE_DIRECTORY "${aqt_install_path}")
|
|
||||||
|
|
||||||
execute_process(COMMAND "${PYTHON3_EXECUTABLE}" -m pip install --target="${aqt_install_path}" aqtinstall
|
|
||||||
WORKING_DIRECTORY "${base_path}"
|
|
||||||
RESULT_VARIABLE pip_res
|
|
||||||
ERROR_VARIABLE pip_err)
|
|
||||||
if (NOT pip_res EQUAL 0)
|
|
||||||
message(FATAL_ERROR "pip install aqtinstall failed: ${pip_err}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
execute_process(COMMAND "${CMAKE_COMMAND}" -E env PYTHONPATH="${aqt_install_path}" "${PYTHON3_EXECUTABLE}" -m aqt ${install_args}
|
|
||||||
WORKING_DIRECTORY "${base_path}"
|
|
||||||
RESULT_VARIABLE aqt_res
|
|
||||||
ERROR_VARIABLE aqt_err)
|
|
||||||
if (NOT aqt_res EQUAL 0)
|
|
||||||
message(FATAL_ERROR "aqt (python) failed: ${aqt_err}")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
message(STATUS "Downloaded Qt binaries for ${target}:${host}:${type}:${arch}:${arch_path} to ${prefix}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(${prefix_out} "${prefix}" PARENT_SCOPE)
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
# This function downloads Qt using aqt.
|
|
||||||
# The path of the downloaded content will be added to the CMAKE_PREFIX_PATH.
|
|
||||||
# QT_TARGET_PATH is set to the Qt for the compile target platform.
|
|
||||||
# QT_HOST_PATH is set to a host-compatible Qt, for running tools.
|
|
||||||
# Params:
|
|
||||||
# target: Qt dependency to install. Specify a version number to download Qt, or "tools_(name)" for a specific build tool.
|
|
||||||
function(download_qt target)
|
|
||||||
determine_qt_parameters("${target}" host type arch arch_path host_type host_arch host_arch_path)
|
|
||||||
|
|
||||||
set(base_path "${CMAKE_BINARY_DIR}/externals/qt")
|
|
||||||
file(MAKE_DIRECTORY "${base_path}")
|
|
||||||
|
|
||||||
download_qt_configuration(prefix "${target}" "${host}" "${type}" "${arch}" "${arch_path}" "${base_path}")
|
|
||||||
if (DEFINED host_arch_path AND NOT "${host_arch_path}" STREQUAL "${arch_path}")
|
|
||||||
download_qt_configuration(host_prefix "${target}" "${host}" "${host_type}" "${host_arch}" "${host_arch_path}" "${base_path}")
|
|
||||||
else()
|
|
||||||
set(host_prefix "${prefix}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(QT_TARGET_PATH "${prefix}" CACHE STRING "")
|
|
||||||
set(QT_HOST_PATH "${host_prefix}" CACHE STRING "")
|
|
||||||
|
|
||||||
list(APPEND CMAKE_PREFIX_PATH "${prefix}")
|
|
||||||
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE)
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
function(download_moltenvk version platform)
|
|
||||||
if(NOT version)
|
|
||||||
message(FATAL_ERROR "download_moltenvk: version argument is required")
|
|
||||||
endif()
|
|
||||||
if(NOT platform)
|
|
||||||
message(FATAL_ERROR "download_moltenvk: platform argument is required")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(MOLTENVK_DIR "${CMAKE_BINARY_DIR}/externals/MoltenVK")
|
|
||||||
set(MOLTENVK_TAR "${CMAKE_BINARY_DIR}/externals/MoltenVK.tar")
|
|
||||||
|
|
||||||
if(NOT EXISTS "${MOLTENVK_DIR}")
|
|
||||||
if(NOT EXISTS "${MOLTENVK_TAR}")
|
|
||||||
file(DOWNLOAD "https://github.com/KhronosGroup/MoltenVK/releases/download/${version}/MoltenVK-${platform}.tar"
|
|
||||||
"${MOLTENVK_TAR}" SHOW_PROGRESS)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
execute_process(
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E tar xf "${MOLTENVK_TAR}"
|
|
||||||
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/externals"
|
|
||||||
RESULT_VARIABLE tar_res
|
|
||||||
ERROR_VARIABLE tar_err
|
|
||||||
)
|
|
||||||
if(NOT tar_res EQUAL 0)
|
|
||||||
message(FATAL_ERROR "Extracting MoltenVK failed: ${tar_err}")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
list(APPEND CMAKE_PREFIX_PATH "${MOLTENVK_DIR}/MoltenVK/dylib/${platform}")
|
|
||||||
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE)
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
|
|
@ -14,8 +14,7 @@ else()
|
||||||
pkg_search_module(ZSTD QUIET IMPORTED_TARGET libzstd)
|
pkg_search_module(ZSTD QUIET IMPORTED_TARGET libzstd)
|
||||||
find_package_handle_standard_args(zstd
|
find_package_handle_standard_args(zstd
|
||||||
REQUIRED_VARS ZSTD_LINK_LIBRARIES
|
REQUIRED_VARS ZSTD_LINK_LIBRARIES
|
||||||
VERSION_VAR ZSTD_VERSION
|
VERSION_VAR ZSTD_VERSION)
|
||||||
)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (zstd_FOUND AND NOT TARGET zstd::zstd)
|
if (zstd_FOUND AND NOT TARGET zstd::zstd)
|
||||||
|
|
@ -36,4 +35,7 @@ if (NOT TARGET zstd::libzstd)
|
||||||
else()
|
else()
|
||||||
add_library(zstd::libzstd ALIAS zstd::zstd)
|
add_library(zstd::libzstd ALIAS zstd::zstd)
|
||||||
endif()
|
endif()
|
||||||
|
elseif(YUZU_STATIC_BUILD AND TARGET zstd::libzstd_static)
|
||||||
|
# zstd::libzstd links to shared zstd by default
|
||||||
|
set_target_properties(zstd::libzstd PROPERTIES INTERFACE_LINK_LIBRARIES zstd::libzstd_static)
|
||||||
endif()
|
endif()
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
# SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
# SPDX-FileCopyrightText: 2019 yuzu Emulator Project
|
# SPDX-FileCopyrightText: 2019 yuzu Emulator Project
|
||||||
|
|
@ -24,18 +24,34 @@ else()
|
||||||
set(IS_DEV_BUILD true)
|
set(IS_DEV_BUILD true)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if (NIGHTLY_BUILD)
|
||||||
|
set(IS_NIGHTLY_BUILD true)
|
||||||
|
else()
|
||||||
|
set(IS_NIGHTLY_BUILD false)
|
||||||
|
endif()
|
||||||
|
|
||||||
set(GIT_DESC ${BUILD_VERSION})
|
set(GIT_DESC ${BUILD_VERSION})
|
||||||
|
|
||||||
# Generate cpp with Git revision from template
|
# Generate cpp with Git revision from template
|
||||||
# Also if this is a CI build, add the build name (ie: Nightly, Canary) to the scm_rev file as well
|
# Also if this is a CI build, add the build name (ie: Nightly, Canary) to the scm_rev file as well
|
||||||
|
|
||||||
|
# Auto-updater metadata! Must somewhat mirror GitHub API endpoint
|
||||||
|
if (NIGHTLY_BUILD)
|
||||||
|
set(BUILD_AUTO_UPDATE_WEBSITE "https://github.com")
|
||||||
|
set(BUILD_AUTO_UPDATE_API "api.github.com")
|
||||||
|
set(BUILD_AUTO_UPDATE_API_PATH "/repos/")
|
||||||
|
set(BUILD_AUTO_UPDATE_REPO "Eden-CI/Nightly")
|
||||||
|
set(REPO_NAME "Eden Nightly")
|
||||||
|
else()
|
||||||
|
set(BUILD_AUTO_UPDATE_WEBSITE "https://git.eden-emu.dev")
|
||||||
|
set(BUILD_AUTO_UPDATE_API "git.eden-emu.dev")
|
||||||
|
set(BUILD_AUTO_UPDATE_API_PATH "/api/v1/repos/")
|
||||||
|
set(BUILD_AUTO_UPDATE_REPO "eden-emu/eden")
|
||||||
set(REPO_NAME "Eden")
|
set(REPO_NAME "Eden")
|
||||||
|
endif()
|
||||||
|
|
||||||
set(BUILD_ID ${GIT_REFSPEC})
|
set(BUILD_ID ${GIT_REFSPEC})
|
||||||
set(BUILD_FULLNAME "${REPO_NAME} ${BUILD_VERSION} ")
|
set(BUILD_FULLNAME "${REPO_NAME} ${BUILD_VERSION} ")
|
||||||
set(CXX_COMPILER "${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}")
|
set(CXX_COMPILER "${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}")
|
||||||
|
|
||||||
# Auto-updater metadata! Must somewhat mirror GitHub API endpoint
|
|
||||||
set(BUILD_AUTO_UPDATE_WEBSITE "https://github.com")
|
|
||||||
set(BUILD_AUTO_UPDATE_API "http://api.github.com")
|
|
||||||
set(BUILD_AUTO_UPDATE_REPO "eden-emulator/Releases")
|
|
||||||
|
|
||||||
configure_file(scm_rev.cpp.in scm_rev.cpp @ONLY)
|
configure_file(scm_rev.cpp.in scm_rev.cpp @ONLY)
|
||||||
|
|
|
||||||
|
|
@ -1,49 +0,0 @@
|
||||||
# SPDX-FileCopyrightText: 2025 crueter
|
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
include(GetGitRevisionDescription)
|
|
||||||
|
|
||||||
function(trim var)
|
|
||||||
string(REGEX REPLACE "\n" "" new "${${var}}")
|
|
||||||
set(${var} ${new} PARENT_SCOPE)
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
set(TAG_FILE ${CMAKE_SOURCE_DIR}/GIT-TAG)
|
|
||||||
set(REF_FILE ${CMAKE_SOURCE_DIR}/GIT-REFSPEC)
|
|
||||||
set(COMMIT_FILE ${CMAKE_SOURCE_DIR}/GIT-COMMIT)
|
|
||||||
set(RELEASE_FILE ${CMAKE_SOURCE_DIR}/GIT-RELEASE)
|
|
||||||
|
|
||||||
if (EXISTS ${REF_FILE} AND EXISTS ${COMMIT_FILE})
|
|
||||||
file(READ ${REF_FILE} GIT_REFSPEC)
|
|
||||||
file(READ ${COMMIT_FILE} GIT_COMMIT)
|
|
||||||
else()
|
|
||||||
get_git_head_revision(GIT_REFSPEC GIT_COMMIT)
|
|
||||||
git_branch_name(GIT_REFSPEC)
|
|
||||||
if (GIT_REFSPEC MATCHES "NOTFOUND")
|
|
||||||
set(GIT_REFSPEC 1.0.0)
|
|
||||||
set(GIT_COMMIT stable)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (EXISTS ${TAG_FILE})
|
|
||||||
file(READ ${TAG_FILE} GIT_TAG)
|
|
||||||
else()
|
|
||||||
git_describe(GIT_TAG --tags --abbrev=0)
|
|
||||||
if (GIT_TAG MATCHES "NOTFOUND")
|
|
||||||
set(GIT_TAG "${GIT_REFSPEC}")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (EXISTS ${RELEASE_FILE})
|
|
||||||
file(READ ${RELEASE_FILE} GIT_RELEASE)
|
|
||||||
trim(GIT_RELEASE)
|
|
||||||
message(STATUS "Git release: ${GIT_RELEASE}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
trim(GIT_REFSPEC)
|
|
||||||
trim(GIT_COMMIT)
|
|
||||||
trim(GIT_TAG)
|
|
||||||
|
|
||||||
message(STATUS "Git commit: ${GIT_COMMIT}")
|
|
||||||
message(STATUS "Git tag: ${GIT_TAG}")
|
|
||||||
message(STATUS "Git refspec: ${GIT_REFSPEC}")
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
||||||
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
## When linking to a static Qt build on MinGW, certain additional libraries
|
|
||||||
## must be statically linked to as well.
|
|
||||||
|
|
||||||
function(static_qt_link target)
|
|
||||||
macro(extra_libs)
|
|
||||||
foreach(lib ${ARGN})
|
|
||||||
find_library(${lib}_LIBRARY ${lib} REQUIRED)
|
|
||||||
target_link_libraries(${target} PRIVATE ${${lib}_LIBRARY})
|
|
||||||
endforeach()
|
|
||||||
endmacro()
|
|
||||||
|
|
||||||
# I am constantly impressed at how ridiculously stupid the linker is
|
|
||||||
# NB: yes, we have to put them here twice. I have no idea why
|
|
||||||
|
|
||||||
# libtiff.a
|
|
||||||
extra_libs(tiff jbig bz2 lzma deflate jpeg tiff)
|
|
||||||
|
|
||||||
# libfreetype.a
|
|
||||||
extra_libs(freetype bz2 Lerc brotlidec brotlicommon freetype)
|
|
||||||
|
|
||||||
# libharfbuzz.a
|
|
||||||
extra_libs(harfbuzz graphite2)
|
|
||||||
|
|
||||||
# sijfjkfnjkdfjsbjsbsdfhvbdf
|
|
||||||
if (ENABLE_OPENSSL)
|
|
||||||
target_link_libraries(${target} PRIVATE OpenSSL::SSL OpenSSL::Crypto)
|
|
||||||
endif()
|
|
||||||
endfunction()
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
<!--
|
# Contributing
|
||||||
SPDX-FileCopyrightText: 2018 yuzu Emulator Project
|
|
||||||
SPDX-License-Identifier: GPL-2.0-or-later
|
|
||||||
-->
|
|
||||||
|
|
||||||
**The Contributor's Guide has moved to [the yuzu wiki](https://github.com/yuzu-emu/yuzu/wiki/Contributing).**
|
You want to contribute? Please consult [the development guide](./docs/Development.md).
|
||||||
|
|
||||||
|
Don't forget to [get a git account](./docs/SIGNUP.md) - not a requirement per se but it's highly recommended.
|
||||||
|
|
|
||||||
20
README.md
|
|
@ -15,19 +15,19 @@
|
||||||
<br>
|
<br>
|
||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
<h4 align="center"><b>Eden</b> is an open-source Nintendo Switch emulator, forked from the Yuzu emulator — started by former Citron developer Camille LaVey and the Eden team.
|
<h4 align="center"><b>Eden</b> is a free and opensource (FOSS) Switch 1 emulator, derived from Yuzu and Sudachi - started by developer Camille LaVey.
|
||||||
It is written in C++ with portability in mind, and we actively maintain builds for Windows, Linux and Android.
|
It's written in C++ with portability in mind, with builds for Windows, Linux, macOS, Android, FreeBSD and more.
|
||||||
</h4>
|
</h4>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
</a>
|
</a>
|
||||||
<a href="https://discord.gg/kXAmGCXBGD">
|
<a href="https://discord.gg/HstXbPch7X">
|
||||||
<img src="https://img.shields.io/discord/1367654015269339267?color=5865F2&label=Eden&logo=discord&logoColor=white"
|
<img src="https://img.shields.io/discord/1367654015269339267?color=5865F2&label=Eden&logo=discord&logoColor=white"
|
||||||
alt="Discord">
|
alt="Discord">
|
||||||
</a>
|
</a>
|
||||||
<a href="https://rvlt.gg/qKgFEAbH">
|
<a href="https://stt.gg/qKgFEAbH">
|
||||||
<img src="https://img.shields.io/revolt/invite/qKgFEAbH?color=d61f3a&label=Revolt"
|
<img src="https://img.shields.io/revolt/invite/qKgFEAbH?color=d61f3a&label=Stoat"
|
||||||
alt="Revolt">
|
alt="Stoat">
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
@ -52,10 +52,10 @@ Check out our [website](https://eden-emu.dev) for the latest news on exciting fe
|
||||||
|
|
||||||
## Development
|
## Development
|
||||||
|
|
||||||
Most of the development happens on our Git server. It is also where [our central repository](https://git.eden-emu.dev/eden-emu/eden) is hosted. For development discussions, please join us on [Discord](https://discord.gg/kXAmGCXBGD) or [Revolt](https://rvlt.gg/qKgFEAbH).
|
Most of the development happens on our Git server. It is also where [our central repository](https://git.eden-emu.dev/eden-emu/eden) is hosted. For development discussions, please join us on [Discord](https://discord.gg/HstXbPch7X) or [Stoat](https://stt.gg/qKgFEAbH).
|
||||||
You can also follow us on [X (Twitter)](https://x.com/edenemuofficial) for updates and announcements.
|
You can also follow us on [X (Twitter)](https://nitter.poast.org/edenemuofficial) for updates and announcements.
|
||||||
|
|
||||||
If you would like to contribute, we are open to new developers and pull requests. Please ensure that your work is of a high standard and properly documented. You can also contact any of the developers on Discord or Revolt to learn more about the current state of the emulator.
|
If you would like to contribute, we are open to new developers and pull requests. Please ensure that your work is of a high standard and properly documented. You can also contact any of the developers on Discord or Stoat to learn more about the current state of the emulator.
|
||||||
|
|
||||||
See the [sign-up instructions](docs/SIGNUP.md) for information on registration.
|
See the [sign-up instructions](docs/SIGNUP.md) for information on registration.
|
||||||
|
|
||||||
|
|
@ -82,7 +82,7 @@ Any donations received will go towards things such as:
|
||||||
* Additional hardware (e.g. GPUs as needed to improve rendering support, other peripherals to add support for, etc.)
|
* Additional hardware (e.g. GPUs as needed to improve rendering support, other peripherals to add support for, etc.)
|
||||||
* CI Infrastructure
|
* CI Infrastructure
|
||||||
|
|
||||||
If you would prefer to support us in a different way, please join our [Discord](https://discord.gg/edenemu) and talk to Camille or any of our other developers.
|
If you would prefer to support us in a different way, please join our [Discord](https://discord.gg/HstXbPch7X) and talk to Camille or any of our other developers.
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|
|
||||||
49
cpmfile.json
|
|
@ -4,7 +4,7 @@
|
||||||
"package": "OpenSSL",
|
"package": "OpenSSL",
|
||||||
"name": "openssl",
|
"name": "openssl",
|
||||||
"repo": "crueter-ci/OpenSSL",
|
"repo": "crueter-ci/OpenSSL",
|
||||||
"version": "3.6.0-e3608d80df",
|
"version": "3.6.0-1cb0d36b39",
|
||||||
"min_version": "1.1.1"
|
"min_version": "1.1.1"
|
||||||
},
|
},
|
||||||
"boost": {
|
"boost": {
|
||||||
|
|
@ -12,22 +12,20 @@
|
||||||
"repo": "boostorg/boost",
|
"repo": "boostorg/boost",
|
||||||
"tag": "boost-%VERSION%",
|
"tag": "boost-%VERSION%",
|
||||||
"artifact": "%TAG%-cmake.tar.xz",
|
"artifact": "%TAG%-cmake.tar.xz",
|
||||||
"hash": "4fb7f6fde92762305aad8754d7643cd918dd1f3f67e104e9ab385b18c73178d72a17321354eb203b790b6702f2cf6d725a5d6e2dfbc63b1e35f9eb59fb42ece9",
|
"hash": "6ae6e94664fe7f2fb01976b59b276ac5df8085c7503fa829d810fbfe495960cfec44fa2c36e2cb23480bc19c956ed199d4952b02639a00a6c07625d4e7130c2d",
|
||||||
"git_version": "1.89.0",
|
"git_version": "1.90.0",
|
||||||
"version": "1.57",
|
"version": "1.57",
|
||||||
"find_args": "CONFIG OPTIONAL_COMPONENTS headers context system fiber filesystem",
|
"find_args": "CONFIG OPTIONAL_COMPONENTS headers context system fiber filesystem",
|
||||||
"patches": [
|
"patches": [
|
||||||
"0001-clang-cl.patch",
|
"0001-clang-cl.patch"
|
||||||
"0002-use-marmasm.patch",
|
|
||||||
"0003-armasm-options.patch"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"fmt": {
|
"fmt": {
|
||||||
"repo": "fmtlib/fmt",
|
"repo": "fmtlib/fmt",
|
||||||
"tag": "%VERSION%",
|
"tag": "%VERSION%",
|
||||||
"hash": "c4ab814c20fbad7e3f0ae169125a4988a2795631194703251481dc36b18da65c886c4faa9acd046b0a295005217b3689eb0126108a9ba5aac2ca909aae263c2f",
|
"hash": "f0da82c545b01692e9fd30fdfb613dbb8dd9716983dcd0ff19ac2a8d36f74beb5540ef38072fdecc1e34191b3682a8542ecbf3a61ef287dbba0a2679d4e023f2",
|
||||||
"version": "8",
|
"version": "8",
|
||||||
"git_version": "12.0.0"
|
"git_version": "12.1.0"
|
||||||
},
|
},
|
||||||
"lz4": {
|
"lz4": {
|
||||||
"name": "lz4",
|
"name": "lz4",
|
||||||
|
|
@ -48,9 +46,9 @@
|
||||||
"package": "ZLIB",
|
"package": "ZLIB",
|
||||||
"repo": "madler/zlib",
|
"repo": "madler/zlib",
|
||||||
"tag": "v%VERSION%",
|
"tag": "v%VERSION%",
|
||||||
"hash": "8c9642495bafd6fad4ab9fb67f09b268c69ff9af0f4f20cf15dfc18852ff1f312bd8ca41de761b3f8d8e90e77d79f2ccacd3d4c5b19e475ecf09d021fdfe9088",
|
"hash": "06eaa3a1eaaeb31f461a2283b03a91ed8eb2406e62cd97ea1c69836324909edeecd93edd03ff0bf593d9dde223e3376149134c5b1fe2e8688c258cadf8cd60ff",
|
||||||
"version": "1.2",
|
"version": "1.2",
|
||||||
"git_version": "1.3.1",
|
"git_version": "1.3.1.2",
|
||||||
"options": [
|
"options": [
|
||||||
"ZLIB_BUILD_SHARED OFF",
|
"ZLIB_BUILD_SHARED OFF",
|
||||||
"ZLIB_INSTALL OFF"
|
"ZLIB_INSTALL OFF"
|
||||||
|
|
@ -69,13 +67,17 @@
|
||||||
},
|
},
|
||||||
"opus": {
|
"opus": {
|
||||||
"package": "Opus",
|
"package": "Opus",
|
||||||
"repo": "crueter/opus",
|
"repo": "xiph/opus",
|
||||||
"sha": "ab19c44fad",
|
"sha": "a3f0ec02b3",
|
||||||
"hash": "d632e8f83c5d3245db404bcb637113f9860bf16331498ba2c8e77979d1febee6b52d8b1da448e7d54eeac373e912cd55e3e300fc6c242244923323280dc43fbe",
|
"hash": "9506147b0de35befda8633ff272981cc2575c860874791bd455b752f797fd7dbd1079f0ba42ccdd7bb1fe6773fa5e84b3d75667c2883dd1fb2d0e4a5fa4f8387",
|
||||||
"version": "1.3",
|
"version": "1.3",
|
||||||
"find_args": "MODULE",
|
"find_args": "MODULE",
|
||||||
"options": [
|
"options": [
|
||||||
"OPUS_PRESUME_NEON ON"
|
"OPUS_PRESUME_NEON ON"
|
||||||
|
],
|
||||||
|
"patches": [
|
||||||
|
"0001-disable-clang-runtime-neon.patch",
|
||||||
|
"0002-no-install.patch"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"boost_headers": {
|
"boost_headers": {
|
||||||
|
|
@ -91,5 +93,26 @@
|
||||||
"version": "20250828",
|
"version": "20250828",
|
||||||
"artifact": "clang-rt-builtins.tar.zst",
|
"artifact": "clang-rt-builtins.tar.zst",
|
||||||
"hash": "d902392caf94e84f223766e2cc51ca5fab6cae36ab8dc6ef9ef6a683ab1c483bfcfe291ef0bd38ab16a4ecc4078344fa8af72da2f225ab4c378dee23f6186181"
|
"hash": "d902392caf94e84f223766e2cc51ca5fab6cae36ab8dc6ef9ef6a683ab1c483bfcfe291ef0bd38ab16a4ecc4078344fa8af72da2f225ab4c378dee23f6186181"
|
||||||
|
},
|
||||||
|
"vulkan-validation-layers": {
|
||||||
|
"package": "VVL",
|
||||||
|
"repo": "KhronosGroup/Vulkan-ValidationLayers",
|
||||||
|
"tag": "vulkan-sdk-%VERSION%",
|
||||||
|
"git_version": "1.4.335.0",
|
||||||
|
"artifact": "android-binaries-%VERSION%.zip",
|
||||||
|
"hash": "48167c4a17736301bd08f9290f41830443e1f18cce8ad867fc6f289b49e18b40e93c9850b377951af82f51b5b6d7313aa6a884fc5df79f5ce3df82696c1c1244"
|
||||||
|
},
|
||||||
|
"quazip": {
|
||||||
|
"package": "QuaZip-Qt6",
|
||||||
|
"repo": "stachenov/quazip",
|
||||||
|
"sha": "2e95c9001b",
|
||||||
|
"hash": "609c240c7f029ac26a37d8fbab51bc16284e05e128b78b9b9c0e95d083538c36047a67d682759ac990e4adb0eeb90f04f1ea7fe2253bbda7e7e3bcce32e53dd8",
|
||||||
|
"version": "1.3",
|
||||||
|
"git_version": "1.5",
|
||||||
|
"options": [
|
||||||
|
"QUAZIP_QT_MAJOR_VERSION 6",
|
||||||
|
"QUAZIP_INSTALL OFF",
|
||||||
|
"QUAZIP_ENABLE_QTEXTCODEC OFF"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ Version=1.0
|
||||||
Type=Application
|
Type=Application
|
||||||
Name=Eden
|
Name=Eden
|
||||||
GenericName=Switch Emulator
|
GenericName=Switch Emulator
|
||||||
Comment=Nintendo Switch video game console emulator
|
Comment=Multiplatform FOSS Switch 1 emulator written in C++, derived from Yuzu and Sudachi
|
||||||
Icon=dev.eden_emu.eden
|
Icon=dev.eden_emu.eden
|
||||||
TryExec=eden
|
TryExec=eden
|
||||||
Exec=eden %f
|
Exec=eden %f
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,22 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
SPDX-FileCopyrightText: 2025 Eden Emulator Project
|
||||||
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
-->
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
SPDX-FileCopyrightText: 2021 yuzu Emulator Project
|
SPDX-FileCopyrightText: 2021 yuzu Emulator Project
|
||||||
SPDX-License-Identifier: CC0-1.0
|
SPDX-License-Identifier: CC0-1.0
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<component type="desktop-application">
|
<component type="desktop-application">
|
||||||
<id>org.yuzu_emu.yuzu</id>
|
<id>org.eden_emu.eden</id>
|
||||||
<metadata_license>CC0-1.0</metadata_license>
|
<metadata_license>CC0-1.0</metadata_license>
|
||||||
<name>yuzu</name>
|
<name>eden</name>
|
||||||
<summary>Nintendo Switch emulator</summary>
|
<summary>Nintendo Switch emulator</summary>
|
||||||
<description>
|
<description>
|
||||||
<p>yuzu is the world's most popular, open-source, Nintendo Switch emulator — started by the creators of Citra.</p>
|
<p>Multiplatform FOSS Switch 1 emulator written in C++, derived from Yuzu and Sudachi</p>
|
||||||
<p>The emulator is capable of running most commercial games at full speed, provided you meet the necessary hardware requirements.</p>
|
|
||||||
<p>For a full list of games yuzu support, please visit our Compatibility page.</p>
|
|
||||||
<p>Check out our website for the latest news on exciting features, monthly progress reports, and more!</p>
|
|
||||||
</description>
|
</description>
|
||||||
<categories>
|
<categories>
|
||||||
<category>Game</category>
|
<category>Game</category>
|
||||||
|
|
@ -24,16 +26,16 @@ SPDX-License-Identifier: CC0-1.0
|
||||||
<keyword>switch</keyword>
|
<keyword>switch</keyword>
|
||||||
<keyword>emulator</keyword>
|
<keyword>emulator</keyword>
|
||||||
</keywords>
|
</keywords>
|
||||||
<url type="homepage">https://yuzu-emu.org/</url>
|
<url type="homepage">https://eden-emu.dev/</url>
|
||||||
<url type="bugtracker">https://github.com/yuzu-emu/yuzu/issues</url>
|
<url type="bugtracker">https://git.eden-emu.dev/eden-emu/eden/issues</url>
|
||||||
<url type="faq">https://yuzu-emu.org/wiki/faq/</url>
|
<url type="faq">https://eden-emu.dev/docs</url>
|
||||||
<url type="help">https://yuzu-emu.org/wiki/home/</url>
|
<url type="help">https://eden-emu.dev/docs</url>
|
||||||
<url type="donation">https://yuzu-emu.org/donate/</url>
|
<url type="donation">https://eden-emu.dev/donations</url>
|
||||||
<url type="translate">https://www.transifex.com/projects/p/yuzu</url>
|
<url type="translate">https://explore.transifex.com/edenemu/eden-emulator</url>
|
||||||
<url type="contact">https://community.citra-emu.org/</url>
|
<url type="contact">https://discord.gg/edenemu</url>
|
||||||
<url type="vcs-browser">https://github.com/yuzu-emu/yuzu</url>
|
<url type="vcs-browser">https://git.eden-emu.dev</url>
|
||||||
<url type="contribute">https://yuzu-emu.org/wiki/contributing/</url>
|
<url type="contribute">https://git.eden-emu.dev/eden-emu/eden</url>
|
||||||
<launchable type="desktop-id">org.yuzu_emu.yuzu.desktop</launchable>
|
<launchable type="desktop-id">org.eden_emu.eden.desktop</launchable>
|
||||||
<provides>
|
<provides>
|
||||||
<binary>yuzu</binary>
|
<binary>yuzu</binary>
|
||||||
<binary>yuzu-cmd</binary>
|
<binary>yuzu-cmd</binary>
|
||||||
|
|
@ -50,13 +52,6 @@ SPDX-License-Identifier: CC0-1.0
|
||||||
<memory>16384</memory>
|
<memory>16384</memory>
|
||||||
</recommends>
|
</recommends>
|
||||||
<project_license>GPL-3.0-or-later</project_license>
|
<project_license>GPL-3.0-or-later</project_license>
|
||||||
<developer_name>yuzu Emulator Team</developer_name>
|
<developer_name>Eden Emulator Team</developer_name>
|
||||||
<content_rating type="oars-1.0"/>
|
<content_rating type="oars-1.0"/>
|
||||||
<screenshots>
|
|
||||||
<screenshot type="default"><image>https://raw.githubusercontent.com/yuzu-emu/yuzu-emu.github.io/master/images/screenshots/001-Super%20Mario%20Odyssey%20.png</image></screenshot>
|
|
||||||
<screenshot><image>https://raw.githubusercontent.com/yuzu-emu/yuzu-emu.github.io/master/images/screenshots/004-The%20Legend%20of%20Zelda%20Skyward%20Sword%20HD.png</image></screenshot>
|
|
||||||
<screenshot><image>https://raw.githubusercontent.com/yuzu-emu/yuzu-emu.github.io/master/images/screenshots/007-Pokemon%20Sword.png</image></screenshot>
|
|
||||||
<screenshot><image>https://raw.githubusercontent.com/yuzu-emu/yuzu-emu.github.io/master/images/screenshots/010-Hyrule%20Warriors%20Age%20of%20Calamity.png</image></screenshot>
|
|
||||||
<screenshot><image>https://raw.githubusercontent.com/yuzu-emu/yuzu-emu.github.io/master/images/screenshots/039-Pok%C3%A9mon%20Mystery%20Dungeon%20Rescue%20Team%20DX.png.png.png</image></screenshot>
|
|
||||||
</screenshots>
|
|
||||||
</component>
|
</component>
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 9.2 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 256 KiB After Width: | Height: | Size: 256 KiB |
|
Before Width: | Height: | Size: 386 KiB After Width: | Height: | Size: 332 KiB |
|
After Width: | Height: | Size: 5.0 KiB |
|
|
@ -0,0 +1,144 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
width="512"
|
||||||
|
height="512"
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 512 512"
|
||||||
|
version="1.1"
|
||||||
|
id="svg7"
|
||||||
|
sodipodi:docname="base.svg"
|
||||||
|
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<defs
|
||||||
|
id="defs7">
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient24"
|
||||||
|
inkscape:collect="always">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#f71baa;stop-opacity:0.56623769;"
|
||||||
|
offset="0"
|
||||||
|
id="stop24" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#fa87d4;stop-opacity:0.25;"
|
||||||
|
offset="1"
|
||||||
|
id="stop25" />
|
||||||
|
</linearGradient>
|
||||||
|
<rect
|
||||||
|
x="22.627417"
|
||||||
|
y="402.76802"
|
||||||
|
width="521.34025"
|
||||||
|
height="248.94868"
|
||||||
|
id="rect24" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient1"
|
||||||
|
inkscape:collect="always">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#fe00b1;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop1" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#fe00b1;stop-opacity:0;"
|
||||||
|
offset="1"
|
||||||
|
id="stop2" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient11"
|
||||||
|
inkscape:collect="always">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#ff0950;stop-opacity:0.5;"
|
||||||
|
offset="0"
|
||||||
|
id="stop11" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#bf42f6;stop-opacity:0.75;"
|
||||||
|
offset="0.49556771"
|
||||||
|
id="stop20" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#5da5ed;stop-opacity:1;"
|
||||||
|
offset="1"
|
||||||
|
id="stop12" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient11"
|
||||||
|
id="linearGradient12"
|
||||||
|
x1="270.39996"
|
||||||
|
y1="39.999989"
|
||||||
|
x2="270.39996"
|
||||||
|
y2="494.39996"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
spreadMethod="reflect"
|
||||||
|
gradientTransform="matrix(1.075046,0,0,1.075046,-33.928383,-34.198735)" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient1"
|
||||||
|
id="linearGradient2"
|
||||||
|
x1="125.40197"
|
||||||
|
y1="271.834"
|
||||||
|
x2="431.02424"
|
||||||
|
y2="271.834"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(1.075046,0,0,1.075046,-33.928383,-34.198735)" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient24"
|
||||||
|
id="linearGradient25"
|
||||||
|
x1="270.39996"
|
||||||
|
y1="33.58408"
|
||||||
|
x2="270.39996"
|
||||||
|
y2="500.81589"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(1.075046,0,0,1.075046,-33.928383,-34.198735)" />
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview7"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#000000"
|
||||||
|
borderopacity="0.25"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:zoom="0.88388348"
|
||||||
|
inkscape:cx="141.98704"
|
||||||
|
inkscape:cy="265.87215"
|
||||||
|
inkscape:window-width="1600"
|
||||||
|
inkscape:window-height="849"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg7" />
|
||||||
|
<circle
|
||||||
|
style="fill:url(#linearGradient12);fill-opacity:1;stroke:url(#linearGradient25);stroke-width:13.7948;stroke-opacity:0.566238;paint-order:stroke fill markers"
|
||||||
|
id="path8"
|
||||||
|
cx="256.76401"
|
||||||
|
cy="253.05354"
|
||||||
|
r="244.25046" />
|
||||||
|
<path
|
||||||
|
id="rect1-3"
|
||||||
|
style="fill:#ffffff;fill-opacity:0.5;stroke:none;stroke-width:17.2007;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||||
|
d="M 55.701477,114.37179 A 244.25044,244.25044 0 0 0 44.86493,131.57252 h 423.79699 a 244.25044,244.25044 0 0 0 -10.83655,-17.20073 z" />
|
||||||
|
<path
|
||||||
|
style="fill:#ff2bd5;fill-opacity:1;stroke-width:14.3776;stroke-opacity:0.415999;paint-order:stroke fill markers"
|
||||||
|
d="M 219.6651,499.13816 209.32675,443.18948"
|
||||||
|
id="path9" />
|
||||||
|
<path
|
||||||
|
id="rect1-2"
|
||||||
|
style="fill:#ffffff;fill-opacity:0.5;stroke:none;stroke-width:17.2007;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||||
|
d="m 58.271509,395.38922 a 244.25044,244.25044 0 0 0 13.54096,17.20073 H 441.71437 a 244.25044,244.25044 0 0 0 13.54097,-17.20073 z" />
|
||||||
|
<path
|
||||||
|
id="rect1-2-5"
|
||||||
|
style="fill:#ffffff;fill-opacity:0.5;stroke:none;stroke-width:17.2007;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||||
|
d="m 24.604933,328.95264 a 244.25044,244.25044 0 0 0 6.347389,17.20074 H 482.57453 a 244.25044,244.25044 0 0 0 6.34738,-17.20074 z" />
|
||||||
|
<path
|
||||||
|
id="rect1"
|
||||||
|
style="fill:#ffffff;fill-opacity:0.5;stroke:none;stroke-width:17.2007;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||||
|
d="m 12.586253,259.07464 a 244.25044,244.25044 0 0 0 1.033053,17.20075 H 499.90754 a 244.25044,244.25044 0 0 0 1.03305,-17.20075 z" />
|
||||||
|
<path
|
||||||
|
id="path15"
|
||||||
|
style="fill:url(#linearGradient2);fill-opacity:1;stroke:#ffffff;stroke-width:17.2007;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers"
|
||||||
|
d="m 306.21658,12.242412 c 0,0 -11.75029,42.031067 -17.70256,63.362621 -12.7133,9.964494 -21.07468,19.289937 -21.07468,19.289937 0,0 -22.95662,-32.534232 -44.84956,-46.065299 C 200.69681,35.298604 171.19123,37.04196 171.19123,37.04196 c 0,0 -12.25678,4.2e-4 -27.09242,5.805668 -14.83563,5.805249 -20.85631,9.675414 -20.85631,9.675414 0,0 15.05232,-0.430438 37.19828,7.094883 22.14594,7.525322 31.82093,12.041775 31.82093,12.041775 l 30.42255,-6.880714 -8.27702,11.611336 c 0,0 14.51396,9.3529 22.36179,17.738259 7.84785,8.385359 11.50216,13.114729 11.50216,13.114729 0,0 -13.65224,-5.69691 -55.57904,-1.82674 -41.92679,3.87016 -83.20898,59.12752 -83.20898,59.12752 0,0 40.42048,-16.77155 64.28649,-22.36179 23.86602,-5.59024 46.65742,-8.3862 46.65742,-8.3862 0,0 -18.05952,7.74075 -37.41035,40.20714 -19.35082,32.46639 -13.76142,84.06986 -13.76142,84.06986 0,0 30.74631,-61.92266 60.20258,-82.77854 29.45625,-20.8559 35.47652,-21.50092 35.47652,-21.50092 0,0 -23.6506,50.74216 -32.896,132.23065 -9.24539,81.48849 29.67085,217.8039 29.67085,217.8039 l 46.87159,-7.31116 c 0,0 -44.72107,-44.29147 -48.59124,-158.67636 -3.87017,-114.3849 16.33986,-182.75782 16.33986,-182.75782 0,0 16.77156,1.29005 41.71263,34.40147 24.94106,33.11142 39.56043,60.20258 39.56043,60.20258 0,0 9.46208,-53.75314 -11.1788,-78.26419 -20.64088,-24.51105 -52.46309,-35.26025 -52.46309,-35.26025 0,0 13.4385,-6.98738 41.28219,-4.94479 27.84369,2.04258 85.60053,28.44463 85.60053,28.44462 0,0 -15.50743,-26.7591 -51.84367,-45.30731 -36.33623,-18.548198 -79.76967,0.30655 -79.76967,0.30655 0,0 4.05525,-16.118294 28.53281,-34.210394 24.47756,-18.092095 55.79742,-36.030833 55.79742,-36.030833 0,0 -25.84554,1.216607 -54.12395,12.619193 -7.03608,2.837127 -13.78978,6.605056 -19.96604,10.666471 l 17.06635,-53.527632 z" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 9.2 KiB After Width: | Height: | Size: 13 KiB |
|
|
@ -0,0 +1 @@
|
||||||
|
#1F143C
|
||||||
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 42 KiB |
|
|
@ -0,0 +1,672 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
width="512"
|
||||||
|
height="512"
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 512 512"
|
||||||
|
version="1.1"
|
||||||
|
id="svg7"
|
||||||
|
sodipodi:docname="newyear2025.svg"
|
||||||
|
inkscape:version="1.4.2 (f4327f4, 2025-05-13)"
|
||||||
|
xml:space="preserve"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<metadata>
|
||||||
|
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#">
|
||||||
|
<cc:Work rdf:about="">
|
||||||
|
<dc:title>New Year 2025 Logo</dc:title>
|
||||||
|
<dc:creator>
|
||||||
|
<cc:Agent>
|
||||||
|
<dc:title>Madeline_Dev</dc:title>
|
||||||
|
<dc:identifier>mailto:madelvidel@gmail.com</dc:identifier>
|
||||||
|
</cc:Agent>
|
||||||
|
</dc:creator>
|
||||||
|
<dc:date>2025</dc:date>
|
||||||
|
<dc:license rdf:resource="https://www.gnu.org/licenses/gpl-3.0.html"/>
|
||||||
|
<dc:rights>2025 Eden Emulator Project</dc:rights>
|
||||||
|
<dc:source>https://git.eden-emu.dev</dc:source>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs7"><linearGradient
|
||||||
|
id="swatch14"
|
||||||
|
inkscape:swatch="solid"><stop
|
||||||
|
style="stop-color:#66003b;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop14" /></linearGradient><linearGradient
|
||||||
|
id="linearGradient1"
|
||||||
|
inkscape:collect="always"><stop
|
||||||
|
style="stop-color:#670047;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop1" /><stop
|
||||||
|
style="stop-color:#54003b;stop-opacity:0;"
|
||||||
|
offset="1"
|
||||||
|
id="stop2" /></linearGradient><linearGradient
|
||||||
|
id="linearGradient11"
|
||||||
|
inkscape:collect="always"><stop
|
||||||
|
style="stop-color:#60001d;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop11" /><stop
|
||||||
|
style="stop-color:#2f087e;stop-opacity:1;"
|
||||||
|
offset="0.49822688"
|
||||||
|
id="stop20" /><stop
|
||||||
|
style="stop-color:#0d3969;stop-opacity:1;"
|
||||||
|
offset="0.99898213"
|
||||||
|
id="stop12" /></linearGradient><linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient11"
|
||||||
|
id="linearGradient12"
|
||||||
|
x1="109.74531"
|
||||||
|
y1="106.54533"
|
||||||
|
x2="431.05463"
|
||||||
|
y2="427.85461"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
spreadMethod="reflect"
|
||||||
|
gradientTransform="translate(-14.100045,-9.900077)" /><linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient1"
|
||||||
|
id="linearGradient2"
|
||||||
|
x1="125.40197"
|
||||||
|
y1="271.834"
|
||||||
|
x2="431.02424"
|
||||||
|
y2="271.834"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(1.0017288,0,0,0.93676627,-14.581021,3.8948884)" /><filter
|
||||||
|
inkscape:label="Light Contour"
|
||||||
|
inkscape:menu="Image Paint and Draw"
|
||||||
|
inkscape:menu-tooltip="Uses vertical specular light to draw lines"
|
||||||
|
style="color-interpolation-filters:sRGB"
|
||||||
|
id="filter11"
|
||||||
|
x="-0.01907517"
|
||||||
|
y="-0.054959154"
|
||||||
|
width="1.0379885"
|
||||||
|
height="1.1092314"><feGaussianBlur
|
||||||
|
in="SourceGraphic"
|
||||||
|
stdDeviation="0.38250006"
|
||||||
|
result="result3"
|
||||||
|
id="feGaussianBlur9" /><feComponentTransfer
|
||||||
|
result="result1"
|
||||||
|
in="result3"
|
||||||
|
id="feComponentTransfer9"><feFuncR
|
||||||
|
type="discrete"
|
||||||
|
tableValues="0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1"
|
||||||
|
id="feFuncR9" /><feFuncG
|
||||||
|
type="discrete"
|
||||||
|
tableValues="0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1"
|
||||||
|
id="feFuncG9" /><feFuncB
|
||||||
|
type="discrete"
|
||||||
|
tableValues="0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1"
|
||||||
|
id="feFuncB9" /></feComponentTransfer><feGaussianBlur
|
||||||
|
result="result5"
|
||||||
|
stdDeviation="0.01"
|
||||||
|
id="feGaussianBlur10" /><feBlend
|
||||||
|
in2="result5"
|
||||||
|
result="result6"
|
||||||
|
mode="lighten"
|
||||||
|
in="result5"
|
||||||
|
id="feBlend10" /><feColorMatrix
|
||||||
|
in="result6"
|
||||||
|
type="luminanceToAlpha"
|
||||||
|
result="result2"
|
||||||
|
id="feColorMatrix10" /><feSpecularLighting
|
||||||
|
surfaceScale="5"
|
||||||
|
result="result9"
|
||||||
|
specularExponent="20"
|
||||||
|
in="result2"
|
||||||
|
specularConstant="1"
|
||||||
|
id="feSpecularLighting10"><feDistantLight
|
||||||
|
azimuth="180"
|
||||||
|
elevation="90"
|
||||||
|
id="feDistantLight10" /></feSpecularLighting><feComposite
|
||||||
|
in2="result6"
|
||||||
|
operator="arithmetic"
|
||||||
|
in="result9"
|
||||||
|
k1="0.4"
|
||||||
|
k3="0.7"
|
||||||
|
result="result3"
|
||||||
|
id="feComposite10"
|
||||||
|
k2="0"
|
||||||
|
k4="0" /><feBlend
|
||||||
|
in2="result1"
|
||||||
|
in="result3"
|
||||||
|
mode="normal"
|
||||||
|
result="result8"
|
||||||
|
id="feBlend11" /><feComposite
|
||||||
|
in2="SourceGraphic"
|
||||||
|
in="result8"
|
||||||
|
operator="in"
|
||||||
|
result="result7"
|
||||||
|
id="feComposite11" /></filter></defs><sodipodi:namedview
|
||||||
|
id="namedview7"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#000000"
|
||||||
|
borderopacity="0.25"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:zoom="1.2"
|
||||||
|
inkscape:cx="255.83333"
|
||||||
|
inkscape:cy="263.75"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1001"
|
||||||
|
inkscape:window-x="-9"
|
||||||
|
inkscape:window-y="-9"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg7"
|
||||||
|
showguides="false" /><circle
|
||||||
|
style="fill:url(#linearGradient12);fill-opacity:1;stroke:#ffef91;stroke-width:12.8318;stroke-opacity:1;paint-order:stroke fill markers"
|
||||||
|
id="path8"
|
||||||
|
cx="256.2999"
|
||||||
|
cy="257.2999"
|
||||||
|
r="227.2" /><path
|
||||||
|
id="path15"
|
||||||
|
style="fill:url(#linearGradient2);fill-opacity:1;stroke:#ffef91;stroke-width:15.499;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers"
|
||||||
|
d="m 302.36635,44.362459 c 0,0 -10.94894,36.624745 -16.49527,55.212494 -11.84627,8.682797 -19.6374,16.808737 -19.6374,16.808737 0,0 -21.391,-28.349465 -41.79087,-40.140074 C 204.04292,64.453007 176.5496,65.97212 176.5496,65.97212 c 0,0 -11.42088,3.65e-4 -25.24473,5.058903 -13.82386,5.058538 -19.43394,8.430897 -19.43394,8.430897 0,0 14.02577,-0.375072 34.66138,6.182291 20.63562,6.557362 29.65079,10.492882 29.65079,10.492882 l 28.34775,-5.99567 -7.71253,10.117817 c 0,0 13.52412,8.14986 20.83674,15.45664 7.31262,7.30677 10.71771,11.42782 10.71771,11.42782 0,0 -12.72117,-4.96414 -51.78859,-1.59178 -39.06742,3.37236 -77.5342,51.52215 -77.5342,51.52215 0,0 37.66383,-14.61428 59.90221,-19.48547 22.23838,-4.87118 43.47542,-7.30751 43.47542,-7.30751 0,0 -16.82788,6.74508 -34.85899,35.03543 -18.03112,28.29034 -12.82292,73.25622 -12.82292,73.25622 0,0 28.64945,-53.95774 56.09682,-72.131 27.44737,-18.17328 33.05705,-18.73533 33.05705,-18.73533 0,0 -22.03764,44.21537 -30.65251,115.22225 -8.61486,71.00688 27.64733,189.78848 27.64733,189.78848 l 43.67498,-6.37074 c 0,0 -41.67114,-38.5944 -45.27736,-138.26634 -3.60623,-99.67193 15.22549,-159.25026 15.22549,-159.25026 0,0 15.62776,1.12412 38.86787,29.97652 23.2401,28.85239 36.86244,52.4589 36.86244,52.4589 0,0 8.81678,-46.83904 -10.41641,-68.19731 -19.2332,-21.35826 -48.88515,-30.72483 -48.88515,-30.72483 0,0 12.522,-6.08862 38.46678,-4.30877 25.94477,1.77987 79.76265,24.7859 79.76265,24.78589 0,0 -14.44983,-23.31717 -48.30798,-39.47958 -33.85813,-16.16241 -74.32945,0.26713 -74.32945,0.26713 0,0 3.77869,-14.04506 26.5869,-29.81003 22.80821,-15.764974 51.99208,-31.396311 51.99208,-31.396311 0,0 -24.0829,1.06012 -50.43274,10.996027 -6.55623,2.472198 -12.84933,5.755465 -18.60438,9.294477 L 311.98256,46.04937 Z" /><ellipse
|
||||||
|
style="fill:#ffffff;paint-order:markers stroke fill"
|
||||||
|
id="path6"
|
||||||
|
cx="95.957726"
|
||||||
|
cy="394.82724"
|
||||||
|
rx="1.7"
|
||||||
|
ry="1.6"
|
||||||
|
inkscape:label="Ne" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse6"
|
||||||
|
cx="99.829285"
|
||||||
|
cy="376.65375"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#ffffff;paint-order:markers stroke fill"
|
||||||
|
id="ellipse7"
|
||||||
|
cx="148.00078"
|
||||||
|
cy="402.74686"
|
||||||
|
rx="1.7"
|
||||||
|
ry="1.6"
|
||||||
|
inkscape:label="Ne" /><ellipse
|
||||||
|
style="fill:#ffffff;paint-order:markers stroke fill"
|
||||||
|
id="ellipse8"
|
||||||
|
cx="120.2822"
|
||||||
|
cy="380.68512"
|
||||||
|
rx="1.7"
|
||||||
|
ry="1.6"
|
||||||
|
inkscape:label="Ne" /><ellipse
|
||||||
|
style="fill:#ffffff;paint-order:markers stroke fill"
|
||||||
|
id="ellipse9"
|
||||||
|
cx="124.24197"
|
||||||
|
cy="422.54584"
|
||||||
|
rx="1.7"
|
||||||
|
ry="1.6"
|
||||||
|
inkscape:label="Ne" /><ellipse
|
||||||
|
style="fill:#ffffff;paint-order:markers stroke fill"
|
||||||
|
id="ellipse10"
|
||||||
|
cx="191.27571"
|
||||||
|
cy="438.38504"
|
||||||
|
rx="1.7"
|
||||||
|
ry="1.6"
|
||||||
|
inkscape:label="Ne" /><ellipse
|
||||||
|
style="fill:#ffffff;paint-order:markers stroke fill"
|
||||||
|
id="ellipse11"
|
||||||
|
cx="156.48605"
|
||||||
|
cy="444.0419"
|
||||||
|
rx="1.7"
|
||||||
|
ry="1.6"
|
||||||
|
inkscape:label="Ne" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse12"
|
||||||
|
cx="156.39783"
|
||||||
|
cy="421.90857"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse13"
|
||||||
|
cx="165.44879"
|
||||||
|
cy="389.66449"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#ffffff;paint-order:markers stroke fill"
|
||||||
|
id="ellipse14"
|
||||||
|
cx="109.53416"
|
||||||
|
cy="338.25873"
|
||||||
|
rx="1.7"
|
||||||
|
ry="1.6"
|
||||||
|
inkscape:label="Ne" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse15"
|
||||||
|
cx="74.373444"
|
||||||
|
cy="369.86551"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse16"
|
||||||
|
cx="211.26932"
|
||||||
|
cy="459.80951"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#ffffff;paint-order:markers stroke fill"
|
||||||
|
id="ellipse17"
|
||||||
|
cx="166.38556"
|
||||||
|
cy="326.66217"
|
||||||
|
rx="1.7"
|
||||||
|
ry="1.6"
|
||||||
|
inkscape:label="Ne" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse18"
|
||||||
|
cx="143.81549"
|
||||||
|
cy="310.87485"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#ffffff;paint-order:markers stroke fill"
|
||||||
|
id="ellipse19"
|
||||||
|
cx="54.096996"
|
||||||
|
cy="302.62054"
|
||||||
|
rx="1.7"
|
||||||
|
ry="1.6"
|
||||||
|
inkscape:label="Ne" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse20"
|
||||||
|
cx="81.161667"
|
||||||
|
cy="337.62143"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#ffffff;paint-order:markers stroke fill"
|
||||||
|
id="ellipse21"
|
||||||
|
cx="197.21542"
|
||||||
|
cy="389.73611"
|
||||||
|
rx="1.7"
|
||||||
|
ry="1.6"
|
||||||
|
inkscape:label="Ne" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse22"
|
||||||
|
cx="206.17815"
|
||||||
|
cy="420.49435"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse23"
|
||||||
|
cx="191.47032"
|
||||||
|
cy="355.72336"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#ffffff;paint-order:markers stroke fill"
|
||||||
|
id="ellipse24"
|
||||||
|
cx="123.39349"
|
||||||
|
cy="289.32693"
|
||||||
|
rx="1.7"
|
||||||
|
ry="1.6"
|
||||||
|
inkscape:label="Ne" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse25"
|
||||||
|
cx="107.918"
|
||||||
|
cy="312.29456"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse26"
|
||||||
|
cx="171.10564"
|
||||||
|
cy="305.74896"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse27"
|
||||||
|
cx="209.00658"
|
||||||
|
cy="326.02487"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#ffffff;paint-order:markers stroke fill"
|
||||||
|
id="ellipse28"
|
||||||
|
cx="233.13644"
|
||||||
|
cy="449.69873"
|
||||||
|
rx="1.7"
|
||||||
|
ry="1.6"
|
||||||
|
inkscape:label="Ne" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse29"
|
||||||
|
cx="209.57225"
|
||||||
|
cy="264.93088"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#ffffff;paint-order:markers stroke fill"
|
||||||
|
id="ellipse30"
|
||||||
|
cx="218.14577"
|
||||||
|
cy="234.45544"
|
||||||
|
rx="1.7"
|
||||||
|
ry="1.6"
|
||||||
|
inkscape:label="Ne" /><ellipse
|
||||||
|
style="fill:#ffffff;paint-order:markers stroke fill"
|
||||||
|
id="ellipse31"
|
||||||
|
cx="69.087662"
|
||||||
|
cy="241.52652"
|
||||||
|
rx="1.7"
|
||||||
|
ry="1.6"
|
||||||
|
inkscape:label="Ne" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse32"
|
||||||
|
cx="79.464607"
|
||||||
|
cy="276.81027"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse33"
|
||||||
|
cx="119.91112"
|
||||||
|
cy="240.88925"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#ffffff;paint-order:markers stroke fill"
|
||||||
|
id="ellipse34"
|
||||||
|
cx="149.54393"
|
||||||
|
cy="212.82214"
|
||||||
|
rx="1.7"
|
||||||
|
ry="1.6"
|
||||||
|
inkscape:label="Ne" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse35"
|
||||||
|
cx="87.384209"
|
||||||
|
cy="220.24173"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#ffffff;paint-order:markers stroke fill"
|
||||||
|
id="ellipse36"
|
||||||
|
cx="51.834263"
|
||||||
|
cy="200.23149"
|
||||||
|
rx="1.7"
|
||||||
|
ry="1.6"
|
||||||
|
inkscape:label="Ne" /><ellipse
|
||||||
|
style="fill:#ffffff;paint-order:markers stroke fill"
|
||||||
|
id="ellipse37"
|
||||||
|
cx="102.46313"
|
||||||
|
cy="170.81586"
|
||||||
|
rx="1.7"
|
||||||
|
ry="1.6"
|
||||||
|
inkscape:label="Ne" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse38"
|
||||||
|
cx="154.70078"
|
||||||
|
cy="270.58774"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse39"
|
||||||
|
cx="129.52776"
|
||||||
|
cy="146.70262"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse40"
|
||||||
|
cx="72.393524"
|
||||||
|
cy="155.47075"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#ffffff;paint-order:markers stroke fill"
|
||||||
|
id="ellipse41"
|
||||||
|
cx="125.37337"
|
||||||
|
cy="97.276749"
|
||||||
|
rx="1.7"
|
||||||
|
ry="1.6"
|
||||||
|
inkscape:label="Ne" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse42"
|
||||||
|
cx="158.09486"
|
||||||
|
cy="117.85267"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#ffffff;paint-order:markers stroke fill"
|
||||||
|
id="ellipse43"
|
||||||
|
cx="292.81625"
|
||||||
|
cy="413.77774"
|
||||||
|
rx="1.7"
|
||||||
|
ry="1.6"
|
||||||
|
inkscape:label="Ne" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse44"
|
||||||
|
cx="324.70099"
|
||||||
|
cy="394.23505"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#ffffff;paint-order:markers stroke fill"
|
||||||
|
id="ellipse45"
|
||||||
|
cx="320.42599"
|
||||||
|
cy="453.44434"
|
||||||
|
rx="1.7"
|
||||||
|
ry="1.6"
|
||||||
|
inkscape:label="Ne" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse46"
|
||||||
|
cx="285.09122"
|
||||||
|
cy="385.42184"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse48"
|
||||||
|
cx="338.44168"
|
||||||
|
cy="426.85901"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#ffffff;paint-order:markers stroke fill"
|
||||||
|
id="ellipse49"
|
||||||
|
cx="317.79169"
|
||||||
|
cy="357.43658"
|
||||||
|
rx="1.7"
|
||||||
|
ry="1.6"
|
||||||
|
inkscape:label="Ne" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse51"
|
||||||
|
cx="365.49063"
|
||||||
|
cy="399.36642"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#ffffff;paint-order:markers stroke fill"
|
||||||
|
id="ellipse53"
|
||||||
|
cx="279.23981"
|
||||||
|
cy="358.34058"
|
||||||
|
rx="1.7"
|
||||||
|
ry="1.6"
|
||||||
|
inkscape:label="Ne" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse54"
|
||||||
|
cx="327.80048"
|
||||||
|
cy="293.78082"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#ffffff;paint-order:markers stroke fill"
|
||||||
|
id="ellipse56"
|
||||||
|
cx="372.42056"
|
||||||
|
cy="428.29486"
|
||||||
|
rx="1.7"
|
||||||
|
ry="1.6"
|
||||||
|
inkscape:label="Ne" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse57"
|
||||||
|
cx="291.59659"
|
||||||
|
cy="322.63077"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#ffffff;paint-order:markers stroke fill"
|
||||||
|
id="ellipse58"
|
||||||
|
cx="359.18237"
|
||||||
|
cy="279.07053"
|
||||||
|
rx="1.7"
|
||||||
|
ry="1.6"
|
||||||
|
inkscape:label="Ne" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse59"
|
||||||
|
cx="383.58429"
|
||||||
|
cy="372.29739"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse60"
|
||||||
|
cx="397.37979"
|
||||||
|
cy="415.40317"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse63"
|
||||||
|
cx="350.44458"
|
||||||
|
cy="330.60577"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse64"
|
||||||
|
cx="278.86871"
|
||||||
|
cy="290.38669"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse65"
|
||||||
|
cx="293.07599"
|
||||||
|
cy="256.95929"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#ffffff;paint-order:markers stroke fill"
|
||||||
|
id="ellipse66"
|
||||||
|
cx="449.10278"
|
||||||
|
cy="346.04938"
|
||||||
|
rx="1.7"
|
||||||
|
ry="1.6"
|
||||||
|
inkscape:label="Ne" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse67"
|
||||||
|
cx="414.35034"
|
||||||
|
cy="351.19788"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse68"
|
||||||
|
cx="419.44153"
|
||||||
|
cy="384.85614"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#ffffff;paint-order:markers stroke fill"
|
||||||
|
id="ellipse70"
|
||||||
|
cx="283.1795"
|
||||||
|
cy="218.42702"
|
||||||
|
rx="1.7"
|
||||||
|
ry="1.6"
|
||||||
|
inkscape:label="Ne" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse71"
|
||||||
|
cx="321.29507"
|
||||||
|
cy="243.71765"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#ffffff;paint-order:markers stroke fill"
|
||||||
|
id="ellipse73"
|
||||||
|
cx="391.73221"
|
||||||
|
cy="329.27985"
|
||||||
|
rx="1.7"
|
||||||
|
ry="1.6"
|
||||||
|
inkscape:label="Ne" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse75"
|
||||||
|
cx="393.46164"
|
||||||
|
cy="270.81857"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#ffffff;paint-order:markers stroke fill"
|
||||||
|
id="ellipse76"
|
||||||
|
cx="464.73605"
|
||||||
|
cy="270.14359"
|
||||||
|
rx="1.7"
|
||||||
|
ry="1.6"
|
||||||
|
inkscape:label="Ne" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse77"
|
||||||
|
cx="429.25717"
|
||||||
|
cy="321.05084"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#ffffff;paint-order:markers stroke fill"
|
||||||
|
id="ellipse78"
|
||||||
|
cx="353.9671"
|
||||||
|
cy="172.07269"
|
||||||
|
rx="1.7"
|
||||||
|
ry="1.6"
|
||||||
|
inkscape:label="Ne" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse79"
|
||||||
|
cx="374.46957"
|
||||||
|
cy="217.13043"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse80"
|
||||||
|
cx="386.14307"
|
||||||
|
cy="187.46037"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#ffffff;paint-order:markers stroke fill"
|
||||||
|
id="ellipse81"
|
||||||
|
cx="424.05527"
|
||||||
|
cy="244.35493"
|
||||||
|
rx="1.7"
|
||||||
|
ry="1.6"
|
||||||
|
inkscape:label="Ne" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse82"
|
||||||
|
cx="430.8371"
|
||||||
|
cy="285.26224"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#ffffff;paint-order:markers stroke fill"
|
||||||
|
id="ellipse83"
|
||||||
|
cx="402.7533"
|
||||||
|
cy="221.62213"
|
||||||
|
rx="1.7"
|
||||||
|
ry="1.6"
|
||||||
|
inkscape:label="Ne" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse84"
|
||||||
|
cx="455.30573"
|
||||||
|
cy="229.30444"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#ffffff;paint-order:markers stroke fill"
|
||||||
|
id="ellipse85"
|
||||||
|
cx="431.69202"
|
||||||
|
cy="189.20061"
|
||||||
|
rx="1.7"
|
||||||
|
ry="1.6"
|
||||||
|
inkscape:label="Ne" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse86"
|
||||||
|
cx="464.40521"
|
||||||
|
cy="195.28293"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#ffffff;paint-order:markers stroke fill"
|
||||||
|
id="ellipse87"
|
||||||
|
cx="440.46014"
|
||||||
|
cy="142.81439"
|
||||||
|
rx="1.7"
|
||||||
|
ry="1.6"
|
||||||
|
inkscape:label="Ne" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse88"
|
||||||
|
cx="411.80481"
|
||||||
|
cy="146.70259"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#ffffff;paint-order:markers stroke fill"
|
||||||
|
id="ellipse89"
|
||||||
|
cx="351.93036"
|
||||||
|
cy="98.973793"
|
||||||
|
rx="1.7"
|
||||||
|
ry="1.6"
|
||||||
|
inkscape:label="Ne" /><ellipse
|
||||||
|
style="fill:#e6e6e6;stroke-width:0.696631;paint-order:markers stroke fill"
|
||||||
|
id="ellipse90"
|
||||||
|
cx="370.50977"
|
||||||
|
cy="120.6811"
|
||||||
|
rx="1.2"
|
||||||
|
ry="1.1" /><ellipse
|
||||||
|
style="fill:#ffffff;paint-order:markers stroke fill"
|
||||||
|
id="ellipse91"
|
||||||
|
cx="394.07391"
|
||||||
|
cy="106.04485"
|
||||||
|
rx="1.7"
|
||||||
|
ry="1.6"
|
||||||
|
inkscape:label="Ne" /></svg>
|
||||||
|
After Width: | Height: | Size: 21 KiB |
|
|
@ -0,0 +1 @@
|
||||||
|
#1F143C
|
||||||
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 9.2 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 5.5 KiB |
|
|
@ -0,0 +1,211 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
width="512"
|
||||||
|
height="512"
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 512 512"
|
||||||
|
version="1.1"
|
||||||
|
id="svg7"
|
||||||
|
sodipodi:docname="EdenLogoLoveWhiteV3.svg"
|
||||||
|
inkscape:version="1.4.3 (0d15f75, 2025-12-25)"
|
||||||
|
xml:space="preserve"
|
||||||
|
inkscape:export-filename="dev.eden_emu.eden.png"
|
||||||
|
inkscape:export-xdpi="96"
|
||||||
|
inkscape:export-ydpi="96"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||||
|
<metadata
|
||||||
|
id="metadata1">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
|
||||||
|
<dc:creator>
|
||||||
|
<cc:Agent>
|
||||||
|
<dc:title>Madeline_Dev</dc:title>
|
||||||
|
<dc:identifier>mailto:madelvidel@gmail.com</dc:identifier>
|
||||||
|
</cc:Agent>
|
||||||
|
</dc:creator>
|
||||||
|
<dc:date>2025</dc:date>
|
||||||
|
<dc:license
|
||||||
|
rdf:resource="https://www.gnu.org/licenses/gpl-3.0.html" />
|
||||||
|
<dc:rights>2025 Eden Emulator Project</dc:rights>
|
||||||
|
<dc:source>https://git.eden-emu.dev</dc:source>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs7"><linearGradient
|
||||||
|
id="swatch14"
|
||||||
|
inkscape:swatch="solid"><stop
|
||||||
|
style="stop-color:#66003b;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop14" /></linearGradient><linearGradient
|
||||||
|
id="linearGradient1"
|
||||||
|
inkscape:collect="always"><stop
|
||||||
|
style="stop-color:#ffffff;stop-opacity:0.50980395;"
|
||||||
|
offset="0"
|
||||||
|
id="stop1" /><stop
|
||||||
|
style="stop-color:#000000;stop-opacity:0;"
|
||||||
|
offset="1"
|
||||||
|
id="stop2" /></linearGradient><linearGradient
|
||||||
|
id="linearGradient11"
|
||||||
|
inkscape:collect="always"><stop
|
||||||
|
style="stop-color:#9523a7;stop-opacity:0.50980395;"
|
||||||
|
offset="0"
|
||||||
|
id="stop11" /><stop
|
||||||
|
style="stop-color:#ffabad;stop-opacity:1;"
|
||||||
|
offset="0.99898213"
|
||||||
|
id="stop20" /><stop
|
||||||
|
style="stop-color:#ffffff;stop-opacity:0;"
|
||||||
|
offset="0.99898213"
|
||||||
|
id="stop12" /></linearGradient><linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient11"
|
||||||
|
id="linearGradient12"
|
||||||
|
x1="109.74531"
|
||||||
|
y1="106.54533"
|
||||||
|
x2="431.05463"
|
||||||
|
y2="427.85461"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
spreadMethod="reflect"
|
||||||
|
gradientTransform="matrix(1.0945321,0,0,1.0945321,-39.661525,-35.159057)" /><linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient1"
|
||||||
|
id="linearGradient2"
|
||||||
|
x1="125.40197"
|
||||||
|
y1="271.834"
|
||||||
|
x2="431.02424"
|
||||||
|
y2="271.834"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(1.0964243,0,0,1.0253208,-40.187969,-20.060025)" /><filter
|
||||||
|
inkscape:label="Light Contour"
|
||||||
|
inkscape:menu="Image Paint and Draw"
|
||||||
|
inkscape:menu-tooltip="Uses vertical specular light to draw lines"
|
||||||
|
style="color-interpolation-filters:sRGB"
|
||||||
|
id="filter11"
|
||||||
|
x="-0.01907517"
|
||||||
|
y="-0.054959154"
|
||||||
|
width="1.0379885"
|
||||||
|
height="1.1092314"><feGaussianBlur
|
||||||
|
in="SourceGraphic"
|
||||||
|
stdDeviation="0.38250006"
|
||||||
|
result="result3"
|
||||||
|
id="feGaussianBlur9" /><feComponentTransfer
|
||||||
|
result="result1"
|
||||||
|
in="result3"
|
||||||
|
id="feComponentTransfer9"><feFuncR
|
||||||
|
type="discrete"
|
||||||
|
tableValues="0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1"
|
||||||
|
id="feFuncR9" /><feFuncG
|
||||||
|
type="discrete"
|
||||||
|
tableValues="0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1"
|
||||||
|
id="feFuncG9" /><feFuncB
|
||||||
|
type="discrete"
|
||||||
|
tableValues="0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1"
|
||||||
|
id="feFuncB9" /></feComponentTransfer><feGaussianBlur
|
||||||
|
result="result5"
|
||||||
|
stdDeviation="0.01"
|
||||||
|
id="feGaussianBlur10" /><feBlend
|
||||||
|
in2="result5"
|
||||||
|
result="result6"
|
||||||
|
mode="lighten"
|
||||||
|
in="result5"
|
||||||
|
id="feBlend10" /><feColorMatrix
|
||||||
|
in="result6"
|
||||||
|
type="luminanceToAlpha"
|
||||||
|
result="result2"
|
||||||
|
id="feColorMatrix10" /><feSpecularLighting
|
||||||
|
surfaceScale="5"
|
||||||
|
result="result9"
|
||||||
|
specularExponent="20"
|
||||||
|
in="result2"
|
||||||
|
specularConstant="1"
|
||||||
|
id="feSpecularLighting10"><feDistantLight
|
||||||
|
azimuth="180"
|
||||||
|
elevation="90"
|
||||||
|
id="feDistantLight10" /></feSpecularLighting><feComposite
|
||||||
|
in2="result6"
|
||||||
|
operator="arithmetic"
|
||||||
|
in="result9"
|
||||||
|
k1="0.4"
|
||||||
|
k3="0.7"
|
||||||
|
result="result3"
|
||||||
|
id="feComposite10"
|
||||||
|
k2="0"
|
||||||
|
k4="0" /><feBlend
|
||||||
|
in2="result1"
|
||||||
|
in="result3"
|
||||||
|
mode="normal"
|
||||||
|
result="result8"
|
||||||
|
id="feBlend11" /><feComposite
|
||||||
|
in2="SourceGraphic"
|
||||||
|
in="result8"
|
||||||
|
operator="in"
|
||||||
|
result="result7"
|
||||||
|
id="feComposite11" /></filter></defs><sodipodi:namedview
|
||||||
|
id="namedview7"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#000000"
|
||||||
|
borderopacity="0.25"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:zoom="1.35"
|
||||||
|
inkscape:cx="254.81481"
|
||||||
|
inkscape:cy="260.37037"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1001"
|
||||||
|
inkscape:window-x="-9"
|
||||||
|
inkscape:window-y="-9"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg7"
|
||||||
|
showguides="false" /><circle
|
||||||
|
style="fill:url(#linearGradient12);fill-opacity:1;stroke:#e4e4e4;stroke-width:14.0448;stroke-opacity:1;paint-order:stroke fill markers"
|
||||||
|
id="path8"
|
||||||
|
cx="256.2999"
|
||||||
|
cy="257.2999"
|
||||||
|
r="248.67769" /><path
|
||||||
|
id="path15"
|
||||||
|
style="fill:url(#linearGradient2);fill-opacity:1;stroke:#ffffff;stroke-width:16.9642;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.52156866;paint-order:stroke fill markers"
|
||||||
|
d="m 306.72111,24.233031 c 0,0 -11.98397,40.08696 -18.0546,60.431848 -12.96613,9.503601 -21.49377,18.397701 -21.49377,18.397701 0,0 -23.41313,-31.029398 -45.74145,-43.934598 -22.32833,-12.905201 -52.42065,-11.242483 -52.42065,-11.242483 0,0 -12.50052,4e-4 -27.63117,5.537132 -15.13066,5.536732 -21.27107,9.227888 -21.27107,9.227888 0,0 15.35165,-0.410529 37.93799,6.766716 22.58635,7.177243 32.45374,11.484796 32.45374,11.484796 l 31.02752,-6.562453 -8.44161,11.074275 c 0,0 14.80259,8.920284 22.80648,16.917787 8.0039,7.9975 11.73088,12.50812 11.73088,12.50812 0,0 -13.92373,-5.43341 -56.68427,-1.74226 -42.76055,3.69116 -84.86368,56.39265 -84.86368,56.39265 0,0 41.22428,-15.9958 65.5649,-21.32747 24.34062,-5.33166 47.58524,-7.9983 47.58524,-7.9983 0,0 -18.41865,7.3827 -38.15428,38.3474 -19.73564,30.96468 -14.0351,80.18128 -14.0351,80.18128 0,0 31.35774,-59.05848 61.39977,-78.94969 30.04203,-19.89124 36.182,-20.50642 36.182,-20.50642 0,0 -24.1209,48.39514 -33.55015,126.11445 -9.42924,77.71931 30.26089,207.72959 30.26089,207.72959 l 47.80367,-6.97298 c 0,0 -45.61041,-42.24281 -49.55753,-151.33695 -3.94713,-109.09413 16.66479,-174.30453 16.66479,-174.30453 0,0 17.10508,1.23039 42.54213,32.81027 25.43704,31.57987 40.34713,57.41795 40.34713,57.41795 0,0 9.65024,-51.26683 -11.4011,-74.64415 -21.05135,-23.3773 -53.50637,-33.62931 -53.50637,-33.62931 0,0 13.70573,-6.66419 42.10313,-4.71609 28.39738,1.94813 87.30278,27.12897 87.30278,27.12896 0,0 -15.8158,-25.5214 -52.87463,-43.21167 -37.05881,-17.69028 -81.35597,0.29238 -81.35597,0.29238 0,0 4.13589,-15.37277 29.10021,-32.628037 24.96432,-17.25527 56.907,-34.36427 56.907,-34.36427 0,0 -26.3595,1.160335 -55.20025,12.035504 -7.176,2.7059 -14.064,6.299542 -20.36309,10.173104 l 17.40574,-51.051762 z" /><path
|
||||||
|
id="path4-2-6"
|
||||||
|
style="fill:#ffffff;fill-opacity:0.509804;stroke:#ffffff;stroke-width:8.49614;stroke-dasharray:none;stroke-opacity:0.521569"
|
||||||
|
d="m 105.64857,363.95957 a 27.851731,25.309928 0 0 0 -7.115581,35.20471 27.851731,25.309928 0 0 0 5.656921,5.48617 c 7.16052,5.83605 21.58543,14.65841 45.88391,17.847 37.57172,4.93039 41.7105,10.38005 41.71122,10.381 -4.5e-4,-6e-4 -4.13529,-5.45309 4.14459,-39.11953 5.35491,-21.77281 1.40624,-37.16078 -2.05217,-45.31698 a 27.851731,25.309928 0 0 0 -3.63281,-6.75471 27.851731,25.309928 0 0 0 -38.74027,-6.4662 27.851731,25.309928 0 0 0 -7.11556,35.20472 27.851731,25.309928 0 0 0 -38.74025,-6.46618 z" /><path
|
||||||
|
id="path4-2-6-1"
|
||||||
|
style="fill:#ffffff;fill-opacity:0.50980395;stroke:#ffffff;stroke-width:6.89965;stroke-dasharray:none;stroke-opacity:0.519962"
|
||||||
|
d="m 351.29524,378.32915 a 20.862787,22.283365 87.929759 0 0 -28.94663,11.7882 20.862787,22.283365 87.929759 0 0 -1.50914,6.04125 c -1.09835,7.13663 -1.16134,20.16231 7.28339,36.72931 13.0577,25.61689 10.90177,30.69793 10.90138,30.69882 2.4e-4,-5.6e-4 2.16,-5.08045 30.49632,-15.43688 18.32576,-6.69765 27.84648,-16.23659 32.287,-22.14109 a 20.862787,22.283365 87.929759 0 0 3.33646,-5.36755 20.862787,22.283365 87.929759 0 0 -12.45108,-27.05014 20.862787,22.283365 87.929759 0 0 -28.94664,11.78822 20.862787,22.283365 87.929759 0 0 -12.45106,-27.05014 z" /><path
|
||||||
|
id="path4-2-6-1-5"
|
||||||
|
style="fill:#ffffff;fill-opacity:0.50980395;stroke:#ffffff;stroke-width:6.89965;stroke-dasharray:none;stroke-opacity:0.52156866"
|
||||||
|
d="m 83.024352,249.4105 a 22.283365,20.862787 0 0 0 -29.353581,10.73482 22.283365,20.862787 0 0 0 -1.72639,5.98278 c -1.35544,7.0923 -1.88894,20.10721 5.951801,36.96846 12.12378,26.07187 9.7857,31.07171 9.78528,31.07259 2.6e-4,-5.5e-4 2.34212,-4.99911 31.03406,-14.32513 18.555748,-6.03127 28.414858,-15.22005 33.065768,-20.96029 a 22.283365,20.862787 0 0 0 3.52818,-5.24352 22.283365,20.862787 0 0 0 -11.46577,-27.48227 22.283365,20.862787 0 0 0 -29.353588,10.73483 22.283365,20.862787 0 0 0 -11.46576,-27.48227 z" /><path
|
||||||
|
id="path4-2-6-1-9"
|
||||||
|
style="fill:#ffffff;fill-opacity:0.50980395;stroke:#ffffff;stroke-width:5.01078;stroke-dasharray:none;stroke-opacity:0.519962"
|
||||||
|
d="m 320.97602,291.36362 a 16.625347,14.748181 0 0 0 -21.90036,7.58859 16.625347,14.748181 0 0 0 -1.28804,4.2293 c -1.01128,5.01364 -1.40932,14.21406 4.44057,26.1335 9.0454,18.43055 7.30098,21.965 7.30067,21.96562 2e-4,-3.9e-4 1.74743,-3.53394 23.15415,-10.12663 13.84423,-4.26358 21.19999,-10.75925 24.66998,-14.8171 a 16.625347,14.748181 0 0 0 2.63233,-3.70671 16.625347,14.748181 0 0 0 -8.55447,-19.42758 16.625347,14.748181 0 0 0 -21.90037,7.58859 16.625347,14.748181 0 0 0 -8.55446,-19.42758 z" /><path
|
||||||
|
id="path4-2-6-1-9-8"
|
||||||
|
style="fill:#ffffff;fill-opacity:0.50980395;stroke:#ffffff;stroke-width:4.22313;stroke-dasharray:none;stroke-opacity:0.519962"
|
||||||
|
d="m 416.90426,193.13811 a 12.322476,14.134158 82.30909 0 0 -17.56469,8.83612 12.322476,14.134158 82.30909 0 0 -0.59553,3.65007 c -0.27175,4.26676 0.45709,11.92642 6.76182,21.10665 9.74867,14.19503 8.68847,17.32338 8.68827,17.3239 1.2e-4,-3.3e-4 1.06282,-3.12827 18.32699,-11.08266 11.16516,-5.14424 16.60821,-11.37802 19.06101,-15.14093 a 12.322476,14.134158 82.30909 0 0 1.788,-3.37453 12.322476,14.134158 82.30909 0 0 -9.45059,-15.07737 12.322476,14.134158 82.30909 0 0 -17.5647,8.83612 12.322476,14.134158 82.30909 0 0 -9.45058,-15.07737 z" /><path
|
||||||
|
id="path4-2-6-1-9-8-4"
|
||||||
|
style="fill:#ffffff;fill-opacity:0.50980395;stroke:#ffffff;stroke-width:3.48342;stroke-dasharray:none;stroke-opacity:0.519962"
|
||||||
|
d="m 96.169666,99.754795 a 10.296362,11.508677 62.365085 0 0 -7.330189,13.841365 10.296362,11.508677 62.365085 0 0 1.473186,2.6805 c 2.008889,2.93989 6.437543,7.66269 15.415927,10.84633 13.88288,4.92276 14.77391,7.47086 14.77407,7.4713 -1e-4,-2.8e-4 -0.88925,-2.54921 6.69094,-15.67164 4.90232,-8.48655 5.37758,-15.08279 5.10162,-18.6847 a 10.296362,11.508677 62.365085 0 0 -0.5257,-3.042454 10.296362,11.508677 62.365085 0 0 -14.1348,-5.641051 10.296362,11.508677 62.365085 0 0 -7.33021,13.841385 10.296362,11.508677 62.365085 0 0 -14.134844,-5.641035 z" /><path
|
||||||
|
id="path4-2-6-1-9-8-4-9-2"
|
||||||
|
style="fill:#ffffff;fill-opacity:0.5117;stroke:#ffffff;stroke-width:3.05139;stroke-dasharray:none;stroke-opacity:0.519962"
|
||||||
|
d="m 296.64657,233.26347 a 8.8114666,10.319195 80.445391 0 0 -11.58972,8.06989 8.8114666,10.319195 80.445391 0 0 0.0366,2.62543 c 0.35019,3.02392 1.86017,8.32306 7.60386,14.09672 8.8812,8.92759 8.51432,11.23624 8.51426,11.23663 5e-5,-2.5e-4 0.36876,-2.30885 11.85385,-9.72788 7.4277,-4.79799 10.57103,-9.75243 11.86523,-12.65455 a 8.8114666,10.319195 80.445391 0 0 0.86244,-2.55882 8.8114666,10.319195 80.445391 0 0 -8.77837,-9.57865 8.8114666,10.319195 80.445391 0 0 -11.58975,8.06989 8.8114666,10.319195 80.445391 0 0 -8.77842,-9.57866 z" /><path
|
||||||
|
id="path4-2-6-1-9-8-4-9-2-6"
|
||||||
|
style="fill:#ffffff;fill-opacity:0.5117;stroke:#ffffff;stroke-width:2.49738;stroke-dasharray:none;stroke-opacity:0.519962"
|
||||||
|
d="m 403.95446,91.44744 a 7.0950375,8.5844443 82.142743 0 0 -9.64888,6.492875 7.0950375,8.5844443 82.142743 0 0 0.0305,2.112375 c 0.29155,2.43298 1.54866,6.69657 6.33049,11.34195 7.39392,7.18298 7.08848,9.04046 7.08843,9.04078 4e-5,-2.1e-4 0.307,-1.85765 9.86876,-7.82686 6.18383,-3.86038 8.80077,-7.84663 9.87824,-10.18161 a 7.0950375,8.5844443 82.142743 0 0 0.718,-2.05879 7.0950375,8.5844443 82.142743 0 0 -7.30831,-7.706798 7.0950375,8.5844443 82.142743 0 0 -9.64889,6.492875 7.0950375,8.5844443 82.142743 0 0 -7.30834,-7.706797 z" /><path
|
||||||
|
id="path4-2-6-1-9-8-4-9-5"
|
||||||
|
style="fill:#ffffff;fill-opacity:0.5117;stroke:#ffffff;stroke-width:7.54176;stroke-dasharray:none;stroke-opacity:0.521569"
|
||||||
|
d="m 410.46352,265.86621 a 24.802737,22.39469 2.0523303 0 0 -30.17074,15.95063 24.802737,22.39469 2.0523303 0 0 -0.74427,6.61415 c -0.12337,7.7333 1.79614,21.62064 13.65297,38.28529 18.33368,25.76802 16.72835,31.4347 16.72811,31.43572 1.4e-4,-6.3e-4 1.60998,-5.66652 31.32518,-20.02007 19.21759,-9.28266 28.27643,-20.56192 32.27921,-27.37361 a 24.802737,22.39469 2.0523303 0 0 2.8654,-6.11021 24.802737,22.39469 2.0523303 0 0 -17.88248,-27.36631 24.802737,22.39469 2.0523303 0 0 -30.17081,15.95066 24.802737,22.39469 2.0523303 0 0 -17.88257,-27.36625 z" /><path
|
||||||
|
id="path4-2-6-1-9-8-5"
|
||||||
|
style="fill:#ffffff;fill-opacity:0.50980395;stroke:#ffffff;stroke-width:3.6405;stroke-dasharray:none;stroke-opacity:0.519962"
|
||||||
|
d="m 114.43099,189.33754 a 10.333135,12.525309 79.004057 0 0 -14.00848,9.75499 10.333135,12.525309 79.004057 0 0 0.0547,3.08382 c 0.43602,3.54457 2.28588,9.73496 9.26636,16.38295 10.79359,10.27954 10.35819,13.00063 10.3581,13.00111 6e-5,-3e-4 0.4377,-2.72141 14.32197,-11.70923 8.9793,-5.8126 12.76786,-11.70785 14.32433,-15.14812 a 10.333135,12.525309 79.004057 0 0 1.03481,-3.02677 10.333135,12.525309 79.004057 0 0 -10.67161,-11.04688 10.333135,12.525309 79.004057 0 0 -14.00848,9.75501 10.333135,12.525309 79.004057 0 0 -10.6716,-11.04688 z" /><path
|
||||||
|
id="path4-2-6-1-9-8-4-9-2-2"
|
||||||
|
style="fill:#ffffff;fill-opacity:0.5117;stroke:#ffffff;stroke-width:3.62674;stroke-dasharray:none;stroke-opacity:0.519962"
|
||||||
|
d="m 178.56055,273.32338 a 10.656883,12.053184 66.089768 0 0 -7.97821,14.16205 10.656883,12.053184 66.089768 0 0 1.49012,2.79504 c 2.04675,3.07265 6.5954,8.03049 15.94965,11.48124 14.46412,5.33577 15.34612,7.98353 15.34628,7.98398 -8e-5,-2.8e-4 -0.88012,-2.64887 7.3455,-16.0639 5.31973,-8.67576 5.95524,-15.47956 5.74045,-19.20452 a 10.656883,12.053184 66.089768 0 0 -0.48843,-3.15169 10.656883,12.053184 66.089768 0 0 -14.7135,-6.08217 10.656883,12.053184 66.089768 0 0 -7.97826,14.1621 10.656883,12.053184 66.089768 0 0 -14.71355,-6.08215 z" /></svg>
|
||||||
|
After Width: | Height: | Size: 15 KiB |
|
|
@ -0,0 +1 @@
|
||||||
|
#e48cc9ff
|
||||||
|
After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 52 KiB |
|
|
@ -6,9 +6,11 @@
|
||||||
This is a full-fledged guide to build Eden on all supported platforms.
|
This is a full-fledged guide to build Eden on all supported platforms.
|
||||||
|
|
||||||
## Dependencies
|
## Dependencies
|
||||||
|
|
||||||
First, you must [install some dependencies](Deps.md).
|
First, you must [install some dependencies](Deps.md).
|
||||||
|
|
||||||
## Clone
|
## Clone
|
||||||
|
|
||||||
Next, you will want to clone Eden via the terminal:
|
Next, you will want to clone Eden via the terminal:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
|
|
@ -53,30 +55,35 @@ Hit "Configure Project", then wait for CMake to finish configuring (may take a w
|
||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
>For all systems:
|
>For all systems:
|
||||||
|
>
|
||||||
>- *CMake* **MUST** be in your PATH (and also *ninja*, if you are using it as `<GENERATOR>`)
|
>- *CMake* **MUST** be in your PATH (and also *ninja*, if you are using it as `<GENERATOR>`)
|
||||||
>- You *MUST* be in the cloned *Eden* directory
|
>- You *MUST* be in the cloned *Eden* directory
|
||||||
>
|
>
|
||||||
>On Windows:
|
>On Windows:
|
||||||
|
>
|
||||||
> - It's recommended to install **[Ninja](https://ninja-build.org/)**
|
> - It's recommended to install **[Ninja](https://ninja-build.org/)**
|
||||||
> - You must load **Visual C++ development environment**, this can be done by running our convenience script:
|
> - You must load **Visual C++ development environment**, this can be done by running our convenience script:
|
||||||
> - `tools/windows/load-msvc-env.ps1` (for PowerShell 5+)
|
> - `tools/windows/load-msvc-env.ps1` (for PowerShell 5+)
|
||||||
> - `tools/windows/load-msvc-env.sh` (for MSYS2, Git Bash, etc)
|
> - `tools/windows/load-msvc-env.sh` (for MSYS2, Git Bash, etc)
|
||||||
|
|
||||||
Available `<GENERATOR>`:
|
Available `<GENERATOR>`:
|
||||||
|
|
||||||
- MSYS2: `MSYS Makefiles`
|
- MSYS2: `MSYS Makefiles`
|
||||||
- MSVC: `Ninja` (preferred) or `Visual Studio 17 2022`
|
- MSVC: `Ninja` (preferred) or `Visual Studio 17 2022`
|
||||||
- macOS: `Ninja` (preferred) or `Xcode`
|
- macOS: `Ninja` (preferred) or `Xcode`
|
||||||
- Others: `Ninja` (preferred) or `UNIX Makefiles`
|
- Others: `Ninja` (preferred) or `UNIX Makefiles`
|
||||||
|
|
||||||
Available `<BUILD_TYPE>`:
|
Available `<BUILD_TYPE>`:
|
||||||
|
|
||||||
- `Release` (default)
|
- `Release` (default)
|
||||||
- `RelWithDebInfo` (debug symbols--compiled executable will be large)
|
- `RelWithDebInfo` (debug symbols--compiled executable will be large)
|
||||||
- `Debug` (if you are using a debugger and annoyed with stuff getting optimized out)
|
- `Debug` (if you are using a debugger and annoyed with stuff getting optimized out)
|
||||||
|
|
||||||
Caveat for Debug Builds:
|
Caveat for Debug Builds:
|
||||||
|
|
||||||
- If you're building with CCache, you will need to add the environment variable `CL` with the `/FS` flag ([Reference](https://learn.microsoft.com/pt-br/cpp/build/reference/fs-force-synchronous-pdb-writes?view=msvc-170))
|
- If you're building with CCache, you will need to add the environment variable `CL` with the `/FS` flag ([Reference](https://learn.microsoft.com/pt-br/cpp/build/reference/fs-force-synchronous-pdb-writes?view=msvc-170))
|
||||||
|
|
||||||
Also see the [Options](Options.md) page for additional CMake options.
|
Also see the root CMakeLists.txt for more build options. Usually the default will provide the best experience, however.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
cmake -S . -B build -G "<GENERATOR>" -DCMAKE_BUILD_TYPE=<BUILD_TYPE> -DYUZU_TESTS=OFF
|
cmake -S . -B build -G "<GENERATOR>" -DCMAKE_BUILD_TYPE=<BUILD_TYPE> -DYUZU_TESTS=OFF
|
||||||
|
|
@ -95,7 +102,7 @@ cmake -S . -B build -G "<GENERATOR>" -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COM
|
||||||
<details>
|
<details>
|
||||||
<summary>Click to Open</summary>
|
<summary>Click to Open</summary>
|
||||||
|
|
||||||
* Clone the Repository:
|
- Clone the Repository:
|
||||||
|
|
||||||
<img src="https://user-images.githubusercontent.com/42481638/216899046-0d41d7d6-8e4d-4ed2-9587-b57088af5214.png" width="500">
|
<img src="https://user-images.githubusercontent.com/42481638/216899046-0d41d7d6-8e4d-4ed2-9587-b57088af5214.png" width="500">
|
||||||
<img src="https://user-images.githubusercontent.com/42481638/216899061-b2ea274a-e88c-40ae-bf0b-4450b46e9fea.png" width="500">
|
<img src="https://user-images.githubusercontent.com/42481638/216899061-b2ea274a-e88c-40ae-bf0b-4450b46e9fea.png" width="500">
|
||||||
|
|
@ -105,26 +112,26 @@ cmake -S . -B build -G "<GENERATOR>" -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COM
|
||||||
|
|
||||||
### Building & Setup
|
### Building & Setup
|
||||||
|
|
||||||
* Once Cloned, You will be taken to a prompt like the image below:
|
- Once Cloned, You will be taken to a prompt like the image below:
|
||||||
|
|
||||||
<img src="https://user-images.githubusercontent.com/42481638/216899092-3fe4cec6-a540-44e3-9e1e-3de9c2fffc2f.png" width="500">
|
<img src="https://user-images.githubusercontent.com/42481638/216899092-3fe4cec6-a540-44e3-9e1e-3de9c2fffc2f.png" width="500">
|
||||||
|
|
||||||
* Set the settings to the image below:
|
- Set the settings to the image below:
|
||||||
* Change `Build type: Release`
|
- Change `Build type: Release`
|
||||||
* Change `Name: Release`
|
- Change `Name: Release`
|
||||||
* Change `Toolchain Visual Studio`
|
- Change `Toolchain Visual Studio`
|
||||||
* Change `Generator: Let CMake decide`
|
- Change `Generator: Let CMake decide`
|
||||||
* Change `Build directory: build`
|
- Change `Build directory: build`
|
||||||
|
|
||||||
<img src="https://user-images.githubusercontent.com/42481638/216899164-6cee8482-3d59-428f-b1bc-e6dc793c9b20.png" width="500">
|
<img src="https://user-images.githubusercontent.com/42481638/216899164-6cee8482-3d59-428f-b1bc-e6dc793c9b20.png" width="500">
|
||||||
|
|
||||||
* Click OK; now Clion will build a directory and index your code to allow for IntelliSense. Please be patient.
|
- Click OK; now Clion will build a directory and index your code to allow for IntelliSense. Please be patient.
|
||||||
* Once this process has been completed (No loading bar bottom right), you can now build eden
|
- Once this process has been completed (No loading bar bottom right), you can now build eden
|
||||||
* In the top right, click on the drop-down menu, select all configurations, then select eden
|
- In the top right, click on the drop-down menu, select all configurations, then select eden
|
||||||
|
|
||||||
<img src="https://user-images.githubusercontent.com/42481638/216899226-975048e9-bc6d-4ec1-bc2d-bd8a1e15ed04.png" height="500" >
|
<img src="https://user-images.githubusercontent.com/42481638/216899226-975048e9-bc6d-4ec1-bc2d-bd8a1e15ed04.png" height="500" >
|
||||||
|
|
||||||
* Now run by clicking the play button or pressing Shift+F10, and eden will auto-launch once built.
|
- Now run by clicking the play button or pressing Shift+F10, and eden will auto-launch once built.
|
||||||
|
|
||||||
<img src="https://user-images.githubusercontent.com/42481638/216899275-d514ec6a-e563-470e-81e2-3e04f0429b68.png" width="500">
|
<img src="https://user-images.githubusercontent.com/42481638/216899275-d514ec6a-e563-470e-81e2-3e04f0429b68.png" width="500">
|
||||||
</details>
|
</details>
|
||||||
|
|
@ -132,12 +139,13 @@ cmake -S . -B build -G "<GENERATOR>" -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COM
|
||||||
## Troubleshooting
|
## Troubleshooting
|
||||||
|
|
||||||
If your initial configure failed:
|
If your initial configure failed:
|
||||||
|
|
||||||
- *Carefully* re-read the [dependencies guide](Deps.md)
|
- *Carefully* re-read the [dependencies guide](Deps.md)
|
||||||
- Clear the CPM cache (`.cache/cpm`) and CMake cache (`<build directory>/CMakeCache.txt`)
|
- Clear the CPM cache (`.cache/cpm`) and CMake cache (`<build directory>/CMakeCache.txt`)
|
||||||
- Evaluate the error and find any related settings
|
- Evaluate the error and find any related settings
|
||||||
- See the [CPM docs](CPM.md) to see if you may need to forcefully bundle any packages
|
- See the [CPM docs](CPM.md) to see if you may need to forcefully bundle any packages
|
||||||
|
|
||||||
Otherwise, feel free to ask for help in Revolt or Discord.
|
Otherwise, feel free to ask for help in Stoat or Discord.
|
||||||
|
|
||||||
## Caveats
|
## Caveats
|
||||||
|
|
||||||
|
|
@ -153,20 +161,16 @@ Simply hit Ctrl+B, or the "hammer" icon in the bottom left. To run, hit the "pla
|
||||||
|
|
||||||
If you are using the `UNIX Makefiles` or `Visual Studio 17 2022` as `<GENERATOR>`, you should also add `--parallel` for faster build times.
|
If you are using the `UNIX Makefiles` or `Visual Studio 17 2022` as `<GENERATOR>`, you should also add `--parallel` for faster build times.
|
||||||
|
|
||||||
```
|
```sh
|
||||||
cmake --build build
|
cmake --build build
|
||||||
```
|
```
|
||||||
|
|
||||||
Your compiled executable will be in:
|
Your compiled executable will be in:
|
||||||
|
|
||||||
- `build/bin/eden.exe` for Windows,
|
- `build/bin/eden.exe` for Windows,
|
||||||
- `build/bin/eden.app/Contents/MacOS/eden` for macOS,
|
- `build/bin/eden.app/Contents/MacOS/eden` for macOS,
|
||||||
- and `build/bin/eden` for others.
|
- and `build/bin/eden` for others.
|
||||||
|
|
||||||
## Scripts
|
## Scripts
|
||||||
|
|
||||||
Some platforms have convenience scripts provided for building.
|
Take a look at our [CI scripts](https://github.com/Eden-CI/Workflow). You can use `.ci/common/configure.sh` on any POSIX-compliant shell, but you are heavily encouraged to instead write your own based. It's not really that hard, provided you can read CMake.
|
||||||
|
|
||||||
- **[Linux](scripts/Linux.md)**
|
|
||||||
- **[Windows](scripts/Windows.md)**
|
|
||||||
|
|
||||||
macOS scripts will come soon.
|
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
src/web_service @AleksandrPopovich
|
src/web_service @AleksandrPopovich
|
||||||
src/dynarmic @Lizzie
|
src/dynarmic @Lizzie
|
||||||
src/core @Lizzie @Maufeat @PavelBARABANOV @MrPurple666 @JPikachu
|
src/core @Lizzie @Maufeat @PavelBARABANOV @MrPurple666 @JPikachu
|
||||||
src/core/hle @Maufeat @PavelBARABANOV @SDK-Chan
|
src/core/hle @Maufeat @PavelBARABANOV
|
||||||
src/core/arm @Lizzie @MrPurple666
|
src/core/arm @Lizzie @MrPurple666
|
||||||
src/*_room @AleksandrPopovich
|
src/*_room @AleksandrPopovich
|
||||||
src/video_core @CamilleLaVey @MaranBr @Wildcard @weakboson
|
src/video_core @CamilleLaVey @MaranBr @Wildcard @weakboson
|
||||||
|
|
|
||||||
|
|
@ -1,17 +0,0 @@
|
||||||
# AddPackage
|
|
||||||
|
|
||||||
- `VERSION` (required): The version to get (the tag will be `v${VERSION}`)
|
|
||||||
- `NAME` (required): Name used within the artifacts
|
|
||||||
- `REPO` (required): CI repository, e.g. `crueter-ci/OpenSSL`
|
|
||||||
- `PACKAGE` (required): `find_package` package name
|
|
||||||
- `EXTENSION`: Artifact extension (default `tar.zst`)
|
|
||||||
- `MIN_VERSION`: Minimum version for `find_package`. Only used if platform does not support this package as a bundled artifact
|
|
||||||
- `DISABLED_PLATFORMS`: List of platforms that lack artifacts for this package. Options:
|
|
||||||
* `windows-amd64`
|
|
||||||
* `windows-arm64`
|
|
||||||
* `android`
|
|
||||||
* `solaris-amd64`
|
|
||||||
* `freebsd-amd64`
|
|
||||||
* `linux-amd64`
|
|
||||||
* `linux-aarch64`
|
|
||||||
* `macos-universal`
|
|
||||||
|
|
@ -7,13 +7,14 @@
|
||||||
- `EXTENSION`: Artifact extension (default `tar.zst`)
|
- `EXTENSION`: Artifact extension (default `tar.zst`)
|
||||||
- `MIN_VERSION`: Minimum version for `find_package`. Only used if platform does not support this package as a bundled artifact
|
- `MIN_VERSION`: Minimum version for `find_package`. Only used if platform does not support this package as a bundled artifact
|
||||||
- `DISABLED_PLATFORMS`: List of platforms that lack artifacts for this package. Options:
|
- `DISABLED_PLATFORMS`: List of platforms that lack artifacts for this package. Options:
|
||||||
* `windows-amd64`
|
- `windows-amd64`
|
||||||
* `windows-arm64`
|
- `windows-arm64`
|
||||||
* `mingw-amd64`
|
- `mingw-amd64`
|
||||||
* `mingw-arm64`
|
- `mingw-arm64`
|
||||||
* `android`
|
- `android-x86_64`
|
||||||
* `solaris-amd64`
|
- `android-aarch64`
|
||||||
* `freebsd-amd64`
|
- `solaris-amd64`
|
||||||
* `linux-amd64`
|
- `freebsd-amd64`
|
||||||
* `linux-aarch64`
|
- `linux-amd64`
|
||||||
* `macos-universal`
|
- `linux-aarch64`
|
||||||
|
- `macos-universal`
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,41 @@
|
||||||
|
# AddDependentPackage
|
||||||
|
|
||||||
|
Use `AddDependentPackage` when you have multiple packages that are required to all be from the system, OR bundled. This is useful in cases where e.g. versions must absolutely match.
|
||||||
|
|
||||||
|
## Versioning
|
||||||
|
|
||||||
|
Versioning must be handled by the package itself.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
### Vulkan
|
||||||
|
|
||||||
|
`cpmfile.json`
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"vulkan-headers": {
|
||||||
|
"repo": "KhronosGroup/Vulkan-Headers",
|
||||||
|
"package": "VulkanHeaders",
|
||||||
|
"version": "1.4.317",
|
||||||
|
"hash": "26e0ad8fa34ab65a91ca62ddc54cc4410d209a94f64f2817dcdb8061dc621539a4262eab6387e9b9aa421db3dbf2cf8e2a4b041b696d0d03746bae1f25191272",
|
||||||
|
"git_version": "1.4.342",
|
||||||
|
"tag": "v%VERSION%"
|
||||||
|
},
|
||||||
|
"vulkan-utility-libraries": {
|
||||||
|
"repo": "KhronosGroup/Vulkan-Utility-Libraries",
|
||||||
|
"package": "VulkanUtilityLibraries",
|
||||||
|
"hash": "8147370f964fd82c315d6bb89adeda30186098427bf3efaa641d36282d42a263f31e96e4586bfd7ae0410ff015379c19aa4512ba160630444d3d8553afd1ec14",
|
||||||
|
"git_version": "1.4.342",
|
||||||
|
"tag": "v%VERSION%"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
`CMakeLists.txt`:
|
||||||
|
|
||||||
|
```cmake
|
||||||
|
AddDependentPackages(vulkan-headers vulkan-utility-libraries)
|
||||||
|
```
|
||||||
|
|
||||||
|
If Vulkan Headers are installed, but NOT Vulkan Utility Libraries, then CPMUtil will throw an error.
|
||||||
|
|
@ -22,11 +22,11 @@ If `ci` is `false`:
|
||||||
- `sha` -> `SHA`
|
- `sha` -> `SHA`
|
||||||
- `key` -> `KEY`
|
- `key` -> `KEY`
|
||||||
- `tag` -> `TAG`
|
- `tag` -> `TAG`
|
||||||
* If the tag contains `%VERSION%`, that part will be replaced by the `git_version`, OR `version` if `git_version` is not specified
|
- If the tag contains `%VERSION%`, that part will be replaced by the `git_version`, OR `version` if `git_version` is not specified
|
||||||
- `url` -> `URL`
|
- `url` -> `URL`
|
||||||
- `artifact` -> `ARTIFACT`
|
- `artifact` -> `ARTIFACT`
|
||||||
* If the artifact contains `%VERSION%`, that part will be replaced by the `git_version`, OR `version` if `git_version` is not specified
|
- If the artifact contains `%VERSION%`, that part will be replaced by the `git_version`, OR `version` if `git_version` is not specified
|
||||||
* If the artifact contains `%TAG%`, that part will be replaced by the `tag` (with its replacement already done)
|
- If the artifact contains `%TAG%`, that part will be replaced by the `tag` (with its replacement already done)
|
||||||
- `git_version` -> `GIT_VERSION`
|
- `git_version` -> `GIT_VERSION`
|
||||||
- `git_host` -> `GIT_HOST`
|
- `git_host` -> `GIT_HOST`
|
||||||
- `source_subdir` -> `SOURCE_SUBDIR`
|
- `source_subdir` -> `SOURCE_SUBDIR`
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
- `URL`: The URL to fetch.
|
- `URL`: The URL to fetch.
|
||||||
- `REPO`: The repo to use (`owner/repo`).
|
- `REPO`: The repo to use (`owner/repo`).
|
||||||
- `GIT_HOST`: The Git host to use
|
- `GIT_HOST`: The Git host to use
|
||||||
* Defaults to `github.com`. Do not include the protocol, as HTTPS is enforced.
|
- Defaults to `github.com`. Do not include the protocol, as HTTPS is enforced.
|
||||||
- `TAG`: The tag to fetch, if applicable.
|
- `TAG`: The tag to fetch, if applicable.
|
||||||
- `ARTIFACT`: The name of the artifact, if applicable.
|
- `ARTIFACT`: The name of the artifact, if applicable.
|
||||||
- `SHA`: Commit sha to fetch, if applicable.
|
- `SHA`: Commit sha to fetch, if applicable.
|
||||||
|
|
@ -26,23 +26,23 @@
|
||||||
The following configurations are supported, in descending order of precedence:
|
The following configurations are supported, in descending order of precedence:
|
||||||
|
|
||||||
- `URL`: Bare URL download, useful for custom artifacts
|
- `URL`: Bare URL download, useful for custom artifacts
|
||||||
* If this is set, `GIT_URL` or `REPO` should be set to allow the dependency viewer to link to the project's Git repository.
|
- If this is set, `GIT_URL` or `REPO` should be set to allow the dependency viewer to link to the project's Git repository.
|
||||||
* If this is NOT set, `REPO` must be defined.
|
- If this is NOT set, `REPO` must be defined.
|
||||||
- `REPO + TAG + ARTIFACT`: GitHub release artifact
|
- `REPO + TAG + ARTIFACT`: GitHub release artifact
|
||||||
* The final download URL will be `https://github.com/${REPO}/releases/download/${TAG}/${ARTIFACT}`
|
- The final download URL will be `https://github.com/${REPO}/releases/download/${TAG}/${ARTIFACT}`
|
||||||
* Useful for prebuilt libraries and prefetched archives
|
- Useful for prebuilt libraries and prefetched archives
|
||||||
- `REPO + TAG`: GitHub tag archive
|
- `REPO + TAG`: GitHub tag archive
|
||||||
* The final download URL will be `https://github.com/${REPO}/archive/refs/tags/${TAG}.tar.gz`
|
- The final download URL will be `https://github.com/${REPO}/archive/refs/tags/${TAG}.tar.gz`
|
||||||
* Useful for pinning to a specific tag, better for build identification
|
- Useful for pinning to a specific tag, better for build identification
|
||||||
- `REPO + SHA`: GitHub commit archive
|
- `REPO + SHA`: GitHub commit archive
|
||||||
* The final download URL will be `https://github.com/${REPO}/archive/${SHA}.zip`
|
- The final download URL will be `https://github.com/${REPO}/archive/${SHA}.zip`
|
||||||
* Useful for pinning to a specific commit
|
- Useful for pinning to a specific commit
|
||||||
- `REPO + BRANCH`: GitHub branch archive
|
- `REPO + BRANCH`: GitHub branch archive
|
||||||
* The final download URL will be `https://github.com/${REPO}/archive/refs/heads/${BRANCH}.zip`
|
- The final download URL will be `https://github.com/${REPO}/archive/refs/heads/${BRANCH}.zip`
|
||||||
* Generally not recommended unless the branch is frozen
|
- Generally not recommended unless the branch is frozen
|
||||||
- `REPO`: GitHub master archive
|
- `REPO`: GitHub master archive
|
||||||
* The final download URL will be `https://github.com/${REPO}/archive/refs/heads/master.zip`
|
- The final download URL will be `https://github.com/${REPO}/archive/refs/heads/master.zip`
|
||||||
* Generally not recommended unless the project is dead
|
- Generally not recommended unless the project is dead
|
||||||
|
|
||||||
## Hashing
|
## Hashing
|
||||||
|
|
||||||
|
|
@ -54,20 +54,20 @@ Hashing strategies, descending order of precedence:
|
||||||
|
|
||||||
- `HASH`: Bare hash verification, useful for static downloads e.g. commit archives
|
- `HASH`: Bare hash verification, useful for static downloads e.g. commit archives
|
||||||
- `HASH_SUFFIX`: Download the hash as `${DOWNLOAD_URL}.${HASH_SUFFIX}`
|
- `HASH_SUFFIX`: Download the hash as `${DOWNLOAD_URL}.${HASH_SUFFIX}`
|
||||||
* The downloaded hash *must* match the hash algorithm and contain nothing but the hash; no filenames or extra content.
|
- The downloaded hash *must* match the hash algorithm and contain nothing but the hash; no filenames or extra content.
|
||||||
- `HASH_URL`: Download the hash from a separate URL
|
- `HASH_URL`: Download the hash from a separate URL
|
||||||
|
|
||||||
## Other Options
|
## Other Options
|
||||||
|
|
||||||
- `KEY`: Custom cache key to use (stored as `.cache/cpm/${packagename_lower}/${key}`)
|
- `KEY`: Custom cache key to use (stored as `.cache/cpm/${packagename_lower}/${key}`)
|
||||||
* Default is based on, in descending order of precedence:
|
- Default is based on, in descending order of precedence:
|
||||||
- First 4 characters of the sha
|
- First 4 characters of the sha
|
||||||
- `GIT_VERSION`
|
- `GIT_VERSION`
|
||||||
- Tag
|
- Tag
|
||||||
- `VERSION`
|
- `VERSION`
|
||||||
- Otherwise, CPM defaults will be used. This is not recommended as it doesn't produce reproducible caches
|
- Otherwise, CPM defaults will be used. This is not recommended as it doesn't produce reproducible caches
|
||||||
- `DOWNLOAD_ONLY`: Whether or not to configure the downloaded package via CMake
|
- `DOWNLOAD_ONLY`: Whether or not to configure the downloaded package via CMake
|
||||||
* Useful to turn `OFF` if the project doesn't use CMake
|
- Useful to turn `OFF` if the project doesn't use CMake
|
||||||
- `SOURCE_SUBDIR`: Subdirectory of the project containing a CMakeLists.txt file
|
- `SOURCE_SUBDIR`: Subdirectory of the project containing a CMakeLists.txt file
|
||||||
- `FIND_PACKAGE_ARGUMENTS`: Arguments to pass to the `find_package` call
|
- `FIND_PACKAGE_ARGUMENTS`: Arguments to pass to the `find_package` call
|
||||||
- `BUNDLED_PACKAGE`: Set to `ON` to default to the bundled package
|
- `BUNDLED_PACKAGE`: Set to `ON` to default to the bundled package
|
||||||
|
|
@ -80,12 +80,14 @@ Hashing strategies, descending order of precedence:
|
||||||
|
|
||||||
For each added package, users may additionally force usage of the system/bundled package.
|
For each added package, users may additionally force usage of the system/bundled package.
|
||||||
|
|
||||||
|
- `${package}_DIR`: Path to a separately-downloaded copy of the package. Note that versioning is not checked!
|
||||||
- `${package}_FORCE_SYSTEM`: Require the package to be installed on the system
|
- `${package}_FORCE_SYSTEM`: Require the package to be installed on the system
|
||||||
- `${package}_FORCE_BUNDLED`: Force the package to be fetched and use the bundled version
|
- `${package}_FORCE_BUNDLED`: Force the package to be fetched and use the bundled version
|
||||||
|
|
||||||
## System/Bundled Packages
|
## System/Bundled Packages
|
||||||
|
|
||||||
Descending order of precedence:
|
Descending order of precedence:
|
||||||
|
|
||||||
- If `${package}_FORCE_SYSTEM` is true, requires the package to be on the system
|
- If `${package}_FORCE_SYSTEM` is true, requires the package to be on the system
|
||||||
- If `${package}_FORCE_BUNDLED` is true, forcefully uses the bundled package
|
- If `${package}_FORCE_BUNDLED` is true, forcefully uses the bundled package
|
||||||
- If `CPMUTIL_FORCE_SYSTEM` is true, requires the package to be on the system
|
- If `CPMUTIL_FORCE_SYSTEM` is true, requires the package to be on the system
|
||||||
|
|
@ -101,8 +103,8 @@ URLs:
|
||||||
|
|
||||||
- `GIT_URL`
|
- `GIT_URL`
|
||||||
- `REPO` as a Git repository
|
- `REPO` as a Git repository
|
||||||
* You may optionally specify `GIT_HOST` to use a custom host, e.g. `GIT_HOST git.crueter.xyz`. Note that the git host MUST be GitHub-like in its artifact/archive downloads, e.g. Forgejo
|
- You may optionally specify `GIT_HOST` to use a custom host, e.g. `GIT_HOST git.crueter.xyz`. Note that the git host MUST be GitHub-like in its artifact/archive downloads, e.g. Forgejo
|
||||||
* If `GIT_HOST` is unspecified, defaults to `github.com`
|
- If `GIT_HOST` is unspecified, defaults to `github.com`
|
||||||
- `URL`
|
- `URL`
|
||||||
|
|
||||||
Versions (bundled):
|
Versions (bundled):
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
# AddQt
|
||||||
|
|
||||||
|
Simply call `AddQt(<Qt Version>)` before any Qt `find_package` calls and everything will be set up for you. On Linux, the bundled Qt library is built as a shared library, and provided you have OpenSSL and X11, everything should just work.
|
||||||
|
|
||||||
|
On Windows, MinGW, and MacOS, Qt is bundled as a static library. No further action is needed, as the provided libraries automatically integrate the Windows/Cocoa plugins, alongside the corresponding Multimedia and Network plugins.
|
||||||
|
|
||||||
|
## Modules
|
||||||
|
|
||||||
|
The following modules are bundled into these Qt builds:
|
||||||
|
|
||||||
|
- Base (Gui, Core, Widgets, Network)
|
||||||
|
- Multimedia
|
||||||
|
- Declarative (Quick, QML)
|
||||||
|
- Linux: Wayland client
|
||||||
|
|
||||||
|
Each platform has the corresponding QPA built in and set as the default as well. This means you don't need to add `Q_IMPORT_PLUGIN`!
|
||||||
|
|
||||||
|
## Example
|
||||||
|
|
||||||
|
See an example in the [`tests/qt`](https://git.crueter.xyz/CMake/CPMUtil/src/branch/master/tests/qt/CMakeLists.txt) directory.
|
||||||
|
|
||||||
|
## Versions
|
||||||
|
|
||||||
|
The following versions have available builds:
|
||||||
|
|
||||||
|
- 6.9.3
|
||||||
|
|
||||||
|
See [`crueter-ci/Qt`](https://github.com/crueter-ci/Qt) for an updated list at any time.
|
||||||
|
|
@ -5,17 +5,19 @@ CPMUtil is a wrapper around CPM that aims to reduce boilerplate and add useful u
|
||||||
Global Options:
|
Global Options:
|
||||||
|
|
||||||
- `CPMUTIL_FORCE_SYSTEM` (default `OFF`): Require all CPM dependencies to use system packages. NOT RECOMMENDED!
|
- `CPMUTIL_FORCE_SYSTEM` (default `OFF`): Require all CPM dependencies to use system packages. NOT RECOMMENDED!
|
||||||
* You may optionally override this (section)
|
- You may optionally override this (section)
|
||||||
- `CPMUTIL_FORCE_BUNDLED` (default `ON` on MSVC and Android, `OFF` elsewhere): Require all CPM dependencies to use bundled packages.
|
- `CPMUTIL_FORCE_BUNDLED` (default `ON` on MSVC and Android, `OFF` elsewhere): Require all CPM dependencies to use bundled packages.
|
||||||
|
|
||||||
You are highly encouraged to read AddPackage first, even if you plan to only interact with CPMUtil via `AddJsonPackage`.
|
You are highly encouraged to read AddPackage first, even if you plan to only interact with CPMUtil via `AddJsonPackage`.
|
||||||
|
|
||||||
<!-- TOC -->
|
|
||||||
- [AddPackage](#addpackage)
|
- [AddPackage](#addpackage)
|
||||||
- [AddCIPackage](#addcipackage)
|
- [AddCIPackage](#addcipackage)
|
||||||
- [AddJsonPackage](#addjsonpackage)
|
- [AddJsonPackage](#addjsonpackage)
|
||||||
|
- [AddQt](#addqt)
|
||||||
- [Lists](#lists)
|
- [Lists](#lists)
|
||||||
<!-- /TOC -->
|
- [For Packagers](#for-packagers)
|
||||||
|
- [Network Sandbox](#network-sandbox)
|
||||||
|
- [Unsandboxed](#unsandboxed)
|
||||||
|
|
||||||
## AddPackage
|
## AddPackage
|
||||||
|
|
||||||
|
|
@ -29,6 +31,14 @@ The core of CPMUtil is the [`AddPackage`](./AddPackage.md) function. [`AddPackag
|
||||||
|
|
||||||
[`AddJsonPackage`](./AddJsonPackage.md) is the recommended method of usage for CPMUtil.
|
[`AddJsonPackage`](./AddJsonPackage.md) is the recommended method of usage for CPMUtil.
|
||||||
|
|
||||||
|
## AddDependentPackage
|
||||||
|
|
||||||
|
[`AddDependentPackage`](./AddDependentPackage.md) allows you to add multiple packages such that all of them must be from the system OR bundled.
|
||||||
|
|
||||||
|
## AddQt
|
||||||
|
|
||||||
|
[`AddQt`](./AddQt.md) adds a specific version of Qt to your project.
|
||||||
|
|
||||||
## Lists
|
## Lists
|
||||||
|
|
||||||
CPMUtil will create three lists of dependencies where `AddPackage` or similar was used. Each is in order of addition.
|
CPMUtil will create three lists of dependencies where `AddPackage` or similar was used. Each is in order of addition.
|
||||||
|
|
@ -36,11 +46,25 @@ CPMUtil will create three lists of dependencies where `AddPackage` or similar wa
|
||||||
- `CPM_PACKAGE_NAMES`: The names of packages included by CPMUtil
|
- `CPM_PACKAGE_NAMES`: The names of packages included by CPMUtil
|
||||||
- `CPM_PACKAGE_URLS`: The URLs to project/repo pages of packages
|
- `CPM_PACKAGE_URLS`: The URLs to project/repo pages of packages
|
||||||
- `CPM_PACKAGE_SHAS`: Short version identifiers for each package
|
- `CPM_PACKAGE_SHAS`: Short version identifiers for each package
|
||||||
* If the package was included as a system package, ` (system)` is appended thereafter
|
- If the package was included as a system package, `(system)` is appended thereafter
|
||||||
* Packages whose versions can't be deduced will be left as `unknown`.
|
- Packages whose versions can't be deduced will be left as `unknown`.
|
||||||
|
|
||||||
For an example of how this might be implemented in an application, see Eden's implementation:
|
For an example of how this might be implemented in an application, see Eden's implementation:
|
||||||
|
|
||||||
- [`dep_hashes.h.in`](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/src/dep_hashes.h.in)
|
- [`dep_hashes.h.in`](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/src/dep_hashes.h.in)
|
||||||
- [`GenerateDepHashes.cmake`](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/CMakeModules/GenerateDepHashes.cmake)
|
- [`GenerateDepHashes.cmake`](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/CMakeModules/GenerateDepHashes.cmake)
|
||||||
- [`deps_dialog.cpp`](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/src/yuzu/deps_dialog.cpp)
|
- [`deps_dialog.cpp`](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/src/yuzu/deps_dialog.cpp)
|
||||||
|
|
||||||
|
## For Packagers
|
||||||
|
|
||||||
|
If you are packaging a project that uses CPMUtil, read this!
|
||||||
|
|
||||||
|
### Network Sandbox
|
||||||
|
|
||||||
|
For sandboxed environments (e.g. Gentoo, nixOS) you must install all dependencies to the system beforehand and set `-DCPMUTIL_FORCE_SYSTEM=ON`. If a dependency is missing, get creating!
|
||||||
|
|
||||||
|
Alternatively, if CPMUtil pulls in a package that has no suitable way to install or use a system version, download it separately and pass `-DPackageName_DIR=/path/to/downloaded/dir` (e.g. shaders)
|
||||||
|
|
||||||
|
### Unsandboxed
|
||||||
|
|
||||||
|
For others (AUR, MPR, etc). CPMUtil will handle everything for you, including if some of the project's dependencies are missing from your distribution's repositories. That is pretty much half the reason I created this behemoth, after all.
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
# Caveats
|
# Caveats
|
||||||
|
|
||||||
<!-- TOC -->
|
<!-- TOC -->
|
||||||
- [Caveats](#caveats)
|
|
||||||
- [Arch Linux](#arch-linux)
|
- [Arch Linux](#arch-linux)
|
||||||
- [Gentoo Linux](#gentoo-linux)
|
- [Gentoo Linux](#gentoo-linux)
|
||||||
- [macOS](#macos)
|
- [macOS](#macos)
|
||||||
|
|
@ -11,7 +10,11 @@
|
||||||
- [FreeBSD](#freebsd)
|
- [FreeBSD](#freebsd)
|
||||||
- [NetBSD](#netbsd)
|
- [NetBSD](#netbsd)
|
||||||
- [MSYS2](#msys2)
|
- [MSYS2](#msys2)
|
||||||
- [Windows 8.1 and below](#windows-81-and-below)
|
- [RedoxOS](#redoxos)
|
||||||
|
- [Windows](#windows)
|
||||||
|
- [Windows 7, Windows 8 and Windows 8.1](#windows-7-windows-8-and-windows-81)
|
||||||
|
- [Windows Vista and below](#windows-vista-and-below)
|
||||||
|
- [Windows on ARM](#windows-on-arm)
|
||||||
<!-- /TOC -->
|
<!-- /TOC -->
|
||||||
|
|
||||||
## Arch Linux
|
## Arch Linux
|
||||||
|
|
@ -49,6 +52,7 @@ export PATH="$PATH:$PWD"
|
||||||
```
|
```
|
||||||
|
|
||||||
Default MESA is a bit outdated, the following environment variables should be set for a smoother experience:
|
Default MESA is a bit outdated, the following environment variables should be set for a smoother experience:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
export MESA_GL_VERSION_OVERRIDE=4.6
|
export MESA_GL_VERSION_OVERRIDE=4.6
|
||||||
export MESA_GLSL_VERSION_OVERRIDE=460
|
export MESA_GLSL_VERSION_OVERRIDE=460
|
||||||
|
|
@ -77,8 +81,12 @@ For this reason this patch is NOT applied to default on all platforms (for obvio
|
||||||
|
|
||||||
Still will not run flawlessly until `mesa-24` is available. Modify CMakeCache.txt with the `.so` of libGL and libGLESv2 by doing the incredibly difficult task of copy pasting them (`cp /boot/system/lib/libGL.so .`)
|
Still will not run flawlessly until `mesa-24` is available. Modify CMakeCache.txt with the `.so` of libGL and libGLESv2 by doing the incredibly difficult task of copy pasting them (`cp /boot/system/lib/libGL.so .`)
|
||||||
|
|
||||||
|
If you have `quazip1_qt6_devel`, uninstall it. It may call `Core5Compat` on CMake which is wrongly packaged.
|
||||||
|
|
||||||
## OpenBSD
|
## OpenBSD
|
||||||
|
|
||||||
|
System boost doesn't have `context` (as of 7.8); so you may need to specify `-DYUZU_USE_CPM=ON -DBoost_FORCE_BUNDLED=ON`.
|
||||||
|
|
||||||
After configuration, you may need to modify `externals/ffmpeg/CMakeFiles/ffmpeg-build/build.make` to use `-j$(nproc)` instead of just `-j`.
|
After configuration, you may need to modify `externals/ffmpeg/CMakeFiles/ffmpeg-build/build.make` to use `-j$(nproc)` instead of just `-j`.
|
||||||
|
|
||||||
`-lc++-experimental` doesn't exist in OpenBSD but the LLVM driver still tries to link against it, to solve just symlink `ln -s /usr/lib/libc++.a /usr/lib/libc++experimental.a`. Builds are currently not working due to lack of `std::jthread` and such, either compile libc++ manually or wait for ports to catch up.
|
`-lc++-experimental` doesn't exist in OpenBSD but the LLVM driver still tries to link against it, to solve just symlink `ln -s /usr/lib/libc++.a /usr/lib/libc++experimental.a`. Builds are currently not working due to lack of `std::jthread` and such, either compile libc++ manually or wait for ports to catch up.
|
||||||
|
|
@ -91,19 +99,33 @@ Eden is not currently available as a port on FreeBSD, though it is in the works.
|
||||||
|
|
||||||
The available OpenSSL port (3.0.17) is out-of-date, and using a bundled static library instead is recommended; to do so, add `-DYUZU_USE_BUNDLED_OPENSSL=ON` to your CMake configure command.
|
The available OpenSSL port (3.0.17) is out-of-date, and using a bundled static library instead is recommended; to do so, add `-DYUZU_USE_BUNDLED_OPENSSL=ON` to your CMake configure command.
|
||||||
|
|
||||||
|
Gamepad/controllers may not work on 15.0, this is due to an outdated SDL not responding well to the new `usbhid(2)` driver. To workaround this simply disable `usbhid(2)` (add the following to `/boot/loader.conf`):
|
||||||
|
|
||||||
|
```sh
|
||||||
|
hw.usb.usbhid.enable="0"
|
||||||
|
```
|
||||||
|
|
||||||
## NetBSD
|
## NetBSD
|
||||||
|
|
||||||
Install `pkgin` if not already `pkg_add pkgin`, see also the general [pkgsrc guide](https://www.netbsd.org/docs/pkgsrc/using.html). For NetBSD 10.1 provide `echo 'PKG_PATH="https://cdn.netbsd.org/pub/pkgsrc/packages/NetBSD/x86_64/10.0_2025Q3/All/"' >/etc/pkg_install.conf`. If `pkgin` is taking too much time consider adding the following to `/etc/rc.conf`:
|
Install `pkgin` if not already `pkg_add pkgin`, see also the general [pkgsrc guide](https://www.netbsd.org/docs/pkgsrc/using.html). For NetBSD 10.1 provide `echo 'PKG_PATH="https://cdn.netbsd.org/pub/pkgsrc/packages/NetBSD/amd64/10.1/All/"' >/etc/pkg_install.conf`. If `pkgin` is taking too much time consider adding the following to `/etc/rc.conf`:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
ip6addrctl=YES
|
ip6addrctl=YES
|
||||||
ip6addrctl_policy=ipv4_prefer
|
ip6addrctl_policy=ipv4_prefer
|
||||||
```
|
```
|
||||||
|
|
||||||
System provides a default `g++-10` which doesn't support the current C++ codebase; install `clang-19` with `pkgin install clang-19`. Then build with `cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang -B build`.
|
System provides a default `g++-10` which doesn't support the current C++ codebase; install `clang-19` with `pkgin install clang-19`. Or install `gcc14` (or `gcc15` with current pkgsrc). Provided that, the following CMake commands may work:
|
||||||
|
|
||||||
|
- `cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -Bbuild`
|
||||||
|
- `cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=/usr/pkg/gcc14/bin/gcc -DCMAKE_CXX_COMPILER=/usr/pkg/gcc14/bin/g++ -Bbuild`
|
||||||
|
- `cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=/usr/pkg/gcc15/bin/gcc -DCMAKE_CXX_COMPILER=/usr/pkg/gcc15/bin/g++ -Bbuild`
|
||||||
|
|
||||||
Make may error out when generating C++ headers of SPIRV shaders, hence it's recommended to use `gmake` over the default system one.
|
Make may error out when generating C++ headers of SPIRV shaders, hence it's recommended to use `gmake` over the default system one.
|
||||||
|
|
||||||
|
[parallel/spirv-tools](https://iso.us.netbsd.org/pub/pkgsrc/current/pkgsrc/parallel/spirv-tools/index.html) isn't available in binary form and must be built from source.
|
||||||
|
|
||||||
glslang is not available on NetBSD, to circumvent this simply build glslang by yourself:
|
glslang is not available on NetBSD, to circumvent this simply build glslang by yourself:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
pkgin python313
|
pkgin python313
|
||||||
git clone --depth=1 https://github.com/KhronosGroup/glslang.git
|
git clone --depth=1 https://github.com/KhronosGroup/glslang.git
|
||||||
|
|
@ -114,13 +136,17 @@ cmake --build build -- -j`nproc`
|
||||||
cmake --install build
|
cmake --install build
|
||||||
```
|
```
|
||||||
|
|
||||||
# DragonFlyBSD
|
However, pkgsrc is highly recommended, see [getting pkgsrc](https://iso.us.netbsd.org/pub/pkgsrc/current/pkgsrc/doc/pkgsrc.html#getting). You must get `current` not the `2025Q2` version.
|
||||||
|
|
||||||
|
## DragonFlyBSD
|
||||||
|
|
||||||
If `libstdc++.so.6` is not found (`GLIBCXX_3.4.30`) then attempt:
|
If `libstdc++.so.6` is not found (`GLIBCXX_3.4.30`) then attempt:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
rm /usr/local/lib/gcc11/libstdc++.so.6
|
rm /usr/local/lib/gcc11/libstdc++.so.6
|
||||||
ln -s /usr/local/lib/gcc14/libstdc++.so /usr/local/lib/gcc11/libstdc++.so.6
|
ln -s /usr/local/lib/gcc14/libstdc++.so /usr/local/lib/gcc11/libstdc++.so.6
|
||||||
```
|
```
|
||||||
|
|
||||||
This may have unforeseen consequences of which we don't need to worry about for now.
|
This may have unforeseen consequences of which we don't need to worry about for now.
|
||||||
|
|
||||||
Default `g++` (and the libstdc++) is too outdated - so install `gcc14` and redirect CMake to the new compiler toolchain `-DCMAKE_CXX_COMPILER=gcc14 -DCMAKE_C_COMPILER=g++14`.
|
Default `g++` (and the libstdc++) is too outdated - so install `gcc14` and redirect CMake to the new compiler toolchain `-DCMAKE_CXX_COMPILER=gcc14 -DCMAKE_C_COMPILER=g++14`.
|
||||||
|
|
@ -131,13 +157,9 @@ If build hangs, use `hammer2 bulkfree`.
|
||||||
|
|
||||||
## MSYS2
|
## MSYS2
|
||||||
|
|
||||||
`qt6-static` isn't supported yet.
|
Only the `MINGW64` environment is tested (or `CLANGARM64` on ARM); however, all of the others should work (in theory) sans `MINGW32`.
|
||||||
|
|
||||||
Only the `MINGW64` environment is tested; however, all of the others should work (in theory) sans `MINGW32`.
|
When packaging an MSYS2 build that is NOT fully static, you will need to copy all dependent DLLs recursively alongside the `windeployqt6`; for example:
|
||||||
|
|
||||||
Currently, only FFmpeg can be used as a system dependency; the others will result in linker errors.
|
|
||||||
|
|
||||||
When packaging an MSYS2 build, you will need to copy all dependent DLLs recursively alongside the `windeployqt6`; for example:
|
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
# MSYS_TOOLCHAIN is typically just mingw64
|
# MSYS_TOOLCHAIN is typically just mingw64
|
||||||
|
|
@ -186,14 +208,24 @@ windeployqt6 --no-compiler-runtime --no-opengl-sw --no-system-dxc-compiler \
|
||||||
find ./*/ -name "*.dll" | while read -r dll; do deps "$dll"; done
|
find ./*/ -name "*.dll" | while read -r dll; do deps "$dll"; done
|
||||||
```
|
```
|
||||||
|
|
||||||
## Windows 8.1 and below
|
|
||||||
|
|
||||||
DirectX 12 is not available - simply copy and paste a random DLL and name it `d3d12.dll`.
|
|
||||||
|
|
||||||
Install [Qt6 compatibility libraries](github.com/ANightly/qt6windows7) specifically Qt 6.9.5.
|
|
||||||
|
|
||||||
## RedoxOS
|
## RedoxOS
|
||||||
|
|
||||||
The package install may randomly hang at times, in which case it has to be restarted. ALWAYS do a `sudo pkg update` or the chances of it hanging will be close to 90%. If "multiple" installs fail at once, try installing 1 by 1 the packages.
|
The package install may randomly hang at times, in which case it has to be restarted. ALWAYS do a `sudo pkg update` or the chances of it hanging will be close to 90%. If "multiple" installs fail at once, try installing 1 by 1 the packages.
|
||||||
|
|
||||||
When CMake invokes certain file syscalls - it may sometimes cause crashes or corruptions on the (kernel?) address space - so reboot the system if there is a "hang" in CMake.
|
When CMake invokes certain file syscalls - it may sometimes cause crashes or corruptions on the (kernel?) address space - so reboot the system if there is a "hang" in CMake.
|
||||||
|
|
||||||
|
## Windows
|
||||||
|
|
||||||
|
### Windows 7, Windows 8 and Windows 8.1
|
||||||
|
|
||||||
|
DirectX 12 is not available - simply copy and paste a random DLL and name it `d3d12.dll`.
|
||||||
|
|
||||||
|
Install [Qt6 compatibility libraries](github.com/ANightly/qt6windows7) specifically Qt 6.9.5.
|
||||||
|
|
||||||
|
### Windows Vista and below
|
||||||
|
|
||||||
|
No support for Windows Vista (or below) is present at the moment. Check back later.
|
||||||
|
|
||||||
|
### Windows on ARM
|
||||||
|
|
||||||
|
If you're using Snapdragon X or 8CX, use the [the Vulkan translation layer](https://apps.microsoft.com/detail/9nqpsl29bfff?hl=en-us&gl=USE) only if the stock drivers do not work. And of course always keep your system up-to-date.
|
||||||
|
|
|
||||||
|
|
@ -1,79 +0,0 @@
|
||||||
# Coding guidelines
|
|
||||||
|
|
||||||
These are mostly "suggestions", if you feel like your code is readable, comprehensible to others; and most importantly doesn't result in unreadable spaghetti you're fine to go.
|
|
||||||
|
|
||||||
But for new developers you may find that following these guidelines will make everything x10 easier.
|
|
||||||
|
|
||||||
## Naming conventions
|
|
||||||
|
|
||||||
Simply put, types/classes are named as `PascalCase`, same for methods and functions like `AddElement`. Variables are named `like_this_snake_case` and constants are `IN_SCREAMING_CASE`.
|
|
||||||
|
|
||||||
Except for Qt MOC where `functionName` is preferred.
|
|
||||||
|
|
||||||
Template typenames prefer short names like `T`, `I`, `U`, if a longer name is required either `Iterator` or `perform_action` are fine as well.
|
|
||||||
|
|
||||||
Macros must always be in `SCREAMING_CASE`. Do not use short letter macros as systems like Solaris will conflict with them; a good rule of thumb is >5 characters per macro - i.e `THIS_MACRO_IS_GOOD`, `AND_ALSO_THIS_ONE`.
|
|
||||||
|
|
||||||
Try not using hungarian notation, if you're able.
|
|
||||||
|
|
||||||
## Formatting
|
|
||||||
|
|
||||||
Do not put if/while/etc braces after lines:
|
|
||||||
```c++
|
|
||||||
// no dont do this
|
|
||||||
if (thing)
|
|
||||||
{
|
|
||||||
some(); // ...
|
|
||||||
}
|
|
||||||
|
|
||||||
// do this
|
|
||||||
if (thing) {
|
|
||||||
some(); // ...
|
|
||||||
}
|
|
||||||
|
|
||||||
// or this
|
|
||||||
if (thing)
|
|
||||||
some(); // ...
|
|
||||||
|
|
||||||
// this is also ok
|
|
||||||
if (thing) some();
|
|
||||||
```
|
|
||||||
|
|
||||||
Brace rules are lax, if you can get the point across, do it:
|
|
||||||
|
|
||||||
```c++
|
|
||||||
// this is fine
|
|
||||||
do {
|
|
||||||
if (thing) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
} while (other);
|
|
||||||
|
|
||||||
// this is also ok --- albeit a bit more dense
|
|
||||||
do if (thing) return 0; while (other);
|
|
||||||
|
|
||||||
// ok as well
|
|
||||||
do {
|
|
||||||
if (thing) return 0;
|
|
||||||
} while (other);
|
|
||||||
```
|
|
||||||
|
|
||||||
There is no 80-column limit but preferably be mindful of other developer's readability (like don't just put everything onto one line).
|
|
||||||
|
|
||||||
```c++
|
|
||||||
// someone is going to be mad due to this
|
|
||||||
SDL_AudioSpec obtained;
|
|
||||||
device_name.empty() ? device = SDL_OpenAudioDevice(nullptr, capture, &spec, &obtained, false) : device = SDL_OpenAudioDevice(device_name.c_str(), capture, &spec, &obtained, false);
|
|
||||||
|
|
||||||
// maybe consider this
|
|
||||||
SDL_AudioSpec obtained;
|
|
||||||
if (device_name.empty()) {
|
|
||||||
device = SDL_OpenAudioDevice(nullptr, capture, &spec, &obtained, false);
|
|
||||||
} else {
|
|
||||||
device = SDL_OpenAudioDevice(device_name.c_str(), capture, &spec, &obtained, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
// or this is fine as well
|
|
||||||
SDL_AudioSpec obtained;
|
|
||||||
device = SDL_OpenAudioDevice(device_name.empty() ? nullptr : device_name.c_str(), capture, &spec, &obtained, false);
|
|
||||||
```
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
# Cross Compile
|
# Cross compiling
|
||||||
|
|
||||||
## ARM64
|
General guide for cross compiling.
|
||||||
|
|
||||||
|
## Debian ARM64
|
||||||
|
|
||||||
A painless guide for cross compilation (or to test NCE) from a x86_64 system without polluting your main.
|
A painless guide for cross compilation (or to test NCE) from a x86_64 system without polluting your main.
|
||||||
|
|
||||||
|
|
|
||||||
97
docs/Deps.md
|
|
@ -1,42 +1,44 @@
|
||||||
# Dependencies
|
# Dependencies
|
||||||
|
|
||||||
To build Eden, you MUST have a C++ compiler.
|
To build Eden, you MUST have a C++ compiler.
|
||||||
|
|
||||||
* On Linux, this is usually [GCC](https://gcc.gnu.org/) 11+ or [Clang](https://clang.llvm.org/) v14+
|
* On Linux, this is usually [GCC](https://gcc.gnu.org/) 11+ or [Clang](https://clang.llvm.org/) v14+
|
||||||
- GCC 12 also requires Clang 14+
|
* GCC 12 also requires Clang 14+
|
||||||
* On Windows, we support:
|
* On Windows, we support:
|
||||||
- **[MSVC](https://visualstudio.microsoft.com/downloads/)** (default)
|
* **[MSVC](https://visualstudio.microsoft.com/downloads/)** (default)
|
||||||
- It's STRONGLY RECOMMENDED to use the **Community** option and **Visual Studio 2022**
|
* It's STRONGLY RECOMMENDED to use the **Community** option and **Visual Studio 2022**
|
||||||
- You need to install: **[Desktop development with C++](https://learn.microsoft.com/en-us/cpp/build/vscpp-step-0-installation?view=msvc-170)**
|
* You need to install: **[Desktop development with C++](https://learn.microsoft.com/en-us/cpp/build/vscpp-step-0-installation?view=msvc-170)**
|
||||||
- **[clang-cl](https://learn.microsoft.com/en-us/cpp/build/clang-support-msbuild?view=msvc-180)**
|
* **[clang-cl](https://learn.microsoft.com/en-us/cpp/build/clang-support-msbuild?view=msvc-180)**
|
||||||
- You need to install: **C++ Clang tools for Windows**
|
* You need to install: **C++ Clang tools for Windows**
|
||||||
- **[MSYS2](https://www.msys2.org)** (experimental)
|
* **[MSYS2](https://www.msys2.org)**
|
||||||
* On macOS, this is Apple Clang
|
* On macOS, this is Apple Clang
|
||||||
- This can be installed with `xcode-select --install`
|
* This can be installed with `xcode-select --install`
|
||||||
|
|
||||||
The following additional tools are also required:
|
The following additional tools are also required:
|
||||||
|
|
||||||
* **[CMake](https://www.cmake.org/)** 3.22+ - already included with the Android SDK
|
* **[CMake](https://www.cmake.org/)** 3.22+ - already included with the Android SDK
|
||||||
* **[Git](https://git-scm.com/)** for version control
|
* **[Git](https://git-scm.com/)** for version control
|
||||||
- **[Windows installer](https://gitforwindows.org)**
|
* **[Windows installer](https://gitforwindows.org)**
|
||||||
* **[Python3](https://www.python.org/downloads/)** 3.10+ - necessary to download external repositories
|
* **[Python3](https://www.python.org/downloads/)** 3.10+ - necessary to download external repositories
|
||||||
* On Windows, you must install the **[Vulkan SDK](https://vulkan.lunarg.com/sdk/home#windows)** as well
|
* On Windows, you must install the **[Vulkan SDK](https://vulkan.lunarg.com/sdk/home#windows)** as well
|
||||||
- *A convenience script to install the latest SDK is provided in:*
|
* *A convenience script to install the latest SDK is provided in:*
|
||||||
- `tools/windows/install-vulkan-sdk.ps1` (for PowerShell 5+)
|
* `tools/windows/install-vulkan-sdk.ps1` (for PowerShell 5+)
|
||||||
- `tools/windows/install-vulkan-sdk.sh` (for MSYS2, Git Bash, etc)
|
* `tools/windows/install-vulkan-sdk.sh` (for Git Bash, etc)
|
||||||
|
|
||||||
If you are on desktop and plan to use the Qt frontend, you *must* install Qt 6, and optionally Qt Creator (the **RECOMMENDED** IDE for building)
|
If you are on desktop and plan to use the Qt frontend, you *must* install Qt 6, and optionally Qt Creator (the **RECOMMENDED** IDE for building)
|
||||||
|
|
||||||
* On Linux, *BSD and macOS, this can be done by the package manager
|
* On Linux, *BSD and macOS, this can be done by the package manager
|
||||||
- If you wish to use Qt Creator, append `qtcreator` or `qt-creator` to the commands seen below.
|
* If you wish to use Qt Creator, append `qtcreator` or `qt-creator` to the commands seen below.
|
||||||
* MSVC/clang-cl users on Windows must install through the official [Qt](https://www.qt.io/download-qt-installer-oss) installer
|
* MSVC/clang-cl users on Windows must install through the official [Qt](https://www.qt.io/download-qt-installer-oss) installer
|
||||||
* Linux and macOS users may choose to use the installer as well.
|
* Linux and macOS users may choose to use the installer as well.
|
||||||
* MSYS2 can also install Qt 6 via the package manager
|
* MSYS2 can also install Qt 6 via the package manager
|
||||||
|
|
||||||
If you are on Windows, a convenience script to install MSVC, MSYS2, Qt, all necessary packages for MSYS2, and set up a zsh environment with useful keybinds and aliases can be found [here](https://git.crueter.xyz/scripts/windev).
|
* For help setting up Qt Creator, run `./install.sh -h qtcreator`
|
||||||
- For help setting up Qt Creator, run `./install.sh -h qtcreator`
|
|
||||||
|
|
||||||
If you are on **Windows** and building with **MSVC** or **clang-cl**, you may go [back home](Build.md) and continue.
|
If you are on **Windows** and building with **MSVC** or **clang-cl**, you may go [back home](Build.md) and continue.
|
||||||
|
|
||||||
## Externals
|
## Externals
|
||||||
|
|
||||||
The following are handled by Eden's externals:
|
The following are handled by Eden's externals:
|
||||||
|
|
||||||
* [FFmpeg](https://ffmpeg.org/) (should use `-DYUZU_USE_EXTERNAL_FFMPEG=ON`)
|
* [FFmpeg](https://ffmpeg.org/) (should use `-DYUZU_USE_EXTERNAL_FFMPEG=ON`)
|
||||||
|
|
@ -57,6 +59,7 @@ All other dependencies will be downloaded and built by [CPM](https://github.com/
|
||||||
* [MbedTLS](https://github.com/Mbed-TLS/mbedtls) 3+
|
* [MbedTLS](https://github.com/Mbed-TLS/mbedtls) 3+
|
||||||
|
|
||||||
Vulkan 1.3.274+ is also needed:
|
Vulkan 1.3.274+ is also needed:
|
||||||
|
|
||||||
* [VulkanUtilityLibraries](https://github.com/KhronosGroup/Vulkan-Utility-Libraries)
|
* [VulkanUtilityLibraries](https://github.com/KhronosGroup/Vulkan-Utility-Libraries)
|
||||||
* [VulkanHeaders](https://github.com/KhronosGroup/Vulkan-Headers)
|
* [VulkanHeaders](https://github.com/KhronosGroup/Vulkan-Headers)
|
||||||
* [SPIRV-Tools](https://github.com/KhronosGroup/SPIRV-Tools)
|
* [SPIRV-Tools](https://github.com/KhronosGroup/SPIRV-Tools)
|
||||||
|
|
@ -71,18 +74,21 @@ Certain other dependencies will be fetched by CPM regardless. System packages *c
|
||||||
* [VulkanMemoryAllocator](https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator)
|
* [VulkanMemoryAllocator](https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator)
|
||||||
* [sirit](https://github.com/eden-emulator/sirit)
|
* [sirit](https://github.com/eden-emulator/sirit)
|
||||||
* [httplib](https://github.com/yhirose/cpp-httplib) - if `ENABLE_UPDATE_CHECKER` or `ENABLE_WEB_SERVICE` are on
|
* [httplib](https://github.com/yhirose/cpp-httplib) - if `ENABLE_UPDATE_CHECKER` or `ENABLE_WEB_SERVICE` are on
|
||||||
- This package is known to be broken on the AUR.
|
* This package is known to be broken on the AUR.
|
||||||
* [cpp-jwt](https://github.com/arun11299/cpp-jwt) 1.4+ - if `ENABLE_WEB_SERVICE` is on
|
* [cpp-jwt](https://github.com/arun11299/cpp-jwt) 1.4+ - if `ENABLE_WEB_SERVICE` is on
|
||||||
* [unordered-dense](https://github.com/martinus/unordered_dense)
|
* [unordered-dense](https://github.com/martinus/unordered_dense)
|
||||||
* [mcl](https://github.com/azahar-emu/mcl) - subject to removal
|
* [mcl](https://github.com/azahar-emu/mcl) - subject to removal
|
||||||
|
|
||||||
On amd64:
|
On amd64:
|
||||||
|
|
||||||
* [xbyak](https://github.com/herumi/xbyak) - 7.22 or earlier is recommended
|
* [xbyak](https://github.com/herumi/xbyak) - 7.22 or earlier is recommended
|
||||||
|
|
||||||
On aarch64 OR if `DYNARMIC_TESTS` is on:
|
On aarch64 OR if `DYNARMIC_TESTS` is on:
|
||||||
|
|
||||||
* [oaknut](https://github.com/merryhime/oaknut) 2.0.1+
|
* [oaknut](https://github.com/merryhime/oaknut) 2.0.1+
|
||||||
|
|
||||||
On riscv64:
|
On riscv64:
|
||||||
|
|
||||||
* [biscuit](https://github.com/lioncash/biscuit) 0.9.1+
|
* [biscuit](https://github.com/lioncash/biscuit) 0.9.1+
|
||||||
|
|
||||||
## Commands
|
## Commands
|
||||||
|
|
@ -98,7 +104,7 @@ Click on the arrows to expand.
|
||||||
|
|
||||||
GURU must be enabled:
|
GURU must be enabled:
|
||||||
|
|
||||||
```
|
```sh
|
||||||
sudo emerge -a app-eselect/eselect-repository
|
sudo emerge -a app-eselect/eselect-repository
|
||||||
sudo eselect repository enable guru
|
sudo eselect repository enable guru
|
||||||
sudo emaint sync -r guru
|
sudo emaint sync -r guru
|
||||||
|
|
@ -124,17 +130,18 @@ sudo emerge -a \
|
||||||
virtual/pkgconfig
|
virtual/pkgconfig
|
||||||
```
|
```
|
||||||
|
|
||||||
- On `amd64`, also add `dev-libs/xbyak`
|
* On `amd64`, also add `dev-libs/xbyak`
|
||||||
- On `riscv64`, also add `dev-libs/biscuit` (currently unavailable)
|
* On `riscv64`, also add `dev-libs/biscuit` (currently unavailable)
|
||||||
- On `aarch64`, also add `dev-libs/oaknut`
|
* On `aarch64`, also add `dev-libs/oaknut`
|
||||||
- If tests are enabled, also add `dev-libs/oaknut` and `dev-cpp/catch`
|
* If tests are enabled, also add `dev-libs/oaknut` and `dev-cpp/catch`
|
||||||
|
|
||||||
Required USE flags:
|
Required USE flags:
|
||||||
- `dev-qt/qtbase network concurrent dbus gui widgets`
|
|
||||||
- `dev-libs/quazip qt6`
|
* `dev-qt/qtbase network concurrent dbus gui widgets`
|
||||||
- `net-libs/mbedtls cmac`
|
* `dev-libs/quazip qt6`
|
||||||
- `media-libs/libsdl2 haptic joystick sound video`
|
* `net-libs/mbedtls cmac`
|
||||||
- `dev-cpp/cpp-httplib ssl`
|
* `media-libs/libsdl2 haptic joystick sound video`
|
||||||
|
* `dev-cpp/cpp-httplib ssl`
|
||||||
|
|
||||||
[Caveats](./Caveats.md#gentoo-linux)
|
[Caveats](./Caveats.md#gentoo-linux)
|
||||||
|
|
||||||
|
|
@ -150,6 +157,7 @@ sudo pacman -Syu --needed base-devel boost catch2 cmake enet ffmpeg fmt git glsl
|
||||||
* Building with QT Web Engine requires `qt6-webengine` as well.
|
* Building with QT Web Engine requires `qt6-webengine` as well.
|
||||||
* Proper Wayland support requires `qt6-wayland`
|
* Proper Wayland support requires `qt6-wayland`
|
||||||
* GCC 11 or later is required.
|
* GCC 11 or later is required.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
@ -161,17 +169,20 @@ sudo apt-get install autoconf cmake g++ gcc git glslang-tools libglu1-mesa-dev l
|
||||||
|
|
||||||
* Ubuntu 22.04, Linux Mint 20, or Debian 12 or later is required.
|
* Ubuntu 22.04, Linux Mint 20, or Debian 12 or later is required.
|
||||||
* To enable QT Web Engine, add `-DYUZU_USE_QT_WEB_ENGINE=ON` when running CMake.
|
* To enable QT Web Engine, add `-DYUZU_USE_QT_WEB_ENGINE=ON` when running CMake.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>AlmaLinux, Fedora, Red Hat Linux</summary>
|
<summary>AlmaLinux, Fedora, Red Hat Linux</summary>
|
||||||
|
|
||||||
Fedora:
|
Fedora:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
sudo dnf install autoconf cmake fmt-devel gcc{,-c++} glslang hidapi-devel json-devel libtool libusb1-devel libzstd-devel lz4-devel nasm ninja-build openssl-devel pulseaudio-libs-devel qt6-linguist qt6-qtbase{-private,}-devel qt6-qtwebengine-devel qt6-qtmultimedia-devel speexdsp-devel wayland-devel zlib-devel ffmpeg-devel libXext-devel boost jq
|
sudo dnf install autoconf cmake fmt-devel gcc{,-c++} glslang hidapi-devel json-devel libtool libusb1-devel libzstd-devel lz4-devel nasm ninja-build openssl-devel pulseaudio-libs-devel qt6-linguist qt6-qtbase{-private,}-devel qt6-qtwebengine-devel qt6-qtmultimedia-devel speexdsp-devel wayland-devel zlib-devel ffmpeg-devel libXext-devel boost jq
|
||||||
```
|
```
|
||||||
|
|
||||||
AlmaLinux (use `YUZU_USE_CPM=ON`):
|
AlmaLinux (use `YUZU_USE_CPM=ON`):
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
# vvv - Only if RPMfusion is not installed or EPEL isn't either
|
# vvv - Only if RPMfusion is not installed or EPEL isn't either
|
||||||
sudo dnf install epel-release dnf-utils
|
sudo dnf install epel-release dnf-utils
|
||||||
|
|
@ -183,15 +194,19 @@ sudo dnf config-manager --enable crb
|
||||||
sudo dnf install qt6-qtbase-private-devel
|
sudo dnf install qt6-qtbase-private-devel
|
||||||
```
|
```
|
||||||
|
|
||||||
|
For systems like OpenEuler or derivates, don't forget to also install: `SDL2-devel pkg-config fmt-dev nlohmann-json-dev`.
|
||||||
|
|
||||||
* [RPM Fusion](https://rpmfusion.org/Configuration) is required for `ffmpeg-devel`
|
* [RPM Fusion](https://rpmfusion.org/Configuration) is required for `ffmpeg-devel`
|
||||||
* Fedora 32 or later is required.
|
* Fedora 32 or later is required.
|
||||||
* Fedora 36+ users with GCC 12 need Clang and should configure CMake with: `cmake -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang -B build`
|
* Fedora 36+ users with GCC 12 need Clang and should configure CMake with: `cmake -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang -B build`
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Alpine Linux</summary>
|
<summary>Alpine Linux</summary>
|
||||||
|
|
||||||
First, enable the community repository; [see here](https://wiki.alpinelinux.org/wiki/Repositories#Enabling_the_community_repository).
|
First, enable the community repository; [see here](https://wiki.alpinelinux.org/wiki/Repositories#Enabling_the_community_repository).
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
# Enable the community repository
|
# Enable the community repository
|
||||||
setup-apkrepos -c
|
setup-apkrepos -c
|
||||||
|
|
@ -231,8 +246,9 @@ brew install autoconf automake boost ffmpeg fmt glslang hidapi libtool libusb lz
|
||||||
If you are compiling on Intel Mac, or are using a Rosetta Homebrew installation, you must replace all references of `/opt/homebrew` with `/usr/local`.
|
If you are compiling on Intel Mac, or are using a Rosetta Homebrew installation, you must replace all references of `/opt/homebrew` with `/usr/local`.
|
||||||
|
|
||||||
To run with MoltenVK, install additional dependencies:
|
To run with MoltenVK, install additional dependencies:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
brew install molten-vk vulkan-loader
|
brew install molten-vk
|
||||||
```
|
```
|
||||||
|
|
||||||
[Caveats](./Caveats.md#macos).
|
[Caveats](./Caveats.md#macos).
|
||||||
|
|
@ -241,7 +257,7 @@ brew install molten-vk vulkan-loader
|
||||||
<details>
|
<details>
|
||||||
<summary>FreeBSD</summary>
|
<summary>FreeBSD</summary>
|
||||||
|
|
||||||
As root run: `pkg install devel/cmake devel/sdl20 devel/boost-libs devel/catch2 devel/libfmt devel/nlohmann-json devel/ninja devel/nasm devel/autoconf devel/pkgconf devel/qt6-base devel/simpleini net/enet multimedia/ffnvcodec-headers multimedia/ffmpeg audio/opus archivers/liblz4 lang/gcc12 graphics/glslang graphics/vulkan-utility-libraries graphics/spirv-tools www/cpp-httplib devel/jwt-cpp devel/unordered-dense mbedtls3 vulkan-headers quazip-qt6`
|
As root run: `pkg install devel/cmake devel/sdl20 devel/boost-libs devel/catch2 devel/libfmt devel/nlohmann-json devel/ninja devel/nasm devel/autoconf devel/pkgconf devel/qt6-base devel/simpleini net/enet multimedia/ffnvcodec-headers multimedia/ffmpeg audio/opus archivers/liblz4 lang/gcc12 graphics/glslang graphics/vulkan-utility-libraries graphics/spirv-tools www/cpp-httplib devel/unordered-dense mbedtls3 vulkan-headers quazip-qt6`
|
||||||
|
|
||||||
If using FreeBSD 12 or prior, use `devel/pkg-config` instead.
|
If using FreeBSD 12 or prior, use `devel/pkg-config` instead.
|
||||||
|
|
||||||
|
|
@ -251,7 +267,7 @@ If using FreeBSD 12 or prior, use `devel/pkg-config` instead.
|
||||||
<details>
|
<details>
|
||||||
<summary>NetBSD</summary>
|
<summary>NetBSD</summary>
|
||||||
|
|
||||||
For NetBSD +10.1: `pkgin install git cmake boost fmtlib SDL2 catch2 libjwt spirv-headers ffmpeg7 libva nlohmann-json jq libopus qt6 mbedtls3 cpp-httplib lz4 vulkan-headers nasm autoconf enet pkg-config libusb1`.
|
For NetBSD +10.1: `pkgin install git cmake boost fmtlib SDL2 catch2 libjwt spirv-headers spirv-tools ffmpeg7 libva nlohmann-json jq libopus qt6 mbedtls3 cpp-httplib lz4 vulkan-headers nasm autoconf enet pkg-config libusb1 libcxx`.
|
||||||
|
|
||||||
[Caveats](./Caveats.md#netbsd).
|
[Caveats](./Caveats.md#netbsd).
|
||||||
|
|
||||||
|
|
@ -261,7 +277,7 @@ For NetBSD +10.1: `pkgin install git cmake boost fmtlib SDL2 catch2 libjwt spirv
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
pkg_add -u
|
pkg_add -u
|
||||||
pkg_add cmake nasm git boost unzip--iconv autoconf-2.72p0 bash ffmpeg glslang gmake llvm-19.1.7p3 qt6 jq fmt nlohmann-json enet boost vulkan-utility-libraries vulkan-headers spirv-headers spirv-tools catch2 sdl2 libusb1-1.0.27
|
pkg_add cmake nasm git boost unzip--iconv autoconf-2.72p0 bash ffmpeg glslang gmake qt6 jq fmt nlohmann-json enet boost vulkan-utility-libraries vulkan-headers spirv-headers spirv-tools catch2 sdl2 libusb1-1.0.29
|
||||||
```
|
```
|
||||||
|
|
||||||
[Caveats](./Caveats.md#openbsd).
|
[Caveats](./Caveats.md#openbsd).
|
||||||
|
|
@ -292,23 +308,24 @@ sudo pkg install qt6 boost glslang libzip library/lz4 libusb-1 nlohmann-json ope
|
||||||
|
|
||||||
* Open the `MSYS2 MinGW 64-bit` shell (`mingw64.exe`)
|
* Open the `MSYS2 MinGW 64-bit` shell (`mingw64.exe`)
|
||||||
* Download and install all dependencies:
|
* Download and install all dependencies:
|
||||||
```
|
|
||||||
|
```sh
|
||||||
BASE="git make autoconf libtool automake-wrapper jq patch"
|
BASE="git make autoconf libtool automake-wrapper jq patch"
|
||||||
|
MINGW="qt6-base qt6-tools qt6-translations qt6-svg cmake toolchain clang python-pip openssl vulkan-memory-allocator vulkan-devel glslang boost fmt lz4 nlohmann-json zlib zstd enet opus mbedtls libusb unordered_dense openssl SDL2"
|
||||||
MINGW="qt6-base qt6-tools qt6-translations qt6-svg cmake toolchain clang python-pip openssl vulkan-memory-allocator vulkan-devel glslang boost fmt lz4 nlohmann-json zlib zstd enet opus mbedtls libusb unordered_dense"
|
# Either x86_64 or clang-aarch64 (Windows on ARM)
|
||||||
|
|
||||||
packages="$BASE"
|
packages="$BASE"
|
||||||
for pkg in $MINGW; do
|
for pkg in $MINGW; do
|
||||||
packages="$packages mingw-w64-x86_64-$pkg"
|
packages="$packages mingw-w64-x86_64-$pkg"
|
||||||
|
#packages="$packages mingw-w64-clang-aarch64-$pkg"
|
||||||
done
|
done
|
||||||
|
|
||||||
pacman -Syuu --needed --noconfirm $packages
|
pacman -Syuu --needed --noconfirm $packages
|
||||||
```
|
```
|
||||||
|
|
||||||
* Notes:
|
* Notes:
|
||||||
- Using `qt6-static` is possible but currently untested.
|
* Using `qt6-static` is possible as well, provided you build with `-DYUZU_STATIC_BUILD=ON`.
|
||||||
- Other environments are entirely untested, but should theoretically work provided you install all the necessary packages.
|
* Other environments are entirely untested, but should theoretically work provided you install all the necessary packages.
|
||||||
- GCC is proven to work better with the MinGW environment. If you choose to use Clang, you *may* be better off using the clang64 environment.
|
* GCC is proven to work better with the MinGW environment. On ARM, only Clang is available through the CLANGARM64 environment, so use that until a GNU ARM environment is available.
|
||||||
- Add `qt-creator` to the `MINGW` variable to install Qt Creator. You can then create a Start Menu shortcut to the MinGW Qt Creator by running `powershell "\$s=(New-Object -COM WScript.Shell).CreateShortcut('C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Qt Creator.lnk');\$s.TargetPath='C:\\msys64\\mingw64\\bin\\qtcreator.exe';\$s.Save()"` in Git Bash or MSYS2.
|
* Add `qt-creator` to the `MINGW` variable to install Qt Creator. You can then create a Start Menu shortcut to the MinGW Qt Creator by running `powershell "\$s=(New-Object -COM WScript.Shell).CreateShortcut('C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Qt Creator.lnk');\$s.TargetPath='C:\\msys64\\mingw64\\bin\\qtcreator.exe';\$s.Save()"` in Git Bash or MSYS2.
|
||||||
* Add MinGW binaries to the PATH if they aren't already:
|
* Add MinGW binaries to the PATH if they aren't already:
|
||||||
* `echo 'PATH=/mingw64/bin:$PATH' >> ~/.bashrc`
|
* `echo 'PATH=/mingw64/bin:$PATH' >> ~/.bashrc`
|
||||||
* or `echo 'PATH=/mingw64/bin:$PATH' >> ~/.zshrc`
|
* or `echo 'PATH=/mingw64/bin:$PATH' >> ~/.zshrc`
|
||||||
|
|
@ -320,7 +337,7 @@ pacman -Syuu --needed --noconfirm $packages
|
||||||
<summary>HaikuOS</summary>
|
<summary>HaikuOS</summary>
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
pkgman install git cmake patch libfmt_devel nlohmann_json lz4_devel opus_devel boost1.89_devel vulkan_devel qt6_base_devel libsdl2_devel ffmpeg7_devel libx11_devel enet_devel catch2_devel quazip1_qt6_devel qt6_5compat_devel libusb1_devel libz_devel mbedtls3_devel glslang
|
pkgman install git cmake patch libfmt_devel nlohmann_json lz4_devel opus_devel boost1.89_devel vulkan_devel qt6_base_devel qt6_declarative_devel libsdl2_devel ffmpeg7_devel libx11_devel enet_devel catch2_devel quazip1_qt5_devel qt6_5compat_devel mbedtls3_devel glslang qt6_devel
|
||||||
```
|
```
|
||||||
|
|
||||||
[Caveats](./Caveats.md#haikuos).
|
[Caveats](./Caveats.md#haikuos).
|
||||||
|
|
|
||||||
|
|
@ -82,15 +82,15 @@ You may additionally need the `Qt Extension Pack` extension if building Qt.
|
||||||
|
|
||||||
# Build speedup
|
# Build speedup
|
||||||
|
|
||||||
If you have an HDD, use ramdisk (build in RAM):
|
If you have an HDD, use ramdisk (build in RAM), approximatedly you need 4GB for a full build with debug symbols:
|
||||||
```sh
|
```sh
|
||||||
sudo mkdir /tmp/ramdisk
|
mkdir /tmp/ramdisk
|
||||||
sudo chmod 777 /tmp/ramdisk
|
chmod 777 /tmp/ramdisk
|
||||||
# about 8GB needed
|
# about 8GB needed
|
||||||
sudo mount -t tmpfs -o size=8G myramdisk /tmp/ramdisk
|
mount -t tmpfs -o size=4G myramdisk /tmp/ramdisk
|
||||||
cmake -B /tmp/ramdisk
|
cmake -B /tmp/ramdisk
|
||||||
cmake --build /tmp/ramdisk -- -j32
|
cmake --build /tmp/ramdisk -- -j32
|
||||||
sudo umount /tmp/ramdisk
|
umount /tmp/ramdisk
|
||||||
```
|
```
|
||||||
|
|
||||||
# Assets and large files
|
# Assets and large files
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,114 @@
|
||||||
|
# Driver bugs
|
||||||
|
|
||||||
|
Non-exhaustive list of known drivers bugs.
|
||||||
|
|
||||||
|
See also: [Dolphin emulator](hhttps://github.com/dolphin-emu/dolphin/blob/cdbea8867df3d0a6fc375e78726dae95612fb1fd/Source/Core/VideoCommon/DriverDetails.h#L84) own list of driver bugs (which are also included here).
|
||||||
|
|
||||||
|
## Vulkan
|
||||||
|
|
||||||
|
| Vendor/GPU | OS | Drivers | Version | Bug |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| AMD | All | Proprietary | ? | `VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT` on GCN4 and lower is broken. |
|
||||||
|
| AMD | All | Proprietary | ? | GCN4 and earlier have broken `VK_EXT_sampler_filter_minmax`. |
|
||||||
|
| AMD | All | Proprietary | ? | If offset + stride * count is greater than the size, then the last attribute will have the wrong value for vertex buffers. |
|
||||||
|
| AMD | All | Proprietary | ? | On GCN, 2D mipmapped texture arrays (with width == height) where there are more than 6 layers causes broken corrupt mipmaps. |
|
||||||
|
| AMD | All | RADV, MESA | ? | Using LLVM emitter causes corrupt FP16, proprietary drivers unaffected. |
|
||||||
|
| AMD | All | Proprietary | ? | Incorrect implementation of VK_EXT_depth_clamp_control causes incorrect depth values to be written to the depth buffer. |
|
||||||
|
| AMD | macOS | Proprietary | ? | `gl_HelperInvocation` is actually `!gl_HelperInvocation`. |
|
||||||
|
| NVIDIA | All | Proprietary | ? | Drivers for ampere and newer have broken float16 math. |
|
||||||
|
| NVIDIA | All | Proprietary | >=510.0.0 | Versions >= 510 do not support MSAA->MSAA image blits. |
|
||||||
|
| NVIDIA | All | Proprietary | ? | Shader stencil export not supported. |
|
||||||
|
| NVIDIA | All | Proprietary | ? | Doesn't properly support conditional barriers. |
|
||||||
|
| NVIDIA | All | Proprietary | ? | GPUs pre-turing doesn't properly work with push descriptors. |
|
||||||
|
| NVIDIA | All | All | ? | Calling `vkCmdClearAttachments` with a partial rect, or specifying a render area in a render pass with the load op set to clear can cause the GPU to lock up, or raise a bounds violation. This only occurs on MSAA framebuffers, and it seems when there are multiple clears in a single command buffer. Worked around by back to the slow path (drawing quads) when MSAA is enabled. |
|
||||||
|
| Intel | All | Proprietary | <27.20.100.0 | Intel Windows versions before 27.20.100.0 has broken `VK_EXT_vertex_input_dynamic_state`. |
|
||||||
|
| Intel | All | Proprietary | ? | Intel proprietary drivers do not support MSAA->MSAA image blits. |
|
||||||
|
| Intel | All | Proprietary | 0.405.0<br>until<br>0.405.286 | Intel proprietary drivers 0.405.0 until 0.405.286 have broken compute. |
|
||||||
|
| Intel | macOS | Proprietary | ? | Using dynamic sampler indexing locks up the GPU. |
|
||||||
|
| Intel | macOS | Proprietary | ? | Using subgroupMax in a shader that can discard results in garbage data. |
|
||||||
|
| Intel | All | Mesa | ? | Broken lines in geometry shaders when writing to `gl_ClipDistance` in the vertex shader. |
|
||||||
|
| Qualcomm | All | Proprietary | ? | Using too many samplers (on A8XX is `65536`) can cause heap exhaustion, recommended to use 75% of total available samplers. |
|
||||||
|
| Qualcomm | All | Proprietary | ? | Qualcomm Adreno GPUs doesn't handle scaled vertex attributes `VK_KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME`. |
|
||||||
|
| Qualcomm | All | Proprietary | ? | 64-bit integer extensions (`VK_KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME`) cause nondescriptive crashes and stability issues. |
|
||||||
|
| Qualcomm | All | All | ? | Driver requires higher-than-reported binding limits (32). |
|
||||||
|
| Qualcomm | All | All | ? | On Adreno, enabling rasterizer discard somehow corrupts the viewport state; a workaround is forcing it to be updated on next use. |
|
||||||
|
| Qualcomm | All | Proprietary | ? | Concurrent fence waits are unsupported. |
|
||||||
|
| Qualcomm | All | Proprietary | ? | `vkCmdCopyImageToBuffer` allocates a staging image when used to copy from an image with optimal tiling; which results in overall slower performance. |
|
||||||
|
| Qualcomm | All | Proprietary | ? | 32-bit depth clears are broken in the Adreno Vulkan driver, and have no effect. |
|
||||||
|
| Qualcomm | All | Proprietary | ? | It should be safe to release the resources before actually resetting the VkCommandPool. However, devices running R drivers there was a few months period where the driver had a bug which it incorrectly was accessing objects on the command buffer while it was being reset. If these objects were already destroyed (which is a valid thing to do) it would crash. |
|
||||||
|
| Qualcomm | All | Proprietary | ? | On Pixel and Pixel2XL's with Adreno 530 and 540s, setting width and height to 10s reliably triggers what appears to be a driver race condition. |
|
||||||
|
| Qualcomm | All | Proprietary | ? | Non-descriptive broken OpPhi SPIRV lowering, originally using OpPhi to choose the result is crashing on Adreno 4xx. Switched to storing the result in a temp variable as glslang does. |
|
||||||
|
| Qualcomm | All | Proprietary | ? | See crbug.com/1241134. The bug appears on Adreno 5xx devices with OS PQ3A. It does not repro on the earlier PPR1 version since the extend blend func extension was not present on the older driver. |
|
||||||
|
| Mali | Android | Proprietary | ? | Non-descriptive green screen on various locations. |
|
||||||
|
| Mali | Android | Proprietary | ? | Cached memory is significantly slower for readbacks than coherent memory in the Mali Vulkan driver, causing high CPU usage in the `__pi___inval_cache_range` kernel function. |
|
||||||
|
| Mali | Android | Proprietary | ? | On some old ARM driver versions, dynamic state for stencil write mask doesn't work correctly in the presence of discard or alpha to coverage, if the static state provided when creating the pipeline has a value of 0 (`alphaToCoverageEnable` and `rasterizerDiscardEnable`). |
|
||||||
|
| Mali | Android | Proprietary | ? | Failing to submit because of a device loss still needs to wait for the fence to signal before deleting. However, there is an ARM bug (b/359822580) where the driver early outs on the fence wait if in a device lost state and thus we can't wait on it. Instead, we just wait on the queue to finish. |
|
||||||
|
| Mali | Android | Proprietary | ? | With Galaxy S7 we see lots of rendering issues when we suballocate VkImages. |
|
||||||
|
| Mali | Android | Proprietary | ? | With Galaxy S7 and S9 we see lots of rendering issues with image filters dropping out when using only primary command buffers. We also see issues on the P30 running Android 28. |
|
||||||
|
| Mali | Android | Proprietary | ? | `RGBA_F32` mipmaps appear to be broken on some Mali devices. |
|
||||||
|
| Mali | Android | Proprietary | ? | Matrix IR lowering for matrix swizzle, scalar multiplication and unary `(+m)`/`(-m)` present extraneous unexplained bugs with more than 32 matrix temporals. |
|
||||||
|
| Apple | All | MoltenVK | ? | Driver breaks when using more than 16 vertex attributes/bindings. |
|
||||||
|
| Apple | macOS | Proprietary | >4 | Some driver and Apple Silicon GPU combinations have problems with fragment discard when early depth test is enabled. Discarded fragments may appear corrupted. |
|
||||||
|
| Apple | iOS | MoltenVK | ? | Null descriptors cause non-descriptive issues. |
|
||||||
|
| Apple | iOS | MoltenVK | ? | Push descriptors cause non-descriptive issues. |
|
||||||
|
| Imagination | Android | Proprietary | ? | Some vulkan implementations don't like the 'clear' loadop renderpass if you try to use a framebuffer with a different load/store op than that which it was created with, despite the spec saying they should be compatible. |
|
||||||
|
| Intel<br>Qualcomm<br>AMD<br>Apple | All | All<br>MoltenVK (Apple) | ? | Reversed viewport depth range does not work as intended on some Vulkan drivers. The Vulkan spec allows the `minDepth`/`maxDepth` fields in the viewport to be reversed, however the implementation is broken on some drivers. |
|
||||||
|
|
||||||
|
AMD: List of driver IDs:
|
||||||
|
- Proprietary: `VK_DRIVER_ID_AMD_PROPRIETARY`
|
||||||
|
- OSS: `VK_DRIVER_ID_AMD_OPEN_SOURCE`
|
||||||
|
- MESA: `VK_DRIVER_ID_MESA_RADV`
|
||||||
|
|
||||||
|
NVIDIA: List of driver IDs:
|
||||||
|
- Proprietary: `VK_DRIVER_ID_NVIDIA_PROPRIETARY`.
|
||||||
|
- MESA: `VK_DRIVER_ID_MESA_NVK`.
|
||||||
|
|
||||||
|
Intel: List of driver IDs:
|
||||||
|
- Proprietary: `VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS`.
|
||||||
|
- MESA: `VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA`.
|
||||||
|
|
||||||
|
Qualcomm: List of driver IDs:
|
||||||
|
- Proprietary: `VK_DRIVER_ID_QUALCOMM_PROPRIETARY`.
|
||||||
|
- MESA: `VK_DRIVER_ID_MESA_TURNIP`.
|
||||||
|
|
||||||
|
Mali: List of driver IDs:
|
||||||
|
- Proprietary: `VK_DRIVER_ID_ARM_PROPRIETARY`.
|
||||||
|
- MESA: `VK_DRIVER_ID_MESA_PANVK`.
|
||||||
|
|
||||||
|
Samsung: List of driver IDs:
|
||||||
|
- Proprietary: `VK_DRIVER_ID_SAMSUNG_PROPRIETARY`.
|
||||||
|
|
||||||
|
Apple: List of driver IDs:
|
||||||
|
- MoltenVK/MVK: `VK_DRIVER_ID_MOLTENVK`.
|
||||||
|
- KosmicKrisp: `VK_DRIVER_ID_MESA_KOSMICKRISP`.
|
||||||
|
- HoneyKrisp: `VK_DRIVER_ID_MESA_HONEYKRISP`.
|
||||||
|
|
||||||
|
PowerVR: List of driver IDs:
|
||||||
|
- Proprietary: `VK_DRIVER_ID_IMAGINATION_PROPRIETARY`.
|
||||||
|
- MESA: `VK_DRIVER_ID_IMAGINATION_OPEN_SOURCE_MESA`.
|
||||||
|
|
||||||
|
Software Rasterizers: List of driver IDs:
|
||||||
|
- SwiftShader: `VK_DRIVER_ID_GOOGLE_SWIFTSHADER`.
|
||||||
|
- LLVMPipe: `VK_DRIVER_ID_MESA_LLVMPIPE`.
|
||||||
|
|
||||||
|
Broadcom: List of driver IDs:
|
||||||
|
- Proprietary: `VK_DRIVER_ID_BROADCOM_PROPRIETARY`.
|
||||||
|
- MESA: `VK_DRIVER_ID_MESA_V3DV`.
|
||||||
|
|
||||||
|
Verisilicon: List of driver IDs:
|
||||||
|
- Proprietary: `VK_DRIVER_ID_VERISILICON_PROPRIETARY`.
|
||||||
|
|
||||||
|
Other: List of driver IDs:
|
||||||
|
- SC: `VK_DRIVER_ID_VULKAN_SC_EMULATION_ON_VULKAN`.
|
||||||
|
- GGP (Stadia): `VK_DRIVER_ID_GGP_PROPRIETARY`.
|
||||||
|
- CoreAVI (Cars): `VK_DRIVER_ID_COREAVI_PROPRIETARY`.
|
||||||
|
- Juice (Remote GPU): `VK_DRIVER_ID_JUICE_PROPRIETARY`.
|
||||||
|
- Venus (Virtio GPU): `VK_DRIVER_ID_MESA_VENUS`.
|
||||||
|
- Dozen (Vulkan on DirectX): `VK_DRIVER_ID_MESA_DOZEN`.
|
||||||
|
|
||||||
|
## OpenGL
|
||||||
|
|
||||||
|
| Vendor/GPU | OS | Drivers | Version | Bug |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| All | Android | All | ? | In OpenGL, multi-threaded shader pre-compilation sometimes crashes. |
|
||||||
|
| All | All | Mesa | ? | https://github.com/KhronosGroup/glslang/pull/2646 |
|
||||||