Compare commits
620 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
379649dbce | ||
|
|
c03248f158 | ||
|
|
4867bb2e2b | ||
|
|
4e4c7e687b | ||
|
|
56f738eb06 | ||
|
|
b1e537a485 | ||
|
|
59da460177 | ||
|
|
8bdb60a6e1 | ||
|
|
383a28795e | ||
|
|
725544f3b4 | ||
|
|
135f10320a | ||
|
|
0b7114cbf8 | ||
|
|
95d42cb40a | ||
|
|
f0bc64d967 | ||
|
|
ad8526c4cf | ||
|
|
ae7d7dca1f | ||
|
|
4a4b75b0de | ||
|
|
b186b04995 | ||
|
|
ab6896a2ca | ||
|
|
e11f3da493 | ||
|
|
8ffb94b06c | ||
|
|
267887d7a9 | ||
|
|
778ca369cd | ||
|
|
dbe7fd979f | ||
|
|
1c7c7a5f1b | ||
|
|
bf59d26c48 | ||
|
|
652fc02175 | ||
|
|
854e198196 | ||
|
|
5ecd402811 | ||
|
|
0ce2a30d20 | ||
|
|
644a181aff | ||
|
|
422c7865a3 | ||
|
|
ca99574700 | ||
|
|
f902010f04 | ||
|
|
929a51afc6 | ||
|
|
260f08c497 | ||
|
|
921ea178b9 | ||
|
|
b540725090 | ||
|
|
5ddbaeae23 | ||
|
|
b081f800a4 | ||
|
|
76a71d76d4 | ||
|
|
83eef0012e | ||
|
|
ec6a0dd1c8 | ||
|
|
eb498e5ecd | ||
|
|
4fa793b945 | ||
|
|
5d84dfed91 | ||
|
|
eee7f076ee | ||
|
|
996abd1eaf | ||
|
|
91128d6625 | ||
|
|
37b6c91de6 | ||
|
|
b6c54ac8c7 | ||
|
|
b3ee2d8ac5 | ||
|
|
9701a3d874 | ||
|
|
a276623dbb | ||
|
|
2fff086e81 | ||
|
|
5bc58c78ed | ||
|
|
0fe6a8c7df | ||
|
|
d4b5633cf0 | ||
|
|
afbaf8e485 | ||
|
|
52b1e01a6f | ||
|
|
f1cd5f5ff4 | ||
|
|
1edc5de18e | ||
|
|
727377c012 | ||
|
|
4dbe0fd497 | ||
|
|
6d230d28da | ||
|
|
336d871a7f | ||
|
|
e8c75b4107 | ||
|
|
0fc3d692b9 | ||
|
|
5983a23d38 | ||
|
|
599069eb33 | ||
|
|
6eca4afac5 | ||
|
|
b2faa299d5 | ||
|
|
3d69741076 | ||
|
|
d29e15f219 | ||
|
|
c650473fdc | ||
|
|
000530c028 | ||
|
|
df05b5f3db | ||
|
|
06a535f50e | ||
|
|
4cbd75b413 | ||
|
|
60f331b43b | ||
|
|
ba6f8cb744 | ||
|
|
118579adb3 | ||
|
|
23393904e0 | ||
|
|
3066887ff4 | ||
|
|
901f010913 | ||
|
|
5fc9732f05 | ||
|
|
39363cd435 | ||
|
|
60661c3b8b | ||
|
|
be0f096f48 | ||
|
|
6201256e15 | ||
|
|
af188bb7b7 | ||
|
|
0862e5e98a | ||
|
|
49b0bef17d | ||
|
|
f14f095e72 | ||
|
|
7e58ac5bcf | ||
|
|
7220bd2edd | ||
|
|
d4e9daa739 | ||
|
|
9b045bf837 | ||
|
|
7a600e28d2 | ||
|
|
5a07260e1b | ||
|
|
2c8297c34c | ||
|
|
7f9f1e90ca | ||
|
|
04a543290a | ||
|
|
8bcb8a225a | ||
|
|
64cb0b57fb | ||
|
|
7a60160f68 | ||
|
|
dc91e8803e | ||
|
|
c55435b78d | ||
|
|
f721a474e4 | ||
|
|
ab39df3ff0 | ||
|
|
2ff04dccba | ||
|
|
3d5ba09eb1 | ||
|
|
ae9972b6be | ||
|
|
e677f72bda | ||
|
|
4109bb200b | ||
|
|
6ad642a984 | ||
|
|
ccd61d0134 | ||
|
|
d97da17263 | ||
|
|
0ff2aebdf1 | ||
|
|
100b00b3b5 | ||
|
|
9e162705f4 | ||
|
|
b3f82618d7 | ||
|
|
fc6a410dfa | ||
|
|
56a563c239 | ||
|
|
6715959382 | ||
|
|
75cd4ce649 | ||
|
|
463db8ffe4 | ||
|
|
ecaebc54ff | ||
|
|
1febb83942 | ||
|
|
a3db3be4a6 | ||
|
|
909e4b7e1f | ||
|
|
e92272ce31 | ||
|
|
51170ea85d | ||
|
|
9a7cc43d81 | ||
|
|
e351fa56ce | ||
|
|
845fadf49e | ||
|
|
98910fed1c | ||
|
|
d9f28c5b2a | ||
|
|
784fc8cca9 | ||
|
|
a35a619903 | ||
|
|
3a5fa35449 | ||
|
|
0407568006 | ||
|
|
30779d35cd | ||
|
|
32da5ea0ae | ||
|
|
e878174df8 | ||
|
|
7ad6621f91 | ||
|
|
8e1ffc1bdc | ||
|
|
96485a22f8 | ||
|
|
97c9a51015 | ||
|
|
a8ebd0f551 | ||
|
|
fac63ce6b1 | ||
|
|
c71b2dc822 | ||
|
|
e87635095a | ||
|
|
0c624f16a7 | ||
|
|
d1d14cef79 | ||
|
|
7d5da9eaeb | ||
|
|
abc1980418 | ||
|
|
70c9e18eea | ||
|
|
46ca83cc36 | ||
|
|
1e0df67cc4 | ||
|
|
ced1ec0112 | ||
|
|
1b41c78afc | ||
|
|
748b97ac5e | ||
|
|
2207be30a9 | ||
|
|
8d284aeccf | ||
|
|
d49aa070fd | ||
|
|
92cd488754 | ||
|
|
efccedbbd2 | ||
|
|
93e831decb | ||
|
|
d6fadff3ee | ||
|
|
af980b4117 | ||
|
|
f23e296802 | ||
|
|
a0ab331928 | ||
|
|
068d6598bc | ||
|
|
fe2f637467 | ||
|
|
0f9d5f29f3 | ||
|
|
cb09d1e064 | ||
|
|
526d9d4cea | ||
|
|
b477ba09c1 | ||
|
|
6b2ac400eb | ||
|
|
5ac0ef8fde | ||
|
|
3255620934 | ||
|
|
03d62efe13 | ||
|
|
7d19679cc5 | ||
|
|
b3fd0b6c89 | ||
|
|
15bdd27b9c | ||
|
|
d721cbe29b | ||
|
|
17f4c52e56 | ||
|
|
27c3e0e5c3 | ||
|
|
8fac24d2a4 | ||
|
|
fe59958b63 | ||
|
|
13e0fdeac1 | ||
|
|
76db4b08f6 | ||
|
|
5d583a8a41 | ||
|
|
8b72dcb235 | ||
|
|
fcb345e273 | ||
|
|
4c054ff2e7 | ||
|
|
43cecd1692 | ||
|
|
ac0ec5edea | ||
|
|
c55165e19b | ||
|
|
1092295f2a | ||
|
|
9628300ff5 | ||
|
|
4010f4bc1f | ||
|
|
f3fb0b729e | ||
|
|
7bcbf8aba4 | ||
|
|
d9b77cc21e | ||
|
|
d0eaf07a40 | ||
|
|
354f5d698f | ||
|
|
5c6b23c64d | ||
|
|
c43f24e489 | ||
|
|
5d4aef81fe | ||
|
|
6c6dd68780 | ||
|
|
304db9173b | ||
|
|
91abe7f7d0 | ||
|
|
3e27010c7b | ||
|
|
0c478d7614 | ||
|
|
37e688f82d | ||
|
|
f010863ece | ||
|
|
dd65ef4749 | ||
|
|
fc137b0229 | ||
|
|
a9923b6844 | ||
|
|
0a705b7449 | ||
|
|
7c4c77becf | ||
|
|
951b556a2c | ||
|
|
a6688abcf5 | ||
|
|
6d72a6f447 | ||
|
|
f1fa564733 | ||
|
|
ad9ab71301 | ||
|
|
93f54be3f9 | ||
|
|
95a6814752 | ||
|
|
b0fea112e8 | ||
|
|
94b558d3f1 | ||
|
|
6e666a1831 | ||
|
|
b54911a52e | ||
|
|
102f7d24fc | ||
|
|
a5ac24adc5 | ||
|
|
3fdcd6b7dc | ||
|
|
46429f9c02 | ||
|
|
a4c3135bf3 | ||
|
|
d48d51828e | ||
|
|
79d73bbcb9 | ||
|
|
e9846de5be | ||
|
|
671faf8dca | ||
|
|
c7e0364342 | ||
|
|
0805711cba | ||
|
|
54f2221ec6 | ||
|
|
f71844b87f | ||
|
|
6634b8c9d9 | ||
|
|
64516e6420 | ||
|
|
7869f1c618 | ||
|
|
0571187bd3 | ||
|
|
4deb7e63b5 | ||
|
|
f5053868b4 | ||
|
|
56f2bccbe0 | ||
|
|
e37cbcf2ff | ||
|
|
6be1934af2 | ||
|
|
2b7de66245 | ||
|
|
15041eca5f | ||
|
|
ce02bd6630 | ||
|
|
a6487ee8b0 | ||
|
|
7d2735b118 | ||
|
|
c2f4e06901 | ||
|
|
0ed010166d | ||
|
|
ceb082e777 | ||
|
|
624be242c4 | ||
|
|
15e542778e | ||
|
|
5c863db0f2 | ||
|
|
7de2d7b846 | ||
|
|
8acdb35798 | ||
|
|
47cd41cc58 | ||
|
|
19641fc29c | ||
|
|
0f9457e0d1 | ||
|
|
3dd7103e62 | ||
|
|
b2a48187f8 | ||
|
|
15735c0cfa | ||
|
|
dfd52ed640 | ||
|
|
4bdcf342b6 | ||
|
|
48cbeb0993 | ||
|
|
b1717b6fc2 | ||
|
|
8c53dcef31 | ||
|
|
88d1523b3b | ||
|
|
a826f5ffa1 | ||
|
|
4ac18f5e18 | ||
|
|
43e044ad9a | ||
|
|
f31bd1bcdd | ||
|
|
40d512cafd | ||
|
|
be259fc9b8 | ||
|
|
e035bd3a21 | ||
|
|
8accd2f576 | ||
|
|
a84a58b613 | ||
|
|
6751c20f52 | ||
|
|
4085ce6bf8 | ||
|
|
41f1be91eb | ||
|
|
b7540aa019 | ||
|
|
8384eaa0c2 | ||
|
|
f60f3eed1f | ||
|
|
9ed8cdccd4 | ||
|
|
5f5ba99168 | ||
|
|
c0a04cef39 | ||
|
|
1d2591ab8c | ||
|
|
fe92815b04 | ||
|
|
275d818cd4 | ||
|
|
7a2f3fdda9 | ||
|
|
2edc8b4b73 | ||
|
|
109f5fb730 | ||
|
|
f7eaf13a4d | ||
|
|
4fdc45a771 | ||
|
|
6b05944116 | ||
|
|
b0fe4d190d | ||
|
|
9996a07e87 | ||
|
|
254ab96b63 | ||
|
|
aac54d648c | ||
|
|
456a886a33 | ||
|
|
05562046ac | ||
|
|
356aa3d3ae | ||
|
|
f1a59b2186 | ||
|
|
346bcf02ea | ||
|
|
9099b9cfb7 | ||
|
|
e1a7c24ecd | ||
|
|
a34ad3bff8 | ||
|
|
6866c01524 | ||
|
|
e0b8e8440a | ||
|
|
4cc9792f66 | ||
|
|
4574b91561 | ||
|
|
04b6c69083 | ||
|
|
375c8c1910 | ||
|
|
67f6735f02 | ||
|
|
1f483e1d33 | ||
|
|
068fec0d5f | ||
|
|
f309d4881a | ||
|
|
80ba2058a9 | ||
|
|
3716f6b9b6 | ||
|
|
3af2cd1227 | ||
|
|
0be78e9550 | ||
|
|
eb1197a65c | ||
|
|
a674eb8367 | ||
|
|
118d124852 | ||
|
|
34d46528eb | ||
|
|
72c924a456 | ||
|
|
f27490aeab | ||
|
|
ed451a72d9 | ||
|
|
5c89977605 | ||
|
|
deda004227 | ||
|
|
64f5277789 | ||
|
|
5c5b1cdf45 | ||
|
|
750286ae97 | ||
|
|
f35091eeb4 | ||
|
|
8cd3bcc0e3 | ||
|
|
e200bcbcbc | ||
|
|
a2e6891f01 | ||
|
|
e0078b2407 | ||
|
|
1830290e55 | ||
|
|
70f9379eef | ||
|
|
b63d7841dd | ||
|
|
944cb7ab51 | ||
|
|
e5c3a0eef7 | ||
|
|
16b8a78571 | ||
|
|
bf03cac9e1 | ||
|
|
b6be443069 | ||
|
|
10f6e1f6f7 | ||
|
|
6483b33ee1 | ||
|
|
485db276e3 | ||
|
|
20d577f9e3 | ||
|
|
48db1c1de5 | ||
|
|
219b8dca2e | ||
|
|
8fe05d5b74 | ||
|
|
d79078c2d8 | ||
|
|
ff915b2fe1 | ||
|
|
2f6e8b5756 | ||
|
|
a964e63722 | ||
|
|
2087f96e90 | ||
|
|
68aab3e0e5 | ||
|
|
c86830313e | ||
|
|
e3bfe497f2 | ||
|
|
dc2ab096cb | ||
|
|
4bf9161bcd | ||
|
|
aca8b45664 | ||
|
|
2697526f34 | ||
|
|
e5838edf9f | ||
|
|
1e9614fe4f | ||
|
|
80f0c03e54 | ||
|
|
cd333a619a | ||
|
|
a660d9c04a | ||
|
|
f02a25f15f | ||
|
|
05aa6af325 | ||
|
|
106e994dbf | ||
|
|
2ce31e5507 | ||
|
|
bcf77a326b | ||
|
|
efedbb16d0 | ||
|
|
885bb71da8 | ||
|
|
4b4d4f09da | ||
|
|
36a0b7824d | ||
|
|
3b0542f188 | ||
|
|
ce2bf584c2 | ||
|
|
a5aecf91bb | ||
|
|
25d7db7bbe | ||
|
|
c95b942ec2 | ||
|
|
00c0f01e73 | ||
|
|
db8aaacb35 | ||
|
|
8dafecd528 | ||
|
|
fcdfe03674 | ||
|
|
687c4415be | ||
|
|
f7361fdebb | ||
|
|
980f8e02e5 | ||
|
|
f326e39dba | ||
|
|
5937e0bf12 | ||
|
|
c1761f87f9 | ||
|
|
7c278f9701 | ||
|
|
06ed6f3b6d | ||
|
|
0453e4463a | ||
|
|
d8bef418a7 | ||
|
|
df134acefe | ||
|
|
70314b9465 | ||
|
|
de7b457ee4 | ||
|
|
f00d498f11 | ||
|
|
df3c0c18e4 | ||
|
|
a15af9b550 | ||
|
|
4447a5c9f2 | ||
|
|
e24f8da113 | ||
|
|
680cbb559d | ||
|
|
9dc9bf3baf | ||
|
|
5f81ac40c8 | ||
|
|
0deb0f50b8 | ||
|
|
2b51691d57 | ||
|
|
11687fe32b | ||
|
|
9d4d6c5fdc | ||
|
|
f26b9b174a | ||
|
|
ce8798fffe | ||
|
|
3c3dd2bd86 | ||
|
|
eec1466b7b | ||
|
|
5910edb9fa | ||
|
|
63f52580ca | ||
|
|
d1b80788f6 | ||
|
|
7eff38ed10 | ||
|
|
995538fa3e | ||
|
|
57105076a0 | ||
|
|
868e946dee | ||
|
|
fe7fe3ed24 | ||
|
|
2acbcd333c | ||
|
|
7853bacddd | ||
|
|
d827b63044 | ||
|
|
14e8ee7fe3 | ||
|
|
bc1edd1f1a | ||
|
|
cfe767e301 | ||
|
|
063a80695c | ||
|
|
a974fc4ac8 | ||
|
|
ad97506867 | ||
|
|
cf87efa3c0 | ||
|
|
88b3dff278 | ||
|
|
9ecd26d2ce | ||
|
|
4cfb5c9d55 | ||
|
|
a6c72531b4 | ||
|
|
ae43740690 | ||
|
|
ec964c8610 | ||
|
|
fd2ce82b6e | ||
|
|
fd2551439e | ||
|
|
f3c63abd30 | ||
|
|
f771952e62 | ||
|
|
6df92285e1 | ||
|
|
2c8a3b17b4 | ||
|
|
0ca46dc05f | ||
|
|
95eb701e12 | ||
|
|
2aa29a62cc | ||
|
|
f20e5be513 | ||
|
|
5e2161d90b | ||
|
|
bf587885cb | ||
|
|
ee63706887 | ||
|
|
e83b81ec98 | ||
|
|
8b939a9dab | ||
|
|
d878bfec3b | ||
|
|
33889fec1d | ||
|
|
51dc3c6858 | ||
|
|
4ea9d76093 | ||
|
|
d94654ea10 | ||
|
|
650cf43cd8 | ||
|
|
54732c560c | ||
|
|
580d46e3d6 | ||
|
|
c204ebf021 | ||
|
|
ea8e403f83 | ||
|
|
73760e087a | ||
|
|
3ce9f277d9 | ||
|
|
378d830a93 | ||
|
|
16980b0ffc | ||
|
|
5297c95e52 | ||
|
|
519f67a20a | ||
|
|
74f3a2457e | ||
|
|
18447ac6ac | ||
|
|
e946e38cd5 | ||
|
|
beacac3f11 | ||
|
|
89974af0ef | ||
|
|
32d5036fc6 | ||
|
|
86b3c732e5 | ||
|
|
2ce26ee9ea | ||
|
|
8559aba978 | ||
|
|
ff72997511 | ||
|
|
9a7364ee92 | ||
|
|
4e35a0b575 | ||
|
|
6ddb63582f | ||
|
|
31908f732f | ||
|
|
4a3d4de9c2 | ||
|
|
b1850e6f51 | ||
|
|
1d562cdd11 | ||
|
|
4a34bcfcbf | ||
|
|
5fc48cfc8d | ||
|
|
3947f896e5 | ||
|
|
1e8cc02d56 | ||
|
|
b4699d9d47 | ||
|
|
a53ce91852 | ||
|
|
01d7ff7a08 | ||
|
|
493f59cef5 | ||
|
|
939a6e0f7a | ||
|
|
975ad17442 | ||
|
|
dcbf79df14 | ||
|
|
eba3c2c08f | ||
|
|
391f91f735 | ||
|
|
bac344d059 | ||
|
|
0051182338 | ||
|
|
527610d599 | ||
|
|
1ff5042685 | ||
|
|
b1480396fa | ||
|
|
de1b520498 | ||
|
|
a6782e8a13 | ||
|
|
fd3e4068b6 | ||
|
|
8fbfb94bec | ||
|
|
d43597b520 | ||
|
|
967263fc80 | ||
|
|
fdbc74b506 | ||
|
|
544c6b4bbc | ||
|
|
b8267c0a39 | ||
|
|
2670b517e8 | ||
|
|
e90930b0b9 | ||
|
|
72eb16f933 | ||
|
|
81ce14e0db | ||
|
|
d974a0062f | ||
|
|
7c9ea780b3 | ||
|
|
4bc1655b05 | ||
|
|
ebb462f1d5 | ||
|
|
3a0878f40f | ||
|
|
240e968d73 | ||
|
|
52ccaabca8 | ||
|
|
8acc5e22a0 | ||
|
|
8dcef46a11 | ||
|
|
14413d896f | ||
|
|
bf4eef8e58 | ||
|
|
2a7a5078fc | ||
|
|
76a23e4c72 | ||
|
|
8e477e35bb | ||
|
|
89d2e67459 | ||
|
|
32e378a29b | ||
|
|
12bc825b8a | ||
|
|
c69b642f54 | ||
|
|
0e0137a9ff | ||
|
|
4ea8c6fda5 | ||
|
|
eb310a4a60 | ||
|
|
903a9ad81f | ||
|
|
e341dcf238 | ||
|
|
8d769ed9cb | ||
|
|
71c9c0c924 | ||
|
|
6865b4c8a7 | ||
|
|
c0bb7abdbc | ||
|
|
aa58dd5f68 | ||
|
|
9500859043 | ||
|
|
93eeb501c0 | ||
|
|
f298d7551c | ||
|
|
5ade69f5f4 | ||
|
|
e6199780a5 | ||
|
|
2c1fc0199b | ||
|
|
dec12bd54a | ||
|
|
5c7622100b | ||
|
|
eda2d6f9fa | ||
|
|
dee576bfeb | ||
|
|
7dda835679 | ||
|
|
1de19fcbc2 | ||
|
|
d8077fdea6 | ||
|
|
9203b23868 | ||
|
|
61feb3aee2 | ||
|
|
bd1f5b978b | ||
|
|
d406c5d81e | ||
|
|
cfa59dc0bb | ||
|
|
8cdafaa828 | ||
|
|
f083a6e5d3 | ||
|
|
75918be261 | ||
|
|
2b0d412070 | ||
|
|
5b910d6f0e | ||
|
|
4d04f633fa | ||
|
|
c7fe6333b5 | ||
|
|
16dac366cf | ||
|
|
860aace2f5 | ||
|
|
844b166fbf | ||
|
|
7e9b5743fb | ||
|
|
7920188417 | ||
|
|
3718bab5cb | ||
|
|
ec9c3dd276 | ||
|
|
ffb8bf15b2 | ||
|
|
22934aa46e | ||
|
|
17a6bfb7dd | ||
|
|
edb01754ea | ||
|
|
1259401889 | ||
|
|
84e2f31415 | ||
|
|
70be7d987e | ||
|
|
9763488577 | ||
|
|
b225e856df | ||
|
|
2f28911395 | ||
|
|
d82be7ac7c | ||
|
|
3783ac9f49 | ||
|
|
5acb2eee91 | ||
|
|
19551b1eb6 | ||
|
|
d59ea25cbe | ||
|
|
dcd6fe8258 | ||
|
|
fac8ae2682 | ||
|
|
9d03856026 | ||
|
|
0eb4a71720 | ||
|
|
007b809ad7 | ||
|
|
66d8e58dcd | ||
|
|
8cb3dde72f | ||
|
|
eb3aa52391 | ||
|
|
c13d2d7208 | ||
|
|
dac463d74a | ||
|
|
d72948ca22 | ||
|
|
ccb26303ad |
|
|
@ -9,8 +9,14 @@ fi
|
||||||
|
|
||||||
cd src/android
|
cd src/android
|
||||||
chmod +x ./gradlew
|
chmod +x ./gradlew
|
||||||
./gradlew assembleRelease
|
|
||||||
./gradlew bundleRelease
|
if [[ "$TARGET" == "googleplay" ]]; then
|
||||||
|
./gradlew assembleGooglePlayRelease
|
||||||
|
./gradlew bundleGooglePlayRelease
|
||||||
|
else
|
||||||
|
./gradlew assembleVanillaRelease
|
||||||
|
./gradlew bundleVanillaRelease
|
||||||
|
fi
|
||||||
|
|
||||||
ccache -s -v
|
ccache -s -v
|
||||||
|
|
||||||
|
|
|
||||||
20
.ci/docker.sh
Executable file
|
|
@ -0,0 +1,20 @@
|
||||||
|
#!/bin/bash -ex
|
||||||
|
|
||||||
|
GITREV="`git show -s --format='%h'`" || true
|
||||||
|
|
||||||
|
if [ "$GITHUB_REF_TYPE" = "tag" ]; then
|
||||||
|
TAG_NAME=$GITHUB_REF_NAME
|
||||||
|
elif [[ -n $GITREV ]]; then
|
||||||
|
TAG_NAME=$GITREV
|
||||||
|
else
|
||||||
|
TAG_NAME=unknown
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Tag name is: $TAG_NAME"
|
||||||
|
|
||||||
|
docker build --no-cache -f docker/azahar-room/Dockerfile -t azahar-room:$TAG_NAME .
|
||||||
|
mkdir -p build
|
||||||
|
FILENAME="azahar-room-$TARGET-$TAG_NAME.dockerimage"
|
||||||
|
docker save azahar-room:$TAG_NAME > build/$FILENAME
|
||||||
|
|
||||||
|
echo "DOCKER_IMAGE_PATH=artifacts/$FILENAME" >> $GITHUB_ENV
|
||||||
133
.ci/libretro-ci.yml
Normal file
|
|
@ -0,0 +1,133 @@
|
||||||
|
.core-defs:
|
||||||
|
variables:
|
||||||
|
JNI_PATH: .
|
||||||
|
CORENAME: azahar
|
||||||
|
API_LEVEL: 21
|
||||||
|
BASE_CORE_ARGS: -DENABLE_LIBRETRO=ON -DENABLE_TESTS=OFF
|
||||||
|
CORE_ARGS: ${BASE_CORE_ARGS}
|
||||||
|
EXTRA_PATH: bin/Release
|
||||||
|
|
||||||
|
variables:
|
||||||
|
STATIC_RETROARCH_BRANCH: master
|
||||||
|
GIT_SUBMODULE_STRATEGY: recursive
|
||||||
|
|
||||||
|
# Inclusion templates, required for the build to work
|
||||||
|
include:
|
||||||
|
################################## DESKTOPS ############################## ##
|
||||||
|
# Windows 64-bit
|
||||||
|
- project: 'libretro-infrastructure/ci-templates'
|
||||||
|
file: '/windows-cmake-mingw.yml'
|
||||||
|
|
||||||
|
# Linux 64-bit
|
||||||
|
- project: 'libretro-infrastructure/ci-templates'
|
||||||
|
file: '/linux-cmake.yml'
|
||||||
|
|
||||||
|
# MacOS x86_64
|
||||||
|
- project: 'libretro-infrastructure/ci-templates'
|
||||||
|
file: '/osx-cmake-x86.yml'
|
||||||
|
|
||||||
|
# MacOS ARM64
|
||||||
|
- project: 'libretro-infrastructure/ci-templates'
|
||||||
|
file: '/osx-cmake-arm64.yml'
|
||||||
|
|
||||||
|
################################## CELLULAR ############################## ##
|
||||||
|
# Android
|
||||||
|
- project: 'libretro-infrastructure/ci-templates'
|
||||||
|
file: '/android-cmake.yml'
|
||||||
|
|
||||||
|
# iOS
|
||||||
|
- project: 'libretro-infrastructure/ci-templates'
|
||||||
|
file: '/ios-cmake.yml'
|
||||||
|
|
||||||
|
# tvOS
|
||||||
|
- project: 'libretro-infrastructure/ci-templates'
|
||||||
|
file: '/tvos-cmake.yml'
|
||||||
|
|
||||||
|
################################## CONSOLES ############################## ##
|
||||||
|
|
||||||
|
# Stages for building
|
||||||
|
stages:
|
||||||
|
- build-prepare
|
||||||
|
- build-shared
|
||||||
|
- build-static
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
#################################### STAGES ##################################
|
||||||
|
##############################################################################
|
||||||
|
#
|
||||||
|
################################### DESKTOPS #################################
|
||||||
|
# Windows 64-bit
|
||||||
|
libretro-build-windows-x64:
|
||||||
|
extends:
|
||||||
|
- .core-defs
|
||||||
|
- .libretro-windows-cmake-x86_64
|
||||||
|
image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-mxe-win-cross-cores:mingw12
|
||||||
|
variables:
|
||||||
|
CORE_ARGS: ${BASE_CORE_ARGS} -DENABLE_LTO=OFF -G Ninja
|
||||||
|
|
||||||
|
# Linux 64-bit
|
||||||
|
libretro-build-linux-x64:
|
||||||
|
extends:
|
||||||
|
- .core-defs
|
||||||
|
- .libretro-linux-cmake-x86_64
|
||||||
|
image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-amd64-ubuntu:backports
|
||||||
|
variables:
|
||||||
|
CORE_ARGS: ${BASE_CORE_ARGS} -DENABLE_LTO=OFF
|
||||||
|
CC: /usr/bin/gcc-12
|
||||||
|
CXX: /usr/bin/g++-12
|
||||||
|
|
||||||
|
# MacOS x86_64
|
||||||
|
libretro-build-osx-x64:
|
||||||
|
tags:
|
||||||
|
- mac-apple-silicon
|
||||||
|
variables:
|
||||||
|
CORE_ARGS: ${BASE_CORE_ARGS} -DCMAKE_OSX_ARCHITECTURES=x86_64
|
||||||
|
MACOSX_DEPLOYMENT_TARGET: "11.0"
|
||||||
|
extends:
|
||||||
|
- .core-defs
|
||||||
|
- .libretro-osx-cmake-x86_64
|
||||||
|
|
||||||
|
# MacOS ARM64
|
||||||
|
libretro-build-osx-arm64:
|
||||||
|
extends:
|
||||||
|
- .core-defs
|
||||||
|
- .libretro-osx-cmake-arm64
|
||||||
|
variables:
|
||||||
|
MACOSX_DEPLOYMENT_TARGET: "11.0"
|
||||||
|
|
||||||
|
################################### CELLULAR #################################
|
||||||
|
# Android ARMv8a
|
||||||
|
android-arm64-v8a:
|
||||||
|
extends:
|
||||||
|
- .libretro-android-cmake-arm64-v8a
|
||||||
|
- .core-defs
|
||||||
|
variables:
|
||||||
|
ANDROID_NDK_VERSION: 26.2.11394342
|
||||||
|
NDK_ROOT: /android-sdk-linux/ndk/$ANDROID_NDK_VERSION
|
||||||
|
LIBNAME: ${CORENAME}_libretro.so
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- $LIBNAME
|
||||||
|
|
||||||
|
# iOS arm64
|
||||||
|
libretro-build-ios-arm64:
|
||||||
|
extends:
|
||||||
|
- .libretro-ios-cmake-arm64
|
||||||
|
- .core-defs
|
||||||
|
variables:
|
||||||
|
CORE_ARGS: ${BASE_CORE_ARGS} -DCITRA_USE_PRECOMPILED_HEADERS=OFF -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_ARCHITECTURES=arm64 -DENABLE_OPT=OFF
|
||||||
|
IOS_MINVER: "14.0"
|
||||||
|
EXTRA_PATH: bin/RelWithDebInfo
|
||||||
|
|
||||||
|
# tvOS arm64
|
||||||
|
libretro-build-tvos-arm64:
|
||||||
|
extends:
|
||||||
|
- .libretro-tvos-cmake-arm64
|
||||||
|
- .core-defs
|
||||||
|
variables:
|
||||||
|
CORE_ARGS: ${BASE_CORE_ARGS} -DCITRA_USE_PRECOMPILED_HEADERS=OFF -DIOS=ON -DCMAKE_SYSTEM_NAME=tvOS -DCMAKE_OSX_SYSROOT=appletvos -DCMAKE_OSX_ARCHITECTURES=arm64 -DENABLE_OPT=OFF
|
||||||
|
MINVER: "14.0"
|
||||||
|
EXTRA_PATH: bin/RelWithDebInfo
|
||||||
|
|
||||||
|
################################### CONSOLES #################################
|
||||||
|
|
||||||
13
.ci/libretro-pack.sh
Executable file
|
|
@ -0,0 +1,13 @@
|
||||||
|
#!/bin/bash -ex
|
||||||
|
|
||||||
|
# Determine the full revision name.
|
||||||
|
GITDATE="`git show -s --date=short --format='%ad' | sed 's/-//g'`"
|
||||||
|
GITREV="`git show -s --format='%h'`"
|
||||||
|
|
||||||
|
REV_NAME="azahar-libretro-$OS-$TARGET-$GITDATE-$GITREV"
|
||||||
|
if [ "$GITHUB_REF_TYPE" = "tag" ]; then
|
||||||
|
REV_NAME="azahar-libretro-$OS-$TARGET-$GITHUB_REF_NAME"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create .zip
|
||||||
|
zip -j -9 $REV_NAME.zip $BUILD_DIR/$EXTRA_PATH/azahar_libretro.*
|
||||||
|
|
@ -17,7 +17,7 @@ puts 'done'
|
||||||
print 'Checking files...'
|
print 'Checking files...'
|
||||||
issue_files = []
|
issue_files = []
|
||||||
branch_changed_files.each do |file_name|
|
branch_changed_files.each do |file_name|
|
||||||
if file_name.end_with?('.cpp', '.h', '.kt', '.kts') and File.file?(file_name)
|
if file_name.end_with?('.cpp', '.h', '.kt', '.kts', '.m', '.mm') and File.file?(file_name)
|
||||||
file_content = File.read(file_name, mode: 'r:bom|utf-8')
|
file_content = File.read(file_name, mode: 'r:bom|utf-8')
|
||||||
if not file_content.start_with?(license_header)
|
if not file_content.start_with?(license_header)
|
||||||
issue_files.push(file_name)
|
issue_files.push(file_name)
|
||||||
|
|
|
||||||
24
.ci/linux.sh
|
|
@ -1,18 +1,23 @@
|
||||||
#!/bin/bash -ex
|
#!/bin/bash -ex
|
||||||
|
|
||||||
if [ "$TARGET" = "appimage" ]; then
|
if [[ "$TARGET" == "appimage"* ]] || [[ "$TARGET" == "clang"* ]]; then
|
||||||
# Compile the AppImage we distribute with Clang.
|
# Compile the AppImage we distribute with Clang.
|
||||||
export EXTRA_CMAKE_FLAGS=(-DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang -DCMAKE_LINKER=/etc/bin/ld.lld)
|
export EXTRA_CMAKE_FLAGS=(-DCMAKE_CXX_COMPILER=clang++
|
||||||
# Bundle required QT wayland libraries
|
-DCMAKE_C_COMPILER=clang
|
||||||
export EXTRA_QT_PLUGINS="waylandcompositor"
|
-DCMAKE_LINKER=/etc/bin/ld.lld
|
||||||
export EXTRA_PLATFORM_PLUGINS="libqwayland-egl.so;libqwayland-generic.so"
|
-DENABLE_ROOM_STANDALONE=OFF)
|
||||||
|
if [ "$TARGET" = "appimage-wayland" ]; then
|
||||||
|
# Bundle required QT wayland libraries
|
||||||
|
export EXTRA_QT_PLUGINS="waylandcompositor"
|
||||||
|
export EXTRA_PLATFORM_PLUGINS="libqwayland-egl.so;libqwayland-generic.so"
|
||||||
|
fi
|
||||||
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=(-DCITRA_USE_PRECOMPILED_HEADERS=OFF)
|
export EXTRA_CMAKE_FLAGS=(-DCITRA_USE_PRECOMPILED_HEADERS=OFF)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$GITHUB_REF_TYPE" == "tag" ]; then
|
if [ "$GITHUB_REF_TYPE" == "tag" ]; then
|
||||||
export EXTRA_CMAKE_FLAGS=($EXTRA_CMAKE_FLAGS -DENABLE_QT_UPDATE_CHECKER=ON)
|
export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" -DENABLE_QT_UPDATE_CHECKER=ON)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
mkdir build && cd build
|
mkdir build && cd build
|
||||||
|
|
@ -20,13 +25,14 @@ cmake .. -G Ninja \
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
|
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
|
||||||
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
|
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
|
||||||
"${EXTRA_CMAKE_FLAGS[@]}" \
|
|
||||||
-DENABLE_QT_TRANSLATION=ON \
|
-DENABLE_QT_TRANSLATION=ON \
|
||||||
-DUSE_DISCORD_PRESENCE=ON
|
-DENABLE_ROOM_STANDALONE=OFF \
|
||||||
|
-DUSE_DISCORD_PRESENCE=ON \
|
||||||
|
"${EXTRA_CMAKE_FLAGS[@]}"
|
||||||
ninja
|
ninja
|
||||||
strip -s bin/Release/*
|
strip -s bin/Release/*
|
||||||
|
|
||||||
if [ "$TARGET" = "appimage" ]; then
|
if [[ "$TARGET" == "appimage"* ]]; then
|
||||||
ninja bundle
|
ninja bundle
|
||||||
# TODO: Our AppImage environment currently uses an older ccache version without the verbose flag.
|
# TODO: Our AppImage environment currently uses an older ccache version without the verbose flag.
|
||||||
ccache -s
|
ccache -s
|
||||||
|
|
|
||||||
|
|
@ -2,16 +2,17 @@
|
||||||
|
|
||||||
ARTIFACTS_LIST=($ARTIFACTS)
|
ARTIFACTS_LIST=($ARTIFACTS)
|
||||||
|
|
||||||
BUNDLE_DIR=build/bundle
|
BUILD_DIR=build
|
||||||
mkdir build
|
UNIVERSAL_DIR=$BUILD_DIR/universal
|
||||||
|
BUNDLE_DIR=$UNIVERSAL_DIR/bundle
|
||||||
|
OTHER_BUNDLE_DIR=$BUILD_DIR/x86_64/bundle
|
||||||
|
|
||||||
# Set up the base artifact to combine into.
|
# Set up the base bundle to combine into.
|
||||||
BASE_ARTIFACT=${ARTIFACTS_LIST[0]}
|
mkdir $UNIVERSAL_DIR
|
||||||
BASE_ARTIFACT_ARCH="${BASE_ARTIFACT##*-}"
|
cp -a $BUILD_DIR/arm64/bundle $UNIVERSAL_DIR
|
||||||
mv $BASE_ARTIFACT $BUNDLE_DIR
|
|
||||||
|
|
||||||
# Executable binary paths that need to be combined.
|
# Executable binary paths that need to be combined.
|
||||||
BIN_PATHS=(azahar-room Azahar.app/Contents/MacOS/azahar)
|
BIN_PATHS=(Azahar.app/Contents/MacOS/azahar)
|
||||||
|
|
||||||
# Dylib paths that need to be combined.
|
# Dylib paths that need to be combined.
|
||||||
IFS=$'\n'
|
IFS=$'\n'
|
||||||
|
|
@ -19,25 +20,25 @@ DYLIB_PATHS=($(cd $BUNDLE_DIR && find . -name '*.dylib'))
|
||||||
unset IFS
|
unset IFS
|
||||||
|
|
||||||
# Combine all of the executable binaries and dylibs.
|
# Combine all of the executable binaries and dylibs.
|
||||||
for OTHER_ARTIFACT in "${ARTIFACTS_LIST[@]:1}"; do
|
for BIN_PATH in "${BIN_PATHS[@]}"; do
|
||||||
OTHER_ARTIFACT_ARCH="${OTHER_ARTIFACT##*-}"
|
lipo -create -output $BUNDLE_DIR/$BIN_PATH $BUNDLE_DIR/$BIN_PATH $OTHER_BUNDLE_DIR/$BIN_PATH
|
||||||
|
|
||||||
for BIN_PATH in "${BIN_PATHS[@]}"; do
|
|
||||||
lipo -create -output $BUNDLE_DIR/$BIN_PATH $BUNDLE_DIR/$BIN_PATH $OTHER_ARTIFACT/$BIN_PATH
|
|
||||||
done
|
|
||||||
|
|
||||||
for DYLIB_PATH in "${DYLIB_PATHS[@]}"; do
|
|
||||||
# Only merge if the libraries do not have conflicting arches, otherwise it will fail.
|
|
||||||
DYLIB_INFO=`file $BUNDLE_DIR/$DYLIB_PATH`
|
|
||||||
OTHER_DYLIB_INFO=`file $OTHER_ARTIFACT/$DYLIB_PATH`
|
|
||||||
if ! [[ "$DYLIB_INFO" =~ "$OTHER_ARTIFACT_ARCH" ]] && ! [[ "$OTHER_DYLIB_INFO" =~ "$BASE_ARTIFACT_ARCH" ]]; then
|
|
||||||
lipo -create -output $BUNDLE_DIR/$DYLIB_PATH $BUNDLE_DIR/$DYLIB_PATH $OTHER_ARTIFACT/$DYLIB_PATH
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
done
|
done
|
||||||
|
|
||||||
|
for DYLIB_PATH in "${DYLIB_PATHS[@]}"; do
|
||||||
|
# Only merge if the libraries do not have conflicting arches, otherwise it will fail.
|
||||||
|
DYLIB_INFO=`file $BUNDLE_DIR/$DYLIB_PATH`
|
||||||
|
|
||||||
|
OTHER_DYLIB_INFO=`file $OTHER_BUNDLE_DIR/$DYLIB_PATH`
|
||||||
|
if ! [[ "$DYLIB_INFO" =~ "x86_64" ]] && ! [[ "$OTHER_DYLIB_INFO" =~ "arm64" ]]; then
|
||||||
|
lipo -create -output $BUNDLE_DIR/$DYLIB_PATH $BUNDLE_DIR/$DYLIB_PATH $OTHER_BUNDLE_DIR/$DYLIB_PATH
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Remove leftover libs so that they aren't distributed
|
||||||
|
rm -rf "${BUNDLE_DIR}/libs"
|
||||||
|
|
||||||
# Re-sign executables and bundles after combining.
|
# Re-sign executables and bundles after combining.
|
||||||
APP_PATHS=(azahar-room Azahar.app)
|
APP_PATHS=(Azahar.app)
|
||||||
for APP_PATH in "${APP_PATHS[@]}"; do
|
for APP_PATH in "${APP_PATHS[@]}"; do
|
||||||
codesign --deep -fs - $BUNDLE_DIR/$APP_PATH
|
codesign --deep -fs - $BUNDLE_DIR/$APP_PATH
|
||||||
done
|
done
|
||||||
|
|
|
||||||
19
.ci/macos.sh
|
|
@ -1,20 +1,23 @@
|
||||||
#!/bin/bash -ex
|
#!/bin/bash -ex
|
||||||
|
|
||||||
mkdir build && cd build
|
if [ "$GITHUB_REF_TYPE" == "tag" ]; then
|
||||||
cmake .. -GNinja \
|
export EXTRA_CMAKE_FLAGS=(-DENABLE_QT_UPDATE_CHECKER=ON)
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p build/$BUILD_ARCH && cd build/$BUILD_ARCH
|
||||||
|
cmake ../.. -GNinja \
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
-DCMAKE_OSX_ARCHITECTURES="$TARGET" \
|
-DCMAKE_OSX_ARCHITECTURES="$BUILD_ARCH" \
|
||||||
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
|
|
||||||
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
|
|
||||||
-DENABLE_QT_TRANSLATION=ON \
|
-DENABLE_QT_TRANSLATION=ON \
|
||||||
-DUSE_DISCORD_PRESENCE=ON
|
-DENABLE_ROOM_STANDALONE=OFF \
|
||||||
|
-DUSE_DISCORD_PRESENCE=ON \
|
||||||
|
"${EXTRA_CMAKE_FLAGS[@]}"
|
||||||
ninja
|
ninja
|
||||||
ninja bundle
|
ninja bundle
|
||||||
mv ./bundle/azahar.app ./bundle/Azahar.app # TODO: Can this be done in CMake?
|
mv ./bundle/azahar.app ./bundle/Azahar.app # TODO: Can this be done in CMake?
|
||||||
|
|
||||||
ccache -s -v
|
|
||||||
|
|
||||||
CURRENT_ARCH=`arch`
|
CURRENT_ARCH=`arch`
|
||||||
if [ "$TARGET" = "$CURRENT_ARCH" ]; then
|
if [ "$BUILD_ARCH" = "$CURRENT_ARCH" ]; then
|
||||||
ctest -VV -C Release
|
ctest -VV -C Release
|
||||||
fi
|
fi
|
||||||
|
|
|
||||||
26
.ci/mxe.sh
Executable file
|
|
@ -0,0 +1,26 @@
|
||||||
|
#!/bin/bash -ex
|
||||||
|
|
||||||
|
# TODO: Why doesn't the CI environment use the PATH set in the Dockerimage?
|
||||||
|
# It works fine when using the image locally.
|
||||||
|
export PATH="/mxe/usr/bin:${PATH}"
|
||||||
|
|
||||||
|
mkdir build && cd build
|
||||||
|
|
||||||
|
if [ "$GITHUB_REF_TYPE" == "tag" ]; then
|
||||||
|
export EXTRA_CMAKE_FLAGS=(-DENABLE_QT_UPDATE_CHECKER=ON)
|
||||||
|
fi
|
||||||
|
|
||||||
|
x86_64-w64-mingw32.shared-cmake .. \
|
||||||
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
|
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
|
||||||
|
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
|
||||||
|
-DENABLE_QT_TRANSLATION=ON \
|
||||||
|
-DUSE_DISCORD_PRESENCE=ON \
|
||||||
|
-DUSE_SYSTEM_BOOST=ON \
|
||||||
|
-DUSE_SYSTEM_CRYPTOPP=ON \
|
||||||
|
"${EXTRA_CMAKE_FLAGS[@]}"
|
||||||
|
x86_64-w64-mingw32.shared-cmake --build . -- -j$(nproc)
|
||||||
|
x86_64-w64-mingw32.shared-strip -s bin/Release/*.exe
|
||||||
|
make bundle
|
||||||
|
|
||||||
|
ccache -s -v
|
||||||
42
.ci/pack.sh
|
|
@ -3,20 +3,21 @@
|
||||||
# Determine the full revision name.
|
# Determine the full revision name.
|
||||||
GITDATE="`git show -s --date=short --format='%ad' | sed 's/-//g'`"
|
GITDATE="`git show -s --date=short --format='%ad' | sed 's/-//g'`"
|
||||||
GITREV="`git show -s --format='%h'`"
|
GITREV="`git show -s --format='%h'`"
|
||||||
REV_NAME="azahar-$OS-$TARGET-$GITDATE-$GITREV"
|
|
||||||
|
|
||||||
# Determine the name of the release being built.
|
|
||||||
if [ "$GITHUB_REF_TYPE" = "tag" ]; then
|
|
||||||
RELEASE_NAME=azahar-$GITHUB_REF_NAME
|
|
||||||
REV_NAME="azahar-$GITHUB_REF_NAME-$OS-$TARGET"
|
|
||||||
else
|
|
||||||
RELEASE_NAME=azahar-head
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Archive and upload the artifacts.
|
# Archive and upload the artifacts.
|
||||||
mkdir artifacts
|
mkdir -p artifacts
|
||||||
|
|
||||||
function pack_artifacts() {
|
function pack_artifacts() {
|
||||||
|
REV_NAME="azahar-$OS-$TARGET-$GITDATE-$GITREV"
|
||||||
|
|
||||||
|
# Determine the name of the release being built.
|
||||||
|
if [ "$GITHUB_REF_TYPE" = "tag" ]; then
|
||||||
|
RELEASE_NAME=azahar-$GITHUB_REF_NAME
|
||||||
|
REV_NAME="azahar-$OS-$TARGET-$GITHUB_REF_NAME"
|
||||||
|
else
|
||||||
|
RELEASE_NAME=azahar-head
|
||||||
|
fi
|
||||||
|
|
||||||
ARTIFACTS_PATH="$1"
|
ARTIFACTS_PATH="$1"
|
||||||
|
|
||||||
# Set up root directory for archive.
|
# Set up root directory for archive.
|
||||||
|
|
@ -35,10 +36,10 @@ function pack_artifacts() {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Create .zip/.tar.gz
|
# Create .zip/.tar.gz
|
||||||
if [ "$OS" = "windows" ]; then
|
if [ "$OS" = "windows" ] && [ "$TARGET" != "mxe" ]; then
|
||||||
ARCHIVE_FULL_NAME="$ARCHIVE_NAME.zip"
|
ARCHIVE_FULL_NAME="$ARCHIVE_NAME.zip"
|
||||||
powershell Compress-Archive "$REV_NAME" "$ARCHIVE_FULL_NAME"
|
powershell Compress-Archive "$REV_NAME" "$ARCHIVE_FULL_NAME"
|
||||||
elif [ "$OS" = "android" ] || [ "$OS" = "macos" ]; then
|
elif [ "$OS" = "android" ] || [ "$OS" = "macos" ] || [ "$TARGET" = "mxe" ]; then
|
||||||
ARCHIVE_FULL_NAME="$ARCHIVE_NAME.zip"
|
ARCHIVE_FULL_NAME="$ARCHIVE_NAME.zip"
|
||||||
zip -r "$ARCHIVE_FULL_NAME" "$REV_NAME"
|
zip -r "$ARCHIVE_FULL_NAME" "$REV_NAME"
|
||||||
else
|
else
|
||||||
|
|
@ -50,22 +51,29 @@ function pack_artifacts() {
|
||||||
rm -rf "$REV_NAME"
|
rm -rf "$REV_NAME"
|
||||||
}
|
}
|
||||||
|
|
||||||
if [ "$OS" = "windows" ] && [ "$GITHUB_REF_TYPE" = "tag" ]; then
|
|
||||||
# Move the installer to the artifacts directory
|
|
||||||
mv src/installer/bin/*.exe artifacts/
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$UNPACKED" ]; then
|
if [ -n "$UNPACKED" ]; then
|
||||||
# Copy the artifacts to be uploaded unpacked.
|
# Copy the artifacts to be uploaded unpacked.
|
||||||
for ARTIFACT in build/bundle/*; do
|
for ARTIFACT in build/bundle/*; do
|
||||||
FILENAME=$(basename "$ARTIFACT")
|
FILENAME=$(basename "$ARTIFACT")
|
||||||
EXTENSION="${FILENAME##*.}"
|
EXTENSION="${FILENAME##*.}"
|
||||||
|
|
||||||
|
# TODO: Deduplicate
|
||||||
|
REV_NAME="azahar-$OS-$TARGET-$GITDATE-$GITREV"
|
||||||
|
|
||||||
|
# Determine the name of the release being built.
|
||||||
|
if [ "$GITHUB_REF_TYPE" = "tag" ]; then
|
||||||
|
RELEASE_NAME=azahar-$GITHUB_REF_NAME
|
||||||
|
REV_NAME="azahar-$OS-$TARGET-$GITHUB_REF_NAME"
|
||||||
|
else
|
||||||
|
RELEASE_NAME=azahar-head
|
||||||
|
fi
|
||||||
|
|
||||||
mv "$ARTIFACT" "artifacts/$REV_NAME.$EXTENSION"
|
mv "$ARTIFACT" "artifacts/$REV_NAME.$EXTENSION"
|
||||||
done
|
done
|
||||||
elif [ -n "$PACK_INDIVIDUALLY" ]; then
|
elif [ -n "$PACK_INDIVIDUALLY" ]; then
|
||||||
# Pack and upload the artifacts one-by-one.
|
# Pack and upload the artifacts one-by-one.
|
||||||
for ARTIFACT in build/bundle/*; do
|
for ARTIFACT in build/bundle/*; do
|
||||||
|
TARGET=$(basename "$ARTIFACT")
|
||||||
pack_artifacts "$ARTIFACT"
|
pack_artifacts "$ARTIFACT"
|
||||||
done
|
done
|
||||||
else
|
else
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,10 @@ GITDATE="`git show -s --date=short --format='%ad' | sed 's/-//g'`"
|
||||||
GITREV="`git show -s --format='%h'`"
|
GITREV="`git show -s --format='%h'`"
|
||||||
REV_NAME="azahar-unified-source-${GITDATE}-${GITREV}"
|
REV_NAME="azahar-unified-source-${GITDATE}-${GITREV}"
|
||||||
|
|
||||||
|
if [ "$GITHUB_REF_TYPE" = "tag" ]; then
|
||||||
|
REV_NAME="azahar-unified-source-$GITHUB_REF_NAME"
|
||||||
|
fi
|
||||||
|
|
||||||
COMPAT_LIST='dist/compatibility_list/compatibility_list.json'
|
COMPAT_LIST='dist/compatibility_list/compatibility_list.json'
|
||||||
|
|
||||||
mkdir artifacts
|
mkdir artifacts
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,18 @@
|
||||||
#!/bin/sh -ex
|
#!/bin/sh -ex
|
||||||
|
|
||||||
mkdir build && cd build
|
mkdir build && cd build
|
||||||
|
|
||||||
|
if [ "$GITHUB_REF_TYPE" == "tag" ]; then
|
||||||
|
export EXTRA_CMAKE_FLAGS=(-DENABLE_QT_UPDATE_CHECKER=ON)
|
||||||
|
fi
|
||||||
|
|
||||||
cmake .. -G Ninja \
|
cmake .. -G Ninja \
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
|
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
|
||||||
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
|
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
|
||||||
-DENABLE_QT_TRANSLATION=ON \
|
-DENABLE_QT_TRANSLATION=ON \
|
||||||
-DUSE_DISCORD_PRESENCE=ON
|
-DUSE_DISCORD_PRESENCE=ON \
|
||||||
|
"${EXTRA_CMAKE_FLAGS[@]}"
|
||||||
ninja
|
ninja
|
||||||
ninja bundle
|
ninja bundle
|
||||||
strip -s bundle/*.exe
|
strip -s bundle/*.exe
|
||||||
|
|
|
||||||
16
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
- [ ] I have read the [Azahar AI Policy document](https://github.com/azahar-emu/azahar/blob/master/AI-POLICY.md) and have disclosed any use of AI if applicable under those terms.
|
||||||
|
---------
|
||||||
|
|
||||||
|
---
|
||||||
|
<!--
|
||||||
|
If you are contributing to Azahar for the first time please
|
||||||
|
keep the block of text between `---` and write your
|
||||||
|
PR description below it. Do not write anything inside
|
||||||
|
or change this block of text!
|
||||||
|
|
||||||
|
If you are a recurrent contributor, remove this entire
|
||||||
|
block of text and proceed as normal.
|
||||||
|
-->
|
||||||
|
|
||||||
|

|
||||||
|
---
|
||||||
BIN
.github/ignore_unless_human.png
vendored
Normal file
|
After Width: | Height: | Size: 14 KiB |
387
.github/workflows/build.yml
vendored
|
|
@ -7,26 +7,112 @@ on:
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [ master ]
|
branches: [ master ]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
id-token: write
|
||||||
|
contents: read
|
||||||
|
attestations: write
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
source:
|
source:
|
||||||
if: ${{ !github.head_ref }}
|
if: ${{ !github.head_ref }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: Pack
|
- name: Pack
|
||||||
run: ./.ci/source.sh
|
run: ./.ci/source.sh
|
||||||
|
- name: Generate SBOM
|
||||||
|
if: ${{ github.ref_type == 'tag' }}
|
||||||
|
uses: anchore/sbom-action@v0
|
||||||
|
with:
|
||||||
|
path: ./
|
||||||
|
format: spdx-json
|
||||||
|
output-file: artifacts/source.spdx.json
|
||||||
|
upload-artifact: false
|
||||||
- name: Upload
|
- name: Upload
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: source
|
name: source
|
||||||
path: artifacts/
|
path: artifacts/
|
||||||
linux:
|
- name: Attest artifacts
|
||||||
|
if: ${{ github.ref_type == 'tag' }}
|
||||||
|
uses: actions/attest@v4
|
||||||
|
with:
|
||||||
|
subject-path: |
|
||||||
|
artifacts/*.tar.xz
|
||||||
|
sbom-path: artifacts/source.spdx.json
|
||||||
|
|
||||||
|
linux-x86_64:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
strategy:
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
target: ["appimage", "fresh"]
|
target: ["appimage", "appimage-wayland", "gcc-nopch"]
|
||||||
|
container:
|
||||||
|
image: opensauce04/azahar-build-environment:latest
|
||||||
|
options: -u 1001
|
||||||
|
env:
|
||||||
|
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
||||||
|
CCACHE_COMPILERCHECK: content
|
||||||
|
CCACHE_SLOPPINESS: time_macros
|
||||||
|
OS: linux
|
||||||
|
TARGET: ${{ matrix.target }}
|
||||||
|
SHOULD_RUN: ${{ (matrix.target != 'appimage-wayland' || github.ref_type == 'tag') }}
|
||||||
|
CACHE_ENABLED: ${{ github.ref_type != 'tag' }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
if: ${{ env.SHOULD_RUN == 'true' }}
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
- name: Set up cache
|
||||||
|
if: ${{ env.SHOULD_RUN == 'true' && env.CACHE_ENABLED == 'true' }}
|
||||||
|
uses: actions/cache@v5
|
||||||
|
with:
|
||||||
|
path: ${{ env.CCACHE_DIR }}
|
||||||
|
key: ${{ github.job }}-${{ matrix.target }}-${{ github.sha }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ github.job }}-${{ matrix.target }}-
|
||||||
|
- name: Build
|
||||||
|
if: ${{ env.SHOULD_RUN == 'true' }}
|
||||||
|
run: ./.ci/linux.sh
|
||||||
|
- name: Move AppImage to artifacts directory
|
||||||
|
if: ${{ contains(matrix.target, 'appimage') && env.SHOULD_RUN == 'true' }}
|
||||||
|
run: |
|
||||||
|
mkdir -p artifacts
|
||||||
|
mv build/bundle/*.AppImage artifacts/
|
||||||
|
- name: Rename AppImage
|
||||||
|
if: ${{ matrix.target == 'appimage-wayland' && env.SHOULD_RUN == 'true' }}
|
||||||
|
run: |
|
||||||
|
mv artifacts/azahar.AppImage artifacts/azahar-wayland.AppImage
|
||||||
|
- name: Generate SBOM
|
||||||
|
if: ${{ contains(matrix.target, 'appimage') && github.ref_type == 'tag' && env.SHOULD_RUN == 'true' }}
|
||||||
|
uses: anchore/sbom-action@v0
|
||||||
|
with:
|
||||||
|
path: build/
|
||||||
|
format: spdx-json
|
||||||
|
output-file: artifacts/linux-x86_64-${{ matrix.target }}.spdx.json
|
||||||
|
upload-artifact: false
|
||||||
|
- name: Upload
|
||||||
|
if: ${{ contains(matrix.target, 'appimage') && env.SHOULD_RUN == 'true' }}
|
||||||
|
uses: actions/upload-artifact@v7
|
||||||
|
with:
|
||||||
|
name: ${{ github.job }}-${{ matrix.target }}
|
||||||
|
path: artifacts/
|
||||||
|
- name: Attest artifacts
|
||||||
|
if: ${{ contains(matrix.target, 'appimage') && github.ref_type == 'tag' && env.SHOULD_RUN == 'true' }}
|
||||||
|
uses: actions/attest@v4
|
||||||
|
with:
|
||||||
|
subject-path: |
|
||||||
|
artifacts/*.AppImage
|
||||||
|
sbom-path: artifacts/linux-x86_64-${{ matrix.target }}.spdx.json
|
||||||
|
|
||||||
|
linux-arm64:
|
||||||
|
runs-on: ubuntu-24.04-arm
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
target: ["clang", "gcc-nopch"]
|
||||||
container:
|
container:
|
||||||
image: opensauce04/azahar-build-environment:latest
|
image: opensauce04/azahar-build-environment:latest
|
||||||
options: -u 1001
|
options: -u 1001
|
||||||
|
|
@ -37,96 +123,94 @@ jobs:
|
||||||
OS: linux
|
OS: linux
|
||||||
TARGET: ${{ matrix.target }}
|
TARGET: ${{ matrix.target }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: Set up cache
|
- name: Set up cache
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v5
|
||||||
with:
|
with:
|
||||||
path: ${{ env.CCACHE_DIR }}
|
path: ${{ env.CCACHE_DIR }}
|
||||||
key: ${{ runner.os }}-${{ matrix.target }}-${{ github.sha }}
|
key: ${{ github.job }}-${{ matrix.target }}-${{ github.sha }}
|
||||||
restore-keys: |
|
restore-keys: |
|
||||||
${{ runner.os }}-${{ matrix.target }}-
|
${{ github.job }}-${{ matrix.target }}-
|
||||||
- name: Build
|
- name: Build
|
||||||
run: ./.ci/linux.sh
|
run: ./.ci/linux.sh
|
||||||
- name: Pack
|
|
||||||
run: ./.ci/pack.sh
|
|
||||||
if: ${{ matrix.target == 'appimage' }}
|
|
||||||
- name: Upload
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
if: ${{ matrix.target == 'appimage' }}
|
|
||||||
with:
|
|
||||||
name: ${{ env.OS }}-${{ env.TARGET }}
|
|
||||||
path: artifacts/
|
|
||||||
macos:
|
macos:
|
||||||
runs-on: ${{ (matrix.target == 'x86_64' && 'macos-13') || 'macos-14' }}
|
runs-on: 'macos-26'
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
target: ["x86_64", "arm64"]
|
|
||||||
env:
|
env:
|
||||||
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
||||||
CCACHE_COMPILERCHECK: content
|
CCACHE_COMPILERCHECK: content
|
||||||
CCACHE_SLOPPINESS: time_macros
|
CCACHE_SLOPPINESS: time_macros
|
||||||
|
CACHE_ENABLED: ${{ github.ref_type != 'tag' }}
|
||||||
OS: macos
|
OS: macos
|
||||||
TARGET: ${{ matrix.target }}
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: Set up cache
|
- name: Set up cache
|
||||||
uses: actions/cache@v4
|
if: ${{ env.CACHE_ENABLED == 'true' }}
|
||||||
|
uses: actions/cache@v5
|
||||||
with:
|
with:
|
||||||
path: ${{ env.CCACHE_DIR }}
|
path: ${{ env.CCACHE_DIR }}
|
||||||
key: ${{ runner.os }}-${{ matrix.target }}-${{ github.sha }}
|
key: ${{ runner.os }}-${{ github.sha }}
|
||||||
restore-keys: |
|
restore-keys: |
|
||||||
${{ runner.os }}-${{ matrix.target }}-
|
${{ runner.os }}-
|
||||||
- name: Install tools
|
- name: Install tools
|
||||||
run: brew install ccache ninja spirv-tools
|
run: brew install ccache ninja spirv-tools
|
||||||
- name: Build
|
- name: Build (x86_64)
|
||||||
run: ./.ci/macos.sh
|
run: BUILD_ARCH=x86_64 ./.ci/macos.sh
|
||||||
- name: Prepare outputs for caching
|
- name: Build (arm64)
|
||||||
run: mv build/bundle $OS-$TARGET
|
run: BUILD_ARCH=arm64 ./.ci/macos.sh
|
||||||
- name: Cache outputs for universal build
|
|
||||||
uses: actions/cache/save@v4
|
|
||||||
with:
|
|
||||||
path: ${{ env.OS }}-${{ env.TARGET }}
|
|
||||||
key: ${{ runner.os }}-${{ matrix.target }}-${{ github.sha }}-${{ github.run_id }}-${{ github.run_attempt }}
|
|
||||||
macos-universal:
|
|
||||||
runs-on: macos-14
|
|
||||||
needs: macos
|
|
||||||
env:
|
|
||||||
OS: macos
|
|
||||||
TARGET: universal
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- name: Download x86_64 build from cache
|
|
||||||
uses: actions/cache/restore@v4
|
|
||||||
with:
|
|
||||||
path: ${{ env.OS }}-x86_64
|
|
||||||
key: ${{ runner.os }}-x86_64-${{ github.sha }}-${{ github.run_id }}-${{ github.run_attempt }}
|
|
||||||
fail-on-cache-miss: true
|
|
||||||
- name: Download ARM64 build from cache
|
|
||||||
uses: actions/cache/restore@v4
|
|
||||||
with:
|
|
||||||
path: ${{ env.OS }}-arm64
|
|
||||||
key: ${{ runner.os }}-arm64-${{ github.sha }}-${{ github.run_id }}-${{ github.run_attempt }}
|
|
||||||
fail-on-cache-miss: true
|
|
||||||
- name: Create universal app
|
- name: Create universal app
|
||||||
run: ./.ci/macos-universal.sh
|
run: ./.ci/macos-universal.sh
|
||||||
env:
|
- name: Prepare for packing
|
||||||
ARTIFACTS: ${{ env.OS }}-x86_64 ${{ env.OS }}-arm64
|
run: |
|
||||||
|
mkdir build/bundle
|
||||||
|
cp -r build/x86_64/bundle build/bundle/x86_64
|
||||||
|
cp -r build/arm64/bundle build/bundle/arm64
|
||||||
|
cp -r build/universal/bundle build/bundle/universal
|
||||||
- name: Pack
|
- name: Pack
|
||||||
|
env:
|
||||||
|
PACK_INDIVIDUALLY: 1
|
||||||
run: ./.ci/pack.sh
|
run: ./.ci/pack.sh
|
||||||
- name: Upload
|
- name: Generate SBOM
|
||||||
uses: actions/upload-artifact@v4
|
if: ${{ github.ref_type == 'tag' }}
|
||||||
|
uses: anchore/sbom-action@v0
|
||||||
with:
|
with:
|
||||||
name: ${{ env.OS }}-${{ env.TARGET }}
|
path: build/
|
||||||
|
format: spdx-json
|
||||||
|
output-file: artifacts/macos.spdx.json
|
||||||
|
upload-artifact: false
|
||||||
|
- name: Upload
|
||||||
|
uses: actions/upload-artifact@v7
|
||||||
|
with:
|
||||||
|
name: ${{ env.OS }}
|
||||||
path: artifacts/
|
path: artifacts/
|
||||||
|
- name: Attest artifacts
|
||||||
|
if: ${{ github.ref_type == 'tag' }}
|
||||||
|
uses: actions/attest@v4
|
||||||
|
with:
|
||||||
|
subject-path: |
|
||||||
|
artifacts/*.zip
|
||||||
|
sbom-path: artifacts/macos.spdx.json
|
||||||
|
|
||||||
windows:
|
windows:
|
||||||
runs-on: windows-latest
|
|
||||||
strategy:
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
target: ["msvc", "msys2"]
|
include:
|
||||||
|
- target: msvc
|
||||||
|
os: windows-latest
|
||||||
|
- target: msys2
|
||||||
|
os: windows-latest
|
||||||
|
- target: mxe
|
||||||
|
os: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: opensauce04/azahar-build-environment:latest
|
||||||
|
options: -u 1001
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
container: ${{ matrix.container }}
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
shell: ${{ (matrix.target == 'msys2' && 'msys2') || 'bash' }} {0}
|
shell: ${{ (matrix.target == 'msys2' && 'msys2') || 'bash' }} {0}
|
||||||
|
|
@ -134,33 +218,35 @@ jobs:
|
||||||
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
||||||
CCACHE_COMPILERCHECK: content
|
CCACHE_COMPILERCHECK: content
|
||||||
CCACHE_SLOPPINESS: time_macros
|
CCACHE_SLOPPINESS: time_macros
|
||||||
|
CACHE_ENABLED: ${{ github.ref_type != 'tag' }}
|
||||||
OS: windows
|
OS: windows
|
||||||
TARGET: ${{ matrix.target }}
|
TARGET: ${{ matrix.target }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: Set up cache
|
- name: Set up cache
|
||||||
uses: actions/cache@v4
|
if: ${{ env.CACHE_ENABLED == 'true' }}
|
||||||
|
uses: actions/cache@v5
|
||||||
with:
|
with:
|
||||||
path: ${{ env.CCACHE_DIR }}
|
path: ${{ env.CCACHE_DIR }}
|
||||||
key: ${{ runner.os }}-${{ matrix.target }}-${{ github.sha }}
|
key: ${{ runner.os }}-${{ matrix.target }}-${{ github.sha }}
|
||||||
restore-keys: |
|
restore-keys: |
|
||||||
${{ runner.os }}-${{ matrix.target }}-
|
${{ runner.os }}-${{ matrix.target }}-
|
||||||
- name: Set up MSVC
|
- name: Set up MSVC
|
||||||
uses: ilammy/msvc-dev-cmd@v1
|
|
||||||
if: ${{ matrix.target == 'msvc' }}
|
if: ${{ matrix.target == 'msvc' }}
|
||||||
|
uses: azahar-emu/msvc-dev-cmd@v1
|
||||||
- name: Install extra tools (MSVC)
|
- name: Install extra tools (MSVC)
|
||||||
run: choco install ccache ninja wget
|
|
||||||
if: ${{ matrix.target == 'msvc' }}
|
if: ${{ matrix.target == 'msvc' }}
|
||||||
|
run: choco install ccache ninja ptime wget
|
||||||
- name: Install vulkan-sdk (MSVC)
|
- name: Install vulkan-sdk (MSVC)
|
||||||
run: |
|
|
||||||
wget https://sdk.lunarg.com/sdk/download/1.3.296.0/windows/VulkanSDK-1.3.296.0-Installer.exe -O D:/a/_temp/vulkan.exe
|
|
||||||
D:/a/_temp/vulkan.exe --accept-licenses --default-answer --confirm-command install
|
|
||||||
if: ${{ matrix.target == 'msvc' }}
|
if: ${{ matrix.target == 'msvc' }}
|
||||||
|
run: |
|
||||||
|
wget https://sdk.lunarg.com/sdk/download/1.4.304.1/windows/VulkanSDK-1.4.304.1-Installer.exe -O D:/a/_temp/vulkan.exe
|
||||||
|
D:/a/_temp/vulkan.exe --accept-licenses --default-answer --confirm-command install
|
||||||
- name: Set up MSYS2
|
- name: Set up MSYS2
|
||||||
uses: msys2/setup-msys2@v2
|
|
||||||
if: ${{ matrix.target == 'msys2' }}
|
if: ${{ matrix.target == 'msys2' }}
|
||||||
|
uses: msys2/setup-msys2@v2
|
||||||
with:
|
with:
|
||||||
msystem: clang64
|
msystem: clang64
|
||||||
update: true
|
update: true
|
||||||
|
|
@ -168,100 +254,191 @@ jobs:
|
||||||
pacboy: >-
|
pacboy: >-
|
||||||
toolchain:p ccache:p cmake:p ninja:p spirv-tools:p
|
toolchain:p ccache:p cmake:p ninja:p spirv-tools:p
|
||||||
qt6-base:p qt6-multimedia:p qt6-multimedia-wmf:p qt6-tools:p qt6-translations:p
|
qt6-base:p qt6-multimedia:p qt6-multimedia-wmf:p qt6-tools:p qt6-translations:p
|
||||||
|
- name: Install extra tools (MSYS2)
|
||||||
|
if: ${{ matrix.target == 'msys2' }}
|
||||||
|
uses: crazy-max/ghaction-chocolatey@v4
|
||||||
|
with:
|
||||||
|
args: install ptime wget
|
||||||
- name: Install NSIS
|
- name: Install NSIS
|
||||||
|
if: ${{ github.ref_type == 'tag' && matrix.target != 'mxe' }}
|
||||||
run: |
|
run: |
|
||||||
Invoke-WebRequest https://deac-riga.dl.sourceforge.net/project/nsis/NSIS%203/3.10/nsis-3.10-setup.exe?viasf=1 -OutFile C:\WINDOWS\Temp\nsis-3.10-setup.exe
|
wget https://download.sourceforge.net/project/nsis/NSIS%203/3.11/nsis-3.11-setup.exe -O D:/a/_temp/nsis-setup.exe
|
||||||
Invoke-Expression "& C:\WINDOWS\Temp\nsis-3.10-setup.exe \S"
|
ptime D:/a/_temp/nsis-setup.exe /S
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
- name: Disable line ending translation
|
- name: Disable line ending translation
|
||||||
run: git config --global core.autocrlf input
|
run: git config --global core.autocrlf input
|
||||||
- name: Build
|
- name: Build (Native)
|
||||||
|
if: ${{ matrix.target != 'mxe' }}
|
||||||
run: ./.ci/windows.sh
|
run: ./.ci/windows.sh
|
||||||
- name: Generate installer
|
- name: Build (MXE)
|
||||||
if: ${{ github.ref_type == 'tag' }}
|
if: ${{ matrix.target == 'mxe' }}
|
||||||
|
run: ./.ci/mxe.sh
|
||||||
|
- name: Generate installer (Native)
|
||||||
|
if: ${{ github.ref_type == 'tag' && matrix.target != 'mxe' }}
|
||||||
run: |
|
run: |
|
||||||
cd src\installer
|
cd src\installer
|
||||||
"C:\Program Files (x86)\NSIS\makensis.exe" /DPRODUCT_VARIANT=${{ matrix.target }} /DPRODUCT_VERSION=${{ github.ref_name }} citra.nsi
|
"C:\Program Files (x86)\NSIS\makensis.exe" /DPRODUCT_VARIANT=${{ matrix.target }} /DPRODUCT_VERSION=${{ github.ref_name }} citra.nsi
|
||||||
mkdir bin
|
mkdir ..\..\artifacts 2> NUL
|
||||||
move /y *.exe bin\
|
move /y *.exe ..\..\artifacts\
|
||||||
shell: cmd
|
shell: cmd
|
||||||
|
- name: Generate installer (MXE)
|
||||||
|
if: ${{ github.ref_type == 'tag' && matrix.target == 'mxe' }}
|
||||||
|
run: |
|
||||||
|
export PATH="/mxe/usr/bin:${PATH}" # TODO: Why do we have to do this if it's in the image?
|
||||||
|
cd src/installer
|
||||||
|
x86_64-w64-mingw32.shared-makensis -DPRODUCT_VARIANT=${{ matrix.target }} -DPRODUCT_VERSION=${{ github.ref_name }} citra.nsi
|
||||||
|
mkdir -p ../../artifacts
|
||||||
|
mv ./*.exe ../../artifacts/
|
||||||
- name: Pack
|
- name: Pack
|
||||||
run: ./.ci/pack.sh
|
run: ./.ci/pack.sh
|
||||||
|
- name: Generate SBOM
|
||||||
|
if: ${{ github.ref_type == 'tag' }}
|
||||||
|
uses: anchore/sbom-action@v0
|
||||||
|
with:
|
||||||
|
path: build/
|
||||||
|
format: spdx-json
|
||||||
|
output-file: artifacts/windows-${{ matrix.target }}.spdx.json
|
||||||
|
upload-artifact: false
|
||||||
- name: Upload
|
- name: Upload
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: ${{ env.OS }}-${{ env.TARGET }}
|
name: ${{ env.OS }}-${{ env.TARGET }}
|
||||||
path: artifacts/
|
path: artifacts/
|
||||||
|
- name: Attest artifacts
|
||||||
|
if: ${{ github.ref_type == 'tag' }}
|
||||||
|
uses: actions/attest@v4
|
||||||
|
with:
|
||||||
|
subject-path: |
|
||||||
|
artifacts/*.zip
|
||||||
|
artifacts/*.exe
|
||||||
|
sbom-path: artifacts/windows-${{ matrix.target }}.spdx.json
|
||||||
|
|
||||||
android:
|
android:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
target: ["vanilla", "googleplay"]
|
||||||
env:
|
env:
|
||||||
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
||||||
CCACHE_COMPILERCHECK: content
|
CCACHE_COMPILERCHECK: content
|
||||||
CCACHE_SLOPPINESS: time_macros
|
CCACHE_SLOPPINESS: time_macros
|
||||||
|
CACHE_ENABLED: ${{ github.ref_type != 'tag' }}
|
||||||
OS: android
|
OS: android
|
||||||
TARGET: universal
|
TARGET: ${{ matrix.target }}
|
||||||
|
SHOULD_RUN: ${{ (matrix.target == 'vanilla' || github.ref_type == 'tag') }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
|
if: ${{ env.SHOULD_RUN == 'true' }}
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: Set up cache
|
- name: Set up cache
|
||||||
uses: actions/cache@v4
|
if: ${{ env.SHOULD_RUN == 'true' && env.CACHE_ENABLED == 'true' }}
|
||||||
|
uses: actions/cache@v5
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
~/.gradle/caches
|
~/.gradle/caches
|
||||||
~/.gradle/wrapper
|
~/.gradle/wrapper
|
||||||
${{ env.CCACHE_DIR }}
|
${{ env.CCACHE_DIR }}
|
||||||
key: ${{ runner.os }}-android-${{ github.sha }}
|
key: ${{ runner.os }}-${{ env.OS }}-${{ matrix.target }}-${{ github.sha }}
|
||||||
restore-keys: |
|
restore-keys: |
|
||||||
${{ runner.os }}-android-
|
${{ runner.os }}-${{ env.OS }}-${{ matrix.target }}-
|
||||||
- name: Set tag name
|
- name: Set tag name
|
||||||
|
if: ${{ env.SHOULD_RUN == 'true' }}
|
||||||
run: |
|
run: |
|
||||||
if [[ "$GITHUB_REF_TYPE" == "tag" ]]; then
|
if [[ "$GITHUB_REF_TYPE" == "tag" ]]; then
|
||||||
echo "GIT_TAG_NAME=$GITHUB_REF_NAME" >> $GITHUB_ENV
|
echo "GIT_TAG_NAME=$GITHUB_REF_NAME" >> $GITHUB_ENV
|
||||||
fi
|
fi
|
||||||
echo $GIT_TAG_NAME
|
echo $GIT_TAG_NAME
|
||||||
- name: Deps
|
- name: Install tools
|
||||||
|
if: ${{ env.SHOULD_RUN == 'true' }}
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update -y
|
sudo apt-get update -y
|
||||||
sudo apt-get install ccache apksigner -y
|
sudo apt-get install ccache apksigner -y
|
||||||
|
- name: Update Android SDK CMake version
|
||||||
|
if: ${{ env.SHOULD_RUN == 'true' }}
|
||||||
|
run: |
|
||||||
|
echo "y" | ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager "cmake;3.30.3"
|
||||||
- name: Build
|
- name: Build
|
||||||
|
if: ${{ env.SHOULD_RUN == 'true' }}
|
||||||
run: JAVA_HOME=$JAVA_HOME_17_X64 ./.ci/android.sh
|
run: JAVA_HOME=$JAVA_HOME_17_X64 ./.ci/android.sh
|
||||||
env:
|
env:
|
||||||
ANDROID_KEYSTORE_B64: ${{ secrets.ANDROID_KEYSTORE_B64 }}
|
ANDROID_KEYSTORE_B64: ${{ secrets.ANDROID_KEYSTORE_B64 }}
|
||||||
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
|
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
|
||||||
ANDROID_KEYSTORE_PASS: ${{ secrets.ANDROID_KEYSTORE_PASS }}
|
ANDROID_KEYSTORE_PASS: ${{ secrets.ANDROID_KEYSTORE_PASS }}
|
||||||
- name: Pack
|
- name: Pack
|
||||||
|
if: ${{ env.SHOULD_RUN == 'true' }}
|
||||||
run: ../../../.ci/pack.sh
|
run: ../../../.ci/pack.sh
|
||||||
working-directory: src/android/app
|
working-directory: src/android/app
|
||||||
env:
|
env:
|
||||||
UNPACKED: 1
|
UNPACKED: 1
|
||||||
|
- name: Generate SBOM
|
||||||
|
if: ${{ github.ref_type == 'tag' }}
|
||||||
|
uses: anchore/sbom-action@v0
|
||||||
|
with:
|
||||||
|
path: src/android
|
||||||
|
format: spdx-json
|
||||||
|
output-file: src/android/app/artifacts/android-${{ matrix.target }}.spdx.json
|
||||||
|
upload-artifact: false
|
||||||
- name: Upload
|
- name: Upload
|
||||||
uses: actions/upload-artifact@v4
|
if: ${{ env.SHOULD_RUN == 'true' }}
|
||||||
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: ${{ env.OS }}-${{ env.TARGET }}
|
name: ${{ env.OS }}-${{ env.TARGET }}
|
||||||
path: src/android/app/artifacts/
|
path: src/android/app/artifacts/
|
||||||
ios:
|
- name: Attest artifacts
|
||||||
runs-on: macos-14
|
if: ${{ github.ref_type == 'tag' }}
|
||||||
if: ${{ !startsWith(github.ref, 'refs/tags/') }}
|
uses: actions/attest@v4
|
||||||
|
with:
|
||||||
|
subject-path: |
|
||||||
|
src/android/app/artifacts/*.apk
|
||||||
|
src/android/app/artifacts/*.aab
|
||||||
|
sbom-path: src/android/app/artifacts/android-${{ matrix.target }}.spdx.json
|
||||||
|
|
||||||
|
docker:
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- target: x86_64
|
||||||
|
os: ubuntu-24.04
|
||||||
|
- target: arm64
|
||||||
|
os: ubuntu-24.04-arm
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
container:
|
||||||
|
# Can't use docker:dind for ARM64 because it's Alpine-based, see https://github.com/actions/upload-artifact/issues/739
|
||||||
|
image: earthbuild/dind:ubuntu-24.04-docker-28.5.2-1
|
||||||
env:
|
env:
|
||||||
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
TARGET: ${{ matrix.target }}
|
||||||
CCACHE_COMPILERCHECK: content
|
|
||||||
CCACHE_SLOPPINESS: time_macros
|
|
||||||
OS: ios
|
|
||||||
TARGET: arm64
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: Set up cache
|
- name: Fix git ownership
|
||||||
uses: actions/cache@v4
|
run: git config --global --add safe.directory .
|
||||||
|
- name: Build Docker image
|
||||||
|
run: ./.ci/docker.sh
|
||||||
|
- name: Move Docker image to artifacts directory
|
||||||
|
run: |
|
||||||
|
mkdir -p artifacts
|
||||||
|
mv build/*.dockerimage artifacts/
|
||||||
|
- name: Generate SBOM
|
||||||
|
if: ${{ github.ref_type == 'tag' }}
|
||||||
|
uses: anchore/sbom-action@v0
|
||||||
with:
|
with:
|
||||||
path: ${{ env.CCACHE_DIR }}
|
image: ${{ env.DOCKER_IMAGE_PATH }}
|
||||||
key: ${{ runner.os }}-ios-${{ github.sha }}
|
format: spdx-json
|
||||||
restore-keys: |
|
output-file: artifacts/docker-room.spdx.json
|
||||||
${{ runner.os }}-ios-
|
upload-artifact: false
|
||||||
- name: Install tools
|
- name: Upload
|
||||||
run: brew install ccache ninja
|
uses: actions/upload-artifact@v7
|
||||||
- name: Build
|
with:
|
||||||
run: ./.ci/ios.sh
|
name: docker-${{ env.TARGET }}
|
||||||
|
path: artifacts/
|
||||||
|
- name: Attest artifacts
|
||||||
|
if: ${{ github.ref_type == 'tag' }}
|
||||||
|
uses: actions/attest@v4
|
||||||
|
with:
|
||||||
|
subject-path: |
|
||||||
|
artifacts/*.dockerimage
|
||||||
|
sbom-path: artifacts/docker-room.spdx.json
|
||||||
|
|
|
||||||
51
.github/workflows/first_time_contributor_detect.yml
vendored
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
name: Detect first-time contributors
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request_target:
|
||||||
|
types: [opened]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
pull-requests: write
|
||||||
|
issues: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
detect:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: >-
|
||||||
|
(github.repository == 'azahar-emu/azahar') &&
|
||||||
|
(github.event.pull_request.author_association != 'COLLABORATOR') &&
|
||||||
|
(github.event.pull_request.author_association != 'CONTRIBUTOR') &&
|
||||||
|
(github.event.pull_request.author_association != 'MANNEQUIN') &&
|
||||||
|
(github.event.pull_request.author_association != 'MEMBER') &&
|
||||||
|
(github.event.pull_request.author_association != 'OWNER')
|
||||||
|
steps:
|
||||||
|
- name: Detect PR if author is first-time contributor
|
||||||
|
uses: actions/github-script@v9
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
const { owner, repo } = context.repo;
|
||||||
|
const pr = context.payload.pull_request;
|
||||||
|
|
||||||
|
// Add needs verification label so that the reopen action runs on comment.
|
||||||
|
await github.rest.issues.addLabels({
|
||||||
|
owner,
|
||||||
|
repo,
|
||||||
|
issue_number: pr.number,
|
||||||
|
labels: ['needs verification'],
|
||||||
|
});
|
||||||
|
|
||||||
|
// Close the pull request and wait for verification.
|
||||||
|
await github.rest.pulls.update({
|
||||||
|
owner,
|
||||||
|
repo,
|
||||||
|
pull_number: pr.number,
|
||||||
|
state: 'closed',
|
||||||
|
});
|
||||||
|
|
||||||
|
// Show the new contributor how to verify (they need to write a short poem about the Wii and 3DS being lovers)
|
||||||
|
await github.rest.issues.createComment({
|
||||||
|
owner,
|
||||||
|
repo,
|
||||||
|
issue_number: pr.number,
|
||||||
|
body: 'Welcome to the Azahar Emulator repository! Due to the surge of AI bots we have decided to add an extra verification step to new contributors. Please follow the exact instructions in your own written Pull Request description to reopen it.',
|
||||||
|
});
|
||||||
79
.github/workflows/first_time_contributor_reopen.yml
vendored
Normal file
|
|
@ -0,0 +1,79 @@
|
||||||
|
name: Verify first-time contributors
|
||||||
|
|
||||||
|
on:
|
||||||
|
issue_comment:
|
||||||
|
types: [created]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
pull-requests: write
|
||||||
|
issues: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
verify:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: github.event.issue.pull_request && contains(github.event.issue.labels.*.name, 'needs verification')
|
||||||
|
steps:
|
||||||
|
- name: Verify and reopen PR
|
||||||
|
uses: actions/github-script@v9
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
const { owner, repo } = context.repo;
|
||||||
|
const issue = context.payload.issue;
|
||||||
|
const comment = context.payload.comment;
|
||||||
|
const { data: pr } = await github.rest.pulls.get({
|
||||||
|
owner,
|
||||||
|
repo,
|
||||||
|
pull_number: issue.number,
|
||||||
|
});
|
||||||
|
|
||||||
|
// Only allow verification of the comment user is the author
|
||||||
|
if (comment.user.login !== pr.user.login) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fetch user display and login names (lowercase)
|
||||||
|
const { data: user } = await github.rest.users.getByUsername({
|
||||||
|
username: pr.user.login,
|
||||||
|
});
|
||||||
|
const username = pr.user.login.toLowerCase();
|
||||||
|
const displayName = (user.name || '').toLowerCase();
|
||||||
|
|
||||||
|
// Make comment body lowercase and split words
|
||||||
|
const body = comment.body.toLowerCase().trim().replace(/[^a-z0-9_\-\s]/g, '').split(/\s+/);
|
||||||
|
|
||||||
|
// Check that the user verified themselves by writing a song about the NES and the SNES.
|
||||||
|
const verified =
|
||||||
|
(body.includes(username) ||
|
||||||
|
(displayName && body.includes(displayName))) &&
|
||||||
|
body.includes('azahar');
|
||||||
|
|
||||||
|
// Only reopen the PR and remove the label if verification succeeded
|
||||||
|
if (verified) {
|
||||||
|
await github.rest.pulls.update({
|
||||||
|
owner,
|
||||||
|
repo,
|
||||||
|
pull_number: issue.number,
|
||||||
|
state: 'open',
|
||||||
|
});
|
||||||
|
await github.rest.issues.createComment({
|
||||||
|
owner,
|
||||||
|
repo,
|
||||||
|
issue_number: issue.number,
|
||||||
|
body: 'Verification successful! Pull request has been reopened. Please also edit your PR description to remove the block of text between `---` to make the description easier to read.',
|
||||||
|
});
|
||||||
|
try {
|
||||||
|
await github.rest.issues.removeLabel({
|
||||||
|
owner,
|
||||||
|
repo,
|
||||||
|
issue_number: issue.number,
|
||||||
|
name: 'needs verification',
|
||||||
|
});
|
||||||
|
} catch {}
|
||||||
|
} else {
|
||||||
|
await github.rest.issues.createComment({
|
||||||
|
owner,
|
||||||
|
repo,
|
||||||
|
issue_number: issue.number,
|
||||||
|
body: 'Verification failed! Pull request will remain closed.',
|
||||||
|
});
|
||||||
|
}
|
||||||
2
.github/workflows/format.yml
vendored
|
|
@ -13,7 +13,7 @@ jobs:
|
||||||
image: opensauce04/azahar-build-environment:latest
|
image: opensauce04/azahar-build-environment:latest
|
||||||
options: -u 1001
|
options: -u 1001
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- name: Build
|
- name: Build
|
||||||
|
|
|
||||||
304
.github/workflows/libretro.yml
vendored
Normal file
|
|
@ -0,0 +1,304 @@
|
||||||
|
name: citra-libretro
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ "*" ]
|
||||||
|
tags: [ "*" ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ master ]
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
env:
|
||||||
|
CORE_ARGS: -DENABLE_LIBRETRO=ON
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
id-token: write
|
||||||
|
contents: read
|
||||||
|
attestations: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
android:
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
env:
|
||||||
|
OS: android
|
||||||
|
TARGET: arm64-v8a
|
||||||
|
API_LEVEL: 21
|
||||||
|
ANDROID_NDK_VERSION: 26.2.11394342
|
||||||
|
ANDROID_ABI: arm64-v8a
|
||||||
|
BUILD_DIR: build/android-arm64-v8a
|
||||||
|
EXTRA_PATH: bin/Release
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
- 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: Install tools
|
||||||
|
run: |
|
||||||
|
sudo apt-get update -y
|
||||||
|
sudo apt-get install -y llvm
|
||||||
|
- name: Update Android SDK CMake version
|
||||||
|
run: |
|
||||||
|
echo "y" | ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager "ndk;$ANDROID_NDK_VERSION"
|
||||||
|
echo "y" | ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager "cmake;3.30.3"
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
export NDK_ROOT=${ANDROID_SDK_ROOT}/ndk/$ANDROID_NDK_VERSION
|
||||||
|
${ANDROID_SDK_ROOT}/cmake/3.30.3/bin/cmake $CORE_ARGS -DANDROID_PLATFORM=android-$API_LEVEL -DCMAKE_TOOLCHAIN_FILE=$NDK_ROOT/build/cmake/android.toolchain.cmake -DANDROID_STL=c++_static -DANDROID_ABI=$ANDROID_ABI . -B $BUILD_DIR
|
||||||
|
${ANDROID_SDK_ROOT}/cmake/3.30.3/bin/cmake --build $BUILD_DIR --target azahar_libretro --config Release -j $(nproc)
|
||||||
|
llvm-strip -s $BUILD_DIR/$EXTRA_PATH/azahar_libretro.*
|
||||||
|
- name: Pack
|
||||||
|
run: ./.ci/libretro-pack.sh
|
||||||
|
- name: Generate SBOM
|
||||||
|
if: ${{ github.ref_type == 'tag' }}
|
||||||
|
uses: anchore/sbom-action@v0
|
||||||
|
with:
|
||||||
|
path: build/
|
||||||
|
format: spdx-json
|
||||||
|
output-file: libretro-android.spdx.json
|
||||||
|
upload-artifact: false
|
||||||
|
- name: Upload
|
||||||
|
uses: actions/upload-artifact@v7
|
||||||
|
with:
|
||||||
|
name: ${{ env.OS }}-${{ env.TARGET }}
|
||||||
|
path: |
|
||||||
|
./*.zip
|
||||||
|
./*.spdx.json
|
||||||
|
- name: Attest artifacts
|
||||||
|
if: ${{ github.ref_type == 'tag' }}
|
||||||
|
uses: actions/attest@v4
|
||||||
|
with:
|
||||||
|
subject-path: |
|
||||||
|
./*.zip
|
||||||
|
sbom-path: libretro-android.spdx.json
|
||||||
|
|
||||||
|
linux:
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
env:
|
||||||
|
OS: linux
|
||||||
|
TARGET: x86_64
|
||||||
|
BUILD_DIR: build/linux-x86_64
|
||||||
|
EXTRA_PATH: bin/Release
|
||||||
|
EXTRA_CORE_ARGS: -DCMAKE_C_COMPILER=gcc-12 -DCMAKE_CXX_COMPILER=g++-12 -DENABLE_LTO=OFF
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
- name: Install tools
|
||||||
|
run: |
|
||||||
|
sudo apt-get update -y
|
||||||
|
sudo apt-get install -y llvm
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
cmake $CORE_ARGS $EXTRA_CORE_ARGS . -B $BUILD_DIR
|
||||||
|
cmake --build $BUILD_DIR --target azahar_libretro --config Release -j $(nproc)
|
||||||
|
llvm-strip -s $BUILD_DIR/$EXTRA_PATH/azahar_libretro.*
|
||||||
|
- name: Pack
|
||||||
|
run: ./.ci/libretro-pack.sh
|
||||||
|
- name: Generate SBOM
|
||||||
|
if: ${{ github.ref_type == 'tag' }}
|
||||||
|
uses: anchore/sbom-action@v0
|
||||||
|
with:
|
||||||
|
path: build/
|
||||||
|
format: spdx-json
|
||||||
|
output-file: libretro-linux.spdx.json
|
||||||
|
upload-artifact: false
|
||||||
|
- name: Upload
|
||||||
|
uses: actions/upload-artifact@v7
|
||||||
|
with:
|
||||||
|
name: ${{ env.OS }}-${{ env.TARGET }}
|
||||||
|
path: |
|
||||||
|
./*.zip
|
||||||
|
./*.spdx.json
|
||||||
|
- name: Attest artifacts
|
||||||
|
if: ${{ github.ref_type == 'tag' }}
|
||||||
|
uses: actions/attest@v4
|
||||||
|
with:
|
||||||
|
subject-path: |
|
||||||
|
./*.zip
|
||||||
|
sbom-path: libretro-linux.spdx.json
|
||||||
|
|
||||||
|
windows:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
OS: windows
|
||||||
|
TARGET: x86_64
|
||||||
|
BUILD_DIR: build/windows-x86_64
|
||||||
|
EXTRA_CORE_ARGS: -DENABLE_LTO=OFF -G Ninja
|
||||||
|
CMAKE: x86_64-w64-mingw32.static-cmake
|
||||||
|
IMAGE: reallibretroretroarch/libretro-build-mxe-win-cross-cores:mingw12
|
||||||
|
EXTRA_PATH: bin/Release
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
- name: Build in cross-container
|
||||||
|
run: |
|
||||||
|
docker pull $IMAGE
|
||||||
|
docker run --rm --user root \
|
||||||
|
-v "${GITHUB_WORKSPACE}:${GITHUB_WORKSPACE}" \
|
||||||
|
-w "${GITHUB_WORKSPACE}" \
|
||||||
|
$IMAGE \
|
||||||
|
bash -lc "\
|
||||||
|
${CMAKE} $CORE_ARGS $EXTRA_CORE_ARGS . -B $BUILD_DIR && \
|
||||||
|
${CMAKE} --build $BUILD_DIR --target azahar_libretro --config Release -j $(nproc) && \
|
||||||
|
x86_64-w64-mingw32.static-strip -s $BUILD_DIR/$EXTRA_PATH/azahar_libretro.*"
|
||||||
|
- name: Pack
|
||||||
|
run: ./.ci/libretro-pack.sh
|
||||||
|
- name: Generate SBOM
|
||||||
|
if: ${{ github.ref_type == 'tag' }}
|
||||||
|
uses: anchore/sbom-action@v0
|
||||||
|
with:
|
||||||
|
path: build/
|
||||||
|
format: spdx-json
|
||||||
|
output-file: libretro-windows.spdx.json
|
||||||
|
upload-artifact: false
|
||||||
|
- name: Upload
|
||||||
|
uses: actions/upload-artifact@v7
|
||||||
|
with:
|
||||||
|
name: ${{ env.OS }}-${{ env.TARGET }}
|
||||||
|
path: |
|
||||||
|
./*.zip
|
||||||
|
./*.spdx.json
|
||||||
|
- name: Attest artifacts
|
||||||
|
if: ${{ github.ref_type == 'tag' }}
|
||||||
|
uses: actions/attest@v4
|
||||||
|
with:
|
||||||
|
subject-path: |
|
||||||
|
./*.zip
|
||||||
|
sbom-path: libretro-windows.spdx.json
|
||||||
|
macos:
|
||||||
|
runs-on: macos-26
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
target: ["x86_64", "arm64"]
|
||||||
|
env:
|
||||||
|
OS: macos
|
||||||
|
TARGET: ${{ matrix.target }}
|
||||||
|
MACOSX_DEPLOYMENT_TARGET: 11.0
|
||||||
|
BUILD_DIR: build/osx-${{ matrix.target }}
|
||||||
|
EXTRA_PATH: bin/Release
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
- name: Install tools
|
||||||
|
run: brew install spirv-tools
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
cmake $CORE_ARGS -DCMAKE_OSX_ARCHITECTURES=$TARGET . -B $BUILD_DIR
|
||||||
|
cmake --build $BUILD_DIR --target azahar_libretro --config Release
|
||||||
|
strip -x $BUILD_DIR/$EXTRA_PATH/azahar_libretro.*
|
||||||
|
- name: Pack
|
||||||
|
run: ./.ci/libretro-pack.sh
|
||||||
|
- name: Generate SBOM
|
||||||
|
if: ${{ github.ref_type == 'tag' }}
|
||||||
|
uses: anchore/sbom-action@v0
|
||||||
|
with:
|
||||||
|
path: build/
|
||||||
|
format: spdx-json
|
||||||
|
output-file: libretro-macos-${{ matrix.target }}.spdx.json
|
||||||
|
upload-artifact: false
|
||||||
|
- name: Upload
|
||||||
|
uses: actions/upload-artifact@v7
|
||||||
|
with:
|
||||||
|
name: ${{ env.OS }}-${{ env.TARGET }}
|
||||||
|
path: |
|
||||||
|
./*.zip
|
||||||
|
./*.spdx.json
|
||||||
|
- name: Attest artifacts
|
||||||
|
if: ${{ github.ref_type == 'tag' }}
|
||||||
|
uses: actions/attest@v4
|
||||||
|
with:
|
||||||
|
subject-path: |
|
||||||
|
./*.zip
|
||||||
|
sbom-path: libretro-macos-${{ matrix.target }}.spdx.json
|
||||||
|
|
||||||
|
ios:
|
||||||
|
runs-on: macos-26
|
||||||
|
env:
|
||||||
|
OS: ios
|
||||||
|
TARGET: arm64
|
||||||
|
BUILD_DIR: build/ios-arm64
|
||||||
|
EXTRA_PATH: bin/Release
|
||||||
|
EXTRA_CORE_ARGS: -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_C_FLAGS=-DIOS -DCMAKE_CXX_FLAGS=-DIOS -DIOS=ON -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_DEPLOYMENT_TARGET=14.0 -DCITRA_USE_PRECOMPILED_HEADERS=OFF -DCMAKE_OSX_ARCHITECTURES=arm64 -DENABLE_OPT=OFF
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
cmake $CORE_ARGS $EXTRA_CORE_ARGS . -B $BUILD_DIR
|
||||||
|
cmake --build $BUILD_DIR --target azahar_libretro --config Release
|
||||||
|
strip -x $BUILD_DIR/$EXTRA_PATH/azahar_libretro.*
|
||||||
|
- name: Pack
|
||||||
|
run: ./.ci/libretro-pack.sh
|
||||||
|
- name: Generate SBOM
|
||||||
|
if: ${{ github.ref_type == 'tag' }}
|
||||||
|
uses: anchore/sbom-action@v0
|
||||||
|
with:
|
||||||
|
path: build/
|
||||||
|
format: spdx-json
|
||||||
|
output-file: libretro-ios.spdx.json
|
||||||
|
upload-artifact: false
|
||||||
|
- name: Upload
|
||||||
|
uses: actions/upload-artifact@v7
|
||||||
|
with:
|
||||||
|
name: ${{ env.OS }}-${{ env.TARGET }}
|
||||||
|
path: |
|
||||||
|
./*.zip
|
||||||
|
./*.spdx.json
|
||||||
|
- name: Attest artifacts
|
||||||
|
if: ${{ github.ref_type == 'tag' }}
|
||||||
|
uses: actions/attest@v4
|
||||||
|
with:
|
||||||
|
subject-path: |
|
||||||
|
./*.zip
|
||||||
|
sbom-path: libretro-ios.spdx.json
|
||||||
|
|
||||||
|
tvos:
|
||||||
|
runs-on: macos-26
|
||||||
|
env:
|
||||||
|
OS: tvos
|
||||||
|
TARGET: arm64
|
||||||
|
BUILD_DIR: build/tvos-arm64
|
||||||
|
EXTRA_PATH: bin/Release
|
||||||
|
EXTRA_CORE_ARGS: -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_C_FLAGS=-DIOS -DCMAKE_CXX_FLAGS=-DIOS -DIOS=ON -DCMAKE_SYSTEM_NAME=tvOS -DCMAKE_OSX_DEPLOYMENT_TARGET=14.0 -DCITRA_USE_PRECOMPILED_HEADERS=OFF -DCMAKE_OSX_SYSROOT=appletvos -DCMAKE_OSX_ARCHITECTURES=arm64 -DENABLE_OPT=OFF
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
cmake $CORE_ARGS $EXTRA_CORE_ARGS . -B $BUILD_DIR
|
||||||
|
cmake --build $BUILD_DIR --target azahar_libretro --config Release
|
||||||
|
strip -x $BUILD_DIR/$EXTRA_PATH/azahar_libretro.*
|
||||||
|
- name: Pack
|
||||||
|
run: ./.ci/libretro-pack.sh
|
||||||
|
- name: Generate SBOM
|
||||||
|
if: ${{ github.ref_type == 'tag' }}
|
||||||
|
uses: anchore/sbom-action@v0
|
||||||
|
with:
|
||||||
|
path: build/
|
||||||
|
format: spdx-json
|
||||||
|
output-file: libretro-tvos.spdx.json
|
||||||
|
upload-artifact: false
|
||||||
|
- name: Upload
|
||||||
|
uses: actions/upload-artifact@v7
|
||||||
|
with:
|
||||||
|
name: ${{ env.OS }}-${{ env.TARGET }}
|
||||||
|
path: |
|
||||||
|
./*.zip
|
||||||
|
./*.spdx.json
|
||||||
|
- name: Attest artifacts
|
||||||
|
if: ${{ github.ref_type == 'tag' }}
|
||||||
|
uses: actions/attest@v4
|
||||||
|
with:
|
||||||
|
subject-path: |
|
||||||
|
./*.zip
|
||||||
|
sbom-path: libretro-tvos.spdx.json
|
||||||
2
.github/workflows/license-header.yml
vendored
|
|
@ -11,7 +11,7 @@ jobs:
|
||||||
image: opensauce04/azahar-build-environment:latest
|
image: opensauce04/azahar-build-environment:latest
|
||||||
options: -u 1001
|
options: -u 1001
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- name: Fetch master branch
|
- name: Fetch master branch
|
||||||
|
|
|
||||||
23
.github/workflows/stale.yml
vendored
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
name: azahar-stale
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: "0 0 * * *"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
stale-issues:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
issues: write
|
||||||
|
steps:
|
||||||
|
- uses: actions/stale@v10.2.0
|
||||||
|
with:
|
||||||
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
days-before-issue-stale: 90
|
||||||
|
days-before-issue-close: 10
|
||||||
|
stale-issue-message: "This issue has been marked as stale. If there is no activity within the next 10 days, this issue will be closed."
|
||||||
|
close-issue-message: "This issue has been closed as stale."
|
||||||
|
days-before-pr-stale: -1
|
||||||
|
days-before-pr-close: -1
|
||||||
|
remove-issue-stale-when-updated: true
|
||||||
|
exempt-issue-labels: "priority - low,priority - medium,priority - high,priority - urgent,documentation,enhancement,miscellaneous,task,refactor"
|
||||||
4
.github/workflows/transifex.yml
vendored
|
|
@ -7,10 +7,10 @@ on:
|
||||||
jobs:
|
jobs:
|
||||||
transifex:
|
transifex:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
container: opensauce04/azahar-build-environment:transifex
|
container: opensauce04/azahar-build-environment:latest
|
||||||
if: ${{ github.repository == 'azahar-emu/azahar' }}
|
if: ${{ github.repository == 'azahar-emu/azahar' }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
|
||||||
11
.gitignore
vendored
|
|
@ -10,9 +10,13 @@ src/installer/*.exe
|
||||||
src/common/scm_rev.cpp
|
src/common/scm_rev.cpp
|
||||||
.travis.descriptor.json
|
.travis.descriptor.json
|
||||||
|
|
||||||
|
# Docker image files
|
||||||
|
*.dockerimage
|
||||||
|
|
||||||
# Project/editor files
|
# Project/editor files
|
||||||
*.swp
|
*.swp
|
||||||
*.kdev4
|
*.kdev4
|
||||||
|
.markdown-preview.html
|
||||||
.idea/
|
.idea/
|
||||||
.vs/
|
.vs/
|
||||||
.vscode/
|
.vscode/
|
||||||
|
|
@ -52,3 +56,10 @@ repo/
|
||||||
.ccache/
|
.ccache/
|
||||||
node_modules/
|
node_modules/
|
||||||
VULKAN_SDK/
|
VULKAN_SDK/
|
||||||
|
|
||||||
|
# Version info files
|
||||||
|
GIT-COMMIT
|
||||||
|
GIT-TAG
|
||||||
|
|
||||||
|
# verify-release.sh downloads
|
||||||
|
verify/
|
||||||
132
.gitmodules
vendored
|
|
@ -1,96 +1,108 @@
|
||||||
[submodule "boost"]
|
[submodule "boost"]
|
||||||
path = externals/boost
|
path = externals/boost
|
||||||
url = https://github.com/azahar-emu/ext-boost.git
|
url = https://github.com/azahar-emu/ext-boost.git
|
||||||
[submodule "nihstro"]
|
[submodule "nihstro"]
|
||||||
path = externals/nihstro
|
path = externals/nihstro
|
||||||
url = https://github.com/neobrain/nihstro.git
|
url = https://github.com/neobrain/nihstro.git
|
||||||
[submodule "soundtouch"]
|
[submodule "soundtouch"]
|
||||||
path = externals/soundtouch
|
path = externals/soundtouch
|
||||||
url = https://codeberg.org/soundtouch/soundtouch.git
|
url = https://github.com/azahar-emu/soundtouch.git
|
||||||
[submodule "catch2"]
|
[submodule "catch2"]
|
||||||
path = externals/catch2
|
path = externals/catch2
|
||||||
url = https://github.com/catchorg/Catch2
|
url = https://github.com/catchorg/Catch2
|
||||||
[submodule "dynarmic"]
|
[submodule "dynarmic"]
|
||||||
path = externals/dynarmic
|
path = externals/dynarmic
|
||||||
url = https://github.com/azahar-emu/dynarmic.git
|
url = https://github.com/azahar-emu/dynarmic.git
|
||||||
[submodule "xbyak"]
|
[submodule "xbyak"]
|
||||||
path = externals/xbyak
|
path = externals/xbyak
|
||||||
url = https://github.com/herumi/xbyak.git
|
url = https://github.com/herumi/xbyak.git
|
||||||
[submodule "fmt"]
|
[submodule "fmt"]
|
||||||
path = externals/fmt
|
path = externals/fmt
|
||||||
url = https://github.com/fmtlib/fmt.git
|
url = https://github.com/fmtlib/fmt.git
|
||||||
[submodule "enet"]
|
[submodule "enet"]
|
||||||
path = externals/enet
|
path = externals/enet
|
||||||
url = https://github.com/lsalzman/enet.git
|
url = https://github.com/lsalzman/enet.git
|
||||||
[submodule "inih"]
|
[submodule "inih"]
|
||||||
path = externals/inih/inih
|
path = externals/inih/inih
|
||||||
url = https://github.com/benhoyt/inih.git
|
url = https://github.com/benhoyt/inih.git
|
||||||
[submodule "libressl"]
|
[submodule "libressl"]
|
||||||
path = externals/libressl
|
path = externals/libressl
|
||||||
url = https://github.com/azahar-emu/ext-libressl-portable.git
|
url = https://github.com/azahar-emu/ext-libressl-portable.git
|
||||||
[submodule "libusb"]
|
[submodule "libusb"]
|
||||||
path = externals/libusb/libusb
|
path = externals/libusb/libusb
|
||||||
url = https://github.com/libusb/libusb.git
|
url = https://github.com/libusb/libusb.git
|
||||||
[submodule "cubeb"]
|
[submodule "cubeb"]
|
||||||
path = externals/cubeb
|
path = externals/cubeb
|
||||||
url = https://github.com/mozilla/cubeb
|
url = https://github.com/mozilla/cubeb
|
||||||
[submodule "discord-rpc"]
|
[submodule "discord-rpc"]
|
||||||
path = externals/discord-rpc
|
path = externals/discord-rpc
|
||||||
url = https://github.com/azahar-emu/discord-rpc.git
|
url = https://github.com/azahar-emu/discord-rpc.git
|
||||||
[submodule "cpp-jwt"]
|
[submodule "cpp-jwt"]
|
||||||
path = externals/cpp-jwt
|
path = externals/cpp-jwt
|
||||||
url = https://github.com/arun11299/cpp-jwt.git
|
url = https://github.com/arun11299/cpp-jwt.git
|
||||||
[submodule "teakra"]
|
[submodule "teakra"]
|
||||||
path = externals/teakra
|
path = externals/teakra
|
||||||
url = https://github.com/wwylele/teakra.git
|
url = https://github.com/wwylele/teakra.git
|
||||||
[submodule "lodepng"]
|
[submodule "lodepng"]
|
||||||
path = externals/lodepng/lodepng
|
path = externals/lodepng/lodepng
|
||||||
url = https://github.com/lvandeve/lodepng.git
|
url = https://github.com/lvandeve/lodepng.git
|
||||||
[submodule "zstd"]
|
[submodule "zstd"]
|
||||||
path = externals/zstd
|
path = externals/zstd
|
||||||
url = https://github.com/facebook/zstd.git
|
url = https://github.com/facebook/zstd.git
|
||||||
[submodule "libyuv"]
|
[submodule "libyuv"]
|
||||||
path = externals/libyuv
|
path = externals/libyuv
|
||||||
url = https://github.com/lemenkov/libyuv.git
|
url = https://github.com/lemenkov/libyuv.git
|
||||||
[submodule "sdl2"]
|
[submodule "sdl2"]
|
||||||
path = externals/sdl2/SDL
|
path = externals/sdl2/SDL
|
||||||
url = https://github.com/libsdl-org/SDL
|
url = https://github.com/libsdl-org/SDL
|
||||||
[submodule "cryptopp-cmake"]
|
|
||||||
path = externals/cryptopp-cmake
|
|
||||||
url = https://github.com/abdes/cryptopp-cmake.git
|
|
||||||
[submodule "cryptopp"]
|
|
||||||
path = externals/cryptopp
|
|
||||||
url = https://github.com/weidai11/cryptopp.git
|
|
||||||
[submodule "dds-ktx"]
|
[submodule "dds-ktx"]
|
||||||
path = externals/dds-ktx
|
path = externals/dds-ktx
|
||||||
url = https://github.com/septag/dds-ktx
|
url = https://github.com/septag/dds-ktx
|
||||||
[submodule "openal-soft"]
|
[submodule "openal-soft"]
|
||||||
path = externals/openal-soft
|
path = externals/openal-soft
|
||||||
url = https://github.com/kcat/openal-soft
|
url = https://github.com/azahar-emu/openal-soft
|
||||||
[submodule "glslang"]
|
[submodule "glslang"]
|
||||||
path = externals/glslang
|
path = externals/glslang
|
||||||
url = https://github.com/KhronosGroup/glslang
|
url = https://github.com/KhronosGroup/glslang
|
||||||
[submodule "vma"]
|
[submodule "vma"]
|
||||||
path = externals/vma
|
path = externals/vma
|
||||||
url = https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator
|
url = https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator
|
||||||
[submodule "vulkan-headers"]
|
[submodule "vulkan-headers"]
|
||||||
path = externals/vulkan-headers
|
path = externals/vulkan-headers
|
||||||
url = https://github.com/KhronosGroup/Vulkan-Headers
|
url = https://github.com/KhronosGroup/Vulkan-Headers
|
||||||
[submodule "sirit"]
|
[submodule "sirit"]
|
||||||
path = externals/sirit
|
path = externals/sirit/sirit
|
||||||
url = https://github.com/azahar-emu/sirit
|
url = https://github.com/azahar-emu/sirit
|
||||||
[submodule "faad2"]
|
[submodule "faad2"]
|
||||||
path = externals/faad2/faad2
|
path = externals/faad2/faad2
|
||||||
url = https://github.com/knik0/faad2
|
url = https://github.com/knik0/faad2
|
||||||
[submodule "library-headers"]
|
[submodule "library-headers"]
|
||||||
path = externals/library-headers
|
path = externals/library-headers
|
||||||
url = https://github.com/azahar-emu/ext-library-headers.git
|
url = https://github.com/azahar-emu/ext-library-headers.git
|
||||||
[submodule "libadrenotools"]
|
[submodule "libadrenotools"]
|
||||||
path = externals/libadrenotools
|
path = externals/libadrenotools
|
||||||
url = https://github.com/bylaws/libadrenotools
|
url = https://github.com/bylaws/libadrenotools
|
||||||
[submodule "oaknut"]
|
[submodule "oaknut"]
|
||||||
path = externals/oaknut
|
path = externals/oaknut
|
||||||
url = https://github.com/merryhime/oaknut.git
|
url = https://github.com/merryhime/oaknut.git
|
||||||
[submodule "compatibility-list"]
|
[submodule "compatibility-list"]
|
||||||
path = dist/compatibility_list
|
path = dist/compatibility_list
|
||||||
url = https://github.com/azahar-emu/compatibility-list
|
url = https://github.com/azahar-emu/compatibility-list
|
||||||
|
[submodule "spirv-tools"]
|
||||||
|
path = externals/spirv-tools
|
||||||
|
url = https://github.com/KhronosGroup/SPIRV-Tools
|
||||||
|
[submodule "spirv-headers"]
|
||||||
|
path = externals/spirv-headers
|
||||||
|
url = https://github.com/KhronosGroup/SPIRV-Headers
|
||||||
|
[submodule "externals/xxHash"]
|
||||||
|
path = externals/xxHash
|
||||||
|
url = https://github.com/Cyan4973/xxHash.git
|
||||||
|
[submodule "externals/libretro-common"]
|
||||||
|
path = externals/libretro-common/libretro-common
|
||||||
|
url = https://github.com/libretro/libretro-common.git
|
||||||
|
[submodule "dllwalker"]
|
||||||
|
path = externals/dllwalker
|
||||||
|
url = https://github.com/azahar-emu/dllwalker
|
||||||
|
[submodule "externals/cryptopp"]
|
||||||
|
path = externals/cryptopp
|
||||||
|
url = https://github.com/cryptopp-modern/cryptopp-modern.git
|
||||||
|
|
|
||||||
20
AI-POLICY.md
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
# Azahar Emulator AI Use Policy
|
||||||
|
|
||||||
|
The following document outlines the acceptable and unacceptable uses of AI within the Azahar codebase.
|
||||||
|
|
||||||
|
It describes whether or not submissions which were exposed to large language models (LLMs) such as ChatGPT, Claude, DeepSeek, and similar models would be capable of being merged in a pull request or otherwise utilized.
|
||||||
|
|
||||||
|
- ✅ Use of AI to help developers discover or understand problems in the codebase is acceptable **under the condition that any discovered issue is independently verified by a human**.
|
||||||
|
- ✅ Use of AI to write code snippets of a sufficiently small size that they aren't reasonably copyrightable **with disclosure in the PR description** is acceptable.
|
||||||
|
- This will be handled on a case-by-case basis and is up to the interpretation of the maintainer, but generic algorithm snippets up to a maximum of approximately 5 lines of code are acceptable.
|
||||||
|
- ❌ Use of AI to write code for submission without disclosure is prohibited.
|
||||||
|
- ❌ Use of AI to write the entirety/ a significant portion of a contribution is prohibited.
|
||||||
|
- ❌ Use of AI to write snippets of code which are of a size such that they could reasonably be copyrightable is prohibited.
|
||||||
|
- ❌ Use of AI to rewrite incompatibly-licensed code for submission to Azahar is prohibited.
|
||||||
|
- ❌ Use of AI to autonomously submit pull requests or issues is prohibited.
|
||||||
|
|
||||||
|
Pull requests which violate these rules will be closed. Previously accepted submissions which are found to violate these rules will be retroactively removed from the codebase.
|
||||||
|
|
||||||
|
This document may be updated in the future if further clarification is required.
|
||||||
|
|
||||||
|
This policy is effective for code submitted on or after the 20th of March 2026.
|
||||||
167
CMakeLists.txt
|
|
@ -1,5 +1,6 @@
|
||||||
# CMake 3.12 required for 20 to be a valid value for CXX_STANDARD
|
# CMake >=3.12 required for 20 to be a valid value for CXX_STANDARD,
|
||||||
cmake_minimum_required(VERSION 3.15)
|
# and >=3.25 required to make LTO work on Android.
|
||||||
|
cmake_minimum_required(VERSION 3.25)
|
||||||
|
|
||||||
# Don't override the warning flags in MSVC:
|
# Don't override the warning flags in MSVC:
|
||||||
cmake_policy(SET CMP0092 NEW)
|
cmake_policy(SET CMP0092 NEW)
|
||||||
|
|
@ -12,12 +13,31 @@ cmake_policy(SET CMP0063 NEW)
|
||||||
cmake_policy(SET CMP0127 NEW)
|
cmake_policy(SET CMP0127 NEW)
|
||||||
set(CMAKE_POLICY_DEFAULT_CMP0063 NEW)
|
set(CMAKE_POLICY_DEFAULT_CMP0063 NEW)
|
||||||
|
|
||||||
|
# Prefer building bundled dependencies as static instead of shared
|
||||||
|
set(BUILD_SHARED_LIBS OFF)
|
||||||
|
|
||||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules")
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules")
|
||||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/externals/cmake-modules")
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/externals/cmake-modules")
|
||||||
include(DownloadExternals)
|
include(DownloadExternals)
|
||||||
include(CMakeDependentOption)
|
include(CMakeDependentOption)
|
||||||
|
|
||||||
project(citra LANGUAGES C CXX ASM)
|
project(citra LANGUAGES C CXX ASM)
|
||||||
|
# must be invoked after project() command when using CMAKE_TOOLCHAIN_FILE
|
||||||
|
include(FindPkgConfig)
|
||||||
|
if (CMAKE_SYSTEM_NAME STREQUAL "Darwin" OR CMAKE_SYSTEM_NAME STREQUAL "iOS")
|
||||||
|
enable_language(OBJC OBJCXX)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux" AND MINGW)
|
||||||
|
string(TOLOWER ${LIBTYPE} LIBTYPE_LOWER)
|
||||||
|
set(CMAKE_AR x86_64-w64-mingw32.${LIBTYPE_LOWER}-gcc-ar)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (BSD STREQUAL "OpenBSD")
|
||||||
|
add_link_options(-z wxneeded)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
option(ENABLE_LIBRETRO "Build as a LibRetro core" OFF)
|
||||||
|
|
||||||
# Some submodules like to pick their own default build type if not specified.
|
# Some submodules like to pick their own default build type if not specified.
|
||||||
# Make sure we default to Release build type always, unless the generator has custom types.
|
# Make sure we default to Release build type always, unless the generator has custom types.
|
||||||
|
|
@ -25,7 +45,7 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
||||||
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build." FORCE)
|
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build." FORCE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (APPLE)
|
if (APPLE AND NOT ENABLE_LIBRETRO)
|
||||||
# Silence warnings on empty objects, for example when platform-specific code is #ifdef'd out.
|
# Silence warnings on empty objects, for example when platform-specific code is #ifdef'd out.
|
||||||
set(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>")
|
set(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>")
|
||||||
set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>")
|
set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>")
|
||||||
|
|
@ -41,8 +61,17 @@ if (APPLE)
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH)
|
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH)
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH)
|
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH)
|
||||||
else()
|
else()
|
||||||
# Minimum macOS 11
|
# Minimum macOS 13
|
||||||
set(CMAKE_OSX_DEPLOYMENT_TARGET "11.0")
|
set(CMAKE_OSX_DEPLOYMENT_TARGET "13.4")
|
||||||
|
|
||||||
|
# Catch compiler issue on AppleClang versions below 15.0
|
||||||
|
# TODO: Remove this check when we drop macOS 13 Ventura
|
||||||
|
if (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" AND
|
||||||
|
CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0)
|
||||||
|
message(FATAL_ERROR "AppleClang 15.0 or later is required due to a compiler bug in earlier versions.\n"
|
||||||
|
"Current version: ${CMAKE_CXX_COMPILER_VERSION}\n"
|
||||||
|
"After updating, delete 'CMakeCache.txt' in the build directory.")
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
@ -54,6 +83,13 @@ else()
|
||||||
set(IS_RELEASE_BUILD ON)
|
set(IS_RELEASE_BUILD ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if (MSVC)
|
||||||
|
add_compile_options(
|
||||||
|
/wd4711 # Suppresses `function 'xxxxx' selected for automatic inline expansion` messages
|
||||||
|
/wd5045 # Suppresses `Compiler will insert Spectre mitigation for memory load if /Qspectre switch specified` messages
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
# LTO takes too much memory and time using MSVC.
|
# LTO takes too much memory and time using MSVC.
|
||||||
if (NOT MSVC AND IS_RELEASE_BUILD)
|
if (NOT MSVC AND IS_RELEASE_BUILD)
|
||||||
set(DEFAULT_ENABLE_LTO ON)
|
set(DEFAULT_ENABLE_LTO ON)
|
||||||
|
|
@ -61,8 +97,26 @@ else()
|
||||||
set(DEFAULT_ENABLE_LTO OFF)
|
set(DEFAULT_ENABLE_LTO OFF)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Disable OpenGL by default on Linux aarch64.
|
||||||
|
# Some aarch64 devices running Linux don't support OpenGL, and users may encounter issues.
|
||||||
|
if (LINUX AND CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64)
|
||||||
|
set(DEFAULT_ENABLE_OPENGL OFF)
|
||||||
|
else()
|
||||||
|
set(DEFAULT_ENABLE_OPENGL ON)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Track which options were explicitly set by the user (for libretro conflict detection)
|
||||||
|
set(_LIBRETRO_INCOMPATIBLE_OPTIONS
|
||||||
|
ENABLE_SDL2 ENABLE_QT ENABLE_WEB_SERVICE ENABLE_SCRIPTING ENABLE_GDBSTUB
|
||||||
|
ENABLE_OPENAL ENABLE_ROOM ENABLE_ROOM_STANDALONE ENABLE_CUBEB ENABLE_LIBUSB)
|
||||||
|
set(_USER_SET_OPTIONS "")
|
||||||
|
foreach(_opt IN LISTS _LIBRETRO_INCOMPATIBLE_OPTIONS)
|
||||||
|
if(DEFINED ${_opt})
|
||||||
|
list(APPEND _USER_SET_OPTIONS ${_opt})
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
option(ENABLE_SDL2 "Enable using SDL2" ON)
|
option(ENABLE_SDL2 "Enable using SDL2" ON)
|
||||||
CMAKE_DEPENDENT_OPTION(ENABLE_SDL2_FRONTEND "Enable the SDL2 frontend" OFF "ENABLE_SDL2;NOT ANDROID AND NOT IOS" OFF)
|
|
||||||
option(USE_SYSTEM_SDL2 "Use the system SDL2 lib (instead of the bundled one)" OFF)
|
option(USE_SYSTEM_SDL2 "Use the system SDL2 lib (instead of the bundled one)" OFF)
|
||||||
|
|
||||||
# Set bundled qt as dependent options.
|
# Set bundled qt as dependent options.
|
||||||
|
|
@ -71,10 +125,12 @@ option(ENABLE_QT_TRANSLATION "Enable translations for the Qt frontend" OFF)
|
||||||
option(ENABLE_QT_UPDATE_CHECKER "Enable built-in update checker for the Qt frontend" OFF)
|
option(ENABLE_QT_UPDATE_CHECKER "Enable built-in update checker for the Qt frontend" OFF)
|
||||||
|
|
||||||
CMAKE_DEPENDENT_OPTION(ENABLE_TESTS "Enable generating tests executable" ON "NOT IOS" OFF)
|
CMAKE_DEPENDENT_OPTION(ENABLE_TESTS "Enable generating tests executable" ON "NOT IOS" OFF)
|
||||||
CMAKE_DEPENDENT_OPTION(ENABLE_ROOM "Enable generating dedicated room executable" ON "NOT ANDROID AND NOT IOS" OFF)
|
CMAKE_DEPENDENT_OPTION(ENABLE_ROOM "Enable dedicated room functionality" ON "NOT ANDROID AND NOT IOS" OFF)
|
||||||
|
CMAKE_DEPENDENT_OPTION(ENABLE_ROOM_STANDALONE "Enable generating a standalone dedicated room executable" ON "ENABLE_ROOM" OFF)
|
||||||
|
|
||||||
option(ENABLE_WEB_SERVICE "Enable web services (telemetry, etc.)" ON)
|
option(ENABLE_WEB_SERVICE "Enable web services (telemetry, etc.)" ON)
|
||||||
option(ENABLE_SCRIPTING "Enable RPC server for scripting" ON)
|
option(ENABLE_SCRIPTING "Enable RPC server for scripting" ON)
|
||||||
|
option(ENABLE_GDBSTUB "Enable GDB stub for emulated applications" ON)
|
||||||
|
|
||||||
CMAKE_DEPENDENT_OPTION(ENABLE_CUBEB "Enables the cubeb audio backend" ON "NOT IOS" OFF)
|
CMAKE_DEPENDENT_OPTION(ENABLE_CUBEB "Enables the cubeb audio backend" ON "NOT IOS" OFF)
|
||||||
option(ENABLE_OPENAL "Enables the OpenAL audio backend" ON)
|
option(ENABLE_OPENAL "Enables the OpenAL audio backend" ON)
|
||||||
|
|
@ -82,13 +138,20 @@ option(ENABLE_OPENAL "Enables the OpenAL audio backend" ON)
|
||||||
CMAKE_DEPENDENT_OPTION(ENABLE_LIBUSB "Enable libusb for GameCube Adapter support" ON "NOT IOS" OFF)
|
CMAKE_DEPENDENT_OPTION(ENABLE_LIBUSB "Enable libusb for GameCube Adapter support" ON "NOT IOS" OFF)
|
||||||
|
|
||||||
CMAKE_DEPENDENT_OPTION(ENABLE_SOFTWARE_RENDERER "Enables the software renderer" ON "NOT ANDROID" OFF)
|
CMAKE_DEPENDENT_OPTION(ENABLE_SOFTWARE_RENDERER "Enables the software renderer" ON "NOT ANDROID" OFF)
|
||||||
CMAKE_DEPENDENT_OPTION(ENABLE_OPENGL "Enables the OpenGL renderer" ON "NOT APPLE AND NOT (LINUX AND CMAKE_SYSTEM_PROCESSOR STREQUAL \"aarch64\")" OFF)
|
CMAKE_DEPENDENT_OPTION(ENABLE_OPENGL "Enables the OpenGL renderer" ${DEFAULT_ENABLE_OPENGL} "NOT APPLE" OFF)
|
||||||
option(ENABLE_VULKAN "Enables the Vulkan renderer" ON)
|
# NetBSD doesn't support Vulkan yet, remove this check when it does.
|
||||||
|
CMAKE_DEPENDENT_OPTION(ENABLE_VULKAN "Enables the Vulkan renderer" ON "NOT (BSD MATCHES \"NetBSD\")" OFF)
|
||||||
|
|
||||||
option(USE_DISCORD_PRESENCE "Enables Discord Rich Presence" OFF)
|
option(USE_DISCORD_PRESENCE "Enables Discord Rich Presence" OFF)
|
||||||
|
|
||||||
option(ENABLE_MICROPROFILE "Enables microprofile capabilities" OFF)
|
option(ENABLE_MICROPROFILE "Enables microprofile capabilities" OFF)
|
||||||
|
|
||||||
|
option(ENABLE_SSE42 "Enable SSE4.2 optimizations on x86_64" ON)
|
||||||
|
|
||||||
|
option(ENABLE_DEVELOPER_OPTIONS "Enable functionality targeted at emulator developers" OFF)
|
||||||
|
|
||||||
|
option(ENABLE_BUILTIN_KEYBLOB "Enable the inclusion of the default crypto keys blob" ON)
|
||||||
|
|
||||||
# Compile options
|
# Compile options
|
||||||
CMAKE_DEPENDENT_OPTION(COMPILE_WITH_DWARF "Add DWARF debugging information" ${IS_DEBUG_BUILD} "MINGW" OFF)
|
CMAKE_DEPENDENT_OPTION(COMPILE_WITH_DWARF "Add DWARF debugging information" ${IS_DEBUG_BUILD} "MINGW" OFF)
|
||||||
option(ENABLE_LTO "Enable link time optimization" ${DEFAULT_ENABLE_LTO})
|
option(ENABLE_LTO "Enable link time optimization" ${DEFAULT_ENABLE_LTO})
|
||||||
|
|
@ -96,6 +159,31 @@ option(ENABLE_NATIVE_OPTIMIZATION "Enables processor-specific optimizations via
|
||||||
option(CITRA_USE_PRECOMPILED_HEADERS "Use precompiled headers" ON)
|
option(CITRA_USE_PRECOMPILED_HEADERS "Use precompiled headers" ON)
|
||||||
option(CITRA_WARNINGS_AS_ERRORS "Enable warnings as errors" ON)
|
option(CITRA_WARNINGS_AS_ERRORS "Enable warnings as errors" ON)
|
||||||
|
|
||||||
|
# Handle incompatible options for libretro builds
|
||||||
|
if(ENABLE_LIBRETRO)
|
||||||
|
# Check for explicitly-set conflicting options
|
||||||
|
set(_CONFLICTS "")
|
||||||
|
foreach(_opt IN LISTS _LIBRETRO_INCOMPATIBLE_OPTIONS)
|
||||||
|
list(FIND _USER_SET_OPTIONS ${_opt} _idx)
|
||||||
|
if(NOT _idx EQUAL -1 AND ${_opt})
|
||||||
|
list(APPEND _CONFLICTS ${_opt})
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
if(_CONFLICTS)
|
||||||
|
string(REPLACE ";" ", " _CONFLICTS_STR "${_CONFLICTS}")
|
||||||
|
message(FATAL_ERROR
|
||||||
|
"ENABLE_LIBRETRO is incompatible with: ${_CONFLICTS_STR}\n"
|
||||||
|
"These options were explicitly enabled but are not supported for libretro builds.\n"
|
||||||
|
"Remove these options or set them to OFF.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Force disable incompatible options (handles defaulted-on options)
|
||||||
|
foreach(_opt IN LISTS _LIBRETRO_INCOMPATIBLE_OPTIONS)
|
||||||
|
set(${_opt} OFF CACHE BOOL "Disabled for libretro" FORCE)
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
|
||||||
# Pass the following values to C++ land
|
# Pass the following values to C++ land
|
||||||
if (ENABLE_QT)
|
if (ENABLE_QT)
|
||||||
add_definitions(-DENABLE_QT)
|
add_definitions(-DENABLE_QT)
|
||||||
|
|
@ -103,8 +191,20 @@ endif()
|
||||||
if (ENABLE_QT_TRANSLATION)
|
if (ENABLE_QT_TRANSLATION)
|
||||||
add_definitions(-DENABLE_QT_TRANSLATION)
|
add_definitions(-DENABLE_QT_TRANSLATION)
|
||||||
endif()
|
endif()
|
||||||
if (ENABLE_SDL2_FRONTEND)
|
if (ENABLE_ROOM)
|
||||||
add_definitions(-DENABLE_SDL2_FRONTEND)
|
add_definitions(-DENABLE_ROOM)
|
||||||
|
endif()
|
||||||
|
if (ENABLE_SDL2)
|
||||||
|
add_definitions(-DENABLE_SDL2)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(ENABLE_SSE42 AND (CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64"))
|
||||||
|
message(STATUS "SSE4.2 enabled for x86_64")
|
||||||
|
if(MSVC)
|
||||||
|
SET(SSE42_COMPILE_OPTION /arch:SSE4.2)
|
||||||
|
else()
|
||||||
|
SET(SSE42_COMPILE_OPTION -msse4.1 -msse4.2)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
include(CitraHandleSystemLibs)
|
include(CitraHandleSystemLibs)
|
||||||
|
|
@ -174,7 +274,7 @@ function(check_submodules_present)
|
||||||
foreach(module ${gitmodules})
|
foreach(module ${gitmodules})
|
||||||
string(REGEX REPLACE "path *= *" "" module ${module})
|
string(REGEX REPLACE "path *= *" "" module ${module})
|
||||||
if (NOT EXISTS "${PROJECT_SOURCE_DIR}/${module}/.git")
|
if (NOT EXISTS "${PROJECT_SOURCE_DIR}/${module}/.git")
|
||||||
message(SEND_ERROR "Git submodule ${module} not found."
|
message(SEND_ERROR "Git submodule ${module} not found.\n"
|
||||||
"Please run: git submodule update --init --recursive")
|
"Please run: git submodule update --init --recursive")
|
||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
@ -251,6 +351,9 @@ set(CMAKE_VISIBILITY_INLINES_HIDDEN NO)
|
||||||
# set up output paths for executable binaries
|
# set up output paths for executable binaries
|
||||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin/$<CONFIG>)
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin/$<CONFIG>)
|
||||||
|
|
||||||
|
if (ENABLE_LIBRETRO)
|
||||||
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||||
|
endif()
|
||||||
|
|
||||||
# System imported libraries
|
# System imported libraries
|
||||||
# ======================
|
# ======================
|
||||||
|
|
@ -261,7 +364,7 @@ find_package(Threads REQUIRED)
|
||||||
|
|
||||||
if (ENABLE_QT)
|
if (ENABLE_QT)
|
||||||
if (NOT USE_SYSTEM_QT)
|
if (NOT USE_SYSTEM_QT)
|
||||||
download_qt(6.7.2)
|
download_qt(6.9.3)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
find_package(Qt6 REQUIRED COMPONENTS Widgets Multimedia Concurrent)
|
find_package(Qt6 REQUIRED COMPONENTS Widgets Multimedia Concurrent)
|
||||||
|
|
@ -308,13 +411,21 @@ if (APPLE)
|
||||||
endif()
|
endif()
|
||||||
find_library(AVFOUNDATION_LIBRARY AVFoundation REQUIRED)
|
find_library(AVFOUNDATION_LIBRARY AVFoundation REQUIRED)
|
||||||
find_library(IOSURFACE_LIBRARY IOSurface REQUIRED)
|
find_library(IOSURFACE_LIBRARY IOSurface REQUIRED)
|
||||||
set(PLATFORM_LIBRARIES ${COCOA_LIBRARY} ${AVFOUNDATION_LIBRARY} ${IOSURFACE_LIBRARY} ${MOLTENVK_LIBRARY})
|
set(PLATFORM_LIBRARIES ${COCOA_LIBRARY} ${AVFOUNDATION_LIBRARY} ${IOSURFACE_LIBRARY})
|
||||||
|
|
||||||
if (ENABLE_VULKAN)
|
if (ENABLE_VULKAN AND NOT ENABLE_LIBRETRO)
|
||||||
if (NOT USE_SYSTEM_MOLTENVK)
|
if (USE_SYSTEM_MOLTENVK)
|
||||||
|
find_library(MOLTENVK_LIBRARY MoltenVK REQUIRED)
|
||||||
|
else()
|
||||||
download_moltenvk()
|
download_moltenvk()
|
||||||
|
if (IOS)
|
||||||
|
set(MOLTENVK_RELATIVE_LIBPATH "static/MoltenVK.xcframework/ios-arm64/libMoltenVK.a")
|
||||||
|
else()
|
||||||
|
set(MOLTENVK_RELATIVE_LIBPATH "dynamic/dylib/macOS/libMoltenVK.dylib")
|
||||||
|
endif()
|
||||||
|
set(MOLTENVK_LIBRARY "${CMAKE_BINARY_DIR}/externals/MoltenVK/MoltenVK/${MOLTENVK_RELATIVE_LIBPATH}")
|
||||||
endif()
|
endif()
|
||||||
find_library(MOLTENVK_LIBRARY MoltenVK REQUIRED)
|
|
||||||
message(STATUS "Using MoltenVK at ${MOLTENVK_LIBRARY}.")
|
message(STATUS "Using MoltenVK at ${MOLTENVK_LIBRARY}.")
|
||||||
set(PLATFORM_LIBRARIES ${PLATFORM_LIBRARIES} ${MOLTENVK_LIBRARY})
|
set(PLATFORM_LIBRARIES ${PLATFORM_LIBRARIES} ${MOLTENVK_LIBRARY})
|
||||||
endif()
|
endif()
|
||||||
|
|
@ -444,12 +555,10 @@ if (ENABLE_SDL2 AND USE_SYSTEM_SDL2)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (ENABLE_LIBUSB AND USE_SYSTEM_LIBUSB)
|
if (ENABLE_LIBUSB AND USE_SYSTEM_LIBUSB)
|
||||||
include(FindPkgConfig)
|
|
||||||
find_package(LibUSB)
|
find_package(LibUSB)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (USE_SYSTEM_SOUNDTOUCH)
|
if (USE_SYSTEM_SOUNDTOUCH)
|
||||||
include(FindPkgConfig)
|
|
||||||
find_package(SoundTouch REQUIRED)
|
find_package(SoundTouch REQUIRED)
|
||||||
add_library(SoundTouch INTERFACE)
|
add_library(SoundTouch INTERFACE)
|
||||||
target_link_libraries(SoundTouch INTERFACE "${SOUNDTOUCH_LIBRARIES}")
|
target_link_libraries(SoundTouch INTERFACE "${SOUNDTOUCH_LIBRARIES}")
|
||||||
|
|
@ -466,12 +575,9 @@ if (NOT ANDROID AND NOT IOS)
|
||||||
include(BundleTarget)
|
include(BundleTarget)
|
||||||
if (ENABLE_QT)
|
if (ENABLE_QT)
|
||||||
qt_bundle_target(citra_meta)
|
qt_bundle_target(citra_meta)
|
||||||
elseif (ENABLE_SDL2_FRONTEND)
|
|
||||||
bundle_target(citra_meta)
|
|
||||||
endif()
|
endif()
|
||||||
|
if (ENABLE_ROOM_STANDALONE)
|
||||||
if (ENABLE_ROOM)
|
bundle_target(citra_room_standalone)
|
||||||
bundle_target(citra_room)
|
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
@ -484,9 +590,14 @@ endif()
|
||||||
# http://standards.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-latest.html
|
# http://standards.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-latest.html
|
||||||
if(ENABLE_QT AND UNIX AND NOT APPLE)
|
if(ENABLE_QT AND UNIX AND NOT APPLE)
|
||||||
install(FILES "${PROJECT_SOURCE_DIR}/dist/azahar.desktop"
|
install(FILES "${PROJECT_SOURCE_DIR}/dist/azahar.desktop"
|
||||||
DESTINATION "${CMAKE_INSTALL_PREFIX}/share/applications")
|
DESTINATION "${CMAKE_INSTALL_PREFIX}/share/applications"
|
||||||
install(FILES "${PROJECT_SOURCE_DIR}/dist/citra.svg"
|
RENAME "org.azahar_emu.Azahar.desktop")
|
||||||
DESTINATION "${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/scalable/apps")
|
install(FILES "${PROJECT_SOURCE_DIR}/dist/azahar.svg"
|
||||||
install(FILES "${PROJECT_SOURCE_DIR}/dist/citra.xml"
|
DESTINATION "${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/scalable/apps"
|
||||||
|
RENAME "org.azahar_emu.Azahar.svg")
|
||||||
|
install(FILES "${PROJECT_SOURCE_DIR}/dist/azahar.png"
|
||||||
|
DESTINATION "${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/512x512/apps"
|
||||||
|
RENAME "org.azahar_emu.Azahar.png")
|
||||||
|
install(FILES "${PROJECT_SOURCE_DIR}/dist/org.azahar_emu.Azahar.xml"
|
||||||
DESTINATION "${CMAKE_INSTALL_PREFIX}/share/mime/packages")
|
DESTINATION "${CMAKE_INSTALL_PREFIX}/share/mime/packages")
|
||||||
endif()
|
endif()
|
||||||
|
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
||||||
# To use this as a script, make sure you pass in the variables BASE_DIR, SRC_DIR, BUILD_DIR, and TARGET_FILE
|
|
||||||
cmake_minimum_required(VERSION 3.15)
|
|
||||||
|
|
||||||
if(WIN32)
|
|
||||||
set(PLATFORM "windows")
|
|
||||||
elseif(APPLE)
|
|
||||||
set(PLATFORM "mac")
|
|
||||||
elseif(UNIX)
|
|
||||||
set(PLATFORM "linux")
|
|
||||||
else()
|
|
||||||
message(FATAL_ERROR "Cannot build installer for this unsupported platform")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
list(APPEND CMAKE_MODULE_PATH "${BASE_DIR}/CMakeModules")
|
|
||||||
include(DownloadExternals)
|
|
||||||
download_qt(tools_ifw)
|
|
||||||
get_external_prefix(qt QT_PREFIX)
|
|
||||||
|
|
||||||
file(GLOB_RECURSE INSTALLER_BASE "${QT_PREFIX}/**/installerbase*")
|
|
||||||
file(GLOB_RECURSE BINARY_CREATOR "${QT_PREFIX}/**/binarycreator*")
|
|
||||||
|
|
||||||
set(CONFIG_FILE "${SRC_DIR}/config/config_${PLATFORM}.xml")
|
|
||||||
set(PACKAGES_DIR "${BUILD_DIR}/packages")
|
|
||||||
file(MAKE_DIRECTORY ${PACKAGES_DIR})
|
|
||||||
|
|
||||||
execute_process(COMMAND ${BINARY_CREATOR} -t ${INSTALLER_BASE} -n -c ${CONFIG_FILE} -p ${PACKAGES_DIR} ${TARGET_FILE})
|
|
||||||
|
|
@ -117,6 +117,9 @@ if (BUNDLE_TARGET_EXECUTE)
|
||||||
set(extra_linuxdeploy_args --plugin qt)
|
set(extra_linuxdeploy_args --plugin qt)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Set up app icon
|
||||||
|
file(COPY_FILE "${source_path}/dist/azahar.svg" "${CMAKE_BINARY_DIR}/dist/org.azahar_emu.Azahar.svg")
|
||||||
|
|
||||||
message(STATUS "Creating AppDir for executable ${executable_path}")
|
message(STATUS "Creating AppDir for executable ${executable_path}")
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E env
|
execute_process(COMMAND ${CMAKE_COMMAND} -E env
|
||||||
${extra_linuxdeploy_env}
|
${extra_linuxdeploy_env}
|
||||||
|
|
@ -124,28 +127,13 @@ if (BUNDLE_TARGET_EXECUTE)
|
||||||
${extra_linuxdeploy_args}
|
${extra_linuxdeploy_args}
|
||||||
--plugin checkrt
|
--plugin checkrt
|
||||||
--executable "${executable_path}"
|
--executable "${executable_path}"
|
||||||
--icon-file "${source_path}/dist/citra.svg"
|
--icon-file "${CMAKE_BINARY_DIR}/dist/org.azahar_emu.Azahar.svg"
|
||||||
--desktop-file "${source_path}/dist/${executable_name}.desktop"
|
--desktop-file "${source_path}/dist/${executable_name}.desktop"
|
||||||
--appdir "${appdir_path}"
|
--appdir "${appdir_path}"
|
||||||
RESULT_VARIABLE linuxdeploy_appdir_result)
|
RESULT_VARIABLE linuxdeploy_appdir_result
|
||||||
|
ERROR_VARIABLE linuxdeploy_appdir_error)
|
||||||
if (NOT linuxdeploy_appdir_result EQUAL "0")
|
if (NOT linuxdeploy_appdir_result EQUAL "0")
|
||||||
message(FATAL_ERROR "linuxdeploy failed to create AppDir: ${linuxdeploy_appdir_result}")
|
message(FATAL_ERROR "linuxdeploy failed to create AppDir w/ exit code ${linuxdeploy_appdir_result}:\n${linuxdeploy_appdir_error}")
|
||||||
endif()
|
|
||||||
|
|
||||||
if (enable_qt)
|
|
||||||
set(qt_hook_file "${appdir_path}/apprun-hooks/linuxdeploy-plugin-qt-hook.sh")
|
|
||||||
file(READ "${qt_hook_file}" qt_hook_contents)
|
|
||||||
# Add Cinnamon to list of DEs for GTK3 theming.
|
|
||||||
string(REPLACE
|
|
||||||
"*XFCE*"
|
|
||||||
"*X-Cinnamon*|*XFCE*"
|
|
||||||
qt_hook_contents "${qt_hook_contents}")
|
|
||||||
# Wayland backend crashes due to changed schemas in Gnome 40.
|
|
||||||
string(REPLACE
|
|
||||||
"export QT_QPA_PLATFORMTHEME=gtk3"
|
|
||||||
"export QT_QPA_PLATFORMTHEME=gtk3; export GDK_BACKEND=x11"
|
|
||||||
qt_hook_contents "${qt_hook_contents}")
|
|
||||||
file(WRITE "${qt_hook_file}" "${qt_hook_contents}")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
message(STATUS "Creating AppImage for executable ${executable_path}")
|
message(STATUS "Creating AppImage for executable ${executable_path}")
|
||||||
|
|
@ -210,6 +198,10 @@ if (BUNDLE_TARGET_EXECUTE)
|
||||||
|
|
||||||
# On Linux, always bundle an AppImage.
|
# On Linux, always bundle an AppImage.
|
||||||
if (CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
|
if (CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
|
||||||
|
if (IS_MINGW)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
if (IN_PLACE)
|
if (IN_PLACE)
|
||||||
message(FATAL_ERROR "Cannot bundle for Linux in-place.")
|
message(FATAL_ERROR "Cannot bundle for Linux in-place.")
|
||||||
endif()
|
endif()
|
||||||
|
|
@ -276,33 +268,32 @@ else()
|
||||||
add_custom_target(bundle)
|
add_custom_target(bundle)
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
TARGET bundle
|
TARGET bundle
|
||||||
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/bundle/")
|
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/bundle/"
|
||||||
|
POST_BUILD)
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
TARGET bundle
|
TARGET bundle
|
||||||
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/bundle/dist/")
|
COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_SOURCE_DIR}/dist/scripting" "${CMAKE_BINARY_DIR}/bundle/scripting"
|
||||||
add_custom_command(
|
POST_BUILD)
|
||||||
TARGET bundle
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_SOURCE_DIR}/dist/icon.png" "${CMAKE_BINARY_DIR}/bundle/dist/citra.png")
|
|
||||||
add_custom_command(
|
|
||||||
TARGET bundle
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_SOURCE_DIR}/license.txt" "${CMAKE_BINARY_DIR}/bundle/")
|
|
||||||
add_custom_command(
|
|
||||||
TARGET bundle
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_SOURCE_DIR}/README.md" "${CMAKE_BINARY_DIR}/bundle/")
|
|
||||||
add_custom_command(
|
|
||||||
TARGET bundle
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_SOURCE_DIR}/dist/scripting" "${CMAKE_BINARY_DIR}/bundle/scripting")
|
|
||||||
|
|
||||||
# On Linux, add a command to prepare linuxdeploy and any required plugins before any bundling occurs.
|
# On Linux, add a command to prepare linuxdeploy and any required plugins before any bundling occurs.
|
||||||
if (CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
|
if (CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
|
||||||
add_custom_command(
|
if (MINGW)
|
||||||
TARGET bundle
|
add_custom_command(
|
||||||
COMMAND ${CMAKE_COMMAND}
|
TARGET bundle
|
||||||
"-DBUNDLE_TARGET_DOWNLOAD_LINUXDEPLOY=1"
|
# The target here is arbitrary
|
||||||
"-DLINUXDEPLOY_PATH=${CMAKE_BINARY_DIR}/externals/linuxdeploy"
|
COMMAND cp -r "$<TARGET_FILE_DIR:citra_meta>/*" "${CMAKE_BINARY_DIR}/bundle/"
|
||||||
"-DLINUXDEPLOY_ARCH=${CMAKE_HOST_SYSTEM_PROCESSOR}"
|
POST_BUILD)
|
||||||
-P "${CMAKE_SOURCE_DIR}/CMakeModules/BundleTarget.cmake"
|
else()
|
||||||
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}")
|
add_custom_command(
|
||||||
|
TARGET bundle
|
||||||
|
COMMAND ${CMAKE_COMMAND}
|
||||||
|
"-DBUNDLE_TARGET_DOWNLOAD_LINUXDEPLOY=1"
|
||||||
|
"-DLINUXDEPLOY_PATH=${CMAKE_BINARY_DIR}/externals/linuxdeploy"
|
||||||
|
"-DLINUXDEPLOY_ARCH=${CMAKE_HOST_SYSTEM_PROCESSOR}"
|
||||||
|
-P "${CMAKE_SOURCE_DIR}/CMakeModules/BundleTarget.cmake"
|
||||||
|
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
|
||||||
|
POST_BUILD)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
|
|
@ -314,6 +305,11 @@ else()
|
||||||
create_base_bundle_target()
|
create_base_bundle_target()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if (CMAKE_HOST_SYSTEM STREQUAL "Linux" AND MINGW)
|
||||||
|
# We don't really need to "bundle" MXE builds, so don't do anything
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
set(bundle_executable_path "$<TARGET_FILE:${target_name}>")
|
set(bundle_executable_path "$<TARGET_FILE:${target_name}>")
|
||||||
if (bundle_qt AND APPLE)
|
if (bundle_qt AND APPLE)
|
||||||
# For Qt targets on Apple, expect an app bundle.
|
# For Qt targets on Apple, expect an app bundle.
|
||||||
|
|
@ -352,6 +348,7 @@ else()
|
||||||
"-DBUNDLE_LIBRARY_PATHS=\"${bundle_library_paths}\""
|
"-DBUNDLE_LIBRARY_PATHS=\"${bundle_library_paths}\""
|
||||||
"-DBUNDLE_QT=${bundle_qt}"
|
"-DBUNDLE_QT=${bundle_qt}"
|
||||||
"-DIN_PLACE=${in_place}"
|
"-DIN_PLACE=${in_place}"
|
||||||
|
"-DIS_MINGW=${MINGW}"
|
||||||
"-DLINUXDEPLOY=${CMAKE_BINARY_DIR}/externals/linuxdeploy/squashfs-root/AppRun"
|
"-DLINUXDEPLOY=${CMAKE_BINARY_DIR}/externals/linuxdeploy/squashfs-root/AppRun"
|
||||||
-P "${CMAKE_SOURCE_DIR}/CMakeModules/BundleTarget.cmake"
|
-P "${CMAKE_SOURCE_DIR}/CMakeModules/BundleTarget.cmake"
|
||||||
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}")
|
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}")
|
||||||
|
|
|
||||||
11
CMakeModules/DisablePaxMprotect.cmake
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
function(disable_pax_mprotect target)
|
||||||
|
if (BSD STREQUAL "NetBSD")
|
||||||
|
add_custom_command(TARGET ${target} POST_BUILD
|
||||||
|
COMMAND paxctl +m "$<TARGET_FILE:${target}>"
|
||||||
|
COMMENT "Disabling PaX MPROTECT restrictions for '${target}'"
|
||||||
|
VERBATIM
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "disable_pax_mprotect only applies on NetBSD.")
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
@ -20,9 +20,9 @@ function(determine_qt_parameters target host_out type_out arch_out arch_path_out
|
||||||
set(arch_path "mingw_64")
|
set(arch_path "mingw_64")
|
||||||
elseif (MSVC)
|
elseif (MSVC)
|
||||||
if ("arm64" IN_LIST ARCHITECTURE)
|
if ("arm64" IN_LIST ARCHITECTURE)
|
||||||
set(arch_path "msvc2019_arm64")
|
set(arch_path "msvc2022_arm64")
|
||||||
elseif ("x86_64" IN_LIST ARCHITECTURE)
|
elseif ("x86_64" IN_LIST ARCHITECTURE)
|
||||||
set(arch_path "msvc2019_64")
|
set(arch_path "msvc2022_64")
|
||||||
else()
|
else()
|
||||||
message(FATAL_ERROR "Unsupported bundled Qt architecture. Enable USE_SYSTEM_QT and provide your own.")
|
message(FATAL_ERROR "Unsupported bundled Qt architecture. Enable USE_SYSTEM_QT and provide your own.")
|
||||||
endif()
|
endif()
|
||||||
|
|
@ -30,12 +30,13 @@ function(determine_qt_parameters target host_out type_out arch_out arch_path_out
|
||||||
|
|
||||||
# In case we're cross-compiling, prepare to also fetch the correct host Qt tools.
|
# In case we're cross-compiling, prepare to also fetch the correct host Qt tools.
|
||||||
if (CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "AMD64")
|
if (CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "AMD64")
|
||||||
set(host_arch_path "msvc2019_64")
|
set(host_arch_path "msvc2022_64")
|
||||||
elseif (CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "ARM64")
|
elseif (CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "ARM64")
|
||||||
# TODO: msvc2019_arm64 doesn't include some of the required tools for some reason,
|
# TODO: msvc2019_arm64 doesn't include some of the required tools for some reason,
|
||||||
# TODO: so until it does, just use msvc2019_64 under x86_64 emulation.
|
# TODO: so until it does, just use msvc2019_64 under x86_64 emulation.
|
||||||
|
# TODO: ^ Is this still true with msvc2022?
|
||||||
# set(host_arch_path "msvc2019_arm64")
|
# set(host_arch_path "msvc2019_arm64")
|
||||||
set(host_arch_path "msvc2019_64")
|
set(host_arch_path "msvc2022_64")
|
||||||
endif()
|
endif()
|
||||||
set(host_arch "win64_${host_arch_path}")
|
set(host_arch "win64_${host_arch_path}")
|
||||||
else()
|
else()
|
||||||
|
|
@ -105,7 +106,7 @@ function(download_qt_configuration prefix_out target host type arch arch_path ba
|
||||||
|
|
||||||
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.1.18")
|
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}")
|
||||||
|
|
@ -170,27 +171,16 @@ function(download_qt target)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
function(download_moltenvk)
|
function(download_moltenvk)
|
||||||
if (IOS)
|
|
||||||
set(MOLTENVK_PLATFORM "iOS")
|
|
||||||
else()
|
|
||||||
set(MOLTENVK_PLATFORM "macOS")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
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 "${CMAKE_BINARY_DIR}/externals/MoltenVK")
|
||||||
if (NOT EXISTS ${MOLTENVK_TAR})
|
if (NOT EXISTS ${MOLTENVK_TAR})
|
||||||
file(DOWNLOAD https://github.com/KhronosGroup/MoltenVK/releases/download/v1.2.7-rc2/MoltenVK-all.tar
|
file(DOWNLOAD https://github.com/KhronosGroup/MoltenVK/releases/download/v1.2.9/MoltenVK-all.tar
|
||||||
${MOLTENVK_TAR} SHOW_PROGRESS)
|
${MOLTENVK_TAR} SHOW_PROGRESS)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf "${MOLTENVK_TAR}"
|
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf "${MOLTENVK_TAR}"
|
||||||
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/externals")
|
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/externals")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Add the MoltenVK library path to the prefix so find_library can locate it.
|
|
||||||
list(APPEND CMAKE_PREFIX_PATH "${MOLTENVK_DIR}/MoltenVK/dylib/${MOLTENVK_PLATFORM}")
|
|
||||||
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE)
|
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
function(get_external_prefix lib_name prefix_var)
|
function(get_external_prefix lib_name prefix_var)
|
||||||
|
|
|
||||||
|
|
@ -1,49 +1,52 @@
|
||||||
# Gets a UTC timstamp and sets the provided variable to it
|
macro(generate_build_info)
|
||||||
function(get_timestamp _var)
|
find_package(Git QUIET)
|
||||||
string(TIMESTAMP timestamp UTC)
|
|
||||||
set(${_var} "${timestamp}" PARENT_SCOPE)
|
|
||||||
endfunction()
|
|
||||||
get_timestamp(BUILD_DATE)
|
|
||||||
|
|
||||||
list(APPEND CMAKE_MODULE_PATH "${SRC_DIR}/externals/cmake-modules")
|
# Gets a UTC timstamp and sets the provided variable to it
|
||||||
|
function(get_timestamp _var)
|
||||||
|
string(TIMESTAMP timestamp UTC)
|
||||||
|
set(${_var} "${timestamp}" PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
get_timestamp(BUILD_DATE)
|
||||||
|
|
||||||
if (EXISTS "${SRC_DIR}/.git/objects")
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/externals/cmake-modules")
|
||||||
# Find the package here with the known path so that the GetGit commands can find it as well
|
|
||||||
find_package(Git QUIET PATHS "${GIT_EXECUTABLE}")
|
|
||||||
|
|
||||||
# only use Git to check revision info when source is obtained via Git
|
if (EXISTS "${CMAKE_SOURCE_DIR}/GIT-COMMIT" AND EXISTS "${CMAKE_SOURCE_DIR}/GIT-TAG")
|
||||||
include(GetGitRevisionDescription)
|
file(READ "${CMAKE_SOURCE_DIR}/GIT-COMMIT" GIT_REV_RAW LIMIT 64)
|
||||||
get_git_head_revision(GIT_REF_SPEC GIT_REV)
|
string(STRIP "${GIT_REV_RAW}" GIT_REV)
|
||||||
git_describe(GIT_DESC --always --long --dirty)
|
string(SUBSTRING "${GIT_REV_RAW}" 0 9 GIT_DESC)
|
||||||
git_branch_name(GIT_BRANCH)
|
set(GIT_BRANCH "HEAD")
|
||||||
elseif (EXISTS "${SRC_DIR}/GIT-COMMIT" AND EXISTS "${SRC_DIR}/GIT-TAG")
|
elseif (EXISTS "${CMAKE_SOURCE_DIR}/.git/objects")
|
||||||
# unified source archive
|
# Find the package here with the known path so that the GetGit commands can find it as well
|
||||||
file(READ "${SRC_DIR}/GIT-COMMIT" GIT_REV_RAW LIMIT 64)
|
find_package(Git QUIET PATHS "${GIT_EXECUTABLE}")
|
||||||
string(STRIP "${GIT_REV_RAW}" GIT_REV)
|
|
||||||
string(SUBSTRING "${GIT_REV_RAW}" 0 9 GIT_DESC)
|
|
||||||
set(GIT_BRANCH "HEAD")
|
|
||||||
else()
|
|
||||||
# self-packed archive?
|
|
||||||
set(GIT_REV "UNKNOWN")
|
|
||||||
set(GIT_DESC "UNKNOWN")
|
|
||||||
set(GIT_BRANCH "UNKNOWN")
|
|
||||||
endif()
|
|
||||||
string(SUBSTRING "${GIT_REV}" 0 7 GIT_SHORT_REV)
|
|
||||||
|
|
||||||
# Set build version
|
# only use Git to check revision info when source is obtained via Git
|
||||||
set(REPO_NAME "")
|
include(GetGitRevisionDescription)
|
||||||
set(BUILD_VERSION "0")
|
get_git_head_revision(GIT_REF_SPEC GIT_REV)
|
||||||
set(BUILD_FULLNAME "${GIT_SHORT_REV}")
|
git_describe(GIT_DESC --always --long --dirty)
|
||||||
if (DEFINED ENV{CI} AND DEFINED ENV{GITHUB_ACTIONS})
|
git_branch_name(GIT_BRANCH)
|
||||||
if ($ENV{GITHUB_REF_TYPE} STREQUAL "tag")
|
else()
|
||||||
set(GIT_TAG $ENV{GITHUB_REF_NAME})
|
# self-packed archive?
|
||||||
|
set(GIT_REV "UNKNOWN")
|
||||||
|
set(GIT_DESC "UNKNOWN")
|
||||||
|
set(GIT_BRANCH "UNKNOWN")
|
||||||
endif()
|
endif()
|
||||||
elseif (EXISTS "${SRC_DIR}/GIT-COMMIT" AND EXISTS "${SRC_DIR}/GIT-TAG")
|
string(SUBSTRING "${GIT_REV}" 0 7 GIT_SHORT_REV)
|
||||||
file(READ "${SRC_DIR}/GIT-TAG" GIT_TAG)
|
|
||||||
string(STRIP ${GIT_TAG} GIT_TAG)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (DEFINED GIT_TAG AND NOT "${GIT_TAG}" STREQUAL "unknown")
|
# Set build version
|
||||||
set(BUILD_VERSION "${GIT_TAG}")
|
set(REPO_NAME "")
|
||||||
set(BUILD_FULLNAME "${BUILD_VERSION}")
|
set(BUILD_VERSION "0")
|
||||||
endif()
|
set(BUILD_FULLNAME "${GIT_SHORT_REV}")
|
||||||
|
if (DEFINED ENV{CI} AND DEFINED ENV{GITHUB_ACTIONS})
|
||||||
|
if ($ENV{GITHUB_REF_TYPE} STREQUAL "tag")
|
||||||
|
set(GIT_TAG $ENV{GITHUB_REF_NAME})
|
||||||
|
endif()
|
||||||
|
elseif (EXISTS "${CMAKE_SOURCE_DIR}/GIT-COMMIT" AND EXISTS "${CMAKE_SOURCE_DIR}/GIT-TAG")
|
||||||
|
file(READ "${CMAKE_SOURCE_DIR}/GIT-TAG" GIT_TAG)
|
||||||
|
string(STRIP ${GIT_TAG} GIT_TAG)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (DEFINED GIT_TAG AND NOT "${GIT_TAG}" STREQUAL "unknown")
|
||||||
|
set(BUILD_VERSION "${GIT_TAG}")
|
||||||
|
set(BUILD_FULLNAME "${BUILD_VERSION}")
|
||||||
|
endif()
|
||||||
|
endmacro()
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,10 @@
|
||||||
list(APPEND CMAKE_MODULE_PATH "${SRC_DIR}/CMakeModules")
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMakeModules")
|
||||||
|
|
||||||
include(GenerateBuildInfo)
|
include(GenerateBuildInfo)
|
||||||
|
generate_build_info()
|
||||||
|
|
||||||
# The variable SRC_DIR must be passed into the script (since it uses the current build directory for all values of CMAKE_*_DIR)
|
# The variable SRC_DIR must be passed into the script (since it uses the current build directory for all values of CMAKE_*_DIR)
|
||||||
set(VIDEO_CORE "${SRC_DIR}/src/video_core")
|
set(VIDEO_CORE "${CMAKE_SOURCE_DIR}/src/video_core")
|
||||||
set(HASH_FILES
|
set(HASH_FILES
|
||||||
"${VIDEO_CORE}/renderer_opengl/gl_shader_disk_cache.cpp"
|
"${VIDEO_CORE}/renderer_opengl/gl_shader_disk_cache.cpp"
|
||||||
"${VIDEO_CORE}/renderer_opengl/gl_shader_disk_cache.h"
|
"${VIDEO_CORE}/renderer_opengl/gl_shader_disk_cache.h"
|
||||||
|
|
@ -10,6 +12,10 @@ set(HASH_FILES
|
||||||
"${VIDEO_CORE}/renderer_opengl/gl_shader_util.h"
|
"${VIDEO_CORE}/renderer_opengl/gl_shader_util.h"
|
||||||
"${VIDEO_CORE}/renderer_vulkan/vk_shader_util.cpp"
|
"${VIDEO_CORE}/renderer_vulkan/vk_shader_util.cpp"
|
||||||
"${VIDEO_CORE}/renderer_vulkan/vk_shader_util.h"
|
"${VIDEO_CORE}/renderer_vulkan/vk_shader_util.h"
|
||||||
|
"${VIDEO_CORE}/renderer_vulkan/vk_shader_disk_cache.cpp"
|
||||||
|
"${VIDEO_CORE}/renderer_vulkan/vk_shader_disk_cache.h"
|
||||||
|
"${VIDEO_CORE}/renderer_vulkan/vk_pipeline_cache.cpp"
|
||||||
|
"${VIDEO_CORE}/renderer_vulkan/vk_pipeline_cache.h"
|
||||||
"${VIDEO_CORE}/shader/generator/glsl_fs_shader_gen.cpp"
|
"${VIDEO_CORE}/shader/generator/glsl_fs_shader_gen.cpp"
|
||||||
"${VIDEO_CORE}/shader/generator/glsl_fs_shader_gen.h"
|
"${VIDEO_CORE}/shader/generator/glsl_fs_shader_gen.h"
|
||||||
"${VIDEO_CORE}/shader/generator/glsl_shader_decompiler.cpp"
|
"${VIDEO_CORE}/shader/generator/glsl_shader_decompiler.cpp"
|
||||||
|
|
@ -18,6 +24,7 @@ set(HASH_FILES
|
||||||
"${VIDEO_CORE}/shader/generator/glsl_shader_gen.h"
|
"${VIDEO_CORE}/shader/generator/glsl_shader_gen.h"
|
||||||
"${VIDEO_CORE}/shader/generator/pica_fs_config.cpp"
|
"${VIDEO_CORE}/shader/generator/pica_fs_config.cpp"
|
||||||
"${VIDEO_CORE}/shader/generator/pica_fs_config.h"
|
"${VIDEO_CORE}/shader/generator/pica_fs_config.h"
|
||||||
|
"${VIDEO_CORE}/shader/generator/profile.h"
|
||||||
"${VIDEO_CORE}/shader/generator/shader_gen.cpp"
|
"${VIDEO_CORE}/shader/generator/shader_gen.cpp"
|
||||||
"${VIDEO_CORE}/shader/generator/shader_gen.h"
|
"${VIDEO_CORE}/shader/generator/shader_gen.h"
|
||||||
"${VIDEO_CORE}/shader/generator/shader_uniforms.cpp"
|
"${VIDEO_CORE}/shader/generator/shader_uniforms.cpp"
|
||||||
|
|
@ -41,4 +48,4 @@ foreach (F IN LISTS HASH_FILES)
|
||||||
set(COMBINED "${COMBINED}${TMP}")
|
set(COMBINED "${COMBINED}${TMP}")
|
||||||
endforeach()
|
endforeach()
|
||||||
string(MD5 SHADER_CACHE_VERSION "${COMBINED}")
|
string(MD5 SHADER_CACHE_VERSION "${COMBINED}")
|
||||||
configure_file("${SRC_DIR}/src/common/scm_rev.cpp.in" "scm_rev.cpp" @ONLY)
|
configure_file("${CMAKE_SOURCE_DIR}/src/common/scm_rev.cpp.in" "scm_rev.cpp" @ONLY)
|
||||||
|
|
|
||||||
282
CMakeModules/GenerateSettingKeys.cmake
Normal file
|
|
@ -0,0 +1,282 @@
|
||||||
|
## This file should be the *only place* where setting keys exist as strings.
|
||||||
|
# All references to setting strings should be derived from the
|
||||||
|
# `setting_keys.h` and `jni_setting_keys.cpp` files generated here.
|
||||||
|
|
||||||
|
# !!! Changes made here should be mirrored to SettingKeys.kt if used on Android
|
||||||
|
|
||||||
|
# Shared setting keys (multi-platform)
|
||||||
|
foreach(KEY IN ITEMS
|
||||||
|
"use_artic_base_controller"
|
||||||
|
"enable_gamemode"
|
||||||
|
"use_cpu_jit"
|
||||||
|
"cpu_clock_percentage"
|
||||||
|
"is_new_3ds"
|
||||||
|
"lle_applets"
|
||||||
|
"deterministic_async_operations"
|
||||||
|
"enable_required_online_lle_modules"
|
||||||
|
"use_virtual_sd"
|
||||||
|
"use_custom_storage"
|
||||||
|
"compress_cia_installs"
|
||||||
|
"async_fs_operations"
|
||||||
|
"region_value"
|
||||||
|
"init_clock"
|
||||||
|
"init_time"
|
||||||
|
"init_time_offset"
|
||||||
|
"init_ticks_type"
|
||||||
|
"init_ticks_override"
|
||||||
|
"plugin_loader"
|
||||||
|
"allow_plugin_loader"
|
||||||
|
"steps_per_hour"
|
||||||
|
"apply_region_free_patch"
|
||||||
|
"graphics_api"
|
||||||
|
"physical_device"
|
||||||
|
"use_gles"
|
||||||
|
"renderer_debug"
|
||||||
|
"dump_command_buffers"
|
||||||
|
"spirv_shader_gen"
|
||||||
|
"disable_spirv_optimizer"
|
||||||
|
"async_shader_compilation"
|
||||||
|
"async_presentation"
|
||||||
|
"use_hw_shader"
|
||||||
|
"use_disk_shader_cache"
|
||||||
|
"shaders_accurate_mul"
|
||||||
|
"use_vsync"
|
||||||
|
"use_display_refresh_rate_detection"
|
||||||
|
"use_shader_jit"
|
||||||
|
"resolution_factor"
|
||||||
|
"frame_limit"
|
||||||
|
"turbo_limit"
|
||||||
|
"texture_filter"
|
||||||
|
"texture_sampling"
|
||||||
|
"delay_game_render_thread_us"
|
||||||
|
"simulate_3ds_gpu_timings"
|
||||||
|
"layout_option"
|
||||||
|
"swap_screen"
|
||||||
|
"upright_screen"
|
||||||
|
"secondary_display_layout"
|
||||||
|
"large_screen_proportion"
|
||||||
|
"screen_gap"
|
||||||
|
"small_screen_position"
|
||||||
|
"custom_top_x"
|
||||||
|
"custom_top_y"
|
||||||
|
"custom_top_width"
|
||||||
|
"custom_top_height"
|
||||||
|
"custom_bottom_x"
|
||||||
|
"custom_bottom_y"
|
||||||
|
"custom_bottom_width"
|
||||||
|
"custom_bottom_height"
|
||||||
|
"custom_second_layer_opacity"
|
||||||
|
"aspect_ratio"
|
||||||
|
"screen_top_stretch"
|
||||||
|
"screen_top_leftright_padding"
|
||||||
|
"screen_top_topbottom_padding"
|
||||||
|
"screen_bottom_stretch"
|
||||||
|
"screen_bottom_leftright_padding"
|
||||||
|
"screen_bottom_topbottom_padding"
|
||||||
|
"portrait_layout_option"
|
||||||
|
"custom_portrait_top_x"
|
||||||
|
"custom_portrait_top_y"
|
||||||
|
"custom_portrait_top_width"
|
||||||
|
"custom_portrait_top_height"
|
||||||
|
"custom_portrait_bottom_x"
|
||||||
|
"custom_portrait_bottom_y"
|
||||||
|
"custom_portrait_bottom_width"
|
||||||
|
"custom_portrait_bottom_height"
|
||||||
|
"bg_red"
|
||||||
|
"bg_green"
|
||||||
|
"bg_blue"
|
||||||
|
"render_3d"
|
||||||
|
"factor_3d"
|
||||||
|
"swap_eyes_3d"
|
||||||
|
"render_3d_which_display"
|
||||||
|
"mono_render_option"
|
||||||
|
"cardboard_screen_size"
|
||||||
|
"cardboard_x_shift"
|
||||||
|
"cardboard_y_shift"
|
||||||
|
"filter_mode"
|
||||||
|
"pp_shader_name"
|
||||||
|
"anaglyph_shader_name"
|
||||||
|
"dump_textures"
|
||||||
|
"custom_textures"
|
||||||
|
"preload_textures"
|
||||||
|
"async_custom_loading"
|
||||||
|
"disable_right_eye_render"
|
||||||
|
"audio_emulation"
|
||||||
|
"enable_audio_stretching"
|
||||||
|
"enable_realtime_audio"
|
||||||
|
"volume"
|
||||||
|
"output_type"
|
||||||
|
"output_device"
|
||||||
|
"input_type"
|
||||||
|
"input_device"
|
||||||
|
"simulate_headphones_plugged"
|
||||||
|
"delay_start_for_lle_modules"
|
||||||
|
"use_gdbstub"
|
||||||
|
"gdbstub_port"
|
||||||
|
"instant_debug_log"
|
||||||
|
"enable_rpc_server"
|
||||||
|
"log_filter"
|
||||||
|
"log_regex_filter"
|
||||||
|
"toggle_unique_data_console_type"
|
||||||
|
"break_on_unmapped_memory_access"
|
||||||
|
"use_integer_scaling"
|
||||||
|
"layouts_to_cycle"
|
||||||
|
"camera_inner_flip"
|
||||||
|
"camera_outer_left_flip"
|
||||||
|
"camera_outer_right_flip"
|
||||||
|
"camera_inner_name"
|
||||||
|
"camera_inner_config"
|
||||||
|
"camera_outer_left_name"
|
||||||
|
"camera_outer_left_config"
|
||||||
|
"camera_outer_right_name"
|
||||||
|
"camera_outer_right_config"
|
||||||
|
"video_encoder"
|
||||||
|
"video_encoder_options"
|
||||||
|
"video_bitrate"
|
||||||
|
"audio_encoder"
|
||||||
|
"audio_encoder_options"
|
||||||
|
"audio_bitrate"
|
||||||
|
"last_artic_base_addr"
|
||||||
|
"motion_device"
|
||||||
|
"touch_device"
|
||||||
|
"udp_input_address"
|
||||||
|
"udp_input_port"
|
||||||
|
"udp_pad_index"
|
||||||
|
"record_frame_times"
|
||||||
|
"language" # FIXME: DUPLICATE KEY (libretro equivalent: language_value)
|
||||||
|
"web_api_url"
|
||||||
|
"citra_username"
|
||||||
|
"citra_token"
|
||||||
|
)
|
||||||
|
set(SETTING_KEY_LIST "${SETTING_KEY_LIST}\n\"${KEY}\",")
|
||||||
|
set(SETTING_KEY_DEFINITIONS "${SETTING_KEY_DEFINITIONS}\nDEFINE_KEY(${KEY})")
|
||||||
|
if (ANDROID)
|
||||||
|
string(REPLACE "_" "_1" KEY_JNI_ESCAPED ${KEY})
|
||||||
|
set(JNI_SETTING_KEY_DEFINITIONS "${JNI_SETTING_KEY_DEFINITIONS}
|
||||||
|
JNI_DEFINE_KEY(${KEY}, ${KEY_JNI_ESCAPED})")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
# Qt exclusive setting keys
|
||||||
|
# Note: A lot of these are very generic because our Qt settings are currently put under groups:
|
||||||
|
# E.g. UILayout\geometry
|
||||||
|
# TODO: We should probably get rid of these groups and use complete keys at some point. -OS
|
||||||
|
# FIXME: Some of these settings don't use the standard snake_case. When we can migrate, address that. -OS
|
||||||
|
if (ENABLE_QT)
|
||||||
|
foreach(KEY IN ITEMS
|
||||||
|
"nickname"
|
||||||
|
"ip"
|
||||||
|
"port"
|
||||||
|
"room_nickname"
|
||||||
|
"room_name"
|
||||||
|
"room_port"
|
||||||
|
"host_type"
|
||||||
|
"max_player"
|
||||||
|
"room_description"
|
||||||
|
"multiplayer_filter_text"
|
||||||
|
"multiplayer_filter_games_owned"
|
||||||
|
"multiplayer_filter_hide_empty"
|
||||||
|
"multiplayer_filter_hide_full"
|
||||||
|
"username_ban_list"
|
||||||
|
"username"
|
||||||
|
"ip_ban_list"
|
||||||
|
"romsPath"
|
||||||
|
"symbolsPath"
|
||||||
|
"movieRecordPath"
|
||||||
|
"moviePlaybackPath"
|
||||||
|
"videoDumpingPath"
|
||||||
|
"gameListRootDir"
|
||||||
|
"gameListDeepScan"
|
||||||
|
"path"
|
||||||
|
"deep_scan"
|
||||||
|
"expanded"
|
||||||
|
"recentFiles"
|
||||||
|
"output_format"
|
||||||
|
"format_options"
|
||||||
|
"theme"
|
||||||
|
"program_id"
|
||||||
|
"geometry"
|
||||||
|
"state"
|
||||||
|
"geometryRenderWindow"
|
||||||
|
"gameListHeaderState"
|
||||||
|
"microProfileDialogGeometry"
|
||||||
|
"name"
|
||||||
|
"bind"
|
||||||
|
"profile"
|
||||||
|
"use_touchpad"
|
||||||
|
"controller_touch_device"
|
||||||
|
"use_touch_from_button"
|
||||||
|
"touch_from_button_map"
|
||||||
|
"touch_from_button_maps" # Why are these two so similar? Basically typo bait
|
||||||
|
"nand_directory"
|
||||||
|
"sdmc_directory"
|
||||||
|
"game_id"
|
||||||
|
"KeySeq"
|
||||||
|
"gamedirs"
|
||||||
|
"libvorbis"
|
||||||
|
"Context"
|
||||||
|
"favorites"
|
||||||
|
)
|
||||||
|
set(SETTING_KEY_LIST "${SETTING_KEY_LIST}\n\"${KEY}\",")
|
||||||
|
set(SETTING_KEY_DEFINITIONS "${SETTING_KEY_DEFINITIONS}\nDEFINE_KEY(${KEY})")
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Android exclusive setting keys (standalone app only, not Android libretro)
|
||||||
|
if (ANDROID)
|
||||||
|
foreach(KEY IN ITEMS
|
||||||
|
"expand_to_cutout_area"
|
||||||
|
"performance_overlay_enable"
|
||||||
|
"performance_overlay_show_fps"
|
||||||
|
"performance_overlay_show_frame_time"
|
||||||
|
"performance_overlay_show_speed"
|
||||||
|
"performance_overlay_show_app_ram_usage"
|
||||||
|
"performance_overlay_show_available_ram"
|
||||||
|
"performance_overlay_show_battery_temp"
|
||||||
|
"performance_overlay_background"
|
||||||
|
"use_frame_limit" # FIXME: DUPLICATE KEY (shared equivalent: frame_limit)
|
||||||
|
"android_hide_images"
|
||||||
|
"screen_orientation"
|
||||||
|
"performance_overlay_position"
|
||||||
|
)
|
||||||
|
string(REPLACE "_" "_1" KEY_JNI_ESCAPED ${KEY})
|
||||||
|
set(SETTING_KEY_LIST "${SETTING_KEY_LIST}\n\"${KEY}\",")
|
||||||
|
set(SETTING_KEY_DEFINITIONS "${SETTING_KEY_DEFINITIONS}\nDEFINE_KEY(${KEY})")
|
||||||
|
set(JNI_SETTING_KEY_DEFINITIONS "${JNI_SETTING_KEY_DEFINITIONS}
|
||||||
|
JNI_DEFINE_KEY(${KEY}, ${KEY_JNI_ESCAPED})")
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Libretro exclusive setting keys
|
||||||
|
if (ENABLE_LIBRETRO)
|
||||||
|
foreach(KEY IN ITEMS
|
||||||
|
"language_value"
|
||||||
|
"swap_screen_mode"
|
||||||
|
"use_libretro_save_path"
|
||||||
|
"analog_function"
|
||||||
|
"analog_deadzone"
|
||||||
|
"enable_mouse_touchscreen"
|
||||||
|
"enable_touch_touchscreen"
|
||||||
|
"enable_touch_pointer_timeout"
|
||||||
|
"enable_motion"
|
||||||
|
"motion_sensitivity"
|
||||||
|
)
|
||||||
|
string(REPLACE "_" "_1" KEY_JNI_ESCAPED ${KEY})
|
||||||
|
set(SETTING_KEY_LIST "${SETTING_KEY_LIST}\n\"${KEY}\",")
|
||||||
|
set(SETTING_KEY_DEFINITIONS "${SETTING_KEY_DEFINITIONS}\nDEFINE_KEY(${KEY})")
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Trim trailing comma and newline from SETTING_KEY_LIST
|
||||||
|
string(LENGTH "${SETTING_KEY_LIST}" SETTING_KEY_LIST_LENGTH)
|
||||||
|
math(EXPR SETTING_KEY_LIST_NEW_LENGTH "${SETTING_KEY_LIST_LENGTH} - 1")
|
||||||
|
string(SUBSTRING "${SETTING_KEY_LIST}" 0 ${SETTING_KEY_LIST_NEW_LENGTH} SETTING_KEY_LIST)
|
||||||
|
|
||||||
|
# Configure files
|
||||||
|
configure_file("common/setting_keys.h.in" "common/setting_keys.h" @ONLY)
|
||||||
|
if (ENABLE_QT)
|
||||||
|
configure_file("citra_qt/setting_qkeys.h.in" "citra_qt/setting_qkeys.h" @ONLY)
|
||||||
|
endif()
|
||||||
|
if (ANDROID AND NOT ENABLE_LIBRETRO)
|
||||||
|
configure_file("android/app/src/main/jni/jni_setting_keys.cpp.in" "android/app/src/main/jni/jni_setting_keys.cpp" @ONLY)
|
||||||
|
endif()
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
**The Contributor's Guide has moved to [the wiki](https://github.com/citra-emu/citra/wiki/Contributing).**
|
|
||||||
83
README.md
|
|
@ -1,7 +1,11 @@
|
||||||

|

|
||||||
|
|
||||||

|

|
||||||
 <!--  -->
|

|
||||||
|
|
||||||
|

|
||||||
|

|
||||||
|

|
||||||

|

|
||||||
|
|
||||||
<b>Azahar</b> is an open-source 3DS emulator project based on Citra.
|
<b>Azahar</b> is an open-source 3DS emulator project based on Citra.
|
||||||
|
|
@ -10,44 +14,67 @@ It was created from the merging of PabloMK7's Citra fork and the Lime3DS project
|
||||||
|
|
||||||
The goal of this project is to be the de-facto platform for future development.
|
The goal of this project is to be the de-facto platform for future development.
|
||||||
|
|
||||||
> [!NOTE]
|
|
||||||
> Azahar has not fully released yet. For this reason, there are no compiled binaries available for download.
|
|
||||||
>
|
|
||||||
> It is recommended that only developers and early adopters should use the emulator until our first stable release.
|
|
||||||
>
|
|
||||||
> Here be dragons.
|
|
||||||
|
|
||||||
<!--
|
|
||||||
# Installation
|
# Installation
|
||||||
|
|
||||||
### Windows & MacOS
|
### Windows
|
||||||
|
|
||||||
Download the latest release from [Releases](https://github.com/azahar-emu/azahar/releases).
|
Azahar is available as both an installer and a zip archive.
|
||||||
|
|
||||||
|
Download the latest release in your preferred format from the [Releases](https://github.com/azahar-emu/azahar/releases) page.
|
||||||
|
|
||||||
|
If you are unsure of whether you want to use MSVC or MSYS2, use MSYS2.
|
||||||
|
|
||||||
---
|
---
|
||||||
### Android
|
|
||||||
The recommended method of downloading Azahar on Android is via the [Google Play store](https://play.google.com/store/apps/details?id=io.github.lime3ds.android).
|
|
||||||
|
|
||||||
Alternatively, you can install the app using Obtainium:
|
### MacOS
|
||||||
|
|
||||||
|
To download a build that will work on all Macs, you can download the `macos-universal` build on the [Releases](https://github.com/azahar-emu/azahar/releases) page.
|
||||||
|
|
||||||
|
Alternatively, if you wish to download a build specifically for your Mac, you can choose either:
|
||||||
|
|
||||||
|
- `macos-arm64` for Apple Silicon Macs
|
||||||
|
- `macos-x86_64` for Intel Macs
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Android
|
||||||
|
|
||||||
|
There are two variants of Azahar available on Android, those being the Vanilla and Google Play builds.
|
||||||
|
|
||||||
|
The Vanilla build is technically superior, as it uses an alternative method of file management which is faster, but isn't permitted on the Google Play store.
|
||||||
|
|
||||||
|
For most users, we currently recommended downloading Azahar on Android via the Google Play Store for ease of accessibility:
|
||||||
|
|
||||||
|
<a href='https://play.google.com/store/apps/details?id=io.github.lime3ds.android'><img width='180' alt='Get it on Google Play' src='https://raw.githubusercontent.com/pioug/google-play-badges/06ccd9252af1501613da2ca28eaffe31307a4e6d/svg/English.svg'/></a>
|
||||||
|
|
||||||
|
Alternatively, you can install the app using Obtainium, allowing you to use the Vanilla variant:
|
||||||
1. Download and install Obtainium from [here](https://github.com/ImranR98/Obtainium/releases) (use the file named `app-release.apk`)
|
1. Download and install Obtainium from [here](https://github.com/ImranR98/Obtainium/releases) (use the file named `app-release.apk`)
|
||||||
2. Open Obtainium and click 'Add App'
|
2. Open Obtainium and click 'Add App'
|
||||||
3. Type `https://github.com/azahar/azahar-emu` into the 'App Source URL' section
|
3. Type `https://github.com/azahar-emu/azahar` into the 'App Source URL' section
|
||||||
4. Click 'Add'
|
4. Click 'Add'
|
||||||
5. Click 'Install'
|
5. Click 'Install', and select the preferred variant
|
||||||
|
|
||||||
If you wish, you can also simply install the latest APK from the [Releases](https://github.com/azahar-emu/azahar/releases) page.
|
If you wish, you can also simply install the latest APK from the [Releases](https://github.com/azahar-emu/azahar/releases) page.
|
||||||
|
|
||||||
Keep in mind that you will not recieve automatic updates when installing via the APK.
|
Keep in mind that you will not recieve automatic updates when installing via the APK.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Linux
|
### Linux
|
||||||
|
|
||||||
Azahar is available as an AppImage on the [Releases](https://github.com/azahar-emu/azahar/releases) page.
|
The recommended format for using Azahar on Linux is the Flatpak available on Flathub:
|
||||||
|
|
||||||
We are also on Flathub:
|
<a href='https://flathub.org/apps/org.azahar_emu.Azahar'><img width='180' alt='Download on Flathub' src='https://dl.flathub.org/assets/badges/flathub-badge-en.png'/></a>
|
||||||
|
|
||||||
<a href=https://flathub.org/apps/org.azahar-emu.azahar><img width='180' alt='Download on Flathub' src='https://dl.flathub.org/assets/badges/flathub-badge-en.png'/></a>
|
Azahar is also available as an AppImage on the [Releases](https://github.com/azahar-emu/azahar/releases) page.
|
||||||
-->
|
|
||||||
|
There are two variants of the AppImage available, those being `azahar.AppImage` and `azahar-wayland.AppImage`.
|
||||||
|
|
||||||
|
If you are unsure of which variant to use, we recommend using the default `azahar.AppImage`. This is because of upstream issues in the Wayland ecosystem which may cause problems when running the emulator (e.g. [#1162](https://github.com/azahar-emu/azahar/issues/1162)).
|
||||||
|
|
||||||
|
Unless you explicitly require native Wayland support (e.g. you are running a system with no Xwayland), the non-Wayland variant is recommended.
|
||||||
|
|
||||||
|
The Flatpak build of Azahar also has native Wayland support disabled by default. If you require native Wayland support, it can be enabled using [Flatseal](https://flathub.org/en/apps/com.github.tchx84.Flatseal).
|
||||||
|
|
||||||
# Build instructions
|
# Build instructions
|
||||||
|
|
||||||
|
|
@ -79,18 +106,23 @@ To do so, simply read https://github.com/azahar-emu/compatibility-list/blob/mast
|
||||||
Contributing compatibility data helps more accurately reflect the current capabilities of the emulator, so it would be highly appreciated if you could go through the reporting process after completing a game.
|
Contributing compatibility data helps more accurately reflect the current capabilities of the emulator, so it would be highly appreciated if you could go through the reporting process after completing a game.
|
||||||
|
|
||||||
# Minimum requirements
|
# Minimum requirements
|
||||||
|
|
||||||
Below are the minimum requirements to run Azahar:
|
Below are the minimum requirements to run Azahar:
|
||||||
|
|
||||||
### Desktop
|
### Desktop
|
||||||
|
|
||||||
```
|
```
|
||||||
Operating System: Windows 10 (64-bit), MacOS 13 (Ventura), or modern 64-bit Linux
|
Operating System: Windows 10 (64-bit), MacOS 13.4 (Ventura), or modern 64-bit Linux
|
||||||
CPU: x86-64 (64-bit) CPU. Single core performance higher than 1,800 on Passmark
|
CPU: x86-64/ARM64 CPU (Windows for ARM not supported).
|
||||||
|
Single core performance higher than 1,800 on Passmark.
|
||||||
|
SSE4.2 required on x86_64.
|
||||||
GPU: OpenGL 4.3 or Vulkan 1.1 support
|
GPU: OpenGL 4.3 or Vulkan 1.1 support
|
||||||
Memory: 2GB of RAM. 4GB is recommended
|
Memory: 2GB of RAM. 4GB is recommended
|
||||||
```
|
```
|
||||||
### Android
|
### Android
|
||||||
|
|
||||||
```
|
```
|
||||||
Operating System: Android 9.0+
|
Operating System: Android 10.0+ (64-bit)
|
||||||
CPU: Snapdragon 835 SoC or better
|
CPU: Snapdragon 835 SoC or better
|
||||||
GPU: OpenGL ES 3.2 or Vulkan 1.1 support
|
GPU: OpenGL ES 3.2 or Vulkan 1.1 support
|
||||||
Memory: 2GB of RAM. 4GB is recommended
|
Memory: 2GB of RAM. 4GB is recommended
|
||||||
|
|
@ -103,6 +135,7 @@ We share public roadmaps for upcoming releases in the form of GitHub milestones.
|
||||||
You can find these at https://github.com/azahar-emu/azahar/milestones.
|
You can find these at https://github.com/azahar-emu/azahar/milestones.
|
||||||
|
|
||||||
# Join the conversation
|
# Join the conversation
|
||||||
|
|
||||||
We have a community Discord server where you can chat about the project, keep up to date with the latest announcements, or coordinate emulator development.
|
We have a community Discord server where you can chat about the project, keep up to date with the latest announcements, or coordinate emulator development.
|
||||||
|
|
||||||
[](https://discord.gg/4ZjMpAp3M6)
|
Join at https://discord.gg/4ZjMpAp3M6
|
||||||
|
|
|
||||||
4
dist/apple/Info.plist.in
vendored
|
|
@ -35,6 +35,7 @@
|
||||||
<string>cci</string>
|
<string>cci</string>
|
||||||
<string>cxi</string>
|
<string>cxi</string>
|
||||||
<string>cia</string>
|
<string>cia</string>
|
||||||
|
<string>3ds</string>
|
||||||
</array>
|
</array>
|
||||||
<key>CFBundleTypeName</key>
|
<key>CFBundleTypeName</key>
|
||||||
<string>Nintendo 3DS File</string>
|
<string>Nintendo 3DS File</string>
|
||||||
|
|
@ -75,6 +76,9 @@
|
||||||
<true/>
|
<true/>
|
||||||
<key>NSHighResolutionCapable</key>
|
<key>NSHighResolutionCapable</key>
|
||||||
<string>True</string>
|
<string>True</string>
|
||||||
|
<key>UIDesignRequiresCompatibility</key>
|
||||||
|
<true/> <!-- Remove when Qt Liquid Glass issues are fixed upstream:
|
||||||
|
https://bugreports.qt.io/browse/QTBUG-138942 -->
|
||||||
<key>UIFileSharingEnabled</key>
|
<key>UIFileSharingEnabled</key>
|
||||||
<true/>
|
<true/>
|
||||||
<key>UILaunchStoryboardName</key>
|
<key>UILaunchStoryboardName</key>
|
||||||
|
|
|
||||||
2
dist/azahar-room.desktop
vendored
|
|
@ -3,7 +3,7 @@ Version=1.0
|
||||||
Type=Application
|
Type=Application
|
||||||
Name=Azahar Room
|
Name=Azahar Room
|
||||||
Comment=Multiplayer room host for Azahar
|
Comment=Multiplayer room host for Azahar
|
||||||
Icon=citra
|
Icon=org.azahar_emu.Azahar
|
||||||
TryExec=azahar-room
|
TryExec=azahar-room
|
||||||
Exec=azahar-room %f
|
Exec=azahar-room %f
|
||||||
Categories=Game;Emulator;
|
Categories=Game;Emulator;
|
||||||
|
|
|
||||||
3
dist/azahar.desktop
vendored
|
|
@ -6,10 +6,9 @@ GenericName=3DS Emulator
|
||||||
GenericName[fr]=Émulateur 3DS
|
GenericName[fr]=Émulateur 3DS
|
||||||
Comment=Nintendo 3DS video game console emulator
|
Comment=Nintendo 3DS video game console emulator
|
||||||
Comment[fr]=Émulateur de console de jeu Nintendo 3DS
|
Comment[fr]=Émulateur de console de jeu Nintendo 3DS
|
||||||
Icon=citra
|
Icon=org.azahar_emu.Azahar
|
||||||
TryExec=azahar
|
TryExec=azahar
|
||||||
Exec=azahar %f
|
Exec=azahar %f
|
||||||
Categories=Game;Emulator;
|
Categories=Game;Emulator;
|
||||||
MimeType=application/x-ctr-3dsx;application/x-ctr-cci;application/x-ctr-cia;application/x-ctr-cxi;
|
MimeType=application/x-ctr-3dsx;application/x-ctr-cci;application/x-ctr-cia;application/x-ctr-cxi;
|
||||||
Keywords=3DS;Nintendo;
|
Keywords=3DS;Nintendo;
|
||||||
PrefersNonDefaultGPU=true
|
|
||||||
|
|
|
||||||
0
dist/citra.ico → dist/azahar.ico
vendored
|
Before Width: | Height: | Size: 462 KiB After Width: | Height: | Size: 462 KiB |
0
dist/citra.manifest → dist/azahar.manifest
vendored
BIN
dist/azahar.png
vendored
Normal file
|
After Width: | Height: | Size: 62 KiB |
0
dist/citra.svg → dist/azahar.svg
vendored
|
Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 55 KiB |
2
dist/compatibility_list
vendored
|
|
@ -1 +1 @@
|
||||||
Subproject commit 955c560089186a86a90b67f0427f6dfdabc1f177
|
Subproject commit d9f1126e42b606d02ecc89b10cb9a336a3b2f5a3
|
||||||
BIN
dist/icon.png
vendored
|
Before Width: | Height: | Size: 50 KiB |
3
dist/languages/.tx/config
vendored
|
|
@ -6,9 +6,10 @@ file_filter = <lang>.ts
|
||||||
source_file = en.ts
|
source_file = en.ts
|
||||||
source_lang = en
|
source_lang = en
|
||||||
type = QT
|
type = QT
|
||||||
|
lang_map = ca@valencia:ca_ES_valencia
|
||||||
|
|
||||||
[o:azahar:p:azahar:r:android]
|
[o:azahar:p:azahar:r:android]
|
||||||
file_filter = ../../src/android/app/src/main/res/values-<lang>/strings.xml
|
file_filter = ../../src/android/app/src/main/res/values-<lang>/strings.xml
|
||||||
source_file = ../../src/android/app/src/main/res/values/strings.xml
|
source_file = ../../src/android/app/src/main/res/values/strings.xml
|
||||||
type = ANDROID
|
type = ANDROID
|
||||||
lang_map = es_ES:es, hu_HU:hu, ru_RU:ru, pt_BR:pt, zh_CN:zh, pl_PL:pl
|
lang_map = ca@valencia:b+ca+ES+valencia, es_419:b+es+419, pt_BR:b+pt+BR, zh_CN:b+zh+CN, zh_TW:b+zh+TW
|
||||||
|
|
|
||||||
7972
dist/languages/ca_ES_valencia.ts
vendored
Normal file
4036
dist/languages/da_DK.ts → dist/languages/da.ts
vendored
2511
dist/languages/de.ts
vendored
3447
dist/languages/el.ts
vendored
2449
dist/languages/es_ES.ts → dist/languages/es.ts
vendored
7928
dist/languages/es_419.ts
vendored
Normal file
4011
dist/languages/fi.ts
vendored
2326
dist/languages/fr.ts
vendored
3447
dist/languages/hu_HU.ts → dist/languages/hu.ts
vendored
3719
dist/languages/id.ts
vendored
3079
dist/languages/it.ts
vendored
3116
dist/languages/ja_JP.ts → dist/languages/ja.ts
vendored
2975
dist/languages/ko_KR.ts → dist/languages/ko.ts
vendored
3813
dist/languages/lt_LT.ts → dist/languages/lt.ts
vendored
3525
dist/languages/nb.ts
vendored
2687
dist/languages/nl.ts
vendored
2316
dist/languages/pl_PL.ts → dist/languages/pl.ts
vendored
2417
dist/languages/pt_BR.ts
vendored
2753
dist/languages/ro_RO.ts → dist/languages/ro.ts
vendored
3491
dist/languages/ru_RU.ts → dist/languages/ru.ts
vendored
7980
dist/languages/sv.ts
vendored
Normal file
3199
dist/languages/tr_TR.ts → dist/languages/tr.ts
vendored
3701
dist/languages/vi_VN.ts → dist/languages/vi.ts
vendored
2378
dist/languages/zh_CN.ts
vendored
3555
dist/languages/zh_TW.ts
vendored
1
dist/license.md
vendored
|
|
@ -16,6 +16,7 @@ qt_themes/default/icons/48x48/no_avatar.png | CC BY-ND 3.0 | https://icons8.com
|
||||||
qt_themes/default/icons/48x48/plus.png | CC0 1.0 | Designed by BreadFish64 from the Citra team
|
qt_themes/default/icons/48x48/plus.png | CC0 1.0 | Designed by BreadFish64 from the Citra team
|
||||||
qt_themes/default/icons/48x48/sd_card.png | CC BY-ND 3.0 | https://icons8.com
|
qt_themes/default/icons/48x48/sd_card.png | CC BY-ND 3.0 | https://icons8.com
|
||||||
qt_themes/default/icons/48x48/star.png | CC BY-ND 3.0 | https://icons8.com
|
qt_themes/default/icons/48x48/star.png | CC BY-ND 3.0 | https://icons8.com
|
||||||
|
qt_themes/default/icons/128x128/cartridge.png | CC0 1.0 | Designed by PabloMK7
|
||||||
qt_themes/qdarkstyle/icons/16x16/connected.png | CC BY-ND 3.0 | https://icons8.com
|
qt_themes/qdarkstyle/icons/16x16/connected.png | CC BY-ND 3.0 | https://icons8.com
|
||||||
qt_themes/qdarkstyle/icons/16x16/connected_notification.png | CC BY-ND 3.0 | https://icons8.com
|
qt_themes/qdarkstyle/icons/16x16/connected_notification.png | CC BY-ND 3.0 | https://icons8.com
|
||||||
qt_themes/qdarkstyle/icons/16x16/disconnected.png | CC BY-ND 3.0 | https://icons8.com
|
qt_themes/qdarkstyle/icons/16x16/disconnected.png | CC BY-ND 3.0 | https://icons8.com
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
<comment>Nintendo 3DS homebrew executable</comment>
|
<comment>Nintendo 3DS homebrew executable</comment>
|
||||||
<comment xml:lang="fr">Exécutable non-officiel pour Nintendo 3DS </comment>
|
<comment xml:lang="fr">Exécutable non-officiel pour Nintendo 3DS </comment>
|
||||||
<acronym>3DSX</acronym>
|
<acronym>3DSX</acronym>
|
||||||
<icon name="citra"/>
|
<icon name="azahar"/>
|
||||||
<glob pattern="*.3dsx"/>
|
<glob pattern="*.3dsx"/>
|
||||||
<magic><match value="3DSX" type="string" offset="0"/></magic>
|
<magic><match value="3DSX" type="string" offset="0"/></magic>
|
||||||
</mime-type>
|
</mime-type>
|
||||||
|
|
@ -14,8 +14,9 @@
|
||||||
<comment xml:lang="fr">Image de cartouche Nintendo 3DS</comment>
|
<comment xml:lang="fr">Image de cartouche Nintendo 3DS</comment>
|
||||||
<acronym>CCI</acronym>
|
<acronym>CCI</acronym>
|
||||||
<expanded-acronym>CTR Cart Image</expanded-acronym>
|
<expanded-acronym>CTR Cart Image</expanded-acronym>
|
||||||
<icon name="citra"/>
|
<icon name="azahar"/>
|
||||||
<glob pattern="*.cci"/>
|
<glob pattern="*.cci"/>
|
||||||
|
<glob pattern="*.3ds"/>
|
||||||
<magic><match value="NCSD" type="string" offset="256"/></magic>
|
<magic><match value="NCSD" type="string" offset="256"/></magic>
|
||||||
</mime-type>
|
</mime-type>
|
||||||
|
|
||||||
|
|
@ -24,7 +25,7 @@
|
||||||
<comment xml:lang="fr">Exécutable Nintendo 3DS</comment>
|
<comment xml:lang="fr">Exécutable Nintendo 3DS</comment>
|
||||||
<acronym>CXI</acronym>
|
<acronym>CXI</acronym>
|
||||||
<expanded-acronym>CTR eXecutable Image</expanded-acronym>
|
<expanded-acronym>CTR eXecutable Image</expanded-acronym>
|
||||||
<icon name="citra"/>
|
<icon name="azahar"/>
|
||||||
<glob pattern="*.cxi"/>
|
<glob pattern="*.cxi"/>
|
||||||
<magic><match value="NCCH" type="string" offset="256"/></magic>
|
<magic><match value="NCCH" type="string" offset="256"/></magic>
|
||||||
</mime-type>
|
</mime-type>
|
||||||
|
|
@ -34,7 +35,7 @@
|
||||||
<comment xml:lang="fr">Archive installable Nintendo 3DS</comment>
|
<comment xml:lang="fr">Archive installable Nintendo 3DS</comment>
|
||||||
<acronym>CIA</acronym>
|
<acronym>CIA</acronym>
|
||||||
<expanded-acronym>CTR Importable Archive</expanded-acronym>
|
<expanded-acronym>CTR Importable Archive</expanded-acronym>
|
||||||
<icon name="citra"/>
|
<icon name="azahar"/>
|
||||||
<glob pattern="*.cia"/>
|
<glob pattern="*.cia"/>
|
||||||
</mime-type>
|
</mime-type>
|
||||||
|
|
||||||
BIN
dist/qt_themes/default/icons/128x128/cartridge.png
vendored
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
7
dist/qt_themes/default/icons/index.theme
vendored
|
|
@ -1,13 +1,16 @@
|
||||||
[Icon Theme]
|
[Icon Theme]
|
||||||
Name=default
|
Name=default
|
||||||
Comment=default theme
|
Comment=default theme
|
||||||
Directories=16x16,48x48,256x256
|
Directories=16x16,48x48,128x128,256x256
|
||||||
|
|
||||||
[16x16]
|
[16x16]
|
||||||
Size=16
|
Size=16
|
||||||
|
|
||||||
[48x48]
|
[48x48]
|
||||||
Size=48
|
Size=48
|
||||||
|
|
||||||
|
[128x128]
|
||||||
|
Size=128
|
||||||
|
|
||||||
[256x256]
|
[256x256]
|
||||||
Size=256
|
Size=256
|
||||||
BIN
dist/qt_themes/default/icons_light/128x128/cartridge.png
vendored
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
|
|
@ -1,13 +1,16 @@
|
||||||
[Icon Theme]
|
[Icon Theme]
|
||||||
Name=default
|
Name=default
|
||||||
Comment=default theme
|
Comment=default theme
|
||||||
Directories=16x16,48x48,256x256
|
Directories=16x16,48x48,128x128,256x256
|
||||||
|
|
||||||
[16x16]
|
[16x16]
|
||||||
Size=16
|
Size=16
|
||||||
|
|
||||||
[48x48]
|
[48x48]
|
||||||
Size=48
|
Size=48
|
||||||
|
|
||||||
|
[128x128]
|
||||||
|
Size=128
|
||||||
|
|
||||||
[256x256]
|
[256x256]
|
||||||
Size=256
|
Size=256
|
||||||
6
dist/qt_themes/default/theme_default.qrc
vendored
|
|
@ -13,7 +13,8 @@
|
||||||
<file alias="48x48/no_avatar.png">icons/48x48/no_avatar.png</file>
|
<file alias="48x48/no_avatar.png">icons/48x48/no_avatar.png</file>
|
||||||
<file alias="48x48/plus.png">icons/48x48/plus.png</file>
|
<file alias="48x48/plus.png">icons/48x48/plus.png</file>
|
||||||
<file alias="48x48/sd_card.png">icons/48x48/sd_card.png</file>
|
<file alias="48x48/sd_card.png">icons/48x48/sd_card.png</file>
|
||||||
<file alias="256x256/citra.png">icons/256x256/citra.png</file>
|
<file alias="128x128/cartridge.png">icons/128x128/cartridge.png</file>
|
||||||
|
<file alias="256x256/azahar.png">icons/256x256/azahar.png</file>
|
||||||
<file alias="48x48/star.png">icons/48x48/star.png</file>
|
<file alias="48x48/star.png">icons/48x48/star.png</file>
|
||||||
<file alias="256x256/plus_folder.png">icons/256x256/plus_folder.png</file>
|
<file alias="256x256/plus_folder.png">icons/256x256/plus_folder.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
|
|
@ -31,7 +32,8 @@
|
||||||
<file alias="48x48/no_avatar.png">icons_light/48x48/no_avatar.png</file>
|
<file alias="48x48/no_avatar.png">icons_light/48x48/no_avatar.png</file>
|
||||||
<file alias="48x48/plus.png">icons_light/48x48/plus.png</file>
|
<file alias="48x48/plus.png">icons_light/48x48/plus.png</file>
|
||||||
<file alias="48x48/sd_card.png">icons_light/48x48/sd_card.png</file>
|
<file alias="48x48/sd_card.png">icons_light/48x48/sd_card.png</file>
|
||||||
<file alias="256x256/citra.png">icons_light/256x256/citra.png</file>
|
<file alias="128x128/cartridge.png">icons_light/128x128/cartridge.png</file>
|
||||||
|
<file alias="256x256/azahar.png">icons_light/256x256/azahar.png</file>
|
||||||
<file alias="48x48/star.png">icons_light/48x48/star.png</file>
|
<file alias="48x48/star.png">icons_light/48x48/star.png</file>
|
||||||
<file alias="256x256/plus_folder.png">icons_light/256x256/plus_folder.png</file>
|
<file alias="256x256/plus_folder.png">icons_light/256x256/plus_folder.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
|
|
|
||||||
61
dist/scripting/citra.py
vendored
|
|
@ -1,15 +1,21 @@
|
||||||
|
# Copyright Citra Emulator Project / Azahar Emulator Project
|
||||||
|
# Licensed under GPLv2 or any later version
|
||||||
|
# Refer to the license.txt file included.
|
||||||
|
|
||||||
import struct
|
import struct
|
||||||
import random
|
import random
|
||||||
import enum
|
import enum
|
||||||
import socket
|
import socket
|
||||||
|
|
||||||
CURRENT_REQUEST_VERSION = 1
|
CURRENT_REQUEST_VERSION = 1
|
||||||
MAX_REQUEST_DATA_SIZE = 32
|
MAX_REQUEST_DATA_SIZE = 1024
|
||||||
MAX_PACKET_SIZE = 48
|
MAX_PACKET_SIZE = 1024 + 0x10
|
||||||
|
|
||||||
class RequestType(enum.IntEnum):
|
class RequestType(enum.IntEnum):
|
||||||
ReadMemory = 1,
|
ReadMemory = 1,
|
||||||
WriteMemory = 2
|
WriteMemory = 2,
|
||||||
|
ProcessList = 3,
|
||||||
|
SetGetProcess = 4,
|
||||||
|
|
||||||
CITRA_PORT = 45987
|
CITRA_PORT = 45987
|
||||||
|
|
||||||
|
|
@ -34,6 +40,55 @@ class Citra:
|
||||||
return raw_reply[4*4:]
|
return raw_reply[4*4:]
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def process_list(self):
|
||||||
|
processes = {}
|
||||||
|
read_processes = 0
|
||||||
|
while True:
|
||||||
|
request_data = struct.pack("II", read_processes, 0x7FFFFFFF)
|
||||||
|
request, request_id = self._generate_header(RequestType.ProcessList, len(request_data))
|
||||||
|
request += request_data
|
||||||
|
self.socket.sendto(request, (self.address, CITRA_PORT))
|
||||||
|
|
||||||
|
raw_reply = self.socket.recv(MAX_PACKET_SIZE)
|
||||||
|
reply_data = self._read_and_validate_header(raw_reply, request_id, RequestType.ProcessList)
|
||||||
|
|
||||||
|
if reply_data:
|
||||||
|
read_count = struct.unpack("I", reply_data[0:4])[0]
|
||||||
|
reply_data = reply_data[4:]
|
||||||
|
if read_count == 0:
|
||||||
|
break
|
||||||
|
read_processes += read_count
|
||||||
|
for i in range(read_count):
|
||||||
|
proc_data = reply_data[i * 0x14 : (i + 1) * 0x14]
|
||||||
|
proc_id, title_id, proc_name = struct.unpack("<IQ8s", proc_data)
|
||||||
|
proc_name = proc_name.rstrip(b"\x00").decode("ascii")
|
||||||
|
processes[proc_id] = (title_id, proc_name)
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
return processes
|
||||||
|
|
||||||
|
def get_process(self):
|
||||||
|
request_data = struct.pack("II", 0, 0)
|
||||||
|
request, request_id = self._generate_header(RequestType.SetGetProcess, len(request_data))
|
||||||
|
request += request_data
|
||||||
|
self.socket.sendto(request, (self.address, CITRA_PORT))
|
||||||
|
|
||||||
|
raw_reply = self.socket.recv(MAX_PACKET_SIZE)
|
||||||
|
reply_data = self._read_and_validate_header(raw_reply, request_id, RequestType.SetGetProcess)
|
||||||
|
|
||||||
|
if reply_data:
|
||||||
|
return struct.unpack("I", reply_data)[0]
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
def set_process(self, process_id):
|
||||||
|
request_data = struct.pack("II", 1, process_id)
|
||||||
|
request, request_id = self._generate_header(RequestType.SetGetProcess, len(request_data))
|
||||||
|
request += request_data
|
||||||
|
self.socket.sendto(request, (self.address, CITRA_PORT))
|
||||||
|
|
||||||
|
self.socket.recv(MAX_PACKET_SIZE)
|
||||||
|
|
||||||
def read_memory(self, read_address, read_size):
|
def read_memory(self, read_address, read_size):
|
||||||
"""
|
"""
|
||||||
>>> c.read_memory(0x100000, 4)
|
>>> c.read_memory(0x100000, 4)
|
||||||
|
|
|
||||||
27
docker/azahar-room/Dockerfile
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
# This Dockerfile assumes that it is being built from the project root directory, e.g.:
|
||||||
|
# $ docker build -f docker/azahar-room/Dockerfile -t azahar-room .
|
||||||
|
|
||||||
|
# --- Builder ----------------
|
||||||
|
FROM opensauce04/azahar-build-environment:latest AS builder
|
||||||
|
|
||||||
|
RUN mkdir /var/azahar-src/
|
||||||
|
COPY ./ /var/azahar-src/
|
||||||
|
|
||||||
|
RUN mkdir ./builddir/
|
||||||
|
WORKDIR ./builddir/
|
||||||
|
RUN cmake /var/azahar-src -G Ninja \
|
||||||
|
-DENABLE_QT=OFF \
|
||||||
|
-DENABLE_GDBSTUB=OFF \
|
||||||
|
-DENABLE_TESTS=OFF \
|
||||||
|
-DENABLE_ROOM=ON \
|
||||||
|
-DENABLE_ROOM_STANDALONE=ON
|
||||||
|
RUN ninja
|
||||||
|
RUN mv ./bin/Release/azahar-room /usr/local/bin/
|
||||||
|
|
||||||
|
# --- Final ------------------
|
||||||
|
FROM debian:trixie AS final
|
||||||
|
|
||||||
|
RUN apt-get update && apt-get -y full-upgrade
|
||||||
|
RUN apt-get install -y iputils-ping net-tools
|
||||||
|
|
||||||
|
COPY --from=builder /usr/local/bin/azahar-room /usr/local/bin/azahar-room
|
||||||
214
externals/CMakeLists.txt
vendored
|
|
@ -1,24 +1,37 @@
|
||||||
# Definitions for all external bundled libraries
|
# Definitions for all external bundled libraries
|
||||||
|
|
||||||
# Suppress warnings from external libraries
|
# Suppress warnings from external libraries
|
||||||
if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
if (MSVC)
|
||||||
add_compile_options(/W0)
|
add_compile_options(/W0)
|
||||||
else()
|
else()
|
||||||
add_compile_options(-w)
|
add_compile_options(-w)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
function(target_disable_warnings target)
|
||||||
|
if (MSVC)
|
||||||
|
target_compile_options(${target} INTERFACE /W0)
|
||||||
|
else()
|
||||||
|
target_compile_options(${target} INTERFACE -w)
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/CMakeModules)
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/CMakeModules)
|
||||||
include(DownloadExternals)
|
include(DownloadExternals)
|
||||||
include(ExternalProject)
|
include(ExternalProject)
|
||||||
|
|
||||||
# Boost
|
# Boost
|
||||||
if (NOT USE_SYSTEM_BOOST)
|
if (USE_SYSTEM_BOOST)
|
||||||
|
unset(BOOST_ROOT CACHE)
|
||||||
|
unset(Boost_INCLUDE_DIR CACHE)
|
||||||
|
set(Boost_NO_SYSTEM_PATHS OFF CACHE BOOL "" FORCE)
|
||||||
|
else()
|
||||||
message(STATUS "Including vendored Boost library")
|
message(STATUS "Including vendored Boost library")
|
||||||
set(BOOST_ROOT "${CMAKE_SOURCE_DIR}/externals/boost" CACHE STRING "")
|
set(BOOST_ROOT "${CMAKE_SOURCE_DIR}/externals/boost" CACHE STRING "")
|
||||||
set(Boost_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/externals/boost" CACHE STRING "")
|
set(Boost_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/externals/boost" CACHE STRING "")
|
||||||
set(Boost_NO_SYSTEM_PATHS ON CACHE BOOL "")
|
set(Boost_NO_SYSTEM_PATHS ON CACHE BOOL "")
|
||||||
add_library(boost INTERFACE)
|
add_library(boost INTERFACE)
|
||||||
target_include_directories(boost SYSTEM INTERFACE ${Boost_INCLUDE_DIR})
|
target_include_directories(boost INTERFACE ${Boost_INCLUDE_DIR})
|
||||||
|
target_disable_warnings(boost)
|
||||||
|
|
||||||
# Boost::serialization
|
# Boost::serialization
|
||||||
file(GLOB boost_serialization_SRC "${CMAKE_SOURCE_DIR}/externals/boost/libs/serialization/src/*.cpp")
|
file(GLOB boost_serialization_SRC "${CMAKE_SOURCE_DIR}/externals/boost/libs/serialization/src/*.cpp")
|
||||||
|
|
@ -33,23 +46,22 @@ if (NOT USE_SYSTEM_BOOST)
|
||||||
${CMAKE_SOURCE_DIR}/externals/boost/libs/iostreams/src/mapped_file.cpp
|
${CMAKE_SOURCE_DIR}/externals/boost/libs/iostreams/src/mapped_file.cpp
|
||||||
)
|
)
|
||||||
target_link_libraries(boost_iostreams PUBLIC boost)
|
target_link_libraries(boost_iostreams PUBLIC boost)
|
||||||
# Add additional boost libs here; remember to ALIAS them in the root CMakeLists!
|
# Add additional boost libs here; remember to ALIAS them in the root CMakeLists!
|
||||||
else()
|
|
||||||
unset(BOOST_ROOT CACHE)
|
|
||||||
unset(Boost_INCLUDE_DIR CACHE)
|
|
||||||
set(Boost_NO_SYSTEM_PATHS OFF CACHE BOOL "" FORCE)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Catch2
|
# Catch2
|
||||||
add_library(catch2 INTERFACE)
|
if (ENABLE_TESTS)
|
||||||
if(USE_SYSTEM_CATCH2)
|
add_library(catch2 INTERFACE)
|
||||||
find_package(Catch2 3.0.0 REQUIRED)
|
if(USE_SYSTEM_CATCH2)
|
||||||
else()
|
find_package(Catch2 3.0.0 REQUIRED)
|
||||||
set(CATCH_INSTALL_DOCS OFF CACHE BOOL "")
|
else()
|
||||||
set(CATCH_INSTALL_EXTRAS OFF CACHE BOOL "")
|
set(CATCH_INSTALL_DOCS OFF CACHE BOOL "")
|
||||||
add_subdirectory(catch2)
|
set(CATCH_INSTALL_EXTRAS OFF CACHE BOOL "")
|
||||||
|
add_subdirectory(catch2 EXCLUDE_FROM_ALL)
|
||||||
|
endif()
|
||||||
|
target_link_libraries(catch2 INTERFACE Catch2::Catch2WithMain)
|
||||||
|
include(Catch)
|
||||||
endif()
|
endif()
|
||||||
target_link_libraries(catch2 INTERFACE Catch2::Catch2WithMain)
|
|
||||||
|
|
||||||
# Crypto++
|
# Crypto++
|
||||||
if(USE_SYSTEM_CRYPTOPP)
|
if(USE_SYSTEM_CRYPTOPP)
|
||||||
|
|
@ -57,22 +69,15 @@ if(USE_SYSTEM_CRYPTOPP)
|
||||||
add_library(cryptopp INTERFACE)
|
add_library(cryptopp INTERFACE)
|
||||||
target_link_libraries(cryptopp INTERFACE cryptopp::cryptopp)
|
target_link_libraries(cryptopp INTERFACE cryptopp::cryptopp)
|
||||||
else()
|
else()
|
||||||
if (WIN32 AND NOT MSVC AND "arm64" IN_LIST ARCHITECTURE)
|
|
||||||
# TODO: CryptoPP ARM64 ASM does not seem to support Windows unless compiled with MSVC.
|
|
||||||
# TODO: See https://github.com/weidai11/cryptopp/issues/1260
|
|
||||||
set(CRYPTOPP_DISABLE_ASM ON CACHE BOOL "")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(CRYPTOPP_BUILD_DOCUMENTATION OFF CACHE BOOL "")
|
|
||||||
set(CRYPTOPP_BUILD_TESTING OFF CACHE BOOL "")
|
set(CRYPTOPP_BUILD_TESTING OFF CACHE BOOL "")
|
||||||
set(CRYPTOPP_INSTALL OFF CACHE BOOL "")
|
set(CRYPTOPP_INSTALL OFF CACHE BOOL "")
|
||||||
set(CRYPTOPP_SOURCES "${CMAKE_SOURCE_DIR}/externals/cryptopp" CACHE STRING "")
|
add_subdirectory(cryptopp EXCLUDE_FROM_ALL)
|
||||||
add_subdirectory(cryptopp-cmake)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# dds-ktx
|
# dds-ktx
|
||||||
add_library(dds-ktx INTERFACE)
|
add_library(dds-ktx INTERFACE)
|
||||||
target_include_directories(dds-ktx INTERFACE ./dds-ktx)
|
target_include_directories(dds-ktx INTERFACE ./dds-ktx)
|
||||||
|
target_disable_warnings(dds-ktx)
|
||||||
|
|
||||||
# fmt and Xbyak need to be added before dynarmic
|
# fmt and Xbyak need to be added before dynarmic
|
||||||
# libfmt
|
# libfmt
|
||||||
|
|
@ -99,7 +104,13 @@ endif()
|
||||||
|
|
||||||
# Oaknut
|
# Oaknut
|
||||||
if ("arm64" IN_LIST ARCHITECTURE)
|
if ("arm64" IN_LIST ARCHITECTURE)
|
||||||
add_subdirectory(oaknut EXCLUDE_FROM_ALL)
|
if(USE_SYSTEM_OAKNUT)
|
||||||
|
find_package(oaknut REQUIRED)
|
||||||
|
add_library(oaknut INTERFACE)
|
||||||
|
target_link_libraries(oaknut INTERFACE merry::oaknut)
|
||||||
|
else()
|
||||||
|
add_subdirectory(oaknut EXCLUDE_FROM_ALL)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Dynarmic
|
# Dynarmic
|
||||||
|
|
@ -123,7 +134,7 @@ endif()
|
||||||
|
|
||||||
# getopt
|
# getopt
|
||||||
if (MSVC)
|
if (MSVC)
|
||||||
add_subdirectory(getopt)
|
add_subdirectory(getopt EXCLUDE_FROM_ALL)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# inih
|
# inih
|
||||||
|
|
@ -132,12 +143,13 @@ if(USE_SYSTEM_INIH)
|
||||||
add_library(inih INTERFACE)
|
add_library(inih INTERFACE)
|
||||||
target_link_libraries(inih INTERFACE inih::inih inih::inir)
|
target_link_libraries(inih INTERFACE inih::inih inih::inir)
|
||||||
else()
|
else()
|
||||||
add_subdirectory(inih)
|
add_subdirectory(inih EXCLUDE_FROM_ALL)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# MicroProfile
|
# MicroProfile
|
||||||
add_library(microprofile INTERFACE)
|
add_library(microprofile INTERFACE)
|
||||||
target_include_directories(microprofile SYSTEM INTERFACE ./microprofile)
|
target_include_directories(microprofile INTERFACE ./microprofile)
|
||||||
|
target_disable_warnings(microprofile)
|
||||||
if (ENABLE_MICROPROFILE)
|
if (ENABLE_MICROPROFILE)
|
||||||
target_compile_definitions(microprofile INTERFACE MICROPROFILE_ENABLED=1)
|
target_compile_definitions(microprofile INTERFACE MICROPROFILE_ENABLED=1)
|
||||||
else()
|
else()
|
||||||
|
|
@ -146,14 +158,15 @@ endif()
|
||||||
|
|
||||||
# Nihstro
|
# Nihstro
|
||||||
add_library(nihstro-headers INTERFACE)
|
add_library(nihstro-headers INTERFACE)
|
||||||
target_include_directories(nihstro-headers SYSTEM INTERFACE ./nihstro/include)
|
target_include_directories(nihstro-headers INTERFACE ./nihstro/include)
|
||||||
if (MSVC)
|
target_disable_warnings(nihstro-headers)
|
||||||
# TODO: For some reason MSVC still applies this warning even with /W0 for externals.
|
if (NOT MSVC)
|
||||||
target_compile_options(nihstro-headers INTERFACE /wd4715)
|
# TODO: For some reason MSYS2 still applied this warnin even with -w
|
||||||
|
target_compile_options(nihstro-headers INTERFACE -Wno-invalid-specialization)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Open Source Archives
|
# Open Source Archives
|
||||||
add_subdirectory(open_source_archives)
|
add_subdirectory(open_source_archives EXCLUDE_FROM_ALL)
|
||||||
|
|
||||||
# faad2
|
# faad2
|
||||||
add_subdirectory(faad2 EXCLUDE_FROM_ALL)
|
add_subdirectory(faad2 EXCLUDE_FROM_ALL)
|
||||||
|
|
@ -173,7 +186,8 @@ if (USE_SYSTEM_FFMPEG_HEADERS)
|
||||||
endif()
|
endif()
|
||||||
if (NOT FOUND_FFMPEG_HEADERS)
|
if (NOT FOUND_FFMPEG_HEADERS)
|
||||||
message(STATUS "Using bundled ffmpeg headers.")
|
message(STATUS "Using bundled ffmpeg headers.")
|
||||||
target_include_directories(library-headers SYSTEM INTERFACE ./library-headers/ffmpeg/include)
|
target_include_directories(library-headers INTERFACE ./library-headers/ffmpeg/include)
|
||||||
|
target_disable_warnings(library-headers)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# SoundTouch
|
# SoundTouch
|
||||||
|
|
@ -191,12 +205,12 @@ add_subdirectory(teakra EXCLUDE_FROM_ALL)
|
||||||
|
|
||||||
# SDL2
|
# SDL2
|
||||||
if (ENABLE_SDL2 AND NOT USE_SYSTEM_SDL2)
|
if (ENABLE_SDL2 AND NOT USE_SYSTEM_SDL2)
|
||||||
add_subdirectory(sdl2)
|
add_subdirectory(sdl2 EXCLUDE_FROM_ALL)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# libusb
|
# libusb
|
||||||
if (ENABLE_LIBUSB AND NOT USE_SYSTEM_LIBUSB)
|
if (ENABLE_LIBUSB AND NOT USE_SYSTEM_LIBUSB)
|
||||||
add_subdirectory(libusb)
|
add_subdirectory(libusb EXCLUDE_FROM_ALL)
|
||||||
set(LIBUSB_INCLUDE_DIR "" PARENT_SCOPE)
|
set(LIBUSB_INCLUDE_DIR "" PARENT_SCOPE)
|
||||||
set(LIBUSB_LIBRARIES usb PARENT_SCOPE)
|
set(LIBUSB_LIBRARIES usb PARENT_SCOPE)
|
||||||
endif()
|
endif()
|
||||||
|
|
@ -214,8 +228,24 @@ else()
|
||||||
set(ZSTD_BUILD_PROGRAMS OFF)
|
set(ZSTD_BUILD_PROGRAMS OFF)
|
||||||
set(ZSTD_BUILD_SHARED OFF)
|
set(ZSTD_BUILD_SHARED OFF)
|
||||||
add_subdirectory(zstd/build/cmake EXCLUDE_FROM_ALL)
|
add_subdirectory(zstd/build/cmake EXCLUDE_FROM_ALL)
|
||||||
target_include_directories(libzstd_static INTERFACE $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/externals/zstd/lib>)
|
|
||||||
add_library(zstd ALIAS libzstd_static)
|
target_include_directories(libzstd_static INTERFACE
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/externals/zstd/lib>
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/externals/zstd/lib/common>
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(zstd_seekable STATIC
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/zstd/contrib/seekable_format/zstdseek_compress.c>
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/zstd/contrib/seekable_format/zstdseek_decompress.c>
|
||||||
|
)
|
||||||
|
target_include_directories(zstd_seekable PUBLIC
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/zstd/contrib/seekable_format>
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/zstd/lib/common>
|
||||||
|
)
|
||||||
|
target_link_libraries(zstd_seekable PUBLIC libzstd_static)
|
||||||
|
|
||||||
|
add_library(zstd INTERFACE)
|
||||||
|
target_link_libraries(zstd INTERFACE libzstd_static zstd_seekable)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# ENet
|
# ENet
|
||||||
|
|
@ -224,7 +254,7 @@ if(USE_SYSTEM_ENET)
|
||||||
add_library(enet INTERFACE)
|
add_library(enet INTERFACE)
|
||||||
target_link_libraries(enet INTERFACE libenet::libenet)
|
target_link_libraries(enet INTERFACE libenet::libenet)
|
||||||
else()
|
else()
|
||||||
add_subdirectory(enet)
|
add_subdirectory(enet EXCLUDE_FROM_ALL)
|
||||||
target_include_directories(enet INTERFACE ./enet/include)
|
target_include_directories(enet INTERFACE ./enet/include)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
@ -263,6 +293,15 @@ if (USE_DISCORD_PRESENCE)
|
||||||
target_include_directories(discord-rpc INTERFACE ./discord-rpc/include)
|
target_include_directories(discord-rpc INTERFACE ./discord-rpc/include)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# LibRetro
|
||||||
|
if (ENABLE_LIBRETRO)
|
||||||
|
add_library(libretro INTERFACE)
|
||||||
|
target_include_directories(libretro INTERFACE ./libretro-common/libretro-common/include)
|
||||||
|
if (ANDROID)
|
||||||
|
add_subdirectory(libretro-common EXCLUDE_FROM_ALL)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
# JSON
|
# JSON
|
||||||
add_library(json-headers INTERFACE)
|
add_library(json-headers INTERFACE)
|
||||||
if (USE_SYSTEM_JSON)
|
if (USE_SYSTEM_JSON)
|
||||||
|
|
@ -273,23 +312,21 @@ if (USE_SYSTEM_JSON)
|
||||||
# Citra uses "#include <json.hpp>" so we have to add this manually
|
# Citra uses "#include <json.hpp>" so we have to add this manually
|
||||||
target_include_directories(json-headers SYSTEM INTERFACE "${NLOHMANN_PREFIX}/nlohmann")
|
target_include_directories(json-headers SYSTEM INTERFACE "${NLOHMANN_PREFIX}/nlohmann")
|
||||||
else()
|
else()
|
||||||
target_include_directories(json-headers SYSTEM INTERFACE ./json)
|
target_include_directories(json-headers INTERFACE ./json)
|
||||||
|
target_disable_warnings(json-headers)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# OpenSSL
|
# OpenSSL
|
||||||
if (USE_SYSTEM_OPENSSL)
|
if (USE_SYSTEM_OPENSSL)
|
||||||
find_package(OpenSSL 1.1)
|
find_package(OpenSSL 1.1)
|
||||||
if (OPENSSL_FOUND)
|
set(OPENSSL_LIBRARIES OpenSSL::SSL OpenSSL::Crypto)
|
||||||
set(OPENSSL_LIBRARIES OpenSSL::SSL OpenSSL::Crypto)
|
else()
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (NOT OPENSSL_FOUND)
|
|
||||||
# LibreSSL
|
# LibreSSL
|
||||||
set(LIBRESSL_SKIP_INSTALL ON CACHE BOOL "")
|
set(LIBRESSL_SKIP_INSTALL ON CACHE BOOL "")
|
||||||
set(OPENSSLDIR "/etc/ssl/")
|
set(OPENSSLDIR "/etc/ssl/")
|
||||||
add_subdirectory(libressl EXCLUDE_FROM_ALL)
|
add_subdirectory(libressl EXCLUDE_FROM_ALL)
|
||||||
target_include_directories(ssl SYSTEM INTERFACE ./libressl/include)
|
target_include_directories(ssl INTERFACE ./libressl/include)
|
||||||
|
target_disable_warnings(ssl)
|
||||||
target_compile_definitions(ssl PRIVATE -DHAVE_INET_NTOP)
|
target_compile_definitions(ssl PRIVATE -DHAVE_INET_NTOP)
|
||||||
get_directory_property(OPENSSL_LIBRARIES
|
get_directory_property(OPENSSL_LIBRARIES
|
||||||
DIRECTORY libressl
|
DIRECTORY libressl
|
||||||
|
|
@ -306,23 +343,26 @@ if(USE_SYSTEM_CPP_HTTPLIB)
|
||||||
get_target_property(HTTP_LIBS httplib::httplib INTERFACE_LINK_LIBRARIES)
|
get_target_property(HTTP_LIBS httplib::httplib INTERFACE_LINK_LIBRARIES)
|
||||||
if(HTTP_LIBS)
|
if(HTTP_LIBS)
|
||||||
message(WARNING "Shared cpp-http (${HTTP_LIBS}) not supported. Falling back to bundled...")
|
message(WARNING "Shared cpp-http (${HTTP_LIBS}) not supported. Falling back to bundled...")
|
||||||
target_include_directories(httplib SYSTEM INTERFACE ./httplib)
|
target_include_directories(httplib INTERFACE ./httplib)
|
||||||
|
target_disable_warnings(httplib)
|
||||||
else()
|
else()
|
||||||
if(CppHttp_FOUND)
|
if(CppHttp_FOUND)
|
||||||
target_link_libraries(httplib INTERFACE httplib::httplib)
|
target_link_libraries(httplib INTERFACE httplib::httplib)
|
||||||
else()
|
else()
|
||||||
message(STATUS "Cpp-httplib not found or not suitable version! Falling back to bundled...")
|
message(STATUS "Cpp-httplib not found or not suitable version! Falling back to bundled...")
|
||||||
target_include_directories(httplib SYSTEM INTERFACE ./httplib)
|
target_include_directories(httplib INTERFACE ./httplib)
|
||||||
endif()
|
target_disable_warnings(httplib)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
target_include_directories(httplib SYSTEM INTERFACE ./httplib)
|
target_include_directories(httplib INTERFACE ./httplib)
|
||||||
|
target_disable_warnings(httplib)
|
||||||
endif()
|
endif()
|
||||||
target_compile_options(httplib INTERFACE -DCPPHTTPLIB_OPENSSL_SUPPORT)
|
target_compile_options(httplib INTERFACE -DCPPHTTPLIB_OPENSSL_SUPPORT)
|
||||||
target_link_libraries(httplib INTERFACE ${OPENSSL_LIBRARIES})
|
target_link_libraries(httplib INTERFACE ${OPENSSL_LIBRARIES})
|
||||||
|
|
||||||
if (UNIX AND NOT APPLE)
|
if (UNIX AND NOT APPLE)
|
||||||
add_subdirectory(gamemode)
|
add_subdirectory(gamemode EXCLUDE_FROM_ALL)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# cpp-jwt
|
# cpp-jwt
|
||||||
|
|
@ -333,7 +373,8 @@ if (ENABLE_WEB_SERVICE)
|
||||||
target_link_libraries(cpp-jwt INTERFACE cpp-jwt::cpp-jwt)
|
target_link_libraries(cpp-jwt INTERFACE cpp-jwt::cpp-jwt)
|
||||||
else()
|
else()
|
||||||
add_library(cpp-jwt INTERFACE)
|
add_library(cpp-jwt INTERFACE)
|
||||||
target_include_directories(cpp-jwt SYSTEM INTERFACE ./cpp-jwt/include)
|
target_include_directories(cpp-jwt INTERFACE ./cpp-jwt/include)
|
||||||
|
target_disable_warnings(cpp-jwt)
|
||||||
target_compile_definitions(cpp-jwt INTERFACE CPP_JWT_USE_VENDORED_NLOHMANN_JSON)
|
target_compile_definitions(cpp-jwt INTERFACE CPP_JWT_USE_VENDORED_NLOHMANN_JSON)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
@ -344,13 +385,13 @@ if(USE_SYSTEM_LODEPNG)
|
||||||
find_package(lodepng REQUIRED)
|
find_package(lodepng REQUIRED)
|
||||||
target_link_libraries(lodepng INTERFACE lodepng::lodepng)
|
target_link_libraries(lodepng INTERFACE lodepng::lodepng)
|
||||||
else()
|
else()
|
||||||
add_subdirectory(lodepng)
|
add_subdirectory(lodepng EXCLUDE_FROM_ALL)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# (xperia64): Only use libyuv on Android b/c of build issues on Windows and mandatory JPEG
|
# (xperia64): Only use libyuv on Android b/c of build issues on Windows and mandatory JPEG
|
||||||
if(ANDROID)
|
if(ANDROID)
|
||||||
# libyuv
|
# libyuv
|
||||||
add_subdirectory(libyuv)
|
add_subdirectory(libyuv EXCLUDE_FROM_ALL)
|
||||||
target_include_directories(yuv INTERFACE ./libyuv/include)
|
target_include_directories(yuv INTERFACE ./libyuv/include)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
@ -361,6 +402,9 @@ if (ENABLE_OPENAL)
|
||||||
find_package(OpenAL REQUIRED)
|
find_package(OpenAL REQUIRED)
|
||||||
target_link_libraries(OpenAL INTERFACE OpenAL::OpenAL)
|
target_link_libraries(OpenAL INTERFACE OpenAL::OpenAL)
|
||||||
else()
|
else()
|
||||||
|
if (BSD STREQUAL "OpenBSD")
|
||||||
|
set(ALSOFT_BACKEND_SOLARIS OFF CACHE BOOL "")
|
||||||
|
endif()
|
||||||
set(ALSOFT_EMBED_HRTF_DATA OFF CACHE BOOL "")
|
set(ALSOFT_EMBED_HRTF_DATA OFF CACHE BOOL "")
|
||||||
set(ALSOFT_EXAMPLES OFF CACHE BOOL "")
|
set(ALSOFT_EXAMPLES OFF CACHE BOOL "")
|
||||||
set(ALSOFT_INSTALL OFF CACHE BOOL "")
|
set(ALSOFT_INSTALL OFF CACHE BOOL "")
|
||||||
|
|
@ -376,11 +420,29 @@ endif()
|
||||||
# OpenGL dependencies
|
# OpenGL dependencies
|
||||||
if (ENABLE_OPENGL)
|
if (ENABLE_OPENGL)
|
||||||
# Glad
|
# Glad
|
||||||
add_subdirectory(glad)
|
add_subdirectory(glad EXCLUDE_FROM_ALL)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Vulkan dependencies
|
# Vulkan dependencies
|
||||||
if (ENABLE_VULKAN)
|
if (ENABLE_VULKAN)
|
||||||
|
# spirv-headers
|
||||||
|
if(USE_SYSTEM_SPIRV_HEADERS)
|
||||||
|
find_package(SPIRV-Headers REQUIRED)
|
||||||
|
if(TARGET SPIRV-Headers::SPIRV-Headers)
|
||||||
|
message(STATUS "Found SPIRV headers")
|
||||||
|
get_target_property(SPIRV-Headers_SOURCE_DIR SPIRV-Headers::SPIRV-Headers INTERFACE_INCLUDE_DIRECTORIES)
|
||||||
|
set(SPIRV-Headers_SOURCE_DIR "${SPIRV-Headers_SOURCE_DIR}/../") # Not sure why this is necessary
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
set(SPIRV-Headers_SOURCE_DIR "${CMAKE_SOURCE_DIR}/externals/spirv-headers")
|
||||||
|
add_subdirectory(spirv-headers EXCLUDE_FROM_ALL)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# spirv-tools
|
||||||
|
# TODO: Implement USE_SYSTEM_SPIRV_TOOLS -OS
|
||||||
|
set(SPIRV_SKIP_EXECUTABLES ON)
|
||||||
|
add_subdirectory(spirv-tools EXCLUDE_FROM_ALL)
|
||||||
|
|
||||||
# glslang
|
# glslang
|
||||||
if(USE_SYSTEM_GLSLANG)
|
if(USE_SYSTEM_GLSLANG)
|
||||||
find_package(glslang REQUIRED)
|
find_package(glslang REQUIRED)
|
||||||
|
|
@ -398,8 +460,7 @@ if (ENABLE_VULKAN)
|
||||||
set(ENABLE_CTEST OFF CACHE BOOL "")
|
set(ENABLE_CTEST OFF CACHE BOOL "")
|
||||||
set(ENABLE_HLSL OFF CACHE BOOL "")
|
set(ENABLE_HLSL OFF CACHE BOOL "")
|
||||||
set(BUILD_EXTERNAL OFF CACHE BOOL "")
|
set(BUILD_EXTERNAL OFF CACHE BOOL "")
|
||||||
set(ALLOW_EXTERNAL_SPIRV_TOOLS ON)
|
add_subdirectory(glslang EXCLUDE_FROM_ALL)
|
||||||
add_subdirectory(glslang)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# sirit
|
# sirit
|
||||||
|
|
@ -415,7 +476,8 @@ if (ENABLE_VULKAN)
|
||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
add_library(vma INTERFACE)
|
add_library(vma INTERFACE)
|
||||||
target_include_directories(vma SYSTEM INTERFACE ./vma/include)
|
target_include_directories(vma INTERFACE ./vma/include)
|
||||||
|
target_disable_warnings(vma)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# vulkan-headers
|
# vulkan-headers
|
||||||
|
|
@ -427,11 +489,39 @@ if (ENABLE_VULKAN)
|
||||||
target_link_libraries(vulkan-headers INTERFACE Vulkan::Headers)
|
target_link_libraries(vulkan-headers INTERFACE Vulkan::Headers)
|
||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
target_include_directories(vulkan-headers SYSTEM INTERFACE ./vulkan-headers/include)
|
target_include_directories(vulkan-headers INTERFACE ./vulkan-headers/include)
|
||||||
|
target_disable_warnings(vulkan-headers)
|
||||||
|
if (BSD STREQUAL "NetBSD")
|
||||||
|
# There may be a better way to do this with
|
||||||
|
# find_package(X11), but I couldn't get
|
||||||
|
# CMake to do it, so we're depending on
|
||||||
|
# the x11-links package and assuming the
|
||||||
|
# prefix location. -OS
|
||||||
|
target_include_directories(vulkan-headers INTERFACE
|
||||||
|
/usr/pkg/share/x11-links/include)
|
||||||
|
elseif (BSD STREQUAL "OpenBSD")
|
||||||
|
# This is fine to hardcode because it'll never change
|
||||||
|
target_include_directories(vulkan-headers INTERFACE
|
||||||
|
/usr/X11R6/include)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# adrenotools
|
# adrenotools
|
||||||
if (ANDROID AND "arm64" IN_LIST ARCHITECTURE)
|
if (ANDROID AND "arm64" IN_LIST ARCHITECTURE)
|
||||||
add_subdirectory(libadrenotools)
|
add_subdirectory(libadrenotools EXCLUDE_FROM_ALL)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
set(XXHASH_BUILD_XXHSUM OFF)
|
||||||
|
add_subdirectory(xxHash/cmake_unofficial EXCLUDE_FROM_ALL)
|
||||||
|
target_compile_definitions(xxhash PRIVATE XXH_FORCE_MEMORY_ACCESS=2)
|
||||||
|
if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64")
|
||||||
|
target_compile_definitions(xxhash PRIVATE XXH_VECTOR=XXH_SSE2)
|
||||||
|
message(STATUS "Enabling SSE2 for xxHash")
|
||||||
|
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|ARM64|armv8")
|
||||||
|
target_compile_definitions(xxhash PRIVATE XXH_VECTOR=XXH_NEON)
|
||||||
|
message(STATUS "Enabling NEON for xxHash")
|
||||||
|
else()
|
||||||
|
target_compile_definitions(xxhash PRIVATE XXH_VECTOR=XXH_SCALAR)
|
||||||
|
message(STATUS "Disabling SIMD for xxHash")
|
||||||
|
endif()
|
||||||
|
|
|
||||||
2
externals/boost
vendored
|
|
@ -1 +1 @@
|
||||||
Subproject commit 3c27c785ad0f8a742af02e620dc225673f3a12d8
|
Subproject commit 6a85c3100499e886e11c87a5c2109eedacea0a61
|
||||||
|
|
@ -14,6 +14,7 @@ option(USE_SYSTEM_JSON "Use the system JSON (nlohmann-json3) package (instead of
|
||||||
option(USE_SYSTEM_DYNARMIC "Use the system dynarmic (instead of the bundled one)" OFF)
|
option(USE_SYSTEM_DYNARMIC "Use the system dynarmic (instead of the bundled one)" OFF)
|
||||||
option(USE_SYSTEM_FMT "Use the system fmt (instead of the bundled one)" OFF)
|
option(USE_SYSTEM_FMT "Use the system fmt (instead of the bundled one)" OFF)
|
||||||
option(USE_SYSTEM_XBYAK "Use the system xbyak (instead of the bundled one)" OFF)
|
option(USE_SYSTEM_XBYAK "Use the system xbyak (instead of the bundled one)" OFF)
|
||||||
|
option(USE_SYSTEM_OAKNUT "Use the system oaknut (instead of the bundled one)" OFF)
|
||||||
option(USE_SYSTEM_INIH "Use the system inih (instead of the bundled one)" OFF)
|
option(USE_SYSTEM_INIH "Use the system inih (instead of the bundled one)" OFF)
|
||||||
option(USE_SYSTEM_FFMPEG_HEADERS "Use the system FFmpeg headers (instead of the bundled one)" OFF)
|
option(USE_SYSTEM_FFMPEG_HEADERS "Use the system FFmpeg headers (instead of the bundled one)" OFF)
|
||||||
option(USE_SYSTEM_GLSLANG "Use the system glslang and SPIR-V libraries (instead of the bundled ones)" OFF)
|
option(USE_SYSTEM_GLSLANG "Use the system glslang and SPIR-V libraries (instead of the bundled ones)" OFF)
|
||||||
|
|
@ -25,6 +26,7 @@ option(USE_SYSTEM_LODEPNG "Use the system lodepng (instead of the bundled one)"
|
||||||
option(USE_SYSTEM_OPENAL "Use the system OpenAL (instead of the bundled one)" OFF)
|
option(USE_SYSTEM_OPENAL "Use the system OpenAL (instead of the bundled one)" OFF)
|
||||||
option(USE_SYSTEM_VMA "Use the system VulkanMemoryAllocator (instead of the bundled one)" OFF)
|
option(USE_SYSTEM_VMA "Use the system VulkanMemoryAllocator (instead of the bundled one)" OFF)
|
||||||
option(USE_SYSTEM_VULKAN_HEADERS "Use the system Vulkan headers (instead of the bundled ones)" OFF)
|
option(USE_SYSTEM_VULKAN_HEADERS "Use the system Vulkan headers (instead of the bundled ones)" OFF)
|
||||||
|
option(USE_SYSTEM_SPIRV_HEADERS "Use the system SPIRV headers (instead of the bundled ones)" OFF)
|
||||||
option(USE_SYSTEM_CATCH2 "Use the system Catch2 (instead of the bundled one)" OFF)
|
option(USE_SYSTEM_CATCH2 "Use the system Catch2 (instead of the bundled one)" OFF)
|
||||||
|
|
||||||
# Qt and MoltenVK are handled separately
|
# Qt and MoltenVK are handled separately
|
||||||
|
|
@ -39,6 +41,7 @@ CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_JSON "Disable system JSON" OFF "USE_SYSTEM
|
||||||
CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_DYNARMIC "Disable system Dynarmic" OFF "USE_SYSTEM_LIBS" OFF)
|
CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_DYNARMIC "Disable system Dynarmic" OFF "USE_SYSTEM_LIBS" OFF)
|
||||||
CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_FMT "Disable system fmt" OFF "USE_SYSTEM_LIBS" OFF)
|
CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_FMT "Disable system fmt" OFF "USE_SYSTEM_LIBS" OFF)
|
||||||
CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_XBYAK "Disable system xbyak" OFF "USE_SYSTEM_LIBS" OFF)
|
CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_XBYAK "Disable system xbyak" OFF "USE_SYSTEM_LIBS" OFF)
|
||||||
|
CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_OAKNUT "Disable system oaknut" OFF "USE_SYSTEM_LIBS" OFF)
|
||||||
CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_INIH "Disable system inih" OFF "USE_SYSTEM_LIBS" OFF)
|
CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_INIH "Disable system inih" OFF "USE_SYSTEM_LIBS" OFF)
|
||||||
CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_FFMPEG_HEADERS "Disable system ffmpeg" OFF "USE_SYSTEM_LIBS" OFF)
|
CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_FFMPEG_HEADERS "Disable system ffmpeg" OFF "USE_SYSTEM_LIBS" OFF)
|
||||||
CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_GLSLANG "Disable system glslang" OFF "USE_SYSTEM_LIBS" OFF)
|
CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_GLSLANG "Disable system glslang" OFF "USE_SYSTEM_LIBS" OFF)
|
||||||
|
|
@ -50,6 +53,7 @@ CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_LODEPNG "Disable system lodepng" OFF "USE_
|
||||||
CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_OPENAL "Disable system OpenAL" OFF "USE_SYSTEM_LIBS" OFF)
|
CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_OPENAL "Disable system OpenAL" OFF "USE_SYSTEM_LIBS" OFF)
|
||||||
CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_VMA "Disable system VulkanMemoryAllocator" OFF "USE_SYSTEM_LIBS" OFF)
|
CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_VMA "Disable system VulkanMemoryAllocator" OFF "USE_SYSTEM_LIBS" OFF)
|
||||||
CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_VULKAN_HEADERS "Disable system Vulkan headers" OFF "USE_SYSTEM_LIBS" OFF)
|
CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_VULKAN_HEADERS "Disable system Vulkan headers" OFF "USE_SYSTEM_LIBS" OFF)
|
||||||
|
CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_SPIRV_HEADERS "Disable system SPIRV headers" OFF "USE_SYSTEM_LIBS" OFF)
|
||||||
CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_CATCH2 "Disable system Catch2" OFF "USE_SYSTEM_LIBS" OFF)
|
CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_CATCH2 "Disable system Catch2" OFF "USE_SYSTEM_LIBS" OFF)
|
||||||
|
|
||||||
set(LIB_VAR_LIST
|
set(LIB_VAR_LIST
|
||||||
|
|
@ -64,6 +68,7 @@ set(LIB_VAR_LIST
|
||||||
DYNARMIC
|
DYNARMIC
|
||||||
FMT
|
FMT
|
||||||
XBYAK
|
XBYAK
|
||||||
|
OAKNUT
|
||||||
INIH
|
INIH
|
||||||
FFMPEG_HEADERS
|
FFMPEG_HEADERS
|
||||||
GLSLANG
|
GLSLANG
|
||||||
|
|
@ -75,6 +80,7 @@ set(LIB_VAR_LIST
|
||||||
OPENAL
|
OPENAL
|
||||||
VMA
|
VMA
|
||||||
VULKAN_HEADERS
|
VULKAN_HEADERS
|
||||||
|
SPIRV_HEADERS
|
||||||
CATCH2
|
CATCH2
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
2
externals/cryptopp
vendored
|
|
@ -1 +1 @@
|
||||||
Subproject commit 60f81a77e0c9a0e7ffc1ca1bc438ddfa2e43b78e
|
Subproject commit 8d92d788421483a43e09acf1cd4a2861cb2b8cab
|
||||||
1
externals/cryptopp-cmake
vendored
|
|
@ -1 +0,0 @@
|
||||||
Subproject commit 00a151f8489daaa32434ab1f340e6750793ddf0c
|
|
||||||
2
externals/discord-rpc
vendored
|
|
@ -1 +1 @@
|
||||||
Subproject commit 54eb03c20351f94850bfca3955cb87465a860ef6
|
Subproject commit cb50201fc09290cd078c7ab27917504491f7f96a
|
||||||
1
externals/dllwalker
vendored
Submodule
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 2f8b349c26832cae612aa7082154c0697a9cbc8e
|
||||||
2
externals/dynarmic
vendored
|
|
@ -1 +1 @@
|
||||||
Subproject commit ef8380aef149fe39b2913c4a1678470db2eac1d4
|
Subproject commit 526227eebe1efff3fb14dbf494b9c5b44c2e9c1f
|
||||||
2
externals/fmt
vendored
|
|
@ -1 +1 @@
|
||||||
Subproject commit 123913715afeb8a437e6388b4473fcc4753e1c9a
|
Subproject commit e424e3f2e607da02742f73db84873b8084fc714c
|
||||||
2
externals/glslang
vendored
|
|
@ -1 +1 @@
|
||||||
Subproject commit b3a6aa7b03c51ba976e4f4e96b1e31f77f43f312
|
Subproject commit fc9889c889561c5882e83819dcaffef5ed45529b
|
||||||
2
externals/libressl
vendored
|
|
@ -1 +1 @@
|
||||||
Subproject commit d4fc7348a3fbe9c659a373e28a3b50f052f7c50a
|
Subproject commit 88b8e41b71099fabc57813bc06d8bc1aba050a19
|
||||||
16
externals/libretro-common/CMakeLists.txt
vendored
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
add_library(libretro_common STATIC
|
||||||
|
libretro-common/compat/compat_posix_string.c
|
||||||
|
libretro-common/compat/fopen_utf8.c
|
||||||
|
libretro-common/encodings/encoding_utf.c
|
||||||
|
libretro-common/compat/compat_strl.c
|
||||||
|
libretro-common/file/file_path.c
|
||||||
|
libretro-common/streams/file_stream.c
|
||||||
|
libretro-common/streams/file_stream_transforms.c
|
||||||
|
libretro-common/string/stdstring.c
|
||||||
|
libretro-common/time/rtime.c
|
||||||
|
libretro-common/vfs/vfs_implementation.c
|
||||||
|
)
|
||||||
|
target_include_directories(libretro_common PUBLIC
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/libretro-common
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/libretro-common/include
|
||||||
|
)
|
||||||
1
externals/libretro-common/libretro-common
vendored
Submodule
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 7fc7feeddca391be65c94e6541381467684b814d
|
||||||
2
externals/libyuv
vendored
|
|
@ -1 +1 @@
|
||||||
Subproject commit c060118bea3f28ceb837d3c85e479d3bb4c21726
|
Subproject commit 6f729fbe658a40dfd993fa8b22bd612bb17cde5c
|
||||||
2
externals/openal-soft
vendored
|
|
@ -1 +1 @@
|
||||||
Subproject commit 90191edd20bb877c5cbddfdac7ec0fe49ad93727
|
Subproject commit e399840fc6aba5f7bc3f0633e8ff10bba0640906
|
||||||
2
externals/sdl2/SDL
vendored
|
|
@ -1 +1 @@
|
||||||
Subproject commit e11183ea6caa3ae4895f4bc54cad2bbb0e365417
|
Subproject commit 5d249570393f7a37e037abf22cd6012a4cc56a71
|
||||||
1
externals/sirit
vendored
|
|
@ -1 +0,0 @@
|
||||||
Subproject commit 4ab79a8c023aa63caaa93848b09b9fe8b183b1a9
|
|
||||||
91
externals/sirit/CMakeLists.txt
vendored
Normal file
|
|
@ -0,0 +1,91 @@
|
||||||
|
# This file has been adapted from dynarmic
|
||||||
|
|
||||||
|
cmake_minimum_required(VERSION 3.8)
|
||||||
|
project(sirit CXX)
|
||||||
|
|
||||||
|
# Determine if we're built as a subproject (using add_subdirectory)
|
||||||
|
# or if this is the master project.
|
||||||
|
set(MASTER_PROJECT OFF)
|
||||||
|
if (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
|
||||||
|
set(MASTER_PROJECT ON)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Sirit project options
|
||||||
|
option(SIRIT_TESTS "Build tests" OFF)
|
||||||
|
option(SIRIT_USE_SYSTEM_SPIRV_HEADERS "Use system SPIR-V headers" OFF)
|
||||||
|
|
||||||
|
# Default to a Release build
|
||||||
|
if (NOT CMAKE_BUILD_TYPE)
|
||||||
|
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE)
|
||||||
|
message(STATUS "Defaulting to a Release build")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Set hard requirements for C++
|
||||||
|
set(CMAKE_CXX_STANDARD 20)
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
|
# Warn on CMake API deprecations
|
||||||
|
set(CMAKE_WARN_DEPRECATED ON)
|
||||||
|
|
||||||
|
# Disable in-source builds
|
||||||
|
set(CMAKE_DISABLE_SOURCE_CHANGES ON)
|
||||||
|
set(CMAKE_DISABLE_IN_SOURCE_BUILD ON)
|
||||||
|
if ("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
|
||||||
|
message(SEND_ERROR "In-source builds are not allowed.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Add the module directory to the list of paths
|
||||||
|
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/CMakeModules")
|
||||||
|
|
||||||
|
# Compiler flags
|
||||||
|
if (MSVC)
|
||||||
|
set(SIRIT_CXX_FLAGS
|
||||||
|
/std:c++latest # CMAKE_CXX_STANDARD as no effect on MSVC until CMake 3.10.
|
||||||
|
/W4
|
||||||
|
/w34263 # Non-virtual member function hides base class virtual function
|
||||||
|
/w44265 # Class has virtual functions, but destructor is not virtual
|
||||||
|
/w34456 # Declaration of 'var' hides previous local declaration
|
||||||
|
/w34457 # Declaration of 'var' hides function parameter
|
||||||
|
/w34458 # Declaration of 'var' hides class member
|
||||||
|
/w34459 # Declaration of 'var' hides global definition
|
||||||
|
/w34946 # Reinterpret-cast between related types
|
||||||
|
/wd4592 # Symbol will be dynamically initialized (implementation limitation)
|
||||||
|
/permissive- # Stricter C++ standards conformance
|
||||||
|
/MP
|
||||||
|
/Zi
|
||||||
|
/Zo
|
||||||
|
/EHsc
|
||||||
|
/Zc:throwingNew # Assumes new never returns null
|
||||||
|
/Zc:inline # Omits inline functions from object-file output
|
||||||
|
/DNOMINMAX
|
||||||
|
/WX)
|
||||||
|
|
||||||
|
if (CMAKE_VS_PLATFORM_TOOLSET MATCHES "LLVM-vs[0-9]+")
|
||||||
|
list(APPEND SIRIT_CXX_FLAGS
|
||||||
|
-Qunused-arguments
|
||||||
|
-Wno-missing-braces)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
set(SIRIT_CXX_FLAGS
|
||||||
|
-Wall
|
||||||
|
-Wextra
|
||||||
|
-Wcast-qual
|
||||||
|
-pedantic
|
||||||
|
-pedantic-errors
|
||||||
|
-Wfatal-errors
|
||||||
|
-Wno-missing-braces
|
||||||
|
-Wconversion
|
||||||
|
-Wsign-conversion
|
||||||
|
-Wshadow
|
||||||
|
-Werror)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Enable unit-testing.
|
||||||
|
enable_testing(true)
|
||||||
|
|
||||||
|
# Sirit project files
|
||||||
|
add_subdirectory(sirit/src)
|
||||||
|
if (SIRIT_TESTS)
|
||||||
|
add_subdirectory(sirit/tests)
|
||||||
|
endif()
|
||||||