Compare commits
524 Commits
Kernel
...
v0.0.4-rc2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
aa93e0cbb1 | ||
|
|
ead5978b34 | ||
|
|
bfb112dad1 | ||
|
|
2d3ba3e5dd | ||
|
|
36b736482a | ||
|
|
dbc98f758e | ||
|
|
84db3351ab | ||
|
|
3a54d322ab | ||
|
|
f9773fa908 | ||
|
|
2dc6d773ee | ||
|
|
402d8e833d | ||
|
|
d498db1106 | ||
|
|
e93159b047 | ||
|
|
d989166044 | ||
|
|
c96defb80d | ||
|
|
06275885f1 | ||
|
|
206e7af162 | ||
|
|
cdf4ce07bc | ||
|
|
2f591d33d3 | ||
|
|
e4b0c03a22 | ||
|
|
9582dfffee | ||
|
|
cf9f78636a | ||
|
|
ae46778cc3 | ||
|
|
c31761ab75 | ||
|
|
b50f8c620b | ||
|
|
fa718acfbe | ||
|
|
ce0a299bdb | ||
|
|
d3dbabcfc7 | ||
|
|
effe8109a7 | ||
|
|
2924297790 | ||
|
|
5c6aaa7eb1 | ||
|
|
83c162d80d | ||
|
|
1a2d1821b5 | ||
|
|
a9b87077f8 | ||
|
|
2e092d5f5d | ||
|
|
a5996c7511 | ||
|
|
1c57172524 | ||
|
|
d34b44ce39 | ||
|
|
ecf7af0cde | ||
|
|
6b01c13975 | ||
|
|
15becaa5a3 | ||
|
|
3d4bb08cfc | ||
|
|
b2ac18173f | ||
|
|
39f226a853 | ||
|
|
61ab1be0e7 | ||
|
|
3ba9769d7a | ||
|
|
dd9cae4ebc | ||
|
|
8fa36a7737 | ||
|
|
07b09b3849 | ||
|
|
903faacaab | ||
|
|
c713d44c88 | ||
|
|
2a3e815dcd | ||
|
|
dc907616a9 | ||
|
|
0be29d2947 | ||
|
|
683c2834aa | ||
|
|
c788dbb3ef | ||
|
|
7846f4de31 | ||
|
|
a0769ad835 | ||
|
|
470214412b | ||
|
|
41e15e95b1 | ||
|
|
73ebf59af7 | ||
|
|
53bfd56b70 | ||
|
|
6ba25b6cc0 | ||
|
|
8d565d7793 | ||
|
|
311c71146d | ||
|
|
7751f86c1b | ||
|
|
4834fec159 | ||
|
|
b5d54b8df7 | ||
|
|
cd4bcb91cc | ||
|
|
199bc6a170 | ||
|
|
05c721bb41 | ||
|
|
71241b7560 | ||
|
|
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 | ||
|
|
020ad29a8c | ||
|
|
4982dcfaa5 | ||
|
|
677148bdca | ||
|
|
f088f028f3 | ||
|
|
19eb8272b1 | ||
|
|
86ddb51a87 | ||
|
|
10aca2f90c | ||
|
|
1d83ba733c | ||
|
|
fd21774aae | ||
|
|
42280f34d6 | ||
|
|
2482846cf6 | ||
|
|
bf4dce8d0b | ||
|
|
45263ee7aa | ||
|
|
f19bbda517 | ||
|
|
f5bb07341a | ||
|
|
3e299dc0f5 | ||
|
|
3ac9d65cdd | ||
|
|
4f9b670c93 | ||
|
|
1937286798 | ||
|
|
76a8a6e039 | ||
|
|
49ddf95c70 | ||
|
|
d4427d90ea | ||
|
|
aec7f19b7e | ||
|
|
7050b92d61 | ||
|
|
48f7387e3a | ||
|
|
49f29e5071 | ||
|
|
f33a771d58 | ||
|
|
191e4c75a1 | ||
|
|
34302300d9 | ||
|
|
cbbdfc75cc | ||
|
|
1ca35b7559 | ||
|
|
06dabbadcb | ||
|
|
8c9cdf0d70 | ||
|
|
d623e04606 | ||
|
|
4b558e5303 | ||
|
|
28b8159da1 | ||
|
|
87d42cf542 | ||
|
|
725407b989 | ||
|
|
6510818fca | ||
|
|
a487cea683 | ||
|
|
a3c0d59dc9 | ||
|
|
cf634d4d6f | ||
|
|
b1ce3c8dc1 | ||
|
|
e1ffeec212 | ||
|
|
249e006667 | ||
|
|
8ac495acee | ||
|
|
cda6958111 | ||
|
|
dac2efc4c8 | ||
|
|
3b3278f44b | ||
|
|
3ca0bde0e9 | ||
|
|
6699361b7e | ||
|
|
19036c59b5 | ||
|
|
80dfc3d76f | ||
|
|
f4386423e8 | ||
|
|
4c5d03f5de | ||
|
|
d207df959a | ||
|
|
28d26b0d76 | ||
|
|
ad6045d9a4 | ||
|
|
3fbfd64722 | ||
|
|
13ecc1e481 | ||
|
|
2502352180 | ||
|
|
9d2681ecc9 | ||
|
|
428f136a75 | ||
|
|
ecc99ce9ab | ||
|
|
2f82b63e6a | ||
|
|
43c41e4db5 | ||
|
|
10dd003d0f | ||
|
|
37e0b80766 | ||
|
|
718891d11f | ||
|
|
bbcd8aded6 | ||
|
|
2bc792e211 | ||
|
|
e7560183fa | ||
|
|
84fadd1506 | ||
|
|
be7a3e1e86 | ||
|
|
6aa8be1da8 | ||
|
|
e28b0d2590 | ||
|
|
6fcfe7f4f3 | ||
|
|
e60fd4b68b | ||
|
|
10c76568b8 | ||
|
|
8dba6a2cb4 | ||
|
|
4b5a8e0621 | ||
|
|
39e27bc954 | ||
|
|
21c77bdcac | ||
|
|
1c3ca17cfb | ||
|
|
7ca197d900 | ||
|
|
3b4c1beb0c | ||
|
|
76de9d6c8c | ||
|
|
ab015bc730 | ||
|
|
f005f6a3ab | ||
|
|
47b703067e | ||
|
|
03b4f57364 | ||
|
|
57fbdd516e | ||
|
|
f07309afd2 | ||
|
|
cf689a7a49 | ||
|
|
702a2beb7c | ||
|
|
d709771d67 | ||
|
|
428249cb01 | ||
|
|
8ed05425dd | ||
|
|
26b5286250 | ||
|
|
529f78b95f | ||
|
|
434bd42a5e | ||
|
|
8407510f76 | ||
|
|
7f482d0730 | ||
|
|
9d53933a95 | ||
|
|
7950c5cca0 | ||
|
|
09e77fa146 | ||
|
|
dae0d7bec6 | ||
|
|
37375220e8 | ||
|
|
9fae048a5a | ||
|
|
eb80a30c42 | ||
|
|
22847ec78a | ||
|
|
3cb8e6111a | ||
|
|
21cd44ec04 | ||
|
|
c9a3baab5d | ||
|
|
380cfcaeed | ||
|
|
44d658bbc5 | ||
|
|
a1c5b5c911 | ||
|
|
302509d84d | ||
|
|
4ea9664ff4 | ||
|
|
e59065b542 | ||
|
|
eb72a358e3 | ||
|
|
4eb6d10d62 | ||
|
|
949f72222b | ||
|
|
c228f9b746 | ||
|
|
94bcd64153 | ||
|
|
5b864d406d | ||
|
|
a51953e4f9 | ||
|
|
35ec256c74 | ||
|
|
e75ceb676b | ||
|
|
de5c761aa7 | ||
|
|
0e7203df34 | ||
|
|
7ce051cfb3 | ||
|
|
7bfa2404a6 | ||
|
|
bf7f3e25fc | ||
|
|
5180031313 | ||
|
|
1307f3510d | ||
|
|
12f5a96f01 | ||
|
|
77b3f159af | ||
|
|
c97d0c8b53 | ||
|
|
4cc4d315f0 | ||
|
|
d96da5104b | ||
|
|
1f5f9d34d1 | ||
|
|
d61f0774be | ||
|
|
9c6fad7561 | ||
|
|
09a8fab2a2 | ||
|
|
72fb15cacc | ||
|
|
b906abf9fc | ||
|
|
e807e32b1a | ||
|
|
c39e3bece6 | ||
|
|
394ee0dc82 | ||
|
|
9ea4e89607 | ||
|
|
3e55dc6352 | ||
|
|
c36cc0d3ee | ||
|
|
444b9f361e | ||
|
|
bd944b71d5 | ||
|
|
1465757ded | ||
|
|
fc88638693 | ||
|
|
2b62a41942 | ||
|
|
c8d6f23129 | ||
|
|
383fb23348 | ||
|
|
89d40c6302 | ||
|
|
234e41193e | ||
|
|
1551387739 | ||
|
|
3f02d7713f | ||
|
|
bdf5674d7e | ||
|
|
6b8408ef50 | ||
|
|
a3cf780a3a | ||
|
|
0705ba0b47 | ||
|
|
982b171f30 | ||
|
|
ae89b5e1b9 | ||
|
|
d499693c29 | ||
|
|
1f5b4cce6e | ||
|
|
6b7cac003a | ||
|
|
99426f064c | ||
|
|
37618e1043 | ||
|
|
6b33b5a734 | ||
|
|
dc444c7af9 | ||
|
|
a4f845b98d | ||
|
|
f1e74f6855 | ||
|
|
dbbe5b3328 | ||
|
|
0102f548d0 | ||
|
|
9634342100 | ||
|
|
41f0fa97ca | ||
|
|
76d0659ffe | ||
|
|
5ee06b2d75 | ||
|
|
41ffa5a342 | ||
|
|
33275c28d3 | ||
|
|
51b170b470 | ||
|
|
04e5e64538 | ||
|
|
f72783e017 | ||
|
|
3b72c29303 | ||
|
|
9966da9ff3 | ||
|
|
e7becc15b4 | ||
|
|
1f34d836b4 | ||
|
|
b32a667d6f | ||
|
|
15d371c51a | ||
|
|
8cfcf1e8bf | ||
|
|
56acd4041a | ||
|
|
45e7c0d62d | ||
|
|
c47eb9760b | ||
|
|
6fd10fd85e | ||
|
|
c1d9cbca64 | ||
|
|
b089e7d4e6 | ||
|
|
bd2061f44b | ||
|
|
3f12ae1e6e | ||
|
|
c609389ec1 | ||
|
|
f6b6a856a4 | ||
|
|
7249bc0d22 | ||
|
|
06f8823882 | ||
|
|
9e0e31132a | ||
|
|
ff44444bda | ||
|
|
3f4eeb7a65 | ||
|
|
e4953d5866 | ||
|
|
43f450499c | ||
|
|
dee960ccd9 | ||
|
|
18942b7ee0 | ||
|
|
f75a8c44c7 | ||
|
|
07cab5ba07 | ||
|
|
896bfcdaaa | ||
|
|
9ccb792d29 | ||
|
|
bbeb7dd56b | ||
|
|
eeb68768d6 | ||
|
|
0b29fb7c8a | ||
|
|
b2914247c3 | ||
|
|
b5bbe6d865 | ||
|
|
77a8f7b6a7 | ||
|
|
3bcd5f95fe | ||
|
|
12d8cf79ea | ||
|
|
fac153509a | ||
|
|
b1f3b568fb | ||
|
|
c7c2ed7b46 | ||
|
|
ac675c5296 | ||
|
|
8dd0e84343 | ||
|
|
410e782291 | ||
|
|
5de03f47df | ||
|
|
35e45fbad3 | ||
|
|
bdfcb6c950 | ||
|
|
7617f743f9 | ||
|
|
57f11fbf1e | ||
|
|
111f2c3be5 | ||
|
|
1e90df7c3b | ||
|
|
0a67c5a324 | ||
|
|
ca2d2381dc | ||
|
|
758d10b998 | ||
|
|
87f171e884 | ||
|
|
b9c21a5c50 | ||
|
|
d78289a742 | ||
|
|
03ab350bc6 | ||
|
|
46ddbea71c | ||
|
|
67dfa81dc7 | ||
|
|
4fc711587f | ||
|
|
4ced8d23ac | ||
|
|
df8f32b7ad | ||
|
|
b2b993b665 | ||
|
|
bb689637cb | ||
|
|
ca06dad650 | ||
|
|
016ebf3cd8 | ||
|
|
e1763a726e | ||
|
|
23c77a0d4f | ||
|
|
fb459c75d9 | ||
|
|
275d64e653 | ||
|
|
7962c81738 | ||
|
|
a974c5a29c | ||
|
|
b66adfe04c | ||
|
|
8d86b615d5 | ||
|
|
7db5eb8f08 | ||
|
|
be9a415157 | ||
|
|
be97bf3c1b | ||
|
|
12a690e15f | ||
|
|
e8e0d7fa20 | ||
|
|
ce56a4b83c | ||
|
|
9dfe3cece0 | ||
|
|
d125994270 | ||
|
|
d42d379733 | ||
|
|
7cb8a1acd3 | ||
|
|
1a35aef644 | ||
|
|
2aab37b516 | ||
|
|
108daeeb39 | ||
|
|
a538126eb7 | ||
|
|
d7574b2878 | ||
|
|
e9ca3f4c06 | ||
|
|
a8564a09b7 | ||
|
|
2e092010e6 | ||
|
|
be59b4f15f | ||
|
|
2be7df287a | ||
|
|
492903cc7a | ||
|
|
f99488fe3e | ||
|
|
7b23cd0df4 | ||
|
|
fe4f5a3860 | ||
|
|
a0a208db57 | ||
|
|
c47f6615d3 | ||
|
|
1cd51d6545 | ||
|
|
5091759a47 | ||
|
|
03351a4f8b | ||
|
|
55a7797378 | ||
|
|
d5c58342e0 | ||
|
|
ae02310bdf | ||
|
|
cd394fc40f | ||
|
|
3df06da02c | ||
|
|
7f48f4efb6 | ||
|
|
e5074c90ad | ||
|
|
2f421923a6 | ||
|
|
5402773631 | ||
|
|
64f40c8b88 | ||
|
|
591a446bd1 | ||
|
|
312b3d4743 | ||
|
|
5bf1199feb | ||
|
|
97587d5dc9 | ||
|
|
ba9e0cd2b9 | ||
|
|
02baf03ad4 | ||
|
|
3e44389bfc | ||
|
|
693404bf37 | ||
|
|
347d54bc26 | ||
|
|
9d60900ecf | ||
|
|
789dacedca | ||
|
|
35f6afb031 | ||
|
|
38561cd7e3 | ||
|
|
05f536694a | ||
|
|
444109c251 | ||
|
|
0ce2ec3b36 | ||
|
|
d8bfc691d1 | ||
|
|
39a46d755f | ||
|
|
b60d0aabf0 | ||
|
|
aeb2aec13b | ||
|
|
cb3521272f |
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash -e
|
#!/bin/bash -e
|
||||||
|
|
||||||
# SPDX-FileCopyrightText: 2025 eden Emulator Project
|
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
export NDK_CCACHE=$(which ccache)
|
export NDK_CCACHE=$(which ccache)
|
||||||
@@ -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,6 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
# SPDX-FileCopyrightText: 2025 eden Emulator Project
|
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
GITDATE="$(git show -s --date=short --format='%ad' | sed 's/-//g')"
|
GITDATE="$(git show -s --date=short --format='%ad' | sed 's/-//g')"
|
||||||
|
|||||||
@@ -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,84 +1,249 @@
|
|||||||
#!/bin/sh -e
|
#!/bin/sh -e
|
||||||
|
|
||||||
HEADER="$(cat "$PWD/.ci/license/header.txt")"
|
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||||
|
# 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 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"
|
||||||
|
|
||||||
#FILES=$(git diff --name-only master)
|
usage() {
|
||||||
|
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.
|
||||||
|
|
||||||
echo "Done"
|
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.
|
||||||
|
|
||||||
for file in $FILES; do
|
-c, --commit Commit changes to Git (requires --update)
|
||||||
EXTENSION="${file##*.}"
|
|
||||||
case "$EXTENSION" in
|
Copyright $YEAR $HOLDER
|
||||||
kts|kt|cpp|h)
|
Licensed under $LICENSE
|
||||||
CONTENT="`cat $file`"
|
|
||||||
case "$CONTENT" in
|
The following files/directories are marked as external
|
||||||
"$HEADER"*) ;;
|
and thus will not have license headers asserted:
|
||||||
*) BAD_FILES="$BAD_FILES $file" ;;
|
EOF
|
||||||
esac
|
|
||||||
;;
|
for file in $EXCLUDE_FILES; do
|
||||||
esac
|
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
|
done
|
||||||
|
|
||||||
if [ "$BAD_FILES" = "" ]; then
|
# human-readable header string
|
||||||
echo
|
header() {
|
||||||
echo "All good."
|
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() {
|
||||||
|
begin="$1"
|
||||||
|
file="$2"
|
||||||
|
|
||||||
|
# separate things out as spaces to make our lives 100000000x easier
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
BASE=$(git merge-base master HEAD)
|
||||||
|
FILES=$(git diff --name-only "$BASE")
|
||||||
|
|
||||||
|
for file in $FILES; do
|
||||||
|
[ -f "$file" ] || continue
|
||||||
|
|
||||||
|
# skip files that are third party (crueter's CMake modules, sse2neon, etc)
|
||||||
|
for pattern in $EXCLUDE_FILES; do
|
||||||
|
case "$file" in
|
||||||
|
*"$pattern"*)
|
||||||
|
excluded=true
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
excluded=false
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
[ "$excluded" = "true" ] && continue
|
||||||
|
|
||||||
|
case "$file" in
|
||||||
|
*.cmake|*.sh|CMakeLists.txt)
|
||||||
|
begin="#"
|
||||||
|
;;
|
||||||
|
*.kt*|*.cpp|*.h)
|
||||||
|
begin="//"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
check_header "$begin" "$file"
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -z "$SRC_FILES" ] && [ -z "$OTHER_FILES" ]; then
|
||||||
|
echo "-- All good."
|
||||||
|
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "The following files have incorrect license headers:"
|
|
||||||
echo
|
echo
|
||||||
|
|
||||||
for file in $BAD_FILES; do echo $file; done
|
if [ "$SRC_FILES" != "" ]; then
|
||||||
|
echo "-- The following source files have incorrect license headers:"
|
||||||
|
|
||||||
cat << EOF
|
HEADER=$(header "//")
|
||||||
|
|
||||||
The following license header should be added to the start of all offending files:
|
for file in $SRC_FILES; do echo "-- * $file"; done
|
||||||
|
|
||||||
|
cat << EOF
|
||||||
|
|
||||||
|
-- The following license header should be added to the start of these offending files:
|
||||||
|
|
||||||
=== BEGIN ===
|
=== BEGIN ===
|
||||||
$HEADER
|
$HEADER
|
||||||
=== END ===
|
=== 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
|
EOF
|
||||||
|
|
||||||
if [ "$FIX" = "true" ]; then
|
|
||||||
echo
|
|
||||||
echo "FIX set to true. Fixing headers."
|
|
||||||
echo
|
|
||||||
|
|
||||||
for file in $BAD_FILES; do
|
|
||||||
cat $file > $file.bak
|
|
||||||
|
|
||||||
cat .ci/license/header.txt > $file
|
|
||||||
echo >> $file
|
|
||||||
cat $file.bak >> $file
|
|
||||||
|
|
||||||
rm $file.bak
|
|
||||||
|
|
||||||
git add $file
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "License headers fixed."
|
|
||||||
|
|
||||||
if [ "$COMMIT" = "true" ]; then
|
|
||||||
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 [ "$OTHER_FILES" != "" ]; then
|
||||||
|
echo "-- The following CMake and shell scripts have incorrect license headers:"
|
||||||
|
|
||||||
|
HEADER=$(header "#")
|
||||||
|
|
||||||
|
for file in $OTHER_FILES; do echo "-- * $file"; done
|
||||||
|
|
||||||
|
cat << EOF
|
||||||
|
|
||||||
|
-- The following license header should be added to the start of these offending files:
|
||||||
|
|
||||||
|
=== BEGIN ===
|
||||||
|
$HEADER
|
||||||
|
=== END ===
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat << EOF
|
||||||
|
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
|
||||||
|
|
||||||
|
if [ "$UPDATE" = "true" ]; then
|
||||||
|
TMP_DIR=$(mktemp -d)
|
||||||
|
echo "-- Fixing headers..."
|
||||||
|
|
||||||
|
for file in $SRC_FILES $OTHER_FILES; do
|
||||||
|
case $(basename -- "$file") in
|
||||||
|
*.cmake|CMakeLists.txt)
|
||||||
|
begin="#"
|
||||||
|
shell="false"
|
||||||
|
;;
|
||||||
|
*.sh)
|
||||||
|
begin="#"
|
||||||
|
shell=true
|
||||||
|
;;
|
||||||
|
*.kt*|*.cpp|*.h)
|
||||||
|
begin="//"
|
||||||
|
shell="false"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# This is fun
|
||||||
|
match="$begin SPDX-FileCopyrightText.*$HOLDER"
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
if [ "$shell" = "true" ]; then
|
||||||
|
# grab shebang
|
||||||
|
head -n1 "$file" > "$TMP_DIR/shebang"
|
||||||
|
echo >> "$TMP_DIR/shebang"
|
||||||
|
|
||||||
|
# remove shebang
|
||||||
|
sed '1d' "$file" > "$file".bak
|
||||||
|
mv "$file".bak "$file"
|
||||||
|
|
||||||
|
# add to header
|
||||||
|
cat "$TMP_DIR"/shebang "$TMP_DIR"/header > "$TMP_DIR"/new-header
|
||||||
|
mv "$TMP_DIR"/new-header "$TMP_DIR"/header
|
||||||
|
else
|
||||||
|
echo >> "$TMP_DIR/header"
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat "$TMP_DIR"/header "$file" > "$file".bak
|
||||||
|
mv "$file".bak "$file"
|
||||||
|
fi
|
||||||
|
|
||||||
|
[ "$shell" = "true" ] && chmod a+x "$file"
|
||||||
|
[ "$COMMIT" = "true" ] && git add "$file"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "-- Done"
|
||||||
|
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,89 +1,117 @@
|
|||||||
#!/bin/bash -e
|
#!/bin/bash -e
|
||||||
|
|
||||||
# SPDX-FileCopyrightText: 2025 eden Emulator Project
|
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
export ARCH="$(uname -m)"
|
|
||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
amd64|"")
|
amd64 | "")
|
||||||
echo "Making amd64-v3 optimized build of Eden"
|
echo "Making amd64-v3 optimized build of Eden"
|
||||||
ARCH="amd64_v3"
|
ARCH="amd64_v3"
|
||||||
ARCH_FLAGS="-march=x86-64-v3"
|
ARCH_FLAGS="-march=x86-64-v3"
|
||||||
;;
|
export EXTRA_CMAKE_FLAGS=(-DYUZU_BUILD_PRESET=v3)
|
||||||
steamdeck)
|
;;
|
||||||
echo "Making Steam Deck (Zen 2) optimized build of Eden"
|
steamdeck | zen2)
|
||||||
ARCH="steamdeck"
|
echo "Making Steam Deck (Zen 2) optimized build of Eden"
|
||||||
ARCH_FLAGS="-march=znver2 -mtune=znver2"
|
ARCH="steamdeck"
|
||||||
;;
|
ARCH_FLAGS="-march=znver2 -mtune=znver2"
|
||||||
rog-ally|allyx)
|
export EXTRA_CMAKE_FLAGS=(-DYUZU_BUILD_PRESET=zen2 -DYUZU_SYSTEM_PROFILE=steamdeck)
|
||||||
echo "Making ROG Ally X (Zen 4) optimized build of Eden"
|
;;
|
||||||
ARCH="rog-ally-x"
|
rog-ally | allyx | zen4)
|
||||||
ARCH_FLAGS="-march=znver3 -mtune=znver4" # GH actions runner is a Zen 3 CPU, so a small workaround
|
echo "Making ROG Ally X (Zen 4) optimized build of Eden"
|
||||||
;;
|
ARCH="rog-ally-x"
|
||||||
legacy)
|
ARCH_FLAGS="-march=znver4 -mtune=znver4"
|
||||||
echo "Making amd64 generic build of Eden"
|
export EXTRA_CMAKE_FLAGS=(-DYUZU_BUILD_PRESET=zen2 -DYUZU_SYSTEM_PROFILE=steamdeck)
|
||||||
ARCH=amd64
|
;;
|
||||||
ARCH_FLAGS="-march=x86-64 -mtune=generic"
|
legacy)
|
||||||
;;
|
echo "Making amd64 generic build of Eden"
|
||||||
aarch64)
|
ARCH=amd64
|
||||||
echo "Making armv8-a build of Eden"
|
ARCH_FLAGS="-march=x86-64 -mtune=generic"
|
||||||
ARCH=aarch64
|
export EXTRA_CMAKE_FLAGS=(-DYUZU_BUILD_PRESET=generic)
|
||||||
ARCH_FLAGS="-march=armv8-a -mtune=generic -w"
|
;;
|
||||||
;;
|
aarch64)
|
||||||
armv9)
|
echo "Making armv8-a build of Eden"
|
||||||
echo "Making armv9-a build of Eden"
|
ARCH=aarch64
|
||||||
ARCH=armv9
|
ARCH_FLAGS="-march=armv8-a -mtune=generic -w"
|
||||||
ARCH_FLAGS="-march=armv9-a -mtune=generic -w"
|
export EXTRA_CMAKE_FLAGS=(-DYUZU_BUILD_PRESET=generic)
|
||||||
;;
|
;;
|
||||||
|
armv9)
|
||||||
|
echo "Making armv9-a build of Eden"
|
||||||
|
ARCH=armv9
|
||||||
|
ARCH_FLAGS="-march=armv9-a -mtune=generic -w"
|
||||||
|
export EXTRA_CMAKE_FLAGS=(-DYUZU_BUILD_PRESET=armv9)
|
||||||
|
;;
|
||||||
|
native)
|
||||||
|
echo "Making native build of Eden"
|
||||||
|
ARCH="$(uname -m)"
|
||||||
|
ARCH_FLAGS="-march=native -mtune=native"
|
||||||
|
export EXTRA_CMAKE_FLAGS=(-DYUZU_BUILD_PRESET=native)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Invalid target $1 specified, must be one of native, amd64, steamdeck, zen2, allyx, rog-ally, zen4, legacy, aarch64, armv9"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
export ARCH_FLAGS="$ARCH_FLAGS -O3"
|
export ARCH_FLAGS="$ARCH_FLAGS -O3"
|
||||||
|
|
||||||
NPROC="$2"
|
|
||||||
if [ -z "$NPROC" ]; then
|
if [ -z "$NPROC" ]; then
|
||||||
NPROC="$(nproc)"
|
NPROC="$(nproc)"
|
||||||
else
|
|
||||||
shift
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$1" != "" ]; then shift; fi
|
if [ "$1" != "" ]; then shift; fi
|
||||||
|
|
||||||
if [ "$TARGET" = "appimage" ]; then
|
if [ "$TARGET" = "appimage" ]; then
|
||||||
export EXTRA_CMAKE_FLAGS=(-DCMAKE_INSTALL_PREFIX=/usr -DYUZU_ROOM=ON -DYUZU_ROOM_STANDALONE=OFF -DYUZU_CMD=OFF)
|
export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" -DCMAKE_INSTALL_PREFIX=/usr -DYUZU_ROOM=ON -DYUZU_ROOM_STANDALONE=OFF -DYUZU_CMD=OFF)
|
||||||
else
|
else
|
||||||
# For the linux-fresh verification target, verify compilation without PCH as well.
|
# For the linux-fresh verification target, verify compilation without PCH as well.
|
||||||
export EXTRA_CMAKE_FLAGS=(-DYUZU_USE_PRECOMPILED_HEADERS=OFF)
|
export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" -DYUZU_USE_PRECOMPILED_HEADERS=OFF)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
if [ "$DEVEL" != "true" ]; then
|
if [ "$DEVEL" != "true" ]; then
|
||||||
export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" -DENABLE_QT_UPDATE_CHECKER=ON)
|
export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" -DENABLE_UPDATE_CHECKER=ON)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$USE_WEBENGINE" = "true" ]; then
|
||||||
|
WEBENGINE=ON
|
||||||
|
else
|
||||||
|
WEBENGINE=OFF
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$USE_MULTIMEDIA" = "false" ]; then
|
||||||
|
MULTIMEDIA=OFF
|
||||||
|
else
|
||||||
|
MULTIMEDIA=ON
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$BUILD_TYPE" ]; then
|
||||||
|
export BUILD_TYPE="Release"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" $@)
|
export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" $@)
|
||||||
|
|
||||||
mkdir -p build && cd build
|
mkdir -p build && cd build
|
||||||
cmake .. -G Ninja \
|
cmake .. -G Ninja \
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
-DCMAKE_BUILD_TYPE="$BUILD_TYPE" \
|
||||||
-DENABLE_QT_TRANSLATION=ON \
|
-DENABLE_QT_TRANSLATION=ON \
|
||||||
-DUSE_DISCORD_PRESENCE=ON \
|
-DUSE_DISCORD_PRESENCE=ON \
|
||||||
-DCMAKE_CXX_FLAGS="$ARCH_FLAGS" \
|
-DCMAKE_CXX_FLAGS="$ARCH_FLAGS" \
|
||||||
-DCMAKE_C_FLAGS="$ARCH_FLAGS" \
|
-DCMAKE_C_FLAGS="$ARCH_FLAGS" \
|
||||||
-DYUZU_USE_BUNDLED_VCPKG=OFF \
|
|
||||||
-DYUZU_USE_BUNDLED_QT=OFF \
|
-DYUZU_USE_BUNDLED_QT=OFF \
|
||||||
-DYUZU_USE_BUNDLED_SDL2=OFF \
|
-DYUZU_USE_BUNDLED_SDL2=OFF \
|
||||||
-DYUZU_USE_EXTERNAL_SDL2=ON \
|
-DYUZU_USE_EXTERNAL_SDL2=ON \
|
||||||
-DYUZU_TESTS=OFF \
|
-DYUZU_TESTS=OFF \
|
||||||
-DYUZU_USE_QT_MULTIMEDIA=ON \
|
-DYUZU_USE_QT_MULTIMEDIA=$MULTIMEDIA \
|
||||||
-DYUZU_USE_QT_WEB_ENGINE=ON \
|
-DYUZU_USE_QT_WEB_ENGINE=$WEBENGINE \
|
||||||
-DYUZU_USE_FASTER_LD=ON \
|
-DYUZU_USE_FASTER_LD=ON \
|
||||||
-DYUZU_ENABLE_LTO=ON \
|
-DYUZU_ENABLE_LTO=ON \
|
||||||
"${EXTRA_CMAKE_FLAGS[@]}"
|
-DDYNARMIC_ENABLE_LTO=ON \
|
||||||
|
"${EXTRA_CMAKE_FLAGS[@]}"
|
||||||
|
|
||||||
ninja -j${NPROC}
|
ninja -j${NPROC}
|
||||||
|
|
||||||
if [ -d "bin/Release" ]; then
|
if [ -d "bin/Release" ]; then
|
||||||
strip -s bin/Release/*
|
strip -s bin/Release/*
|
||||||
else
|
else
|
||||||
strip -s bin/*
|
strip -s bin/*
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
AppRun
|
AppRun
|
||||||
eden.desktop
|
eden.desktop
|
||||||
org.eden_emu.eden.desktop
|
dev.eden_emu.eden.desktop
|
||||||
shared/bin/eden
|
shared/bin/eden
|
||||||
shared/lib/lib.path
|
shared/lib/lib.path
|
||||||
shared/lib/ld-linux-x86-64.so.2
|
shared/lib/ld-linux-x86-64.so.2
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/sh -e
|
#!/bin/sh -e
|
||||||
|
|
||||||
# SPDX-FileCopyrightText: 2025 eden Emulator Project
|
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
# This script assumes you're in the source directory
|
# This script assumes you're in the source directory
|
||||||
@@ -16,11 +16,11 @@ case "$1" in
|
|||||||
echo "Packaging amd64-v3 optimized build of Eden"
|
echo "Packaging amd64-v3 optimized build of Eden"
|
||||||
ARCH="amd64_v3"
|
ARCH="amd64_v3"
|
||||||
;;
|
;;
|
||||||
steamdeck)
|
steamdeck|zen2)
|
||||||
echo "Packaging Steam Deck (Zen 2) optimized build of Eden"
|
echo "Packaging Steam Deck (Zen 2) optimized build of Eden"
|
||||||
ARCH="steamdeck"
|
ARCH="steamdeck"
|
||||||
;;
|
;;
|
||||||
rog-ally|allyx)
|
rog-ally|allyx|zen4)
|
||||||
echo "Packaging ROG Ally X (Zen 4) optimized build of Eden"
|
echo "Packaging ROG Ally X (Zen 4) optimized build of Eden"
|
||||||
ARCH="rog-ally-x"
|
ARCH="rog-ally-x"
|
||||||
;;
|
;;
|
||||||
@@ -36,6 +36,11 @@ case "$1" in
|
|||||||
echo "Packaging armv9-a build of Eden"
|
echo "Packaging armv9-a build of Eden"
|
||||||
ARCH=armv9
|
ARCH=armv9
|
||||||
;;
|
;;
|
||||||
|
native)
|
||||||
|
echo "Packaging native build of Eden"
|
||||||
|
ARCH="$BASE_ARCH"
|
||||||
|
;;
|
||||||
|
|
||||||
esac
|
esac
|
||||||
|
|
||||||
export BUILDDIR="$2"
|
export BUILDDIR="$2"
|
||||||
@@ -54,15 +59,15 @@ VERSION="$(echo "$EDEN_TAG")"
|
|||||||
mkdir -p ./AppDir
|
mkdir -p ./AppDir
|
||||||
cd ./AppDir
|
cd ./AppDir
|
||||||
|
|
||||||
cp ../dist/org.eden_emu.eden.desktop .
|
cp ../dist/dev.eden_emu.eden.desktop .
|
||||||
cp ../dist/org.eden_emu.eden.svg .
|
cp ../dist/dev.eden_emu.eden.svg .
|
||||||
|
|
||||||
ln -sf ./org.eden_emu.eden.svg ./.DirIcon
|
ln -sf ./dev.eden_emu.eden.svg ./.DirIcon
|
||||||
|
|
||||||
UPINFO='gh-releases-zsync|eden-emulator|Releases|latest|*.AppImage.zsync'
|
UPINFO='gh-releases-zsync|eden-emulator|Releases|latest|*.AppImage.zsync'
|
||||||
|
|
||||||
if [ "$DEVEL" = 'true' ]; then
|
if [ "$DEVEL" = 'true' ]; then
|
||||||
sed -i 's|Name=Eden|Name=Eden Nightly|' ./org.eden_emu.eden.desktop
|
sed -i 's|Name=Eden|Name=Eden Nightly|' ./dev.eden_emu.eden.desktop
|
||||||
UPINFO="$(echo "$UPINFO" | sed 's|Releases|nightly|')"
|
UPINFO="$(echo "$UPINFO" | sed 's|Releases|nightly|')"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -87,7 +92,6 @@ chmod +x ./sharun-aio
|
|||||||
xvfb-run -a ./sharun-aio l -p -v -e -s -k \
|
xvfb-run -a ./sharun-aio l -p -v -e -s -k \
|
||||||
../$BUILDDIR/bin/eden* \
|
../$BUILDDIR/bin/eden* \
|
||||||
$LIBDIR/lib*GL*.so* \
|
$LIBDIR/lib*GL*.so* \
|
||||||
$LIBDIR/libSDL2*.so* \
|
|
||||||
$LIBDIR/dri/* \
|
$LIBDIR/dri/* \
|
||||||
$LIBDIR/vdpau/* \
|
$LIBDIR/vdpau/* \
|
||||||
$LIBDIR/libvulkan* \
|
$LIBDIR/libvulkan* \
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
for i in dist/languages/*.ts; do
|
|
||||||
SRC=en_US
|
|
||||||
TARGET=`head -n1 $i | awk -F 'language="' '{split($2, a, "\""); print a[1]}'`
|
|
||||||
|
|
||||||
# requires fd
|
|
||||||
SOURCES=`fd . src/yuzu -tf -e ui -e cpp -e h -e plist`
|
|
||||||
|
|
||||||
lupdate -source-language $SRC -target-language $TARGET $SOURCES -ts /data/code/eden/$i
|
|
||||||
done
|
|
||||||
@@ -1,43 +1,45 @@
|
|||||||
#!/bin/bash -e
|
#!/bin/bash -ex
|
||||||
|
|
||||||
# SPDX-FileCopyrightText: 2025 eden Emulator Project
|
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
if [ "$DEVEL" != "true" ]; then
|
if [ "$COMPILER" == "clang" ]
|
||||||
export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" -DENABLE_QT_UPDATE_CHECKER=ON)
|
then
|
||||||
|
EXTRA_CMAKE_FLAGS+=(
|
||||||
|
-DCMAKE_CXX_COMPILER=clang-cl
|
||||||
|
-DCMAKE_C_COMPILER=clang-cl
|
||||||
|
-DCMAKE_CXX_FLAGS="-O3"
|
||||||
|
-DCMAKE_C_FLAGS="-O3"
|
||||||
|
)
|
||||||
|
|
||||||
|
BUILD_TYPE="RelWithDebInfo"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$CCACHE" = "true" ]; then
|
[ -z "$WINDEPLOYQT" ] && { echo "WINDEPLOYQT environment variable required."; exit 1; }
|
||||||
export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" -DUSE_CCACHE=ON)
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$BUNDLE_QT" = "true" ]; then
|
echo $EXTRA_CMAKE_FLAGS
|
||||||
export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" -DYUZU_USE_BUNDLED_QT=ON)
|
|
||||||
else
|
|
||||||
export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" -DYUZU_USE_BUNDLED_QT=OFF)
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$WINDEPLOYQT" == "" ]; then
|
|
||||||
echo "You must supply the WINDEPLOYQT environment variable."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" $@)
|
|
||||||
|
|
||||||
mkdir -p build && cd build
|
mkdir -p build && cd build
|
||||||
cmake .. -G Ninja \
|
cmake .. -G Ninja \
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
-DCMAKE_BUILD_TYPE="${BUILD_TYPE:-Release}" \
|
||||||
-DENABLE_QT_TRANSLATION=ON \
|
-DENABLE_QT_TRANSLATION=ON \
|
||||||
-DUSE_DISCORD_PRESENCE=ON \
|
-DUSE_DISCORD_PRESENCE=ON \
|
||||||
-DYUZU_USE_BUNDLED_SDL2=OFF \
|
-DYUZU_USE_BUNDLED_SDL2=ON \
|
||||||
-DYUZU_USE_EXTERNAL_SDL2=ON \
|
-DBUILD_TESTING=OFF \
|
||||||
-DYUZU_TESTS=OFF \
|
-DYUZU_TESTS=OFF \
|
||||||
|
-DDYNARMIC_TESTS=OFF \
|
||||||
-DYUZU_CMD=OFF \
|
-DYUZU_CMD=OFF \
|
||||||
-DYUZU_ROOM_STANDALONE=OFF \
|
-DYUZU_ROOM_STANDALONE=OFF \
|
||||||
-DYUZU_USE_QT_MULTIMEDIA=ON \
|
-DYUZU_USE_QT_MULTIMEDIA=${USE_MULTIMEDIA:-false} \
|
||||||
-DYUZU_USE_QT_WEB_ENGINE=ON \
|
-DYUZU_USE_QT_WEB_ENGINE=${USE_WEBENGINE:-false} \
|
||||||
-DYUZU_ENABLE_LTO=ON \
|
-DYUZU_ENABLE_LTO=ON \
|
||||||
"${EXTRA_CMAKE_FLAGS[@]}"
|
-DCMAKE_EXE_LINKER_FLAGS=" /LTCG" \
|
||||||
|
-DDYNARMIC_ENABLE_LTO=ON \
|
||||||
|
-DYUZU_USE_BUNDLED_QT=${BUNDLE_QT:-false} \
|
||||||
|
-DUSE_CCACHE=${CCACHE:-false} \
|
||||||
|
-DENABLE_UPDATE_CHECKER=${DEVEL:-true} \
|
||||||
|
"${EXTRA_CMAKE_FLAGS[@]}" \
|
||||||
|
"$@"
|
||||||
|
|
||||||
ninja
|
ninja
|
||||||
|
|
||||||
@@ -46,4 +48,5 @@ rm -f bin/*.pdb
|
|||||||
set -e
|
set -e
|
||||||
|
|
||||||
$WINDEPLOYQT --release --no-compiler-runtime --no-opengl-sw --no-system-dxc-compiler --no-system-d3d-compiler --dir pkg bin/eden.exe
|
$WINDEPLOYQT --release --no-compiler-runtime --no-opengl-sw --no-system-dxc-compiler --no-system-d3d-compiler --dir pkg bin/eden.exe
|
||||||
|
|
||||||
cp bin/* pkg
|
cp bin/* pkg
|
||||||
|
|||||||
@@ -1,19 +0,0 @@
|
|||||||
echo off
|
|
||||||
|
|
||||||
call C:\tools\cygwin\cygwinsetup.exe -q -P autoconf,automake,libtool,make,pkg-config
|
|
||||||
|
|
||||||
REM Create wrapper batch files for Cygwin tools in a directory that will be in PATH
|
|
||||||
REM uncomment this for first-run only
|
|
||||||
REM call mkdir C:\cygwin-wrappers
|
|
||||||
|
|
||||||
REM Create autoconf.bat wrapper
|
|
||||||
call echo @echo off > C:\cygwin-wrappers\autoconf.bat
|
|
||||||
call echo C:\tools\cygwin\bin\bash.exe -l -c "autoconf %%*" >> C:\cygwin-wrappers\autoconf.bat
|
|
||||||
|
|
||||||
REM Add other wrappers if needed for other Cygwin tools
|
|
||||||
call echo @echo off > C:\cygwin-wrappers\automake.bat
|
|
||||||
call echo C:\tools\cygwin\bin\bash.exe -l -c "automake %%*" >> C:\cygwin-wrappers\automake.bat
|
|
||||||
|
|
||||||
REM Add the wrappers directory to PATH
|
|
||||||
call echo C:\cygwin-wrappers>>"%GITHUB_PATH%"
|
|
||||||
call echo C:\tools\cygwin\bin>>"%GITHUB_PATH%"
|
|
||||||
@@ -3,8 +3,14 @@
|
|||||||
|
|
||||||
$ErrorActionPreference = "Stop"
|
$ErrorActionPreference = "Stop"
|
||||||
|
|
||||||
$VulkanSDKVer = "1.3.250.1"
|
# Check if running as administrator
|
||||||
$ExeFile = "VulkanSDK-$VulkanSDKVer-Installer.exe"
|
if (-not ([bool](net session 2>$null))) {
|
||||||
|
Write-Host "This script must be run with administrator privileges!"
|
||||||
|
Exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
$VulkanSDKVer = "1.4.321.1"
|
||||||
|
$ExeFile = "vulkansdk-windows-X64-$VulkanSDKVer.exe"
|
||||||
$Uri = "https://sdk.lunarg.com/sdk/download/$VulkanSDKVer/windows/$ExeFile"
|
$Uri = "https://sdk.lunarg.com/sdk/download/$VulkanSDKVer/windows/$ExeFile"
|
||||||
$Destination = "./$ExeFile"
|
$Destination = "./$ExeFile"
|
||||||
|
|
||||||
@@ -30,4 +36,4 @@ echo "Finished installing Vulkan SDK $VulkanSDKVer"
|
|||||||
if ("$env:GITHUB_ACTIONS" -eq "true") {
|
if ("$env:GITHUB_ACTIONS" -eq "true") {
|
||||||
echo "VULKAN_SDK=$VULKAN_SDK" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
echo "VULKAN_SDK=$VULKAN_SDK" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||||
echo "$VULKAN_SDK/Bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
echo "$VULKAN_SDK/Bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
||||||
}
|
}
|
||||||
@@ -3,11 +3,16 @@ GITREV=$(git show -s --format='%h')
|
|||||||
|
|
||||||
ZIP_NAME="Eden-Windows-${ARCH}-${GITDATE}-${GITREV}.zip"
|
ZIP_NAME="Eden-Windows-${ARCH}-${GITDATE}-${GITREV}.zip"
|
||||||
|
|
||||||
mkdir -p artifacts
|
ARTIFACTS_DIR="artifacts"
|
||||||
mkdir -p pack
|
PKG_DIR="build/pkg"
|
||||||
|
|
||||||
cp -r build/pkg/* pack
|
mkdir -p "$ARTIFACTS_DIR"
|
||||||
|
|
||||||
cp LICENSE* README* pack/
|
TMP_DIR=$(mktemp -d)
|
||||||
|
|
||||||
7z a -tzip artifacts/$ZIP_NAME pack/*
|
cp -r "$PKG_DIR"/* "$TMP_DIR"/
|
||||||
|
cp LICENSE* README* "$TMP_DIR"/
|
||||||
|
|
||||||
|
7z a -tzip "$ARTIFACTS_DIR/$ZIP_NAME" "$TMP_DIR"/*
|
||||||
|
|
||||||
|
rm -rf "$TMP_DIR"
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
# This is specific to the CI runner and is unlikely to work on your machine.
|
|
||||||
QTDIR="/c/Qt/6.9.0/msvc2022_64"
|
|
||||||
|
|
||||||
export QT_ROOT_DIR="$QTDIR"
|
|
||||||
export QT_PLUGIN_PATH="$QTDIR/plugins"
|
|
||||||
export QML2_IMPORT_PATH="$QTDIR/qml"
|
|
||||||
export PATH="${PATH};$QTDIR/bin"
|
|
||||||
152
.github/workflows/build.yml
vendored
@@ -1,152 +0,0 @@
|
|||||||
# TODO: This document needs to be formatted,
|
|
||||||
# some stuff needs cleaned up etc
|
|
||||||
name: eden-build
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [ "master" ]
|
|
||||||
|
|
||||||
# TODO: combine build.yml into trigger_release.yml
|
|
||||||
jobs:
|
|
||||||
source:
|
|
||||||
if: ${{ !github.head_ref }}
|
|
||||||
runs-on: source
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: recursive
|
|
||||||
|
|
||||||
- name: Pack
|
|
||||||
run: ./.ci/source.sh
|
|
||||||
|
|
||||||
- name: Upload
|
|
||||||
uses: forgejo/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
retention-days: 2
|
|
||||||
name: source.zip
|
|
||||||
path: artifacts/
|
|
||||||
|
|
||||||
windows:
|
|
||||||
runs-on: windows
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
target: ["msvc"] # TODO: Add msys2
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
shell: ${{ (matrix.target == 'msys2' && 'msys2') || 'bash' }} {0}
|
|
||||||
env:
|
|
||||||
CCACHE_DIR: ${{ runner.workspace }}/.cache/.ccache
|
|
||||||
CCACHE_COMPILERCHECK: content
|
|
||||||
CCACHE_SLOPPINESS: time_macros
|
|
||||||
OS: windows
|
|
||||||
TARGET: ${{ matrix.target }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: recursive
|
|
||||||
fetch-depth: 0
|
|
||||||
fetch-tags: true
|
|
||||||
|
|
||||||
- name: Set up vcpkg cache
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: |
|
|
||||||
${{ github.workspace }}/build/vcpkg_installed
|
|
||||||
${{ github.workspace }}/build/externals
|
|
||||||
${{ github.workspace }}/.vcpkg
|
|
||||||
key: ${{ runner.os }}-${{ matrix.target }}-vcpkg-${{ hashFiles('**/CMakeLists.txt', '**/vcpkg.json') }}-${{ github.run_id }}
|
|
||||||
restore-keys: |
|
|
||||||
${{ runner.os }}-${{ matrix.target }}-vcpkg-
|
|
||||||
|
|
||||||
- name: Set up MSVC
|
|
||||||
uses: https://github.com/ilammy/msvc-dev-cmd@v1
|
|
||||||
if: ${{ matrix.target == 'msvc' }}
|
|
||||||
|
|
||||||
- name: Cygwin with autoconf # NEEDED FOR LIBUSB
|
|
||||||
shell: cmd
|
|
||||||
run: ./.ci/windows/cygwin.bat
|
|
||||||
|
|
||||||
- name: Configure & Build
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
./.ci/windows/qt-envvars.sh
|
|
||||||
DEVEL=true WINDEPLOYQT="/c/Qt/6.9.0/msvc2022_64/bin/windeployqt6.exe" .ci/windows/build.sh -DCMAKE_PREFIX_PATH=C:/Qt/6.9.0/msvc2022_64/lib/cmake/Qt6
|
|
||||||
|
|
||||||
- name: Package artifacts
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
./.ci/windows/qt-envvars.sh
|
|
||||||
./.ci/windows/package.sh
|
|
||||||
|
|
||||||
- name: Upload Windows artifacts
|
|
||||||
uses: forgejo/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
retention-days: 2
|
|
||||||
name: ${{ matrix.target }}.zip
|
|
||||||
path: artifacts/*
|
|
||||||
|
|
||||||
linux:
|
|
||||||
runs-on: linux
|
|
||||||
env:
|
|
||||||
CCACHE_DIR: /home/runner/.cache/ccache
|
|
||||||
CCACHE_COMPILERCHECK: content
|
|
||||||
CCACHE_SLOPPINESS: time_macros
|
|
||||||
OS: linux
|
|
||||||
TARGET: fresh
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: recursive
|
|
||||||
fetch-depth: 0
|
|
||||||
fetch-tags: true
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: TARGET=appimage DEVEL=true ./.ci/linux/build.sh
|
|
||||||
|
|
||||||
- name: Package AppImage
|
|
||||||
run: DEVEL=true ./.ci/linux/package.sh &> /dev/null
|
|
||||||
|
|
||||||
- name: Upload Linux artifacts
|
|
||||||
uses: forgejo/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
retention-days: 3
|
|
||||||
name: linux.zip
|
|
||||||
path: ./*.AppImage
|
|
||||||
|
|
||||||
android:
|
|
||||||
runs-on: android
|
|
||||||
|
|
||||||
env:
|
|
||||||
OS: android
|
|
||||||
TARGET: universal
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: recursive
|
|
||||||
fetch-depth: 0
|
|
||||||
fetch-tags: true
|
|
||||||
|
|
||||||
- name: Set tag name
|
|
||||||
run: |
|
|
||||||
if [[ "$GITHUB_REF_TYPE" == "tag" ]]; then
|
|
||||||
echo "GIT_TAG_NAME=$GITHUB_REF_NAME" >> $GITHUB_ENV
|
|
||||||
fi
|
|
||||||
echo $GIT_TAG_NAME
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: ANDROID_HOME=/home/runner/sdk ./.ci/android/build.sh
|
|
||||||
env:
|
|
||||||
ANDROID_KEYSTORE_B64: ${{ secrets.ANDROID_KEYSTORE_B64 }}
|
|
||||||
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
|
|
||||||
ANDROID_KEYSTORE_PASS: ${{ secrets.ANDROID_KEYSTORE_PASS }}
|
|
||||||
|
|
||||||
- name: Package Android artifacts
|
|
||||||
run: ./.ci/android/package.sh
|
|
||||||
|
|
||||||
- name: Upload Android artifacts
|
|
||||||
uses: forgejo/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
retention-days: 2
|
|
||||||
name: android.zip
|
|
||||||
path: artifacts/*
|
|
||||||
203
.github/workflows/trigger_release.yml
vendored
@@ -1,203 +0,0 @@
|
|||||||
name: Build Application and Make Release
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
tags: [ "*" ]
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
source:
|
|
||||||
runs-on: source
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: recursive
|
|
||||||
- name: Pack
|
|
||||||
run: ./.ci/source.sh
|
|
||||||
- name: Upload
|
|
||||||
uses: forgejo/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
retention-days: 2
|
|
||||||
name: source.zip
|
|
||||||
path: artifacts/
|
|
||||||
|
|
||||||
windows:
|
|
||||||
runs-on: windows
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
target: ["msvc"] # TODO: Add msys2
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
shell: ${{ (matrix.target == 'msys2' && 'msys2') || 'bash' }} {0}
|
|
||||||
env:
|
|
||||||
CCACHE_DIR: ${{ runner.workspace }}/.cache/.ccache
|
|
||||||
CCACHE_COMPILERCHECK: content
|
|
||||||
CCACHE_SLOPPINESS: time_macros
|
|
||||||
OS: windows
|
|
||||||
TARGET: ${{ matrix.target }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: recursive
|
|
||||||
fetch-depth: 0
|
|
||||||
fetch-tags: true
|
|
||||||
|
|
||||||
- name: Set up vcpkg cache
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: |
|
|
||||||
${{ github.workspace }}/build/vcpkg_installed
|
|
||||||
${{ github.workspace }}/build/externals
|
|
||||||
${{ github.workspace }}/.vcpkg
|
|
||||||
key: ${{ runner.os }}-${{ matrix.target }}-vcpkg-${{ hashFiles('**/CMakeLists.txt', '**/vcpkg.json') }}-${{ github.run_id }}
|
|
||||||
restore-keys: |
|
|
||||||
${{ runner.os }}-${{ matrix.target }}-vcpkg-
|
|
||||||
|
|
||||||
- name: Set up MSVC
|
|
||||||
uses: https://github.com/ilammy/msvc-dev-cmd@v1
|
|
||||||
if: ${{ matrix.target == 'msvc' }}
|
|
||||||
|
|
||||||
- name: Cygwin with autoconf # NEEDED FOR LIBUSB
|
|
||||||
shell: cmd
|
|
||||||
run: ./.ci/windows/cygwin.bat
|
|
||||||
|
|
||||||
- name: Configure & Build
|
|
||||||
shell: bash
|
|
||||||
run: DEVEL=false ./.ci/windows/build.sh
|
|
||||||
|
|
||||||
- name: Package artifacts
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
export PATH="${PATH}:/c/Qt/6.9.0/msvc2022_64/bin"
|
|
||||||
./.ci/windows/package.sh
|
|
||||||
|
|
||||||
- name: Upload Windows artifacts
|
|
||||||
uses: forgejo/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
retention-days: 2
|
|
||||||
name: ${{ matrix.target }}.zip
|
|
||||||
path: artifacts/*
|
|
||||||
|
|
||||||
linux:
|
|
||||||
runs-on: linux
|
|
||||||
env:
|
|
||||||
CCACHE_DIR: /home/runner/.cache/ccache
|
|
||||||
CCACHE_COMPILERCHECK: content
|
|
||||||
CCACHE_SLOPPINESS: time_macros
|
|
||||||
OS: linux
|
|
||||||
TARGET: fresh
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: recursive
|
|
||||||
fetch-depth: 0
|
|
||||||
fetch-tags: true
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: TARGET=appimage RELEASE=1 ./.ci/linux/build.sh v3 8
|
|
||||||
|
|
||||||
- name: Package AppImage
|
|
||||||
run: ./.ci/linux/package.sh v3 &> /dev/null
|
|
||||||
|
|
||||||
- name: Upload Linux artifacts
|
|
||||||
uses: forgejo/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
retention-days: 2
|
|
||||||
name: linux.zip
|
|
||||||
path: ./*.AppImage*
|
|
||||||
|
|
||||||
android:
|
|
||||||
runs-on: android
|
|
||||||
|
|
||||||
env:
|
|
||||||
CCACHE_DIR: /home/runner/.cache/ccache
|
|
||||||
CCACHE_COMPILERCHECK: content
|
|
||||||
CCACHE_SLOPPINESS: time_macros
|
|
||||||
OS: android
|
|
||||||
TARGET: universal
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: recursive
|
|
||||||
fetch-depth: 0
|
|
||||||
fetch-tags: true
|
|
||||||
|
|
||||||
- name: Set tag name
|
|
||||||
run: |
|
|
||||||
if [[ "$GITHUB_REF_TYPE" == "tag" ]]; then
|
|
||||||
echo "GIT_TAG_NAME=$GITHUB_REF_NAME" >> $GITHUB_ENV
|
|
||||||
fi
|
|
||||||
echo $GIT_TAG_NAME
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: ANDROID_HOME=/home/runner/sdk ./.ci/android/build.sh
|
|
||||||
env:
|
|
||||||
ANDROID_KEYSTORE_B64: ${{ secrets.ANDROID_KEYSTORE_B64 }}
|
|
||||||
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
|
|
||||||
ANDROID_KEYSTORE_PASS: ${{ secrets.ANDROID_KEYSTORE_PASS }}
|
|
||||||
|
|
||||||
- name: Package Android artifacts
|
|
||||||
run: ./.ci/android/package.sh
|
|
||||||
|
|
||||||
- name: Upload Android artifacts
|
|
||||||
uses: forgejo/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
retention-days: 2
|
|
||||||
name: android.zip
|
|
||||||
path: artifacts/*
|
|
||||||
|
|
||||||
create_release:
|
|
||||||
needs: [linux, windows, android]
|
|
||||||
runs-on: linux
|
|
||||||
outputs:
|
|
||||||
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
submodules: 'recursive'
|
|
||||||
path: 'eden-source'
|
|
||||||
|
|
||||||
- name: Download artifacts
|
|
||||||
uses: forgejo/download-artifact@v4
|
|
||||||
with:
|
|
||||||
path: artifacts
|
|
||||||
|
|
||||||
- name: Grab and store version
|
|
||||||
run: |
|
|
||||||
cd eden-source
|
|
||||||
tag_name=$(git describe --tags --abbrev=0)
|
|
||||||
echo "VERSION=$tag_name" >> $GITHUB_ENV
|
|
||||||
echo $tag_name
|
|
||||||
|
|
||||||
- name: Package artifacts properly
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
set -ex
|
|
||||||
mv ${{ github.workspace }}/eden-source eden-${{ env.VERSION }}
|
|
||||||
cd artifacts
|
|
||||||
ls *.zip
|
|
||||||
|
|
||||||
mkdir -p dist
|
|
||||||
|
|
||||||
cp linux.zip/Eden-*.AppImage dist/Eden-Linux-${{ env.VERSION }}-amd64.AppImage
|
|
||||||
cp linux.zip/Eden-*.AppImage.zsync dist/Eden-Linux-${{ env.VERSION }}-amd64.AppImage.zsync
|
|
||||||
cp msvc.zip/eden-windows-msvc*.zip dist/Eden-Windows-MSVC-${{ env.VERSION }}-amd64.zip
|
|
||||||
cp android.zip/eden-android*.apk dist/Eden-Android-${{ env.VERSION }}.apk
|
|
||||||
cp android.zip/eden-android*.aab dist/Eden-Android-${{ env.VERSION }}.aab
|
|
||||||
cp source.zip/eden-unified-source*.tar.xz dist/Eden-Source-${{ env.VERSION }}.tar.xz
|
|
||||||
cp source.zip/eden-unified-source*.tar.xz.sha256sum dist/Eden-Source-${{ env.VERSION }}.tar.xz.sha256sum
|
|
||||||
|
|
||||||
- name: Create release
|
|
||||||
id: create_release
|
|
||||||
uses: actions/forgejo-release@v2.6.0
|
|
||||||
with:
|
|
||||||
direction: upload
|
|
||||||
tag: ${{ env.VERSION }}
|
|
||||||
title: Eden ${{ env.VERSION }}
|
|
||||||
release-dir: artifacts/dist/
|
|
||||||
17
.gitignore
vendored
@@ -5,11 +5,17 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
# Build directory
|
# Build directory
|
||||||
[Bb]uild*/
|
/[Bb]uild*/
|
||||||
doc-build/
|
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
|
||||||
@@ -19,14 +25,21 @@ dist/english_plurals/generated_en.ts
|
|||||||
.idea/
|
.idea/
|
||||||
.vs/
|
.vs/
|
||||||
.vscode/
|
.vscode/
|
||||||
|
.cache/
|
||||||
|
profile.json.gz
|
||||||
CMakeLists.txt.user*
|
CMakeLists.txt.user*
|
||||||
|
|
||||||
|
# kdevelop
|
||||||
|
.kdev4/
|
||||||
|
*.kdev4
|
||||||
|
|
||||||
# *nix related
|
# *nix related
|
||||||
# Common convention for backup or temporary files
|
# Common convention for backup or temporary files
|
||||||
*~
|
*~
|
||||||
|
|
||||||
# Visual Studio CMake settings
|
# Visual Studio CMake settings
|
||||||
CMakeSettings.json
|
CMakeSettings.json
|
||||||
|
.cache/
|
||||||
|
|
||||||
# OSX global filetypes
|
# OSX global filetypes
|
||||||
# Created by Finder or Spotlight in directories for various OS functionality (indexing, etc)
|
# Created by Finder or Spotlight in directories for various OS functionality (indexing, etc)
|
||||||
@@ -45,4 +58,4 @@ Thumbs.db
|
|||||||
eden-windows-msvc
|
eden-windows-msvc
|
||||||
artifacts
|
artifacts
|
||||||
*.AppImage*
|
*.AppImage*
|
||||||
*.patch
|
/install*
|
||||||
|
|||||||
69
.gitmodules
vendored
@@ -1,69 +0,0 @@
|
|||||||
# SPDX-FileCopyrightText: 2014 Citra Emulator Project
|
|
||||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
||||||
|
|
||||||
[submodule "cubeb"]
|
|
||||||
path = externals/cubeb
|
|
||||||
url = https://github.com/mozilla/cubeb.git
|
|
||||||
[submodule "libusb"]
|
|
||||||
path = externals/libusb/libusb
|
|
||||||
url = https://github.com/libusb/libusb.git
|
|
||||||
[submodule "Vulkan-Headers"]
|
|
||||||
path = externals/Vulkan-Headers
|
|
||||||
url = https://github.com/KhronosGroup/Vulkan-Headers.git
|
|
||||||
[submodule "xbyak"]
|
|
||||||
path = externals/xbyak
|
|
||||||
url = https://github.com/herumi/xbyak.git
|
|
||||||
[submodule "opus"]
|
|
||||||
path = externals/opus
|
|
||||||
url = https://github.com/xiph/opus.git
|
|
||||||
[submodule "SDL"]
|
|
||||||
path = externals/SDL
|
|
||||||
url = https://github.com/libsdl-org/SDL.git
|
|
||||||
[submodule "cpp-httplib"]
|
|
||||||
path = externals/cpp-httplib
|
|
||||||
url = https://github.com/yhirose/cpp-httplib.git
|
|
||||||
[submodule "ffmpeg"]
|
|
||||||
path = externals/ffmpeg/ffmpeg
|
|
||||||
url = https://github.com/FFmpeg/FFmpeg.git
|
|
||||||
[submodule "vcpkg"]
|
|
||||||
path = externals/vcpkg
|
|
||||||
url = https://github.com/microsoft/vcpkg.git
|
|
||||||
[submodule "cpp-jwt"]
|
|
||||||
path = externals/cpp-jwt
|
|
||||||
url = https://github.com/arun11299/cpp-jwt.git
|
|
||||||
[submodule "VulkanMemoryAllocator"]
|
|
||||||
path = externals/VulkanMemoryAllocator
|
|
||||||
url = https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git
|
|
||||||
[submodule "Vulkan-Utility-Libraries"]
|
|
||||||
path = externals/Vulkan-Utility-Libraries
|
|
||||||
url = https://github.com/KhronosGroup/Vulkan-Utility-Libraries.git
|
|
||||||
[submodule "externals/boost-headers"]
|
|
||||||
path = externals/boost-headers
|
|
||||||
url = https://github.com/boostorg/headers.git
|
|
||||||
[submodule "externals/dynarmic/externals/catch"]
|
|
||||||
path = externals/dynarmic/externals/catch
|
|
||||||
url = https://github.com/catchorg/Catch2.git
|
|
||||||
[submodule "externals/dynarmic/externals/fmt"]
|
|
||||||
path = externals/dynarmic/externals/fmt
|
|
||||||
url = https://github.com/fmtlib/fmt.git
|
|
||||||
[submodule "externals/dynarmic/externals/unordered_dense"]
|
|
||||||
path = externals/dynarmic/externals/unordered_dense
|
|
||||||
url = https://github.com/Lizzie841/unordered_dense.git
|
|
||||||
[submodule "externals/dynarmic/externals/xbyak"]
|
|
||||||
path = externals/dynarmic/externals/xbyak
|
|
||||||
url = https://github.com/herumi/xbyak.git
|
|
||||||
[submodule "externals/dynarmic/externals/zycore-c"]
|
|
||||||
path = externals/dynarmic/externals/zycore-c
|
|
||||||
url = https://github.com/zyantific/zycore-c.git
|
|
||||||
[submodule "externals/dynarmic/externals/zydis"]
|
|
||||||
path = externals/dynarmic/externals/zydis
|
|
||||||
url = https://github.com/zyantific/zydis.git
|
|
||||||
[submodule "externals/nx_tzdb/tzdb_to_nx/externals/tz/tz"]
|
|
||||||
path = externals/nx_tzdb/tzdb_to_nx/externals/tz/tz
|
|
||||||
url = https://github.com/eggert/tz.git
|
|
||||||
[submodule "externals/sirit/externals/SPIRV-Headers"]
|
|
||||||
path = externals/sirit/externals/SPIRV-Headers
|
|
||||||
url = https://github.com/KhronosGroup/SPIRV-Headers.git
|
|
||||||
[submodule "externals/SPIRV-Tools"]
|
|
||||||
path = externals/SPIRV-Tools
|
|
||||||
url = https://github.com/KhronosGroup/SPIRV-Tools.git
|
|
||||||
13
.patch/boost/0001-clang-cl.patch
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
diff --git a/libs/cobalt/include/boost/cobalt/concepts.hpp b/libs/cobalt/include/boost/cobalt/concepts.hpp
|
||||||
|
index d49f2ec..a9bdb80 100644
|
||||||
|
--- a/libs/cobalt/include/boost/cobalt/concepts.hpp
|
||||||
|
+++ b/libs/cobalt/include/boost/cobalt/concepts.hpp
|
||||||
|
@@ -62,7 +62,7 @@ struct enable_awaitables
|
||||||
|
template <typename T>
|
||||||
|
concept with_get_executor = requires (T& t)
|
||||||
|
{
|
||||||
|
- {t.get_executor()} -> asio::execution::executor;
|
||||||
|
+ t.get_executor();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
11
.patch/boost/0002-use-marmasm.patch
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
--- a/libs/context/CMakeLists.txt 2025-09-08 00:42:31.303651800 -0400
|
||||||
|
+++ b/libs/context/CMakeLists.txt 2025-09-08 00:42:40.592184300 -0400
|
||||||
|
@@ -146,7 +146,7 @@
|
||||||
|
set(ASM_LANGUAGE ASM)
|
||||||
|
endif()
|
||||||
|
elseif(BOOST_CONTEXT_ASSEMBLER STREQUAL armasm)
|
||||||
|
- set(ASM_LANGUAGE ASM_ARMASM)
|
||||||
|
+ set(ASM_LANGUAGE ASM_MARMASM)
|
||||||
|
else()
|
||||||
|
set(ASM_LANGUAGE ASM_MASM)
|
||||||
|
endif()
|
||||||
14
.patch/boost/0003-armasm-options.patch
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
diff --git a/libs/context/CMakeLists.txt b/libs/context/CMakeLists.txt
|
||||||
|
index 8210f65..0e59dd7 100644
|
||||||
|
--- a/libs/context/CMakeLists.txt
|
||||||
|
+++ b/libs/context/CMakeLists.txt
|
||||||
|
@@ -186,7 +186,8 @@ if(BOOST_CONTEXT_IMPLEMENTATION STREQUAL "fcontext")
|
||||||
|
set_property(SOURCE ${ASM_SOURCES} APPEND PROPERTY COMPILE_OPTIONS "/safeseh")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
- else() # masm
|
||||||
|
+ # armasm doesn't support most of these options
|
||||||
|
+ elseif(NOT BOOST_CONTEXT_ASSEMBLER STREQUAL armasm) # masm
|
||||||
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||||
|
set_property(SOURCE ${ASM_SOURCES} APPEND PROPERTY COMPILE_OPTIONS "-x" "assembler-with-cpp")
|
||||||
|
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
||||||
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
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
52
.patch/httplib/0001-mingw.patch
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
From e1a946ffb79022d38351a0623f819a5419965c3e Mon Sep 17 00:00:00 2001
|
||||||
|
From: crueter <crueter@eden-emu.dev>
|
||||||
|
Date: Fri, 24 Oct 2025 23:41:09 -0700
|
||||||
|
Subject: [PATCH] [build] Fix MinGW missing GetAddrInfoExCancel definition
|
||||||
|
|
||||||
|
MinGW does not define GetAddrInfoExCancel in its wstcpi whatever header,
|
||||||
|
so to get around this we can just load it with GetProcAddress et al.
|
||||||
|
|
||||||
|
Signed-off-by: crueter <crueter@eden-emu.dev>
|
||||||
|
---
|
||||||
|
httplib.h | 14 ++++++++++++--
|
||||||
|
1 file changed, 12 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/httplib.h b/httplib.h
|
||||||
|
index e15ba44..90a76dc 100644
|
||||||
|
--- a/httplib.h
|
||||||
|
+++ b/httplib.h
|
||||||
|
@@ -203,11 +203,13 @@
|
||||||
|
#error Sorry, Visual Studio versions prior to 2015 are not supported
|
||||||
|
#endif
|
||||||
|
|
||||||
|
-#pragma comment(lib, "ws2_32.lib")
|
||||||
|
-
|
||||||
|
using ssize_t = __int64;
|
||||||
|
#endif // _MSC_VER
|
||||||
|
|
||||||
|
+#if defined(_MSC_VER) || defined(__MINGW32__)
|
||||||
|
+#pragma comment(lib, "ws2_32.lib")
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
#ifndef S_ISREG
|
||||||
|
#define S_ISREG(m) (((m) & S_IFREG) == S_IFREG)
|
||||||
|
#endif // S_ISREG
|
||||||
|
@@ -3557,7 +3559,15 @@ inline int getaddrinfo_with_timeout(const char *node, const char *service,
|
||||||
|
auto wait_result =
|
||||||
|
::WaitForSingleObject(event, static_cast<DWORD>(timeout_sec * 1000));
|
||||||
|
if (wait_result == WAIT_TIMEOUT) {
|
||||||
|
+#ifdef __MINGW32__
|
||||||
|
+ typedef INT (WSAAPI *PFN_GETADDRINFOEXCANCEL)(HANDLE *CancelHandle);
|
||||||
|
+ auto wsdll = LoadLibraryW((wchar_t*) "ws2_32.lib");
|
||||||
|
+ PFN_GETADDRINFOEXCANCEL GetAddrInfoExCancel = (PFN_GETADDRINFOEXCANCEL) GetProcAddress(wsdll, "GetAddrInfoExCancel");
|
||||||
|
+
|
||||||
|
+ if (cancel_handle) { GetAddrInfoExCancel(&cancel_handle); }
|
||||||
|
+#else
|
||||||
|
if (cancel_handle) { ::GetAddrInfoExCancel(&cancel_handle); }
|
||||||
|
+#endif
|
||||||
|
::CloseHandle(event);
|
||||||
|
return EAI_AGAIN;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.51.0
|
||||||
|
|
||||||
20
.patch/libadrenotools/0001-linkerns-cpm.patch
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||||
|
index 16c6092..9e75548 100644
|
||||||
|
--- a/CMakeLists.txt
|
||||||
|
+++ b/CMakeLists.txt
|
||||||
|
@@ -8,7 +8,14 @@ project(adrenotools LANGUAGES CXX C)
|
||||||
|
|
||||||
|
set(GEN_INSTALL_TARGET OFF CACHE BOOL "")
|
||||||
|
|
||||||
|
-add_subdirectory(lib/linkernsbypass)
|
||||||
|
+include(CPM)
|
||||||
|
+set(CPM_USE_LOCAL_PACKAGES OFF)
|
||||||
|
+
|
||||||
|
+CPMAddPackage(
|
||||||
|
+ NAME linkernsbypass
|
||||||
|
+ URL "https://github.com/bylaws/liblinkernsbypass/archive/aa3975893d.zip"
|
||||||
|
+ URL_HASH SHA512=43d3d146facb7ec99d066a9b8990369ab7b9eec0d5f9a67131b0a0744fde0af27d884ca1f2a272cd113718a23356530ed97703c8c0659c4c25948d50c106119e
|
||||||
|
+)
|
||||||
|
|
||||||
|
set(LIB_SOURCES src/bcenabler.cpp
|
||||||
|
src/driver.cpp
|
||||||
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)
|
||||||
|
{
|
||||||
10
.patch/mbedtls/0001-cmake-version.patch
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||||
|
index 1811c42..bac9098 100644
|
||||||
|
--- a/CMakeLists.txt
|
||||||
|
+++ b/CMakeLists.txt
|
||||||
|
@@ -1,4 +1,4 @@
|
||||||
|
-cmake_minimum_required(VERSION 2.6)
|
||||||
|
+cmake_minimum_required(VERSION 3.5)
|
||||||
|
if(TEST_CPP)
|
||||||
|
project("mbed TLS" C CXX)
|
||||||
|
else()
|
||||||
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()
|
||||||
49
.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
|
||||||
@@ -128,10 +129,6 @@ Copyright: 2020-2021 Its-Rei <kupfel@gmail.com>
|
|||||||
2020-2021 yuzu Emulator Project
|
2020-2021 yuzu Emulator Project
|
||||||
License: GPL-2.0-or-later
|
License: GPL-2.0-or-later
|
||||||
|
|
||||||
Files: vcpkg.json
|
|
||||||
Copyright: 2022 yuzu Emulator Project
|
|
||||||
License: GPL-3.0-or-later
|
|
||||||
|
|
||||||
Files: .github/ISSUE_TEMPLATE/*
|
Files: .github/ISSUE_TEMPLATE/*
|
||||||
Copyright: 2022 yuzu Emulator Project
|
Copyright: 2022 yuzu Emulator Project
|
||||||
License: GPL-2.0-or-later
|
License: GPL-2.0-or-later
|
||||||
@@ -159,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
|
||||||
21
.tx/config
Executable file
@@ -0,0 +1,21 @@
|
|||||||
|
[main]
|
||||||
|
host = https://app.transifex.com
|
||||||
|
|
||||||
|
[o:edenemu:p:eden-emulator:r:android-translations]
|
||||||
|
file_filter = src/android/app/src/main/res/values-<lang>/strings.xml
|
||||||
|
source_file = src/android/app/src/main/res/values/strings.xml
|
||||||
|
type = ANDROID
|
||||||
|
minimum_perc = 0
|
||||||
|
resource_name = Android Translations
|
||||||
|
replace_edited_strings = false
|
||||||
|
keep_translations = false
|
||||||
|
lang_map = zh_CN: zh-rCN, zh_TW: zh-rTW, pt_BR: pt-rBR, pt_PT: pt-rPT, vi_VN: vi, ku: ckb, ja_JP: ja, ko_KR: ko, ru_RU: ru
|
||||||
|
|
||||||
|
[o:edenemu:p:eden-emulator:r:qt-translations]
|
||||||
|
file_filter = dist/languages/<lang>.ts
|
||||||
|
source_file = dist/languages/en.ts
|
||||||
|
type = QT
|
||||||
|
minimum_perc = 0
|
||||||
|
resource_name = Qt Translations
|
||||||
|
replace_edited_strings = false
|
||||||
|
keep_translations = false
|
||||||
1041
CMakeLists.txt
1370
CMakeModules/CPM.cmake
Normal file
628
CMakeModules/CPMUtil.cmake
Normal file
@@ -0,0 +1,628 @@
|
|||||||
|
# SPDX-FileCopyrightText: Copyright 2025 crueter
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
if (MSVC OR ANDROID)
|
||||||
|
set(BUNDLED_DEFAULT ON)
|
||||||
|
else()
|
||||||
|
set(BUNDLED_DEFAULT OFF)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
option(CPMUTIL_FORCE_BUNDLED
|
||||||
|
"Force bundled packages for all CPM depdendencies" ${BUNDLED_DEFAULT})
|
||||||
|
|
||||||
|
option(CPMUTIL_FORCE_SYSTEM
|
||||||
|
"Force system packages for all CPM dependencies (NOT RECOMMENDED)" OFF)
|
||||||
|
|
||||||
|
cmake_minimum_required(VERSION 3.22)
|
||||||
|
include(CPM)
|
||||||
|
|
||||||
|
# cpmfile parsing
|
||||||
|
set(CPMUTIL_JSON_FILE "${CMAKE_CURRENT_SOURCE_DIR}/cpmfile.json")
|
||||||
|
|
||||||
|
if (EXISTS ${CPMUTIL_JSON_FILE})
|
||||||
|
file(READ ${CPMUTIL_JSON_FILE} CPMFILE_CONTENT)
|
||||||
|
else()
|
||||||
|
message(WARNING "[CPMUtil] cpmfile ${CPMUTIL_JSON_FILE} does not exist, AddJsonPackage will be a no-op")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Utility stuff
|
||||||
|
function(cpm_utils_message level name message)
|
||||||
|
message(${level} "[CPMUtil] ${name}: ${message}")
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(array_to_list array length out)
|
||||||
|
math(EXPR range "${length} - 1")
|
||||||
|
|
||||||
|
foreach(IDX RANGE ${range})
|
||||||
|
string(JSON _element GET "${array}" "${IDX}")
|
||||||
|
|
||||||
|
list(APPEND NEW_LIST ${_element})
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
set("${out}" "${NEW_LIST}" PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(get_json_element object out member default)
|
||||||
|
string(JSON out_type ERROR_VARIABLE err TYPE "${object}" ${member})
|
||||||
|
|
||||||
|
if (err)
|
||||||
|
set("${out}" "${default}" PARENT_SCOPE)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
string(JSON outvar GET "${object}" ${member})
|
||||||
|
|
||||||
|
if (out_type STREQUAL "ARRAY")
|
||||||
|
string(JSON _len LENGTH "${object}" ${member})
|
||||||
|
# array_to_list("${outvar}" ${_len} outvar)
|
||||||
|
set("${out}_LENGTH" "${_len}" PARENT_SCOPE)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set("${out}" "${outvar}" PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
# The preferred usage
|
||||||
|
function(AddJsonPackage)
|
||||||
|
set(oneValueArgs
|
||||||
|
NAME
|
||||||
|
|
||||||
|
# these are overrides that can be generated at runtime, so can be defined separately from the json
|
||||||
|
DOWNLOAD_ONLY
|
||||||
|
BUNDLED_PACKAGE
|
||||||
|
)
|
||||||
|
|
||||||
|
set(multiValueArgs OPTIONS)
|
||||||
|
|
||||||
|
cmake_parse_arguments(JSON "" "${oneValueArgs}" "${multiValueArgs}"
|
||||||
|
"${ARGN}")
|
||||||
|
|
||||||
|
list(LENGTH ARGN argnLength)
|
||||||
|
|
||||||
|
# single name argument
|
||||||
|
if(argnLength EQUAL 1)
|
||||||
|
set(JSON_NAME "${ARGV0}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (NOT DEFINED CPMFILE_CONTENT)
|
||||||
|
cpm_utils_message(WARNING ${name} "No cpmfile, AddJsonPackage is a no-op")
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (NOT DEFINED JSON_NAME)
|
||||||
|
cpm_utils_message(FATAL_ERROR "json package" "No name specified")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
string(JSON object ERROR_VARIABLE err GET "${CPMFILE_CONTENT}" "${JSON_NAME}")
|
||||||
|
|
||||||
|
if (err)
|
||||||
|
cpm_utils_message(FATAL_ERROR ${JSON_NAME} "Not found in cpmfile")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
get_json_element("${object}" package package ${JSON_NAME})
|
||||||
|
get_json_element("${object}" repo repo "")
|
||||||
|
get_json_element("${object}" ci ci OFF)
|
||||||
|
get_json_element("${object}" version version "")
|
||||||
|
|
||||||
|
if (ci)
|
||||||
|
get_json_element("${object}" name name "${JSON_NAME}")
|
||||||
|
get_json_element("${object}" extension extension "tar.zst")
|
||||||
|
get_json_element("${object}" min_version min_version "")
|
||||||
|
get_json_element("${object}" raw_disabled disabled_platforms "")
|
||||||
|
|
||||||
|
if (raw_disabled)
|
||||||
|
array_to_list("${raw_disabled}" ${raw_disabled_LENGTH} disabled_platforms)
|
||||||
|
else()
|
||||||
|
set(disabled_platforms "")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
AddCIPackage(
|
||||||
|
VERSION ${version}
|
||||||
|
NAME ${name}
|
||||||
|
REPO ${repo}
|
||||||
|
PACKAGE ${package}
|
||||||
|
EXTENSION ${extension}
|
||||||
|
MIN_VERSION ${min_version}
|
||||||
|
DISABLED_PLATFORMS ${disabled_platforms}
|
||||||
|
)
|
||||||
|
|
||||||
|
# pass stuff to parent scope
|
||||||
|
set(${package}_ADDED "${${package}_ADDED}"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
set(${package}_SOURCE_DIR "${${package}_SOURCE_DIR}"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
set(${package}_BINARY_DIR "${${package}_BINARY_DIR}"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
get_json_element("${object}" hash hash "")
|
||||||
|
get_json_element("${object}" hash_suffix hash_suffix "")
|
||||||
|
get_json_element("${object}" sha sha "")
|
||||||
|
get_json_element("${object}" url url "")
|
||||||
|
get_json_element("${object}" key key "")
|
||||||
|
get_json_element("${object}" tag tag "")
|
||||||
|
get_json_element("${object}" artifact artifact "")
|
||||||
|
get_json_element("${object}" git_version git_version "")
|
||||||
|
get_json_element("${object}" git_host git_host "")
|
||||||
|
get_json_element("${object}" source_subdir source_subdir "")
|
||||||
|
get_json_element("${object}" bundled bundled "unset")
|
||||||
|
get_json_element("${object}" find_args find_args "")
|
||||||
|
get_json_element("${object}" raw_patches patches "")
|
||||||
|
|
||||||
|
# okay here comes the fun part: REPLACEMENTS!
|
||||||
|
# first: tag gets %VERSION% replaced if applicable, with either git_version (preferred) or version
|
||||||
|
# second: artifact gets %VERSION% and %TAG% replaced accordingly (same rules for VERSION)
|
||||||
|
|
||||||
|
if (git_version)
|
||||||
|
set(version_replace ${git_version})
|
||||||
|
else()
|
||||||
|
set(version_replace ${version})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# TODO(crueter): fmt module for cmake
|
||||||
|
if (tag)
|
||||||
|
string(REPLACE "%VERSION%" "${version_replace}" tag ${tag})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (artifact)
|
||||||
|
string(REPLACE "%VERSION%" "${version_replace}" artifact ${artifact})
|
||||||
|
string(REPLACE "%TAG%" "${tag}" artifact ${artifact})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# format patchdir
|
||||||
|
if (raw_patches)
|
||||||
|
math(EXPR range "${raw_patches_LENGTH} - 1")
|
||||||
|
|
||||||
|
foreach(IDX RANGE ${range})
|
||||||
|
string(JSON _patch GET "${raw_patches}" "${IDX}")
|
||||||
|
|
||||||
|
set(full_patch "${CMAKE_SOURCE_DIR}/.patch/${JSON_NAME}/${_patch}")
|
||||||
|
if (NOT EXISTS ${full_patch})
|
||||||
|
cpm_utils_message(FATAL_ERROR ${JSON_NAME} "specifies patch ${full_patch} which does not exist")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
list(APPEND patches "${full_patch}")
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
# end format patchdir
|
||||||
|
|
||||||
|
# options
|
||||||
|
get_json_element("${object}" raw_options options "")
|
||||||
|
|
||||||
|
if (raw_options)
|
||||||
|
array_to_list("${raw_options}" ${raw_options_LENGTH} options)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(options ${options} ${JSON_OPTIONS})
|
||||||
|
# end options
|
||||||
|
|
||||||
|
# system/bundled
|
||||||
|
if (bundled STREQUAL "unset" AND DEFINED JSON_BUNDLED_PACKAGE)
|
||||||
|
set(bundled ${JSON_BUNDLED_PACKAGE})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
AddPackage(
|
||||||
|
NAME "${package}"
|
||||||
|
VERSION "${version}"
|
||||||
|
URL "${url}"
|
||||||
|
HASH "${hash}"
|
||||||
|
HASH_SUFFIX "${hash_suffix}"
|
||||||
|
SHA "${sha}"
|
||||||
|
REPO "${repo}"
|
||||||
|
KEY "${key}"
|
||||||
|
PATCHES "${patches}"
|
||||||
|
OPTIONS "${options}"
|
||||||
|
FIND_PACKAGE_ARGUMENTS "${find_args}"
|
||||||
|
BUNDLED_PACKAGE "${bundled}"
|
||||||
|
SOURCE_SUBDIR "${source_subdir}"
|
||||||
|
|
||||||
|
GIT_VERSION ${git_version}
|
||||||
|
GIT_HOST ${git_host}
|
||||||
|
|
||||||
|
ARTIFACT ${artifact}
|
||||||
|
TAG ${tag}
|
||||||
|
)
|
||||||
|
|
||||||
|
# pass stuff to parent scope
|
||||||
|
set(${package}_ADDED "${${package}_ADDED}"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
set(${package}_SOURCE_DIR "${${package}_SOURCE_DIR}"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
set(${package}_BINARY_DIR "${${package}_BINARY_DIR}"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(AddPackage)
|
||||||
|
cpm_set_policies()
|
||||||
|
|
||||||
|
# TODO(crueter): git clone?
|
||||||
|
|
||||||
|
#[[
|
||||||
|
URL configurations, descending order of precedence:
|
||||||
|
- URL [+ GIT_URL] -> bare URL fetch
|
||||||
|
- REPO + TAG + ARTIFACT -> github release artifact
|
||||||
|
- REPO + TAG -> github release archive
|
||||||
|
- REPO + SHA -> github commit archive
|
||||||
|
- REPO + BRANCH -> github branch
|
||||||
|
|
||||||
|
Hash configurations, descending order of precedence:
|
||||||
|
- HASH -> bare sha512sum
|
||||||
|
- HASH_SUFFIX -> hash grabbed from the URL + this suffix
|
||||||
|
- HASH_URL -> hash grabbed from a URL
|
||||||
|
* technically this is unsafe since a hacker can attack that url
|
||||||
|
|
||||||
|
NOTE: hash algo defaults to sha512
|
||||||
|
#]]
|
||||||
|
set(oneValueArgs
|
||||||
|
NAME
|
||||||
|
VERSION
|
||||||
|
GIT_VERSION
|
||||||
|
GIT_HOST
|
||||||
|
|
||||||
|
REPO
|
||||||
|
TAG
|
||||||
|
ARTIFACT
|
||||||
|
SHA
|
||||||
|
BRANCH
|
||||||
|
|
||||||
|
HASH
|
||||||
|
HASH_SUFFIX
|
||||||
|
HASH_URL
|
||||||
|
HASH_ALGO
|
||||||
|
|
||||||
|
URL
|
||||||
|
GIT_URL
|
||||||
|
|
||||||
|
KEY
|
||||||
|
BUNDLED_PACKAGE
|
||||||
|
FORCE_BUNDLED_PACKAGE
|
||||||
|
FIND_PACKAGE_ARGUMENTS
|
||||||
|
)
|
||||||
|
|
||||||
|
set(multiValueArgs OPTIONS PATCHES)
|
||||||
|
|
||||||
|
cmake_parse_arguments(PKG_ARGS "" "${oneValueArgs}" "${multiValueArgs}"
|
||||||
|
"${ARGN}")
|
||||||
|
|
||||||
|
if (NOT DEFINED PKG_ARGS_NAME)
|
||||||
|
cpm_utils_message(FATAL_ERROR "package" "No package name defined")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
option(${PKG_ARGS_NAME}_FORCE_SYSTEM "Force the system package for ${PKG_ARGS_NAME}")
|
||||||
|
option(${PKG_ARGS_NAME}_FORCE_BUNDLED "Force the bundled package for ${PKG_ARGS_NAME}")
|
||||||
|
|
||||||
|
if (NOT DEFINED PKG_ARGS_GIT_HOST)
|
||||||
|
set(git_host github.com)
|
||||||
|
else()
|
||||||
|
set(git_host ${PKG_ARGS_GIT_HOST})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (DEFINED PKG_ARGS_URL)
|
||||||
|
set(pkg_url ${PKG_ARGS_URL})
|
||||||
|
|
||||||
|
if (DEFINED PKG_ARGS_REPO)
|
||||||
|
set(pkg_git_url https://${git_host}/${PKG_ARGS_REPO})
|
||||||
|
else()
|
||||||
|
if (DEFINED PKG_ARGS_GIT_URL)
|
||||||
|
set(pkg_git_url ${PKG_ARGS_GIT_URL})
|
||||||
|
else()
|
||||||
|
set(pkg_git_url ${pkg_url})
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
elseif (DEFINED PKG_ARGS_REPO)
|
||||||
|
set(pkg_git_url https://${git_host}/${PKG_ARGS_REPO})
|
||||||
|
|
||||||
|
if (DEFINED PKG_ARGS_TAG)
|
||||||
|
set(pkg_key ${PKG_ARGS_TAG})
|
||||||
|
|
||||||
|
if(DEFINED PKG_ARGS_ARTIFACT)
|
||||||
|
set(pkg_url
|
||||||
|
${pkg_git_url}/releases/download/${PKG_ARGS_TAG}/${PKG_ARGS_ARTIFACT})
|
||||||
|
else()
|
||||||
|
set(pkg_url
|
||||||
|
${pkg_git_url}/archive/refs/tags/${PKG_ARGS_TAG}.tar.gz)
|
||||||
|
endif()
|
||||||
|
elseif (DEFINED PKG_ARGS_SHA)
|
||||||
|
set(pkg_url "${pkg_git_url}/archive/${PKG_ARGS_SHA}.tar.gz")
|
||||||
|
else()
|
||||||
|
if (DEFINED PKG_ARGS_BRANCH)
|
||||||
|
set(PKG_BRANCH ${PKG_ARGS_BRANCH})
|
||||||
|
else()
|
||||||
|
cpm_utils_message(WARNING ${PKG_ARGS_NAME}
|
||||||
|
"REPO defined but no TAG, SHA, BRANCH, or URL specified, defaulting to master")
|
||||||
|
set(PKG_BRANCH master)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(pkg_url ${pkg_git_url}/archive/refs/heads/${PKG_BRANCH}.tar.gz)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
cpm_utils_message(FATAL_ERROR ${PKG_ARGS_NAME} "No URL or repository defined")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
cpm_utils_message(STATUS ${PKG_ARGS_NAME} "Download URL is ${pkg_url}")
|
||||||
|
|
||||||
|
if (NOT DEFINED PKG_ARGS_KEY)
|
||||||
|
if (DEFINED PKG_ARGS_SHA)
|
||||||
|
string(SUBSTRING ${PKG_ARGS_SHA} 0 4 pkg_key)
|
||||||
|
cpm_utils_message(DEBUG ${PKG_ARGS_NAME}
|
||||||
|
"No custom key defined, using ${pkg_key} from sha")
|
||||||
|
elseif(DEFINED PKG_ARGS_GIT_VERSION)
|
||||||
|
set(pkg_key ${PKG_ARGS_GIT_VERSION})
|
||||||
|
cpm_utils_message(DEBUG ${PKG_ARGS_NAME}
|
||||||
|
"No custom key defined, using ${pkg_key}")
|
||||||
|
elseif (DEFINED PKG_ARGS_TAG)
|
||||||
|
set(pkg_key ${PKG_ARGS_TAG})
|
||||||
|
cpm_utils_message(DEBUG ${PKG_ARGS_NAME}
|
||||||
|
"No custom key defined, using ${pkg_key}")
|
||||||
|
elseif (DEFINED PKG_ARGS_VERSION)
|
||||||
|
set(pkg_key ${PKG_ARGS_VERSION})
|
||||||
|
cpm_utils_message(DEBUG ${PKG_ARGS_NAME}
|
||||||
|
"No custom key defined, using ${pkg_key}")
|
||||||
|
else()
|
||||||
|
cpm_utils_message(WARNING ${PKG_ARGS_NAME}
|
||||||
|
"Could not determine cache key, using CPM defaults")
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
set(pkg_key ${PKG_ARGS_KEY})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (DEFINED PKG_ARGS_HASH_ALGO)
|
||||||
|
set(hash_algo ${PKG_ARGS_HASH_ALGO})
|
||||||
|
else()
|
||||||
|
set(hash_algo SHA512)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (DEFINED PKG_ARGS_HASH)
|
||||||
|
set(pkg_hash "${hash_algo}=${PKG_ARGS_HASH}")
|
||||||
|
elseif (DEFINED PKG_ARGS_HASH_SUFFIX)
|
||||||
|
# funny sanity check
|
||||||
|
string(TOLOWER ${hash_algo} hash_algo_lower)
|
||||||
|
string(TOLOWER ${PKG_ARGS_HASH_SUFFIX} suffix_lower)
|
||||||
|
if (NOT ${suffix_lower} MATCHES ${hash_algo_lower})
|
||||||
|
cpm_utils_message(WARNING
|
||||||
|
"Hash algorithm and hash suffix do not match, errors may occur")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(hash_url ${pkg_url}.${PKG_ARGS_HASH_SUFFIX})
|
||||||
|
elseif (DEFINED PKG_ARGS_HASH_URL)
|
||||||
|
set(hash_url ${PKG_ARGS_HASH_URL})
|
||||||
|
else()
|
||||||
|
cpm_utils_message(WARNING ${PKG_ARGS_NAME}
|
||||||
|
"No hash or hash URL found")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (DEFINED hash_url)
|
||||||
|
set(outfile ${CMAKE_CURRENT_BINARY_DIR}/${PKG_ARGS_NAME}.hash)
|
||||||
|
|
||||||
|
# TODO(crueter): This is kind of a bad solution
|
||||||
|
# because "technically" the hash is invalidated each week
|
||||||
|
# but it works for now kjsdnfkjdnfjksdn
|
||||||
|
string(TOLOWER ${PKG_ARGS_NAME} lowername)
|
||||||
|
if (NOT EXISTS ${outfile} AND NOT EXISTS ${CPM_SOURCE_CACHE}/${lowername}/${pkg_key})
|
||||||
|
file(DOWNLOAD ${hash_url} ${outfile})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (EXISTS ${outfile})
|
||||||
|
file(READ ${outfile} pkg_hash_tmp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (DEFINED ${pkg_hash_tmp})
|
||||||
|
set(pkg_hash "${hash_algo}=${pkg_hash_tmp}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
macro(set_precedence local force)
|
||||||
|
set(CPM_USE_LOCAL_PACKAGES ${local})
|
||||||
|
set(CPM_LOCAL_PACKAGES_ONLY ${force})
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
#[[
|
||||||
|
Precedence:
|
||||||
|
- package_FORCE_SYSTEM
|
||||||
|
- package_FORCE_BUNDLED
|
||||||
|
- CPMUTIL_FORCE_SYSTEM
|
||||||
|
- CPMUTIL_FORCE_BUNDLED
|
||||||
|
- BUNDLED_PACKAGE
|
||||||
|
- default to allow local
|
||||||
|
]]#
|
||||||
|
if (PKG_ARGS_FORCE_BUNDLED_PACKAGE)
|
||||||
|
set_precedence(OFF OFF)
|
||||||
|
elseif (${PKG_ARGS_NAME}_FORCE_SYSTEM)
|
||||||
|
set_precedence(ON ON)
|
||||||
|
elseif (${PKG_ARGS_NAME}_FORCE_BUNDLED)
|
||||||
|
set_precedence(OFF OFF)
|
||||||
|
elseif (CPMUTIL_FORCE_SYSTEM)
|
||||||
|
set_precedence(ON ON)
|
||||||
|
elseif(CPMUTIL_FORCE_BUNDLED)
|
||||||
|
set_precedence(OFF OFF)
|
||||||
|
elseif (DEFINED PKG_ARGS_BUNDLED_PACKAGE AND NOT PKG_ARGS_BUNDLED_PACKAGE STREQUAL "unset")
|
||||||
|
if (PKG_ARGS_BUNDLED_PACKAGE)
|
||||||
|
set(local OFF)
|
||||||
|
else()
|
||||||
|
set(local ON)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set_precedence(${local} OFF)
|
||||||
|
else()
|
||||||
|
set_precedence(ON OFF)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (DEFINED PKG_ARGS_VERSION)
|
||||||
|
list(APPEND EXTRA_ARGS
|
||||||
|
VERSION ${PKG_ARGS_VERSION}
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
CPMAddPackage(
|
||||||
|
NAME ${PKG_ARGS_NAME}
|
||||||
|
URL ${pkg_url}
|
||||||
|
URL_HASH ${pkg_hash}
|
||||||
|
CUSTOM_CACHE_KEY ${pkg_key}
|
||||||
|
DOWNLOAD_ONLY ${PKG_ARGS_DOWNLOAD_ONLY}
|
||||||
|
FIND_PACKAGE_ARGUMENTS ${PKG_ARGS_FIND_PACKAGE_ARGUMENTS}
|
||||||
|
|
||||||
|
OPTIONS ${PKG_ARGS_OPTIONS}
|
||||||
|
PATCHES ${PKG_ARGS_PATCHES}
|
||||||
|
EXCLUDE_FROM_ALL ON
|
||||||
|
|
||||||
|
${EXTRA_ARGS}
|
||||||
|
|
||||||
|
${PKG_ARGS_UNPARSED_ARGUMENTS}
|
||||||
|
)
|
||||||
|
|
||||||
|
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_NAMES ${PKG_ARGS_NAME})
|
||||||
|
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_URLS ${pkg_git_url})
|
||||||
|
|
||||||
|
if (${PKG_ARGS_NAME}_ADDED)
|
||||||
|
if (DEFINED PKG_ARGS_SHA)
|
||||||
|
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_SHAS
|
||||||
|
${PKG_ARGS_SHA})
|
||||||
|
elseif (DEFINED PKG_ARGS_GIT_VERSION)
|
||||||
|
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_SHAS
|
||||||
|
${PKG_ARGS_GIT_VERSION})
|
||||||
|
elseif (DEFINED PKG_ARGS_TAG)
|
||||||
|
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_SHAS
|
||||||
|
${PKG_ARGS_TAG})
|
||||||
|
elseif(DEFINED PKG_ARGS_VERSION)
|
||||||
|
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_SHAS
|
||||||
|
${PKG_ARGS_VERSION})
|
||||||
|
else()
|
||||||
|
cpm_utils_message(WARNING ${PKG_ARGS_NAME}
|
||||||
|
"Package has no specified sha, tag, or version")
|
||||||
|
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_SHAS "unknown")
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
if (DEFINED CPM_PACKAGE_${PKG_ARGS_NAME}_VERSION AND NOT
|
||||||
|
"${CPM_PACKAGE_${PKG_ARGS_NAME}_VERSION}" STREQUAL "")
|
||||||
|
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_SHAS
|
||||||
|
"${CPM_PACKAGE_${PKG_ARGS_NAME}_VERSION} (system)")
|
||||||
|
else()
|
||||||
|
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_SHAS
|
||||||
|
"unknown (system)")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# pass stuff to parent scope
|
||||||
|
set(${PKG_ARGS_NAME}_ADDED "${${PKG_ARGS_NAME}_ADDED}"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
set(${PKG_ARGS_NAME}_SOURCE_DIR "${${PKG_ARGS_NAME}_SOURCE_DIR}"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
set(${PKG_ARGS_NAME}_BINARY_DIR "${${PKG_ARGS_NAME}_BINARY_DIR}"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(add_ci_package key)
|
||||||
|
set(ARTIFACT ${ARTIFACT_NAME}-${key}-${ARTIFACT_VERSION}.${ARTIFACT_EXT})
|
||||||
|
|
||||||
|
AddPackage(
|
||||||
|
NAME ${ARTIFACT_PACKAGE}
|
||||||
|
REPO ${ARTIFACT_REPO}
|
||||||
|
TAG v${ARTIFACT_VERSION}
|
||||||
|
GIT_VERSION ${ARTIFACT_VERSION}
|
||||||
|
ARTIFACT ${ARTIFACT}
|
||||||
|
|
||||||
|
KEY ${key}-${ARTIFACT_VERSION}
|
||||||
|
HASH_SUFFIX sha512sum
|
||||||
|
FORCE_BUNDLED_PACKAGE ON
|
||||||
|
)
|
||||||
|
|
||||||
|
set(ARTIFACT_DIR ${${ARTIFACT_PACKAGE}_SOURCE_DIR} PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
# TODO(crueter): we could do an AddMultiArchPackage, multiplatformpackage?
|
||||||
|
# name is the artifact name, package is for find_package override
|
||||||
|
function(AddCIPackage)
|
||||||
|
set(oneValueArgs
|
||||||
|
VERSION
|
||||||
|
NAME
|
||||||
|
REPO
|
||||||
|
PACKAGE
|
||||||
|
EXTENSION
|
||||||
|
MIN_VERSION
|
||||||
|
DISABLED_PLATFORMS
|
||||||
|
)
|
||||||
|
|
||||||
|
cmake_parse_arguments(PKG_ARGS "" "${oneValueArgs}" "" ${ARGN})
|
||||||
|
|
||||||
|
if(NOT DEFINED PKG_ARGS_VERSION)
|
||||||
|
message(FATAL_ERROR "[CPMUtil] VERSION is required")
|
||||||
|
endif()
|
||||||
|
if(NOT DEFINED PKG_ARGS_NAME)
|
||||||
|
message(FATAL_ERROR "[CPMUtil] NAME is required")
|
||||||
|
endif()
|
||||||
|
if(NOT DEFINED PKG_ARGS_REPO)
|
||||||
|
message(FATAL_ERROR "[CPMUtil] REPO is required")
|
||||||
|
endif()
|
||||||
|
if(NOT DEFINED PKG_ARGS_PACKAGE)
|
||||||
|
message(FATAL_ERROR "[CPMUtil] PACKAGE is required")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (NOT DEFINED PKG_ARGS_CMAKE_FILENAME)
|
||||||
|
set(ARTIFACT_CMAKE ${PKG_ARGS_NAME})
|
||||||
|
else()
|
||||||
|
set(ARTIFACT_CMAKE ${PKG_ARGS_CMAKE_FILENAME})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT DEFINED PKG_ARGS_EXTENSION)
|
||||||
|
set(ARTIFACT_EXT "tar.zst")
|
||||||
|
else()
|
||||||
|
set(ARTIFACT_EXT ${PKG_ARGS_EXTENSION})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (DEFINED PKG_ARGS_MIN_VERSION)
|
||||||
|
set(ARTIFACT_MIN_VERSION ${PKG_ARGS_MIN_VERSION})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (DEFINED PKG_ARGS_DISABLED_PLATFORMS)
|
||||||
|
set(DISABLED_PLATFORMS ${PKG_ARGS_DISABLED_PLATFORMS})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# this is mildly annoying
|
||||||
|
set(ARTIFACT_VERSION ${PKG_ARGS_VERSION})
|
||||||
|
set(ARTIFACT_NAME ${PKG_ARGS_NAME})
|
||||||
|
set(ARTIFACT_REPO ${PKG_ARGS_REPO})
|
||||||
|
set(ARTIFACT_PACKAGE ${PKG_ARGS_PACKAGE})
|
||||||
|
|
||||||
|
if ((MSVC AND ARCHITECTURE_x86_64) AND NOT "windows-amd64" IN_LIST DISABLED_PLATFORMS)
|
||||||
|
add_ci_package(windows-amd64)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if ((MSVC AND ARCHITECTURE_arm64) AND NOT "windows-arm64" IN_LIST DISABLED_PLATFORMS)
|
||||||
|
add_ci_package(windows-arm64)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (ANDROID AND NOT "android" IN_LIST DISABLED_PLATFORMS)
|
||||||
|
add_ci_package(android)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(PLATFORM_SUN AND NOT "solaris-amd64" IN_LIST DISABLED_PLATFORMS)
|
||||||
|
add_ci_package(solaris-amd64)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(PLATFORM_FREEBSD AND NOT "freebsd-amd64" IN_LIST DISABLED_PLATFORMS)
|
||||||
|
add_ci_package(freebsd-amd64)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if((PLATFORM_LINUX AND ARCHITECTURE_x86_64) AND NOT "linux-amd64" IN_LIST DISABLED_PLATFORMS)
|
||||||
|
add_ci_package(linux-amd64)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if((PLATFORM_LINUX AND ARCHITECTURE_arm64) AND NOT "linux-aarch64" IN_LIST DISABLED_PLATFORMS)
|
||||||
|
add_ci_package(linux-aarch64)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# TODO(crueter): macOS amd64/aarch64 split mayhaps
|
||||||
|
if (APPLE AND NOT "macos-universal" IN_LIST DISABLED_PLATFORMS)
|
||||||
|
add_ci_package(macos-universal)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (DEFINED ARTIFACT_DIR)
|
||||||
|
set(${ARTIFACT_PACKAGE}_ADDED TRUE PARENT_SCOPE)
|
||||||
|
set(${ARTIFACT_PACKAGE}_SOURCE_DIR "${ARTIFACT_DIR}" PARENT_SCOPE)
|
||||||
|
else()
|
||||||
|
find_package(${ARTIFACT_PACKAGE} ${ARTIFACT_MIN_VERSION} REQUIRED)
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
@@ -63,6 +63,4 @@ function(copy_yuzu_Qt6_deps target_dir)
|
|||||||
else()
|
else()
|
||||||
# Update for non-MSVC platforms if needed
|
# Update for non-MSVC platforms if needed
|
||||||
endif()
|
endif()
|
||||||
# Fixes dark mode being forced automatically even when light theme is set in app settings.
|
|
||||||
file(WRITE "${CMAKE_BINARY_DIR}/bin/${CMAKE_BUILD_TYPE}/qt.conf" "[Platforms]\nWindowsArguments = darkmode=0")
|
|
||||||
endfunction(copy_yuzu_Qt6_deps)
|
endfunction(copy_yuzu_Qt6_deps)
|
||||||
|
|||||||
@@ -6,54 +6,55 @@
|
|||||||
# remote_path: path to the file to download, relative to the remote repository root
|
# remote_path: path to the file to download, relative to the remote repository root
|
||||||
# prefix_var: name of a variable which will be set with the path to the extracted contents
|
# prefix_var: name of a variable which will be set with the path to the extracted contents
|
||||||
set(CURRENT_MODULE_DIR ${CMAKE_CURRENT_LIST_DIR})
|
set(CURRENT_MODULE_DIR ${CMAKE_CURRENT_LIST_DIR})
|
||||||
function(download_bundled_external remote_path lib_name prefix_var)
|
function(download_bundled_external remote_path lib_name cpm_key prefix_var version)
|
||||||
|
set(package_base_url "https://github.com/eden-emulator/")
|
||||||
|
set(package_repo "no_platform")
|
||||||
|
set(package_extension "no_platform")
|
||||||
|
set(CACHE_KEY "")
|
||||||
|
|
||||||
set(package_base_url "https://git.eden-emu.dev/eden-emu/")
|
# TODO(crueter): Need to convert ffmpeg to a CI.
|
||||||
set(package_repo "no_platform")
|
if (WIN32 OR FORCE_WIN_ARCHIVES)
|
||||||
set(package_extension "no_platform")
|
if (ARCHITECTURE_arm64)
|
||||||
if (WIN32)
|
set(CACHE_KEY "windows")
|
||||||
set(package_repo "ext-windows-bin/raw/master/")
|
set(package_repo "ext-windows-arm64-bin/raw/master/")
|
||||||
set(package_extension ".7z")
|
set(package_extension ".zip")
|
||||||
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
elseif(ARCHITECTURE_x86_64)
|
||||||
set(package_repo "ext-linux-bin/raw/master/")
|
set(CACHE_KEY "windows")
|
||||||
set(package_extension ".tar.xz")
|
set(package_repo "ext-windows-bin/raw/master/")
|
||||||
elseif (ANDROID)
|
set(package_extension ".7z")
|
||||||
set(package_repo "ext-android-bin/raw/master/")
|
|
||||||
set(package_extension ".tar.xz")
|
|
||||||
else()
|
|
||||||
message(FATAL_ERROR "No package available for this platform")
|
|
||||||
endif()
|
|
||||||
set(package_url "${package_base_url}${package_repo}")
|
|
||||||
|
|
||||||
set(prefix "${CMAKE_BINARY_DIR}/externals/${lib_name}")
|
|
||||||
if (NOT EXISTS "${prefix}")
|
|
||||||
message(STATUS "Downloading binaries for ${lib_name}...")
|
|
||||||
file(DOWNLOAD
|
|
||||||
${package_url}${remote_path}${lib_name}${package_extension}
|
|
||||||
"${CMAKE_BINARY_DIR}/externals/${lib_name}${package_extension}" SHOW_PROGRESS)
|
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf "${CMAKE_BINARY_DIR}/externals/${lib_name}${package_extension}"
|
|
||||||
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/externals")
|
|
||||||
endif()
|
|
||||||
message(STATUS "Using bundled binaries at ${prefix}")
|
|
||||||
set(${prefix_var} "${prefix}" PARENT_SCOPE)
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
function(download_moltenvk_external platform version)
|
|
||||||
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()
|
endif()
|
||||||
|
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf "${MOLTENVK_TAR}"
|
set(CACHE_KEY "linux")
|
||||||
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/externals")
|
set(package_repo "ext-linux-bin/raw/master/")
|
||||||
|
set(package_extension ".tar.xz")
|
||||||
|
elseif (ANDROID)
|
||||||
|
set(CACHE_KEY "android")
|
||||||
|
set(package_repo "ext-android-bin/raw/master/")
|
||||||
|
set(package_extension ".tar.xz")
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "No package available for this platform")
|
||||||
endif()
|
endif()
|
||||||
|
string(CONCAT package_url "${package_base_url}" "${package_repo}")
|
||||||
|
string(CONCAT full_url "${package_url}" "${remote_path}" "${lib_name}" "${package_extension}")
|
||||||
|
message(STATUS "Resolved bundled URL: ${full_url}")
|
||||||
|
|
||||||
# Add the MoltenVK library path to the prefix so find_library can locate it.
|
# TODO(crueter): DELETE THIS ENTIRELY, GLORY BE TO THE CI!
|
||||||
list(APPEND CMAKE_PREFIX_PATH "${MOLTENVK_DIR}/MoltenVK/dylib/${platform}")
|
AddPackage(
|
||||||
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE)
|
NAME ${cpm_key}
|
||||||
|
VERSION ${version}
|
||||||
|
URL ${full_url}
|
||||||
|
DOWNLOAD_ONLY YES
|
||||||
|
KEY ${CACHE_KEY}
|
||||||
|
BUNDLED_PACKAGE ON
|
||||||
|
# TODO(crueter): hash
|
||||||
|
)
|
||||||
|
|
||||||
|
if (DEFINED ${cpm_key}_SOURCE_DIR)
|
||||||
|
set(${prefix_var} "${${cpm_key}_SOURCE_DIR}" PARENT_SCOPE)
|
||||||
|
message(STATUS "Using bundled binaries at ${${cpm_key}_SOURCE_DIR}")
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "AddPackage did not set ${cpm_key}_SOURCE_DIR")
|
||||||
|
endif()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
# Determine installation parameters for OS, architecture, and compiler
|
# Determine installation parameters for OS, architecture, and compiler
|
||||||
@@ -94,8 +95,8 @@ function(determine_qt_parameters target host_out type_out arch_out arch_path_out
|
|||||||
else()
|
else()
|
||||||
set(host "linux")
|
set(host "linux")
|
||||||
set(type "desktop")
|
set(type "desktop")
|
||||||
set(arch "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)
|
||||||
@@ -130,42 +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 qt3d qt5compat qtactiveqt qtcharts qtconnectivity qtdatavis3d qtgraphs qtgrpc qthttpserver qtimageformats qtlanguageserver qtlocation qtlottie qtmultimedia qtnetworkauth qtpdf qtpositioning qtquick3d qtquick3dphysics qtquickeffectmaker qtquicktimeline qtremoteobjects qtscxml qtsensors qtserialbus qtserialport qtshadertools qtspeech qtvirtualkeyboard qtwebchannel qtwebengine qtwebsockets qtwebview)
|
list(APPEND install_args install-qt --outputdir "${base_path}" "${host}" "${type}" "${target}" "${arch}" -m qt_base)
|
||||||
|
|
||||||
|
if (YUZU_USE_QT_MULTIMEDIA)
|
||||||
|
list(APPEND install_args qtmultimedia)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (YUZU_USE_QT_WEB_ENGINE)
|
||||||
|
list(APPEND install_args qtpositioning qtwebchannel qtwebengine)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (NOT "${YUZU_QT_MIRROR}" STREQUAL "")
|
||||||
|
message(STATUS "Using Qt mirror ${YUZU_QT_MIRROR}")
|
||||||
|
list(APPEND install_args -b "${YUZU_QT_MIRROR}")
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
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.2.1")
|
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}")
|
||||||
@@ -183,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}")
|
||||||
@@ -200,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
|
|
||||||
)
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ if (LLVM_FOUND AND LLVM_Demangle_FOUND AND NOT TARGET LLVM::Demangle)
|
|||||||
target_include_directories(LLVM::Demangle INTERFACE ${LLVM_INCLUDE_DIRS})
|
target_include_directories(LLVM::Demangle INTERFACE ${LLVM_INCLUDE_DIRS})
|
||||||
# prefer shared LLVM: https://github.com/llvm/llvm-project/issues/34593
|
# prefer shared LLVM: https://github.com/llvm/llvm-project/issues/34593
|
||||||
# but use ugly hack because llvm_config doesn't support interface library
|
# but use ugly hack because llvm_config doesn't support interface library
|
||||||
add_library(_dummy_lib SHARED EXCLUDE_FROM_ALL src/yuzu/main.cpp)
|
add_library(_dummy_lib SHARED EXCLUDE_FROM_ALL ${CMAKE_SOURCE_DIR}/src/yuzu/main.cpp)
|
||||||
llvm_config(_dummy_lib USE_SHARED demangle)
|
llvm_config(_dummy_lib USE_SHARED demangle)
|
||||||
get_target_property(LLVM_LIBRARIES _dummy_lib LINK_LIBRARIES)
|
get_target_property(LLVM_LIBRARIES _dummy_lib LINK_LIBRARIES)
|
||||||
target_link_libraries(LLVM::Demangle INTERFACE ${LLVM_LIBRARIES})
|
target_link_libraries(LLVM::Demangle INTERFACE ${LLVM_LIBRARIES})
|
||||||
|
|||||||
19
CMakeModules/FindSPIRV-Tools.cmake
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# SPDX-FileCopyrightText: 2022 yuzu Emulator Project
|
||||||
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
|
||||||
|
find_package(PkgConfig QUIET)
|
||||||
|
pkg_search_module(SPIRV-Tools QUIET IMPORTED_TARGET SPIRV-Tools)
|
||||||
|
find_package_handle_standard_args(SPIRV-Tools
|
||||||
|
REQUIRED_VARS SPIRV-Tools_LINK_LIBRARIES
|
||||||
|
VERSION_VAR SPIRV-Tools_VERSION
|
||||||
|
)
|
||||||
|
|
||||||
|
if (SPIRV-Tools_FOUND AND NOT TARGET SPIRV-Tools::SPIRV-Tools)
|
||||||
|
if (TARGET SPIRV-Tools)
|
||||||
|
add_library(SPIRV-Tools::SPIRV-Tools ALIAS SPIRV-Tools)
|
||||||
|
else()
|
||||||
|
add_library(SPIRV-Tools::SPIRV-Tools ALIAS PkgConfig::SPIRV-Tools)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
@@ -1,26 +1,27 @@
|
|||||||
|
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
# SPDX-FileCopyrightText: 2022 yuzu Emulator Project
|
# SPDX-FileCopyrightText: 2022 yuzu Emulator Project
|
||||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
include(FindPackageHandleStandardArgs)
|
||||||
|
|
||||||
find_package(zstd QUIET CONFIG)
|
find_package(PkgConfig QUIET)
|
||||||
if (zstd_CONSIDERED_CONFIGS)
|
pkg_search_module(ZSTD QUIET IMPORTED_TARGET libzstd)
|
||||||
find_package_handle_standard_args(zstd CONFIG_MODE)
|
find_package_handle_standard_args(zstd
|
||||||
else()
|
REQUIRED_VARS ZSTD_LINK_LIBRARIES
|
||||||
find_package(PkgConfig QUIET)
|
VERSION_VAR ZSTD_VERSION
|
||||||
pkg_search_module(ZSTD QUIET IMPORTED_TARGET libzstd)
|
)
|
||||||
find_package_handle_standard_args(zstd
|
|
||||||
REQUIRED_VARS ZSTD_LINK_LIBRARIES
|
|
||||||
VERSION_VAR ZSTD_VERSION
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
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()
|
||||||
|
|||||||
21
CMakeModules/GenerateDepHashes.cmake
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
# SPDX-FileCopyrightText: 2025 Eden Emulator Project
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
get_property(NAMES GLOBAL PROPERTY CPM_PACKAGE_NAMES)
|
||||||
|
get_property(SHAS GLOBAL PROPERTY CPM_PACKAGE_SHAS)
|
||||||
|
get_property(URLS GLOBAL PROPERTY CPM_PACKAGE_URLS)
|
||||||
|
|
||||||
|
list(LENGTH NAMES DEPS_LENGTH)
|
||||||
|
|
||||||
|
list(JOIN NAMES "\",\n\t\"" DEP_NAME_DIRTY)
|
||||||
|
set(DEP_NAMES "\t\"${DEP_NAME_DIRTY}\"")
|
||||||
|
|
||||||
|
list(JOIN SHAS "\",\n\t\"" DEP_SHAS_DIRTY)
|
||||||
|
set(DEP_SHAS "\t\"${DEP_SHAS_DIRTY}\"")
|
||||||
|
|
||||||
|
list(JOIN URLS "\",\n\t\"" DEP_URLS_DIRTY)
|
||||||
|
set(DEP_URLS "\t\"${DEP_URLS_DIRTY}\"")
|
||||||
|
|
||||||
|
configure_file(dep_hashes.h.in dep_hashes.h @ONLY)
|
||||||
|
target_sources(common PUBLIC ${CMAKE_CURRENT_BINARY_DIR}/dep_hashes.h)
|
||||||
|
target_include_directories(common PUBLIC ${CMAKE_CURRENT_BINARY_DIR})
|
||||||
@@ -1,38 +1,41 @@
|
|||||||
|
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
# SPDX-FileCopyrightText: 2019 yuzu Emulator Project
|
# SPDX-FileCopyrightText: 2019 yuzu Emulator Project
|
||||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
# Gets a UTC timestamp and sets the provided variable to it
|
# generate git/build information
|
||||||
|
include(GetSCMRev)
|
||||||
|
|
||||||
function(get_timestamp _var)
|
function(get_timestamp _var)
|
||||||
string(TIMESTAMP timestamp UTC)
|
string(TIMESTAMP timestamp UTC)
|
||||||
set(${_var} "${timestamp}" PARENT_SCOPE)
|
set(${_var} "${timestamp}" PARENT_SCOPE)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
# generate git/build information
|
|
||||||
include(GetGitRevisionDescription)
|
|
||||||
if(NOT GIT_REF_SPEC)
|
|
||||||
get_git_head_revision(GIT_REF_SPEC GIT_REV)
|
|
||||||
endif()
|
|
||||||
if(NOT GIT_DESC)
|
|
||||||
git_describe(GIT_DESC --always --long --dirty)
|
|
||||||
endif()
|
|
||||||
if (NOT GIT_BRANCH)
|
|
||||||
git_branch_name(GIT_BRANCH)
|
|
||||||
endif()
|
|
||||||
get_timestamp(BUILD_DATE)
|
get_timestamp(BUILD_DATE)
|
||||||
|
|
||||||
git_get_exact_tag(GIT_TAG --tags)
|
if (DEFINED GIT_RELEASE)
|
||||||
if (GIT_TAG MATCHES "NOTFOUND")
|
set(BUILD_VERSION "${GIT_TAG}")
|
||||||
set(BUILD_VERSION "${GIT_DESC}")
|
set(GIT_REFSPEC "${GIT_RELEASE}")
|
||||||
set(IS_DEV_BUILD true)
|
|
||||||
else()
|
|
||||||
set(BUILD_VERSION ${GIT_TAG})
|
|
||||||
set(IS_DEV_BUILD false)
|
set(IS_DEV_BUILD false)
|
||||||
|
else()
|
||||||
|
string(SUBSTRING ${GIT_COMMIT} 0 10 BUILD_VERSION)
|
||||||
|
set(BUILD_VERSION "${BUILD_VERSION}-${GIT_REFSPEC}")
|
||||||
|
set(IS_DEV_BUILD true)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
set(GIT_DESC ${BUILD_VERSION})
|
||||||
|
|
||||||
# Generate cpp with Git revision from template
|
# Generate cpp with Git revision from template
|
||||||
# Also if this is a CI build, add the build name (ie: Nightly, Canary) to the scm_rev file as well
|
# Also if this is a CI build, add the build name (ie: Nightly, Canary) to the scm_rev file as well
|
||||||
set(REPO_NAME "eden")
|
set(REPO_NAME "Eden")
|
||||||
set(BUILD_ID ${GIT_BRANCH})
|
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}")
|
||||||
|
|
||||||
|
# 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)
|
||||||
|
|||||||
49
CMakeModules/GetSCMRev.cmake
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
# SPDX-FileCopyrightText: 2025 crueter
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
include(GetGitRevisionDescription)
|
||||||
|
|
||||||
|
function(trim var)
|
||||||
|
string(REGEX REPLACE "\n" "" new "${${var}}")
|
||||||
|
set(${var} ${new} PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
set(TAG_FILE ${CMAKE_SOURCE_DIR}/GIT-TAG)
|
||||||
|
set(REF_FILE ${CMAKE_SOURCE_DIR}/GIT-REFSPEC)
|
||||||
|
set(COMMIT_FILE ${CMAKE_SOURCE_DIR}/GIT-COMMIT)
|
||||||
|
set(RELEASE_FILE ${CMAKE_SOURCE_DIR}/GIT-RELEASE)
|
||||||
|
|
||||||
|
if (EXISTS ${REF_FILE} AND EXISTS ${COMMIT_FILE})
|
||||||
|
file(READ ${REF_FILE} GIT_REFSPEC)
|
||||||
|
file(READ ${COMMIT_FILE} GIT_COMMIT)
|
||||||
|
else()
|
||||||
|
get_git_head_revision(GIT_REFSPEC GIT_COMMIT)
|
||||||
|
git_branch_name(GIT_REFSPEC)
|
||||||
|
if (GIT_REFSPEC MATCHES "NOTFOUND")
|
||||||
|
set(GIT_REFSPEC 1.0.0)
|
||||||
|
set(GIT_COMMIT stable)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (EXISTS ${TAG_FILE})
|
||||||
|
file(READ ${TAG_FILE} GIT_TAG)
|
||||||
|
else()
|
||||||
|
git_describe(GIT_TAG --tags --abbrev=0)
|
||||||
|
if (GIT_TAG MATCHES "NOTFOUND")
|
||||||
|
set(GIT_TAG "${GIT_REFSPEC}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (EXISTS ${RELEASE_FILE})
|
||||||
|
file(READ ${RELEASE_FILE} GIT_RELEASE)
|
||||||
|
trim(GIT_RELEASE)
|
||||||
|
message(STATUS "Git release: ${GIT_RELEASE}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
trim(GIT_REFSPEC)
|
||||||
|
trim(GIT_COMMIT)
|
||||||
|
trim(GIT_TAG)
|
||||||
|
|
||||||
|
message(STATUS "Git commit: ${GIT_COMMIT}")
|
||||||
|
message(STATUS "Git tag: ${GIT_TAG}")
|
||||||
|
message(STATUS "Git refspec: ${GIT_REFSPEC}")
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
# SPDX-FileCopyrightText: 2022 yuzu Emulator Project
|
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
# buildcache wrapper
|
|
||||||
OPTION(USE_CCACHE "Use buildcache for compilation" OFF)
|
|
||||||
IF(USE_CCACHE)
|
|
||||||
FIND_PROGRAM(CCACHE buildcache)
|
|
||||||
IF (CCACHE)
|
|
||||||
MESSAGE(STATUS "Using buildcache found in PATH")
|
|
||||||
SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE})
|
|
||||||
SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_LINK ${CCACHE})
|
|
||||||
ELSE(CCACHE)
|
|
||||||
MESSAGE(WARNING "USE_CCACHE enabled, but no buildcache executable found")
|
|
||||||
ENDIF(CCACHE)
|
|
||||||
ENDIF(USE_CCACHE)
|
|
||||||
@@ -1,3 +1,6 @@
|
|||||||
|
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
# SPDX-FileCopyrightText: 2018 yuzu Emulator Project
|
# SPDX-FileCopyrightText: 2018 yuzu Emulator Project
|
||||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
@@ -12,16 +15,25 @@ set(__windows_copy_files YES)
|
|||||||
|
|
||||||
# Any number of files to copy from SOURCE_DIR to DEST_DIR can be specified after DEST_DIR.
|
# Any number of files to copy from SOURCE_DIR to DEST_DIR can be specified after DEST_DIR.
|
||||||
# This copying happens post-build.
|
# This copying happens post-build.
|
||||||
function(windows_copy_files TARGET SOURCE_DIR DEST_DIR)
|
if (CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
|
||||||
# windows commandline expects the / to be \ so switch them
|
function(windows_copy_files TARGET SOURCE_DIR DEST_DIR)
|
||||||
string(REPLACE "/" "\\\\" SOURCE_DIR ${SOURCE_DIR})
|
# windows commandline expects the / to be \ so switch them
|
||||||
string(REPLACE "/" "\\\\" DEST_DIR ${DEST_DIR})
|
string(REPLACE "/" "\\\\" SOURCE_DIR ${SOURCE_DIR})
|
||||||
|
string(REPLACE "/" "\\\\" DEST_DIR ${DEST_DIR})
|
||||||
|
|
||||||
# /NJH /NJS /NDL /NFL /NC /NS /NP - Silence any output
|
# /NJH /NJS /NDL /NFL /NC /NS /NP - Silence any output
|
||||||
# cmake adds an extra check for command success which doesn't work too well with robocopy
|
# cmake adds an extra check for command success which doesn't work too well with robocopy
|
||||||
# so trick it into thinking the command was successful with the || cmd /c "exit /b 0"
|
# so trick it into thinking the command was successful with the || cmd /c "exit /b 0"
|
||||||
add_custom_command(TARGET ${TARGET} POST_BUILD
|
add_custom_command(TARGET ${TARGET} POST_BUILD
|
||||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${DEST_DIR}
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${DEST_DIR}
|
||||||
COMMAND robocopy ${SOURCE_DIR} ${DEST_DIR} ${ARGN} /NJH /NJS /NDL /NFL /NC /NS /NP || cmd /c "exit /b 0"
|
COMMAND robocopy ${SOURCE_DIR} ${DEST_DIR} ${ARGN} /NJH /NJS /NDL /NFL /NC /NS /NP || cmd /c "exit /b 0"
|
||||||
)
|
)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
else()
|
||||||
|
function(windows_copy_files TARGET SOURCE_DIR DEST_DIR)
|
||||||
|
add_custom_command(TARGET ${TARGET} POST_BUILD
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${DEST_DIR}
|
||||||
|
COMMAND cp -ra ${SOURCE_DIR}/. ${DEST_DIR}
|
||||||
|
)
|
||||||
|
endfunction()
|
||||||
|
endif()
|
||||||
|
|||||||
43
README.md
@@ -1,30 +1,34 @@
|
|||||||
<!--
|
<!--
|
||||||
|
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
# SPDX-FileCopyrightText: 2018 yuzu Emulator Project
|
# SPDX-FileCopyrightText: 2018 yuzu Emulator Project
|
||||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
# SPDX-FileCopyrightText: 2025 EDEN Emulator Project
|
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
-->
|
-->
|
||||||
<!-- lang: en-GB -->
|
<!-- lang: en-GB -->
|
||||||
|
|
||||||
<h1 align="center">
|
<h1 align="center">
|
||||||
<br>
|
<br>
|
||||||
<a href="https://git.eden-emu.dev/eden-emu/eden"><img src="https://git.eden-emu.dev/eden-emu/eden/raw/branch/master/dist/qt_themes/default/icons/256x256/eden_named.png" alt="Eden" width="200"></a>
|
<a href="https://git.eden-emu.dev/eden-emu/eden"><img src="./dist/qt_themes/default/icons/256x256/eden_named.png" alt="Eden" width="200"></a>
|
||||||
<br>
|
<br>
|
||||||
<b>Eden</b>
|
<b>Eden</b>
|
||||||
<br>
|
<br>
|
||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
<h4 align="center"><b>Eden</b> is the world's most popular open-source Nintendo Switch emulator, forked from the Yuzu emulator — started by former Citron developer Camille LaVey and the Eden team.
|
<h4 align="center"><b>Eden</b> is an open-source Nintendo Switch emulator, forked from the Yuzu emulator — started by former Citron developer Camille LaVey and the Eden team.
|
||||||
<br>
|
|
||||||
It is written in C++ with portability in mind, and we actively maintain builds for Windows, Linux and Android.
|
It is written in C++ with portability in mind, and we actively maintain builds for Windows, Linux and Android.
|
||||||
</h4>
|
</h4>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
</a>
|
</a>
|
||||||
<a href="https://discord.gg/kXAmGCXBGD">
|
<a href="https://discord.gg/kXAmGCXBGD">
|
||||||
<img src="https://img.shields.io/discord/1317386222229917696?color=5865F2&label=Eden&logo=discord&logoColor=white"
|
<img src="https://img.shields.io/discord/1367654015269339267?color=5865F2&label=Eden&logo=discord&logoColor=white"
|
||||||
alt="Discord">
|
alt="Discord">
|
||||||
</a>
|
</a>
|
||||||
|
<a href="https://rvlt.gg/qKgFEAbH">
|
||||||
|
<img src="https://img.shields.io/revolt/invite/qKgFEAbH?color=d61f3a&label=Revolt"
|
||||||
|
alt="Revolt">
|
||||||
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
@@ -42,29 +46,34 @@ The emulator is capable of running most commercial games at full speed, provided
|
|||||||
|
|
||||||
A list of supported games will be available in future. Please be patient.
|
A list of supported games will be available in future. Please be patient.
|
||||||
|
|
||||||
Check out our [website](https://eden-emulator.github.io) 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/ynGGJAN4Rx).
|
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).
|
||||||
|
You can also follow us on [X (Twitter)](https://x.com/edenemuofficial) for updates and announcements.
|
||||||
|
|
||||||
If you would like to contribute, we are open to new developers and pull requests. Please ensure that your work is of a high standard and properly documented.
|
If you would like to contribute, we are open to new developers and pull requests. Please ensure that your work is of a high standard and properly documented. You can also contact any of the developers on Discord or Revolt to learn more about the current state of the emulator.
|
||||||
You can also contact any of the developers on Discord to learn more about the current state of the emulator.
|
|
||||||
|
See the [sign-up instructions](docs/SIGNUP.md) for information on registration.
|
||||||
|
|
||||||
|
Alternatively, if you wish to add translations, go to the [Eden project on Transifex](https://app.transifex.com/edenemu/eden-emulator) and review [the translations README](./dist/languages).
|
||||||
|
|
||||||
## Building
|
## Building
|
||||||
|
|
||||||
* **Windows**: [Windows Building Guide](https://git.eden-emu.dev/eden-emu/eden/wiki/Building-for-Windows.-)
|
See the [General Build Guide](docs/Build.md)
|
||||||
* **Linux**: [Linux Building Guide](https://git.eden-emu.dev/eden-emu/eden/wiki/Building-for-Linux.-)
|
|
||||||
* **Android**: [Android Building Guide](https://git.eden-emu.dev/eden-emu/eden/wiki/Building-for-Android.-)
|
For information on provided development tooling, see the [Tools directory](./tools)
|
||||||
|
|
||||||
## Download
|
## Download
|
||||||
|
|
||||||
You will be able to download the latest releases from [here](https://git.eden-emu.dev/eden-emu/eden/releases), or with MEGA and Archive links provided on Discord.
|
You can download the latest releases from [here](https://github.com/eden-emulator/Releases/releases).
|
||||||
|
|
||||||
## Support
|
## Support
|
||||||
|
|
||||||
If you enjoy the project and would like to support us financially, please check out our developers' donation pages!
|
If you enjoy the project and would like to support us financially, please check out our developers' [donation pages](https://eden-emu.dev/donations)!
|
||||||
- [crueter/Camille](https://liberapay.com/crueter)
|
|
||||||
|
|
||||||
Any donations received will go towards things such as:
|
Any donations received will go towards things such as:
|
||||||
* Switch consoles to explore and reverse-engineer the hardware
|
* Switch consoles to explore and reverse-engineer the hardware
|
||||||
@@ -73,7 +82,7 @@ Any donations received will go towards things such as:
|
|||||||
* Additional hardware (e.g. GPUs as needed to improve rendering support, other peripherals to add support for, etc.)
|
* Additional hardware (e.g. GPUs as needed to improve rendering support, other peripherals to add support for, etc.)
|
||||||
* CI Infrastructure
|
* CI Infrastructure
|
||||||
|
|
||||||
If you would prefer to support us in a different way, please join our [Discord](https://discord.gg/ynGGJAN4Rx), once public, and talk to Camille or any of our other developers.
|
If you would prefer to support us in a different way, please join our [Discord](https://discord.gg/edenemu) and talk to Camille or any of our other developers.
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|||||||
98
cpmfile.json
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
{
|
||||||
|
"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.tar.xz",
|
||||||
|
"hash": "4fb7f6fde92762305aad8754d7643cd918dd1f3f67e104e9ab385b18c73178d72a17321354eb203b790b6702f2cf6d725a5d6e2dfbc63b1e35f9eb59fb42ece9",
|
||||||
|
"git_version": "1.89.0",
|
||||||
|
"version": "1.57",
|
||||||
|
"find_args": "CONFIG",
|
||||||
|
"patches": [
|
||||||
|
"0001-clang-cl.patch",
|
||||||
|
"0002-use-marmasm.patch",
|
||||||
|
"0003-armasm-options.patch"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"fmt": {
|
||||||
|
"repo": "fmtlib/fmt",
|
||||||
|
"tag": "%VERSION%",
|
||||||
|
"hash": "c4ab814c20fbad7e3f0ae169125a4988a2795631194703251481dc36b18da65c886c4faa9acd046b0a295005217b3689eb0126108a9ba5aac2ca909aae263c2f",
|
||||||
|
"version": "8",
|
||||||
|
"git_version": "12.0.0"
|
||||||
|
},
|
||||||
|
"lz4": {
|
||||||
|
"name": "lz4",
|
||||||
|
"repo": "lz4/lz4",
|
||||||
|
"sha": "ebb370ca83",
|
||||||
|
"hash": "35c21a5d9cfb5bbf314a5321d02b36819491d2ee3cf8007030ca09d13ca4dae672247b7aeab553e973093604fc48221cb03dc92197c6efe8fc3746891363fdab",
|
||||||
|
"source_subdir": "build/cmake"
|
||||||
|
},
|
||||||
|
"nlohmann": {
|
||||||
|
"package": "nlohmann_json",
|
||||||
|
"repo": "nlohmann/json",
|
||||||
|
"tag": "v%VERSION%",
|
||||||
|
"hash": "6cc1e86261f8fac21cc17a33da3b6b3c3cd5c116755651642af3c9e99bb3538fd42c1bd50397a77c8fb6821bc62d90e6b91bcdde77a78f58f2416c62fc53b97d",
|
||||||
|
"version": "3.8",
|
||||||
|
"git_version": "3.12.0"
|
||||||
|
},
|
||||||
|
"zlib": {
|
||||||
|
"package": "ZLIB",
|
||||||
|
"repo": "madler/zlib",
|
||||||
|
"tag": "v%VERSION%",
|
||||||
|
"hash": "8c9642495bafd6fad4ab9fb67f09b268c69ff9af0f4f20cf15dfc18852ff1f312bd8ca41de761b3f8d8e90e77d79f2ccacd3d4c5b19e475ecf09d021fdfe9088",
|
||||||
|
"version": "1.2",
|
||||||
|
"git_version": "1.3.1",
|
||||||
|
"options": [
|
||||||
|
"ZLIB_BUILD_SHARED OFF",
|
||||||
|
"ZLIB_INSTALL OFF"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"zstd": {
|
||||||
|
"repo": "facebook/zstd",
|
||||||
|
"sha": "b8d6101fba",
|
||||||
|
"hash": "cc5ad4b119a9c2ea57f0b71eeff01113bb506e0d17000159c5409cb8236d22e38c52d5e9e97e7947a4bf1b2dfc44b6c503ab2d9aedbd59458435c6a2849cb029",
|
||||||
|
"version": "1.5",
|
||||||
|
"source_subdir": "build/cmake",
|
||||||
|
"find_args": "MODULE",
|
||||||
|
"options": [
|
||||||
|
"ZSTD_BUILD_SHARED OFF"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"opus": {
|
||||||
|
"package": "Opus",
|
||||||
|
"repo": "crueter/opus",
|
||||||
|
"sha": "ab19c44fad",
|
||||||
|
"hash": "d632e8f83c5d3245db404bcb637113f9860bf16331498ba2c8e77979d1febee6b52d8b1da448e7d54eeac373e912cd55e3e300fc6c242244923323280dc43fbe",
|
||||||
|
"version": "1.3",
|
||||||
|
"find_args": "MODULE",
|
||||||
|
"options": [
|
||||||
|
"OPUS_PRESUME_NEON ON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"boost_headers": {
|
||||||
|
"repo": "boostorg/headers",
|
||||||
|
"sha": "95930ca8f5",
|
||||||
|
"hash": "8a07d7a6f0065587d3005a83481a794704ae22e773b9f336fbd89ed230aaa7b4c86c03edcbae30bba8b3e20839c3131eaa2dceac037ef811533ef4eadc53b15b",
|
||||||
|
"bundled": true
|
||||||
|
},
|
||||||
|
"llvm-mingw": {
|
||||||
|
"repo": "misc/llvm-mingw",
|
||||||
|
"git_host": "git.crueter.xyz",
|
||||||
|
"tag": "%VERSION%",
|
||||||
|
"version": "20250828",
|
||||||
|
"artifact": "clang-rt-builtins.tar.zst",
|
||||||
|
"hash": "d902392caf94e84f223766e2cc51ca5fab6cae36ab8dc6ef9ef6a683ab1c483bfcfe291ef0bd38ab16a4ecc4078344fa8af72da2f225ab4c378dee23f6186181"
|
||||||
|
}
|
||||||
|
}
|
||||||
354
dist/compatibility_list/compatibility_list.json
vendored
Normal file
@@ -0,0 +1,354 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"compatibility": 0,
|
||||||
|
"directory": "the-legend-of-zelda-breath-of-the-wild",
|
||||||
|
"releases": [
|
||||||
|
{"id": "01007EF00011E000"}
|
||||||
|
],
|
||||||
|
"title": "The Legend of Zelda: Breath of the Wild"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 1,
|
||||||
|
"directory": "super-mario-odyssey",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100000000010000"}
|
||||||
|
],
|
||||||
|
"title": "Super Mario Odyssey"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 0,
|
||||||
|
"directory": "animal-crossing-new-horizons",
|
||||||
|
"releases": [
|
||||||
|
{"id": "01006F8002326000"}
|
||||||
|
],
|
||||||
|
"title": "Animal Crossing: New Horizons"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 1,
|
||||||
|
"directory": "pokemon-legends-z-a",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100F43008C44000"}
|
||||||
|
],
|
||||||
|
"title": "Pokémon Legends: Z-A"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 1,
|
||||||
|
"directory": "the-legend-of-zelda-tears-of-the-kingdom",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100F2C0115B6000"}
|
||||||
|
],
|
||||||
|
"title": "The Legend of Zelda: Tears of the Kingdom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 0,
|
||||||
|
"directory": "super-mario-galaxy",
|
||||||
|
"releases": [
|
||||||
|
{"id": "010099C022B96000"}
|
||||||
|
],
|
||||||
|
"title": "Super Mario Galaxy"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 3,
|
||||||
|
"directory": "star-wars-republic-commando",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100FA10115F8000"}
|
||||||
|
],
|
||||||
|
"title": "Star Wars: Republic Commando"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 0,
|
||||||
|
"directory": "doki-doki-literature-club-plus",
|
||||||
|
"releases": [
|
||||||
|
{"id": "010086901543E000"}
|
||||||
|
],
|
||||||
|
"title": "Doki Doki Literature Club Plus"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 1,
|
||||||
|
"directory": "pokemon-scarlet",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100A3D008C5C000"}
|
||||||
|
],
|
||||||
|
"title": "Pokémon Scarlet"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 1,
|
||||||
|
"directory": "pokemon-violet",
|
||||||
|
"releases": [
|
||||||
|
{"id": "01008F6008C5E000"}
|
||||||
|
],
|
||||||
|
"title": "Pokémon Violet"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 2,
|
||||||
|
"directory": "pokemon-legends-arceus",
|
||||||
|
"releases": [
|
||||||
|
{"id": "01001E300D162000"}
|
||||||
|
],
|
||||||
|
"title": "Pokémon Legends: Arceus"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 0,
|
||||||
|
"directory": "splatoon-2",
|
||||||
|
"releases": [
|
||||||
|
{"id": "01003BC0000A0000"}
|
||||||
|
],
|
||||||
|
"title": "Splatoon 2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 1,
|
||||||
|
"directory": "super-smash-bros-ultimate",
|
||||||
|
"releases": [
|
||||||
|
{"id": "01006A800016E000"}
|
||||||
|
],
|
||||||
|
"title": "Super Smash Bros. Ultimate"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 0,
|
||||||
|
"directory": "mario-kart-8-deluxe",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100152000022000"}
|
||||||
|
],
|
||||||
|
"title": "Mario Kart 8 Deluxe"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 0,
|
||||||
|
"directory": "splatoon-3",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100C2500FC20000"}
|
||||||
|
],
|
||||||
|
"title": "Splatoon 3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 0,
|
||||||
|
"directory": "new-super-mario-bros-u-deluxe",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100EA80032EA000"}
|
||||||
|
],
|
||||||
|
"title": "New Super Mario Bros. U Deluxe"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 0,
|
||||||
|
"directory": "hyrule-warriors-age-of-calamity",
|
||||||
|
"releases": [
|
||||||
|
{"id": "01002B00111A2000"}
|
||||||
|
],
|
||||||
|
"title": "Hyrule Warriors: Age of Calamity"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 2,
|
||||||
|
"directory": "luigis-mansion-3",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100DCA0064A6000"}
|
||||||
|
],
|
||||||
|
"title": "Luigi's Mansion 3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 2,
|
||||||
|
"directory": "pokemon-brilliant-diamond",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100000011D90000"}
|
||||||
|
],
|
||||||
|
"title": "Pokémon Brilliant Diamond"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 2,
|
||||||
|
"directory": "pokemon-shining-pearl",
|
||||||
|
"releases": [
|
||||||
|
{"id": "010018E011D92000"}
|
||||||
|
],
|
||||||
|
"title": "Pokémon Shining Pearl"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 1,
|
||||||
|
"directory": "super-mario-3d-world-bowsers-fury",
|
||||||
|
"releases": [
|
||||||
|
{"id": "010028600EBDA000"}
|
||||||
|
],
|
||||||
|
"title": "Super Mario 3D World + Bowser's Fury"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 0,
|
||||||
|
"directory": "the-legend-of-zelda-links-awakening",
|
||||||
|
"releases": [
|
||||||
|
{"id": "01006BB00C6F0000"}
|
||||||
|
],
|
||||||
|
"title": "The Legend of Zelda: Link's Awakening"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 1,
|
||||||
|
"directory": "fire-emblem-three-houses",
|
||||||
|
"releases": [
|
||||||
|
{"id": "010055D009F78000"}
|
||||||
|
],
|
||||||
|
"title": "Fire Emblem: Three Houses"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 2,
|
||||||
|
"directory": "metroid-dread",
|
||||||
|
"releases": [
|
||||||
|
{"id": "010093801237C000"}
|
||||||
|
],
|
||||||
|
"title": "Metroid Dread"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 0,
|
||||||
|
"directory": "paper-mario-the-origami-king",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100A3900C3E2000"}
|
||||||
|
],
|
||||||
|
"title": "Paper Mario: The Origami King"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 1,
|
||||||
|
"directory": "xenoblade-chronicles-definitive-edition",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100FF500E34A000"}
|
||||||
|
],
|
||||||
|
"title": "Xenoblade Chronicles: Definitive Edition"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 2,
|
||||||
|
"directory": "xenoblade-chronicles-3",
|
||||||
|
"releases": [
|
||||||
|
{"id": "010074F013262000"}
|
||||||
|
],
|
||||||
|
"title": "Xenoblade Chronicles 3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 1,
|
||||||
|
"directory": "pikmin-3-deluxe",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100F8600D4B0000"}
|
||||||
|
],
|
||||||
|
"title": "Pikmin 3 Deluxe"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 0,
|
||||||
|
"directory": "donkey-kong-country-tropical-freeze",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100C1F0054B6000"}
|
||||||
|
],
|
||||||
|
"title": "Donkey Kong Country: Tropical Freeze"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 1,
|
||||||
|
"directory": "kirby-and-the-forgotten-land",
|
||||||
|
"releases": [
|
||||||
|
{"id": "01004D300C5AE000"}
|
||||||
|
],
|
||||||
|
"title": "Kirby and the Forgotten Land"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 2,
|
||||||
|
"directory": "mario-party-superstars",
|
||||||
|
"releases": [
|
||||||
|
{"id": "01006B400D8B2000"}
|
||||||
|
],
|
||||||
|
"title": "Mario Party Superstars"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 0,
|
||||||
|
"directory": "clubhouse-games-51-worldwide-classics",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100F8600D4B0000"}
|
||||||
|
],
|
||||||
|
"title": "Clubhouse Games: 51 Worldwide Classics"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 1,
|
||||||
|
"directory": "ring-fit-adventure",
|
||||||
|
"releases": [
|
||||||
|
{"id": "01006B300BAF8000"}
|
||||||
|
],
|
||||||
|
"title": "Ring Fit Adventure"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 2,
|
||||||
|
"directory": "arms",
|
||||||
|
"releases": [
|
||||||
|
{"id": "01009B500007C000"}
|
||||||
|
],
|
||||||
|
"title": "ARMS"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 0,
|
||||||
|
"directory": "super-mario-maker-2",
|
||||||
|
"releases": [
|
||||||
|
{"id": "01009B90006DC000"}
|
||||||
|
],
|
||||||
|
"title": "Super Mario Maker 2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 0,
|
||||||
|
"directory": "pokemon-lets-go-pikachu",
|
||||||
|
"releases": [
|
||||||
|
{"id": "010003F003A34000"}
|
||||||
|
],
|
||||||
|
"title": "Pokémon: Let's Go, Pikachu!"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 1,
|
||||||
|
"directory": "pokemon-lets-go-eevee",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100187003A36000"}
|
||||||
|
],
|
||||||
|
"title": "Pokémon: Let's Go, Eevee!"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 2,
|
||||||
|
"directory": "pokemon-sword",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100ABF008968000"}
|
||||||
|
],
|
||||||
|
"title": "Pokémon Sword"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 2,
|
||||||
|
"directory": "pokemon-shield",
|
||||||
|
"releases": [
|
||||||
|
{"id": "01008DB008C2C000"}
|
||||||
|
],
|
||||||
|
"title": "Pokémon Shield"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 1,
|
||||||
|
"directory": "new-pokemon-snap",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100F4300C182000"}
|
||||||
|
],
|
||||||
|
"title": "New Pokémon Snap"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 0,
|
||||||
|
"directory": "mario-golf-super-rush",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100C9C00E25C000"}
|
||||||
|
],
|
||||||
|
"title": "Mario Golf: Super Rush"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 1,
|
||||||
|
"directory": "mario-tennis-aces",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100BDE00862A000"}
|
||||||
|
],
|
||||||
|
"title": "Mario Tennis Aces"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 2,
|
||||||
|
"directory": "wario-ware-get-it-together",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100563010F22000"}
|
||||||
|
],
|
||||||
|
"title": "WarioWare: Get It Together!"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 0,
|
||||||
|
"directory": "big-brain-academy-brain-vs-brain",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100190010F24000"}
|
||||||
|
],
|
||||||
|
"title": "Big Brain Academy: Brain vs. Brain"
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -1,8 +1,3 @@
|
|||||||
<!--
|
|
||||||
SPDX-FileCopyrightText: 2018 yuzu Emulator Project
|
|
||||||
SPDX-License-Identifier: GPL-2.0-or-later
|
|
||||||
-->
|
|
||||||
|
|
||||||
<RCC>
|
<RCC>
|
||||||
<qresource prefix="compatibility_list">
|
<qresource prefix="compatibility_list">
|
||||||
<file>compatibility_list.json</file>
|
<file>compatibility_list.json</file>
|
||||||
|
|||||||
19
dist/dev.eden_emu.eden.desktop
vendored
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# SPDX-FileCopyrightText: 2025 Eden Emulator Project
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
# SPDX-FileCopyrightText: 2018 yuzu Emulator Project
|
||||||
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
[Desktop Entry]
|
||||||
|
Version=1.0
|
||||||
|
Type=Application
|
||||||
|
Name=Eden
|
||||||
|
GenericName=Switch Emulator
|
||||||
|
Comment=Nintendo Switch video game console emulator
|
||||||
|
Icon=dev.eden_emu.eden
|
||||||
|
TryExec=eden
|
||||||
|
Exec=eden %f
|
||||||
|
Categories=Game;Emulator;Qt;
|
||||||
|
MimeType=application/x-nx-nro;application/x-nx-nso;application/x-nx-nsp;application/x-nx-xci;
|
||||||
|
Keywords=Nintendo;Switch;
|
||||||
|
StartupWMClass=eden
|
||||||
106
dist/dev.eden_emu.eden.svg
vendored
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
width="512"
|
||||||
|
height="512"
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 512 512"
|
||||||
|
version="1.1"
|
||||||
|
id="svg7"
|
||||||
|
sodipodi:docname="dev.eden_emu.eden.svg"
|
||||||
|
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<defs
|
||||||
|
id="defs7" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview7"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#000000"
|
||||||
|
borderopacity="0.25"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:zoom="1.25"
|
||||||
|
inkscape:cx="186.8"
|
||||||
|
inkscape:cy="210.4"
|
||||||
|
inkscape:window-width="1600"
|
||||||
|
inkscape:window-height="849"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg7" />
|
||||||
|
<path
|
||||||
|
fill="#bf42f6"
|
||||||
|
d="M346.71 255.306c.788.006 1.577.013 3.124.059 4.006.027 7.253.015 10.501.003 33.391.022 66.783.028 100.175.078 8.174.013 16.349.279 24.522.209 3.084-.026 4.596.75 4.356 4.156-.293 4.157-.31 8.343-.259 12.513.049 3.964-1.248 5.539-5.679 5.524-48.85-.158-97.701-.071-146.552-.056-22.107.007-44.214 0-66.321 0h-5.43v7.117h223.011c-1.553 8.254-2.894 15.76-4.475 23.215-.17.802-1.666 1.617-2.685 1.87-1.312.327-2.763.099-4.155.099H265.099v6.701h216.666c-1.609 5.425-2.887 10.074-4.367 14.658-2.758 8.54-2.807 8.524-11.564 8.524-64.929 0-129.859.014-194.788-.04-3.401-.003-6.19.251-4.758 4.652.349 1.075 1.875 2.026 3.071 2.491 1.075.418 2.439.092 3.676.092l191.542.001h7.17c-3.533 7.29-6.399 13.72-9.834 19.83-.651 1.157-3.562 1.448-5.432 1.454-27.981.088-55.963.061-83.944.061-31.692 0-63.384.005-95.075-.008-2.61-.002-5.219-.124-8.53-.021-3.11.173-5.518.177-7.926.181-.849-7.032-2.289-14.051-2.44-21.098-.547-25.616-.773-51.242-.844-76.864-.014-4.88 1.228-9.763 2.52-14.927 2.88-.296 5.132-.31 7.81-.259 22.492.021 44.557-.024 67.034-.066 4.149-.049 7.886-.099 11.624-.149"
|
||||||
|
id="path1"
|
||||||
|
style="fill:#fea265;fill-opacity:1" />
|
||||||
|
<path
|
||||||
|
fill="#ff44c4"
|
||||||
|
d="M168.124 257.114v-9.301c-2.407 0-4.67-.001-6.933.001-44.522.025-89.044.01-133.566.146-3.858.012-5.358-1.03-4.744-5 .683-4.418 1.254-8.885 1.393-13.346.106-3.386 1.603-4.005 4.608-4.012 45.9-.11 91.801-.344 137.702-.452 3.865-.009 6.842-.344 6.032-5.831H25.546c1.39-6.599 2.354-12.681 4.138-18.513.413-1.35 3.628-2.615 5.555-2.618 47.458-.084 94.917-.01 142.375.109 3.275.008 5.855-.38 6.138-5.045H31.147c3.43-9.311 6.348-17.71 9.74-25.913.483-1.166 3.265-1.942 4.987-1.95 24.582-.124 49.165-.21 73.745.014 5.283.048 8.073-2.583 11.128-7.248h-86.45c4.35-7.835 8.002-14.753 12.077-21.412.67-1.096 3.197-1.473 4.868-1.478 30.611-.083 61.226-.291 91.832.113 7.185.094 12.719-2.619 18.321-6.774H61.385c2.592-3.805 4.355-6.546 6.268-9.178 8.88-12.216 8.896-12.209 24.069-12.21q60.991-.002 121.982-.001h5.885c-3.968-4.128-7.007-6.966-12.321-6.944-38.959.165-77.92.09-116.88.09H85.03l-.741-1.31c3.832-3.852 7.564-7.81 11.514-11.537 11.456-10.807 11.495-10.996 27.246-10.717 23.209.411 45.103 6.8 66.234 15.885 5.657 2.432 10.56 3.715 16.604.944 4.726-2.166 10.217-2.664 16.034-3.521-4.411 8.139.887 12.041 5.52 16.414 5.73 5.408 11.223 11.07 16.751 16.688 1.165 1.185 2.035 2.659 3.685 4.857-2.256.128-3.665.274-5.075.275-9.739.008-19.489.286-29.214-.085-28.045-1.07-51.592 9.244-71.602 28.209-7.152 6.778-13.525 14.379-20.212 21.643-.683.742-1.079 1.748-2.209 3.632 33.94-11.926 65.876-27.377 101.589-28.637l.859 1.395c-4.228 4.943-8.188 10.148-12.73 14.783-18.091 18.461-28.905 40.673-33.892 65.773-1.402 7.057-1.306 14.412-2.504 21.941-1.992.248-3.377.184-4.762.121m19.995-91.726c3.865.004 7.763-.315 11.585.09 5.562.589 8.92-2.178 12.525-7.52-9.134 2.152-17.144 4.039-25.139 5.988-.008.002.209.928 1.029 1.442"
|
||||||
|
id="path2"
|
||||||
|
style="fill:#ff7f2a;fill-opacity:1" />
|
||||||
|
<path
|
||||||
|
fill="#bf43f5"
|
||||||
|
d="M167.719 257.136c1.79.041 3.175.105 4.979.185.569 3.091.719 6.166.87 9.24l1.623.577c2.3-3.392 4.599-6.785 7.467-10.458 2.456-.382 4.343-.483 6.573-.598 1.405-.133 2.466-.342 3.53-.356 12.08-.162 24.16-.295 36.693-.368 3.463.111 6.473.155 9.484.2-1.12 6.677-2.306 13.345-3.347 20.035-4.715 30.285-5.404 60.697-3.186 91.651-2.469.746-4.517 1.048-6.565 1.35-56.117-.025-112.236-.135-168.353.061-5.334.018-8.298-1.559-10.185-6.415-1.874-4.824-4.295-9.436-6.907-15.069h17.147c53.955 0 107.909.013 161.863-.044 2.026-.002 4.864 1.218 5.327-2.599.469-3.862-1.271-4.625-4.781-4.616-38.803.103-77.607.061-116.411.068-20.405.003-40.811-.065-61.215.125-3.545.033-5.36-1.044-6.324-4.419-1.642-5.75-3.577-11.416-5.879-18.659 65.363-.259 129.677-.027 194.424-.144l.372-6.533c-1.901-.099-3.398-.244-4.896-.245-58.283-.032-116.565-.056-174.848-.06-4.48 0-8.964.279-13.439.163-1.138-.029-3.078-.897-3.247-1.681-1.676-7.766-3.056-15.595-4.624-23.961 8.433 0 15.808-.031 23.182.02 1.998.014 3.995.4 5.992.401 55.964.023 111.928.02 167.892.017 6.075 0 6.307-.256 6.266-7.198H23.431c-.284-6.643-.72-12.739-.592-18.823.016-.786 2.94-2.144 4.53-2.165 15.149-.197 30.3-.177 45.45-.191 17.623-.016 35.248-.072 52.871.018 13.876.07 27.75.335 42.029.491"
|
||||||
|
id="path3"
|
||||||
|
style="fill:#fea265;fill-opacity:1" />
|
||||||
|
<path
|
||||||
|
fill="#985ded"
|
||||||
|
d="M225.868 369.021c2.02-.729 4.068-1.031 6.551-1.351 2.672 17.851 4.169 35.853 7.334 53.556 4.047 22.64 9.785 44.94 18.63 66.298.29.699.498 1.433.742 2.142-25.39 10.452-124.622-22.609-146.929-49.453h122.669c.302-4.81-.85-6.915-5.85-6.891-39.883.193-79.768.055-119.652.182-4.441.014-8.036-.845-11.208-4.17-6.87-7.203-13.99-14.166-21.008-21.228l.69-1.319H229.63l-1.24-7.289h-5.726c-42.821 0-85.642.011-128.464-.013-6.18-.003-12.371-.428-18.537-.173-3.704.154-6.14-1.066-8.104-4.073-4.111-6.292-8.367-12.489-13.256-19.755h171.593c0-2.433 0-4.234-.027-6.463m35.103.062c2.442-.418 4.85-.422 7.641-.431.482 1.987.581 3.979.706 6.499H457.62c-3.126 4.951-5.544 8.946-8.123 12.835-7.64 11.521-7.665 11.508-21.226 11.509l-147.5.003h-5.407c-.602 6.688-.15 7.214 5.824 7.214q73.75.004 147.5.004h6.891c-4.048 4.533-7.454 7.812-10.233 11.556-9.047 12.19-20.575 16.124-35.967 15.542-33.039-1.25-66.159-.384-99.246-.384h-5.45c-.275 5.77.583 6.774 5.594 6.776 34.478.012 68.957.006 103.435.007h5.302l.443 1.274c-3.495 2.62-6.91 5.358-10.5 7.842-23.505 16.265-49.192 27.744-76.893 34.696-3.263.819-6.763 1.374-10.069 1.085-1.874-.164-4.144-1.915-5.266-3.597-9.503-14.258-15.474-30.133-21.055-46.227-7.418-21.394-11.59-43.465-14.702-66.203"
|
||||||
|
id="path4"
|
||||||
|
style="fill:#fe8463;fill-opacity:1" />
|
||||||
|
<path
|
||||||
|
fill="#ff43c4"
|
||||||
|
d="M360.319 254.985c-3.232.395-6.479.407-10.189.359 2.612-14.328 2.295-28.523-1.162-42.703-4.74-19.439-15.808-34.254-32.502-45.039-.639-.413-1.27-.839-1.852-2.137h52.547l.213-1.506c-7.026-2.665-13.978-5.752-21.733-5.819-15.455-.136-30.914.047-46.369-.12-3.092-.034-6.173-1.044-9.202-2.411 18.374-7.385 37.172-6.583 56.061-3.6 19.128 3.021 35.771 12.957 54.614 20.622l-3.662-6.95c1.846-.148 3.252-.359 4.658-.36 21.485-.021 42.97.048 64.454-.082 3.262-.019 5.062.848 6.121 4.101 2.319 7.128 5.012 14.134 7.891 22.129h-127.22c.144 4.537 2.105 5.796 5.897 5.783q43.588-.154 87.175-.028c10.803.031 21.607.309 32.402.688 1.327.047 3.486 1.183 3.763 2.215 1.549 5.774 2.638 11.671 4.021 18.169H361.127c-.548 6.29-.254 6.61 5.207 6.619 38.949.061 77.898.158 116.847.146 2.863-.001 4.211.672 4.397 3.772.304 5.076.956 10.136 1.609 15.183.414 3.199-.637 4.443-4.005 4.328-6.635-.228-13.283-.105-19.926-.106q-49.152-.005-98.304.001c-6.266.001-6.266.007-6.633 6.746"
|
||||||
|
id="path5"
|
||||||
|
style="fill:#ff7f2a;fill-opacity:1" />
|
||||||
|
<path
|
||||||
|
fill="#ff42c3"
|
||||||
|
d="M214.837 27.347c41.832-7.02 81.069-2.12 103 5.453-3.084 7.222-6.153 14.42-9.231 21.612-1.64 3.833-3.549 7.574-4.869 11.513-1.091 3.256-2.992 4.06-6.217 4.042-22.092-.119-44.185-.062-67.454-.062 3.94 4.046 6.873 7.296 12.308 7.245 16.689-.157 33.381-.056 50.072-.055h6.745c-3.661 6.1-6.056 11.84-9.975 16.217-6.139 6.856-13.44 12.659-19.972 19.184-2.516 2.514-3.687 2.416-6.101-.229-9.873-10.813-19.809-21.593-30.196-31.908-11.454-11.376-25.983-16.088-41.742-17.908-14.011-1.618-27.312.965-40.451 5.507a34.7 34.7 0 0 1-9.886 1.86c-7.248.275-14.513.085-21.995-.508 28.501-21.58 60.452-35.31 95.964-41.963m53.746 77.311 3.605-4.283h-11.056c1.525 2.155 2.339 3.846 3.653 4.931.643.531 2.216-.065 3.798-.648"
|
||||||
|
id="path6"
|
||||||
|
style="fill:#63915a;fill-opacity:1" />
|
||||||
|
<path
|
||||||
|
fill="#ff44c4"
|
||||||
|
d="M377.152 144.943c-12.092-9.869-26.287-13.386-40.919-15.513-16.956-2.465-33.583-1.51-50.074 5.653.952-1.742 1.722-3.617 2.884-5.206 15.646-21.395 34.923-38.76 58.357-51.192 3.545-1.881 8.365-1.78 12.607-1.849 13.445-.22 26.898-.165 40.345-.002 2.017.024 4.514.652 5.947 1.938 7.01 6.292 13.741 12.894 20.545 19.414.386.37.542.98 1.172 2.175h-5.468c-30.918 0-61.837.116-92.753-.114-5.213-.039-8.095 2.606-11.98 6.969h6.295c35.092-.001 70.184.065 105.275-.091 4.005-.018 6.738 1.186 8.994 4.365 3.728 5.252 7.642 10.372 12.234 16.566h-90.207l-.153 1.134c6.582 2.444 12.387 6.339 20.175 6.183 23.179-.463 46.374-.087 69.561-.245 3.754-.026 6.054 1.177 7.725 4.48 2.979 5.887 6.211 11.646 9.711 18.154-2.304.15-3.753.325-5.203.326-22.415.017-44.831-.042-67.246.074-3.19.016-5.54-.802-7.705-3.211-3.093-3.441-6.561-6.545-10.119-10.008M267.626 255.455a972 972 0 0 1-7.18.028c2.056-26.604 4.319-53.217 12.215-78.952 1.17-3.813 2.458-5.484 6.241-2.773 3.757 2.69 8.105 4.741 11.346 7.934 22.076 21.743 42.878 44.52 56.347 73.308-3.623.356-7.36.406-11.542.092-1.222-4.579-3.365-6.359-8.021-6.284-17.697.286-35.402.122-53.104.126h-6.302zm2.176-30.951h44.834l.519-1.678c-1.826-.906-3.637-2.562-5.479-2.597-12.466-.234-24.937-.104-37.407-.144-2.831-.009-4.108.992-2.467 4.419m10.378-31.312c-3.285-.223-6.209-.007-5.651 4.577h16.788c-2.211-5.078-6.298-4.716-11.137-4.577m-41.043 62.082c-3.21.24-6.22.195-9.566-.301-.214-2.054-.093-3.657.08-5.95-11.47 0-22.329-.006-33.188.003-5.917.004-6.716.761-7.574 7.07-1.888.101-3.775.202-6.063.302 4.551-9.736 8.81-19.906 14.604-29.11 10.304-16.372 21.983-31.76 37.616-43.656 7.217-5.492 15.096-9.592 23.847-11.977 1.13-.308 2.333-.345 4.833-.691-10.43 27.968-18.906 55.583-24.589 84.31m-25.72-36.778c-4.442-.439-5.459 2.888-7.32 6.624 9.882 0 19.096-.135 28.302.061 4.188.089 5.338-1.767 4.777-6.598-8.393 0-16.684 0-25.759-.087m33.855-22.914c-1.112-.66-2.178-1.777-3.343-1.89-2.903-.28-5.86.032-8.779-.147-3.761-.229-5.839 1.749-7.932 5.507 6.203 0 11.685.126 17.15-.12.95-.043 1.829-1.662 2.904-3.35m96.491-154.518c17.922 7.326 34.473 16.35 49.706 28.527-30.671-2.027-59.888 3.402-88.579 15.8.855-4.673 2.395-7.566 6.408-8.806 5.86-1.811 11.674-3.77 17.472-6.488h-16.478c5.867-11.505 11.161-22.041 16.71-32.442.395-.74 2.807-.966 4.029-.597 3.534 1.07 6.939 2.564 10.732 4.006"
|
||||||
|
id="path7"
|
||||||
|
style="fill:#ff7f2a;fill-opacity:1" />
|
||||||
|
<path
|
||||||
|
style="fill:#000000;fill-opacity:1"
|
||||||
|
d="m 130,278.4 c 69.2,16 30.4,65.6 30.4,65.6 0,0 -14.8,-92.4 28.8,-46.4 43.6,46 -59.2,-19.2 -59.2,-19.2 z"
|
||||||
|
id="path8" />
|
||||||
|
<path
|
||||||
|
style="fill:#000000;fill-opacity:1"
|
||||||
|
d="m 76.08469,213.54625 c 17.819091,7.91959 0.282842,24.32447 22.061731,7.91959 21.778889,-16.40487 53.174429,-48.3661 21.778889,-16.40487 -31.395541,31.96122 -43.84062,8.48528 -43.84062,8.48528 z"
|
||||||
|
id="path9" />
|
||||||
|
<path
|
||||||
|
style="fill:#000000;fill-opacity:1"
|
||||||
|
d="m 310.4,292.8 c 36,20.8 16,50.4 40,18.8 24,-31.6 46.8,-57.2 14.8,-33.6 -32,23.6 -54.8,14.8 -54.8,14.8 z"
|
||||||
|
id="path10" />
|
||||||
|
<path
|
||||||
|
style="fill:#000000;fill-opacity:1"
|
||||||
|
d="m 380.8,197.2 c 41.6,30.4 18.4,62.8 42,30.4 23.6,-32.4 10,-68.8 23.6,-32.4 13.6,36.4 58,64.4 13.6,36.4 -44.4,-28 -79.2,-34.4 -79.2,-34.4 z"
|
||||||
|
id="path11" />
|
||||||
|
<path
|
||||||
|
style="fill:#000000;fill-opacity:1"
|
||||||
|
d="M 99.6,145.2 C 146,120.4 170.4,80.8 146,120.4 121.6,160 121.2,187.6 120.4,159.6 119.6,131.6 99.6,145.2 99.6,145.2 Z"
|
||||||
|
id="path12" />
|
||||||
|
<path
|
||||||
|
style="fill:#000000;fill-opacity:1"
|
||||||
|
d="m 166.4,395.2 c 36.4,-34.4 26.8,-68.4 35.2,-32.8 8.4,35.6 -36,4.8 -36,4.8 z"
|
||||||
|
id="path13" />
|
||||||
|
<path
|
||||||
|
style="fill:#000000;fill-opacity:1"
|
||||||
|
d="M 325.6,419.2 C 390,378.4 402,310 388.8,379.6 c -13.2,69.6 7.6,39.6 -15.6,67.6 -23.2,28 81.6,-113.2 50,-90.8 -31.6,22.4 -97.6,62.8 -97.6,62.8 z"
|
||||||
|
id="path14" />
|
||||||
|
<path
|
||||||
|
style="fill:#000000;fill-opacity:1"
|
||||||
|
d="m 298.11622,232.77955 c 9.33381,30.82986 27.43574,16.68772 9.05097,29.41564 -18.38478,12.72793 -23.19311,44.12347 -17.53625,11.59656 5.65685,-32.52692 8.48528,-41.0122 8.48528,-41.0122 z"
|
||||||
|
id="path15" />
|
||||||
|
<path
|
||||||
|
style="fill:#000000;fill-opacity:1"
|
||||||
|
d="M 54.305801,291.32799 C 110.5915,257.10403 141.42136,225.1428 108.89444,258.51824 76.367532,291.89368 96.166522,307.73287 78.913117,291.04515 61.659711,274.35743 54.022958,289.06525 54.022958,289.06525 l 53.174432,-31.1127 z"
|
||||||
|
id="path16" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 13 KiB |
44
dist/dev.eden_emu.eden.xml
vendored
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
SPDX-FileCopyrightText: 2025 Eden Emulator Project
|
||||||
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
SPDX-FileCopyrightText: 2018 yuzu Emulator Project
|
||||||
|
SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
-->
|
||||||
|
|
||||||
|
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
|
||||||
|
<mime-type type="application/x-nx-nro">
|
||||||
|
<comment>Nintendo Switch homebrew executable</comment>
|
||||||
|
<acronym>NRO</acronym>
|
||||||
|
<icon name="org.eden_emu.eden"/>
|
||||||
|
<glob pattern="*.nro"/>
|
||||||
|
<magic><match value="NRO" type="string" offset="16"/></magic>
|
||||||
|
</mime-type>
|
||||||
|
|
||||||
|
<mime-type type="application/x-nx-nso">
|
||||||
|
<comment>Nintendo Switch homebrew executable</comment>
|
||||||
|
<acronym>NSO</acronym>
|
||||||
|
<icon name="org.eden_emu.eden"/>
|
||||||
|
<glob pattern="*.nso"/>
|
||||||
|
<magic><match value="NSO" type="string" offset="0"/></magic>
|
||||||
|
</mime-type>
|
||||||
|
|
||||||
|
<mime-type type="application/x-nx-nsp">
|
||||||
|
<comment>Nintendo Switch Package</comment>
|
||||||
|
<acronym>NSP</acronym>
|
||||||
|
<icon name="org.eden_emu.eden"/>
|
||||||
|
<glob pattern="*.nsp"/>
|
||||||
|
<magic><match value="PFS" type="string" offset="0"/></magic>
|
||||||
|
</mime-type>
|
||||||
|
|
||||||
|
<mime-type type="application/x-nx-xci">
|
||||||
|
<comment>Nintendo Switch Card Image</comment>
|
||||||
|
<acronym>XCI</acronym>
|
||||||
|
<icon name="org.eden_emu.eden"/>
|
||||||
|
<glob pattern="*.xci"/>
|
||||||
|
</mime-type>
|
||||||
|
</mime-info>
|
||||||
BIN
dist/eden.icns
vendored
BIN
dist/eden.ico
vendored
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 403 KiB |
BIN
dist/eden_named.ico
vendored
|
Before Width: | Height: | Size: 54 KiB |
117
dist/eden_named.svg
vendored
|
Before Width: | Height: | Size: 4.9 MiB After Width: | Height: | Size: 39 KiB |
1
dist/icon_variations/base.svg
vendored
Normal file
|
After Width: | Height: | Size: 9.2 KiB |
81
dist/icon_variations/base_named.svg
vendored
Normal file
|
After Width: | Height: | Size: 37 KiB |
106
dist/icon_variations/halloween2025.svg
vendored
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
width="512"
|
||||||
|
height="512"
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 512 512"
|
||||||
|
version="1.1"
|
||||||
|
id="svg7"
|
||||||
|
sodipodi:docname="dev.eden_emu.eden.svg"
|
||||||
|
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<defs
|
||||||
|
id="defs7" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview7"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#000000"
|
||||||
|
borderopacity="0.25"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:zoom="1.25"
|
||||||
|
inkscape:cx="186.8"
|
||||||
|
inkscape:cy="210.4"
|
||||||
|
inkscape:window-width="1600"
|
||||||
|
inkscape:window-height="849"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg7" />
|
||||||
|
<path
|
||||||
|
fill="#bf42f6"
|
||||||
|
d="M346.71 255.306c.788.006 1.577.013 3.124.059 4.006.027 7.253.015 10.501.003 33.391.022 66.783.028 100.175.078 8.174.013 16.349.279 24.522.209 3.084-.026 4.596.75 4.356 4.156-.293 4.157-.31 8.343-.259 12.513.049 3.964-1.248 5.539-5.679 5.524-48.85-.158-97.701-.071-146.552-.056-22.107.007-44.214 0-66.321 0h-5.43v7.117h223.011c-1.553 8.254-2.894 15.76-4.475 23.215-.17.802-1.666 1.617-2.685 1.87-1.312.327-2.763.099-4.155.099H265.099v6.701h216.666c-1.609 5.425-2.887 10.074-4.367 14.658-2.758 8.54-2.807 8.524-11.564 8.524-64.929 0-129.859.014-194.788-.04-3.401-.003-6.19.251-4.758 4.652.349 1.075 1.875 2.026 3.071 2.491 1.075.418 2.439.092 3.676.092l191.542.001h7.17c-3.533 7.29-6.399 13.72-9.834 19.83-.651 1.157-3.562 1.448-5.432 1.454-27.981.088-55.963.061-83.944.061-31.692 0-63.384.005-95.075-.008-2.61-.002-5.219-.124-8.53-.021-3.11.173-5.518.177-7.926.181-.849-7.032-2.289-14.051-2.44-21.098-.547-25.616-.773-51.242-.844-76.864-.014-4.88 1.228-9.763 2.52-14.927 2.88-.296 5.132-.31 7.81-.259 22.492.021 44.557-.024 67.034-.066 4.149-.049 7.886-.099 11.624-.149"
|
||||||
|
id="path1"
|
||||||
|
style="fill:#fea265;fill-opacity:1" />
|
||||||
|
<path
|
||||||
|
fill="#ff44c4"
|
||||||
|
d="M168.124 257.114v-9.301c-2.407 0-4.67-.001-6.933.001-44.522.025-89.044.01-133.566.146-3.858.012-5.358-1.03-4.744-5 .683-4.418 1.254-8.885 1.393-13.346.106-3.386 1.603-4.005 4.608-4.012 45.9-.11 91.801-.344 137.702-.452 3.865-.009 6.842-.344 6.032-5.831H25.546c1.39-6.599 2.354-12.681 4.138-18.513.413-1.35 3.628-2.615 5.555-2.618 47.458-.084 94.917-.01 142.375.109 3.275.008 5.855-.38 6.138-5.045H31.147c3.43-9.311 6.348-17.71 9.74-25.913.483-1.166 3.265-1.942 4.987-1.95 24.582-.124 49.165-.21 73.745.014 5.283.048 8.073-2.583 11.128-7.248h-86.45c4.35-7.835 8.002-14.753 12.077-21.412.67-1.096 3.197-1.473 4.868-1.478 30.611-.083 61.226-.291 91.832.113 7.185.094 12.719-2.619 18.321-6.774H61.385c2.592-3.805 4.355-6.546 6.268-9.178 8.88-12.216 8.896-12.209 24.069-12.21q60.991-.002 121.982-.001h5.885c-3.968-4.128-7.007-6.966-12.321-6.944-38.959.165-77.92.09-116.88.09H85.03l-.741-1.31c3.832-3.852 7.564-7.81 11.514-11.537 11.456-10.807 11.495-10.996 27.246-10.717 23.209.411 45.103 6.8 66.234 15.885 5.657 2.432 10.56 3.715 16.604.944 4.726-2.166 10.217-2.664 16.034-3.521-4.411 8.139.887 12.041 5.52 16.414 5.73 5.408 11.223 11.07 16.751 16.688 1.165 1.185 2.035 2.659 3.685 4.857-2.256.128-3.665.274-5.075.275-9.739.008-19.489.286-29.214-.085-28.045-1.07-51.592 9.244-71.602 28.209-7.152 6.778-13.525 14.379-20.212 21.643-.683.742-1.079 1.748-2.209 3.632 33.94-11.926 65.876-27.377 101.589-28.637l.859 1.395c-4.228 4.943-8.188 10.148-12.73 14.783-18.091 18.461-28.905 40.673-33.892 65.773-1.402 7.057-1.306 14.412-2.504 21.941-1.992.248-3.377.184-4.762.121m19.995-91.726c3.865.004 7.763-.315 11.585.09 5.562.589 8.92-2.178 12.525-7.52-9.134 2.152-17.144 4.039-25.139 5.988-.008.002.209.928 1.029 1.442"
|
||||||
|
id="path2"
|
||||||
|
style="fill:#ff7f2a;fill-opacity:1" />
|
||||||
|
<path
|
||||||
|
fill="#bf43f5"
|
||||||
|
d="M167.719 257.136c1.79.041 3.175.105 4.979.185.569 3.091.719 6.166.87 9.24l1.623.577c2.3-3.392 4.599-6.785 7.467-10.458 2.456-.382 4.343-.483 6.573-.598 1.405-.133 2.466-.342 3.53-.356 12.08-.162 24.16-.295 36.693-.368 3.463.111 6.473.155 9.484.2-1.12 6.677-2.306 13.345-3.347 20.035-4.715 30.285-5.404 60.697-3.186 91.651-2.469.746-4.517 1.048-6.565 1.35-56.117-.025-112.236-.135-168.353.061-5.334.018-8.298-1.559-10.185-6.415-1.874-4.824-4.295-9.436-6.907-15.069h17.147c53.955 0 107.909.013 161.863-.044 2.026-.002 4.864 1.218 5.327-2.599.469-3.862-1.271-4.625-4.781-4.616-38.803.103-77.607.061-116.411.068-20.405.003-40.811-.065-61.215.125-3.545.033-5.36-1.044-6.324-4.419-1.642-5.75-3.577-11.416-5.879-18.659 65.363-.259 129.677-.027 194.424-.144l.372-6.533c-1.901-.099-3.398-.244-4.896-.245-58.283-.032-116.565-.056-174.848-.06-4.48 0-8.964.279-13.439.163-1.138-.029-3.078-.897-3.247-1.681-1.676-7.766-3.056-15.595-4.624-23.961 8.433 0 15.808-.031 23.182.02 1.998.014 3.995.4 5.992.401 55.964.023 111.928.02 167.892.017 6.075 0 6.307-.256 6.266-7.198H23.431c-.284-6.643-.72-12.739-.592-18.823.016-.786 2.94-2.144 4.53-2.165 15.149-.197 30.3-.177 45.45-.191 17.623-.016 35.248-.072 52.871.018 13.876.07 27.75.335 42.029.491"
|
||||||
|
id="path3"
|
||||||
|
style="fill:#fea265;fill-opacity:1" />
|
||||||
|
<path
|
||||||
|
fill="#985ded"
|
||||||
|
d="M225.868 369.021c2.02-.729 4.068-1.031 6.551-1.351 2.672 17.851 4.169 35.853 7.334 53.556 4.047 22.64 9.785 44.94 18.63 66.298.29.699.498 1.433.742 2.142-25.39 10.452-124.622-22.609-146.929-49.453h122.669c.302-4.81-.85-6.915-5.85-6.891-39.883.193-79.768.055-119.652.182-4.441.014-8.036-.845-11.208-4.17-6.87-7.203-13.99-14.166-21.008-21.228l.69-1.319H229.63l-1.24-7.289h-5.726c-42.821 0-85.642.011-128.464-.013-6.18-.003-12.371-.428-18.537-.173-3.704.154-6.14-1.066-8.104-4.073-4.111-6.292-8.367-12.489-13.256-19.755h171.593c0-2.433 0-4.234-.027-6.463m35.103.062c2.442-.418 4.85-.422 7.641-.431.482 1.987.581 3.979.706 6.499H457.62c-3.126 4.951-5.544 8.946-8.123 12.835-7.64 11.521-7.665 11.508-21.226 11.509l-147.5.003h-5.407c-.602 6.688-.15 7.214 5.824 7.214q73.75.004 147.5.004h6.891c-4.048 4.533-7.454 7.812-10.233 11.556-9.047 12.19-20.575 16.124-35.967 15.542-33.039-1.25-66.159-.384-99.246-.384h-5.45c-.275 5.77.583 6.774 5.594 6.776 34.478.012 68.957.006 103.435.007h5.302l.443 1.274c-3.495 2.62-6.91 5.358-10.5 7.842-23.505 16.265-49.192 27.744-76.893 34.696-3.263.819-6.763 1.374-10.069 1.085-1.874-.164-4.144-1.915-5.266-3.597-9.503-14.258-15.474-30.133-21.055-46.227-7.418-21.394-11.59-43.465-14.702-66.203"
|
||||||
|
id="path4"
|
||||||
|
style="fill:#fe8463;fill-opacity:1" />
|
||||||
|
<path
|
||||||
|
fill="#ff43c4"
|
||||||
|
d="M360.319 254.985c-3.232.395-6.479.407-10.189.359 2.612-14.328 2.295-28.523-1.162-42.703-4.74-19.439-15.808-34.254-32.502-45.039-.639-.413-1.27-.839-1.852-2.137h52.547l.213-1.506c-7.026-2.665-13.978-5.752-21.733-5.819-15.455-.136-30.914.047-46.369-.12-3.092-.034-6.173-1.044-9.202-2.411 18.374-7.385 37.172-6.583 56.061-3.6 19.128 3.021 35.771 12.957 54.614 20.622l-3.662-6.95c1.846-.148 3.252-.359 4.658-.36 21.485-.021 42.97.048 64.454-.082 3.262-.019 5.062.848 6.121 4.101 2.319 7.128 5.012 14.134 7.891 22.129h-127.22c.144 4.537 2.105 5.796 5.897 5.783q43.588-.154 87.175-.028c10.803.031 21.607.309 32.402.688 1.327.047 3.486 1.183 3.763 2.215 1.549 5.774 2.638 11.671 4.021 18.169H361.127c-.548 6.29-.254 6.61 5.207 6.619 38.949.061 77.898.158 116.847.146 2.863-.001 4.211.672 4.397 3.772.304 5.076.956 10.136 1.609 15.183.414 3.199-.637 4.443-4.005 4.328-6.635-.228-13.283-.105-19.926-.106q-49.152-.005-98.304.001c-6.266.001-6.266.007-6.633 6.746"
|
||||||
|
id="path5"
|
||||||
|
style="fill:#ff7f2a;fill-opacity:1" />
|
||||||
|
<path
|
||||||
|
fill="#ff42c3"
|
||||||
|
d="M214.837 27.347c41.832-7.02 81.069-2.12 103 5.453-3.084 7.222-6.153 14.42-9.231 21.612-1.64 3.833-3.549 7.574-4.869 11.513-1.091 3.256-2.992 4.06-6.217 4.042-22.092-.119-44.185-.062-67.454-.062 3.94 4.046 6.873 7.296 12.308 7.245 16.689-.157 33.381-.056 50.072-.055h6.745c-3.661 6.1-6.056 11.84-9.975 16.217-6.139 6.856-13.44 12.659-19.972 19.184-2.516 2.514-3.687 2.416-6.101-.229-9.873-10.813-19.809-21.593-30.196-31.908-11.454-11.376-25.983-16.088-41.742-17.908-14.011-1.618-27.312.965-40.451 5.507a34.7 34.7 0 0 1-9.886 1.86c-7.248.275-14.513.085-21.995-.508 28.501-21.58 60.452-35.31 95.964-41.963m53.746 77.311 3.605-4.283h-11.056c1.525 2.155 2.339 3.846 3.653 4.931.643.531 2.216-.065 3.798-.648"
|
||||||
|
id="path6"
|
||||||
|
style="fill:#63915a;fill-opacity:1" />
|
||||||
|
<path
|
||||||
|
fill="#ff44c4"
|
||||||
|
d="M377.152 144.943c-12.092-9.869-26.287-13.386-40.919-15.513-16.956-2.465-33.583-1.51-50.074 5.653.952-1.742 1.722-3.617 2.884-5.206 15.646-21.395 34.923-38.76 58.357-51.192 3.545-1.881 8.365-1.78 12.607-1.849 13.445-.22 26.898-.165 40.345-.002 2.017.024 4.514.652 5.947 1.938 7.01 6.292 13.741 12.894 20.545 19.414.386.37.542.98 1.172 2.175h-5.468c-30.918 0-61.837.116-92.753-.114-5.213-.039-8.095 2.606-11.98 6.969h6.295c35.092-.001 70.184.065 105.275-.091 4.005-.018 6.738 1.186 8.994 4.365 3.728 5.252 7.642 10.372 12.234 16.566h-90.207l-.153 1.134c6.582 2.444 12.387 6.339 20.175 6.183 23.179-.463 46.374-.087 69.561-.245 3.754-.026 6.054 1.177 7.725 4.48 2.979 5.887 6.211 11.646 9.711 18.154-2.304.15-3.753.325-5.203.326-22.415.017-44.831-.042-67.246.074-3.19.016-5.54-.802-7.705-3.211-3.093-3.441-6.561-6.545-10.119-10.008M267.626 255.455a972 972 0 0 1-7.18.028c2.056-26.604 4.319-53.217 12.215-78.952 1.17-3.813 2.458-5.484 6.241-2.773 3.757 2.69 8.105 4.741 11.346 7.934 22.076 21.743 42.878 44.52 56.347 73.308-3.623.356-7.36.406-11.542.092-1.222-4.579-3.365-6.359-8.021-6.284-17.697.286-35.402.122-53.104.126h-6.302zm2.176-30.951h44.834l.519-1.678c-1.826-.906-3.637-2.562-5.479-2.597-12.466-.234-24.937-.104-37.407-.144-2.831-.009-4.108.992-2.467 4.419m10.378-31.312c-3.285-.223-6.209-.007-5.651 4.577h16.788c-2.211-5.078-6.298-4.716-11.137-4.577m-41.043 62.082c-3.21.24-6.22.195-9.566-.301-.214-2.054-.093-3.657.08-5.95-11.47 0-22.329-.006-33.188.003-5.917.004-6.716.761-7.574 7.07-1.888.101-3.775.202-6.063.302 4.551-9.736 8.81-19.906 14.604-29.11 10.304-16.372 21.983-31.76 37.616-43.656 7.217-5.492 15.096-9.592 23.847-11.977 1.13-.308 2.333-.345 4.833-.691-10.43 27.968-18.906 55.583-24.589 84.31m-25.72-36.778c-4.442-.439-5.459 2.888-7.32 6.624 9.882 0 19.096-.135 28.302.061 4.188.089 5.338-1.767 4.777-6.598-8.393 0-16.684 0-25.759-.087m33.855-22.914c-1.112-.66-2.178-1.777-3.343-1.89-2.903-.28-5.86.032-8.779-.147-3.761-.229-5.839 1.749-7.932 5.507 6.203 0 11.685.126 17.15-.12.95-.043 1.829-1.662 2.904-3.35m96.491-154.518c17.922 7.326 34.473 16.35 49.706 28.527-30.671-2.027-59.888 3.402-88.579 15.8.855-4.673 2.395-7.566 6.408-8.806 5.86-1.811 11.674-3.77 17.472-6.488h-16.478c5.867-11.505 11.161-22.041 16.71-32.442.395-.74 2.807-.966 4.029-.597 3.534 1.07 6.939 2.564 10.732 4.006"
|
||||||
|
id="path7"
|
||||||
|
style="fill:#ff7f2a;fill-opacity:1" />
|
||||||
|
<path
|
||||||
|
style="fill:#000000;fill-opacity:1"
|
||||||
|
d="m 130,278.4 c 69.2,16 30.4,65.6 30.4,65.6 0,0 -14.8,-92.4 28.8,-46.4 43.6,46 -59.2,-19.2 -59.2,-19.2 z"
|
||||||
|
id="path8" />
|
||||||
|
<path
|
||||||
|
style="fill:#000000;fill-opacity:1"
|
||||||
|
d="m 76.08469,213.54625 c 17.819091,7.91959 0.282842,24.32447 22.061731,7.91959 21.778889,-16.40487 53.174429,-48.3661 21.778889,-16.40487 -31.395541,31.96122 -43.84062,8.48528 -43.84062,8.48528 z"
|
||||||
|
id="path9" />
|
||||||
|
<path
|
||||||
|
style="fill:#000000;fill-opacity:1"
|
||||||
|
d="m 310.4,292.8 c 36,20.8 16,50.4 40,18.8 24,-31.6 46.8,-57.2 14.8,-33.6 -32,23.6 -54.8,14.8 -54.8,14.8 z"
|
||||||
|
id="path10" />
|
||||||
|
<path
|
||||||
|
style="fill:#000000;fill-opacity:1"
|
||||||
|
d="m 380.8,197.2 c 41.6,30.4 18.4,62.8 42,30.4 23.6,-32.4 10,-68.8 23.6,-32.4 13.6,36.4 58,64.4 13.6,36.4 -44.4,-28 -79.2,-34.4 -79.2,-34.4 z"
|
||||||
|
id="path11" />
|
||||||
|
<path
|
||||||
|
style="fill:#000000;fill-opacity:1"
|
||||||
|
d="M 99.6,145.2 C 146,120.4 170.4,80.8 146,120.4 121.6,160 121.2,187.6 120.4,159.6 119.6,131.6 99.6,145.2 99.6,145.2 Z"
|
||||||
|
id="path12" />
|
||||||
|
<path
|
||||||
|
style="fill:#000000;fill-opacity:1"
|
||||||
|
d="m 166.4,395.2 c 36.4,-34.4 26.8,-68.4 35.2,-32.8 8.4,35.6 -36,4.8 -36,4.8 z"
|
||||||
|
id="path13" />
|
||||||
|
<path
|
||||||
|
style="fill:#000000;fill-opacity:1"
|
||||||
|
d="M 325.6,419.2 C 390,378.4 402,310 388.8,379.6 c -13.2,69.6 7.6,39.6 -15.6,67.6 -23.2,28 81.6,-113.2 50,-90.8 -31.6,22.4 -97.6,62.8 -97.6,62.8 z"
|
||||||
|
id="path14" />
|
||||||
|
<path
|
||||||
|
style="fill:#000000;fill-opacity:1"
|
||||||
|
d="m 298.11622,232.77955 c 9.33381,30.82986 27.43574,16.68772 9.05097,29.41564 -18.38478,12.72793 -23.19311,44.12347 -17.53625,11.59656 5.65685,-32.52692 8.48528,-41.0122 8.48528,-41.0122 z"
|
||||||
|
id="path15" />
|
||||||
|
<path
|
||||||
|
style="fill:#000000;fill-opacity:1"
|
||||||
|
d="M 54.305801,291.32799 C 110.5915,257.10403 141.42136,225.1428 108.89444,258.51824 76.367532,291.89368 96.166522,307.73287 78.913117,291.04515 61.659711,274.35743 54.022958,289.06525 54.022958,289.06525 l 53.174432,-31.1127 z"
|
||||||
|
id="path16" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 13 KiB |
110
dist/icon_variations/halloween2025_named.svg
vendored
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
dist/icons/controller/applet_dual_joycon.png
vendored
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 2.7 KiB |
BIN
dist/icons/controller/applet_dual_joycon_dark.png
vendored
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 2.4 KiB |
BIN
dist/icons/controller/applet_handheld.png
vendored
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.4 KiB |
BIN
dist/icons/controller/applet_handheld_dark.png
vendored
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.9 KiB |
BIN
dist/icons/controller/applet_handheld_disabled.png
vendored
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 1.8 KiB |
BIN
dist/icons/controller/applet_handheld_midnight.png
vendored
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.9 KiB |
BIN
dist/icons/controller/applet_pro_controller.png
vendored
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 3.2 KiB |
BIN
dist/icons/controller/applet_pro_controller_dark.png
vendored
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 3.3 KiB |
BIN
dist/icons/controller/applet_single_joycon_left.png
vendored
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 1.8 KiB |
BIN
dist/icons/controller/applet_single_joycon_right.png
vendored
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 1.9 KiB |
BIN
dist/icons/overlay/arrow_left.png
vendored
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 687 B |
BIN
dist/icons/overlay/arrow_left_dark.png
vendored
|
Before Width: | Height: | Size: 712 B After Width: | Height: | Size: 687 B |
BIN
dist/icons/overlay/arrow_right.png
vendored
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 656 B |
BIN
dist/icons/overlay/arrow_right_dark.png
vendored
|
Before Width: | Height: | Size: 683 B After Width: | Height: | Size: 656 B |
BIN
dist/icons/overlay/button_A_dark.png
vendored
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 2.3 KiB |
BIN
dist/icons/overlay/button_B_dark.png
vendored
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.1 KiB |
BIN
dist/icons/overlay/button_L.png
vendored
|
Before Width: | Height: | Size: 796 B After Width: | Height: | Size: 564 B |
BIN
dist/icons/overlay/button_L_dark.png
vendored
|
Before Width: | Height: | Size: 745 B After Width: | Height: | Size: 563 B |
BIN
dist/icons/overlay/button_R.png
vendored
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.3 KiB |