Compare commits
127 commits
fix-FreeBS
...
master
Author | SHA1 | Date | |
---|---|---|---|
e0c554976a | |||
1b1ab551a9 | |||
87cacbeed4 | |||
992bae4e2a | |||
6ff043c4fb | |||
86432f9552 | |||
cde02bfe46 | |||
1971fbe5af | |||
d0206c35fb | |||
df26fe2cac | |||
f1debdbac5 | |||
f08f4cccdc | |||
bff09f36cc | |||
e33d426ac4 | |||
e367bdf3cc | |||
226160f639 | |||
0eeeee515e | |||
54d6283ac3 | |||
2e9dbe3f1d | |||
d7cd7c6313 | |||
df653d6ca4 | |||
a53823646c | |||
b330117a14 | |||
d24db9c3cb | |||
f55e560ac5 | |||
84ab54c4bc | |||
9333393a7b | |||
cb83a258db | |||
6bdf479488 | |||
9c7ed0f59d | |||
de46b8e817 | |||
3e8fe622a7 | |||
1c90b099d3 | |||
e2a8f3154f | |||
c0fb872d1a | |||
171a1d23e4 | |||
3d6a784e62 | |||
440ee4916d | |||
551f244dfd | |||
ef14303c48 | |||
b7021afff6 | |||
bfc10723bc | |||
30482692c7 | |||
31463142e1 | |||
bb836ed6c2 | |||
f273ac446b | |||
3f725c979d | |||
2a5e6f98b6 | |||
fff8e2026f | |||
5f9dba40a0 | |||
0a54ac63f0 | |||
94ca83a6ca | |||
2f88463203 | |||
11200714e8 | |||
ac59b6eae5 | |||
b389a72697 | |||
b3f28d29c0 | |||
053f4e95d4 | |||
8ae7cfe96a | |||
e157b3fa96 | |||
56e2dbc619 | |||
a3ef2cc183 | |||
1e1b8ad33f | |||
91493fa39b | |||
973a65c4c5 | |||
8a017951aa | |||
776958c79d | |||
3656253262 | |||
b6241e4148 | |||
bfffafe68b | |||
3c6ef765af | |||
954c17c18a | |||
8078990b9b | |||
db65f10768 | |||
acd7d792a3 | |||
9acb6006b8 | |||
cf0628af46 | |||
dbeae7add0 | |||
62369aa2d5 | |||
badd913bee | |||
6a4fa11ac3 | |||
5d4cfe195b | |||
bc1d093fe9 | |||
f6d99e5032 | |||
a52ddf78a6 | |||
191dd892e5 | |||
9f385bf627 | |||
1a13e79c3d | |||
268918aece | |||
83730cd4c1 | |||
272df1fa83 | |||
71a87b2c55 | |||
f4f3425d86 | |||
9173eec402 | |||
de594c8792 | |||
2d8cb2d457 | |||
990a43a48c | |||
1a5b3fb239 | |||
24e6c62109 | |||
326865cba2 | |||
76b5d6778e | |||
61adc85c4b | |||
4be6d30cd9 | |||
020f1cdb1f | |||
dfe10bc851 | |||
9a098441de | |||
91fb1df624 | |||
43a7470a7d | |||
dfca07f4e3 | |||
2e0a4163cf | |||
815d85677a | |||
f422d855b7 | |||
03c7d6ce4a | |||
824dc6948e | |||
85b5e650cc | |||
324ace3cd6 | |||
33f93ad003 | |||
9f423a24b8 | |||
50ceb9a43a | |||
ecb811ad04 | |||
bf302d7917 | |||
d19a7c3782 | |||
c725641f13 | |||
02016697d6 | |||
c77ad128b9 | |||
cc50571275 | |||
ba20e5c2f5 |
|
@ -13,8 +13,8 @@ fi
|
||||||
cd src/android
|
cd src/android
|
||||||
chmod +x ./gradlew
|
chmod +x ./gradlew
|
||||||
|
|
||||||
./gradlew assembleRelease
|
./gradlew assembleMainlineRelease
|
||||||
./gradlew bundleRelease
|
./gradlew bundleMainlineRelease
|
||||||
|
|
||||||
if [ ! -z "${ANDROID_KEYSTORE_B64}" ]; then
|
if [ ! -z "${ANDROID_KEYSTORE_B64}" ]; then
|
||||||
rm "${ANDROID_KEYSTORE_FILE}"
|
rm "${ANDROID_KEYSTORE_FILE}"
|
||||||
|
|
|
@ -1,47 +0,0 @@
|
||||||
#!/usr/bin/ruby
|
|
||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
license_header = <<~EOF
|
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
EOF
|
|
||||||
|
|
||||||
print 'Getting branch changes...'
|
|
||||||
branch_name = `git rev-parse --abbrev-ref HEAD`.chomp
|
|
||||||
branch_commits = `git log #{branch_name} --not master --pretty=format:"%h"`.split("\n")
|
|
||||||
branch_commit_range = "#{branch_commits[-1]}^..#{branch_commits[0]}"
|
|
||||||
branch_changed_files = `git diff-tree --no-commit-id --name-only #{branch_commit_range} -r`.split("\n")
|
|
||||||
puts 'done'
|
|
||||||
|
|
||||||
print 'Checking files...'
|
|
||||||
issue_files = []
|
|
||||||
branch_changed_files.each do |file_name|
|
|
||||||
if file_name.end_with?('.cpp', '.h', '.kt', '.kts') and File.file?(file_name)
|
|
||||||
file_content = File.read(file_name)
|
|
||||||
if not file_content.start_with?(license_header)
|
|
||||||
issue_files.push(file_name)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
puts 'done'
|
|
||||||
|
|
||||||
if issue_files.empty?
|
|
||||||
puts "\nAll changed files have correct headers"
|
|
||||||
exit 0
|
|
||||||
end
|
|
||||||
|
|
||||||
puts <<-EOF
|
|
||||||
|
|
||||||
The following #{issue_files.length} files have incorrect license headers:
|
|
||||||
#{issue_files.join("\n")}
|
|
||||||
|
|
||||||
The following license header should be added to the start of all offending files:
|
|
||||||
=== BEGIN ===
|
|
||||||
#{license_header}
|
|
||||||
=== END ===
|
|
||||||
|
|
||||||
If some of the code in this PR is not being contributed by the original author, the files which have been exclusively changed by that code can be ignored.
|
|
||||||
If this happens, this PR requirement can be bypassed once all other files are addressed.
|
|
||||||
EOF
|
|
||||||
|
|
||||||
exit 1
|
|
|
@ -1,74 +1,150 @@
|
||||||
#!/bin/sh -e
|
#!/bin/sh -e
|
||||||
|
|
||||||
HEADER="$(cat "$PWD/.ci/license/header.txt")"
|
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||||
HEADER_HASH="$(cat "$PWD/.ci/license/header-hash.txt")"
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
echo "Getting branch changes"
|
# specify full path if dupes may exist
|
||||||
|
EXCLUDE_FILES="CPM.cmake CPMUtil.cmake GetSCMRev.cmake sse2neon.h renderdoc_app.h tools/cpm tools/shellcheck.sh tools/update-cpm.sh externals/stb externals/glad externals/getopt externals/gamemode externals/FidelityFX-FSR externals/demangle externals/bc_decoder"
|
||||||
|
|
||||||
# BRANCH=`git rev-parse --abbrev-ref HEAD`
|
# license header constants, please change when needed :))))
|
||||||
# COMMITS=`git log ${BRANCH} --not master --pretty=format:"%h"`
|
YEAR=2025
|
||||||
# RANGE="${COMMITS[${#COMMITS[@]}-1]}^..${COMMITS[0]}"
|
HOLDER="Eden Emulator Project"
|
||||||
# FILES=`git diff-tree --no-commit-id --name-only ${RANGE} -r`
|
LICENSE="GPL-3.0-or-later"
|
||||||
|
|
||||||
BASE=`git merge-base master HEAD`
|
usage() {
|
||||||
FILES=`git diff --name-only $BASE`
|
cat << EOF
|
||||||
|
Usage: $0 [uc]
|
||||||
|
Compares the current HEAD to the master branch to check for license
|
||||||
|
header discrepancies. Each file changed in a branch MUST have a
|
||||||
|
license header, and this script attempts to enforce that.
|
||||||
|
|
||||||
#FILES=$(git diff --name-only master)
|
Options:
|
||||||
|
-u, --update Fix license headers, if applicable;
|
||||||
|
if the license header exists but has the incorrect
|
||||||
|
year or is otherwise malformed, it will be fixed.
|
||||||
|
|
||||||
echo "Done"
|
-c, --commit Commit changes to Git (requires --update)
|
||||||
|
|
||||||
|
Copyright $YEAR $HOLDER
|
||||||
|
Licensed under $LICENSE
|
||||||
|
|
||||||
|
The following files/directories are marked as external
|
||||||
|
and thus will not have license headers asserted:
|
||||||
|
EOF
|
||||||
|
|
||||||
|
for file in $EXCLUDE_FILES; do
|
||||||
|
echo "- $file"
|
||||||
|
done
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
case "$1" in
|
||||||
|
(-uc) UPDATE=true; COMMIT=true ;;
|
||||||
|
(-u|--update) UPDATE=true ;;
|
||||||
|
(-c|--commit) COMMIT=true ;;
|
||||||
|
("$0") break ;;
|
||||||
|
("") break ;;
|
||||||
|
(*) usage ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
# human-readable header string
|
||||||
|
header() {
|
||||||
|
header_line1 "$1"
|
||||||
|
header_line2 "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
header_line1() {
|
||||||
|
echo "$1 SPDX-FileCopyrightText: Copyright $YEAR $HOLDER"
|
||||||
|
}
|
||||||
|
|
||||||
|
header_line2() {
|
||||||
|
echo "$1 SPDX-License-Identifier: $LICENSE"
|
||||||
|
}
|
||||||
|
|
||||||
check_header() {
|
check_header() {
|
||||||
CONTENT="`head -n3 < $1`"
|
begin="$1"
|
||||||
case "$CONTENT" in
|
file="$2"
|
||||||
"$HEADER"*) ;;
|
|
||||||
*) BAD_FILES="$BAD_FILES $1" ;;
|
# separate things out as spaces to make our lives 100000000x easier
|
||||||
esac
|
content="$(head -n5 < "$2" | tr '\n' ' ')"
|
||||||
|
|
||||||
|
line1="$(header_line1 "$begin")"
|
||||||
|
line2="$(header_line2 "$begin")"
|
||||||
|
|
||||||
|
# perl and awk are actually awful, so to avoid this problem we avoid it by avoiding it
|
||||||
|
if ! echo "$content" | grep -o "$line1 $line2" >/dev/null; then
|
||||||
|
# SRC_FILES is Kotlin/C++
|
||||||
|
# OTHER_FILES is sh, CMake
|
||||||
|
case "$begin" in
|
||||||
|
"//")
|
||||||
|
SRC_FILES="$SRC_FILES $file"
|
||||||
|
;;
|
||||||
|
"#")
|
||||||
|
OTHER_FILES="$OTHER_FILES $file"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
check_cmake_header() {
|
BASE=$(git merge-base master HEAD)
|
||||||
CONTENT="`head -n3 < $1`"
|
FILES=$(git diff --name-only "$BASE")
|
||||||
|
|
||||||
case "$CONTENT" in
|
|
||||||
"$HEADER_HASH"*) ;;
|
|
||||||
*)
|
|
||||||
BAD_CMAKE="$BAD_CMAKE $1" ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
for file in $FILES; do
|
for file in $FILES; do
|
||||||
[ -f "$file" ] || continue
|
[ -f "$file" ] || continue
|
||||||
|
|
||||||
if [ `basename -- "$file"` = "CMakeLists.txt" ]; then
|
# skip files that are third party (crueter's CMake modules, sse2neon, etc)
|
||||||
check_cmake_header "$file"
|
for pattern in $EXCLUDE_FILES; do
|
||||||
continue
|
case "$file" in
|
||||||
fi
|
*"$pattern"*)
|
||||||
|
excluded=true
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
excluded=false
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
EXTENSION="${file##*.}"
|
[ "$excluded" = "true" ] && continue
|
||||||
case "$EXTENSION" in
|
|
||||||
kts|kt|cpp|h)
|
case "$file" in
|
||||||
check_header "$file"
|
*.cmake|*.sh|CMakeLists.txt)
|
||||||
;;
|
begin="#"
|
||||||
cmake)
|
;;
|
||||||
check_cmake_header "$file"
|
*.kt*|*.cpp|*.h)
|
||||||
;;
|
begin="//"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
continue
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
check_header "$begin" "$file"
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ "$BAD_FILES" = "" ] && [ "$BAD_CMAKE" = "" ]; then
|
if [ -z "$SRC_FILES" ] && [ -z "$OTHER_FILES" ]; then
|
||||||
echo
|
echo "-- All good."
|
||||||
echo "All good."
|
|
||||||
|
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$BAD_FILES" != "" ]; then
|
echo
|
||||||
echo "The following source files have incorrect license headers:"
|
|
||||||
echo
|
|
||||||
|
|
||||||
for file in $BAD_FILES; do echo $file; done
|
if [ "$SRC_FILES" != "" ]; then
|
||||||
|
echo "-- The following source files have incorrect license headers:"
|
||||||
|
|
||||||
|
HEADER=$(header "//")
|
||||||
|
|
||||||
|
for file in $SRC_FILES; do echo "-- * $file"; done
|
||||||
|
|
||||||
cat << EOF
|
cat << EOF
|
||||||
|
|
||||||
The following license header should be added to the start of all offending SOURCE files:
|
-- The following license header should be added to the start of these offending files:
|
||||||
|
|
||||||
=== BEGIN ===
|
=== BEGIN ===
|
||||||
$HEADER
|
$HEADER
|
||||||
|
@ -78,18 +154,19 @@ EOF
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$BAD_CMAKE" != "" ]; then
|
if [ "$OTHER_FILES" != "" ]; then
|
||||||
echo "The following CMake files have incorrect license headers:"
|
echo "-- The following CMake and shell scripts have incorrect license headers:"
|
||||||
echo
|
|
||||||
|
|
||||||
for file in $BAD_CMAKE; do echo $file; done
|
HEADER=$(header "#")
|
||||||
|
|
||||||
|
for file in $OTHER_FILES; do echo "-- * $file"; done
|
||||||
|
|
||||||
cat << EOF
|
cat << EOF
|
||||||
|
|
||||||
The following license header should be added to the start of all offending CMake files:
|
-- The following license header should be added to the start of these offending files:
|
||||||
|
|
||||||
=== BEGIN ===
|
=== BEGIN ===
|
||||||
$HEADER_HASH
|
$HEADER
|
||||||
=== END ===
|
=== END ===
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
|
@ -97,50 +174,76 @@ EOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cat << EOF
|
cat << EOF
|
||||||
If some of the code in this PR is not being contributed by the original author,
|
If some of the code in this PR is not being contributed by the original author,
|
||||||
the files which have been exclusively changed by that code can be ignored.
|
the files which have been exclusively changed by that code can be ignored.
|
||||||
If this happens, this PR requirement can be bypassed once all other files are addressed.
|
If this happens, this PR requirement can be bypassed once all other files are addressed.
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
if [ "$FIX" = "true" ]; then
|
if [ "$UPDATE" = "true" ]; then
|
||||||
echo
|
TMP_DIR=$(mktemp -d)
|
||||||
echo "FIX set to true. Fixing headers."
|
echo "-- Fixing headers..."
|
||||||
echo
|
|
||||||
|
|
||||||
for file in $BAD_FILES; do
|
for file in $SRC_FILES $OTHER_FILES; do
|
||||||
cat $file > $file.bak
|
case $(basename -- "$file") in
|
||||||
|
*.cmake|CMakeLists.txt)
|
||||||
|
begin="#"
|
||||||
|
shell="false"
|
||||||
|
;;
|
||||||
|
*.sh)
|
||||||
|
begin="#"
|
||||||
|
shell=true
|
||||||
|
;;
|
||||||
|
*.kt*|*.cpp|*.h)
|
||||||
|
begin="//"
|
||||||
|
shell="false"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
cat .ci/license/header.txt > $file
|
# This is fun
|
||||||
echo >> $file
|
match="$begin SPDX-FileCopyrightText.*$HOLDER"
|
||||||
cat $file.bak >> $file
|
|
||||||
|
|
||||||
rm $file.bak
|
# basically if the copyright holder is already defined we can just replace the year
|
||||||
|
if head -n5 < "$file" | grep -e "$match" >/dev/null; then
|
||||||
|
replace=$(header_line1 "$begin")
|
||||||
|
sed "s|$match|$replace|" "$file" > "$file".bak
|
||||||
|
mv "$file".bak "$file"
|
||||||
|
else
|
||||||
|
header "$begin" > "$TMP_DIR"/header
|
||||||
|
|
||||||
git add $file
|
if [ "$shell" = "true" ]; then
|
||||||
done
|
# grab shebang
|
||||||
|
head -n1 "$file" > "$TMP_DIR/shebang"
|
||||||
|
echo >> "$TMP_DIR/shebang"
|
||||||
|
|
||||||
for file in $BAD_CMAKE; do
|
# remove shebang
|
||||||
cat $file > $file.bak
|
sed '1d' "$file" > "$file".bak
|
||||||
|
mv "$file".bak "$file"
|
||||||
|
|
||||||
cat .ci/license/header-hash.txt > $file
|
# add to header
|
||||||
echo >> $file
|
cat "$TMP_DIR"/shebang "$TMP_DIR"/header > "$TMP_DIR"/new-header
|
||||||
cat $file.bak >> $file
|
mv "$TMP_DIR"/new-header "$TMP_DIR"/header
|
||||||
|
else
|
||||||
|
echo >> "$TMP_DIR/header"
|
||||||
|
fi
|
||||||
|
|
||||||
rm $file.bak
|
cat "$TMP_DIR"/header "$file" > "$file".bak
|
||||||
|
mv "$file".bak "$file"
|
||||||
|
fi
|
||||||
|
|
||||||
git add $file
|
[ "$shell" = "true" ] && chmod a+x "$file"
|
||||||
done
|
[ "$COMMIT" = "true" ] && git add "$file"
|
||||||
echo "License headers fixed."
|
done
|
||||||
|
|
||||||
if [ "$COMMIT" = "true" ]; then
|
echo "-- Done"
|
||||||
echo
|
|
||||||
echo "COMMIT set to true. Committing changes."
|
|
||||||
echo
|
|
||||||
|
|
||||||
git commit -m "Fix license headers"
|
|
||||||
|
|
||||||
echo "Changes committed. You may now push."
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
exit 1
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$COMMIT" = "true" ]; then
|
||||||
|
echo "-- Committing changes"
|
||||||
|
|
||||||
|
git commit -m "Fix license headers"
|
||||||
|
|
||||||
|
echo "-- Changes committed. You may now push."
|
||||||
|
fi
|
||||||
|
|
||||||
|
[ -d "$TMP_DIR" ] && rm -rf "$TMP_DIR"
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
@ -1,2 +0,0 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
@ -67,8 +67,9 @@ else
|
||||||
export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" -DYUZU_USE_PRECOMPILED_HEADERS=OFF)
|
export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" -DYUZU_USE_PRECOMPILED_HEADERS=OFF)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
if [ "$DEVEL" != "true" ]; then
|
if [ "$DEVEL" != "true" ]; then
|
||||||
export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" -DENABLE_QT_UPDATE_CHECKER=ON)
|
export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" -DENABLE_UPDATE_CHECKER=ON)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$USE_WEBENGINE" = "true" ]; then
|
if [ "$USE_WEBENGINE" = "true" ]; then
|
||||||
|
|
|
@ -36,8 +36,8 @@ cmake .. -G Ninja \
|
||||||
-DCMAKE_EXE_LINKER_FLAGS=" /LTCG" \
|
-DCMAKE_EXE_LINKER_FLAGS=" /LTCG" \
|
||||||
-DDYNARMIC_ENABLE_LTO=ON \
|
-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_QT_UPDATE_CHECKER=${DEVEL:-true} \
|
-DENABLE_UPDATE_CHECKER=${DEVEL:-true} \
|
||||||
"${EXTRA_CMAKE_FLAGS[@]}" \
|
"${EXTRA_CMAKE_FLAGS[@]}" \
|
||||||
"$@"
|
"$@"
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ if (-not ([bool](net session 2>$null))) {
|
||||||
}
|
}
|
||||||
|
|
||||||
$VSVer = "17"
|
$VSVer = "17"
|
||||||
$ExeFile = "vs_BuildTools.exe"
|
$ExeFile = "vs_community.exe"
|
||||||
$Uri = "https://aka.ms/vs/$VSVer/release/$ExeFile"
|
$Uri = "https://aka.ms/vs/$VSVer/release/$ExeFile"
|
||||||
$Destination = "./$ExeFile"
|
$Destination = "./$ExeFile"
|
||||||
|
|
||||||
|
@ -19,21 +19,39 @@ $WebClient = New-Object System.Net.WebClient
|
||||||
$WebClient.DownloadFile($Uri, $Destination)
|
$WebClient.DownloadFile($Uri, $Destination)
|
||||||
Write-Host "Finished downloading $ExeFile"
|
Write-Host "Finished downloading $ExeFile"
|
||||||
|
|
||||||
$VSROOT = "C:/VSBuildTools/$VSVer"
|
|
||||||
$Arguments = @(
|
$Arguments = @(
|
||||||
"--installPath `"$VSROOT`"", # set custom installation path
|
"--quiet", # Suppress installer UI
|
||||||
"--quiet", # suppress UI
|
"--wait", # Wait for installation to complete
|
||||||
"--wait", # wait for installation to complete
|
"--norestart", # Prevent automatic restart
|
||||||
"--norestart", # prevent automatic restart
|
"--force", # Force installation even if components are already installed
|
||||||
"--add Microsoft.VisualStudio.Workload.VCTools", # add C++ build tools workload
|
"--add Microsoft.VisualStudio.Workload.NativeDesktop", # Desktop development with C++
|
||||||
"--add Microsoft.VisualStudio.Component.VC.Tools.x86.x64", # add core x86/x64 C++ tools
|
"--add Microsoft.VisualStudio.Component.VC.Tools.x86.x64", # Core C++ compiler/tools for x86/x64
|
||||||
"--add Microsoft.VisualStudio.Component.Windows10SDK.19041" # add specific Windows SDK
|
"--add Microsoft.VisualStudio.Component.Windows11SDK.26100",# Windows 11 SDK (26100)
|
||||||
|
"--add Microsoft.VisualStudio.Component.Windows10SDK.19041",# Windows 10 SDK (19041)
|
||||||
|
"--add Microsoft.VisualStudio.Component.VC.Llvm.Clang", # LLVM Clang compiler
|
||||||
|
"--add Microsoft.VisualStudio.Component.VC.Llvm.ClangToolset", # LLVM Clang integration toolset
|
||||||
|
"--add Microsoft.VisualStudio.Component.Windows11SDK.22621",# Windows 11 SDK (22621)
|
||||||
|
"--add Microsoft.VisualStudio.Component.VC.CMake.Project", # CMake project support
|
||||||
|
"--add Microsoft.VisualStudio.ComponentGroup.VC.Tools.142.x86.x64", # VC++ 14.2 toolset
|
||||||
|
"--add Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Llvm.Clang" # LLVM Clang for native desktop
|
||||||
)
|
)
|
||||||
|
|
||||||
Write-Host "Installing Visual Studio Build Tools"
|
Write-Host "Installing Visual Studio Build Tools"
|
||||||
$InstallProcess = Start-Process -FilePath $Destination -NoNewWindow -PassThru -Wait -ArgumentList $Arguments
|
$InstallProcess = Start-Process -FilePath $Destination -NoNewWindow -PassThru -ArgumentList $Arguments
|
||||||
$ExitCode = $InstallProcess.ExitCode
|
|
||||||
|
|
||||||
|
# Spinner while installing
|
||||||
|
$Spinner = "|/-\"
|
||||||
|
$i = 0
|
||||||
|
while (-not $InstallProcess.HasExited) {
|
||||||
|
Write-Host -NoNewline ("`rInstalling... " + $Spinner[$i % $Spinner.Length])
|
||||||
|
Start-Sleep -Milliseconds 250
|
||||||
|
$i++
|
||||||
|
}
|
||||||
|
|
||||||
|
# Clear spinner line
|
||||||
|
Write-Host "`rSetup completed! "
|
||||||
|
|
||||||
|
$ExitCode = $InstallProcess.ExitCode
|
||||||
if ($ExitCode -ne 0) {
|
if ($ExitCode -ne 0) {
|
||||||
Write-Host "Error installing Visual Studio Build Tools (Error: $ExitCode)"
|
Write-Host "Error installing Visual Studio Build Tools (Error: $ExitCode)"
|
||||||
Exit $ExitCode
|
Exit $ExitCode
|
||||||
|
|
4
.github/workflows/trigger_release.yml
vendored
|
@ -96,7 +96,7 @@ jobs:
|
||||||
fetch-tags: true
|
fetch-tags: true
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: TARGET=appimage RELEASE=1 ./.ci/linux/build.sh v3 8
|
run: TARGET=appimage RELEASE=1 DEVEL=false ./.ci/linux/build.sh v3 8
|
||||||
|
|
||||||
- name: Package AppImage
|
- name: Package AppImage
|
||||||
run: ./.ci/linux/package.sh v3 &> /dev/null
|
run: ./.ci/linux/package.sh v3 &> /dev/null
|
||||||
|
@ -133,7 +133,7 @@ jobs:
|
||||||
echo $GIT_TAG_NAME
|
echo $GIT_TAG_NAME
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: ANDROID_HOME=/home/runner/sdk ./.ci/android/build.sh
|
run: DEVEL=false ANDROID_HOME=/home/runner/sdk ./.ci/android/build.sh
|
||||||
env:
|
env:
|
||||||
ANDROID_KEYSTORE_B64: ${{ secrets.ANDROID_KEYSTORE_B64 }}
|
ANDROID_KEYSTORE_B64: ${{ secrets.ANDROID_KEYSTORE_B64 }}
|
||||||
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
|
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
|
||||||
|
|
6
.gitignore
vendored
|
@ -10,6 +10,12 @@ doc-build/
|
||||||
AppDir/
|
AppDir/
|
||||||
uruntime
|
uruntime
|
||||||
|
|
||||||
|
# dtrace and ktrace stuffs
|
||||||
|
[dk]trace-out/
|
||||||
|
[dk]trace.out
|
||||||
|
*.core
|
||||||
|
log.txt
|
||||||
|
|
||||||
# Generated source files
|
# Generated source files
|
||||||
src/common/scm_rev.cpp
|
src/common/scm_rev.cpp
|
||||||
dist/english_plurals/generated_en.ts
|
dist/english_plurals/generated_en.ts
|
||||||
|
|
12
.patch/catch2/0001-solaris-isnan-fix.patch
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
diff --git a/src/catch2/matchers/catch_matchers_floating_point.cpp b/src/catch2/matchers/catch_matchers_floating_point.cpp
|
||||||
|
index fc7b444..0e1a3c2 100644
|
||||||
|
--- a/src/catch2/matchers/catch_matchers_floating_point.cpp
|
||||||
|
+++ b/src/catch2/matchers/catch_matchers_floating_point.cpp
|
||||||
|
@@ -5,6 +5,7 @@
|
||||||
|
// https://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
|
// SPDX-License-Identifier: BSL-1.0
|
||||||
|
+#include <catch2/internal/catch_polyfills.hpp>
|
||||||
|
#include <catch2/matchers/catch_matchers_floating_point.hpp>
|
||||||
|
#include <catch2/internal/catch_enforce.hpp>
|
||||||
|
#include <catch2/internal/catch_polyfills.hpp>
|
49
.patch/glslang/0001-haikuos-fix.patch
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp
|
||||||
|
index be7f442..5fd0438 100644
|
||||||
|
--- a/StandAlone/StandAlone.cpp
|
||||||
|
+++ b/StandAlone/StandAlone.cpp
|
||||||
|
@@ -1766,9 +1766,10 @@ int singleMain()
|
||||||
|
glslang::FinalizeProcess();
|
||||||
|
} else {
|
||||||
|
ShInitialize();
|
||||||
|
+#ifndef __HAIKU__
|
||||||
|
ShInitialize(); // also test reference counting of users
|
||||||
|
ShFinalize(); // also test reference counting of users
|
||||||
|
-
|
||||||
|
+#endif
|
||||||
|
bool printShaderNames = workList.size() > 1;
|
||||||
|
|
||||||
|
if (Options & EOptionMultiThreaded) {
|
||||||
|
@@ -1793,8 +1794,9 @@ int singleMain()
|
||||||
|
PutsIfNonEmpty(WorkItems[w]->results.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
-
|
||||||
|
+#ifndef __HAIKU__
|
||||||
|
ShFinalize();
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CompileFailed.load())
|
||||||
|
@@ -1809,8 +1811,10 @@ int C_DECL main(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
ProcessArguments(WorkItems, argc, argv);
|
||||||
|
|
||||||
|
+#ifdef __HAIKU__
|
||||||
|
+ return singleMain();
|
||||||
|
+#else
|
||||||
|
int ret = 0;
|
||||||
|
-
|
||||||
|
// Loop over the entire init/finalize cycle to watch memory changes
|
||||||
|
const int iterations = 1;
|
||||||
|
if (iterations > 1)
|
||||||
|
@@ -1820,8 +1824,8 @@ int C_DECL main(int argc, char* argv[])
|
||||||
|
if (iterations > 1)
|
||||||
|
glslang::OS_DumpMemoryCounters();
|
||||||
|
}
|
||||||
|
-
|
||||||
|
return ret;
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
25
.patch/libusb/0001-netbsd-gettime.patch
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
diff --git a/libusb/os/netbsd_usb.c b/libusb/os/netbsd_usb.c
|
||||||
|
index a9a50b2..56e681b 100644
|
||||||
|
--- a/libusb/os/netbsd_usb.c
|
||||||
|
+++ b/libusb/os/netbsd_usb.c
|
||||||
|
@@ -580,6 +580,20 @@ _access_endpoint(struct libusb_transfer *transfer)
|
||||||
|
return hpriv->endpoints[endpt];
|
||||||
|
}
|
||||||
|
|
||||||
|
+void usbi_get_monotonic_time(struct timespec *tp) {
|
||||||
|
+ struct timeval tv;
|
||||||
|
+ gettimeofday(&tv, NULL);
|
||||||
|
+ tp->tv_sec = tv.tv_sec;
|
||||||
|
+ tp->tv_nsec = tv.tv_usec * 1000ull;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void usbi_get_real_time(struct timespec *tp) {
|
||||||
|
+ struct timeval tv;
|
||||||
|
+ gettimeofday(&tv, NULL);
|
||||||
|
+ tp->tv_sec = tv.tv_sec;
|
||||||
|
+ tp->tv_nsec = tv.tv_usec * 1000ull;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
int
|
||||||
|
_sync_gen_transfer(struct usbi_transfer *itransfer)
|
||||||
|
{
|
13
.patch/mbedtls/0002-aesni-fix.patch
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
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 */
|
22
.patch/mbedtls/0003-aesni-fix.patch
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
diff --git a/library/aesni.c b/library/aesni.c
|
||||||
|
index 2857068..3e104ab 100644
|
||||||
|
--- a/library/aesni.c
|
||||||
|
+++ b/library/aesni.c
|
||||||
|
@@ -31,16 +31,14 @@
|
||||||
|
#include <immintrin.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
-#if defined(MBEDTLS_ARCH_IS_X86)
|
||||||
|
#if defined(MBEDTLS_COMPILER_IS_GCC)
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target ("pclmul,sse2,aes")
|
||||||
|
#define MBEDTLS_POP_TARGET_PRAGMA
|
||||||
|
-#elif defined(__clang__) && (__clang_major__ >= 5)
|
||||||
|
+#elif defined(__clang__)
|
||||||
|
#pragma clang attribute push (__attribute__((target("pclmul,sse2,aes"))), apply_to=function)
|
||||||
|
#define MBEDTLS_POP_TARGET_PRAGMA
|
||||||
|
#endif
|
||||||
|
-#endif
|
||||||
|
|
||||||
|
#if !defined(MBEDTLS_AES_USE_HARDWARE_ONLY)
|
||||||
|
/*
|
55
.patch/mcl/0001-assert-macro.patch
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
diff --git a/include/mcl/assert.hpp b/include/mcl/assert.hpp
|
||||||
|
index f77dbe7..9ec0b9c 100644
|
||||||
|
--- a/include/mcl/assert.hpp
|
||||||
|
+++ b/include/mcl/assert.hpp
|
||||||
|
@@ -23,8 +23,11 @@ template<typename... Ts>
|
||||||
|
|
||||||
|
} // namespace mcl::detail
|
||||||
|
|
||||||
|
+#ifndef UNREACHABLE
|
||||||
|
#define UNREACHABLE() ASSERT_FALSE("Unreachable code!")
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
+#ifndef ASSERT
|
||||||
|
#define ASSERT(expr) \
|
||||||
|
[&] { \
|
||||||
|
if (std::is_constant_evaluated()) { \
|
||||||
|
@@ -37,7 +40,9 @@ template<typename... Ts>
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
}()
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
+#ifndef ASSERT_MSG
|
||||||
|
#define ASSERT_MSG(expr, ...) \
|
||||||
|
[&] { \
|
||||||
|
if (std::is_constant_evaluated()) { \
|
||||||
|
@@ -50,13 +55,24 @@ template<typename... Ts>
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
}()
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
+#ifndef ASSERT_FALSE
|
||||||
|
#define ASSERT_FALSE(...) ::mcl::detail::assert_terminate("false", __VA_ARGS__)
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
#if defined(NDEBUG) || defined(MCL_IGNORE_ASSERTS)
|
||||||
|
-# define DEBUG_ASSERT(expr) ASSUME(expr)
|
||||||
|
-# define DEBUG_ASSERT_MSG(expr, ...) ASSUME(expr)
|
||||||
|
+# ifndef DEBUG_ASSERT
|
||||||
|
+# define DEBUG_ASSERT(expr) ASSUME(expr)
|
||||||
|
+# endif
|
||||||
|
+# ifndef DEBUG_ASSERT_MSG
|
||||||
|
+# define DEBUG_ASSERT_MSG(expr, ...) ASSUME(expr)
|
||||||
|
+# endif
|
||||||
|
#else
|
||||||
|
-# define DEBUG_ASSERT(expr) ASSERT(expr)
|
||||||
|
-# define DEBUG_ASSERT_MSG(expr, ...) ASSERT_MSG(expr, __VA_ARGS__)
|
||||||
|
+# ifndef DEBUG_ASSERT
|
||||||
|
+# define DEBUG_ASSERT(expr) ASSERT(expr)
|
||||||
|
+# endif
|
||||||
|
+# ifndef DEBUG_ASSERT_MSG
|
||||||
|
+# define DEBUG_ASSERT_MSG(expr, ...) ASSERT_MSG(expr, __VA_ARGS__)
|
||||||
|
+# endif
|
||||||
|
#endif
|
14
.patch/spirv-tools/0001-netbsd-fix.patch
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt
|
||||||
|
index eb4e69e..3155805 100644
|
||||||
|
--- a/external/CMakeLists.txt
|
||||||
|
+++ b/external/CMakeLists.txt
|
||||||
|
@@ -72,7 +72,8 @@ if (SPIRV_TOOLS_USE_MIMALLOC)
|
||||||
|
pop_variable(MI_BUILD_TESTS)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
-if (DEFINED SPIRV-Headers_SOURCE_DIR)
|
||||||
|
+# NetBSD doesn't have SPIRV-Headers readily available on system
|
||||||
|
+if (DEFINED SPIRV-Headers_SOURCE_DIR AND NOT ${CMAKE_SYSTEM_NAME} STREQUAL "NetBSD")
|
||||||
|
# This allows flexible position of the SPIRV-Headers repo.
|
||||||
|
set(SPIRV_HEADER_DIR ${SPIRV-Headers_SOURCE_DIR})
|
||||||
|
else()
|
45
.reuse/dep5
|
@ -13,12 +13,13 @@ 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/yuzu.icns
|
dist/eden.icns
|
||||||
dist/eden.ico
|
dist/eden.ico
|
||||||
dist/eden.svg
|
dist/dev.eden_emu.eden.svg
|
||||||
Copyright: yuzu Emulator Project
|
Copyright: 2025 Eden Emulator Project
|
||||||
License: GPL-2.0-or-later
|
License: GPL-3.0-or-later
|
||||||
|
|
||||||
Files: dist/qt_themes/qdarkstyle*/LICENSE.*
|
Files: dist/qt_themes/qdarkstyle*/LICENSE.*
|
||||||
dist/qt_themes/qdarkstyle*/style.qrc
|
dist/qt_themes/qdarkstyle*/style.qrc
|
||||||
|
@ -155,3 +156,39 @@ License: BSD-3-Clause
|
||||||
Files: src/android/app/debug.keystore
|
Files: src/android/app/debug.keystore
|
||||||
Copyright: 2023 yuzu Emulator Project
|
Copyright: 2023 yuzu Emulator Project
|
||||||
License: GPL-3.0-or-later
|
License: GPL-3.0-or-later
|
||||||
|
|
||||||
|
Files: dist/qt_themes/colorful/icons/48x48/user-trash.png
|
||||||
|
dist/qt_themes/colorful/icons/48x48/upload.png
|
||||||
|
dist/qt_themes/colorful/icons/48x48/download.png
|
||||||
|
Copyright: 2014 Uri Herrera
|
||||||
|
1996-2025 KDE Software Foundation
|
||||||
|
License: LGPL-2.0-or-later
|
||||||
|
|
||||||
|
Files: dist/qt_themes/default/icons/48x48/user-trash.png
|
||||||
|
dist/qt_themes/default/icons/48x48/upload.png
|
||||||
|
dist/qt_themes/default/icons/48x48/download.png
|
||||||
|
dist/qt_themes/default_dark/icons/48x48/user-trash.png
|
||||||
|
dist/qt_themes/default_dark/icons/48x48/upload.png
|
||||||
|
dist/qt_themes/default_dark/icons/48x48/download.png
|
||||||
|
Copyright: 2025 Fonticons, Inc.
|
||||||
|
License: CC-BY-4.0
|
||||||
|
Comment: All of these icons have been modified by crueter <crueter@crueter.xyz>
|
||||||
|
|
||||||
|
Files: CMakeModules/CPM.cmake
|
||||||
|
Copyright: 2019-2023 Lars Melchior
|
||||||
|
License: MIT
|
||||||
|
|
||||||
|
Files: CMakeModules/CPMUtil.cmake
|
||||||
|
CMakeModules/CPM.cmake
|
||||||
|
CMakeModules/GetSCMRev.cmake
|
||||||
|
CMakeModules/DetectArchitecture.cmake
|
||||||
|
tools/cpm/*
|
||||||
|
tools/update-cpm.sh
|
||||||
|
tools/shellcheck.sh
|
||||||
|
docs/CPMUtil.md
|
||||||
|
**cpmfile.json
|
||||||
|
Copyright: 2025 crueter <crueter@crueter.xyz>
|
||||||
|
License: GPL-3.0-or-later
|
||||||
|
Comment: CPM.cmake has had additional modifications from crueter to better work with CPMUtil
|
||||||
|
https://git.crueter.xyz/CMake/CPMUtil
|
||||||
|
https://git.crueter.xyz/CMake/Modules
|
||||||
|
|
1
.shellcheckrc
Normal file
|
@ -0,0 +1 @@
|
||||||
|
shell=sh
|
425
CMakeLists.txt
|
@ -11,6 +11,10 @@ elseif (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
|
||||||
set(PLATFORM_FREEBSD ON)
|
set(PLATFORM_FREEBSD ON)
|
||||||
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD")
|
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD")
|
||||||
set(PLATFORM_OPENBSD ON)
|
set(PLATFORM_OPENBSD ON)
|
||||||
|
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "NetBSD")
|
||||||
|
set(PLATFORM_NETBSD ON)
|
||||||
|
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Haiku")
|
||||||
|
set(PLATFORM_HAIKU ON)
|
||||||
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
||||||
set(PLATFORM_LINUX ON)
|
set(PLATFORM_LINUX ON)
|
||||||
endif()
|
endif()
|
||||||
|
@ -32,16 +36,29 @@ 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")
|
||||||
|
|
||||||
|
# NB: this does not account for SPARC
|
||||||
|
# If you get Eden working on SPARC, please shoot crueter@crueter.xyz multiple emails
|
||||||
|
# and you will be hailed for eternity
|
||||||
if (PLATFORM_SUN)
|
if (PLATFORM_SUN)
|
||||||
# Terrific Solaris pkg shenanigans
|
# Terrific Solaris pkg shenanigans
|
||||||
list(APPEND CMAKE_PREFIX_PATH "/usr/lib/qt/6.6/lib/amd64/cmake")
|
list(APPEND CMAKE_PREFIX_PATH "/usr/lib/qt/6.6/lib/amd64/cmake")
|
||||||
list(APPEND CMAKE_MODULE_PATH "/usr/lib/qt/6.6/lib/amd64/cmake")
|
list(APPEND CMAKE_MODULE_PATH "/usr/lib/qt/6.6/lib/amd64/cmake")
|
||||||
|
|
||||||
|
# Amazing - absolutely incredible
|
||||||
|
list(APPEND CMAKE_PREFIX_PATH "/usr/lib/amd64/cmake")
|
||||||
|
list(APPEND CMAKE_MODULE_PATH "/usr/lib/amd64/cmake")
|
||||||
|
|
||||||
# For some mighty reason, doing a normal release build sometimes may not trigger
|
# For some mighty reason, doing a normal release build sometimes may not trigger
|
||||||
# the proper -O3 switch to materialize
|
# the proper -O3 switch to materialize
|
||||||
if (CMAKE_BUILD_TYPE MATCHES "Release")
|
if (CMAKE_BUILD_TYPE MATCHES "Release")
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3")
|
||||||
endif()
|
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
|
||||||
|
@ -49,6 +66,15 @@ if (PLATFORM_OPENBSD)
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I/usr/X11R6/include")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I/usr/X11R6/include")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I/usr/X11R6/include")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I/usr/X11R6/include")
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L/usr/X11R6/lib")
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L/usr/X11R6/lib")
|
||||||
|
elseif (PLATFORM_NETBSD)
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I/usr/X11R7/include")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I/usr/X11R7/include")
|
||||||
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L/usr/X11R7/lib")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# NetBSD: Fun for the whole family!
|
||||||
|
if (PLATFORM_NETBSD)
|
||||||
|
set(ENV{PKG_CONFIG_PATH} "${PKG_CONFIG_PATH}:/usr/pkg/lib/ffmpeg7/pkgconfig")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Detect current compilation architecture and create standard definitions
|
# Detect current compilation architecture and create standard definitions
|
||||||
|
@ -135,77 +161,105 @@ endif()
|
||||||
|
|
||||||
if (PLATFORM_FREEBSD)
|
if (PLATFORM_FREEBSD)
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L/usr/local/lib")
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L/usr/local/lib")
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Set bundled sdl2/qt as dependent options.
|
# Set bundled sdl2/qt as dependent options.
|
||||||
# On Linux system SDL2 is likely to be lacking HIDAPI support which have drawbacks but is needed for SDL motion
|
# On Linux system SDL2 is likely to be lacking HIDAPI support which have drawbacks but is needed for SDL motion
|
||||||
CMAKE_DEPENDENT_OPTION(ENABLE_SDL2 "Enable the SDL2 frontend" ON "NOT ANDROID" OFF)
|
cmake_dependent_option(ENABLE_SDL2 "Enable the SDL2 frontend" ON "NOT ANDROID" OFF)
|
||||||
|
|
||||||
|
if (ENABLE_SDL2)
|
||||||
|
# TODO(crueter): Cleanup, each dep that has a bundled option should allow to choose between bundled, external, system
|
||||||
|
cmake_dependent_option(YUZU_USE_EXTERNAL_SDL2 "Compile external SDL2" OFF "NOT MSVC" OFF)
|
||||||
|
option(YUZU_USE_BUNDLED_SDL2 "Download bundled SDL2 build" "${MSVC}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# 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)
|
||||||
|
|
||||||
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})
|
||||||
|
|
||||||
CMAKE_DEPENDENT_OPTION(YUZU_USE_EXTERNAL_SDL2 "Compile external SDL2" ${EXT_DEFAULT} "ENABLE_SDL2;NOT MSVC" OFF)
|
# ffmpeg
|
||||||
|
option(YUZU_USE_BUNDLED_FFMPEG "Download bundled FFmpeg" ${EXT_DEFAULT})
|
||||||
|
cmake_dependent_option(YUZU_USE_EXTERNAL_FFMPEG "Build FFmpeg from source" "${PLATFORM_SUN}" "NOT WIN32 AND NOT ANDROID" OFF)
|
||||||
|
|
||||||
|
# sirit
|
||||||
|
option(YUZU_USE_BUNDLED_SIRIT "Download bundled sirit" ${EXT_DEFAULT})
|
||||||
|
|
||||||
cmake_dependent_option(ENABLE_LIBUSB "Enable the use of LibUSB" ON "NOT ANDROID" OFF)
|
cmake_dependent_option(ENABLE_LIBUSB "Enable the use of LibUSB" ON "NOT ANDROID" OFF)
|
||||||
|
|
||||||
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)
|
||||||
|
|
||||||
option(ENABLE_QT "Enable the Qt frontend" ON)
|
|
||||||
option(ENABLE_QT_TRANSLATION "Enable translations for the Qt frontend" OFF)
|
|
||||||
option(ENABLE_QT_UPDATE_CHECKER "Enable update checker for the Qt frontend" OFF)
|
|
||||||
|
|
||||||
CMAKE_DEPENDENT_OPTION(YUZU_USE_BUNDLED_QT "Download bundled Qt binaries" "${MSVC}" "ENABLE_QT" OFF)
|
|
||||||
|
|
||||||
option(YUZU_USE_CPM "Use CPM to fetch system dependencies (fmt, boost, etc) if needed. Externals will still be fetched." ${EXT_DEFAULT})
|
|
||||||
|
|
||||||
option(ENABLE_WEB_SERVICE "Enable web services (telemetry, etc.)" ON)
|
option(ENABLE_WEB_SERVICE "Enable web services (telemetry, etc.)" ON)
|
||||||
option(ENABLE_WIFI_SCAN "Enable WiFi scanning" OFF)
|
option(ENABLE_WIFI_SCAN "Enable WiFi scanning" OFF)
|
||||||
|
|
||||||
option(YUZU_USE_BUNDLED_FFMPEG "Download bundled FFmpeg" ${EXT_DEFAULT})
|
cmake_dependent_option(USE_DISCORD_PRESENCE "Enables Discord Rich Presence" OFF "ENABLE_QT" OFF)
|
||||||
cmake_dependent_option(YUZU_USE_EXTERNAL_FFMPEG "Build FFmpeg from source" OFF "NOT WIN32 AND NOT ANDROID" 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)
|
|
||||||
|
|
||||||
CMAKE_DEPENDENT_OPTION(USE_DISCORD_PRESENCE "Enables Discord Rich Presence" OFF "ENABLE_QT" OFF)
|
|
||||||
|
|
||||||
option(YUZU_TESTS "Compile tests" "${BUILD_TESTING}")
|
option(YUZU_TESTS "Compile tests" "${BUILD_TESTING}")
|
||||||
|
|
||||||
option(YUZU_USE_PRECOMPILED_HEADERS "Use precompiled headers" ${EXT_DEFAULT})
|
option(YUZU_USE_PRECOMPILED_HEADERS "Use precompiled headers" OFF)
|
||||||
|
if (YUZU_USE_PRECOMPILED_HEADERS)
|
||||||
|
message(STATUS "Using Precompiled Headers.")
|
||||||
|
set(CMAKE_PCH_INSTANTIATE_TEMPLATES ON)
|
||||||
|
endif()
|
||||||
|
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})
|
||||||
|
if (YUZU_USE_PRECOMPILED_HEADERS)
|
||||||
|
message(FATAL_ERROR "Precompiled headers are incompatible with ccache. Re-run CMake with -DYUZU_USE_PRECOMPILED_HEADERS=OFF.")
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
message(WARNING "USE_CCACHE enabled, but no executable found at: ${CCACHE_PATH}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
# TODO(crueter): CI this?
|
# 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)
|
||||||
|
|
||||||
# TODO(crueter): Cleanup, each dep that has a bundled option should allow to choose between bundled, external, system
|
option(YUZU_LEGACY "Apply patches that improve compatibility with older GPUs (e.g. Snapdragon 865) at the cost of performance" OFF)
|
||||||
CMAKE_DEPENDENT_OPTION(YUZU_USE_BUNDLED_SDL2 "Download bundled SDL2 build" "${MSVC}" "ENABLE_SDL2" 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 LINUX" OFF)
|
|
||||||
|
|
||||||
option(YUZU_ENABLE_LTO "Enable link-time optimization" 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)
|
||||||
|
|
||||||
CMAKE_DEPENDENT_OPTION(YUZU_USE_FASTER_LD "Check if a faster linker is available" ON "NOT WIN32" OFF)
|
|
||||||
|
|
||||||
CMAKE_DEPENDENT_OPTION(USE_SYSTEM_MOLTENVK "Use the system MoltenVK lib (instead of the bundled one)" OFF "APPLE" OFF)
|
|
||||||
|
|
||||||
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)
|
||||||
|
|
||||||
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)
|
||||||
|
@ -218,15 +272,16 @@ if (ANDROID OR WIN32 OR APPLE OR PLATFORM_SUN)
|
||||||
# your own copy of it.
|
# your own copy of it.
|
||||||
set(DEFAULT_ENABLE_OPENSSL OFF)
|
set(DEFAULT_ENABLE_OPENSSL OFF)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (ENABLE_WEB_SERVICE)
|
if (ENABLE_WEB_SERVICE)
|
||||||
set(DEFAULT_ENABLE_OPENSSL ON)
|
set(DEFAULT_ENABLE_OPENSSL ON)
|
||||||
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)
|
if (ENABLE_OPENSSL)
|
||||||
CMAKE_DEPENDENT_OPTION(YUZU_USE_BUNDLED_OPENSSL "Download bundled OpenSSL build" "${MSVC}" "NOT ANDROID" ON)
|
set(DEFAULT_YUZU_USE_BUNDLED_OPENSSL OFF)
|
||||||
|
if (EXT_DEFAULT OR PLATFORM_SUN)
|
||||||
|
set(DEFAULT_YUZU_USE_BUNDLED_OPENSSL ON)
|
||||||
|
endif()
|
||||||
|
option(YUZU_USE_BUNDLED_OPENSSL "Download bundled OpenSSL build" ${DEFAULT_YUZU_USE_BUNDLED_OPENSSL})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (ANDROID AND YUZU_DOWNLOAD_ANDROID_VVL)
|
if (ANDROID AND YUZU_DOWNLOAD_ANDROID_VVL)
|
||||||
|
@ -253,19 +308,11 @@ if (ANDROID)
|
||||||
set(CMAKE_POLICY_VERSION_MINIMUM 3.5) # Workaround for Oboe
|
set(CMAKE_POLICY_VERSION_MINIMUM 3.5) # Workaround for Oboe
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (YUZU_USE_PRECOMPILED_HEADERS)
|
# We need to downgrade debug info (/Zi -> /Z7) to use an older but more cacheable format
|
||||||
if (MSVC AND CCACHE)
|
# See https://github.com/nanoant/CMakePCHCompiler/issues/21
|
||||||
# buildcache does not properly cache PCH files, leading to compilation errors.
|
if(WIN32 AND (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo"))
|
||||||
# See https://github.com/mbitsnbites/buildcache/discussions/230
|
string(REPLACE "/Zi" "/Z7" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
|
||||||
message(WARNING "buildcache does not properly support Precompiled Headers. Disabling PCH")
|
string(REPLACE "/Zi" "/Z7" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
|
||||||
set(DYNARMIC_USE_PRECOMPILED_HEADERS OFF CACHE BOOL "" FORCE)
|
|
||||||
set(YUZU_USE_PRECOMPILED_HEADERS OFF CACHE BOOL "" FORCE)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (YUZU_USE_PRECOMPILED_HEADERS)
|
|
||||||
message(STATUS "Using Precompiled Headers.")
|
|
||||||
set(CMAKE_PCH_INSTANTIATE_TEMPLATES ON)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Default to a Release build
|
# Default to a Release build
|
||||||
|
@ -307,16 +354,32 @@ if (UNIX)
|
||||||
add_compile_definitions(YUZU_UNIX=1)
|
add_compile_definitions(YUZU_UNIX=1)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if (YUZU_LEGACY)
|
||||||
|
message(WARNING "Making legacy build. Performance may suffer.")
|
||||||
|
add_compile_definitions(YUZU_LEGACY)
|
||||||
|
endif()
|
||||||
|
|
||||||
if (ARCHITECTURE_arm64 AND (ANDROID OR PLATFORM_LINUX))
|
if (ARCHITECTURE_arm64 AND (ANDROID OR PLATFORM_LINUX))
|
||||||
set(HAS_NCE 1)
|
set(HAS_NCE 1)
|
||||||
add_compile_definitions(HAS_NCE=1)
|
add_compile_definitions(HAS_NCE=1)
|
||||||
find_package(oaknut 2.0.1)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (YUZU_ROOM)
|
if (YUZU_ROOM)
|
||||||
add_compile_definitions(YUZU_ROOM)
|
add_compile_definitions(YUZU_ROOM)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if ((ANDROID OR APPLE OR UNIX) AND (NOT PLATFORM_LINUX OR ANDROID) AND NOT WIN32)
|
||||||
|
if(CXX_APPLE OR CXX_CLANG)
|
||||||
|
# libc++ has stop_token and jthread as experimental
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fexperimental-library")
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fexperimental-library")
|
||||||
|
else()
|
||||||
|
# Uses glibc, mostly?
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_LIBCPP_ENABLE_EXPERIMENTAL=1")
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_LIBCPP_ENABLE_EXPERIMENTAL=1")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
# Build/optimization presets
|
# Build/optimization presets
|
||||||
if (PLATFORM_LINUX OR CXX_CLANG)
|
if (PLATFORM_LINUX OR CXX_CLANG)
|
||||||
if (ARCHITECTURE_x86_64)
|
if (ARCHITECTURE_x86_64)
|
||||||
|
@ -370,6 +433,9 @@ include(CPMUtil)
|
||||||
if (ENABLE_OPENSSL)
|
if (ENABLE_OPENSSL)
|
||||||
if (YUZU_USE_BUNDLED_OPENSSL)
|
if (YUZU_USE_BUNDLED_OPENSSL)
|
||||||
AddJsonPackage(openssl)
|
AddJsonPackage(openssl)
|
||||||
|
if (OpenSSL_ADDED)
|
||||||
|
add_compile_definitions(YUZU_BUNDLED_OPENSSL)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
find_package(OpenSSL 1.1.1 REQUIRED)
|
find_package(OpenSSL 1.1.1 REQUIRED)
|
||||||
|
@ -436,22 +502,7 @@ if (YUZU_USE_CPM)
|
||||||
|
|
||||||
if (zstd_ADDED)
|
if (zstd_ADDED)
|
||||||
add_library(zstd::zstd ALIAS libzstd_static)
|
add_library(zstd::zstd ALIAS libzstd_static)
|
||||||
endif()
|
add_library(zstd::libzstd ALIAS libzstd_static)
|
||||||
|
|
||||||
# Catch2
|
|
||||||
if (YUZU_TESTS OR DYNARMIC_TESTS)
|
|
||||||
AddJsonPackage(catch2)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# ENet
|
|
||||||
AddJsonPackage(enet)
|
|
||||||
|
|
||||||
if (enet_ADDED)
|
|
||||||
target_include_directories(enet INTERFACE ${enet_SOURCE_DIR}/include)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (NOT TARGET enet::enet)
|
|
||||||
add_library(enet::enet ALIAS enet)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Opus
|
# Opus
|
||||||
|
@ -468,31 +519,10 @@ 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()
|
||||||
|
|
||||||
# VulkanUtilityHeaders - pulls in headers and utility libs
|
|
||||||
AddJsonPackage(vulkan-utility-headers)
|
|
||||||
|
|
||||||
# small hack
|
|
||||||
if (NOT VulkanUtilityLibraries_ADDED)
|
|
||||||
find_package(VulkanHeaders 1.3.274 REQUIRED)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# SPIRV Headers
|
|
||||||
AddJsonPackage(spirv-headers)
|
|
||||||
|
|
||||||
# SPIRV Tools
|
|
||||||
AddJsonPackage(spirv-tools)
|
|
||||||
|
|
||||||
if (SPIRV-Tools_ADDED)
|
|
||||||
add_library(SPIRV-Tools::SPIRV-Tools ALIAS SPIRV-Tools-static)
|
|
||||||
target_link_libraries(SPIRV-Tools-static PRIVATE SPIRV-Tools-opt SPIRV-Tools-link)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# mbedtls
|
|
||||||
AddJsonPackage(mbedtls)
|
|
||||||
else()
|
else()
|
||||||
# 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)
|
||||||
|
|
||||||
if (NOT YUZU_DISABLE_LLVM)
|
if (NOT YUZU_DISABLE_LLVM)
|
||||||
find_package(LLVM MODULE COMPONENTS Demangle)
|
find_package(LLVM MODULE COMPONENTS Demangle)
|
||||||
endif()
|
endif()
|
||||||
|
@ -501,40 +531,13 @@ else()
|
||||||
find_package(lz4 REQUIRED)
|
find_package(lz4 REQUIRED)
|
||||||
find_package(RenderDoc MODULE)
|
find_package(RenderDoc MODULE)
|
||||||
find_package(stb MODULE)
|
find_package(stb MODULE)
|
||||||
find_package(enet 1.3 MODULE REQUIRED)
|
|
||||||
find_package(Opus 1.3 MODULE REQUIRED)
|
find_package(Opus 1.3 MODULE REQUIRED)
|
||||||
find_package(ZLIB 1.2 REQUIRED)
|
find_package(ZLIB 1.2 REQUIRED)
|
||||||
find_package(zstd 1.5 REQUIRED MODULE)
|
find_package(zstd 1.5 REQUIRED MODULE)
|
||||||
|
|
||||||
# wow
|
# wow
|
||||||
if (PLATFORM_LINUX)
|
find_package(Boost 1.57.0 CONFIG REQUIRED OPTIONAL_COMPONENTS headers context system fiber)
|
||||||
find_package(Boost 1.57.0 REQUIRED headers context system fiber)
|
|
||||||
else()
|
|
||||||
find_package(Boost 1.57.0 REQUIRED)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# OpenBSD does not package mbedtls3 (only 2)
|
|
||||||
if (PLATFORM_OPENBSD)
|
|
||||||
AddJsonPackage(mbedtls)
|
|
||||||
else()
|
|
||||||
find_package(MbedTLS 3 REQUIRED)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
find_package(VulkanUtilityLibraries REQUIRED)
|
|
||||||
find_package(VulkanHeaders 1.3.274 REQUIRED)
|
|
||||||
|
|
||||||
# FreeBSD does not package spirv-headers
|
|
||||||
if (PLATFORM_FREEBSD)
|
|
||||||
AddJsonPackage(spirv-headers)
|
|
||||||
else()
|
|
||||||
find_package(SPIRV-Headers 1.3.274 REQUIRED)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
find_package(SPIRV-Tools MODULE REQUIRED)
|
|
||||||
|
|
||||||
if (YUZU_TESTS)
|
|
||||||
find_package(Catch2 3.0.1 REQUIRED)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (CMAKE_SYSTEM_NAME STREQUAL "Linux" OR ANDROID)
|
if (CMAKE_SYSTEM_NAME STREQUAL "Linux" OR ANDROID)
|
||||||
find_package(gamemode 1.7 MODULE)
|
find_package(gamemode 1.7 MODULE)
|
||||||
|
@ -549,90 +552,6 @@ if(NOT TARGET Boost::headers)
|
||||||
AddJsonPackage(boost_headers)
|
AddJsonPackage(boost_headers)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# DiscordRPC
|
|
||||||
if (USE_DISCORD_PRESENCE)
|
|
||||||
if (ARCHITECTURE_arm64)
|
|
||||||
add_compile_definitions(RAPIDJSON_ENDIAN=RAPIDJSON_LITTLEENDIAN)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
AddJsonPackage(discord-rpc)
|
|
||||||
|
|
||||||
target_include_directories(discord-rpc INTERFACE ${discord-rpc_SOURCE_DIR}/include)
|
|
||||||
add_library(DiscordRPC::discord-rpc ALIAS discord-rpc)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# SimpleIni
|
|
||||||
AddJsonPackage(simpleini)
|
|
||||||
|
|
||||||
# Most linux distros don't package cubeb, so enable regardless of cpm settings
|
|
||||||
if(ENABLE_CUBEB)
|
|
||||||
AddJsonPackage(cubeb)
|
|
||||||
|
|
||||||
if (cubeb_ADDED)
|
|
||||||
if (NOT MSVC)
|
|
||||||
if (TARGET speex)
|
|
||||||
target_compile_options(speex PRIVATE -Wno-sign-compare)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set_target_properties(cubeb PROPERTIES COMPILE_OPTIONS "")
|
|
||||||
target_compile_options(cubeb INTERFACE
|
|
||||||
-Wno-implicit-const-int-float-conversion
|
|
||||||
-Wno-shadow
|
|
||||||
-Wno-missing-declarations
|
|
||||||
-Wno-return-type
|
|
||||||
-Wno-uninitialized
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
target_compile_options(cubeb PRIVATE
|
|
||||||
/wd4456
|
|
||||||
/wd4458
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (NOT TARGET cubeb::cubeb)
|
|
||||||
add_library(cubeb::cubeb ALIAS cubeb)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# find SDL2 exports a bunch of variables that are needed, so its easier to do this outside of the YUZU_find_package
|
|
||||||
if (ENABLE_SDL2)
|
|
||||||
if (YUZU_USE_EXTERNAL_SDL2)
|
|
||||||
message(STATUS "Using SDL2 from externals.")
|
|
||||||
if (NOT WIN32)
|
|
||||||
# Yuzu itself needs: Atomic Audio Events Joystick Haptic Sensor Threads Timers
|
|
||||||
# Since 2.0.18 Atomic+Threads required for HIDAPI/libusb (see https://github.com/libsdl-org/SDL/issues/5095)
|
|
||||||
# Yuzu-cmd also needs: Video (depends on Loadso/Dlopen)
|
|
||||||
# CPUinfo also required for SDL Audio, at least until 2.28.0 (see https://github.com/libsdl-org/SDL/issues/7809)
|
|
||||||
set(SDL_UNUSED_SUBSYSTEMS
|
|
||||||
File Filesystem
|
|
||||||
Locale Power Render)
|
|
||||||
foreach(_SUB ${SDL_UNUSED_SUBSYSTEMS})
|
|
||||||
string(TOUPPER ${_SUB} _OPT)
|
|
||||||
set(SDL_${_OPT} OFF)
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
set(HIDAPI ON)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (APPLE)
|
|
||||||
set(SDL_FILE ON)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if ("${YUZU_SYSTEM_PROFILE}" STREQUAL "steamdeck")
|
|
||||||
set(SDL_PIPEWIRE OFF) # build errors out with this on
|
|
||||||
AddJsonPackage("sdl2_steamdeck")
|
|
||||||
else()
|
|
||||||
AddJsonPackage("sdl2_generic")
|
|
||||||
endif()
|
|
||||||
elseif (YUZU_USE_BUNDLED_SDL2)
|
|
||||||
message(STATUS "Using bundled SDL2")
|
|
||||||
AddJsonPackage(sdl2)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
find_package(SDL2 2.26.4 REQUIRED)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# List of all FFmpeg components required
|
# List of all FFmpeg components required
|
||||||
set(FFmpeg_COMPONENTS
|
set(FFmpeg_COMPONENTS
|
||||||
avcodec
|
avcodec
|
||||||
|
@ -663,19 +582,46 @@ add_subdirectory(externals)
|
||||||
# pass targets from externals
|
# pass targets from externals
|
||||||
find_package(libusb)
|
find_package(libusb)
|
||||||
find_package(VulkanMemoryAllocator)
|
find_package(VulkanMemoryAllocator)
|
||||||
|
find_package(enet)
|
||||||
|
find_package(MbedTLS)
|
||||||
|
find_package(VulkanUtilityLibraries)
|
||||||
|
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)
|
if (ENABLE_WEB_SERVICE OR ENABLE_QT_UPDATE_CHECKER)
|
||||||
find_package(httplib)
|
# Workaround: httplib will kill itself if you attempt to do a find_package propagation
|
||||||
|
# find_package(httplib CONFIG)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (ENABLE_WEB_SERVICE OR ENABLE_QT_UPDATE_CHECKER)
|
if (ENABLE_WEB_SERVICE OR ENABLE_UPDATE_CHECKER)
|
||||||
find_package(cpp-jwt)
|
find_package(cpp-jwt)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if (ARCHITECTURE_arm64 OR DYNARMIC_TESTS)
|
||||||
|
find_package(oaknut)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (ENABLE_SDL2)
|
||||||
|
find_package(SDL2)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (USE_DISCORD_PRESENCE)
|
||||||
|
find_package(DiscordRPC)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (ENABLE_CUBEB)
|
||||||
|
find_package(cubeb)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (YUZU_TESTS OR DYNARMIC_TESTS)
|
||||||
|
find_package(Catch2)
|
||||||
|
endif()
|
||||||
|
|
||||||
if (ENABLE_QT)
|
if (ENABLE_QT)
|
||||||
if (YUZU_USE_BUNDLED_QT)
|
if (YUZU_USE_BUNDLED_QT)
|
||||||
download_qt(6.8.3)
|
download_qt(6.8.3)
|
||||||
|
@ -694,6 +640,8 @@ if (ENABLE_QT)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||||
|
# yes Qt, we get it
|
||||||
|
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)
|
||||||
elseif (UNIX AND NOT APPLE)
|
elseif (UNIX AND NOT APPLE)
|
||||||
find_package(Qt6 REQUIRED COMPONENTS DBus Gui)
|
find_package(Qt6 REQUIRED COMPONENTS DBus Gui)
|
||||||
|
@ -799,6 +747,13 @@ elseif (WIN32)
|
||||||
# PSAPI is the Process Status API
|
# PSAPI is the Process Status API
|
||||||
set(PLATFORM_LIBRARIES ${PLATFORM_LIBRARIES} psapi imm32 version)
|
set(PLATFORM_LIBRARIES ${PLATFORM_LIBRARIES} psapi imm32 version)
|
||||||
endif()
|
endif()
|
||||||
|
elseif (PLATFORM_HAIKU)
|
||||||
|
# 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)
|
||||||
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)
|
||||||
endif()
|
endif()
|
||||||
|
@ -884,18 +839,46 @@ if (MSVC AND CXX_CLANG)
|
||||||
link_libraries(llvm-mingw-runtime)
|
link_libraries(llvm-mingw-runtime)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (YUZU_USE_FASTER_LD AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
#[[
|
||||||
# We will assume that if the compiler is GCC, it will attempt to use ld.bfd by default.
|
search order:
|
||||||
# Try to pick a faster linker.
|
- gold (GCC only) - the best, generally, but unfortunately not packaged anymore
|
||||||
find_program(LLD lld)
|
- mold (GCC only) - generally does well on GCC
|
||||||
find_program(MOLD mold)
|
- 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()
|
||||||
|
|
||||||
if (MOLD AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "12.1")
|
find_program(LINKER_LLD lld)
|
||||||
message(NOTICE "Selecting mold as linker")
|
if (LINKER_LLD)
|
||||||
add_link_options("-fuse-ld=mold")
|
set(LINKER lld)
|
||||||
elseif (LLD)
|
endif()
|
||||||
message(NOTICE "Selecting lld as linker")
|
|
||||||
add_link_options("-fuse-ld=lld")
|
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()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
# 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.
|
||||||
|
@ -743,9 +748,11 @@ function(CPMAddPackage)
|
||||||
if(NOT DEFINED CPM_ARGS_NAME)
|
if(NOT DEFINED CPM_ARGS_NAME)
|
||||||
set(CPM_ARGS_NAME ${nameFromUrl})
|
set(CPM_ARGS_NAME ${nameFromUrl})
|
||||||
endif()
|
endif()
|
||||||
if(NOT DEFINED CPM_ARGS_VERSION)
|
|
||||||
set(CPM_ARGS_VERSION ${verFromUrl})
|
# this is dumb and should not be done
|
||||||
endif()
|
# if(NOT DEFINED CPM_ARGS_VERSION)
|
||||||
|
# set(CPM_ARGS_VERSION ${verFromUrl})
|
||||||
|
# endif()
|
||||||
|
|
||||||
list(APPEND CPM_ARGS_UNPARSED_ARGUMENTS URL "${CPM_ARGS_URL}")
|
list(APPEND CPM_ARGS_UNPARSED_ARGUMENTS URL "${CPM_ARGS_URL}")
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -107,7 +107,6 @@ function(AddJsonPackage)
|
||||||
get_json_element("${object}" name name "${JSON_NAME}")
|
get_json_element("${object}" name name "${JSON_NAME}")
|
||||||
get_json_element("${object}" extension extension "tar.zst")
|
get_json_element("${object}" extension extension "tar.zst")
|
||||||
get_json_element("${object}" min_version min_version "")
|
get_json_element("${object}" min_version min_version "")
|
||||||
get_json_element("${object}" cmake_filename cmake_filename "")
|
|
||||||
get_json_element("${object}" raw_disabled disabled_platforms "")
|
get_json_element("${object}" raw_disabled disabled_platforms "")
|
||||||
|
|
||||||
if (raw_disabled)
|
if (raw_disabled)
|
||||||
|
@ -124,7 +123,6 @@ function(AddJsonPackage)
|
||||||
EXTENSION ${extension}
|
EXTENSION ${extension}
|
||||||
MIN_VERSION ${min_version}
|
MIN_VERSION ${min_version}
|
||||||
DISABLED_PLATFORMS ${disabled_platforms}
|
DISABLED_PLATFORMS ${disabled_platforms}
|
||||||
CMAKE_FILENAME ${cmake_filename}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# pass stuff to parent scope
|
# pass stuff to parent scope
|
||||||
|
@ -139,6 +137,7 @@ function(AddJsonPackage)
|
||||||
endif()
|
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}" sha sha "")
|
get_json_element("${object}" sha sha "")
|
||||||
get_json_element("${object}" url url "")
|
get_json_element("${object}" url url "")
|
||||||
get_json_element("${object}" key key "")
|
get_json_element("${object}" key key "")
|
||||||
|
@ -208,6 +207,7 @@ function(AddJsonPackage)
|
||||||
VERSION "${version}"
|
VERSION "${version}"
|
||||||
URL "${url}"
|
URL "${url}"
|
||||||
HASH "${hash}"
|
HASH "${hash}"
|
||||||
|
HASH_SUFFIX "${hash_suffix}"
|
||||||
SHA "${sha}"
|
SHA "${sha}"
|
||||||
REPO "${repo}"
|
REPO "${repo}"
|
||||||
KEY "${key}"
|
KEY "${key}"
|
||||||
|
@ -277,6 +277,7 @@ function(AddPackage)
|
||||||
|
|
||||||
KEY
|
KEY
|
||||||
BUNDLED_PACKAGE
|
BUNDLED_PACKAGE
|
||||||
|
FORCE_BUNDLED_PACKAGE
|
||||||
FIND_PACKAGE_ARGUMENTS
|
FIND_PACKAGE_ARGUMENTS
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -324,7 +325,7 @@ function(AddPackage)
|
||||||
${pkg_git_url}/archive/refs/tags/${PKG_ARGS_TAG}.tar.gz)
|
${pkg_git_url}/archive/refs/tags/${PKG_ARGS_TAG}.tar.gz)
|
||||||
endif()
|
endif()
|
||||||
elseif (DEFINED PKG_ARGS_SHA)
|
elseif (DEFINED PKG_ARGS_SHA)
|
||||||
set(pkg_url "${pkg_git_url}/archive/${PKG_ARGS_SHA}.zip")
|
set(pkg_url "${pkg_git_url}/archive/${PKG_ARGS_SHA}.tar.gz")
|
||||||
else()
|
else()
|
||||||
if (DEFINED PKG_ARGS_BRANCH)
|
if (DEFINED PKG_ARGS_BRANCH)
|
||||||
set(PKG_BRANCH ${PKG_ARGS_BRANCH})
|
set(PKG_BRANCH ${PKG_ARGS_BRANCH})
|
||||||
|
@ -334,7 +335,7 @@ function(AddPackage)
|
||||||
set(PKG_BRANCH master)
|
set(PKG_BRANCH master)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(pkg_url ${pkg_git_url}/archive/refs/heads/${PKG_BRANCH}.zip)
|
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")
|
||||||
|
@ -426,7 +427,9 @@ function(AddPackage)
|
||||||
- BUNDLED_PACKAGE
|
- BUNDLED_PACKAGE
|
||||||
- default to allow local
|
- default to allow local
|
||||||
]]#
|
]]#
|
||||||
if (${PKG_ARGS_NAME}_FORCE_SYSTEM)
|
if (PKG_ARGS_FORCE_BUNDLED_PACKAGE)
|
||||||
|
set_precedence(OFF OFF)
|
||||||
|
elseif (${PKG_ARGS_NAME}_FORCE_SYSTEM)
|
||||||
set_precedence(ON ON)
|
set_precedence(ON ON)
|
||||||
elseif (${PKG_ARGS_NAME}_FORCE_BUNDLED)
|
elseif (${PKG_ARGS_NAME}_FORCE_BUNDLED)
|
||||||
set_precedence(OFF OFF)
|
set_precedence(OFF OFF)
|
||||||
|
@ -446,9 +449,14 @@ function(AddPackage)
|
||||||
set_precedence(ON OFF)
|
set_precedence(ON OFF)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if (DEFINED PKG_ARGS_VERSION)
|
||||||
|
list(APPEND EXTRA_ARGS
|
||||||
|
VERSION ${PKG_ARGS_VERSION}
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
CPMAddPackage(
|
CPMAddPackage(
|
||||||
NAME ${PKG_ARGS_NAME}
|
NAME ${PKG_ARGS_NAME}
|
||||||
VERSION ${PKG_ARGS_VERSION}
|
|
||||||
URL ${pkg_url}
|
URL ${pkg_url}
|
||||||
URL_HASH ${pkg_hash}
|
URL_HASH ${pkg_hash}
|
||||||
CUSTOM_CACHE_KEY ${pkg_key}
|
CUSTOM_CACHE_KEY ${pkg_key}
|
||||||
|
@ -459,6 +467,8 @@ function(AddPackage)
|
||||||
PATCHES ${PKG_ARGS_PATCHES}
|
PATCHES ${PKG_ARGS_PATCHES}
|
||||||
EXCLUDE_FROM_ALL ON
|
EXCLUDE_FROM_ALL ON
|
||||||
|
|
||||||
|
${EXTRA_ARGS}
|
||||||
|
|
||||||
${PKG_ARGS_UNPARSED_ARGUMENTS}
|
${PKG_ARGS_UNPARSED_ARGUMENTS}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -511,12 +521,12 @@ function(add_ci_package key)
|
||||||
NAME ${ARTIFACT_PACKAGE}
|
NAME ${ARTIFACT_PACKAGE}
|
||||||
REPO ${ARTIFACT_REPO}
|
REPO ${ARTIFACT_REPO}
|
||||||
TAG v${ARTIFACT_VERSION}
|
TAG v${ARTIFACT_VERSION}
|
||||||
VERSION ${ARTIFACT_VERSION}
|
GIT_VERSION ${ARTIFACT_VERSION}
|
||||||
ARTIFACT ${ARTIFACT}
|
ARTIFACT ${ARTIFACT}
|
||||||
|
|
||||||
KEY ${key}
|
KEY ${key}-${ARTIFACT_VERSION}
|
||||||
HASH_SUFFIX sha512sum
|
HASH_SUFFIX sha512sum
|
||||||
BUNDLED_PACKAGE ON
|
FORCE_BUNDLED_PACKAGE ON
|
||||||
)
|
)
|
||||||
|
|
||||||
set(ARTIFACT_DIR ${${ARTIFACT_PACKAGE}_SOURCE_DIR} PARENT_SCOPE)
|
set(ARTIFACT_DIR ${${ARTIFACT_PACKAGE}_SOURCE_DIR} PARENT_SCOPE)
|
||||||
|
@ -533,7 +543,6 @@ function(AddCIPackage)
|
||||||
EXTENSION
|
EXTENSION
|
||||||
MIN_VERSION
|
MIN_VERSION
|
||||||
DISABLED_PLATFORMS
|
DISABLED_PLATFORMS
|
||||||
CMAKE_FILENAME
|
|
||||||
)
|
)
|
||||||
|
|
||||||
cmake_parse_arguments(PKG_ARGS "" "${oneValueArgs}" "" ${ARGN})
|
cmake_parse_arguments(PKG_ARGS "" "${oneValueArgs}" "" ${ARGN})
|
||||||
|
@ -589,25 +598,28 @@ function(AddCIPackage)
|
||||||
add_ci_package(android)
|
add_ci_package(android)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(PLATFORM_SUN AND NOT "solaris" IN_LIST DISABLED_PLATFORMS)
|
if(PLATFORM_SUN AND NOT "solaris-amd64" IN_LIST DISABLED_PLATFORMS)
|
||||||
add_ci_package(solaris)
|
add_ci_package(solaris-amd64)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(PLATFORM_FREEBSD AND NOT "freebsd" IN_LIST DISABLED_PLATFORMS)
|
if(PLATFORM_FREEBSD AND NOT "freebsd-amd64" IN_LIST DISABLED_PLATFORMS)
|
||||||
add_ci_package(freebsd)
|
add_ci_package(freebsd-amd64)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if((PLATFORM_LINUX AND ARCHITECTURE_x86_64) AND NOT "linux" IN_LIST DISABLED_PLATFORMS)
|
if((PLATFORM_LINUX AND ARCHITECTURE_x86_64) AND NOT "linux-amd64" IN_LIST DISABLED_PLATFORMS)
|
||||||
add_ci_package(linux)
|
add_ci_package(linux-amd64)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if((PLATFORM_LINUX AND ARCHITECTURE_arm64) AND NOT "linux-aarch64" IN_LIST DISABLED_PLATFORMS)
|
if((PLATFORM_LINUX AND ARCHITECTURE_arm64) AND NOT "linux-aarch64" IN_LIST DISABLED_PLATFORMS)
|
||||||
add_ci_package(linux-aarch64)
|
add_ci_package(linux-aarch64)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (DEFINED ARTIFACT_DIR)
|
# TODO(crueter): macOS amd64/aarch64 split mayhaps
|
||||||
include(${ARTIFACT_DIR}/${ARTIFACT_CMAKE}.cmake)
|
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_DIR}" PARENT_SCOPE)
|
||||||
else()
|
else()
|
||||||
|
|
|
@ -10,6 +10,7 @@ function(download_bundled_external remote_path lib_name cpm_key prefix_var versi
|
||||||
set(package_base_url "https://github.com/eden-emulator/")
|
set(package_base_url "https://github.com/eden-emulator/")
|
||||||
set(package_repo "no_platform")
|
set(package_repo "no_platform")
|
||||||
set(package_extension "no_platform")
|
set(package_extension "no_platform")
|
||||||
|
set(CACHE_KEY "")
|
||||||
|
|
||||||
# TODO(crueter): Need to convert ffmpeg to a CI.
|
# TODO(crueter): Need to convert ffmpeg to a CI.
|
||||||
if (WIN32 OR FORCE_WIN_ARCHIVES)
|
if (WIN32 OR FORCE_WIN_ARCHIVES)
|
||||||
|
@ -33,8 +34,9 @@ function(download_bundled_external remote_path lib_name cpm_key prefix_var versi
|
||||||
else()
|
else()
|
||||||
message(FATAL_ERROR "No package available for this platform")
|
message(FATAL_ERROR "No package available for this platform")
|
||||||
endif()
|
endif()
|
||||||
set(package_url "${package_base_url}${package_repo}")
|
string(CONCAT package_url "${package_base_url}" "${package_repo}")
|
||||||
set(full_url ${package_url}${remote_path}${lib_name}${package_extension})
|
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!
|
# TODO(crueter): DELETE THIS ENTIRELY, GLORY BE TO THE CI!
|
||||||
AddPackage(
|
AddPackage(
|
||||||
|
@ -47,26 +49,12 @@ function(download_bundled_external remote_path lib_name cpm_key prefix_var versi
|
||||||
# TODO(crueter): hash
|
# TODO(crueter): hash
|
||||||
)
|
)
|
||||||
|
|
||||||
set(${prefix_var} "${${cpm_key}_SOURCE_DIR}" PARENT_SCOPE)
|
if (DEFINED ${cpm_key}_SOURCE_DIR)
|
||||||
message(STATUS "Using bundled binaries at ${${cpm_key}_SOURCE_DIR}")
|
set(${prefix_var} "${${cpm_key}_SOURCE_DIR}" PARENT_SCOPE)
|
||||||
endfunction()
|
message(STATUS "Using bundled binaries at ${${cpm_key}_SOURCE_DIR}")
|
||||||
|
else()
|
||||||
function(download_moltenvk_external platform version)
|
message(FATAL_ERROR "AddPackage did not set ${cpm_key}_SOURCE_DIR")
|
||||||
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")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Add the MoltenVK library path to the prefix so find_library can locate it.
|
|
||||||
list(APPEND CMAKE_PREFIX_PATH "${MOLTENVK_DIR}/MoltenVK/dylib/${platform}")
|
|
||||||
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE)
|
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
# Determine installation parameters for OS, architecture, and compiler
|
# Determine installation parameters for OS, architecture, and compiler
|
||||||
|
@ -108,7 +96,7 @@ function(determine_qt_parameters target host_out type_out arch_out arch_path_out
|
||||||
set(host "linux")
|
set(host "linux")
|
||||||
set(type "desktop")
|
set(type "desktop")
|
||||||
set(arch "linux_gcc_64")
|
set(arch "linux_gcc_64")
|
||||||
set(arch_path "linux")
|
set(arch_path "gcc_64")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(${host_out} "${host}" PARENT_SCOPE)
|
set(${host_out} "${host}" PARENT_SCOPE)
|
||||||
|
@ -143,56 +131,79 @@ function(download_qt_configuration prefix_out target host type arch arch_path ba
|
||||||
set(install_args -c "${CURRENT_MODULE_DIR}/aqt_config.ini")
|
set(install_args -c "${CURRENT_MODULE_DIR}/aqt_config.ini")
|
||||||
if (tool)
|
if (tool)
|
||||||
set(prefix "${base_path}/Tools")
|
set(prefix "${base_path}/Tools")
|
||||||
set(install_args ${install_args} install-tool --outputdir ${base_path} ${host} desktop ${target})
|
list(APPEND install_args install-tool --outputdir "${base_path}" "${host}" desktop "${target}")
|
||||||
else()
|
else()
|
||||||
set(prefix "${base_path}/${target}/${arch_path}")
|
set(prefix "${base_path}/${target}/${arch_path}")
|
||||||
set(install_args ${install_args} install-qt --outputdir ${base_path} ${host} ${type} ${target} ${arch} -m qt_base)
|
list(APPEND install_args install-qt --outputdir "${base_path}" "${host}" "${type}" "${target}" "${arch}" -m qt_base)
|
||||||
|
|
||||||
if (YUZU_USE_QT_MULTIMEDIA)
|
if (YUZU_USE_QT_MULTIMEDIA)
|
||||||
set(install_args ${install_args} qtmultimedia)
|
list(APPEND install_args qtmultimedia)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (YUZU_USE_QT_WEB_ENGINE)
|
if (YUZU_USE_QT_WEB_ENGINE)
|
||||||
set(install_args ${install_args} qtpositioning qtwebchannel qtwebengine)
|
list(APPEND install_args qtpositioning qtwebchannel qtwebengine)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (NOT ${YUZU_QT_MIRROR} STREQUAL "")
|
if (NOT "${YUZU_QT_MIRROR}" STREQUAL "")
|
||||||
message(STATUS "Using Qt mirror ${YUZU_QT_MIRROR}")
|
message(STATUS "Using Qt mirror ${YUZU_QT_MIRROR}")
|
||||||
set(install_args ${install_args} -b ${YUZU_QT_MIRROR})
|
list(APPEND install_args -b "${YUZU_QT_MIRROR}")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
message(STATUS "Install Args ${install_args}")
|
message(STATUS "Install Args: ${install_args}")
|
||||||
|
|
||||||
if (NOT EXISTS "${prefix}")
|
if (NOT EXISTS "${prefix}")
|
||||||
message(STATUS "Downloading Qt binaries for ${target}:${host}:${type}:${arch}:${arch_path}")
|
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")
|
set(AQT_PREBUILD_BASE_URL "https://github.com/miurahr/aqtinstall/releases/download/v3.3.0")
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
set(aqt_path "${base_path}/aqt.exe")
|
set(aqt_path "${base_path}/aqt.exe")
|
||||||
if (NOT EXISTS "${aqt_path}")
|
if (NOT EXISTS "${aqt_path}")
|
||||||
file(DOWNLOAD
|
file(DOWNLOAD "${AQT_PREBUILD_BASE_URL}/aqt.exe" "${aqt_path}" SHOW_PROGRESS)
|
||||||
${AQT_PREBUILD_BASE_URL}/aqt.exe
|
endif()
|
||||||
${aqt_path} SHOW_PROGRESS)
|
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()
|
endif()
|
||||||
execute_process(COMMAND ${aqt_path} ${install_args}
|
|
||||||
WORKING_DIRECTORY ${base_path})
|
|
||||||
elseif (APPLE)
|
elseif (APPLE)
|
||||||
set(aqt_path "${base_path}/aqt-macos")
|
set(aqt_path "${base_path}/aqt-macos")
|
||||||
if (NOT EXISTS "${aqt_path}")
|
if (NOT EXISTS "${aqt_path}")
|
||||||
file(DOWNLOAD
|
file(DOWNLOAD "${AQT_PREBUILD_BASE_URL}/aqt-macos" "${aqt_path}" SHOW_PROGRESS)
|
||||||
${AQT_PREBUILD_BASE_URL}/aqt-macos
|
endif()
|
||||||
${aqt_path} SHOW_PROGRESS)
|
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()
|
endif()
|
||||||
execute_process(COMMAND chmod +x ${aqt_path})
|
|
||||||
execute_process(COMMAND ${aqt_path} ${install_args}
|
|
||||||
WORKING_DIRECTORY ${base_path})
|
|
||||||
else()
|
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")
|
set(aqt_install_path "${base_path}/aqt")
|
||||||
file(MAKE_DIRECTORY "${aqt_install_path}")
|
file(MAKE_DIRECTORY "${aqt_install_path}")
|
||||||
|
|
||||||
execute_process(COMMAND python3 -m pip install --target=${aqt_install_path} aqtinstall
|
execute_process(COMMAND "${PYTHON3_EXECUTABLE}" -m pip install --target="${aqt_install_path}" aqtinstall
|
||||||
WORKING_DIRECTORY ${base_path})
|
WORKING_DIRECTORY "${base_path}"
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E env PYTHONPATH=${aqt_install_path} python3 -m aqt ${install_args}
|
RESULT_VARIABLE pip_res
|
||||||
WORKING_DIRECTORY ${base_path})
|
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()
|
endif()
|
||||||
|
|
||||||
message(STATUS "Downloaded Qt binaries for ${target}:${host}:${type}:${arch}:${arch_path} to ${prefix}")
|
message(STATUS "Downloaded Qt binaries for ${target}:${host}:${type}:${arch}:${arch_path} to ${prefix}")
|
||||||
|
@ -210,7 +221,7 @@ endfunction()
|
||||||
function(download_qt target)
|
function(download_qt target)
|
||||||
determine_qt_parameters("${target}" host type arch arch_path host_type host_arch host_arch_path)
|
determine_qt_parameters("${target}" host type arch arch_path host_type host_arch host_arch_path)
|
||||||
|
|
||||||
get_external_prefix(qt base_path)
|
set(base_path "${CMAKE_BINARY_DIR}/externals/qt")
|
||||||
file(MAKE_DIRECTORY "${base_path}")
|
file(MAKE_DIRECTORY "${base_path}")
|
||||||
|
|
||||||
download_qt_configuration(prefix "${target}" "${host}" "${type}" "${arch}" "${arch_path}" "${base_path}")
|
download_qt_configuration(prefix "${target}" "${host}" "${type}" "${arch}" "${arch_path}" "${base_path}")
|
||||||
|
@ -227,26 +238,34 @@ function(download_qt target)
|
||||||
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE)
|
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
function(download_moltenvk)
|
function(download_moltenvk version platform)
|
||||||
set(MOLTENVK_PLATFORM "macOS")
|
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_DIR "${CMAKE_BINARY_DIR}/externals/MoltenVK")
|
||||||
set(MOLTENVK_TAR "${CMAKE_BINARY_DIR}/externals/MoltenVK.tar")
|
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/v1.2.10-rc2/MoltenVK-all.tar
|
|
||||||
${MOLTENVK_TAR} SHOW_PROGRESS)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf "${MOLTENVK_TAR}"
|
if(NOT EXISTS "${MOLTENVK_DIR}")
|
||||||
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/externals")
|
if(NOT EXISTS "${MOLTENVK_TAR}")
|
||||||
endif()
|
file(DOWNLOAD "https://github.com/KhronosGroup/MoltenVK/releases/download/${version}/MoltenVK-${platform}.tar"
|
||||||
|
"${MOLTENVK_TAR}" SHOW_PROGRESS)
|
||||||
|
endif()
|
||||||
|
|
||||||
# Add the MoltenVK library path to the prefix so find_library can locate it.
|
execute_process(
|
||||||
list(APPEND CMAKE_PREFIX_PATH "${MOLTENVK_DIR}/MoltenVK/dylib/${MOLTENVK_PLATFORM}")
|
COMMAND ${CMAKE_COMMAND} -E tar xf "${MOLTENVK_TAR}"
|
||||||
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE)
|
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()
|
endfunction()
|
||||||
|
|
||||||
function(get_external_prefix lib_name prefix_var)
|
|
||||||
set(${prefix_var} "${CMAKE_BINARY_DIR}/externals/${lib_name}" PARENT_SCOPE)
|
|
||||||
endfunction()
|
|
||||||
|
|
|
@ -1,27 +1,33 @@
|
||||||
|
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
# SPDX-FileCopyrightText: 2022 Alexandre Bouvier <contact@amb.tf>
|
# SPDX-FileCopyrightText: 2022 Alexandre Bouvier <contact@amb.tf>
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
find_path(DiscordRPC_INCLUDE_DIR discord_rpc.h)
|
find_package(DiscordRPC CONFIG QUIET)
|
||||||
|
|
||||||
find_library(DiscordRPC_LIBRARY discord-rpc)
|
if (NOT DiscordRPC_FOUND)
|
||||||
|
find_path(DiscordRPC_INCLUDE_DIR discord_rpc.h)
|
||||||
|
find_library(DiscordRPC_LIBRARY discord-rpc)
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
include(FindPackageHandleStandardArgs)
|
||||||
find_package_handle_standard_args(DiscordRPC
|
find_package_handle_standard_args(DiscordRPC
|
||||||
REQUIRED_VARS
|
REQUIRED_VARS
|
||||||
DiscordRPC_LIBRARY
|
DiscordRPC_LIBRARY
|
||||||
|
DiscordRPC_INCLUDE_DIR
|
||||||
|
)
|
||||||
|
|
||||||
|
if (DiscordRPC_FOUND AND NOT TARGET DiscordRPC::discord-rpc)
|
||||||
|
add_library(DiscordRPC::discord-rpc UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(DiscordRPC::discord-rpc PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${DiscordRPC_LIBRARY}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${DiscordRPC_INCLUDE_DIR}"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
mark_as_advanced(
|
||||||
DiscordRPC_INCLUDE_DIR
|
DiscordRPC_INCLUDE_DIR
|
||||||
)
|
DiscordRPC_LIBRARY
|
||||||
|
|
||||||
if (DiscordRPC_FOUND AND NOT TARGET DiscordRPC::discord-rpc)
|
|
||||||
add_library(DiscordRPC::discord-rpc UNKNOWN IMPORTED)
|
|
||||||
set_target_properties(DiscordRPC::discord-rpc PROPERTIES
|
|
||||||
IMPORTED_LOCATION "${DiscordRPC_LIBRARY}"
|
|
||||||
INTERFACE_INCLUDE_DIRECTORIES "${DiscordRPC_INCLUDE_DIR}"
|
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
mark_as_advanced(
|
|
||||||
DiscordRPC_INCLUDE_DIR
|
|
||||||
DiscordRPC_LIBRARY
|
|
||||||
)
|
|
||||||
|
|
|
@ -13,9 +13,12 @@ find_package_handle_standard_args(zstd
|
||||||
if (zstd_FOUND AND NOT TARGET zstd::zstd)
|
if (zstd_FOUND AND NOT TARGET zstd::zstd)
|
||||||
if (TARGET zstd::libzstd_shared)
|
if (TARGET zstd::libzstd_shared)
|
||||||
add_library(zstd::zstd ALIAS zstd::libzstd_shared)
|
add_library(zstd::zstd ALIAS zstd::libzstd_shared)
|
||||||
|
add_library(zstd::libzstd ALIAS zstd::libzstd_shared)
|
||||||
elseif (TARGET zstd::libzstd_static)
|
elseif (TARGET zstd::libzstd_static)
|
||||||
add_library(zstd::zstd ALIAS zstd::libzstd_static)
|
add_library(zstd::zstd ALIAS zstd::libzstd_static)
|
||||||
|
add_library(zstd::libzstd ALIAS zstd::libzstd_static)
|
||||||
else()
|
else()
|
||||||
add_library(zstd::zstd ALIAS PkgConfig::ZSTD)
|
add_library(zstd::zstd ALIAS PkgConfig::ZSTD)
|
||||||
|
add_library(zstd::libzstd ALIAS PkgConfig::ZSTD)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -31,7 +31,11 @@ set(GIT_DESC ${BUILD_VERSION})
|
||||||
set(REPO_NAME "Eden")
|
set(REPO_NAME "Eden")
|
||||||
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)
|
||||||
|
|
|
@ -48,6 +48,8 @@ A list of supported games will be available in future. Please be patient.
|
||||||
|
|
||||||
Check out our [website](https://eden-emu.dev) for the latest news on exciting features, monthly progress reports, and more!
|
Check out our [website](https://eden-emu.dev) for the latest news on exciting features, monthly progress reports, and more!
|
||||||
|
|
||||||
|
[](https://repology.org/project/eden-emulator/versions)
|
||||||
|
|
||||||
## 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/kXAmGCXBGD) or [Revolt](https://rvlt.gg/qKgFEAbH).
|
||||||
|
@ -63,6 +65,8 @@ Alternatively, if you wish to add translations, go to the [Eden project on Trans
|
||||||
|
|
||||||
See the [General Build Guide](docs/Build.md)
|
See the [General Build Guide](docs/Build.md)
|
||||||
|
|
||||||
|
For information on provided development tooling, see the [Tools directory](./tools)
|
||||||
|
|
||||||
## Download
|
## Download
|
||||||
|
|
||||||
You can download the latest releases from [here](https://github.com/eden-emulator/Releases/releases).
|
You can download the latest releases from [here](https://github.com/eden-emulator/Releases/releases).
|
||||||
|
|
139
cpmfile.json
|
@ -4,8 +4,11 @@
|
||||||
"package": "OpenSSL",
|
"package": "OpenSSL",
|
||||||
"name": "openssl",
|
"name": "openssl",
|
||||||
"repo": "crueter-ci/OpenSSL",
|
"repo": "crueter-ci/OpenSSL",
|
||||||
"version": "3.5.3",
|
"version": "3.6.0",
|
||||||
"min_version": "1.1.1"
|
"min_version": "1.1.1",
|
||||||
|
"disabled_platforms": [
|
||||||
|
"macos-universal"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"boost": {
|
"boost": {
|
||||||
"package": "Boost",
|
"package": "Boost",
|
||||||
|
@ -15,6 +18,7 @@
|
||||||
"hash": "4fb7f6fde92762305aad8754d7643cd918dd1f3f67e104e9ab385b18c73178d72a17321354eb203b790b6702f2cf6d725a5d6e2dfbc63b1e35f9eb59fb42ece9",
|
"hash": "4fb7f6fde92762305aad8754d7643cd918dd1f3f67e104e9ab385b18c73178d72a17321354eb203b790b6702f2cf6d725a5d6e2dfbc63b1e35f9eb59fb42ece9",
|
||||||
"git_version": "1.89.0",
|
"git_version": "1.89.0",
|
||||||
"version": "1.57",
|
"version": "1.57",
|
||||||
|
"find_args": "CONFIG",
|
||||||
"patches": [
|
"patches": [
|
||||||
"0001-clang-cl.patch",
|
"0001-clang-cl.patch",
|
||||||
"0002-use-marmasm.patch",
|
"0002-use-marmasm.patch",
|
||||||
|
@ -23,33 +27,33 @@
|
||||||
},
|
},
|
||||||
"fmt": {
|
"fmt": {
|
||||||
"repo": "fmtlib/fmt",
|
"repo": "fmtlib/fmt",
|
||||||
"sha": "40626af88b",
|
"tag": "%VERSION%",
|
||||||
"hash": "d59f06c24339f223de4ec2afeba1c67b5835a0f350a1ffa86242a72fc3e616a6b8b21798355428d4200c75287308b66634619ffa0b52ba5bd74cc01772ea1a8a",
|
"hash": "c4ab814c20fbad7e3f0ae169125a4988a2795631194703251481dc36b18da65c886c4faa9acd046b0a295005217b3689eb0126108a9ba5aac2ca909aae263c2f",
|
||||||
"version": "8",
|
"version": "8",
|
||||||
"options": [
|
"git_version": "12.0.0"
|
||||||
"FMT_INSTALL OFF"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"lz4": {
|
"lz4": {
|
||||||
"name": "lz4",
|
"name": "lz4",
|
||||||
"repo": "lz4/lz4",
|
"repo": "lz4/lz4",
|
||||||
"sha": "ebb370ca83",
|
"sha": "ebb370ca83",
|
||||||
"hash": "43600e87b35256005c0f2498fa56a77de6783937ba4cfce38c099f27c03188d097863e8a50c5779ca0a7c63c29c4f7ed0ae526ec798c1fd2e3736861b62e0a37",
|
"hash": "35c21a5d9cfb5bbf314a5321d02b36819491d2ee3cf8007030ca09d13ca4dae672247b7aeab553e973093604fc48221cb03dc92197c6efe8fc3746891363fdab",
|
||||||
"source_subdir": "build/cmake"
|
"source_subdir": "build/cmake"
|
||||||
},
|
},
|
||||||
"nlohmann": {
|
"nlohmann": {
|
||||||
"package": "nlohmann_json",
|
"package": "nlohmann_json",
|
||||||
"repo": "nlohmann/json",
|
"repo": "nlohmann/json",
|
||||||
"sha": "55f93686c0",
|
"tag": "v%VERSION%",
|
||||||
"hash": "b739749b066800e21154506ea150d2c5cbce8a45344177f46f884547a1399d26753166fd0df8135269ce28cf223552b1b65cd625b88c844d54753f2434900486",
|
"hash": "6cc1e86261f8fac21cc17a33da3b6b3c3cd5c116755651642af3c9e99bb3538fd42c1bd50397a77c8fb6821bc62d90e6b91bcdde77a78f58f2416c62fc53b97d",
|
||||||
"version": "3.8"
|
"version": "3.8",
|
||||||
|
"git_version": "3.12.0"
|
||||||
},
|
},
|
||||||
"zlib": {
|
"zlib": {
|
||||||
"package": "ZLIB",
|
"package": "ZLIB",
|
||||||
"repo": "madler/zlib",
|
"repo": "madler/zlib",
|
||||||
"sha": "51b7f2abda",
|
"tag": "v%VERSION%",
|
||||||
"hash": "16eaf1f3752489d12fd9ce30f7b5f7cbd5cb8ff53d617005a9847ae72d937f65e01e68be747f62d7ac19fd0c9aeba9956e60f16d6b465c5fdc2f3d08b4db2e6c",
|
"hash": "8c9642495bafd6fad4ab9fb67f09b268c69ff9af0f4f20cf15dfc18852ff1f312bd8ca41de761b3f8d8e90e77d79f2ccacd3d4c5b19e475ecf09d021fdfe9088",
|
||||||
"version": "1.2",
|
"version": "1.2",
|
||||||
|
"git_version": "1.3.1",
|
||||||
"options": [
|
"options": [
|
||||||
"ZLIB_BUILD_SHARED OFF",
|
"ZLIB_BUILD_SHARED OFF",
|
||||||
"ZLIB_INSTALL OFF"
|
"ZLIB_INSTALL OFF"
|
||||||
|
@ -57,8 +61,8 @@
|
||||||
},
|
},
|
||||||
"zstd": {
|
"zstd": {
|
||||||
"repo": "facebook/zstd",
|
"repo": "facebook/zstd",
|
||||||
"sha": "f8745da6ff",
|
"sha": "b8d6101fba",
|
||||||
"hash": "3037007f990040fe32573b46f9bef8762fd5dbeeb07ffffcbfeba51ec98167edae39bb9c87f9299efcd61c4e467c5e84f7c19f0df7799bc1fc04864a278792ee",
|
"hash": "cc5ad4b119a9c2ea57f0b71eeff01113bb506e0d17000159c5409cb8236d22e38c52d5e9e97e7947a4bf1b2dfc44b6c503ab2d9aedbd59458435c6a2849cb029",
|
||||||
"version": "1.5",
|
"version": "1.5",
|
||||||
"source_subdir": "build/cmake",
|
"source_subdir": "build/cmake",
|
||||||
"find_args": "MODULE",
|
"find_args": "MODULE",
|
||||||
|
@ -66,126 +70,27 @@
|
||||||
"ZSTD_BUILD_SHARED OFF"
|
"ZSTD_BUILD_SHARED OFF"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"catch2": {
|
|
||||||
"package": "Catch2",
|
|
||||||
"repo": "catchorg/Catch2",
|
|
||||||
"sha": "644821ce28",
|
|
||||||
"hash": "f8795f98acf2c02c0db8e734cc866d5caebab4b4a306e93598b97cb3c0c728dafe8283dce27ffe8d42460e5ae7302f3f32e7e274a7f991b73511ac88eef21b1f",
|
|
||||||
"version": "3.0.1"
|
|
||||||
},
|
|
||||||
"enet": {
|
|
||||||
"repo": "lsalzman/enet",
|
|
||||||
"sha": "2662c0de09",
|
|
||||||
"hash": "3de1beb4fa3d6b1e03eda8dd1e7580694f854af3ed3975dcdabfdcdf76b97f322b9734d35ea7f185855bb490d957842b938b26da4dd2dfded509390f8d2794dd",
|
|
||||||
"version": "1.3",
|
|
||||||
"find_args": "MODULE"
|
|
||||||
},
|
|
||||||
"opus": {
|
"opus": {
|
||||||
"package": "Opus",
|
"package": "Opus",
|
||||||
"repo": "crueter/opus",
|
"repo": "crueter/opus",
|
||||||
"sha": "ab19c44fad",
|
"sha": "ab19c44fad",
|
||||||
"hash": "79d0d015b19e74ce6076197fc32b86fe91d724a0b5a79e86adfc4bdcb946ece384e252adbbf742b74d03040913b70bb0e9556eafa59ef20e42d2f3f4d6f2859a",
|
"hash": "d632e8f83c5d3245db404bcb637113f9860bf16331498ba2c8e77979d1febee6b52d8b1da448e7d54eeac373e912cd55e3e300fc6c242244923323280dc43fbe",
|
||||||
"version": "1.3",
|
"version": "1.3",
|
||||||
"find_args": "MODULE",
|
"find_args": "MODULE",
|
||||||
"options": [
|
"options": [
|
||||||
"OPUS_PRESUME_NEON ON"
|
"OPUS_PRESUME_NEON ON"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"vulkan-utility-headers": {
|
|
||||||
"package": "VulkanUtilityLibraries",
|
|
||||||
"repo": "scripts/VulkanUtilityHeaders",
|
|
||||||
"tag": "1.4.326",
|
|
||||||
"artifact": "VulkanUtilityHeaders.tar.zst",
|
|
||||||
"git_host": "git.crueter.xyz",
|
|
||||||
"hash": "5924629755cb1605c4aa4eee20ef7957a9dd8d61e4df548be656d98054f2730c4109693c1bd35811f401f4705d2ccff9fc849be32b0d8480bc3f73541a5e0964"
|
|
||||||
},
|
|
||||||
"spirv-tools": {
|
|
||||||
"package": "SPIRV-Tools",
|
|
||||||
"repo": "KhronosGroup/SPIRV-Tools",
|
|
||||||
"sha": "40eb301f32",
|
|
||||||
"hash": "58d0fb1047d69373cf24c73e6f78c73a72a6cca3b4df1d9f083b9dcc0962745ef154abf3dbe9b3623b835be20c6ec769431cf11733349f45e7568b3525f707aa",
|
|
||||||
"find_args": "MODULE",
|
|
||||||
"options": [
|
|
||||||
"SPIRV_SKIP_EXECUTABLES ON"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"spirv-headers": {
|
|
||||||
"package": "SPIRV-Headers",
|
|
||||||
"repo": "KhronosGroup/SPIRV-Headers",
|
|
||||||
"sha": "4e209d3d7e",
|
|
||||||
"hash": "f48bbe18341ed55ea0fe280dbbbc0a44bf222278de6e716e143ca1e95ca320b06d4d23d6583fbf8d03e1428f3dac8fa00e5b82ddcd6b425e6236d85af09550a4",
|
|
||||||
"options": [
|
|
||||||
"SPIRV_WERROR OFF"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"mbedtls": {
|
|
||||||
"package": "MbedTLS",
|
|
||||||
"repo": "Mbed-TLS/mbedtls",
|
|
||||||
"tag": "mbedtls-%VERSION%",
|
|
||||||
"hash": "6671fb8fcaa832e5b115dfdce8f78baa6a4aea71f5c89a640583634cdee27aefe3bf4be075744da91f7c3ae5ea4e0c765c8fc3937b5cfd9ea73d87ef496524da",
|
|
||||||
"version": "3",
|
|
||||||
"git_version": "3.6.4",
|
|
||||||
"artifact": "%TAG%.tar.bz2"
|
|
||||||
},
|
|
||||||
"cubeb": {
|
|
||||||
"repo": "mozilla/cubeb",
|
|
||||||
"sha": "fa02160712",
|
|
||||||
"hash": "82d808356752e4064de48c8fecbe7856715ade1e76b53937116bf07129fc1cc5b3de5e4b408de3cd000187ba8dc32ca4109661cb7e0355a52e54bd81b9be1c61",
|
|
||||||
"find_args": "CONFIG",
|
|
||||||
"options": [
|
|
||||||
"USE_SANITIZERS OFF",
|
|
||||||
"BUILD_TESTS OFF",
|
|
||||||
"BUILD_TOOLS OFF",
|
|
||||||
"BUNDLE_SPEEX ON"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"boost_headers": {
|
"boost_headers": {
|
||||||
"repo": "boostorg/headers",
|
"repo": "boostorg/headers",
|
||||||
"sha": "95930ca8f5",
|
"sha": "95930ca8f5",
|
||||||
"hash": "d1dece16f3b209109de02123c537bfe1adf07a62b16c166367e7e5d62e0f7c323bf804c89b3192dd6871bc58a9d879d25a1cc3f7b9da0e497cf266f165816e2a",
|
"hash": "8a07d7a6f0065587d3005a83481a794704ae22e773b9f336fbd89ed230aaa7b4c86c03edcbae30bba8b3e20839c3131eaa2dceac037ef811533ef4eadc53b15b",
|
||||||
"bundled": true
|
"bundled": true
|
||||||
},
|
},
|
||||||
"discord-rpc": {
|
|
||||||
"repo": "eden-emulator/discord-rpc",
|
|
||||||
"sha": "1cf7772bb6",
|
|
||||||
"hash": "e9b35e6f2c075823257bcd59f06fe7bb2ccce1976f44818d2e28810435ef79c712a3c4f20f40da41f691342a4058cf86b078eb7f9d9e4dae83c0547c21ec4f97"
|
|
||||||
},
|
|
||||||
"simpleini": {
|
|
||||||
"package": "SimpleIni",
|
|
||||||
"repo": "brofield/simpleini",
|
|
||||||
"sha": "09c21bda1d",
|
|
||||||
"hash": "99779ca9b6e040d36558cadf484f9ffdab5b47bcc8fc72e4d33639d1d60c0ceb4410d335ba445d72a4324e455167fd6769d99b459943aa135bec085dff2d4b7c",
|
|
||||||
"find_args": "MODULE"
|
|
||||||
},
|
|
||||||
"sdl2_generic": {
|
|
||||||
"package": "SDL2",
|
|
||||||
"repo": "libsdl-org/SDL",
|
|
||||||
"sha": "54772f345a",
|
|
||||||
"hash": "2a68a0e01c390043aa9d9df63d8a20a52076c88bb460ac4e0f33194ca7d9bc8fadbbcc04e7506872ac4b6354a73fbc267c036f82200da59465789b87c7d9e3a4",
|
|
||||||
"key": "generic",
|
|
||||||
"bundled": true
|
|
||||||
},
|
|
||||||
"sdl2_steamdeck": {
|
|
||||||
"package": "SDL2",
|
|
||||||
"repo": "libsdl-org/SDL",
|
|
||||||
"sha": "cc016b0046",
|
|
||||||
"hash": "34d5ef58da6a4f9efa6689c82f67badcbd741f5a4f562a9c2c30828fa839830fb07681c5dc6a7851520e261c8405a416ac0a2c2513b51984fb3b4fa4dcb3e20b",
|
|
||||||
"key": "steamdeck",
|
|
||||||
"bundled": true
|
|
||||||
},
|
|
||||||
"sdl2": {
|
|
||||||
"ci": true,
|
|
||||||
"package": "SDL2",
|
|
||||||
"name": "SDL2",
|
|
||||||
"repo": "crueter-ci/SDL2",
|
|
||||||
"version": "2.32.8",
|
|
||||||
"min_version": "2.26.4",
|
|
||||||
"cmake_filename": "sdl2"
|
|
||||||
},
|
|
||||||
"llvm-mingw": {
|
"llvm-mingw": {
|
||||||
"repo": "misc/llvm-mingw",
|
"repo": "misc/llvm-mingw",
|
||||||
"git_host": "git.crueter.xyz",
|
"git_host": "git.crueter.xyz",
|
||||||
"tag": "20250828",
|
"tag": "%VERSION%",
|
||||||
"version": "20250828",
|
"version": "20250828",
|
||||||
"artifact": "clang-rt-builtins.tar.zst",
|
"artifact": "clang-rt-builtins.tar.zst",
|
||||||
"hash": "d902392caf94e84f223766e2cc51ca5fab6cae36ab8dc6ef9ef6a683ab1c483bfcfe291ef0bd38ab16a4ecc4078344fa8af72da2f225ab4c378dee23f6186181"
|
"hash": "d902392caf94e84f223766e2cc51ca5fab6cae36ab8dc6ef9ef6a683ab1c483bfcfe291ef0bd38ab16a4ecc4078344fa8af72da2f225ab4c378dee23f6186181"
|
||||||
|
|
6089
dist/languages/ar.ts
vendored
5496
dist/languages/ca.ts
vendored
5734
dist/languages/cs.ts
vendored
5999
dist/languages/da.ts
vendored
5580
dist/languages/de.ts
vendored
6039
dist/languages/el.ts
vendored
5247
dist/languages/es.ts
vendored
7480
dist/languages/fi.ts
vendored
5350
dist/languages/fr.ts
vendored
5553
dist/languages/hu.ts
vendored
5569
dist/languages/id.ts
vendored
5608
dist/languages/it.ts
vendored
5609
dist/languages/ja_JP.ts
vendored
5548
dist/languages/ko_KR.ts
vendored
5572
dist/languages/nb.ts
vendored
5562
dist/languages/nl.ts
vendored
5700
dist/languages/pl.ts
vendored
6539
dist/languages/pt_BR.ts
vendored
5202
dist/languages/pt_PT.ts
vendored
5284
dist/languages/ru_RU.ts
vendored
7619
dist/languages/sv.ts
vendored
5530
dist/languages/tr_TR.ts
vendored
6471
dist/languages/uk.ts
vendored
5562
dist/languages/vi.ts
vendored
5561
dist/languages/vi_VN.ts
vendored
5238
dist/languages/zh_CN.ts
vendored
5330
dist/languages/zh_TW.ts
vendored
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB |
BIN
dist/qt_themes/colorful/icons/48x48/download.png
vendored
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
dist/qt_themes/colorful/icons/48x48/upload.png
vendored
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
dist/qt_themes/colorful/icons/48x48/user-trash.png
vendored
Normal file
After Width: | Height: | Size: 1.4 KiB |
3
dist/qt_themes/colorful/style.qrc
vendored
|
@ -18,6 +18,9 @@ SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
<file alias="48x48/bad_folder.png">icons/48x48/bad_folder.png</file>
|
<file alias="48x48/bad_folder.png">icons/48x48/bad_folder.png</file>
|
||||||
<file alias="48x48/chip.png">icons/48x48/chip.png</file>
|
<file alias="48x48/chip.png">icons/48x48/chip.png</file>
|
||||||
<file alias="48x48/folder.png">icons/48x48/folder.png</file>
|
<file alias="48x48/folder.png">icons/48x48/folder.png</file>
|
||||||
|
<file alias="48x48/user-trash.png">icons/48x48/user-trash.png</file>
|
||||||
|
<file alias="48x48/download.png">icons/48x48/download.png</file>
|
||||||
|
<file alias="48x48/upload.png">icons/48x48/upload.png</file>
|
||||||
<file alias="48x48/list-add.png">icons/48x48/list-add.png</file>
|
<file alias="48x48/list-add.png">icons/48x48/list-add.png</file>
|
||||||
<file alias="48x48/no_avatar.png">icons/48x48/no_avatar.png</file>
|
<file alias="48x48/no_avatar.png">icons/48x48/no_avatar.png</file>
|
||||||
<file alias="48x48/sd_card.png">icons/48x48/sd_card.png</file>
|
<file alias="48x48/sd_card.png">icons/48x48/sd_card.png</file>
|
||||||
|
|
|
@ -11,6 +11,9 @@ SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
<file alias="48x48/bad_folder.png">../colorful/icons/48x48/bad_folder.png</file>
|
<file alias="48x48/bad_folder.png">../colorful/icons/48x48/bad_folder.png</file>
|
||||||
<file alias="48x48/chip.png">../colorful/icons/48x48/chip.png</file>
|
<file alias="48x48/chip.png">../colorful/icons/48x48/chip.png</file>
|
||||||
<file alias="48x48/folder.png">../colorful/icons/48x48/folder.png</file>
|
<file alias="48x48/folder.png">../colorful/icons/48x48/folder.png</file>
|
||||||
|
<file alias="48x48/user-trash.png">../colorful/icons/48x48/user-trash.png</file>
|
||||||
|
<file alias="48x48/download.png">../colorful/icons/48x48/download.png</file>
|
||||||
|
<file alias="48x48/upload.png">../colorful/icons/48x48/upload.png</file>
|
||||||
<file alias="48x48/list-add.png">../colorful/icons/48x48/list-add.png</file>
|
<file alias="48x48/list-add.png">../colorful/icons/48x48/list-add.png</file>
|
||||||
<file alias="48x48/sd_card.png">../colorful/icons/48x48/sd_card.png</file>
|
<file alias="48x48/sd_card.png">../colorful/icons/48x48/sd_card.png</file>
|
||||||
<file alias="256x256/plus_folder.png">../colorful/icons/256x256/plus_folder.png</file>
|
<file alias="256x256/plus_folder.png">../colorful/icons/256x256/plus_folder.png</file>
|
||||||
|
|
3
dist/qt_themes/default/default.qrc
vendored
|
@ -14,6 +14,9 @@ SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
<file alias="48x48/bad_folder.png">icons/48x48/bad_folder.png</file>
|
<file alias="48x48/bad_folder.png">icons/48x48/bad_folder.png</file>
|
||||||
<file alias="48x48/chip.png">icons/48x48/chip.png</file>
|
<file alias="48x48/chip.png">icons/48x48/chip.png</file>
|
||||||
<file alias="48x48/folder.png">icons/48x48/folder.png</file>
|
<file alias="48x48/folder.png">icons/48x48/folder.png</file>
|
||||||
|
<file alias="48x48/user-trash.png">icons/48x48/user-trash.png</file>
|
||||||
|
<file alias="48x48/download.png">icons/48x48/download.png</file>
|
||||||
|
<file alias="48x48/upload.png">icons/48x48/upload.png</file>
|
||||||
<file alias="48x48/list-add.png">icons/48x48/list-add.png</file>
|
<file alias="48x48/list-add.png">icons/48x48/list-add.png</file>
|
||||||
<file alias="48x48/sd_card.png">icons/48x48/sd_card.png</file>
|
<file alias="48x48/sd_card.png">icons/48x48/sd_card.png</file>
|
||||||
<file alias="48x48/star.png">icons/48x48/star.png</file>
|
<file alias="48x48/star.png">icons/48x48/star.png</file>
|
||||||
|
|
BIN
dist/qt_themes/default/icons/256x256/eden.png
vendored
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
BIN
dist/qt_themes/default/icons/48x48/download.png
vendored
Normal file
After Width: | Height: | Size: 853 B |
BIN
dist/qt_themes/default/icons/48x48/upload.png
vendored
Normal file
After Width: | Height: | Size: 820 B |
BIN
dist/qt_themes/default/icons/48x48/user-trash.png
vendored
Normal file
After Width: | Height: | Size: 584 B |
6
dist/qt_themes/default/style.qss
vendored
|
@ -2,6 +2,12 @@ QAbstractSpinBox {
|
||||||
min-height: 19px;
|
min-height: 19px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QComboBox {
|
||||||
|
padding: 0px 4px 0px 4px;
|
||||||
|
min-width: 60px;
|
||||||
|
min-height: 19px;
|
||||||
|
}
|
||||||
|
|
||||||
QPushButton#TogglableStatusBarButton {
|
QPushButton#TogglableStatusBarButton {
|
||||||
color: #959595;
|
color: #959595;
|
||||||
border: 1px solid transparent;
|
border: 1px solid transparent;
|
||||||
|
|
3
dist/qt_themes/default_dark/style.qrc
vendored
|
@ -13,6 +13,9 @@ SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
<file alias="48x48/bad_folder.png">../colorful/icons/48x48/bad_folder.png</file>
|
<file alias="48x48/bad_folder.png">../colorful/icons/48x48/bad_folder.png</file>
|
||||||
<file alias="48x48/chip.png">../colorful/icons/48x48/chip.png</file>
|
<file alias="48x48/chip.png">../colorful/icons/48x48/chip.png</file>
|
||||||
<file alias="48x48/folder.png">../colorful/icons/48x48/folder.png</file>
|
<file alias="48x48/folder.png">../colorful/icons/48x48/folder.png</file>
|
||||||
|
<file alias="48x48/user-trash.png">../colorful/icons/48x48/user-trash.png</file>
|
||||||
|
<file alias="48x48/download.png">../colorful/icons/48x48/download.png</file>
|
||||||
|
<file alias="48x48/upload.png">../colorful/icons/48x48/upload.png</file>
|
||||||
<file alias="48x48/no_avatar.png">../qdarkstyle/icons/48x48/no_avatar.png</file>
|
<file alias="48x48/no_avatar.png">../qdarkstyle/icons/48x48/no_avatar.png</file>
|
||||||
<file alias="48x48/list-add.png">../colorful/icons/48x48/list-add.png</file>
|
<file alias="48x48/list-add.png">../colorful/icons/48x48/list-add.png</file>
|
||||||
<file alias="48x48/sd_card.png">../colorful/icons/48x48/sd_card.png</file>
|
<file alias="48x48/sd_card.png">../colorful/icons/48x48/sd_card.png</file>
|
||||||
|
|
6
dist/qt_themes/default_dark/style.qss
vendored
|
@ -6,6 +6,12 @@ QAbstractSpinBox {
|
||||||
min-height: 19px;
|
min-height: 19px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QComboBox {
|
||||||
|
padding: 0px 4px 0px 4px;
|
||||||
|
min-width: 60px;
|
||||||
|
min-height: 19px;
|
||||||
|
}
|
||||||
|
|
||||||
QPushButton#TogglableStatusBarButton {
|
QPushButton#TogglableStatusBarButton {
|
||||||
color: #959595;
|
color: #959595;
|
||||||
border: 1px solid transparent;
|
border: 1px solid transparent;
|
||||||
|
|
BIN
dist/qt_themes/qdarkstyle/icons/48x48/download.png
vendored
Normal file
After Width: | Height: | Size: 883 B |
BIN
dist/qt_themes/qdarkstyle/icons/48x48/upload.png
vendored
Normal file
After Width: | Height: | Size: 853 B |
BIN
dist/qt_themes/qdarkstyle/icons/48x48/user-trash.png
vendored
Normal file
After Width: | Height: | Size: 584 B |
3
dist/qt_themes/qdarkstyle/style.qrc
vendored
|
@ -9,6 +9,9 @@
|
||||||
<file alias="48x48/bad_folder.png">icons/48x48/bad_folder.png</file>
|
<file alias="48x48/bad_folder.png">icons/48x48/bad_folder.png</file>
|
||||||
<file alias="48x48/chip.png">icons/48x48/chip.png</file>
|
<file alias="48x48/chip.png">icons/48x48/chip.png</file>
|
||||||
<file alias="48x48/folder.png">icons/48x48/folder.png</file>
|
<file alias="48x48/folder.png">icons/48x48/folder.png</file>
|
||||||
|
<file alias="48x48/user-trash.png">icons/48x48/user-trash.png</file>
|
||||||
|
<file alias="48x48/download.png">icons/48x48/download.png</file>
|
||||||
|
<file alias="48x48/upload.png">icons/48x48/upload.png</file>
|
||||||
<file alias="48x48/no_avatar.png">icons/48x48/no_avatar.png</file>
|
<file alias="48x48/no_avatar.png">icons/48x48/no_avatar.png</file>
|
||||||
<file alias="48x48/list-add.png">icons/48x48/list-add.png</file>
|
<file alias="48x48/list-add.png">icons/48x48/list-add.png</file>
|
||||||
<file alias="48x48/sd_card.png">icons/48x48/sd_card.png</file>
|
<file alias="48x48/sd_card.png">icons/48x48/sd_card.png</file>
|
||||||
|
|
|
@ -6,6 +6,9 @@
|
||||||
<file alias="48x48/bad_folder.png">../qdarkstyle/icons/48x48/bad_folder.png</file>
|
<file alias="48x48/bad_folder.png">../qdarkstyle/icons/48x48/bad_folder.png</file>
|
||||||
<file alias="48x48/chip.png">../qdarkstyle/icons/48x48/chip.png</file>
|
<file alias="48x48/chip.png">../qdarkstyle/icons/48x48/chip.png</file>
|
||||||
<file alias="48x48/folder.png">../qdarkstyle/icons/48x48/folder.png</file>
|
<file alias="48x48/folder.png">../qdarkstyle/icons/48x48/folder.png</file>
|
||||||
|
<file alias="48x48/user-trash.png">../qdarkstyle/icons/48x48/user-trash.png</file>
|
||||||
|
<file alias="48x48/download.png">../qdarkstyle/icons/48x48/download.png</file>
|
||||||
|
<file alias="48x48/upload.png">../qdarkstyle/icons/48x48/upload.png</file>
|
||||||
<file alias="48x48/no_avatar.png">../qdarkstyle/icons/48x48/no_avatar.png</file>
|
<file alias="48x48/no_avatar.png">../qdarkstyle/icons/48x48/no_avatar.png</file>
|
||||||
<file alias="48x48/list-add.png">../qdarkstyle/icons/48x48/list-add.png</file>
|
<file alias="48x48/list-add.png">../qdarkstyle/icons/48x48/list-add.png</file>
|
||||||
<file alias="48x48/sd_card.png">../qdarkstyle/icons/48x48/sd_card.png</file>
|
<file alias="48x48/sd_card.png">../qdarkstyle/icons/48x48/sd_card.png</file>
|
||||||
|
|
250
docs/CPM.md
|
@ -1,250 +0,0 @@
|
||||||
# CPM
|
|
||||||
|
|
||||||
CPM (CMake Package Manager) is the preferred method of managing dependencies within Eden.
|
|
||||||
|
|
||||||
Global Options:
|
|
||||||
|
|
||||||
- `YUZU_USE_CPM` is set by default on MSVC and Android. Other platforms should use this if certain "required" system dependencies (e.g. OpenSSL) are broken or missing
|
|
||||||
* If this is `OFF`, required system dependencies will be searched via `find_package`, although certain externals use CPM regardless.
|
|
||||||
- `CPMUTIL_FORCE_SYSTEM` (default `OFF`): Require all CPM dependencies to use system packages. NOT RECOMMENDED!
|
|
||||||
* Many packages, e.g. mcl, sirit, xbyak, discord-rpc, are not generally available as a system package.
|
|
||||||
* You may optionally override these (see CPMUtil section)
|
|
||||||
- `CPMUTIL_FORCE_BUNDLED` (default `ON` on MSVC and Android, `OFF` elsewhere): Require all CPM dependencies to use bundled packages.
|
|
||||||
|
|
||||||
## CPMUtil
|
|
||||||
|
|
||||||
CPMUtil is a wrapper around CPM that aims to reduce boilerplate and add useful utility functions to make dependency management a piece of cake.
|
|
||||||
|
|
||||||
### AddPackage
|
|
||||||
|
|
||||||
`AddPackage` is the core of the CPMUtil wrapper, and is generally the lowest level you will need to go when dealing with dependencies.
|
|
||||||
|
|
||||||
**Identification/Fetching**
|
|
||||||
|
|
||||||
- `NAME` (required): The package name (must be the same as the `find_package` name if applicable)
|
|
||||||
- `VERSION`: The minimum version of this package that can be used on the system
|
|
||||||
- `GIT_VERSION`: The "version" found within git
|
|
||||||
- `URL`: The URL to fetch.
|
|
||||||
- `REPO`: The GitHub repo to use (`owner/repo`).
|
|
||||||
* Only GitHub is supported for now, though other platforms will see support at some point
|
|
||||||
- `TAG`: The tag to fetch, if applicable.
|
|
||||||
- `ARTIFACT`: The name of the artifact, if applicable.
|
|
||||||
- `SHA`: Commit sha to fetch, if applicable.
|
|
||||||
- `BRANCH`: Branch to fetch, if applicable.
|
|
||||||
|
|
||||||
The following configurations are supported, in descending order of precedence:
|
|
||||||
|
|
||||||
- `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 NOT set, `REPO` must be defined.
|
|
||||||
- `REPO + TAG + ARTIFACT`: GitHub release artifact
|
|
||||||
* The final download URL will be `https://github.com/${REPO}/releases/download/${TAG}/${ARTIFACT}`
|
|
||||||
* Useful for prebuilt libraries and prefetched archives
|
|
||||||
- `REPO + TAG`: GitHub tag archive
|
|
||||||
* 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
|
|
||||||
- `REPO + SHA`: GitHub commit archive
|
|
||||||
* The final download URL will be `https://github.com/${REPO}/archive/${SHA}.zip`
|
|
||||||
* Useful for pinning to a specific commit
|
|
||||||
- `REPO + BRANCH`: GitHub branch archive
|
|
||||||
* The final download URL will be `https://github.com/${REPO}/archive/refs/heads/${BRANCH}.zip`
|
|
||||||
* Generally not recommended unless the branch is frozen
|
|
||||||
- `REPO`: GitHub master archive
|
|
||||||
* The final download URL will be `https://github.com/${REPO}/archive/refs/heads/master.zip`
|
|
||||||
* Generally not recommended unless the project is dead
|
|
||||||
|
|
||||||
**Hashing**
|
|
||||||
|
|
||||||
Hashing is used for verifying downloads. It's highly recommended to use these.
|
|
||||||
|
|
||||||
- `HASH_ALGO` (default `SHA512`): Hash algorithm to use
|
|
||||||
|
|
||||||
Hashing strategies, descending order of precedence:
|
|
||||||
|
|
||||||
- `HASH`: Bare hash verification, useful for static downloads e.g. commit archives
|
|
||||||
- `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.
|
|
||||||
- `HASH_URL`: Download the hash from a separate URL
|
|
||||||
|
|
||||||
**Additional Options**
|
|
||||||
|
|
||||||
- `KEY`: Custom cache key to use (stored as `.cache/cpm/${packagename_lower}/${key}`)
|
|
||||||
* Default is based on, in descending order of precedence:
|
|
||||||
- First 4 characters of the sha
|
|
||||||
- `GIT_VERSION`
|
|
||||||
- Tag
|
|
||||||
- `VERSION`
|
|
||||||
- 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
|
|
||||||
* Useful to turn `OFF` if the project doesn't use CMake
|
|
||||||
- `SOURCE_SUBDIR`: Subdirectory of the project containing a CMakeLists.txt file
|
|
||||||
- `FIND_PACKAGE_ARGUMENTS`: Arguments to pass to the `find_package` call
|
|
||||||
- `BUNDLED_PACKAGE`: Set to `ON` to force the usage of a bundled package
|
|
||||||
- `OPTIONS`: Options to pass to the configuration of the package
|
|
||||||
- `PATCHES`: Patches to apply to the package, stored in `.patch/${packagename_lower}/0001-patch-name.patch` and so on
|
|
||||||
- Other arguments can be passed to CPM as well
|
|
||||||
|
|
||||||
**Extra Variables**
|
|
||||||
|
|
||||||
For each added package, users may additionally force usage of the system/bundled package.
|
|
||||||
|
|
||||||
- `${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
|
|
||||||
|
|
||||||
**Bundled/System Switching**
|
|
||||||
|
|
||||||
Descending order of precedence:
|
|
||||||
- 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 `CPMUTIL_FORCE_SYSTEM` is true, requires the package to be on the system
|
|
||||||
- If `CPMUTIL_FORCE_BUNDLED` is true, forcefully uses the bundled package
|
|
||||||
- If the `BUNDLED_PACKAGE` argument is true, forcefully uses the bundled package
|
|
||||||
- Otherwise, CPM will search for the package first, and if not found, will use the bundled package
|
|
||||||
|
|
||||||
**Identification**
|
|
||||||
|
|
||||||
All dependencies must be identifiable in some way for usage in the dependency viewer. Lists are provided in descending order of precedence.
|
|
||||||
|
|
||||||
URLs:
|
|
||||||
|
|
||||||
- `GIT_URL`
|
|
||||||
- `REPO` as a GitHub repository
|
|
||||||
- `URL`
|
|
||||||
|
|
||||||
Versions (bundled):
|
|
||||||
|
|
||||||
- `SHA`
|
|
||||||
- `GIT_VERSION`
|
|
||||||
- `VERSION`
|
|
||||||
- `TAG`
|
|
||||||
- "unknown"
|
|
||||||
|
|
||||||
If the package is a system package, AddPackage will attempt to determine the package version and append ` (system)` to the identifier. Otherwise, it will be marked as `unknown (system)`
|
|
||||||
|
|
||||||
### AddCIPackage
|
|
||||||
|
|
||||||
Adds a package that follows crueter's CI repository spec.
|
|
||||||
|
|
||||||
- `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. One of:
|
|
||||||
* `windows-amd64`
|
|
||||||
* `windows-arm64`
|
|
||||||
* `android`
|
|
||||||
* `solaris`
|
|
||||||
* `freebsd`
|
|
||||||
* `linux`
|
|
||||||
* `linux-aarch64`
|
|
||||||
- `CMAKE_FILENAME`: Custom CMake filename, relative to the package root (default `${PACKAGE_ROOT}/${NAME}.cmake`)
|
|
||||||
|
|
||||||
### AddJsonPackage
|
|
||||||
|
|
||||||
This is the recommended method of usage for CPMUtil. In each directory that utilizes `CPMUtil`, there must be a `cpmfile.json` that defines dependencies in a similar manner to the individual calls.
|
|
||||||
|
|
||||||
The cpmfile is an object of objects, with each sub-object being named according to the package's identifier, e.g. `openssl`, which can then be fetched with `AddJsonPackage(<identifier>)`. Options are designed to map closely to the argument names, and are always strings unless otherwise specified.
|
|
||||||
|
|
||||||
- `package` -> `NAME` (`PACKAGE` for CI), defaults to the object key
|
|
||||||
- `repo` -> `REPO`
|
|
||||||
- `version` -> `VERSION`
|
|
||||||
- `ci` (bool)
|
|
||||||
|
|
||||||
If `ci` is `false`:
|
|
||||||
|
|
||||||
- `hash` -> `HASH`
|
|
||||||
- `sha` -> `SHA`
|
|
||||||
- `tag` -> `TAG`
|
|
||||||
- `artifact` -> `ARTIFACT`
|
|
||||||
- `git_version` -> `GIT_VERSION`
|
|
||||||
- `source_subdir` -> `SOURCE_SUBDIR`
|
|
||||||
- `bundled` -> `BUNDLED_PACKAGE`
|
|
||||||
- `find_args` -> `FIND_PACKAGE_ARGUMENTS`
|
|
||||||
- `patches` -> `PATCHES` (array)
|
|
||||||
- `options` -> `OPTIONS` (array)
|
|
||||||
|
|
||||||
Other arguments aren't currently supported. If you wish to add them, see the `AddJsonPackage` function in `CMakeModules/CPMUtil.cmake`.
|
|
||||||
|
|
||||||
If `ci` is `true`:
|
|
||||||
|
|
||||||
- `name` -> `NAME`, defaults to the object key
|
|
||||||
- `extension` -> `EXTENSION`, defaults to `tar.zst`
|
|
||||||
- `min_version` -> `MIN_VERSION`
|
|
||||||
- `cmake_filename` -> `CMAKE_FILENAME`
|
|
||||||
- `extension` -> `EXTENSION`
|
|
||||||
|
|
||||||
### Examples
|
|
||||||
|
|
||||||
In order: OpenSSL CI, Boost (tag + artifact), Opus (options + find_args), discord-rpc (sha + options + patches)
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"openssl": {
|
|
||||||
"ci": true,
|
|
||||||
"package": "OpenSSL",
|
|
||||||
"name": "openssl",
|
|
||||||
"repo": "crueter-ci/OpenSSL",
|
|
||||||
"version": "3.5.2",
|
|
||||||
"min_version": "1.1.1"
|
|
||||||
},
|
|
||||||
"boost": {
|
|
||||||
"package": "Boost",
|
|
||||||
"repo": "boostorg/boost",
|
|
||||||
"tag": "boost-1.88.0",
|
|
||||||
"artifact": "boost-1.88.0-cmake.7z",
|
|
||||||
"hash": "e5b049e5b61964480ca816395f63f95621e66cb9bcf616a8b10e441e0e69f129e22443acb11e77bc1e8170f8e4171b9b7719891efc43699782bfcd4b3a365f01",
|
|
||||||
"git_version": "1.88.0",
|
|
||||||
"version": "1.57"
|
|
||||||
},
|
|
||||||
"opus": {
|
|
||||||
"package": "Opus",
|
|
||||||
"repo": "xiph/opus",
|
|
||||||
"sha": "5ded705cf4",
|
|
||||||
"hash": "0dc89e58ddda1f3bc6a7037963994770c5806c10e66f5cc55c59286fc76d0544fe4eca7626772b888fd719f434bc8a92f792bdb350c807968b2ac14cfc04b203",
|
|
||||||
"version": "1.3",
|
|
||||||
"find_args": "MODULE",
|
|
||||||
"options": [
|
|
||||||
"OPUS_BUILD_TESTING OFF",
|
|
||||||
"OPUS_BUILD_PROGRAMS OFF",
|
|
||||||
"OPUS_INSTALL_PKG_CONFIG_MODULE OFF",
|
|
||||||
"OPUS_INSTALL_CMAKE_CONFIG_MODULE OFF"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"discord-rpc": {
|
|
||||||
"repo": "discord/discord-rpc",
|
|
||||||
"sha": "963aa9f3e5",
|
|
||||||
"hash": "386e1344e9a666d730f2d335ee3aef1fd05b1039febefd51aa751b705009cc764411397f3ca08dffd46205c72f75b235c870c737b2091a4ed0c3b061f5919bde",
|
|
||||||
"options": [
|
|
||||||
"BUILD_EXAMPLES OFF"
|
|
||||||
],
|
|
||||||
"patches": [
|
|
||||||
"0001-cmake-version.patch",
|
|
||||||
"0002-no-clang-format.patch",
|
|
||||||
"0003-fix-cpp17.patch"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Inclusion
|
|
||||||
|
|
||||||
To include CPMUtil:
|
|
||||||
|
|
||||||
```cmake
|
|
||||||
include(CPMUtil)
|
|
||||||
```
|
|
||||||
|
|
||||||
## Prefetching
|
|
||||||
|
|
||||||
- To prefetch a CPM dependency (requires cpmfile):
|
|
||||||
* `tools/cpm-fetch.sh <packages>`
|
|
||||||
- To prefetch all CPM dependencies:
|
|
||||||
* `tools/cpm-fetch-all.sh`
|
|
||||||
|
|
||||||
Currently, `cpm-fetch.sh` defines the following directories for cpmfiles (max depth of 2, so subdirs are caught as well):
|
|
||||||
|
|
||||||
`externals src/qt_common src/dynarmic .`
|
|
||||||
|
|
||||||
Whenever you add a new cpmfile, update the script accordingly
|
|
17
docs/CPMUtil/AddCIPackage
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
# 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`
|
17
docs/CPMUtil/AddCIPackage.md
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
# 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`
|
104
docs/CPMUtil/AddJsonPackage.md
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
# AddJsonPackage
|
||||||
|
|
||||||
|
In each directory that utilizes `CPMUtil`, there must be a `cpmfile.json` that defines dependencies in a similar manner to the individual calls.
|
||||||
|
|
||||||
|
The cpmfile is an object of objects, with each sub-object being named according to the package's identifier, e.g. `openssl`, which can then be fetched with `AddJsonPackage(<identifier>)`. Options are designed to map closely to the argument names, and are always strings unless otherwise specified.
|
||||||
|
<!-- TOC -->
|
||||||
|
- [Options](#options)
|
||||||
|
- [Examples](#examples)
|
||||||
|
<!-- /TOC -->
|
||||||
|
|
||||||
|
## Options
|
||||||
|
|
||||||
|
- `package` -> `NAME` (`PACKAGE` for CI), defaults to the object key
|
||||||
|
- `repo` -> `REPO`
|
||||||
|
- `version` -> `VERSION`
|
||||||
|
- `ci` (bool)
|
||||||
|
|
||||||
|
If `ci` is `false`:
|
||||||
|
|
||||||
|
- `hash` -> `HASH`
|
||||||
|
- `hash_suffix` -> `HASH_SUFFIX`
|
||||||
|
- `sha` -> `SHA`
|
||||||
|
- `key` -> `KEY`
|
||||||
|
- `tag` -> `TAG`
|
||||||
|
* If the tag contains `%VERSION%`, that part will be replaced by the `git_version`, OR `version` if `git_version` is not specified
|
||||||
|
- `url` -> `URL`
|
||||||
|
- `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 `%TAG%`, that part will be replaced by the `tag` (with its replacement already done)
|
||||||
|
- `git_version` -> `GIT_VERSION`
|
||||||
|
- `git_host` -> `GIT_HOST`
|
||||||
|
- `source_subdir` -> `SOURCE_SUBDIR`
|
||||||
|
- `bundled` -> `BUNDLED_PACKAGE`
|
||||||
|
- `find_args` -> `FIND_PACKAGE_ARGUMENTS`
|
||||||
|
- `download_only` -> `DOWNLOAD_ONLY`
|
||||||
|
- `patches` -> `PATCHES` (array)
|
||||||
|
- `options` -> `OPTIONS` (array)
|
||||||
|
- `skip_updates`: Tells `check-updates.sh` to not check for new updates on this package.
|
||||||
|
|
||||||
|
Other arguments aren't currently supported. If you wish to add them, see the `AddJsonPackage` function in `CMakeModules/CPMUtil.cmake`.
|
||||||
|
|
||||||
|
If `ci` is `true`:
|
||||||
|
|
||||||
|
- `name` -> `NAME`, defaults to the object key
|
||||||
|
- `extension` -> `EXTENSION`, defaults to `tar.zst`
|
||||||
|
- `min_version` -> `MIN_VERSION`
|
||||||
|
- `extension` -> `EXTENSION`
|
||||||
|
- `disabled_platforms` -> `DISABLED_PLATFORMS` (array)
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
In order: OpenSSL CI, Boost (tag + artifact), Opus (options + find_args), discord-rpc (sha + options + patches).
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"openssl": {
|
||||||
|
"ci": true,
|
||||||
|
"package": "OpenSSL",
|
||||||
|
"name": "openssl",
|
||||||
|
"repo": "crueter-ci/OpenSSL",
|
||||||
|
"version": "3.6.0",
|
||||||
|
"min_version": "1.1.1",
|
||||||
|
"disabled_platforms": [
|
||||||
|
"macos-universal"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"boost": {
|
||||||
|
"package": "Boost",
|
||||||
|
"repo": "boostorg/boost",
|
||||||
|
"tag": "boost-%VERSION%",
|
||||||
|
"artifact": "%TAG%-cmake.7z",
|
||||||
|
"hash": "e5b049e5b61964480ca816395f63f95621e66cb9bcf616a8b10e441e0e69f129e22443acb11e77bc1e8170f8e4171b9b7719891efc43699782bfcd4b3a365f01",
|
||||||
|
"git_version": "1.88.0",
|
||||||
|
"version": "1.57"
|
||||||
|
},
|
||||||
|
"opus": {
|
||||||
|
"package": "Opus",
|
||||||
|
"repo": "xiph/opus",
|
||||||
|
"sha": "5ded705cf4",
|
||||||
|
"hash": "0dc89e58ddda1f3bc6a7037963994770c5806c10e66f5cc55c59286fc76d0544fe4eca7626772b888fd719f434bc8a92f792bdb350c807968b2ac14cfc04b203",
|
||||||
|
"version": "1.3",
|
||||||
|
"find_args": "MODULE",
|
||||||
|
"options": [
|
||||||
|
"OPUS_BUILD_TESTING OFF",
|
||||||
|
"OPUS_BUILD_PROGRAMS OFF",
|
||||||
|
"OPUS_INSTALL_PKG_CONFIG_MODULE OFF",
|
||||||
|
"OPUS_INSTALL_CMAKE_CONFIG_MODULE OFF"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"discord-rpc": {
|
||||||
|
"repo": "discord/discord-rpc",
|
||||||
|
"sha": "963aa9f3e5",
|
||||||
|
"hash": "386e1344e9a666d730f2d335ee3aef1fd05b1039febefd51aa751b705009cc764411397f3ca08dffd46205c72f75b235c870c737b2091a4ed0c3b061f5919bde",
|
||||||
|
"options": [
|
||||||
|
"BUILD_EXAMPLES OFF"
|
||||||
|
],
|
||||||
|
"patches": [
|
||||||
|
"0001-cmake-version.patch",
|
||||||
|
"0002-no-clang-format.patch",
|
||||||
|
"0003-fix-cpp17.patch"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
116
docs/CPMUtil/AddPackage.md
Normal file
|
@ -0,0 +1,116 @@
|
||||||
|
# `AddPackage`
|
||||||
|
|
||||||
|
<!-- TOC -->
|
||||||
|
- [Identification/Fetching](#identificationfetching)
|
||||||
|
- [Hashing](#hashing)
|
||||||
|
- [Other Options](#other-options)
|
||||||
|
- [Extra Variables](#extra-variables)
|
||||||
|
- [System/Bundled Packages](#systembundled-packages)
|
||||||
|
- [Identification](#identification)
|
||||||
|
<!-- /TOC -->
|
||||||
|
|
||||||
|
## Identification/Fetching
|
||||||
|
|
||||||
|
- `NAME` (required): The package name (must be the same as the `find_package` name if applicable)
|
||||||
|
- `VERSION`: The minimum version of this package that can be used on the system
|
||||||
|
- `GIT_VERSION`: The "version" found within git
|
||||||
|
- `URL`: The URL to fetch.
|
||||||
|
- `REPO`: The repo to use (`owner/repo`).
|
||||||
|
- `GIT_HOST`: The Git host to use
|
||||||
|
* Defaults to `github.com`. Do not include the protocol, as HTTPS is enforced.
|
||||||
|
- `TAG`: The tag to fetch, if applicable.
|
||||||
|
- `ARTIFACT`: The name of the artifact, if applicable.
|
||||||
|
- `SHA`: Commit sha to fetch, if applicable.
|
||||||
|
- `BRANCH`: Branch to fetch, if applicable.
|
||||||
|
|
||||||
|
The following configurations are supported, in descending order of precedence:
|
||||||
|
|
||||||
|
- `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 NOT set, `REPO` must be defined.
|
||||||
|
- `REPO + TAG + ARTIFACT`: GitHub release artifact
|
||||||
|
* The final download URL will be `https://github.com/${REPO}/releases/download/${TAG}/${ARTIFACT}`
|
||||||
|
* Useful for prebuilt libraries and prefetched archives
|
||||||
|
- `REPO + TAG`: GitHub tag archive
|
||||||
|
* 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
|
||||||
|
- `REPO + SHA`: GitHub commit archive
|
||||||
|
* The final download URL will be `https://github.com/${REPO}/archive/${SHA}.zip`
|
||||||
|
* Useful for pinning to a specific commit
|
||||||
|
- `REPO + BRANCH`: GitHub branch archive
|
||||||
|
* The final download URL will be `https://github.com/${REPO}/archive/refs/heads/${BRANCH}.zip`
|
||||||
|
* Generally not recommended unless the branch is frozen
|
||||||
|
- `REPO`: GitHub master archive
|
||||||
|
* The final download URL will be `https://github.com/${REPO}/archive/refs/heads/master.zip`
|
||||||
|
* Generally not recommended unless the project is dead
|
||||||
|
|
||||||
|
## Hashing
|
||||||
|
|
||||||
|
Hashing is used for verifying downloads. It's highly recommended to use these.
|
||||||
|
|
||||||
|
- `HASH_ALGO` (default `SHA512`): Hash algorithm to use
|
||||||
|
|
||||||
|
Hashing strategies, descending order of precedence:
|
||||||
|
|
||||||
|
- `HASH`: Bare hash verification, useful for static downloads e.g. commit archives
|
||||||
|
- `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.
|
||||||
|
- `HASH_URL`: Download the hash from a separate URL
|
||||||
|
|
||||||
|
## Other Options
|
||||||
|
|
||||||
|
- `KEY`: Custom cache key to use (stored as `.cache/cpm/${packagename_lower}/${key}`)
|
||||||
|
* Default is based on, in descending order of precedence:
|
||||||
|
- First 4 characters of the sha
|
||||||
|
- `GIT_VERSION`
|
||||||
|
- Tag
|
||||||
|
- `VERSION`
|
||||||
|
- 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
|
||||||
|
* Useful to turn `OFF` if the project doesn't use CMake
|
||||||
|
- `SOURCE_SUBDIR`: Subdirectory of the project containing a CMakeLists.txt file
|
||||||
|
- `FIND_PACKAGE_ARGUMENTS`: Arguments to pass to the `find_package` call
|
||||||
|
- `BUNDLED_PACKAGE`: Set to `ON` to default to the bundled package
|
||||||
|
- `FORCE_BUNDLED_PACKAGE`: Set to `ON` to force the usage of the bundled package, regardless of CPMUTIL_FORCE_SYSTEM or `<package>_FORCE_SYSTEM`
|
||||||
|
- `OPTIONS`: Options to pass to the configuration of the package
|
||||||
|
- `PATCHES`: Patches to apply to the package, stored in `.patch/${packagename_lower}/0001-patch-name.patch` and so on
|
||||||
|
- Other arguments can be passed to CPM as well
|
||||||
|
|
||||||
|
## Extra Variables
|
||||||
|
|
||||||
|
For each added package, users may additionally force usage of the system/bundled package.
|
||||||
|
|
||||||
|
- `${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
|
||||||
|
|
||||||
|
## System/Bundled Packages
|
||||||
|
|
||||||
|
Descending order of precedence:
|
||||||
|
- 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 `CPMUTIL_FORCE_SYSTEM` is true, requires the package to be on the system
|
||||||
|
- If `CPMUTIL_FORCE_BUNDLED` is true, forcefully uses the bundled package
|
||||||
|
- If the `BUNDLED_PACKAGE` argument is true, forcefully uses the bundled package
|
||||||
|
- Otherwise, CPM will search for the package first, and if not found, will use the bundled package
|
||||||
|
|
||||||
|
## Identification
|
||||||
|
|
||||||
|
All dependencies must be identifiable in some way for usage in the dependency viewer. Lists are provided in descending order of precedence.
|
||||||
|
|
||||||
|
URLs:
|
||||||
|
|
||||||
|
- `GIT_URL`
|
||||||
|
- `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
|
||||||
|
* If `GIT_HOST` is unspecified, defaults to `github.com`
|
||||||
|
- `URL`
|
||||||
|
|
||||||
|
Versions (bundled):
|
||||||
|
|
||||||
|
- `SHA`
|
||||||
|
- `GIT_VERSION`
|
||||||
|
- `VERSION`
|
||||||
|
- `TAG`
|
||||||
|
- "unknown"
|
||||||
|
|
||||||
|
If the package is a system package, AddPackage will attempt to determine the package version and append ` (system)` to the identifier. Otherwise, it will be marked as `unknown (system)`
|
46
docs/CPMUtil/README.md
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
# CPMUtil
|
||||||
|
|
||||||
|
CPMUtil is a wrapper around CPM that aims to reduce boilerplate and add useful utility functions to make dependency management a piece of cake.
|
||||||
|
|
||||||
|
Global Options:
|
||||||
|
|
||||||
|
- `CPMUTIL_FORCE_SYSTEM` (default `OFF`): Require all CPM dependencies to use system packages. NOT RECOMMENDED!
|
||||||
|
* 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.
|
||||||
|
|
||||||
|
You are highly encouraged to read AddPackage first, even if you plan to only interact with CPMUtil via `AddJsonPackage`.
|
||||||
|
|
||||||
|
<!-- TOC -->
|
||||||
|
- [AddPackage](#addpackage)
|
||||||
|
- [AddCIPackage](#addcipackage)
|
||||||
|
- [AddJsonPackage](#addjsonpackage)
|
||||||
|
- [Lists](#lists)
|
||||||
|
<!-- /TOC -->
|
||||||
|
|
||||||
|
## AddPackage
|
||||||
|
|
||||||
|
The core of CPMUtil is the [`AddPackage`](./AddPackage.md) function. [`AddPackage`](./AddPackage.md) itself is fully CMake-based, and largely serves as an interface between CPM and the rest of CPMUtil.
|
||||||
|
|
||||||
|
## AddCIPackage
|
||||||
|
|
||||||
|
[`AddCIPackage`](./AddCIPackage.md) adds a package that follows [crueter's CI repository spec](https://github.com/crueter-ci).
|
||||||
|
|
||||||
|
## AddJsonPackage
|
||||||
|
|
||||||
|
[`AddJsonPackage`](./AddJsonPackage.md) is the recommended method of usage for CPMUtil.
|
||||||
|
|
||||||
|
## Lists
|
||||||
|
|
||||||
|
CPMUtil will create three lists of dependencies where `AddPackage` or similar was used. Each is in order of addition.
|
||||||
|
|
||||||
|
- `CPM_PACKAGE_NAMES`: The names of packages included by CPMUtil
|
||||||
|
- `CPM_PACKAGE_URLS`: The URLs to project/repo pages of packages
|
||||||
|
- `CPM_PACKAGE_SHAS`: Short version identifiers for each package
|
||||||
|
* 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`.
|
||||||
|
|
||||||
|
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)
|
||||||
|
- [`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)
|
|
@ -41,12 +41,51 @@ export LIBGL_ALWAYS_SOFTWARE=1
|
||||||
- If using OpenIndiana, due to a bug in SDL2's CMake configuration, audio driver defaults to SunOS `<sys/audioio.h>`, which does not exist on OpenIndiana. Using external or bundled SDL2 may solve this.
|
- If using OpenIndiana, due to a bug in SDL2's CMake configuration, audio driver defaults to SunOS `<sys/audioio.h>`, which does not exist on OpenIndiana. Using external or bundled SDL2 may solve this.
|
||||||
- System OpenSSL generally does not work. Instead, use `-DYUZU_USE_BUNDLED_OPENSSL=ON` to use a bundled static OpenSSL, or build a system dependency from source.
|
- System OpenSSL generally does not work. Instead, use `-DYUZU_USE_BUNDLED_OPENSSL=ON` to use a bundled static OpenSSL, or build a system dependency from source.
|
||||||
|
|
||||||
|
## HaikuOS
|
||||||
|
|
||||||
|
It's recommended to do a `pkgman full-sync` before installing. See [HaikuOS: Installing applications](https://www.haiku-os.org/guides/daily-tasks/install-applications/). Sometimes the process may be interrupted by an error like "Interrupted syscall". Simply firing the command again fixes the issue. By default `g++` is included on the default installation.
|
||||||
|
|
||||||
|
GPU support is generally lacking/buggy, hence it's recommended to only install `pkgman install mesa_lavapipe`. Performance is acceptable for most homebrew applications and even some retail games.
|
||||||
|
|
||||||
|
For reasons unberknownst to any human being, `glslangValidator` will crash upon trying to be executed, the solution to this is to build `glslang` yourself. Apply the patch in `.patch/glslang/0001-haikuos-fix.patch`. The main issue is `ShFinalize()` is deallocating already destroyed memory; the "fix" in question is allowing the program to just leak memory and the OS will take care of the rest. See [this issue](https://web.archive.org/web/20251021183604/https://github.com/haikuports/haikuports/issues/13083).
|
||||||
|
|
||||||
|
For this reason this patch is NOT applied to default on all platforms (for obvious reasons) - instead this is a HaikuOS specific patch, apply with `git apply <absolute path to patch>` after cloning SPIRV-Tools then `make -C build` and add the resulting binary (in `build/StandAlone/glslang`) into PATH.
|
||||||
|
|
||||||
|
`cubeb_devel` will also not work, either disable cubeb or uninstall it.
|
||||||
|
|
||||||
## OpenBSD
|
## OpenBSD
|
||||||
|
|
||||||
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`.
|
||||||
|
|
||||||
|
If clang has errors, try using `g++-11`.
|
||||||
|
|
||||||
## FreeBSD
|
## FreeBSD
|
||||||
|
|
||||||
Eden is not currently available as a port on FreeBSD, though it is in the works. For now, the recommended method of usage is to compile it yourself.
|
Eden is not currently available as a port on FreeBSD, though it is in the works. For now, the recommended method of usage is to compile it yourself.
|
||||||
|
|
||||||
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.
|
||||||
|
|
||||||
|
## 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`:
|
||||||
|
```sh
|
||||||
|
ip6addrctl=YES
|
||||||
|
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`.
|
||||||
|
|
||||||
|
Make may error out when generating C++ headers of SPIRV shaders, hence it's recommended to use `gmake` over the default system one.
|
||||||
|
|
||||||
|
glslang is not available on NetBSD, to circumvent this simply build glslang by yourself:
|
||||||
|
```sh
|
||||||
|
pkgin python313
|
||||||
|
git clone --depth=1 https://github.com/KhronosGroup/glslang.git
|
||||||
|
cd glslang
|
||||||
|
python3.13 ./update_glslang_sources.py
|
||||||
|
cmake -B build -DCMAKE_BUILD_TYPE=Release
|
||||||
|
cmake --build build -- -j`nproc`
|
||||||
|
cmake --install build
|
||||||
|
```
|
||||||
|
|
10
docs/CrossCompile.md
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
# Cross Compile
|
||||||
|
|
||||||
|
## ARM64
|
||||||
|
|
||||||
|
A painless guide for cross compilation (or to test NCE) from a x86_64 system without polluting your main.
|
||||||
|
|
||||||
|
- Install QEMU: `sudo pkg install qemu`
|
||||||
|
- Download Debian 13: `wget https://cdimage.debian.org/debian-cd/current/arm64/iso-cd/debian-13.0.0-arm64-netinst.iso`
|
||||||
|
- Create a system disk: `qemu-img create -f qcow2 debian-13-arm64-ci.qcow2 30G`
|
||||||
|
- Run the VM: `qemu-system-aarch64 -M virt -m 2G -cpu max -bios /usr/local/share/qemu/edk2-aarch64-code.fd -drive if=none,file=debian-13.0.0-arm64-netinst.iso,format=raw,id=cdrom -device scsi-cd,drive=cdrom -drive if=none,file=debian-13-arm64-ci.qcow2,id=hd0,format=qcow2 -device virtio-blk-device,drive=hd0 -device virtio-gpu-pci -device usb-ehci -device usb-kbd -device intel-hda -device hda-output -nic user,model=virtio-net-pci`
|
68
docs/Debug.md
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
# Debug Guidelines
|
||||||
|
|
||||||
|
## Debugging (host code)
|
||||||
|
|
||||||
|
Ignoring SIGSEGV when debugging in host:
|
||||||
|
|
||||||
|
- **gdb**: `handle all nostop pass`.
|
||||||
|
- **lldb**: `pro hand -p true -s false -n false SIGSEGV`.
|
||||||
|
|
||||||
|
## Debugging (guest code)
|
||||||
|
|
||||||
|
### gdb
|
||||||
|
|
||||||
|
Run `./build/bin/eden-cli -c <path to your config file (see logs where you run eden normally to see where it is)> -d -g <path to game>`
|
||||||
|
|
||||||
|
Then hook up an aarch64-gdb (use `yay aarch64-gdb` or `sudo pkg in arch64-gdb` to install)
|
||||||
|
Then type `target remote localhost:1234` and type `c` (for continue) - and then if it crashes just do a `bt` (backtrace) and `layout asm`.
|
||||||
|
|
||||||
|
### gdb cheatsheet
|
||||||
|
|
||||||
|
- `mo <cmd>`: Monitor commands, `get info`, `get fastmem` and `get mappings` are available. Type `mo help` for more info.
|
||||||
|
- `detach`: Detach from remote (i.e restarting the emulator).
|
||||||
|
- `c`: Continue
|
||||||
|
- `p <expr>`: Print variable, `p/x <expr>` for hexadecimal.
|
||||||
|
- `r`: Run
|
||||||
|
- `bt`: Print backtrace
|
||||||
|
- `info threads`: Print all active threads
|
||||||
|
- `thread <number>`: Switch to the given thread (see `info threads`)
|
||||||
|
- `layout asm`: Display in assembly mode (TUI)
|
||||||
|
- `si`: Step assembly instruction
|
||||||
|
- `s` or `step`: Step over LINE OF CODE (not assembly)
|
||||||
|
- `display <expr>`: Display variable each step.
|
||||||
|
- `n`: Next (skips over call frame of a function)
|
||||||
|
- `frame <number>`: Switches to the given frame (from `bt`)
|
||||||
|
- `br <expr>`: Set breakpoint at `<expr>`.
|
||||||
|
- `delete`: Deletes all breakpoints.
|
||||||
|
- `catch throw`: Breakpoint at throw. Can also use `br __cxa_throw`
|
||||||
|
- `br _mesa_error`: Break on mesa errors (set environment variable `MESA_DEBUG=1` beforehand), see [MESA_DEBUG](https://mesa-docs.readthedocs.io/en/latest/debugging.html).
|
||||||
|
|
||||||
|
Expressions can be `variable_names` or `1234` (numbers) or `*var` (dereference of a pointer) or `*(1 + var)` (computed expression).
|
||||||
|
|
||||||
|
For more information type `info gdb` and read [the man page](https://man7.org/linux/man-pages/man1/gdb.1.html).
|
||||||
|
|
||||||
|
## Simple checklist for debugging black screens using Renderdoc
|
||||||
|
|
||||||
|
Renderdoc is a free, cross platform, multi-graphics API debugger. It is an invaluable tool for diagnosing issues with graphics applications, and includes support for Vulkan. Get it [here](https://renderdoc.org).
|
||||||
|
|
||||||
|
Before using renderdoc to diagnose issues, it is always good to make sure there are no validation errors. Any errors means the behavior of the application is undefined. That said, renderdoc can help debug validation errors if you do have them.
|
||||||
|
|
||||||
|
When debugging a black screen, there are many ways the application could have setup Vulkan wrong.
|
||||||
|
Here is a short checklist of items to look at to make sure are appropriate:
|
||||||
|
* Draw call counts are correct (aka not zero, or if rendering many triangles, not 3)
|
||||||
|
* Vertex buffers are bound
|
||||||
|
* vertex attributes are correct - Make sure the size & offset of each attribute matches what should it should be
|
||||||
|
* Any bound push constants and descriptors have the right data - including:
|
||||||
|
* Matrices have correct values - double check the model, view, & projection matrices are uploaded correctly
|
||||||
|
* Pipeline state is correct
|
||||||
|
* viewport range is correct - x,y are 0,0; width & height are screen dimensions, minDepth is 0, maxDepth is 1, NDCDepthRange is 0,1
|
||||||
|
* Fill mode matches expected - usually solid
|
||||||
|
* Culling mode makes sense - commonly back or none
|
||||||
|
* The winding direction is correct - typically CCW (counter clockwise)
|
||||||
|
* Scissor region is correct - usually same as viewport's x,y,width, &height
|
||||||
|
* Blend state is correct
|
||||||
|
* Depth state is correct - typically enabled with Function set to Less than or Equal
|
||||||
|
* Swapchain images are bound when rendering to the swapchain
|
||||||
|
* Image being rendered to is the same as the one being presented when rendering to the swapchain
|
||||||
|
|
||||||
|
Alternatively, a [RenderDoc Extension](https://github.com/baldurk/renderdoc-contrib/tree/main/baldurk/whereismydraw) ([Archive](https://web.archive.org/web/20250000000000*/https://github.com/baldurk/renderdoc-contrib/tree/main/baldurk/whereismydraw)) exists which automates doing a lot of these manual steps.
|
107
docs/Deps.md
|
@ -4,8 +4,8 @@ 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, this is either:
|
* On Windows, this is either:
|
||||||
- **[MSVC](https://visualstudio.microsoft.com/downloads/)**,
|
- **[MSVC](https://visualstudio.microsoft.com/downloads/)** (you should select *Community* option),
|
||||||
* *A convenience script to install the **minimal** version (Visual Build Tools) is provided in `.ci/windows/install-msvc.ps1`*
|
* *A convenience script to install the Visual Community Studio 2022 with necessary tools is provided in `.ci/windows/install-msvc.ps1`*
|
||||||
- clang-cl - can be downloaded from the MSVC installer,
|
- clang-cl - can be downloaded from the MSVC installer,
|
||||||
- or **[MSYS2](https://www.msys2.org)**
|
- or **[MSYS2](https://www.msys2.org)**
|
||||||
* On macOS, this is Apple Clang
|
* On macOS, this is Apple Clang
|
||||||
|
@ -62,7 +62,8 @@ Certain other dependencies will be fetched by CPM regardless. System packages *c
|
||||||
* [libusb](https://github.com/libusb/libusb)
|
* [libusb](https://github.com/libusb/libusb)
|
||||||
* [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_QT_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.
|
||||||
* [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
|
||||||
|
@ -101,7 +102,7 @@ sudo pacman -Syu --needed base-devel boost catch2 cmake enet ffmpeg fmt git glsl
|
||||||
<summary>Ubuntu, Debian, Mint Linux</summary>
|
<summary>Ubuntu, Debian, Mint Linux</summary>
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
sudo apt-get install autoconf cmake g++ gcc git glslang-tools libasound2 libboost-context-dev libglu1-mesa-dev libhidapi-dev libpulse-dev libtool libudev-dev libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-render-util0 libxcb-xinerama0 libxcb-xkb1 libxext-dev libxkbcommon-x11-0 mesa-common-dev nasm ninja-build qt6-base-private-dev libmbedtls-dev catch2 libfmt-dev liblz4-dev nlohmann-json3-dev libzstd-dev libssl-dev libavfilter-dev libavcodec-dev libswscale-dev pkg-config zlib1g-dev libva-dev libvdpau-dev qt6-tools-dev libzydis-dev zydis-tools libzycore-dev
|
sudo apt-get install autoconf cmake g++ gcc git glslang-tools libglu1-mesa-dev libhidapi-dev libpulse-dev libtool libudev-dev libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-render-util0 libxcb-xinerama0 libxcb-xkb1 libxext-dev libxkbcommon-x11-0 mesa-common-dev nasm ninja-build qt6-base-private-dev libmbedtls-dev catch2 libfmt-dev liblz4-dev nlohmann-json3-dev libzstd-dev libssl-dev libavfilter-dev libavcodec-dev libswscale-dev pkg-config zlib1g-dev libva-dev libvdpau-dev qt6-tools-dev libzydis-dev zydis-tools libzycore-dev libvulkan-dev spirv-tools spirv-headers libusb-1.0-0-dev libxbyak-dev libboost-dev libboost-fiber-dev libboost-context-dev libsdl2-dev libopus-dev libasound2t64 vulkan-utility-libraries-dev
|
||||||
```
|
```
|
||||||
|
|
||||||
* 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.
|
||||||
|
@ -109,18 +110,28 @@ sudo apt-get install autoconf cmake g++ gcc git glslang-tools libasound2 libboos
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Fedora Linux</summary>
|
<summary>AlmaLinux, Fedora, Red Hat Linux</summary>
|
||||||
|
|
||||||
|
Fedora:
|
||||||
```sh
|
```sh
|
||||||
sudo dnf install autoconf ccache 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
|
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
|
||||||
```
|
```
|
||||||
|
|
||||||
* Force system libraries via CMake arguments:
|
AlmaLinux (use `YUZU_USE_CPM=ON`):
|
||||||
* SDL2: `-DYUZU_USE_BUNDLED_SDL2=OFF -DYUZU_USE_EXTERNAL_SDL2=OFF`
|
```sh
|
||||||
* FFmpeg: `-DYUZU_USE_EXTERNAL_FFMPEG=OFF`
|
# vvv - Only if RPMfusion is not installed or EPEL isn't either
|
||||||
* [RPM Fusion](https://rpmfusion.org/) is required for `ffmpeg-devel`
|
sudo dnf install epel-release dnf-utils
|
||||||
|
# (run rpmfusion installation afterwards)
|
||||||
|
# vvv - This will work for most systems
|
||||||
|
sudo dnf install autoconf cmake libtool libudev cmake gcc gcc-c++ qt6-qtbase-devel zlib-devel openssl-devel boost SDL2 ffmpeg-devel libdrm glslang jq patch
|
||||||
|
# Qt6 private GUI must be taken from CRB repos
|
||||||
|
sudo dnf config-manager --enable crb
|
||||||
|
sudo dnf install qt6-qtbase-private-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:
|
* 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>
|
||||||
|
@ -139,40 +150,26 @@ To run with MoltenVK, install additional dependencies:
|
||||||
brew install molten-vk vulkan-loader
|
brew install molten-vk vulkan-loader
|
||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
[Caveats](./Caveats.md#macos).
|
||||||
|
|
||||||
|
</details>
|
||||||
<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 devel/zydis`
|
||||||
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
|
|
||||||
|
|
||||||
net/enet
|
|
||||||
|
|
||||||
multimedia/ffnvcodec-headers
|
|
||||||
multimedia/ffmpeg
|
|
||||||
|
|
||||||
audio/opus
|
|
||||||
|
|
||||||
archivers/liblz4
|
|
||||||
|
|
||||||
lang/gcc12
|
|
||||||
|
|
||||||
graphics/glslang
|
|
||||||
graphics/vulkan-utility-libraries
|
|
||||||
```
|
|
||||||
|
|
||||||
If using FreeBSD 12 or prior, use `devel/pkg-config` instead.
|
If using FreeBSD 12 or prior, use `devel/pkg-config` instead.
|
||||||
|
|
||||||
|
[Caveats](./Caveats.md#freebsd).
|
||||||
|
|
||||||
|
</details>
|
||||||
|
<details>
|
||||||
|
<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`.
|
||||||
|
|
||||||
|
[Caveats](./Caveats.md#netbsd).
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
@ -180,8 +177,11 @@ If using FreeBSD 12 or prior, use `devel/pkg-config` instead.
|
||||||
|
|
||||||
```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 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
|
||||||
```
|
```
|
||||||
|
|
||||||
|
[Caveats](./Caveats.md#openbsd).
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
@ -194,7 +194,10 @@ Run the usual update + install of essential toolings: `sudo pkg update && sudo p
|
||||||
- **gcc**: `sudo pkg install developer/gcc-14`.
|
- **gcc**: `sudo pkg install developer/gcc-14`.
|
||||||
- **clang**: Version 20 is broken, use `sudo pkg install developer/clang-19`.
|
- **clang**: Version 20 is broken, use `sudo pkg install developer/clang-19`.
|
||||||
|
|
||||||
Then install the libraries: `sudo pkg install qt6 boost glslang libzip library/lz4 nlohmann-json openssl opus sdl2 zlib compress/zstd unzip pkg-config nasm autoconf mesa library/libdrm header-drm developer/fmt`.
|
Then install the libraries: `sudo pkg install qt6 boost glslang libzip library/lz4 libusb-1 nlohmann-json openssl opus sdl2 zlib compress/zstd unzip pkg-config nasm autoconf mesa library/libdrm header-drm developer/fmt`.
|
||||||
|
|
||||||
|
[Caveats](./Caveats.md#solaris).
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
@ -209,6 +212,26 @@ Then install the libraries: `sudo pkg install qt6 boost glslang libzip library/l
|
||||||
* `echo 'PATH=$(readlink -e /c/VulkanSDK/*/Bin/):$PATH' >> ~/.bashrc`
|
* `echo 'PATH=$(readlink -e /c/VulkanSDK/*/Bin/):$PATH' >> ~/.bashrc`
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>HaikuOS</summary>
|
||||||
|
|
||||||
|
```sh
|
||||||
|
pkgman install git cmake 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 zydis_devel glslang
|
||||||
|
```
|
||||||
|
|
||||||
|
[Caveats](./Caveats.md#haikuos).
|
||||||
|
|
||||||
|
</details>
|
||||||
|
<summary>RedoxOS</summary>
|
||||||
|
|
||||||
|
TODO: Fix syscall crashes (heavy IO stalls and hangup due to net mutexes?)
|
||||||
|
```sh
|
||||||
|
sudo pkg update && sudo pkg install git cmake
|
||||||
|
sudo pkg install ffmpeg6 sdl2 zlib llvm18
|
||||||
|
```
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
## All Done
|
## All Done
|
||||||
|
|
||||||
You may now return to the **[root build guide](Build.md)**.
|
You may now return to the **[root build guide](Build.md)**.
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Guidelines
|
# Development guidelines
|
||||||
|
|
||||||
## License Headers
|
## License Headers
|
||||||
All commits must have proper license header accreditation.
|
All commits must have proper license header accreditation.
|
||||||
|
@ -6,19 +6,21 @@ All commits must have proper license header accreditation.
|
||||||
You can easily add all necessary license headers by running:
|
You can easily add all necessary license headers by running:
|
||||||
```sh
|
```sh
|
||||||
git fetch origin master:master
|
git fetch origin master:master
|
||||||
FIX=true COMMIT=true .ci/license-header.sh
|
.ci/license-header.sh -u -c
|
||||||
git push
|
git push
|
||||||
```
|
```
|
||||||
|
|
||||||
Alternatively, you may omit `COMMIT=true` and do an amend commit:
|
Alternatively, you may omit `-c` and do an amend commit:
|
||||||
```sh
|
```sh
|
||||||
git fetch origin master:master
|
git fetch origin master:master
|
||||||
FIX=true .ci/license-header.sh
|
.ci/license-header.sh
|
||||||
git commit --amend -a --no-edit
|
git commit --amend -a --no-edit
|
||||||
```
|
```
|
||||||
|
|
||||||
If the work is licensed/vendored from other people or projects, you may omit the license headers. Additionally, if you wish to retain authorship over a piece of code, you may attribute it to yourself; however, the code may be changed at any given point and brought under the attribution of Eden.
|
If the work is licensed/vendored from other people or projects, you may omit the license headers. Additionally, if you wish to retain authorship over a piece of code, you may attribute it to yourself; however, the code may be changed at any given point and brought under the attribution of Eden.
|
||||||
|
|
||||||
|
For more information on the license header script, run `.ci/license-header.sh -h`.
|
||||||
|
|
||||||
## Pull Requests
|
## Pull Requests
|
||||||
Pull requests are only to be merged by core developers when properly tested and discussions conclude on Discord or other communication channels. Labels are recommended but not required. However, all PRs MUST be namespaced and optionally typed:
|
Pull requests are only to be merged by core developers when properly tested and discussions conclude on Discord or other communication channels. Labels are recommended but not required. However, all PRs MUST be namespaced and optionally typed:
|
||||||
```
|
```
|
||||||
|
@ -36,6 +38,28 @@ Pull requests are only to be merged by core developers when properly tested and
|
||||||
- Maintainers are permitted to change namespaces at will.
|
- Maintainers are permitted to change namespaces at will.
|
||||||
- Commits within PRs are not required to be namespaced, but it is highly recommended.
|
- Commits within PRs are not required to be namespaced, but it is highly recommended.
|
||||||
|
|
||||||
|
## Adding new settings
|
||||||
|
|
||||||
|
When adding new settings, use `tr("Setting:")` if the setting is meant to be a field, otherwise use `tr("Setting")` if the setting is meant to be a Yes/No or checkmark type of setting, see [this short style guide](https://learn.microsoft.com/en-us/style-guide/punctuation/colons#in-ui).
|
||||||
|
|
||||||
|
- The majority of software must work with the default option selected for such setting. Unless the setting significantly degrades performance.
|
||||||
|
- Debug settings must never be turned on by default.
|
||||||
|
- Provide reasonable bounds (for example, a setting controlling the amount of VRAM should never be 0).
|
||||||
|
- The description of the setting must be short and concise, if the setting "does a lot of things" consider splitting the setting into multiple if possible.
|
||||||
|
- Try to avoid excessive/redundant explainations "recommended for most users and games" can just be "(recommended)".
|
||||||
|
- Try to not write "slow/fast" options unless it clearly degrades/increases performance for a given case, as most options may modify behaviour that result in different metrics accross different systems. If for example the option is an "accuracy" option, writing "High" is sufficient to imply "Slow". No need to write "High (Slow)".
|
||||||
|
|
||||||
|
Some examples:
|
||||||
|
- "[...] negatively affecting image quality", "[...] degrading image quality": Same wording but with less filler.
|
||||||
|
- "[...] this may cause some glitches or crashes in some games", "[...] this may cause soft-crashes": Crashes implies there may be glitches (as crashes are technically a form of a fatal glitch). The entire sentence is structured as "may cause [...] on some games", which is redundant, because "may cause [...] in games" has the same semantic meaning ("may" is a chance that it will occur on "some" given set).
|
||||||
|
- "FIFO Relaxed is similar to FIFO [...]", "FIFO Relaxed [...]": The name already implies similarity.
|
||||||
|
- "[...] but may also reduce performance in some cases", "[...] but may degrade performance": Again, "some cases" and "may" implies there is a probability.
|
||||||
|
- "[...] it can [...] in some cases", "[...] it can [...]": Implied probability.
|
||||||
|
|
||||||
|
Before adding a new setting, consider:
|
||||||
|
- Does the piece of code that the setting pertains to, make a significant difference if it's on/off?
|
||||||
|
- Can it be auto-detected?
|
||||||
|
|
||||||
# IDE setup
|
# IDE setup
|
||||||
|
|
||||||
## VSCode
|
## VSCode
|
||||||
|
@ -79,49 +103,6 @@ May not be used but worth mentioning nonethless:
|
||||||
- OGG files: Use [OptiVorbis](https://github.com/OptiVorbis/OptiVorbis).
|
- OGG files: Use [OptiVorbis](https://github.com/OptiVorbis/OptiVorbis).
|
||||||
- Video files: Use ffmpeg, preferably re-encode as AV1.
|
- Video files: Use ffmpeg, preferably re-encode as AV1.
|
||||||
|
|
||||||
# Debugging
|
|
||||||
|
|
||||||
## Debugging (host code)
|
|
||||||
|
|
||||||
Ignoring SIGSEGV when debugging in host:
|
|
||||||
|
|
||||||
- **gdb**: `handle all nostop pass`.
|
|
||||||
- **lldb**: `pro hand -p true -s false -n false SIGSEGV`.
|
|
||||||
|
|
||||||
## Debugging (guest code)
|
|
||||||
|
|
||||||
### gdb
|
|
||||||
|
|
||||||
Run `./build/bin/eden-cli -c <path to your config file (see logs where you run eden normally to see where it is)> -d -g <path to game>`
|
|
||||||
|
|
||||||
Then hook up an aarch64-gdb (use `yay aarch64-gdb` or `sudo pkg in arch64-gdb` to install)
|
|
||||||
Then type `target remote localhost:1234` and type `c` (for continue) - and then if it crashes just do a `bt` (backtrace) and `layout asm`.
|
|
||||||
|
|
||||||
### gdb cheatsheet
|
|
||||||
|
|
||||||
- `mo <cmd>`: Monitor commands, `get info`, `get fastmem` and `get mappings` are available. Type `mo help` for more info.
|
|
||||||
- `detach`: Detach from remote (i.e restarting the emulator).
|
|
||||||
- `c`: Continue
|
|
||||||
- `p <expr>`: Print variable, `p/x <expr>` for hexadecimal.
|
|
||||||
- `r`: Run
|
|
||||||
- `bt`: Print backtrace
|
|
||||||
- `info threads`: Print all active threads
|
|
||||||
- `thread <number>`: Switch to the given thread (see `info threads`)
|
|
||||||
- `layout asm`: Display in assembly mode (TUI)
|
|
||||||
- `si`: Step assembly instruction
|
|
||||||
- `s` or `step`: Step over LINE OF CODE (not assembly)
|
|
||||||
- `display <expr>`: Display variable each step.
|
|
||||||
- `n`: Next (skips over call frame of a function)
|
|
||||||
- `frame <number>`: Switches to the given frame (from `bt`)
|
|
||||||
- `br <expr>`: Set breakpoint at `<expr>`.
|
|
||||||
- `delete`: Deletes all breakpoints.
|
|
||||||
- `catch throw`: Breakpoint at throw. Can also use `br __cxa_throw`
|
|
||||||
- `br _mesa_error`: Break on mesa errors (set environment variable `MESA_DEBUG=1` beforehand), see [MESA_DEBUG](https://mesa-docs.readthedocs.io/en/latest/debugging.html).
|
|
||||||
|
|
||||||
Expressions can be `variable_names` or `1234` (numbers) or `*var` (dereference of a pointer) or `*(1 + var)` (computed expression).
|
|
||||||
|
|
||||||
For more information type `info gdb` and read [the man page](https://man7.org/linux/man-pages/man1/gdb.1.html).
|
|
||||||
|
|
||||||
# Bisecting older commits
|
# Bisecting older commits
|
||||||
|
|
||||||
Since going into the past can be tricky (especially due to the dependencies from the project being lost thru time). This should "restore" the URLs for the respective submodules.
|
Since going into the past can be tricky (especially due to the dependencies from the project being lost thru time). This should "restore" the URLs for the respective submodules.
|
||||||
|
|
|
@ -31,13 +31,14 @@ Notes:
|
||||||
* Currently, build fails without this
|
* Currently, build fails without this
|
||||||
- `YUZU_USE_FASTER_LD` (ON) Check if a faster linker is available
|
- `YUZU_USE_FASTER_LD` (ON) Check if a faster linker is available
|
||||||
* Only available on UNIX
|
* Only available on UNIX
|
||||||
- `USE_SYSTEM_MOLTENVK` (OFF, macOS only) Use the system MoltenVK lib (instead of the bundled one)
|
- `YUZU_USE_BUNDLED_MOLTENVK` (ON, macOS only) Download bundled MoltenVK lib)
|
||||||
- `YUZU_TZDB_PATH` (string) Path to a pre-downloaded timezone database (useful for nixOS)
|
- `YUZU_TZDB_PATH` (string) Path to a pre-downloaded timezone database (useful for nixOS)
|
||||||
- `ENABLE_OPENSSL` (ON for Linux and *BSD) Enable OpenSSL backend for the ssl service
|
- `ENABLE_OPENSSL` (ON for Linux and *BSD) Enable OpenSSL backend for the ssl service
|
||||||
* Always enabled if the web service is enabled
|
* Always enabled if the web service is enabled
|
||||||
- `YUZU_USE_BUNDLED_OPENSSL` (ON for MSVC) Download bundled OpenSSL build
|
- `YUZU_USE_BUNDLED_OPENSSL` (ON for MSVC) Download bundled OpenSSL build
|
||||||
* Always on for Android
|
* Always on for Android
|
||||||
* Unavailable on OpenBSD
|
* Unavailable on OpenBSD
|
||||||
|
- `ENABLE_UPDATE_CHECKER` (OFF) Enable update checker for the Qt an Android frontends
|
||||||
|
|
||||||
The following options are desktop only:
|
The following options are desktop only:
|
||||||
- `ENABLE_SDL2` (ON) Enable the SDL2 desktop, audio, and input frontend (HIGHLY RECOMMENDED!)
|
- `ENABLE_SDL2` (ON) Enable the SDL2 desktop, audio, and input frontend (HIGHLY RECOMMENDED!)
|
||||||
|
@ -51,7 +52,6 @@ The following options are desktop only:
|
||||||
* Unavailable on Windows/ARM64 and Android
|
* Unavailable on Windows/ARM64 and Android
|
||||||
- `ENABLE_QT` (ON) Enable the Qt frontend (recommended)
|
- `ENABLE_QT` (ON) Enable the Qt frontend (recommended)
|
||||||
- `ENABLE_QT_TRANSLATION` (OFF) Enable translations for the Qt frontend
|
- `ENABLE_QT_TRANSLATION` (OFF) Enable translations for the Qt frontend
|
||||||
- `ENABLE_QT_UPDATE_CHECKER` (OFF) Enable update checker for the Qt frontend
|
|
||||||
- `YUZU_USE_BUNDLED_QT` (ON for MSVC) Download bundled Qt binaries
|
- `YUZU_USE_BUNDLED_QT` (ON for MSVC) Download bundled Qt binaries
|
||||||
* Note that using **system Qt** requires you to include the Qt CMake directory in `CMAKE_PREFIX_PATH`, e.g:
|
* Note that using **system Qt** requires you to include the Qt CMake directory in `CMAKE_PREFIX_PATH`, e.g:
|
||||||
* `-DCMAKE_PREFIX_PATH=C:/Qt/6.9.0/msvc2022_64/lib/cmake/Qt6`
|
* `-DCMAKE_PREFIX_PATH=C:/Qt/6.9.0/msvc2022_64/lib/cmake/Qt6`
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
# Eden Build Documentation
|
# Eden Build Documentation
|
||||||
|
|
||||||
This contains documentation created by developers. This contains build instructions, guidelines, instructions/layouts for [cool stuff we made](CPM.md), and more.
|
This contains documentation created by developers. This contains build instructions, guidelines, instructions/layouts for [cool stuff we made](./CPMUtil), and more.
|
||||||
|
|
||||||
- **[General Build Instructions](Build.md)**
|
- **[General Build Instructions](Build.md)**
|
||||||
|
- **[Cross Compiling](CrossCompile.md)**
|
||||||
- **[Development Guidelines](Development.md)**
|
- **[Development Guidelines](Development.md)**
|
||||||
- **[Dependencies](Deps.md)**
|
- **[Dependencies](Deps.md)**
|
||||||
- **[CPM - CMake Package Manager](CPM.md)**
|
- **[Debug Guidelines](./Debug.md)**
|
||||||
|
- **[CPM - CMake Package Manager](CPMUtil.md)**
|
||||||
- **[Platform-Specific Caveats](Caveats.md)**
|
- **[Platform-Specific Caveats](Caveats.md)**
|
||||||
- **[User Directory Handling](User.md)**
|
- **[User Handbook](User.md)**
|
||||||
|
|
|
@ -27,6 +27,7 @@ The following are not valid reasons to sign up:
|
||||||
* To download and use Eden, see our [Releases page](https://github.com/eden-emulator/Releases/releases)!
|
* To download and use Eden, see our [Releases page](https://github.com/eden-emulator/Releases/releases)!
|
||||||
- I want to see the source code.
|
- I want to see the source code.
|
||||||
* To see Eden's source code, go [here](https://git.eden-emu.dev/eden-emu/eden).
|
* To see Eden's source code, go [here](https://git.eden-emu.dev/eden-emu/eden).
|
||||||
|
|
||||||
## Other Information
|
## Other Information
|
||||||
|
|
||||||
Requests that appear suspicious, automated, OR blank will generally be automatically filtered. In cases of suspicion, or any of the invalid reasons listed above, you may receive an email back asking for clarification.
|
Requests that appear suspicious, automated, OR blank will generally be automatically filtered. In cases of suspicion, or any of the invalid reasons listed above, you may receive an email back asking for clarification.
|
||||||
|
|
17
docs/User.md
|
@ -1,11 +1,12 @@
|
||||||
# User configuration
|
# User Handbook
|
||||||
|
|
||||||
## Configuration directories
|
The "FAQ".
|
||||||
|
|
||||||
Eden will store configuration in the following directories:
|
This handbook is primarily aimed at the end-user - baking useful knowledge for enhancing their emulation experience.
|
||||||
|
|
||||||
- **Windows**: `%AppData%\Roaming`.
|
- **[The Basics](user/Basics.md)**
|
||||||
- **Android**: Data is stored internally.
|
- **[Audio](user/Audio.md)**
|
||||||
- **Linux, macOS, FreeBSD, Solaris, OpenBSD**: `$XDG_DATA_HOME`, `$XDG_CACHE_HOME`, `$XDG_CONFIG_HOME`.
|
- **[Graphics](user/Graphics.md)**
|
||||||
|
- **[Platforms and Architectures](user/Architectures.md)**
|
||||||
If a `user` directory is present in the current working directory, that will override all global configuration directories and the emulator will use that instead.
|
- **[Testing](user/Testing.md)**
|
||||||
|
- **[Data, savefiles and storage](user/Storage.md)**
|
||||||
|
|
3
docs/build/Android.md
vendored
|
@ -33,6 +33,9 @@ Eden by default will be cloned into -
|
||||||
4. Navigate to `eden/src/android`.
|
4. Navigate to `eden/src/android`.
|
||||||
5. Then Build with `./gradlew assembleRelWithDebInfo`.
|
5. Then Build with `./gradlew assembleRelWithDebInfo`.
|
||||||
6. To build the optimised build use `./gradlew assembleGenshinSpoofRelWithDebInfo`.
|
6. To build the optimised build use `./gradlew assembleGenshinSpoofRelWithDebInfo`.
|
||||||
|
7. You can pass extra variables to cmake via `-PYUZU_ANDROID_ARGS="-D..."`
|
||||||
|
|
||||||
|
Remember to have a Java SDK installed if not already, on Debian and similar this is done with `sudo apt install openjdk-17-jdk`.
|
||||||
|
|
||||||
### Script
|
### Script
|
||||||
A convenience script for building is provided in `.ci/android/build.sh`. The built APK can be put into an `artifacts` directory via `.ci/android/package.sh`. On Windows, these must be done in the Git Bash or MinGW terminal.
|
A convenience script for building is provided in `.ci/android/build.sh`. The built APK can be put into an `artifacts` directory via `.ci/android/package.sh`. On Windows, these must be done in the Git Bash or MinGW terminal.
|
||||||
|
|
|
@ -27,5 +27,5 @@ Boolean flags (set `true` to enable, `false` to disable):
|
||||||
* AppImage packaging script: `.ci/linux/package.sh`
|
* AppImage packaging script: `.ci/linux/package.sh`
|
||||||
|
|
||||||
* Accepts same arch targets as build script
|
* Accepts same arch targets as build script
|
||||||
* Use `DEVEL=true` to rename app to `Eden Nightly`
|
* Use `DEVEL=true` to rename app to `Eden Nightly` and disable the update checker
|
||||||
* This should generally not be used unless in a tailor-made packaging environment (e.g. Actions/CI)
|
* This should generally not be used unless in a tailor-made packaging environment (e.g. Actions/CI)
|
141
docs/user/Architectures.md
Normal file
|
@ -0,0 +1,141 @@
|
||||||
|
# User Handbook - Architectures and Platforms
|
||||||
|
|
||||||
|
Notes and caveats for different architectures and platforms.
|
||||||
|
|
||||||
|
# Architectures
|
||||||
|
|
||||||
|
Eden is primarily designed to run on amd64 (x86_64--Intel/AMD 64-bit) and aarch64 (arm64--ARM 64-bit) CPUs. Each architecture tends to have their own quirks and fun stuff; this page serves as a reference for these quirks.
|
||||||
|
|
||||||
|
## amd64
|
||||||
|
|
||||||
|
AMD64, aka x86_64, is the most tested and supported architecture for desktop targets. Android is entirely unsupported.
|
||||||
|
|
||||||
|
### Caveats
|
||||||
|
|
||||||
|
AMD64 systems are almost always limited by the CPU. For example, a Zen 5/RX 6600 system will often hit max CPU usage before the GPU ever reaches 70% usage, with minimal exceptions (that tend to pop up only at >200fps). JIT is slow!
|
||||||
|
|
||||||
|
Computers on Linux will almost always run Eden strictly better than an equivalent machine on Windows. This is largely due to the way the Linux kernel handles memory management (and the lack of Microsoft spyware).
|
||||||
|
|
||||||
|
Intel Macs are believed to be supported, but no CI is provided for them. Performance will likely be awful on all but the highest-end iMacs and Pro-level Macs, and the MoltenVK requirement generally means Vulkan compatibility will suffer.
|
||||||
|
|
||||||
|
## aarch64
|
||||||
|
|
||||||
|
ARM64, aka aarch64, is the only supported architecture for Android, with limited experimental support available on Linux, Windows, and macOS.
|
||||||
|
|
||||||
|
### Caveats
|
||||||
|
|
||||||
|
NCE (Native Code Execution) is currently only available on Android and (experimentally) Linux. Support for macOS is in the works, but Windows is extremely unlikely to ever happen (if you want it--submit patches!). Generally, if NCE is available, you should pretty much always use it due to the massive performance hit JIT has.
|
||||||
|
|
||||||
|
When NCE is enabled, do note that the GPU will almost always be the limiting factor. This is especially the case for Android, as well as desktops that lack dedicated GPUs; Adreno, Mali, PowerVR, etc. GPUs are generally significantly weaker relative to their respective CPUs.
|
||||||
|
|
||||||
|
Windows/arm64 is *very* experimental and is unlikely to work at all. Support and testing is in the works.
|
||||||
|
|
||||||
|
## riscv64
|
||||||
|
|
||||||
|
RISC-V, aka riscv64, is sparsely tested, but preliminary tests from developers have reported at least partial support on Milk-V's Fedora/riscv64 Linux distribution. Performance, Vulkan support, compatibility, and build system caveats are largely unknown for the time being.
|
||||||
|
|
||||||
|
### Caveats
|
||||||
|
|
||||||
|
Windows/riscv64 doesn't exist, and may never (until corporate greed no longer consumes Microsoft).
|
||||||
|
|
||||||
|
Android/riscv64 is interesting. While support for it may be added if and when RISC-V phones/handhelds ever go mainstream, arm64 devices will always be preferred due to NCE.
|
||||||
|
|
||||||
|
Only Fedora/riscv64 has been tested, but in theory, every riscv64 distribution that has *at least* the standard build tools, Qt, FFmpeg, and SDL2 should work.
|
||||||
|
|
||||||
|
## Other
|
||||||
|
|
||||||
|
Other architectures, such as SPARC, MIPS, PowerPC, Loong, and all 32-bit architectures are completely unsupported, as there is no JIT backend or emitter thereof. If you want support for it--submit patches!
|
||||||
|
|
||||||
|
IA-64 (Itanium) support is completely unknown. Existing amd64 packages will not run on IA-64 (assuming you can even find a supported Windows/Linux distribution)
|
||||||
|
|
||||||
|
# Platforms
|
||||||
|
|
||||||
|
The vast majority of Eden's testing is done on Windows, Linux, and Android. However, first-class support is also provided for:
|
||||||
|
|
||||||
|
- HaikuOS
|
||||||
|
- FreeBSD
|
||||||
|
- OpenBSD
|
||||||
|
- NetBSD
|
||||||
|
- OpenIndiana (Solaris)
|
||||||
|
- macOS
|
||||||
|
|
||||||
|
## Linux
|
||||||
|
|
||||||
|
While all modern Linux distributions are supported (Fedora >40, Ubuntu >24.04, Debian >12, Arch, Gentoo, etc.), the vast majority of testing and development for Linux is on Arch and Gentoo. Most major build system changes are tested on Gentoo first and foremost, so if builds fail on any modern distribution no matter what you do, it's likely a bug and should be reported.
|
||||||
|
|
||||||
|
Intel and Nvidia GPU support is limited. AMD (RADV) drivers receive first-class testing and are known to provide the most stable Eden experience possible.
|
||||||
|
|
||||||
|
Wayland is not recommended. Testing has shown significantly worse performance on most Wayland compositors compared to X11, alongside mysterious bugs and compatibility errors. For now, set `QT_QPA_PLATFORM=xcb` when running Eden, or pass `-platform xcb` to the launch arguments.
|
||||||
|
|
||||||
|
## Windows
|
||||||
|
|
||||||
|
Windows 10 and 11 are supported. Support for Windows 8.x is unknown, and Windows 7 support is unlikely to ever be added.
|
||||||
|
|
||||||
|
In order to run Eden, you will probably need to install the [Visual C++ Redistributable](https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170).
|
||||||
|
|
||||||
|
Neither AMD nor Nvidia drivers work nearly as well as Linux's RADV drivers. Compatibility is still largely the same, but performance and some hard-to-run games may suffer compared to Linux.
|
||||||
|
|
||||||
|
## Android
|
||||||
|
|
||||||
|
A cooler is always recommended. Phone SoCs tend to get very hot, especially those manufactured with the Samsung process or those lacking in power.
|
||||||
|
|
||||||
|
Adreno 6xx and 7xx GPUs with Turnip drivers will always have the best compatibility. "Stock" (system) drivers will have better performance on Adreno, but compatibility will suffer. Better support for stock drivers (including Adreno 8xx) is in the works.
|
||||||
|
|
||||||
|
Android 16 is always recommended, as it brought major improvements to Vulkan requirements and compatibility, *plus* significant performance gains. Some users reported an over 50% performance gain on some Pixel phones after updating.
|
||||||
|
|
||||||
|
Mali, PowerVR, Xclipse, and other GPU vendors generally lack in performance and compatibility. Notably:
|
||||||
|
- No PowerVR GPUs *except* the DXT-48-1536 are known to work with Eden at all.
|
||||||
|
- No Xclipse GPUs *except* the very latest (e.g. Xclipse 950) are known to work with Eden at all.
|
||||||
|
- Mali has especially bad performance, though the Mali-G715 (Tensor G4) and Immortalis-G925 are known to generally run surprisingly well, especially on Android 16.
|
||||||
|
- The status of all other GPU vendors is unknown. As long as they support Vulkan, they theoretically can run Eden.
|
||||||
|
- Note that these GPUs generally don't play well with driver injection. If you choose to inject custom drivers via a rooted system (Panfrost, RADV, etc), you may see good results.
|
||||||
|
|
||||||
|
Qualcomm Snapdragon SoCs are generally the most well supported.
|
||||||
|
- Google Tensor chips have pretty terrible performance, but even the G1 has been proven to be able to run some games well on the Pixel 6 Pro.
|
||||||
|
* The Tensor G4 is the best-supported at the time. How the G5 currently fares is unknown, but on paper, it should do about as well as a Snapdragon 8 Gen 2 with stock drivers.
|
||||||
|
- Samsung Exynos chips made before 2022 are not supported.
|
||||||
|
- MediaTek Dimensity chips are extremely weak and most before mid-2023 don't work at all.
|
||||||
|
* This means that most budget phones won't work, as they tend to use old MediaTek SoCs.
|
||||||
|
* Generally, if your phone doesn't cost *at least* as much as a Switch itself, it will not *emulate* the Switch very well.
|
||||||
|
- Snapdragon 865 and other old-ish SoCs may benefit from the Legacy build. These will reduce performance but *should* drastically improve compatibility.
|
||||||
|
- If you're not sure how powerful your SoC is, check [NanoReview](https://nanoreview.net/en/soc-compare) - e.g. [Tensor G5](https://archive.is/ylC4Z).
|
||||||
|
* A good base to compare to is the Snapdragon 865--e.g. [Tensor vs SD865](https://archive.is/M1P58)
|
||||||
|
* Some benchmarks may be misleading due to thermal throttling OR RAM requirements.
|
||||||
|
- For example, a Pixel 6a (Tensor G1) performs about 1/3 as well as an 865 due to its lack of RAM and poor thermals.
|
||||||
|
* Remember--always use a cooler if you can, and you MUST have *at least* 8GB of RAM!
|
||||||
|
- If you're not sure what SoC you have, check [GSMArena](https://www.gsmarena.com) - e.g. [Pixel 9 Pro](https://archive.ph/91VhA)
|
||||||
|
|
||||||
|
Custom ROMs are recommended, *as long as* you know what you're doing.
|
||||||
|
- For most devices, [LineageOS](https://lineageos.org/) is preferred.
|
||||||
|
- [CalyxOS](https://calyxos.org/) is available as well.
|
||||||
|
- For Google Pixel devices ONLY... and [soon another OEM](https://archive.ph/cPpMd)... [GrapheneOS](https://grapheneos.org/) is highly recommended.
|
||||||
|
* As of October 5, 2025, the Pixel 10 line is unsupported, however, [it will be](https://archive.is/viAUl) in the very near future!
|
||||||
|
* Keep checking the [FAQ page](https://grapheneos.org/faq#supported-devices) for news.
|
||||||
|
- Custom ROMs will likely be exclusively recommended in the future due to Google's upcoming [draconian](https://archive.is/hGIjZ), [anti-privacy, anti-user](https://archive.is/mc1CJ) verification requirements.
|
||||||
|
|
||||||
|
Eden is currently unavailable on F-Droid or the Play Store. Check back occasionally.
|
||||||
|
|
||||||
|
## macOS
|
||||||
|
|
||||||
|
macOS is relatively stable, with only the occasional crash and bug. Compatibility may suffer due to the MoltenVK layer, however.
|
||||||
|
|
||||||
|
Do note that building the GUI version with Qt versions higher than 6.7.3 will cause mysterious bugs, Vulkan errors, and crashes, alongside the cool feature of freezing the entire system UI randomly; we recommend you build with 6.7.3 (via aqtinstall) or earlier as the CI does.
|
||||||
|
|
||||||
|
## *BSD, Solaris
|
||||||
|
|
||||||
|
BSD and Solaris distributions tend to lag behind Linux in terms of Vulkan and other library compatibility. For example, OpenIndiana (Solaris) does not properly package Qt, meaning the recommended method of usage is to use `eden-cli` only for now. Solaris also generally works better with OpenGL.
|
||||||
|
|
||||||
|
AMD GPU support on these platforms is limited or nonexistent.
|
||||||
|
|
||||||
|
## HaikuOS
|
||||||
|
|
||||||
|
HaikuOS supports (see below) Vulkan 1.3 and has Mesa 24.0. Because OpenGL ES is used instead of the desktop flavour of OpenGL the OpenGL backend is actually worse than the Vulkan one in terms of stability and system support. OpenGL is highly not recommended due to it being: out of tree builds of Mesa and generally unstable ones at that. Users are advised to use Vulkan whenever possible.
|
||||||
|
|
||||||
|
- Additionally system drivers for NVIDIA and Intel iGPUs exist and provide a native Vulkan ICD with the `Xcb` interface as opposed to the native `BView`
|
||||||
|
- In order to obtain Vulkan 1.3 support with native `BView` support; Swiftshader can be compiled from source [see this thread](https://discuss.haiku-os.org/t/swiftshader-vulkan-software-renderer-on-haiku/11526/6).
|
||||||
|
|
||||||
|
## VMs
|
||||||
|
|
||||||
|
Eden "can" run in a VM, but only with the software renderer, *unless* you create a hardware-accelerated KVM with GPU passthrough. If you *really* want to do this and don't have a spare GPU lying around, RX 570 and 580 GPUs are extremely cheap on the black market and are powerful enough to run most commercial games at 60 FPS.
|
||||||
|
|
||||||
|
Some users and developers have had success using a pure OpenGL-accelerated KVM on Linux with a Windows VM, but this is ridiculously tedious to set up. You're probably better off dual-booting.
|
3
docs/user/Audio.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
# User Handbook - Audio
|
||||||
|
|
||||||
|
`PULSE_SERVER=none` forces cubeb to use ALSA.
|
58
docs/user/Basics.md
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
# User Handbook - The Basics
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
Eden is a very complicated piece of software, and as such there are many knobs and toggles that can be configured. Most of these are invisible to normal users, however power users may be able to leverage them to their advantage.
|
||||||
|
|
||||||
|
This handbook primarily describes such knobs and toggles. Normal configuration options are described within the emulator itself and will not be covered in detail.
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
The emulator is very demanding on hardware, and as such requires a decent mid-range computer/cellphone.
|
||||||
|
|
||||||
|
See [the requirements page](https://archive.is/sv83h) for recommended and minimum specs.
|
||||||
|
|
||||||
|
The CPU must support FMA for an optimal gameplay experience. The GPU needs to support OpenGL 4.6 ([compatibility list](https://opengl.gpuinfo.org/)), or Vulkan 1.1 ([compatibility list](https://vulkan.gpuinfo.org/)).
|
||||||
|
|
||||||
|
If your GPU doesn't support or is just behind by a minor version, see Mesa environment variables below (*nix only).
|
||||||
|
|
||||||
|
## User configuration
|
||||||
|
|
||||||
|
### Configuration directories
|
||||||
|
|
||||||
|
Eden will store configuration files in the following directories:
|
||||||
|
|
||||||
|
- **Windows**: `%AppData%\Roaming`.
|
||||||
|
- **Android**: Data is stored internally.
|
||||||
|
- **Linux, macOS, FreeBSD, Solaris, OpenBSD**: `$XDG_DATA_HOME`, `$XDG_CACHE_HOME`, `$XDG_CONFIG_HOME`.
|
||||||
|
- **HaikuOS**: `/boot/home/config/settings/eden`
|
||||||
|
|
||||||
|
If a `user` directory is present in the current working directory, that will override all global configuration directories and the emulator will use that instead.
|
||||||
|
|
||||||
|
### Environment variables
|
||||||
|
|
||||||
|
Throughout the handbook, environment variables are mentioned. These are often either global (system wide) or local (set in a script, bound only to the current session). It's heavily recommended to use them in a local context only, as this allows you to rollback changes easily (if for example, there are regressions setting them).
|
||||||
|
|
||||||
|
The recommended way is to create a `.bat` file alongside the emulator `.exe`; contents of which could resemble something like:
|
||||||
|
|
||||||
|
```bat
|
||||||
|
set "__GL_THREADED_OPTIMIZATIONS=1"
|
||||||
|
set "SOME_OTHER_VAR=1"
|
||||||
|
eden.exe
|
||||||
|
```
|
||||||
|
|
||||||
|
Android doesn't have a convenient way to set environment variables.
|
||||||
|
|
||||||
|
For other platforms, the recommended method is using a shell script:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
export __GL_THREADED_OPTIMIZATIONS=1
|
||||||
|
export SOME_OTHER_VAR=1
|
||||||
|
./eden
|
||||||
|
```
|
||||||
|
|
||||||
|
Then just running `chmod +x script.sh && source script.sh`.
|
||||||
|
|
||||||
|
## Compatibility list
|
||||||
|
|
||||||
|
Eden doesn't mantain a compatibility list. However, [EmuReady](https://www.emuready.com/) has a more fine-grained compatibility information for multiple emulators/forks as well.
|
66
docs/user/Graphics.md
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
# User Handbook - Graphics
|
||||||
|
|
||||||
|
## Visual Enhancements
|
||||||
|
|
||||||
|
### Anti-aliasing
|
||||||
|
|
||||||
|
Enhancements aimed at removing jagged lines/sharp edges and/or masking artifacts.
|
||||||
|
|
||||||
|
- **No AA**: Default, provides no anti-aliasing.
|
||||||
|
- **FXAA**: Fast Anti-Aliasing, an implementation as described on [this blog post](https://web.archive.org/web/20110831051323/http://timothylottes.blogspot.com/2011/03/nvidia-fxaa.html). Generally fast but with some innocuos artifacts.
|
||||||
|
- **SMAA**: Subpixel Morphological Anti-Aliasing, an implementation as described on [this article](https://web.archive.org/web/20250000000000*/https://www.iryoku.com/smaa/).
|
||||||
|
|
||||||
|
### Filters
|
||||||
|
|
||||||
|
Various graphical filters exist - each of them aimed at a specific target/image quality preset.
|
||||||
|
|
||||||
|
- **Nearest**: Provides no filtering - useful for debugging.
|
||||||
|
- **Pros**: Fast, works in any hardware.
|
||||||
|
- **Cons**: Less image quality.
|
||||||
|
- **Bilinear**: Provides the hardware default filtering of the Tegra X1.
|
||||||
|
- **Pros**: Fast with acceptable image quality.
|
||||||
|
- **Bicubic**: Provides a bicubic interpolation using a Catmull-Rom (or hardware-accelerated) implementation.
|
||||||
|
- **Pros**: Better image quality with more rounded edges.
|
||||||
|
- **Zero-Tangent, B-Spline, Mitchell**: Provides bicubic interpolation using the respective matrix weights. They're normally not hardware accelerated unless the device supports the `VK_QCOM_filter_cubic_weights` extension. The matrix weights are those matching [the specification itself](https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#VkSamplerCubicWeightsCreateInfoQCOM).
|
||||||
|
- **Pros/Cons**: Each of them is a variation of the Bicubic interpolation model with different weights, they offer different methods to fix some artifacts present in Catmull-Rom.
|
||||||
|
- **Spline-1**: Bicubic interpolation (similar to Mitchell) but with a faster texel fetch method. Generally less blurry than bicubic.
|
||||||
|
- **Pros**: Faster than bicubic even without hardware accelerated bicubic.
|
||||||
|
- **Gaussian**: Whole-area blur, an applied gaussian blur is done to the entire frame.
|
||||||
|
- **Pros**: Less edge artifacts.
|
||||||
|
- **Cons**: Slow and sometimes blurry.
|
||||||
|
- **Lanczos**: An implementation using `a = 3` (49 texel fetches). Provides sharper edges but blurrier artifacts.
|
||||||
|
- **Pros**: Less edge artifacts and less blurry than gaussian.
|
||||||
|
- **Cons**: Slow.
|
||||||
|
- **ScaleForce**: Experimental texture upscale method, see [ScaleFish](https://github.com/BreadFish64/ScaleFish).
|
||||||
|
- **Pros**: Relatively fast.
|
||||||
|
- **FSR**: Uses AMD FidelityFX Super Resolution to enhance image quality.
|
||||||
|
- **Pros**: Great for upscaling, and offers sharper visual quality.
|
||||||
|
- **Cons**: Somewhat slow, and may be offputtingly sharp.
|
||||||
|
- **Area**: Area interpolation (high kernel count).
|
||||||
|
- **Pros**: Best for downscaling (internal resolution > display resolution).
|
||||||
|
- **Cons**: Costly and slow.
|
||||||
|
- **MMPX**: Nearest-neighbour filter aimed at providing higher pixel-art quality.
|
||||||
|
- **Pros**: Offers decent pixel-art upscaling.
|
||||||
|
- **Cons**: Only works for pixel-art.
|
||||||
|
|
||||||
|
### External
|
||||||
|
|
||||||
|
While stock shaders offer a basic subset of options for most users, programs such as [ReShade](https://github.com/crosire/reshade) offer a more flexible experience. In addition to that users can also seek out modifications (mods) for enhancing visual experience (60 FPS mods, HDR, etc).
|
||||||
|
|
||||||
|
## Driver specifics
|
||||||
|
|
||||||
|
### Mesa environment variable hacks
|
||||||
|
|
||||||
|
The software requires a certain version of Vulkan and a certain version of OpenGL to work - otherwise it will refuse to load, this can be easily bypassed by setting an environment variable: `MESA_GL_VERSION_OVERRIDE=4.6 MESA_GLSL_VERSION_OVERRIDE=460` (OpenGL) and `MESA_VK_VERSION_OVERRIDE=1.3` (Vulkan), for more information see [Environment variables for Mesa](https://web.archive.org/web/20250000000000*/https://docs.mesa3d.org/envvars.html).
|
||||||
|
|
||||||
|
### NVIDIA OpenGL environment variables
|
||||||
|
|
||||||
|
Unstable multithreaded optimisations are offered by the stock proprietary NVIDIA driver on X11 platforms. Setting `__GL_THREADED_OPTIMIZATIONS` to `1` would enable such optimisations. This mainly benefits the OpenGL backend. For more information see [Environment Variables for X11 NVIDIA](https://web.archive.org/web/20250115162518/https://download.nvidia.com/XFree86/Linux-x86_64/435.17/README/openglenvvariables.html).
|
||||||
|
|
||||||
|
### swrast/LLVMpipe crashes under high load
|
||||||
|
|
||||||
|
The OpenGL backend would invoke behaviour that would result in swarst/LLVMpipe writing an invalid SSA IR (on old versions of Mesa), and then proceeding to crash. The solution is using a script found in [tools/llvmpipe-run.sh](../../tools/llvmpipe-run.sh).
|
||||||
|
|
||||||
|
### HaikuOS compatibility
|
||||||
|
|
||||||
|
HaikuOS bundles a Mesa library that doesn't support full core OpenGL 4.6 (required by the emulator). This leads to HaikuOS being one of the few computer platforms where Vulkan is the only available option for users. If OpenGL is desired, Mesa has to be built manually from source. For debugging purpouses `lavapipe` is recommended over the GPU driver; there is in-kernel support for NVIDIA cards through.
|
39
docs/user/Storage.md
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
# User Handbook - Data, savefiles and storage
|
||||||
|
|
||||||
|
## Cheats
|
||||||
|
|
||||||
|
Cheats can be placed in the two manners:
|
||||||
|
|
||||||
|
**Method 1**:
|
||||||
|
- Right click on "Open mod directory"
|
||||||
|
- Create a file called `cheat_mycheat.txt` (the file must start with `cheat_` to be recognized as one)
|
||||||
|
- Write the cheat into said text file
|
||||||
|
- Done
|
||||||
|
|
||||||
|
This method doesn't account for build IDs, so any cheats for previous builds will not be automatically filtered out.
|
||||||
|
|
||||||
|
**Method 2**:
|
||||||
|
- Right click on "Open mod directory"
|
||||||
|
- Create a folder called `My cheat`
|
||||||
|
- Inside said folder create another one: `cheats`
|
||||||
|
- Then inside said folder create a file with the build ID in hexadecimal, lowercase, for example `1234FBCDE0000000.txt`
|
||||||
|
- Write the cheat into said text file
|
||||||
|
- Done
|
||||||
|
|
||||||
|
To delete a cheat simply do the process backwards (delete the folder/file).
|
||||||
|
|
||||||
|
## Savefiles
|
||||||
|
|
||||||
|
The method to access save data is simple:
|
||||||
|
- Right click on "Open save directory"
|
||||||
|
|
||||||
|
## Maintaining a library
|
||||||
|
|
||||||
|
### ZFS
|
||||||
|
|
||||||
|
One of the best ways to keep a gallery of archives is using a ZFS pool compressed with zstd.
|
||||||
|
```sh
|
||||||
|
sudo zfs create zroot/switch`
|
||||||
|
sudo zfs set compression=zstd zroot/switch
|
||||||
|
```
|
||||||
|
A new ZFS dataset will then be available on `/zroot/switch`. From which then can be added as a normal game directory. Remember to ensure proper permissions with `chmod 755 /zroot/switch/*`.
|
32
docs/user/Testing.md
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
# User Handbook - Testing
|
||||||
|
|
||||||
|
While this is mainly aimed for testers - normal users can benefit from these guidelines to make their life easier when trying to outline and/or report an issue.
|
||||||
|
|
||||||
|
## How to Test a PR Against the Based Master When Issues Arise
|
||||||
|
|
||||||
|
When you're testing a pull request (PR) and encounter unexpected behavior, it's important to determine whether the issue was introduced by the PR or if it already exists in the base code. To do this, compare the behavior against the based master branch.
|
||||||
|
|
||||||
|
Even before an issue occurs, it is best practice to keep the same settings and delete the shader cache. Using an already made shader cache can make the PR look like it is having a regression in some rare cases.
|
||||||
|
|
||||||
|
### What to Do When Something Seems Off
|
||||||
|
If you notice something odd during testing:
|
||||||
|
- Reproduce the issue using the based master branch.
|
||||||
|
- Observe whether the same behavior occurs.
|
||||||
|
|
||||||
|
### Two Possible Outcomes
|
||||||
|
- If the issue exists in the based master: This means the problem was already present before the PR. The PR most likely did not introduce the regression.
|
||||||
|
- If the issue does not exist in the based master: This suggests the PR most likely introduced the regression and needs further investigation.
|
||||||
|
|
||||||
|
### Report your findings
|
||||||
|
When you report your results:
|
||||||
|
- Clearly state whether the behavior was observed in the based master.
|
||||||
|
- Indicate whether the result is good (expected behavior) or bad (unexpected or broken behavior). Without mentioning if your post/report/log is good or bad it may confuse the Developer of the PR.
|
||||||
|
- Example:
|
||||||
|
```
|
||||||
|
1. "Tested on based master — issue not present. Bad result for PR, likely regression introduced."
|
||||||
|
2. "Tested on based master — issue already present. Good result for PR, not a regression."
|
||||||
|
```
|
||||||
|
|
||||||
|
This approach helps maintain clarity and accountability in the testing process and ensures regressions are caught and addressed efficiently. If the behavior seems normal for a certain game/feature then it may not be always required to check against the based master.
|
||||||
|
|
||||||
|
If a master build for the PR' based master does not exist. It will be helpful to just test past and future builds nearby. That would help with gathering more information about the problem.
|
8
docs/user/ThirdParty.md
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# User Handbook - Third party tools and extras
|
||||||
|
|
||||||
|
The Eden emulator by itself lacks some functionality - or otherwise requires external files (such as packaging) to operate correctly in a given OS. Addendum to that some repositories provide nightly or specialised builds of the emulator.
|
||||||
|
|
||||||
|
While most of the links mentioned in this guide are relatively "safe"; we urge users to use their due diligence and appropriatedly verify the integrity of all files downloaded and ensure they're not compromised.
|
||||||
|
|
||||||
|
- [Nightly Eden builds](https://github.com/pflyly/eden-nightly)
|
||||||
|
- [NixOS Eden Flake](https://github.com/Grantimatter/eden-flake)
|
160
externals/CMakeLists.txt
vendored
|
@ -39,6 +39,152 @@ if (ARCHITECTURE_arm64 OR DYNARMIC_TESTS)
|
||||||
AddJsonPackage(oaknut)
|
AddJsonPackage(oaknut)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# enet
|
||||||
|
AddJsonPackage(enet)
|
||||||
|
|
||||||
|
if (enet_ADDED)
|
||||||
|
target_include_directories(enet INTERFACE ${enet_SOURCE_DIR}/include)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (NOT TARGET enet::enet)
|
||||||
|
add_library(enet::enet ALIAS enet)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# mbedtls
|
||||||
|
AddJsonPackage(mbedtls)
|
||||||
|
|
||||||
|
# VulkanUtilityHeaders - pulls in headers and utility libs
|
||||||
|
AddJsonPackage(vulkan-utility-headers)
|
||||||
|
|
||||||
|
# small hack
|
||||||
|
if (NOT VulkanUtilityLibraries_ADDED)
|
||||||
|
find_package(VulkanHeaders 1.3.274 REQUIRED)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# DiscordRPC
|
||||||
|
if (USE_DISCORD_PRESENCE)
|
||||||
|
if (ARCHITECTURE_arm64)
|
||||||
|
add_compile_definitions(RAPIDJSON_ENDIAN=RAPIDJSON_LITTLEENDIAN)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
AddJsonPackage(discord-rpc)
|
||||||
|
|
||||||
|
if (DiscordRPC_ADDED)
|
||||||
|
target_include_directories(discord-rpc INTERFACE ${DiscordRPC_SOURCE_DIR}/include)
|
||||||
|
add_library(DiscordRPC::discord-rpc ALIAS discord-rpc)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# SimpleIni
|
||||||
|
AddJsonPackage(simpleini)
|
||||||
|
|
||||||
|
# Most linux distros don't package cubeb, so enable regardless of cpm settings
|
||||||
|
if(ENABLE_CUBEB)
|
||||||
|
AddJsonPackage(cubeb)
|
||||||
|
|
||||||
|
if (cubeb_ADDED)
|
||||||
|
if (NOT MSVC)
|
||||||
|
if (TARGET speex)
|
||||||
|
target_compile_options(speex PRIVATE -Wno-sign-compare)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set_target_properties(cubeb PROPERTIES COMPILE_OPTIONS "")
|
||||||
|
target_compile_options(cubeb INTERFACE
|
||||||
|
-Wno-implicit-const-int-float-conversion
|
||||||
|
-Wno-shadow
|
||||||
|
-Wno-missing-declarations
|
||||||
|
-Wno-return-type
|
||||||
|
-Wno-uninitialized
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
target_compile_options(cubeb PRIVATE
|
||||||
|
/wd4456
|
||||||
|
/wd4458
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (NOT TARGET cubeb::cubeb)
|
||||||
|
add_library(cubeb::cubeb ALIAS cubeb)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# find SDL2 exports a bunch of variables that are needed, so its easier to do this outside of the YUZU_find_package
|
||||||
|
if (ENABLE_SDL2)
|
||||||
|
if (YUZU_USE_EXTERNAL_SDL2)
|
||||||
|
message(STATUS "Using SDL2 from externals.")
|
||||||
|
if (NOT WIN32)
|
||||||
|
# Yuzu itself needs: Atomic Audio Events Joystick Haptic Sensor Threads Timers
|
||||||
|
# Since 2.0.18 Atomic+Threads required for HIDAPI/libusb (see https://github.com/libsdl-org/SDL/issues/5095)
|
||||||
|
# Yuzu-cmd also needs: Video (depends on Loadso/Dlopen)
|
||||||
|
# CPUinfo also required for SDL Audio, at least until 2.28.0 (see https://github.com/libsdl-org/SDL/issues/7809)
|
||||||
|
set(SDL_UNUSED_SUBSYSTEMS
|
||||||
|
File Filesystem
|
||||||
|
Locale Power Render)
|
||||||
|
foreach(_SUB ${SDL_UNUSED_SUBSYSTEMS})
|
||||||
|
string(TOUPPER ${_SUB} _OPT)
|
||||||
|
set(SDL_${_OPT} OFF)
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
set(HIDAPI ON)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (APPLE)
|
||||||
|
set(SDL_FILE ON)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if ("${YUZU_SYSTEM_PROFILE}" STREQUAL "steamdeck")
|
||||||
|
set(SDL_PIPEWIRE OFF) # build errors out with this on
|
||||||
|
AddJsonPackage("sdl2_steamdeck")
|
||||||
|
else()
|
||||||
|
AddJsonPackage("sdl2_generic")
|
||||||
|
endif()
|
||||||
|
elseif (YUZU_USE_BUNDLED_SDL2)
|
||||||
|
message(STATUS "Using bundled SDL2")
|
||||||
|
if (PLATFORM_FREEBSD)
|
||||||
|
set(BUILD_SHARED_LIBS ON)
|
||||||
|
endif()
|
||||||
|
AddJsonPackage(sdl2)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_package(SDL2 2.26.4 REQUIRED)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(BUILD_SHARED_LIBS OFF)
|
||||||
|
|
||||||
|
# SPIRV Headers
|
||||||
|
AddJsonPackage(spirv-headers)
|
||||||
|
|
||||||
|
# Sirit
|
||||||
|
if (YUZU_USE_BUNDLED_SIRIT)
|
||||||
|
AddJsonPackage(sirit-ci)
|
||||||
|
else()
|
||||||
|
AddJsonPackage(sirit)
|
||||||
|
# Change to old-but-more-cacheable debug info on Windows
|
||||||
|
if (WIN32 AND (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo"))
|
||||||
|
get_target_property(sirit_opts sirit COMPILE_OPTIONS)
|
||||||
|
list(FILTER sirit_opts EXCLUDE REGEX "/Zi")
|
||||||
|
list(APPEND sirit_opts "/Z7")
|
||||||
|
set_target_properties(sirit PROPERTIES COMPILE_OPTIONS "${sirit_opts}")
|
||||||
|
endif()
|
||||||
|
if(MSVC AND CXX_CLANG)
|
||||||
|
target_compile_options(siritobj PRIVATE -Wno-error=unused-command-line-argument)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# SPIRV Tools
|
||||||
|
AddJsonPackage(spirv-tools)
|
||||||
|
|
||||||
|
if (SPIRV-Tools_ADDED)
|
||||||
|
add_library(SPIRV-Tools::SPIRV-Tools ALIAS SPIRV-Tools-static)
|
||||||
|
target_link_libraries(SPIRV-Tools-static PRIVATE SPIRV-Tools-opt SPIRV-Tools-link)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Catch2
|
||||||
|
if (YUZU_TESTS OR DYNARMIC_TESTS)
|
||||||
|
AddJsonPackage(catch2)
|
||||||
|
endif()
|
||||||
|
|
||||||
# getopt
|
# getopt
|
||||||
if (MSVC)
|
if (MSVC)
|
||||||
add_subdirectory(getopt)
|
add_subdirectory(getopt)
|
||||||
|
@ -67,20 +213,8 @@ if (VulkanMemoryAllocator_ADDED)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Sirit
|
|
||||||
AddJsonPackage(sirit)
|
|
||||||
|
|
||||||
if(MSVC AND USE_CCACHE AND sirit_ADDED)
|
|
||||||
get_target_property(_opts sirit COMPILE_OPTIONS)
|
|
||||||
list(FILTER _opts EXCLUDE REGEX "/Zi")
|
|
||||||
list(APPEND _opts "/Z7")
|
|
||||||
set_target_properties(sirit PROPERTIES COMPILE_OPTIONS "${_opts}")
|
|
||||||
elseif(MSVC AND CXX_CLANG)
|
|
||||||
target_compile_options(sirit PRIVATE -Wno-error=unused-command-line-argument)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# httplib
|
# httplib
|
||||||
if (ENABLE_WEB_SERVICE OR ENABLE_QT_UPDATE_CHECKER)
|
if (ENABLE_WEB_SERVICE OR ENABLE_UPDATE_CHECKER)
|
||||||
AddJsonPackage(httplib)
|
AddJsonPackage(httplib)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
186
externals/cpmfile.json
vendored
|
@ -2,29 +2,41 @@
|
||||||
"vulkan-memory-allocator": {
|
"vulkan-memory-allocator": {
|
||||||
"package": "VulkanMemoryAllocator",
|
"package": "VulkanMemoryAllocator",
|
||||||
"repo": "GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator",
|
"repo": "GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator",
|
||||||
"sha": "1076b348ab",
|
"tag": "v%VERSION%",
|
||||||
"hash": "a46b44e4286d08cffda058e856c47f44c7fed3da55fe9555976eb3907fdcc20ead0b1860b0c38319cda01dbf9b1aa5d4b4038c7f1f8fbd97283d837fa9af9772",
|
"hash": "deb5902ef8db0e329fbd5f3f4385eb0e26bdd9f14f3a2334823fb3fe18f36bc5d235d620d6e5f6fe3551ec3ea7038638899db8778c09f6d5c278f5ff95c3344b",
|
||||||
"find_args": "CONFIG"
|
"find_args": "CONFIG",
|
||||||
|
"git_version": "3.3.0"
|
||||||
},
|
},
|
||||||
"sirit": {
|
"sirit": {
|
||||||
"repo": "eden-emulator/sirit",
|
"repo": "eden-emulator/sirit",
|
||||||
"sha": "db1f1e8ab5",
|
"git_version": "1.0.2",
|
||||||
"hash": "73eb3a042848c63a10656545797e85f40d142009dfb7827384548a385e1e28e1ac72f42b25924ce530d58275f8638554281e884d72f9c7aaf4ed08690a414b05",
|
"tag": "v%VERSION%",
|
||||||
|
"artifact": "sirit-source-%VERSION%.tar.zst",
|
||||||
|
"hash_suffix": "sha512sum",
|
||||||
"find_args": "CONFIG",
|
"find_args": "CONFIG",
|
||||||
"options": [
|
"options": [
|
||||||
"SIRIT_USE_SYSTEM_SPIRV_HEADERS ON"
|
"SIRIT_USE_SYSTEM_SPIRV_HEADERS ON"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"sirit-ci": {
|
||||||
|
"ci": true,
|
||||||
|
"package": "sirit",
|
||||||
|
"name": "sirit",
|
||||||
|
"repo": "eden-emulator/sirit",
|
||||||
|
"version": "1.0.2"
|
||||||
|
},
|
||||||
"httplib": {
|
"httplib": {
|
||||||
"repo": "yhirose/cpp-httplib",
|
"repo": "yhirose/cpp-httplib",
|
||||||
"sha": "a609330e4c",
|
"tag": "v%VERSION%",
|
||||||
"hash": "dd3fd0572f8367d8549e1319fd98368b3e75801a293b0c3ac9b4adb806473a4506a484b3d389dc5bee5acc460cb90af7a20e5df705a1696b56496b30b9ce7ed2"
|
"hash": "b364500f76e2ecb0fe21b032d831272e3f1dfeea71af74e325f8fc4ce9dcdb3c941b97a5b422bdeafb9facd058597b90f8bfc284fb9afe3c33fefa15dd5a010b",
|
||||||
|
"git_version": "0.26.0",
|
||||||
|
"find_args": "MODULE GLOBAL"
|
||||||
},
|
},
|
||||||
"cpp-jwt": {
|
"cpp-jwt": {
|
||||||
"version": "1.4",
|
"version": "1.4",
|
||||||
"repo": "crueter/cpp-jwt",
|
"repo": "crueter/cpp-jwt",
|
||||||
"sha": "9eaea6328f",
|
"sha": "9eaea6328f",
|
||||||
"hash": "e237d92c59ebbf0dc8ac0bae3bc80340e1e9cf430e1c1c9638443001118e16de2b3e9036ac4b98105427667b0386d97831415170b68c432438dcad9ef8052de7",
|
"hash": "35b0b2bfb143585c7b2bd6dc6ca7df5ae5c6e2681000b2ebca077b0ac4bc1e6b6afbe1ce8e47f6d2edad12fcc6404f677acc2ad205661d819b8821ce6f4823fd",
|
||||||
"find_args": "CONFIG",
|
"find_args": "CONFIG",
|
||||||
"options": [
|
"options": [
|
||||||
"CPP_JWT_USE_VENDORED_NLOHMANN_JSON OFF"
|
"CPP_JWT_USE_VENDORED_NLOHMANN_JSON OFF"
|
||||||
|
@ -33,42 +45,170 @@
|
||||||
"xbyak_sun": {
|
"xbyak_sun": {
|
||||||
"package": "xbyak",
|
"package": "xbyak",
|
||||||
"repo": "herumi/xbyak",
|
"repo": "herumi/xbyak",
|
||||||
"sha": "9bb219333a",
|
"tag": "v%VERSION%",
|
||||||
"hash": "303165d45c8c19387ec49d9fda7d7a4e0d86d4c0153898c23f25ce2d58ece567f44c0bbbfe348239b933edb6e1a1e34f4bc1c0ab3a285bee5da0e548879387b0",
|
"hash": "b40dade90fb0e46a2bd52934f7ce461e37be931b571e58cbe2203bc08ed5b54c7ff1a29026c74c7f9805e4e3f6c9636deca528e6b4a8093ce7eae145218599f1",
|
||||||
"bundled": true
|
"git_version": "7.29",
|
||||||
|
"bundled": true,
|
||||||
|
"skip_updates": true
|
||||||
},
|
},
|
||||||
"xbyak": {
|
"xbyak": {
|
||||||
"package": "xbyak",
|
"package": "xbyak",
|
||||||
"repo": "herumi/xbyak",
|
"repo": "herumi/xbyak",
|
||||||
"sha": "4e44f4614d",
|
"tag": "v%VERSION%",
|
||||||
"hash": "5824e92159e07fa36a774aedd3b3ef3541d0241371d522cffa4ab3e1f215fa5097b1b77865b47b2481376c704fa079875557ea463ca63d0a7fd6a8a20a589e70",
|
"hash": "1042090405c426e339506c179d53e91d4d545ce9c9f53d8f797caa092d589f913a9bcb9c8f31c4c60870acb954c556e305fb6732c66bc3c8f1cd924f9172def9",
|
||||||
"bundled": true
|
"git_version": "7.22",
|
||||||
|
"bundled": true,
|
||||||
|
"skip_updates": true
|
||||||
},
|
},
|
||||||
"oaknut": {
|
"oaknut": {
|
||||||
|
"repo": "eden-emulator/oaknut",
|
||||||
"version": "2.0.1",
|
"version": "2.0.1",
|
||||||
"repo": "merryhime/oaknut",
|
"git_version": "2.0.3",
|
||||||
"sha": "94c726ce03",
|
"tag": "v%VERSION%",
|
||||||
"hash": "d8d082242fa1881abce3c82f8dafa002c4e561e66a69e7fc038af67faa5eff2630f082d3d19579c88c4c9f9488e54552accc8cb90e7ce743efe043b6230c08ac"
|
"hash": "9697e80a7d5d9bcb3ce51051a9a24962fb90ca79d215f1f03ae6b58da8ba13a63b5dda1b4dde3d26ac6445029696b8ef2883f4e5a777b342bba01283ed293856"
|
||||||
},
|
},
|
||||||
"libadrenotools": {
|
"libadrenotools": {
|
||||||
"repo": "bylaws/libadrenotools",
|
"repo": "bylaws/libadrenotools",
|
||||||
"sha": "8fae8ce254",
|
"sha": "8fae8ce254",
|
||||||
"hash": "c74fa855f0edebbf25c9bce40b00966daa2447bfc5e15f0cf1a95f86cbf70fc6b02590707edbde16328a0a2a4fb9a1fc419d2dfc22a4a4150971be91892d4edb",
|
"hash": "db4a74ce15559c75e01d1868a90701519b655d77f2a343bbee283a42f8332dc9046960fb022dc969f205e457348a3f99cb8be6e1cd91264d2ae1235294b9f9b2",
|
||||||
"patches": [
|
"patches": [
|
||||||
"0001-linkerns-cpm.patch"
|
"0001-linkerns-cpm.patch"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"oboe": {
|
"oboe": {
|
||||||
"repo": "google/oboe",
|
"repo": "google/oboe",
|
||||||
"sha": "2bc873e53c",
|
"tag": "%VERSION%",
|
||||||
"hash": "02329058a7f9cf7d5039afaae5ab170d9f42f60f4c01e21eaf4f46073886922b057a9ae30eeac040b3ac182f51b9c1bfe9fe1050a2c9f6ce567a1a9a0ec2c768",
|
"hash": "ce4011afe7345370d4ead3b891cd69a5ef224b129535783586c0ca75051d303ed446e6c7f10bde8da31fff58d6e307f1732a3ffd03b249f9ef1fd48fd4132715",
|
||||||
|
"git_version": "1.10.0",
|
||||||
"bundled": true
|
"bundled": true
|
||||||
},
|
},
|
||||||
"unordered-dense": {
|
"unordered-dense": {
|
||||||
"package": "unordered_dense",
|
"package": "unordered_dense",
|
||||||
"repo": "martinus/unordered_dense",
|
"repo": "martinus/unordered_dense",
|
||||||
"sha": "73f3cbb237",
|
"tag": "v%VERSION%",
|
||||||
"hash": "c08c03063938339d61392b687562909c1a92615b6ef39ec8df19ea472aa6b6478e70d7d5e33d4a27b5d23f7806daf57fe1bacb8124c8a945c918c7663a9e8532",
|
"hash": "f9c819e28e1c1a387acfee09277d6af5e366597a0d39acf1c687acf0608a941ba966af8aaebdb8fba0126c7360269c4a51754ef4cab17c35c01a30215f953368",
|
||||||
"find_args": "CONFIG"
|
"find_args": "CONFIG",
|
||||||
|
"git_version": "4.5.0"
|
||||||
|
},
|
||||||
|
"mbedtls": {
|
||||||
|
"package": "MbedTLS",
|
||||||
|
"repo": "Mbed-TLS/mbedtls",
|
||||||
|
"tag": "mbedtls-%VERSION%",
|
||||||
|
"hash": "6671fb8fcaa832e5b115dfdce8f78baa6a4aea71f5c89a640583634cdee27aefe3bf4be075744da91f7c3ae5ea4e0c765c8fc3937b5cfd9ea73d87ef496524da",
|
||||||
|
"version": "3",
|
||||||
|
"git_version": "3.6.4",
|
||||||
|
"artifact": "%TAG%.tar.bz2",
|
||||||
|
"skip_updates": true,
|
||||||
|
"patches": [
|
||||||
|
"0002-aesni-fix.patch",
|
||||||
|
"0003-aesni-fix.patch"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"enet": {
|
||||||
|
"repo": "lsalzman/enet",
|
||||||
|
"tag": "v%VERSION%",
|
||||||
|
"hash": "a0d2fa8c957704dd49e00a726284ac5ca034b50b00d2b20a94fa1bbfbb80841467834bfdc84aa0ed0d6aab894608fd6c86c3b94eee46343f0e6d9c22e391dbf9",
|
||||||
|
"version": "1.3",
|
||||||
|
"git_version": "1.3.18",
|
||||||
|
"find_args": "MODULE"
|
||||||
|
},
|
||||||
|
"vulkan-utility-headers": {
|
||||||
|
"package": "VulkanUtilityLibraries",
|
||||||
|
"repo": "scripts/VulkanUtilityHeaders",
|
||||||
|
"tag": "%VERSION%",
|
||||||
|
"git_version": "1.4.328",
|
||||||
|
"artifact": "VulkanUtilityHeaders.tar.zst",
|
||||||
|
"git_host": "git.crueter.xyz",
|
||||||
|
"hash": "9922217b39faf73cd4fc1510f2fdba14a49aa5c0d77f9ee24ee0512cef16b234d0cabc83c1fec861fa5df1d43e7f086ca9b6501753899119f39c5ca530cb0dae"
|
||||||
|
},
|
||||||
|
"spirv-tools": {
|
||||||
|
"package": "SPIRV-Tools",
|
||||||
|
"repo": "crueter/SPIRV-Tools",
|
||||||
|
"sha": "2fa2d44485",
|
||||||
|
"hash": "3124bbddf7bd44f11445edeca6786b5bba9fb314f27dc087d0bbd9951b0936884ece2b9b40b75cfc8e31ab10ba55854e73aa63df835c40423b1c81dd47b1437d",
|
||||||
|
"git_version": "2025.4",
|
||||||
|
"options": [
|
||||||
|
"SPIRV_SKIP_EXECUTABLES ON"
|
||||||
|
],
|
||||||
|
"patches": [
|
||||||
|
"0001-netbsd-fix.patch"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"spirv-headers": {
|
||||||
|
"package": "SPIRV-Headers",
|
||||||
|
"repo": "KhronosGroup/SPIRV-Headers",
|
||||||
|
"sha": "01e0577914",
|
||||||
|
"hash": "e2b90e95b6f492e640cd27c090d7072f0d03c8fc7382be67cbe176fc8f3fdd78b59f5f0b906198e09808fde645427f409cb9ab8fe4843de7f7dc5b510d454a0a",
|
||||||
|
"options": [
|
||||||
|
"SPIRV_WERROR OFF"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"cubeb": {
|
||||||
|
"repo": "mozilla/cubeb",
|
||||||
|
"sha": "fa02160712",
|
||||||
|
"hash": "8a4bcb2f83ba590f52c66626e895304a73eb61928dbc57777e1822e55378e3568366f17f9da4b80036cc2ef4ea9723c32abf6e7d9bbe00fb03654f0991596ab0",
|
||||||
|
"find_args": "CONFIG",
|
||||||
|
"options": [
|
||||||
|
"USE_SANITIZERS OFF",
|
||||||
|
"BUILD_TESTS OFF",
|
||||||
|
"BUILD_TOOLS OFF",
|
||||||
|
"BUNDLE_SPEEX ON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"sdl2": {
|
||||||
|
"ci": true,
|
||||||
|
"package": "SDL2",
|
||||||
|
"name": "SDL2",
|
||||||
|
"repo": "crueter-ci/SDL2",
|
||||||
|
"version": "2.32.10",
|
||||||
|
"min_version": "2.26.4",
|
||||||
|
"disabled_platforms": [
|
||||||
|
"macos-universal"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"catch2": {
|
||||||
|
"package": "Catch2",
|
||||||
|
"repo": "catchorg/Catch2",
|
||||||
|
"tag": "v%VERSION%",
|
||||||
|
"hash": "a95495142f915d6e9c2a23e80fe360343e9097680066a2f9d3037a070ba5f81ee5559a0407cc9e972dc2afae325873f1fc7ea07a64012c0f01aac6e549f03e3f",
|
||||||
|
"version": "3.0.1",
|
||||||
|
"git_version": "3.11.0",
|
||||||
|
"patches": [
|
||||||
|
"0001-solaris-isnan-fix.patch"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"discord-rpc": {
|
||||||
|
"package": "DiscordRPC",
|
||||||
|
"repo": "eden-emulator/discord-rpc",
|
||||||
|
"sha": "1cf7772bb6",
|
||||||
|
"hash": "9a6c35887dcacceb4ba1bf3141edb73b05b2abc719a8d81dad9cb9dd5b039ce203946787335d9d738af669c10cf2534638b645635a22096fc28dcae2475e0cbe",
|
||||||
|
"find_args": "MODULE"
|
||||||
|
},
|
||||||
|
"simpleini": {
|
||||||
|
"package": "SimpleIni",
|
||||||
|
"repo": "brofield/simpleini",
|
||||||
|
"tag": "v%VERSION%",
|
||||||
|
"hash": "6c198636816a0018adbf7f735d402c64245c6fcd540b7360d4388d46f007f3a520686cdaec4705cb8cb31401b2cb4797a80b42ea5d08a6a5807c0848386f7ca1",
|
||||||
|
"find_args": "MODULE",
|
||||||
|
"git_version": "4.22"
|
||||||
|
},
|
||||||
|
"sdl2_generic": {
|
||||||
|
"package": "SDL2",
|
||||||
|
"repo": "libsdl-org/SDL",
|
||||||
|
"tag": "release-%VERSION%",
|
||||||
|
"hash": "d5622d6bb7266f7942a7b8ad43e8a22524893bf0c2ea1af91204838d9b78d32768843f6faa248757427b8404b8c6443776d4afa6b672cd8571a4e0c03a829383",
|
||||||
|
"key": "generic",
|
||||||
|
"bundled": true,
|
||||||
|
"git_version": "2.32.10",
|
||||||
|
"skip_updates": true
|
||||||
|
},
|
||||||
|
"sdl2_steamdeck": {
|
||||||
|
"package": "SDL2",
|
||||||
|
"repo": "libsdl-org/SDL",
|
||||||
|
"sha": "cc016b0046",
|
||||||
|
"hash": "b8d9873446cdb922387471df9968e078714683046674ef0d0edddf8e25da65a539a3bae83d635496b970237f90b07b36a69f8d7855d450de59311d6d6e8c3dbc",
|
||||||
|
"key": "steamdeck",
|
||||||
|
"bundled": true,
|
||||||
|
"skip_updates": "true"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|