Compare commits
2486 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
b6eb396626 | |
|
|
b4fdd26946 | |
|
|
14b5df3e2c | |
|
|
482c8e1256 | |
|
|
162bb983ab | |
|
|
4bd8d682c9 | |
|
|
119cacac0d | |
|
|
1cdc87082f | |
|
|
73d591e877 | |
|
|
e460578cba | |
|
|
29ea018a2e | |
|
|
45d6bcb2a7 | |
|
|
f93bd379e6 | |
|
|
6a57a07073 | |
|
|
b6b1e95d37 | |
|
|
edbfa2905f | |
|
|
2eb4ee2302 | |
|
|
b79e19e901 | |
|
|
64196bd5e7 | |
|
|
900d76d94c | |
|
|
01ff9ecdc3 | |
|
|
74e58b34e1 | |
|
|
a1c52098ad | |
|
|
115b032ca1 | |
|
|
93b16188bf | |
|
|
1395135d38 | |
|
|
68572b545e | |
|
|
0f542d8517 | |
|
|
b40eb663a7 | |
|
|
45ec826517 | |
|
|
db4ed0301a | |
|
|
dca75bb289 | |
|
|
14811af6ec | |
|
|
0d4117bb59 | |
|
|
b44deb2a1c | |
|
|
30a575dc28 | |
|
|
500723614b | |
|
|
61dd0df958 | |
|
|
b199be2fc7 | |
|
|
5ae8418352 | |
|
|
742ac8f73a | |
|
|
93f23448d0 | |
|
|
0e2c9177c0 | |
|
|
968396b99b | |
|
|
2d4d6e6689 | |
|
|
134725f121 | |
|
|
d00fb4b333 | |
|
|
f2b9b42437 | |
|
|
e334105074 | |
|
|
5ca6ba9380 | |
|
|
6a734b0d6d | |
|
|
56c6e1aab9 | |
|
|
755622536f | |
|
|
a02df866d6 | |
|
|
4910f2590f | |
|
|
a44d18f2c1 | |
|
|
309c6d920f | |
|
|
d7faf89ff2 | |
|
|
a4279c7efc | |
|
|
3d5e009292 | |
|
|
b737122dd6 | |
|
|
153623e1f1 | |
|
|
2f54c689e9 | |
|
|
8374c79c5d | |
|
|
f150f0c649 | |
|
|
e465b9ccba | |
|
|
d07f84330f | |
|
|
53406f5046 | |
|
|
6afdb0f176 | |
|
|
fe76435079 | |
|
|
2cbe56aaeb | |
|
|
2a8309bcb0 | |
|
|
831987e4db | |
|
|
b756f80b4a | |
|
|
ddd50b5e3a | |
|
|
72b29fee19 | |
|
|
8459f9ed74 | |
|
|
78edbe2e00 | |
|
|
8af7006019 | |
|
|
6d3343f3b1 | |
|
|
ad1623243c | |
|
|
c95ea4a498 | |
|
|
e00e734ed3 | |
|
|
0ad706c3a9 | |
|
|
0f95e40c83 | |
|
|
68d6711d84 | |
|
|
4bf2e4ed83 | |
|
|
570ce0194e | |
|
|
6783b31260 | |
|
|
a99ef867bc | |
|
|
29d34e7e86 | |
|
|
dc76a18275 | |
|
|
fa0f30e5ef | |
|
|
6ad23ed20b | |
|
|
5aa5eeb992 | |
|
|
42f472107d | |
|
|
5d58a71618 | |
|
|
191abbad87 | |
|
|
432885fb0b | |
|
|
e39c5d55d3 | |
|
|
61beafa967 | |
|
|
c1fee0c161 | |
|
|
6a05c82952 | |
|
|
7ccfdf0660 | |
|
|
f1d8dedd6f | |
|
|
0efd939a2d | |
|
|
2e7a5c9897 | |
|
|
514b10f662 | |
|
|
deb7538384 | |
|
|
1f58533518 | |
|
|
c25b0053d0 | |
|
|
4712bf5909 | |
|
|
f09f7d49e0 | |
|
|
5cd53f2017 | |
|
|
b7346799d3 | |
|
|
d3c19e573d | |
|
|
431a9c89e8 | |
|
|
375ba90589 | |
|
|
6af12744ff | |
|
|
7c9490116a | |
|
|
20890533d5 | |
|
|
1fbf50dea4 | |
|
|
c0bb55a83b | |
|
|
a6398b12fa | |
|
|
d606a2c7d3 | |
|
|
19f625947b | |
|
|
fab5b4a5aa | |
|
|
95d311e9bf | |
|
|
9283b69c00 | |
|
|
d006955398 | |
|
|
31faecde59 | |
|
|
c6fada2c1f | |
|
|
d437434cf9 | |
|
|
4003ff7d6b | |
|
|
94768aa089 | |
|
|
34c1766007 | |
|
|
34ad75f2c9 | |
|
|
2b342b55bd | |
|
|
71991c2275 | |
|
|
d2a0a597b9 | |
|
|
18a1f45ee4 | |
|
|
39c266af1b | |
|
|
3a762a5311 | |
|
|
fc9f9c011b | |
|
|
5774e290c5 | |
|
|
d84ad841f1 | |
|
|
873cc1ca67 | |
|
|
5918ad85e6 | |
|
|
f7dbe57966 | |
|
|
60c7da3cfb | |
|
|
cefb338e02 | |
|
|
d6e7c9b41d | |
|
|
0d4b271fed | |
|
|
f4cf292899 | |
|
|
da0b7c8484 | |
|
|
f68f7ffaf0 | |
|
|
8c4d2db9d1 | |
|
|
df692aeaba | |
|
|
06da3877db | |
|
|
e88058ed37 | |
|
|
26dc506d53 | |
|
|
04df26a574 | |
|
|
f5541e7518 | |
|
|
f701f9a9cb | |
|
|
5cd4d7854a | |
|
|
8a8df0bfa4 | |
|
|
d826461573 | |
|
|
53973d3505 | |
|
|
70b1d1a87a | |
|
|
359643af24 | |
|
|
3a66c9b359 | |
|
|
980a27427d | |
|
|
edc2e32b3f | |
|
|
e49446df61 | |
|
|
5e4443a1f9 | |
|
|
afdfa29547 | |
|
|
28ef8faaa1 | |
|
|
aabc23348b | |
|
|
dfb014d4a8 | |
|
|
aa175c75ac | |
|
|
a3e54ebcf3 | |
|
|
ac4dfe9df7 | |
|
|
7bb3943467 | |
|
|
4c1919cdee | |
|
|
321a829243 | |
|
|
4b01fa8556 | |
|
|
05c44ceb91 | |
|
|
2bb57c9317 | |
|
|
6e5474959f | |
|
|
dc44cab8be | |
|
|
af6cbc9b9e | |
|
|
17d7f82ffd | |
|
|
2c11be635d | |
|
|
4fb5cec968 | |
|
|
cbba51ddce | |
|
|
433f7cfa49 | |
|
|
5efdf12738 | |
|
|
4cadc0009d | |
|
|
862519b051 | |
|
|
c6abd08689 | |
|
|
725b5d5973 | |
|
|
ef1decc6ad | |
|
|
9c9626b502 | |
|
|
af20525b18 | |
|
|
873c3a5310 | |
|
|
fa8ab487a1 | |
|
|
c91641b5cd | |
|
|
2d32791f35 | |
|
|
79b2e7b474 | |
|
|
529341fd7d | |
|
|
9d2b38d972 | |
|
|
38ef3678c6 | |
|
|
8198a50fd6 | |
|
|
d28bf267a1 | |
|
|
ef1b8fe86d | |
|
|
7c326bb2a2 | |
|
|
8b11e8b5c8 | |
|
|
fae6c725ec | |
|
|
21c092bd80 | |
|
|
92b899f5bf | |
|
|
b0ed2e02de | |
|
|
7c94970b8d | |
|
|
6dab29e62d | |
|
|
9b1af5d3af | |
|
|
663a8ef24b | |
|
|
aa11859bda | |
|
|
e6644af301 | |
|
|
6f6eba3d2c | |
|
|
579aa4f6d8 | |
|
|
06cb87f773 | |
|
|
d05f5cc34d | |
|
|
57714203de | |
|
|
dc25f28774 | |
|
|
21b4fe79aa | |
|
|
6658154f2d | |
|
|
d547f6e0a5 | |
|
|
da9b8209d6 | |
|
|
af4494284d | |
|
|
00a1a49405 | |
|
|
952824356e | |
|
|
9b4e0ebd80 | |
|
|
b4989b62a1 | |
|
|
ecb058079c | |
|
|
9f93969211 | |
|
|
19a4cb61ea | |
|
|
a52fdf90e7 | |
|
|
abbfe4181b | |
|
|
157c538a08 | |
|
|
027c6a8fb7 | |
|
|
99830141db | |
|
|
3ff478f3ef | |
|
|
b0f2597e38 | |
|
|
8e3eebe483 | |
|
|
c44d33c4e1 | |
|
|
ad229da788 | |
|
|
18bd436b39 | |
|
|
f19bf483be | |
|
|
085d4979ca | |
|
|
167f501a1a | |
|
|
07026d593c | |
|
|
3ca40dae17 | |
|
|
2741a33a15 | |
|
|
403e466ac2 | |
|
|
c9240a1880 | |
|
|
221ee0303c | |
|
|
cedd6ffae6 | |
|
|
85f1b4c5c5 | |
|
|
01c2e1c3fd | |
|
|
23aee471e5 | |
|
|
28a2a74a97 | |
|
|
f22810fe54 | |
|
|
e2d09bdcf5 | |
|
|
baae55f1eb | |
|
|
b23a91720e | |
|
|
f2bf473e08 | |
|
|
c1b6d369b2 | |
|
|
e995e54168 | |
|
|
51d0cd7779 | |
|
|
8b6c4b97e6 | |
|
|
d6120b3c83 | |
|
|
ae2d73cf54 | |
|
|
e41c2b15fb | |
|
|
863906766f | |
|
|
8dd99cb11c | |
|
|
f23afac745 | |
|
|
1972cbe080 | |
|
|
c225539ba7 | |
|
|
389fa08ebb | |
|
|
73397d3714 | |
|
|
a7705d16e5 | |
|
|
9b55b3a958 | |
|
|
b1905750be | |
|
|
6dd9d26846 | |
|
|
48bf31f86f | |
|
|
b0370d117c | |
|
|
fa2a67fb3b | |
|
|
c3e4d73341 | |
|
|
3ca94e8a33 | |
|
|
1de9fa76f9 | |
|
|
c0cf269159 | |
|
|
bae80d369f | |
|
|
74bb2a5fb3 | |
|
|
6980a08090 | |
|
|
fa687e9e99 | |
|
|
c440ff84cc | |
|
|
62ef0198c5 | |
|
|
ffb3964b10 | |
|
|
155d7b2e07 | |
|
|
5fb24f6653 | |
|
|
08dabad8ca | |
|
|
4f282b4f8b | |
|
|
be14bbe80c | |
|
|
51be963ac8 | |
|
|
f95507b448 | |
|
|
8b4c36a9ec | |
|
|
8ce38175f5 | |
|
|
9c6895247d | |
|
|
c24ced908c | |
|
|
9069b33ded | |
|
|
a8daedc480 | |
|
|
32e235634a | |
|
|
058352442e | |
|
|
cc564500c1 | |
|
|
4eb7eb412c | |
|
|
5d0c9295ca | |
|
|
3f9627b776 | |
|
|
cce29a87e1 | |
|
|
215ecac933 | |
|
|
7c71e7dfe3 | |
|
|
de11785597 | |
|
|
89b6d8ec59 | |
|
|
7c5229096f | |
|
|
273f249ec4 | |
|
|
2d1b480d68 | |
|
|
f7580f109a | |
|
|
5ee12395a7 | |
|
|
7a532a8662 | |
|
|
7330da3e5a | |
|
|
c8377c7797 | |
|
|
8dad7b377d | |
|
|
3f8f16e711 | |
|
|
6397a5a455 | |
|
|
0b3a20be2d | |
|
|
dbec9e8c76 | |
|
|
c4a9dfb191 | |
|
|
d1cdb915f4 | |
|
|
46d2e4124e | |
|
|
2751661a4e | |
|
|
dbaa2e5e5d | |
|
|
a0c9da6712 | |
|
|
148d2debcb | |
|
|
4405515c73 | |
|
|
926a286277 | |
|
|
ecd3302e74 | |
|
|
d13f1114c6 | |
|
|
d9320945ea | |
|
|
e4fa7264ba | |
|
|
33d73d9f4d | |
|
|
0b102ee2c1 | |
|
|
a4c8363d60 | |
|
|
ce5a0aec59 | |
|
|
03b17f565a | |
|
|
cdd32375c6 | |
|
|
9667f5198d | |
|
|
47a318cb46 | |
|
|
c89e224050 | |
|
|
bbcfaff705 | |
|
|
1eb1af9389 | |
|
|
ac5a185d1b | |
|
|
cecb4bc1b5 | |
|
|
0b40c37ccd | |
|
|
72eb16bc7b | |
|
|
4286c2d0c1 | |
|
|
f082d17ee4 | |
|
|
ee2e521f5d | |
|
|
36785ad6db | |
|
|
7bc1d6b70a | |
|
|
35747957b7 | |
|
|
56f79192e7 | |
|
|
d75c537d81 | |
|
|
d5e75c8331 | |
|
|
9d68068d84 | |
|
|
cb0b2fb7cf | |
|
|
651d80b27d | |
|
|
c2242e06c4 | |
|
|
a1f74c4b6a | |
|
|
d50b9db910 | |
|
|
54c452de76 | |
|
|
4ea384e8b9 | |
|
|
6a0291a9ab | |
|
|
215aca07f0 | |
|
|
72ea3e3be8 | |
|
|
2b7f007921 | |
|
|
4df5eecada | |
|
|
81cb751756 | |
|
|
4739372547 | |
|
|
aedbcb51b2 | |
|
|
0624680953 | |
|
|
7e1bd3b3ef | |
|
|
62fd4e15ec | |
|
|
54fbd6870b | |
|
|
c944f1ec67 | |
|
|
1fef9e1f23 | |
|
|
396d18ff3b | |
|
|
ee232ad635 | |
|
|
603ac3218c | |
|
|
dd28b954f4 | |
|
|
d60ff6fa51 | |
|
|
549539e62f | |
|
|
812e86ed0b | |
|
|
11b7f85cf0 | |
|
|
0b0f7f5f0a | |
|
|
47679d1788 | |
|
|
734f9d2c6b | |
|
|
467bfa00aa | |
|
|
c7410c9792 | |
|
|
e436de39b0 | |
|
|
0c08ad12e6 | |
|
|
12ec05879e | |
|
|
e25df6065c | |
|
|
f1afea268f | |
|
|
a1f1ce639e | |
|
|
9c9aa11d77 | |
|
|
b3d94e6abe | |
|
|
9284db5b65 | |
|
|
2d43ecc092 | |
|
|
3cf0c04831 | |
|
|
350fcdae1e | |
|
|
f7e54f4394 | |
|
|
82b494203d | |
|
|
736f4fd10d | |
|
|
c861410732 | |
|
|
748cc820e5 | |
|
|
e4cbe64172 | |
|
|
751e44d399 | |
|
|
323f87dfe6 | |
|
|
1e414ac871 | |
|
|
8b36940221 | |
|
|
a389afe03a | |
|
|
db9b359b8b | |
|
|
b73d03b199 | |
|
|
243af150a8 | |
|
|
c6fd588088 | |
|
|
06e09c3019 | |
|
|
34474b32aa | |
|
|
3dc7b93eff | |
|
|
a44f760f31 | |
|
|
c770b22b38 | |
|
|
61fc66f59f | |
|
|
7db63f8570 | |
|
|
4dc90741d7 | |
|
|
1f395b9a6c | |
|
|
eba646cebb | |
|
|
3ef1f91d9d | |
|
|
182473618b | |
|
|
56dc6d133d | |
|
|
8a4b76ec59 | |
|
|
fe11a70f22 | |
|
|
ecbe04bebe | |
|
|
6b8daad36d | |
|
|
699e85799d | |
|
|
59cf7735a3 | |
|
|
16eb611825 | |
|
|
44a0b99c76 | |
|
|
2bd057d829 | |
|
|
dc108719e9 | |
|
|
1e048f5e81 | |
|
|
4afe9de86b | |
|
|
d8f5f00aac | |
|
|
cb3383f310 | |
|
|
d423c5f715 | |
|
|
1ba4035db6 | |
|
|
d14b21dc11 | |
|
|
1abb1f39f5 | |
|
|
7a39d2a4ee | |
|
|
6794e232ac | |
|
|
6786662d10 | |
|
|
60a3b0742a | |
|
|
d7e1525ff4 | |
|
|
4e37936525 | |
|
|
9f05130a04 | |
|
|
053ab631ee | |
|
|
a7b57462fa | |
|
|
5ed12e0cc0 | |
|
|
400c3b568d | |
|
|
587dfd1eea | |
|
|
8ca8877339 | |
|
|
382d1b2901 | |
|
|
8b51e47b19 | |
|
|
c731d5770c | |
|
|
5cad6edec0 | |
|
|
5cf11c7a27 | |
|
|
671507979e | |
|
|
576faba9a6 | |
|
|
7f383f9caa | |
|
|
1852e68b48 | |
|
|
f18d9e0559 | |
|
|
647fb43ccd | |
|
|
d76a64abc9 | |
|
|
d56d310c1f | |
|
|
09059e2c1d | |
|
|
f9a8fa8ea9 | |
|
|
40ac530d59 | |
|
|
9292c8952a | |
|
|
4e0f762c3c | |
|
|
c892cfb5dc | |
|
|
47c4e91443 | |
|
|
698a461fdd | |
|
|
199be2f489 | |
|
|
e3d91630ee | |
|
|
2abe621457 | |
|
|
ac6ca04d74 | |
|
|
ebc5d343a4 | |
|
|
035946cfe9 | |
|
|
4f10d814c6 | |
|
|
a2c7ad85fb | |
|
|
730441c692 | |
|
|
a608ac2de5 | |
|
|
f2b29258f6 | |
|
|
e6e11c1e72 | |
|
|
d737ae0c28 | |
|
|
023411e444 | |
|
|
8559ccc404 | |
|
|
a17571d9a3 | |
|
|
fe086a089d | |
|
|
eb84b2e607 | |
|
|
ea38185ea9 | |
|
|
92b82d2cf8 | |
|
|
49cc96b0c4 | |
|
|
022855eca2 | |
|
|
38b9deffbc | |
|
|
f2794d609a | |
|
|
65253713f1 | |
|
|
9d56cf94cd | |
|
|
697f904e98 | |
|
|
f01553497c | |
|
|
7189ccbb7b | |
|
|
49bf55f5c6 | |
|
|
be5a215a6c | |
|
|
7f13b8b1e1 | |
|
|
e340a8a4ff | |
|
|
ae1b692333 | |
|
|
9dff9a2b14 | |
|
|
398eceafca | |
|
|
18986b29f4 | |
|
|
2cfd53aa79 | |
|
|
14c403f6b8 | |
|
|
bc57708120 | |
|
|
f64d0807f4 | |
|
|
faf2516d56 | |
|
|
2091c3cf69 | |
|
|
1296a7edea | |
|
|
62caadf4c3 | |
|
|
4b0ec476e3 | |
|
|
932ec01ea1 | |
|
|
33d626cf60 | |
|
|
629662657f | |
|
|
ad80542a57 | |
|
|
876b81cc45 | |
|
|
52929fd904 | |
|
|
794b4e0255 | |
|
|
acdcb0a793 | |
|
|
ab47f1f5f6 | |
|
|
57c5aa664a | |
|
|
55cd5bc3a0 | |
|
|
78e7887c7b | |
|
|
6d5a5b78c8 | |
|
|
d9b77bdf9a | |
|
|
f8bdc510e8 | |
|
|
ffb790b1b5 | |
|
|
09751a8aa4 | |
|
|
a332ace34a | |
|
|
eaef976993 | |
|
|
21c612b975 | |
|
|
1feb61062b | |
|
|
c35ae6f714 | |
|
|
730236790d | |
|
|
753dff9ffc | |
|
|
b88f114e12 | |
|
|
633d6abbec | |
|
|
eecd3fbdeb | |
|
|
2d962cb418 | |
|
|
47d5b5e17c | |
|
|
a07478f468 | |
|
|
5f845dff41 | |
|
|
30eb0949c7 | |
|
|
67d5e8dc16 | |
|
|
9667313919 | |
|
|
d21e9a4b5f | |
|
|
f07112e21c | |
|
|
76f98d30f0 | |
|
|
8a9c38f05c | |
|
|
6dc082c7d0 | |
|
|
ec958ff150 | |
|
|
f209157070 | |
|
|
27feb27c39 | |
|
|
c580186841 | |
|
|
b0aad823b2 | |
|
|
9f04e9f1a2 | |
|
|
c03dffbf5f | |
|
|
69f0cda9c7 | |
|
|
ec47920b52 | |
|
|
0e2859936a | |
|
|
bcc97ecbfe | |
|
|
a8d57d7d17 | |
|
|
eb4137aefd | |
|
|
ae2b0b10dd | |
|
|
8ba91e933a | |
|
|
8557bd0205 | |
|
|
59a656edb4 | |
|
|
ee1c1ba2c7 | |
|
|
df49656b25 | |
|
|
591e31bea6 | |
|
|
e93c9336dd | |
|
|
06cab0a5a1 | |
|
|
a0f652cb8c | |
|
|
5092b5ac7f | |
|
|
80957f9668 | |
|
|
1055c7b5be | |
|
|
9053303825 | |
|
|
6a51ab9215 | |
|
|
be2c4be4a0 | |
|
|
eb73db48f3 | |
|
|
ce409304c4 | |
|
|
8397efbb9e | |
|
|
7de040abf9 | |
|
|
68fd12f52c | |
|
|
a46626cf78 | |
|
|
e86caaa4e1 | |
|
|
829511a337 | |
|
|
9889eca356 | |
|
|
f9c66481c1 | |
|
|
f79435b30e | |
|
|
70b22712a8 | |
|
|
d1942c6dd7 | |
|
|
36a1fbbd49 | |
|
|
2dc30e8859 | |
|
|
f172c913c2 | |
|
|
d38ef4d233 | |
|
|
13cbc3884d | |
|
|
f5ad93973f | |
|
|
e2ada4cfe4 | |
|
|
0e1fba3d1e | |
|
|
9467c8951a | |
|
|
84118251fb | |
|
|
d4cc8d442c | |
|
|
d4c13858a5 | |
|
|
60b0f59551 | |
|
|
361f7e3dcc | |
|
|
3ced7d970e | |
|
|
a6e410b09a | |
|
|
507bbdf37a | |
|
|
4b3b3517b7 | |
|
|
744ea58b9d | |
|
|
92c35cb04c | |
|
|
f756f6d94a | |
|
|
cef42bf5c1 | |
|
|
f5f79288d3 | |
|
|
51fa993fc1 | |
|
|
03186fa2b0 | |
|
|
7901ee45a1 | |
|
|
3043fe7f0b | |
|
|
07c73d02ca | |
|
|
0a95076da4 | |
|
|
d98304c617 | |
|
|
c84d21c0f0 | |
|
|
50eeaa0409 | |
|
|
8d62f710fc | |
|
|
3abe11b093 | |
|
|
292c847777 | |
|
|
33266d8fe1 | |
|
|
fba21fe979 | |
|
|
a3b4a6dc03 | |
|
|
ff84934559 | |
|
|
0e5394e238 | |
|
|
896af463ab | |
|
|
9ebf3fec6d | |
|
|
eb7fb558e6 | |
|
|
22e8d52ed6 | |
|
|
1853ef1a3a | |
|
|
9a514e3ade | |
|
|
384892972c | |
|
|
2e4d92f526 | |
|
|
d1d00dae4c | |
|
|
c1eea9b09f | |
|
|
f8319ad828 | |
|
|
5e0697126e | |
|
|
bcd6e6e457 | |
|
|
0c21f86a62 | |
|
|
eedcc5326b | |
|
|
c26fb7b162 | |
|
|
705106e324 | |
|
|
ec2993933c | |
|
|
9ad3f97efb | |
|
|
fc676d906d | |
|
|
12a82990d3 | |
|
|
a970aea405 | |
|
|
5a72b13822 | |
|
|
a9868556a3 | |
|
|
5687f8070c | |
|
|
1ac30e0338 | |
|
|
c552004211 | |
|
|
93523daf50 | |
|
|
259a100c82 | |
|
|
281338243a | |
|
|
817f578dfc | |
|
|
d3374727e7 | |
|
|
a4c2c2f88a | |
|
|
a8b3bca199 | |
|
|
6614b4de93 | |
|
|
d3f4bcdf53 | |
|
|
01182aeb0e | |
|
|
cf5300149f | |
|
|
1bfc86b9c3 | |
|
|
1c61512e64 | |
|
|
b1deff231e | |
|
|
447d4060d5 | |
|
|
10f849cad1 | |
|
|
41e3f6cc67 | |
|
|
66fe5a9d00 | |
|
|
dd1812a4ed | |
|
|
1f50e8e0ec | |
|
|
da9c4508b3 | |
|
|
c9abbde679 | |
|
|
fb5d022a76 | |
|
|
a004920785 | |
|
|
a43ffbb54e | |
|
|
7c976cb3c5 | |
|
|
28d9cb117c | |
|
|
021a8ed409 | |
|
|
7d9542592a | |
|
|
b088b1a635 | |
|
|
2cc17f04c1 | |
|
|
efc52ab1ea | |
|
|
1f8d946de4 | |
|
|
1829014bc8 | |
|
|
319516126b | |
|
|
39ff1db4ff | |
|
|
ba00d2767a | |
|
|
9d5783c203 | |
|
|
cba495bd88 | |
|
|
1064271e15 | |
|
|
a3a78d11c2 | |
|
|
f8f518e90a | |
|
|
c612d83a2b | |
|
|
e724a8e86e | |
|
|
777e82f9fa | |
|
|
2200456957 | |
|
|
9e4f9f8ac4 | |
|
|
21afe3027c | |
|
|
15a454c83c | |
|
|
de1a06d59f | |
|
|
82962a98b3 | |
|
|
56053e919d | |
|
|
eec503e517 | |
|
|
07c3018b42 | |
|
|
0cd61b682f | |
|
|
a771fef5f0 | |
|
|
f425e865dd | |
|
|
1f7125cc9c | |
|
|
8fbc76eace | |
|
|
bce034185b | |
|
|
ce120c56de | |
|
|
cac44bdfd6 | |
|
|
b777cdf2c9 | |
|
|
f77b5897fa | |
|
|
12d127248c | |
|
|
8ca9709969 | |
|
|
81267118ce | |
|
|
352d0f006f | |
|
|
4861bcba6f | |
|
|
b2744b1dd7 | |
|
|
8dc2b45827 | |
|
|
c7ad4a580b | |
|
|
561000eb0c | |
|
|
688afa067c | |
|
|
b380a0a305 | |
|
|
a74392dbb1 | |
|
|
f4913b6415 | |
|
|
a7c98ccb25 | |
|
|
786632f936 | |
|
|
9b155a3793 | |
|
|
8b0a1ecfce | |
|
|
caaa89dd2b | |
|
|
a2c6580344 | |
|
|
00eac312fe | |
|
|
0940ea13a1 | |
|
|
f5b7e1b891 | |
|
|
3e2b0ea9d4 | |
|
|
8c4e42a43b | |
|
|
b98a7afacd | |
|
|
aab9a6b383 | |
|
|
b17281e3cd | |
|
|
ced493388f | |
|
|
8ee7028104 | |
|
|
21551fa80e | |
|
|
d699156645 | |
|
|
c79fda41f9 | |
|
|
8c508f54bd | |
|
|
d98e3b4d40 | |
|
|
8c9016dde4 | |
|
|
6eee24b414 | |
|
|
ec27afe04b | |
|
|
485098d4fc | |
|
|
7e656d278e | |
|
|
5ba6d841e1 | |
|
|
e19ca19e34 | |
|
|
37a8cf2a37 | |
|
|
8a23c73511 | |
|
|
cd6016f1af | |
|
|
8c36fad786 | |
|
|
4bd531808e | |
|
|
980b225254 | |
|
|
7d85dbbb31 | |
|
|
7c2306a85b | |
|
|
3c65a4fc28 | |
|
|
29f1a173bf | |
|
|
4a13eec6c8 | |
|
|
c603018d48 | |
|
|
f1cac3962c | |
|
|
f6d5a5a2a4 | |
|
|
f7edba625d | |
|
|
8fc8628adf | |
|
|
507f71c944 | |
|
|
0d772f5e90 | |
|
|
7881d05646 | |
|
|
7fc0906751 | |
|
|
0e13440f1d | |
|
|
b5fe2118c2 | |
|
|
b3e545f202 | |
|
|
6dcd418acb | |
|
|
65575a2253 | |
|
|
0fe2ab6689 | |
|
|
9016c3aaff | |
|
|
1b85f54dbf | |
|
|
454637f0a1 | |
|
|
3e8fc0ddcf | |
|
|
9f7a7bcfb5 | |
|
|
d48a14f9c9 | |
|
|
acd8cb0d50 | |
|
|
7848bb060c | |
|
|
5f937f6a06 | |
|
|
9dd2addba0 | |
|
|
7d1b39145a | |
|
|
3867674c0a | |
|
|
99916b03b3 | |
|
|
5f381968a4 | |
|
|
ff37270150 | |
|
|
99f4f3a8b3 | |
|
|
01d00e887a | |
|
|
d71fa3bc0a | |
|
|
8b08fe3abb | |
|
|
666449416a | |
|
|
135d0a79db | |
|
|
1b48ce3fe3 | |
|
|
b491c48cef | |
|
|
3f4b61f1b8 | |
|
|
980f90283a | |
|
|
0a5cd607b0 | |
|
|
edd3e78832 | |
|
|
5f72274380 | |
|
|
68509d6d83 | |
|
|
11fb4a2b65 | |
|
|
967d52ea6a | |
|
|
eb0f36ce58 | |
|
|
f09b8d9375 | |
|
|
a31fec1973 | |
|
|
6da3ab1354 | |
|
|
b95abff3f0 | |
|
|
67523f6228 | |
|
|
96840b1a03 | |
|
|
056bfb3e2f | |
|
|
76dc08d9a4 | |
|
|
4cde887c24 | |
|
|
1c3d8fb72e | |
|
|
e373481944 | |
|
|
7d0bb7f363 | |
|
|
0fbe0281e3 | |
|
|
34d9589b33 | |
|
|
a1d5d241fa | |
|
|
2323b12599 | |
|
|
96b4a1a841 | |
|
|
ccf34bb325 | |
|
|
1d217b67c5 | |
|
|
22d001462f | |
|
|
8e5df2b1c5 | |
|
|
fcdaf165ec | |
|
|
47fdeb17a5 | |
|
|
57e37e0b46 | |
|
|
09357b5df9 | |
|
|
c981d8272f | |
|
|
26879d1652 | |
|
|
06353a8fe5 | |
|
|
4f184e46f5 | |
|
|
ba034579f9 | |
|
|
427c4f213a | |
|
|
97c3dd8374 | |
|
|
0f5c74fb53 | |
|
|
071c6f68d5 | |
|
|
9f2eeca117 | |
|
|
0eddcd119e | |
|
|
f06796195c | |
|
|
493ab581de | |
|
|
561010d897 | |
|
|
3e827dba76 | |
|
|
1f0b1d33e2 | |
|
|
f32af27f1b | |
|
|
7bef6c6d99 | |
|
|
de51069004 | |
|
|
e8e1a7c062 | |
|
|
22eb11689b | |
|
|
e59c1cf0e8 | |
|
|
c3de1a30c4 | |
|
|
e83eea9ae9 | |
|
|
d465e807c1 | |
|
|
9a01316ce2 | |
|
|
870014cbb0 | |
|
|
17097aec6f | |
|
|
0444ca2c4c | |
|
|
736e20d0d8 | |
|
|
9ea54dee7c | |
|
|
cf61ef23d3 | |
|
|
649eeba2ab | |
|
|
dbab0091b2 | |
|
|
2b0941bccd | |
|
|
68812b65ad | |
|
|
cde8ec5d3e | |
|
|
e28603c66c | |
|
|
202e67c3dd | |
|
|
5be965131c | |
|
|
19b76c9f1b | |
|
|
d8676cbd6c | |
|
|
2bf6c3b78c | |
|
|
a94570e593 | |
|
|
70e3a0e322 | |
|
|
0d1a7c439b | |
|
|
0fab5e4d82 | |
|
|
4eeb4cdb0d | |
|
|
e7f9ab9797 | |
|
|
59156fa865 | |
|
|
b39a537adf | |
|
|
87c89ba973 | |
|
|
29ff41df59 | |
|
|
1d6d7eabf9 | |
|
|
ce7c077ca9 | |
|
|
67566d0fb7 | |
|
|
1f12b596f6 | |
|
|
cf63911261 | |
|
|
b6c00d767a | |
|
|
ad2b28cba0 | |
|
|
572c1ad775 | |
|
|
55c4b51a39 | |
|
|
843173a118 | |
|
|
9473b429ec | |
|
|
97e3d016f4 | |
|
|
333f0e5c9b | |
|
|
c891f09b7e | |
|
|
eacb76fb0c | |
|
|
06ac94db53 | |
|
|
8831f6a589 | |
|
|
af07f6576f | |
|
|
9d322660e8 | |
|
|
2e4d7cd080 | |
|
|
b3abb0f054 | |
|
|
67a47a0a9b | |
|
|
60a6ce3840 | |
|
|
b31dd767e4 | |
|
|
172c47548e | |
|
|
5b0a269d2c | |
|
|
b821c41ceb | |
|
|
b40db441c5 | |
|
|
455d180790 | |
|
|
62cee520f6 | |
|
|
c6aa2f85b1 | |
|
|
96926776bd | |
|
|
ac97cbe96d | |
|
|
5c7109bfd9 | |
|
|
d79ab96b7e | |
|
|
459390ef7b | |
|
|
5f5d8824fa | |
|
|
d222c47e59 | |
|
|
6772d2ff40 | |
|
|
e0386ae7a6 | |
|
|
889af509fa | |
|
|
0be95a784d | |
|
|
5635d06b7e | |
|
|
8b2f1aec5b | |
|
|
ede1a368f5 | |
|
|
690692b8fb | |
|
|
d4cd497ebb | |
|
|
335733e10c | |
|
|
1caf0fa518 | |
|
|
39e5b04a4d | |
|
|
2f4eeb6aec | |
|
|
89e47e7a2a | |
|
|
308bd12fad | |
|
|
c7b66b2ea4 | |
|
|
ea35f73c7a | |
|
|
1d7a43793a | |
|
|
c17973bd53 | |
|
|
1383530c4f | |
|
|
cadf185cee | |
|
|
3b0f54bc6a | |
|
|
4cb9e200ed | |
|
|
6c3a9d7466 | |
|
|
cc53107918 | |
|
|
3b10190780 | |
|
|
feb3aa9c8c | |
|
|
79a996d6cd | |
|
|
9607fa2cf1 | |
|
|
a422564bc7 | |
|
|
f07c13c02a | |
|
|
8e1a04999f | |
|
|
77fbcd915d | |
|
|
4c2a077751 | |
|
|
8a01581945 | |
|
|
c9a59f7b5d | |
|
|
aadbbc756d | |
|
|
a5bda7d22a | |
|
|
b09a76ea7e | |
|
|
8767f31d6e | |
|
|
4b8266ab83 | |
|
|
c34ceeab92 | |
|
|
197e440f1c | |
|
|
e493d80671 | |
|
|
c591415e7c | |
|
|
a10df262b1 | |
|
|
2f11809354 | |
|
|
3acf8d7536 | |
|
|
b1999b5942 | |
|
|
3a2c469c99 | |
|
|
be37a3af8e | |
|
|
8b05ee6ace | |
|
|
09445f294c | |
|
|
2ddedc3390 | |
|
|
3bfec7b607 | |
|
|
92ac33c2df | |
|
|
a36ea8380c | |
|
|
bd223eb457 | |
|
|
a3d042c094 | |
|
|
90643e8077 | |
|
|
c0a6811d56 | |
|
|
73ea4968bc | |
|
|
ebfa704e08 | |
|
|
402bdb1b57 | |
|
|
7485956415 | |
|
|
7744ce6d32 | |
|
|
655850e81a | |
|
|
e91ce96900 | |
|
|
fb54ec45ec | |
|
|
6c778824a1 | |
|
|
f3326f4f17 | |
|
|
5d31caf57b | |
|
|
af3b4ed6d3 | |
|
|
b72d7027f5 | |
|
|
f6666d59b2 | |
|
|
3275675b8e | |
|
|
edf81f7a71 | |
|
|
e8f6800096 | |
|
|
924a19e078 | |
|
|
f5bed6ff69 | |
|
|
6153ff8c8a | |
|
|
74f3c424e8 | |
|
|
5a4bad4da4 | |
|
|
59e402dccd | |
|
|
a8022a70b3 | |
|
|
e32b5572a0 | |
|
|
7b7d7f45c3 | |
|
|
1069733086 | |
|
|
932fca0b0b | |
|
|
7899dd51d5 | |
|
|
94cc83d369 | |
|
|
cade7453e4 | |
|
|
c3fcb0edf5 | |
|
|
54cd0e18e2 | |
|
|
8dc49de72f | |
|
|
44d0197e53 | |
|
|
525dfd8e9c | |
|
|
594abe09bf | |
|
|
c949f0ca8f | |
|
|
3787a48c64 | |
|
|
212c5b23e2 | |
|
|
f486f74dcf | |
|
|
662d47505f | |
|
|
2b7541caee | |
|
|
09da2e6874 | |
|
|
b7d224e5f1 | |
|
|
77ae580467 | |
|
|
4873a854bf | |
|
|
6dcc9ec7e3 | |
|
|
e7a0619e47 | |
|
|
39627876d2 | |
|
|
c45a8149f7 | |
|
|
6694f05ac5 | |
|
|
0daccab319 | |
|
|
7d1fe56fd2 | |
|
|
173b68aff6 | |
|
|
4778001348 | |
|
|
1668edf45a | |
|
|
0927f33763 | |
|
|
c25f248b03 | |
|
|
73608cd118 | |
|
|
472f901ed5 | |
|
|
db7700fb4b | |
|
|
75660165c5 | |
|
|
c9b1c04924 | |
|
|
08e5d21d4b | |
|
|
25ecbf379e | |
|
|
e6d19d7ca1 | |
|
|
7f37bb8ddc | |
|
|
0790d0662a | |
|
|
8ef3bba286 | |
|
|
28a0929b6d | |
|
|
433b6eaa08 | |
|
|
dd766b1b8a | |
|
|
8c96150937 | |
|
|
d36f8dab79 | |
|
|
d3bb45337a | |
|
|
549719cc34 | |
|
|
e742a26739 | |
|
|
93c18b6177 | |
|
|
e2a4fc1205 | |
|
|
72ea74f27d | |
|
|
09ba1e4017 | |
|
|
e89731accd | |
|
|
c1f4104ddd | |
|
|
c2be079943 | |
|
|
0c8d8a04ad | |
|
|
06dc140534 | |
|
|
343bd7413a | |
|
|
14f3b610e8 | |
|
|
2913551bbe | |
|
|
f780f204d5 | |
|
|
e9fc3024c4 | |
|
|
7ff8eddb4b | |
|
|
c6b9d34184 | |
|
|
dfd12d8c9f | |
|
|
8800578b65 | |
|
|
74fa5daf7c | |
|
|
98f7d2126d | |
|
|
77e1786d29 | |
|
|
f37100231f | |
|
|
e7e50b6164 | |
|
|
483c7b6b07 | |
|
|
6be13e0951 | |
|
|
5b20773092 | |
|
|
ba68f4c625 | |
|
|
f8b388551d | |
|
|
0c3aa4e1a4 | |
|
|
b6539ef09c | |
|
|
7af729335e | |
|
|
ed1eb7265e | |
|
|
79078b7cc6 | |
|
|
4f732af28b | |
|
|
f50afc5c24 | |
|
|
c0087369f0 | |
|
|
19c9c15e62 | |
|
|
ca8f617b1b | |
|
|
3caa4d41c9 | |
|
|
c7e994658e | |
|
|
2fe99c24ac | |
|
|
bccf27f29f | |
|
|
6fbc7a6301 | |
|
|
a7ae678420 | |
|
|
27b22e8765 | |
|
|
51e3580700 | |
|
|
e57fcd3a9e | |
|
|
7634039864 | |
|
|
ebe28eea87 | |
|
|
f393d0763f | |
|
|
c5f6a48910 | |
|
|
3b73fe8803 | |
|
|
a0087e75fb | |
|
|
018d8f8769 | |
|
|
7927025ab0 | |
|
|
d2b3831fcc | |
|
|
d639c66cf5 | |
|
|
d28cef938e | |
|
|
accb1d4af4 | |
|
|
1587dd7f65 | |
|
|
e13917ec44 | |
|
|
9db8b20f08 | |
|
|
cbaf9a8386 | |
|
|
2d362dcd01 | |
|
|
cbaf42c886 | |
|
|
bbda33cd5a | |
|
|
b3716e259e | |
|
|
bd878f464a | |
|
|
a5b80f2390 | |
|
|
8c014a5d26 | |
|
|
8923d27cf0 | |
|
|
bf9db200f4 | |
|
|
f09394cdd5 | |
|
|
ccbfd3d003 | |
|
|
245d470a39 | |
|
|
264106c526 | |
|
|
aefed23229 | |
|
|
0e993ff6d4 | |
|
|
ce20154942 | |
|
|
b28f1a802d | |
|
|
3302963305 | |
|
|
a7d2921a85 | |
|
|
b3a1d45f75 | |
|
|
9d0f87abd7 | |
|
|
02c7ae5da7 | |
|
|
304dd6c327 | |
|
|
f51f8d02a2 | |
|
|
2331c3d445 | |
|
|
c1670ba583 | |
|
|
16f0900198 | |
|
|
b45dfc9176 | |
|
|
563a941ead | |
|
|
077b3956fe | |
|
|
ac3ab3b84e | |
|
|
e3a5f77502 | |
|
|
bce813602e | |
|
|
0a28e7fa7e | |
|
|
8b58359c12 | |
|
|
20909895d6 | |
|
|
93c0286739 | |
|
|
079e83dae6 | |
|
|
8630a87cc7 | |
|
|
1732750da9 | |
|
|
30d3fe47a8 | |
|
|
3aa1f9749f | |
|
|
7ef901715c | |
|
|
dcf25086c6 | |
|
|
855923abf2 | |
|
|
1d205638ed | |
|
|
6b25058f68 | |
|
|
ec2a492687 | |
|
|
454e41fcd3 | |
|
|
f82cdb7a7b | |
|
|
1290640a7c | |
|
|
48c5c0dc88 | |
|
|
dfe2ae1dd1 | |
|
|
99c3c07988 | |
|
|
f4865e4376 | |
|
|
e91fff6f85 | |
|
|
21ee159b2c | |
|
|
9d83d8a345 | |
|
|
f4aaced448 | |
|
|
b24e2cb56b | |
|
|
9d7bde7218 | |
|
|
64c4582b01 | |
|
|
3e797338db | |
|
|
a9929e52b0 | |
|
|
44d808016c | |
|
|
1e765919ea | |
|
|
0ad6d4e8ba | |
|
|
883d93c6b8 | |
|
|
a5dfd2ef8b | |
|
|
2d5e0e2edf | |
|
|
a3e559add9 | |
|
|
d18a8fe988 | |
|
|
fd7988e492 | |
|
|
40f454b602 | |
|
|
c4235fa653 | |
|
|
a994bf367c | |
|
|
29859ca9ab | |
|
|
f1e7cad094 | |
|
|
a9c5c7167c | |
|
|
9a69e3fac6 | |
|
|
d401b13cbb | |
|
|
c93a3c56c2 | |
|
|
8621415f50 | |
|
|
e82fb20943 | |
|
|
1077948a13 | |
|
|
0b597fbb3f | |
|
|
effa39f3aa | |
|
|
66cf05667c | |
|
|
1151eb473d | |
|
|
779c75022b | |
|
|
6b089ccb22 | |
|
|
957d89ecd0 | |
|
|
e0970e1c9f | |
|
|
b26e9fc3a9 | |
|
|
d759277961 | |
|
|
5221a827c7 | |
|
|
4e01e2ac67 | |
|
|
8a3f02dc0c | |
|
|
808819a045 | |
|
|
4a96f653bf | |
|
|
43a49d48cc | |
|
|
04cbf398eb | |
|
|
0bcc2c09c0 | |
|
|
df3e6834d6 | |
|
|
7fd7d489f1 | |
|
|
c4e20e94f4 | |
|
|
0035ffc9cd | |
|
|
5bd2d6848a | |
|
|
3ee1b1e92a | |
|
|
3ce74bf30e | |
|
|
b6ff26aa5b | |
|
|
a4848d0f38 | |
|
|
137705c51d | |
|
|
c601405db0 | |
|
|
ff3752a26d | |
|
|
fe7fd614da | |
|
|
5b25d2a0f3 | |
|
|
4f0b125f9b | |
|
|
2c4a7e2a6d | |
|
|
35beb67d6a | |
|
|
f8c450e962 | |
|
|
d3f9c5ab84 | |
|
|
c70cc1932c | |
|
|
b55dadf50e | |
|
|
f41071c25b | |
|
|
ffa128c854 | |
|
|
14685d704c | |
|
|
3081e4b304 | |
|
|
fd1f6ef424 | |
|
|
7cfce0fb96 | |
|
|
6f0918ee95 | |
|
|
798a2d6e1e | |
|
|
0b8f07f307 | |
|
|
f1fdc2a177 | |
|
|
b659b609b9 | |
|
|
dc59fc318a | |
|
|
577d69153a | |
|
|
1ee4c58fdd | |
|
|
7af80a9223 | |
|
|
400257da1a | |
|
|
82529852f4 | |
|
|
a9a90c91e3 | |
|
|
f2307da83a | |
|
|
91e16cabff | |
|
|
db96ee16a2 | |
|
|
e98906b706 | |
|
|
72ea074fa4 | |
|
|
15d18206ff | |
|
|
e52be3a30a | |
|
|
a7da47e552 | |
|
|
e90e63e92c | |
|
|
e8a41d715d | |
|
|
189efeef28 | |
|
|
b67370c02b | |
|
|
574e0b578a | |
|
|
d1320bd2c9 | |
|
|
5e5b4680e4 | |
|
|
cc182416a5 | |
|
|
bf636a67e4 | |
|
|
d602caddde | |
|
|
0cdcab1c2a | |
|
|
f82b1ab6ce | |
|
|
ddf842c86d | |
|
|
908077203e | |
|
|
fec395d3c5 | |
|
|
66a77e6242 | |
|
|
d3c1ccf52d | |
|
|
207989a2f0 | |
|
|
1ebfbc9a6a | |
|
|
d0350cff01 | |
|
|
04f8cad0cb | |
|
|
35b7b570dc | |
|
|
344ca3e089 | |
|
|
b61562a5c7 | |
|
|
da3a0f6154 | |
|
|
f6b4967366 | |
|
|
020bf31dbd | |
|
|
c219b15e84 | |
|
|
e013bb9f15 | |
|
|
ae3ac8cdb1 | |
|
|
d6c51983ac | |
|
|
b45ac6630d | |
|
|
f960bd07cd | |
|
|
d71b77ef68 | |
|
|
26cfcc18a3 | |
|
|
92b81f76b5 | |
|
|
56707c36d8 | |
|
|
2bf387cd28 | |
|
|
f108f5e5e6 | |
|
|
10bd6222be | |
|
|
7932a5be3c | |
|
|
047c390e70 | |
|
|
d927560acc | |
|
|
b8fa769bbe | |
|
|
715307f06f | |
|
|
dcf3a1be3a | |
|
|
a58ede8911 | |
|
|
4be7d08f20 | |
|
|
db9b620bc0 | |
|
|
084f1ecbaf | |
|
|
483dbd9aff | |
|
|
93bd9bd1e1 | |
|
|
0bc1b1c971 | |
|
|
efa7558960 | |
|
|
0ffc36133d | |
|
|
2d307e6fc1 | |
|
|
6f5500d4e8 | |
|
|
b478c486a0 | |
|
|
3b0e842ede | |
|
|
35ad6372ff | |
|
|
c7fd3a05f9 | |
|
|
791e96ed2d | |
|
|
6465c91b95 | |
|
|
ca195d161f | |
|
|
fcc903016b | |
|
|
335279a634 | |
|
|
8353881b50 | |
|
|
31d13ba41e | |
|
|
029a59a836 | |
|
|
e533f71e0f | |
|
|
80abeb82ab | |
|
|
1b6bbbe6cf | |
|
|
cf7b353572 | |
|
|
cbf8b01447 | |
|
|
6d555a3059 | |
|
|
afbdc87ac7 | |
|
|
9298d1a677 | |
|
|
ade1769719 | |
|
|
92db4e2a9d | |
|
|
1b3987a7da | |
|
|
81d697e3ec | |
|
|
34e8b11919 | |
|
|
8dcfaca06a | |
|
|
d0172cbada | |
|
|
f30bbddbdc | |
|
|
2c5d0f5e77 | |
|
|
95d5cd5e09 | |
|
|
12b1f8dbe1 | |
|
|
82f9f7047e | |
|
|
e82c9c0a9b | |
|
|
c849adb43a | |
|
|
893912e0bf | |
|
|
880f703a87 | |
|
|
629622e44c | |
|
|
1f8a3dbe96 | |
|
|
b2cb63a6e9 | |
|
|
c3878e3248 | |
|
|
d77db06643 | |
|
|
cf90a4d3a0 | |
|
|
88046b4467 | |
|
|
ce7d07944a | |
|
|
dbbcf8bcd8 | |
|
|
dcf7b303fb | |
|
|
d22d934153 | |
|
|
b2bf81451f | |
|
|
2c07e5fdf1 | |
|
|
e492db93f6 | |
|
|
382bb0dabf | |
|
|
2ea26fcf5e | |
|
|
cc2a8f4cb7 | |
|
|
cd3002e17e | |
|
|
50ca3dc327 | |
|
|
f1494776e4 | |
|
|
6156b71436 | |
|
|
c48188f215 | |
|
|
6b8c1c118b | |
|
|
24643471a7 | |
|
|
e591bab6e6 | |
|
|
56c88cab57 | |
|
|
e20bf233aa | |
|
|
c8dfb45973 | |
|
|
873899d676 | |
|
|
cb652983b0 | |
|
|
d78fb8ed21 | |
|
|
aa4fc4f218 | |
|
|
1a82ef84ce | |
|
|
de69850731 | |
|
|
cd647f8666 | |
|
|
4a438fe907 | |
|
|
424ad6808e | |
|
|
4bda9ee2c1 | |
|
|
361859cd09 | |
|
|
ff9ef2285e | |
|
|
a76720d6a7 | |
|
|
37343b68d4 | |
|
|
fe221b1098 | |
|
|
8bd5e66f46 | |
|
|
4d8cd3e49e | |
|
|
5cf50dc362 | |
|
|
aa6643370a | |
|
|
1c06744220 | |
|
|
4c0f7a3867 | |
|
|
d8ee8a5fab | |
|
|
c147500fc6 | |
|
|
5c567c06f7 | |
|
|
8149621985 | |
|
|
d43693f3dd | |
|
|
4c21c1c072 | |
|
|
b24b25c094 | |
|
|
5177ff9d13 | |
|
|
c26944576f | |
|
|
8b516b44c9 | |
|
|
c28649d2c5 | |
|
|
92b2db3ce1 | |
|
|
53225568af | |
|
|
9d3283a292 | |
|
|
24656d52df | |
|
|
781103feda | |
|
|
d8e24b0f21 | |
|
|
bde97e4076 | |
|
|
b27f86384f | |
|
|
536ec594e5 | |
|
|
0d36359615 | |
|
|
d00174c680 | |
|
|
1b6ebc5baf | |
|
|
43e2197a2d | |
|
|
2de2054c1c | |
|
|
e76f9f3dd5 | |
|
|
f514155e83 | |
|
|
efa38fe4f4 | |
|
|
ad5804344c | |
|
|
ec62110c71 | |
|
|
abfa1f0b97 | |
|
|
add2537ecf | |
|
|
01c872f333 | |
|
|
4ee1775ccb | |
|
|
1e8bbd0c4b | |
|
|
90a20b2077 | |
|
|
a03a5a9b78 | |
|
|
2e902da2c8 | |
|
|
5dc6976d93 | |
|
|
84fb814a35 | |
|
|
8b9f12db85 | |
|
|
02b068c7dc | |
|
|
69d4a3f0ff | |
|
|
f88700e84c | |
|
|
a8142fc624 | |
|
|
d7b805a480 | |
|
|
d31122eb0d | |
|
|
b98cb2fc74 | |
|
|
9c0bdb68e7 | |
|
|
4ecffcedb0 | |
|
|
f600f84cbf | |
|
|
4b9ab4de5f | |
|
|
cfa3676e44 | |
|
|
d056f8c2ff | |
|
|
290252767f | |
|
|
7ca1219356 | |
|
|
1671b2fef1 | |
|
|
c7e2d5b03e | |
|
|
13c8e223b1 | |
|
|
5b7800fe2b | |
|
|
0ff916fbfc | |
|
|
1db08d9246 | |
|
|
426737aaa1 | |
|
|
5d88fa5ddf | |
|
|
2bea8728da | |
|
|
a75515c191 | |
|
|
e5ef11d6bb | |
|
|
7a7dcec05f | |
|
|
4671a99f68 | |
|
|
6369631ebe | |
|
|
86961f50a3 | |
|
|
121665d98c | |
|
|
521cc79dd0 | |
|
|
a7488f2a0b | |
|
|
978aeaf925 | |
|
|
4f504f8a2e | |
|
|
cf50e71d12 | |
|
|
44e0774f6c | |
|
|
8c62223f90 | |
|
|
174005d6bf | |
|
|
06b8497e9f | |
|
|
9e3f9f9e4a | |
|
|
b443562b7f | |
|
|
2ecea55887 | |
|
|
1bc589b8e5 | |
|
|
5f95ce2fea | |
|
|
1fd4285268 | |
|
|
c8acd0ad33 | |
|
|
ff42b7d352 | |
|
|
5fb4887191 | |
|
|
1cb87ee034 | |
|
|
95a1efe5f1 | |
|
|
6bc90ea76d | |
|
|
93d3d5d84f | |
|
|
eff5ddabd2 | |
|
|
0676d409a4 | |
|
|
38736b2a25 | |
|
|
1668a1ba2b | |
|
|
8bfe004d71 | |
|
|
cb92c04cef | |
|
|
25f6fddd2e | |
|
|
5c8e6db4e2 | |
|
|
910ade826f | |
|
|
bd7f646d6a | |
|
|
17f0e51a07 | |
|
|
56177f94f5 | |
|
|
b2fdf80be1 | |
|
|
93f2ef9d46 | |
|
|
e22be93ab3 | |
|
|
e06f54e61b | |
|
|
d9e2ec9ad9 | |
|
|
b2941dd4b6 | |
|
|
32c135ea5d | |
|
|
28324ddd40 | |
|
|
0c2fc7f5c5 | |
|
|
189b164be4 | |
|
|
9164d7c9c3 | |
|
|
ed6864004b | |
|
|
2326020f89 | |
|
|
02082d71fb | |
|
|
d9d63b86dd | |
|
|
d319f07192 | |
|
|
02d35e96c8 | |
|
|
ccc6802028 | |
|
|
5ff4eae241 | |
|
|
195b0ad2f7 | |
|
|
c1d19c5d07 | |
|
|
e86d57f4f6 | |
|
|
d54cf921c4 | |
|
|
d88b095b98 | |
|
|
d64a38fa0d | |
|
|
a47374aeaa | |
|
|
526bd40646 | |
|
|
6d8a0fb933 | |
|
|
f617cc22e8 | |
|
|
da398bb2bd | |
|
|
3f26352644 | |
|
|
85db25c305 | |
|
|
de815b0de8 | |
|
|
551dfa716f | |
|
|
b7bde85cd4 | |
|
|
b972f105f6 | |
|
|
c3aec9a912 | |
|
|
8f9d56fd0c | |
|
|
b7d92bc8b9 | |
|
|
5c4b85abf9 | |
|
|
ed01ef0e1c | |
|
|
a7854d8aec | |
|
|
950a88fce0 | |
|
|
1966c551e9 | |
|
|
bb87a24464 | |
|
|
f83c1f38f3 | |
|
|
e08a26481c | |
|
|
2ab73f7d6c | |
|
|
9daf872e57 | |
|
|
0991c0707e | |
|
|
b58da2de66 | |
|
|
329d927dac | |
|
|
b548cfa231 | |
|
|
34d2e868fc | |
|
|
701603faba | |
|
|
e8cf6df029 | |
|
|
f3a391e9c3 | |
|
|
450b4c921e | |
|
|
66d328ba2e | |
|
|
ff9052ca01 | |
|
|
dec5e41ab9 | |
|
|
514d16a313 | |
|
|
46da4fb095 | |
|
|
d6caaf43d6 | |
|
|
83ba419a06 | |
|
|
1ce265fe89 | |
|
|
3231cb7b06 | |
|
|
8fd0e83c6e | |
|
|
7978719237 | |
|
|
cedc2ca8e0 | |
|
|
102a5367d1 | |
|
|
e74023ce66 | |
|
|
8d4adefb0e | |
|
|
5c136aea57 | |
|
|
e1d830064c | |
|
|
2e7c309e79 | |
|
|
1383d84daf | |
|
|
2df6854dcf | |
|
|
c590975cdf | |
|
|
413fa5e8de | |
|
|
0bf5bb7762 | |
|
|
e0487ef70d | |
|
|
5f9f8d15bc | |
|
|
076f8dcb73 | |
|
|
aa23b5d444 | |
|
|
ed3c0ff23c | |
|
|
5fdad50316 | |
|
|
36b937e1c8 | |
|
|
2d8949661d | |
|
|
f37b3aea77 | |
|
|
ee012dcd36 | |
|
|
8566ac9631 | |
|
|
f14e3a55f5 | |
|
|
bd1d7c674f | |
|
|
ec4959c57e | |
|
|
198c6e18cc | |
|
|
05a7e82582 | |
|
|
7ee08a5c16 | |
|
|
9fd89c3073 | |
|
|
8c78f66cc5 | |
|
|
44ce6561ea | |
|
|
e41833dd26 | |
|
|
c087dfac50 | |
|
|
3e9c1b3d3d | |
|
|
db0af47418 | |
|
|
0b82f4f3df | |
|
|
dfcd025cab | |
|
|
c4e8729034 | |
|
|
89725e4676 | |
|
|
c74151e289 | |
|
|
c9e4ce31b2 | |
|
|
ffc1626261 | |
|
|
e4b80f60a4 | |
|
|
751e5b500f | |
|
|
a03d1d7a13 | |
|
|
adfd994f8e | |
|
|
09a33815a1 | |
|
|
6d7d7ce0d5 | |
|
|
475cb602ca | |
|
|
e91cc7cfd8 | |
|
|
7d3bdb7f53 | |
|
|
2634c0bb12 | |
|
|
7d881ad452 | |
|
|
fc279ff830 | |
|
|
acd4edb0b0 | |
|
|
7c3e5c735b | |
|
|
f677529e44 | |
|
|
b4821e5092 | |
|
|
57cbd94469 | |
|
|
13a7f49658 | |
|
|
04346551dc | |
|
|
2963723746 | |
|
|
9feeadb52f | |
|
|
88d43a8420 | |
|
|
f4ada2aa51 | |
|
|
0437d9d0cc | |
|
|
e07f1bc4c7 | |
|
|
4de0747168 | |
|
|
653c6497ae | |
|
|
a2710e044a | |
|
|
61e901ec10 | |
|
|
2955330e49 | |
|
|
d65fad3836 | |
|
|
164958df36 | |
|
|
510b34317d | |
|
|
3583aa29bc | |
|
|
6921c9516d | |
|
|
9e0c9ba942 | |
|
|
e5eafc25a0 | |
|
|
003542eef7 | |
|
|
fff5887126 | |
|
|
8cd740f054 | |
|
|
b8a7305bb1 | |
|
|
57bba753f6 | |
|
|
cdab26b0a5 | |
|
|
c27c0bd639 | |
|
|
a05ac59cc5 | |
|
|
18adec0295 | |
|
|
9c3158e258 | |
|
|
f0f7da8a16 | |
|
|
77e9ac6320 | |
|
|
5b8a8bc091 | |
|
|
c1adccb0aa | |
|
|
e66e99c048 | |
|
|
0932dfc6f8 | |
|
|
959f00cc46 | |
|
|
1814fdc286 | |
|
|
4e53ea0ab5 | |
|
|
b6f1c6728e | |
|
|
4ac860ad34 | |
|
|
65217e4529 | |
|
|
eedea7446d | |
|
|
cc35e79766 | |
|
|
3dd9b32f22 | |
|
|
aaeac485a4 | |
|
|
12c952a02a | |
|
|
96c098bd43 | |
|
|
0efa11390e | |
|
|
d46428592b | |
|
|
f9550ff6a3 | |
|
|
c2f2f9570a | |
|
|
81b56f76ce | |
|
|
cdbe0d77f1 | |
|
|
c156484de2 | |
|
|
4d2de70f45 | |
|
|
a41fda79da | |
|
|
13965dbf2a | |
|
|
82e547c256 | |
|
|
7ec019cd45 | |
|
|
3945e4e938 | |
|
|
67adc43433 | |
|
|
258413124e | |
|
|
0ed3e8325d | |
|
|
9f1eeb4a20 | |
|
|
6f41df9926 | |
|
|
dda2f34523 | |
|
|
936abbf453 | |
|
|
1c4a3c067a | |
|
|
85d0a980ec | |
|
|
bb5ca6a957 | |
|
|
d9b01a0a11 | |
|
|
7d26562277 | |
|
|
df7a5eefd4 | |
|
|
5f96ca2eac | |
|
|
9cc6ae25da | |
|
|
53de5363c3 | |
|
|
2dc6834e0b | |
|
|
efb8de3e69 | |
|
|
78080bc9fc | |
|
|
c82ec9e4b9 | |
|
|
fefc2c5ff4 | |
|
|
12fc36890a | |
|
|
4e05f3626f | |
|
|
d2a43e4f0e | |
|
|
39d582a88c | |
|
|
0d24afb9b8 | |
|
|
dbbd448168 | |
|
|
f5d8b44b8f | |
|
|
893e6612c0 | |
|
|
9f583dd486 | |
|
|
0def08bfd4 | |
|
|
83e331c500 | |
|
|
d04327c5e7 | |
|
|
df57b9f5fc | |
|
|
0473b89e7f | |
|
|
ce125de895 | |
|
|
740c2416d7 | |
|
|
e6f897dbf3 | |
|
|
315f8debee | |
|
|
19038d55a4 | |
|
|
0532bef3b3 | |
|
|
e582ca1f87 | |
|
|
fba5faa5ee | |
|
|
b4c30b7122 | |
|
|
cf90a60117 | |
|
|
42e6719241 | |
|
|
247561db66 | |
|
|
cc048431f6 | |
|
|
9661c34b4f | |
|
|
b92327e40c | |
|
|
67aaf98f87 | |
|
|
e58642e566 | |
|
|
27a583b521 | |
|
|
6422ecc4f2 | |
|
|
2a80bf833e | |
|
|
a614100b0c | |
|
|
6aa3289826 | |
|
|
ce6a8d2516 | |
|
|
677edba22e | |
|
|
bc11c84206 | |
|
|
ef64163e57 | |
|
|
b603cad5ae | |
|
|
542325c75c | |
|
|
9bb2c084c4 | |
|
|
293b11d779 | |
|
|
52c3450e32 | |
|
|
bc9b97aeba | |
|
|
410fcf438f | |
|
|
ae52ab9761 | |
|
|
4b3e520ec3 | |
|
|
788d4f32d9 | |
|
|
b2c70a479d | |
|
|
48f0cb7b1a | |
|
|
064be092e8 | |
|
|
e57d0e2575 | |
|
|
17fea79cc2 | |
|
|
1c5f90285b | |
|
|
2f58a44e31 | |
|
|
9e4fc869ad | |
|
|
cb4cfb59cb | |
|
|
911df3d1ca | |
|
|
c82364f886 | |
|
|
27d195ef39 | |
|
|
39b09a9202 | |
|
|
7bbfd61f63 | |
|
|
3adc437dbe | |
|
|
b437554fa7 | |
|
|
07d2438d5a | |
|
|
87d4d84107 | |
|
|
029b6d80de | |
|
|
df9eb0c4bf | |
|
|
071b14f02d | |
|
|
066bb0f67e | |
|
|
f0f01b7d6d | |
|
|
f9525efaf5 | |
|
|
05490de16b | |
|
|
d04c19ea4b | |
|
|
80405ddfbe | |
|
|
f63018b05a | |
|
|
46a1e4daf8 | |
|
|
a645f407bc | |
|
|
8a20397b6e | |
|
|
776906ebce | |
|
|
a81d9d7ee9 | |
|
|
3fa4ef6d44 | |
|
|
3477649d7f | |
|
|
abe92bfe8f | |
|
|
70410bfff3 | |
|
|
4bb4f89781 | |
|
|
a4fb5098ef | |
|
|
c0831a8f04 | |
|
|
8d012e9029 | |
|
|
0355fdf863 | |
|
|
9e561e645f | |
|
|
9e978a2f31 | |
|
|
edab3d2ec0 | |
|
|
1cc9746511 | |
|
|
dd45c90b4c | |
|
|
60e5b4efa0 | |
|
|
b168adc7fe | |
|
|
816c1dac8e | |
|
|
d443d3d35c | |
|
|
532b9924d4 | |
|
|
d60550683c | |
|
|
9bbee1cb8f | |
|
|
09bfca5217 | |
|
|
656497b0ea | |
|
|
6aedeffa30 | |
|
|
4042e3e742 | |
|
|
2d8067ea2d | |
|
|
b827246fcc | |
|
|
5a094d1a70 | |
|
|
76c175e61d | |
|
|
32d29727b4 | |
|
|
67c7a486cd | |
|
|
4c60ceda46 | |
|
|
57c05867d6 | |
|
|
4f6d3850f0 | |
|
|
9ee529c8c3 | |
|
|
6e232e6178 | |
|
|
c13d4f4429 | |
|
|
4741c548d6 | |
|
|
0d97d58edc | |
|
|
d932c8cbb5 | |
|
|
cc933ced82 | |
|
|
13f73de403 | |
|
|
031da68c8e | |
|
|
2b34308d8d | |
|
|
08e2238a49 | |
|
|
b07f6575ba | |
|
|
0c2b52efe7 | |
|
|
81e544c425 | |
|
|
9b1d9ced16 | |
|
|
100eae256f | |
|
|
000a74932b | |
|
|
899b66ae13 | |
|
|
388b9daac4 | |
|
|
9a1072d45a | |
|
|
e01ab2878d | |
|
|
fd612bd95a | |
|
|
dd6fe33121 | |
|
|
2c2f5d14fb | |
|
|
52f3acc285 | |
|
|
4e9c0cd4d4 | |
|
|
5f09f90a57 | |
|
|
163c6d6493 | |
|
|
33e2a270e3 | |
|
|
4ed73bb708 | |
|
|
fbdac77bb2 | |
|
|
e555fdc21f | |
|
|
2f2d6aadbb | |
|
|
734330823d | |
|
|
e538100409 | |
|
|
797f75140f | |
|
|
08e93f7562 | |
|
|
467d8acee5 | |
|
|
4808701c6e | |
|
|
d2b262fc39 | |
|
|
7ece36c006 | |
|
|
e6d1f593d2 | |
|
|
466bc0134b | |
|
|
aa2c0f4b9f | |
|
|
f9c898f859 | |
|
|
63aa34d2c2 | |
|
|
14d076c21d | |
|
|
64148764f5 | |
|
|
0dfef89ad3 | |
|
|
9af521b7cd | |
|
|
2a7fb28aac | |
|
|
0a4f26c296 | |
|
|
40fbd0cf05 | |
|
|
5a4827f034 | |
|
|
11b96ef7e5 | |
|
|
1e132a1b25 | |
|
|
18c15cc700 | |
|
|
b836fc6cb4 | |
|
|
1fce20a30a | |
|
|
f9c65faa0f | |
|
|
55316623a7 | |
|
|
577ba9bf82 | |
|
|
93bdd192ba | |
|
|
b1c9e4bd5e | |
|
|
1db63e3e19 | |
|
|
a1419159cc | |
|
|
510a3f4044 | |
|
|
1d43e48a37 | |
|
|
91e5c461d4 | |
|
|
922f860a7d | |
|
|
3ea04335b9 | |
|
|
8aa4ee0096 | |
|
|
e7c8348131 | |
|
|
368503eae4 | |
|
|
1d2ce040df | |
|
|
218fa25f89 | |
|
|
24f0e980b1 | |
|
|
564c21cd43 | |
|
|
f51147a4b1 | |
|
|
64ed88587c | |
|
|
982efe4078 | |
|
|
93f941e217 | |
|
|
38dfc3ae32 | |
|
|
8217c46634 | |
|
|
fc82185bc6 | |
|
|
4e418f1860 | |
|
|
ee12cd8ede | |
|
|
494101f4cc | |
|
|
55c1cde463 | |
|
|
a4b0216eb5 | |
|
|
0d8c1054eb | |
|
|
0517f72867 | |
|
|
3be053e52e | |
|
|
8ec22586fb | |
|
|
a9535fbd3f | |
|
|
f887954b5f | |
|
|
c3d09565a9 | |
|
|
37464daf0a | |
|
|
46278881fa | |
|
|
4314f1924e | |
|
|
f32fcb1c00 | |
|
|
7949544525 | |
|
|
2ab1423b71 | |
|
|
6d1ec70de1 | |
|
|
8b53b9eb9d | |
|
|
8a84095ee8 | |
|
|
0f73dd197e | |
|
|
53758d3633 | |
|
|
4a7b674b50 | |
|
|
07bf145ad7 | |
|
|
13c79e1e50 | |
|
|
226ab77824 | |
|
|
c3596effcb | |
|
|
aade5b41c7 | |
|
|
3a643efc24 | |
|
|
4bf1fc4ac1 | |
|
|
ffee69ffa1 | |
|
|
b5acd75c3e | |
|
|
c3a1ff7951 | |
|
|
0c54b9d696 | |
|
|
1b00b9d7bf | |
|
|
79b1a6720e | |
|
|
bfada15b23 | |
|
|
6eeb34b1a2 | |
|
|
3124538b94 | |
|
|
ebb45d00a2 | |
|
|
0cba7acede | |
|
|
fd885f8725 | |
|
|
9b03a0c87a | |
|
|
1934703aca | |
|
|
cb45d2bcfb | |
|
|
b9eb5bb899 | |
|
|
33462f8886 | |
|
|
14fee0c2ee | |
|
|
b996767ff6 | |
|
|
834699a4f8 | |
|
|
7cb456f89e | |
|
|
29ea9139d1 | |
|
|
8406571804 | |
|
|
0a218d66c1 | |
|
|
ed67758d79 | |
|
|
5cd4123bff | |
|
|
2d58ce3893 | |
|
|
e070201c94 | |
|
|
48211f9b47 | |
|
|
3b2ffa010c | |
|
|
522fc17f68 | |
|
|
736d28946d | |
|
|
89c31c70af | |
|
|
9ca9977999 | |
|
|
dd3a39568a | |
|
|
d3783eec8b | |
|
|
347658254b | |
|
|
1a1473ad4d | |
|
|
5df976cc5e | |
|
|
d43dbefab4 | |
|
|
c47f48d187 | |
|
|
1eb54f1273 | |
|
|
c8e8f53b7c | |
|
|
e9d897499d | |
|
|
ddec30a59d | |
|
|
2f8da40409 | |
|
|
8bf0e1aa87 | |
|
|
2aa9e65262 | |
|
|
8967f17973 | |
|
|
3251d08ff8 | |
|
|
205b7c97ec | |
|
|
e76fb5e95f | |
|
|
ca02f5e4a4 | |
|
|
cc7ce465c4 | |
|
|
df4bd6ed8c | |
|
|
2f989fca4f | |
|
|
b27e078d95 | |
|
|
d10df783e8 | |
|
|
0ef0e2bd9f | |
|
|
259147d6ef | |
|
|
b5f0076d46 | |
|
|
4b8599b235 | |
|
|
70230bc7d4 | |
|
|
9b7dd188c5 | |
|
|
0f5b32c0b9 | |
|
|
acaee522a2 | |
|
|
3048385129 | |
|
|
cef1bf82e6 | |
|
|
15896f7b38 | |
|
|
5a9d220823 | |
|
|
3c7ef24b86 | |
|
|
333e7dcc05 | |
|
|
182d3d0644 | |
|
|
77f254faa4 | |
|
|
f99789094e | |
|
|
d7e401e44c | |
|
|
bfc5fd4be8 | |
|
|
2caa47452e | |
|
|
b6985480e1 | |
|
|
8807e2d4b8 | |
|
|
bb55a87bdb | |
|
|
eb164f588a | |
|
|
9b41a3312c | |
|
|
5c973cda53 | |
|
|
1855213e6d | |
|
|
bd56c36067 | |
|
|
85c8d22568 | |
|
|
e9e77ad03b | |
|
|
c4858bb8d0 | |
|
|
9809e34e78 | |
|
|
28aba23a1a | |
|
|
3ad0966590 | |
|
|
f34c725d8c | |
|
|
678da53658 | |
|
|
e9ddb97f56 | |
|
|
7204116ad1 | |
|
|
265280f8ed | |
|
|
2c56162e36 | |
|
|
4a3bae7dce | |
|
|
a6e226ce94 | |
|
|
1a5c62e155 | |
|
|
946fb1f773 | |
|
|
9f951893a1 | |
|
|
1a7ed4e60f | |
|
|
ea2e57907f | |
|
|
b379cdfee4 | |
|
|
3a3986ad65 | |
|
|
0498a2a748 | |
|
|
cca8ff64a3 | |
|
|
d453eb3d97 | |
|
|
33217d464d | |
|
|
5f7526e732 | |
|
|
896b6bf8f0 | |
|
|
e87b3fe1dc | |
|
|
fd6301a840 | |
|
|
20277e4dec | |
|
|
56e140428f | |
|
|
e2798dcebe | |
|
|
654ce2079b | |
|
|
ed92eab3e5 | |
|
|
230611f736 | |
|
|
54e1e47ada | |
|
|
2851e02dcf | |
|
|
4323e6d0f5 | |
|
|
dbf908bc64 | |
|
|
deafec54b3 | |
|
|
37e22a6ab2 | |
|
|
52f11d2679 | |
|
|
f6f47cc339 | |
|
|
7215a1ca69 | |
|
|
f8b63093f2 | |
|
|
42c3b6acfc | |
|
|
6cd0dae2a8 | |
|
|
be925a7780 | |
|
|
d53ef33e0e | |
|
|
0e94decae4 | |
|
|
5dd83e7768 | |
|
|
70502a56e5 | |
|
|
10b9384fb3 | |
|
|
68d8b748d2 | |
|
|
7c92e21ce6 | |
|
|
09d000fec2 | |
|
|
c64f01b244 | |
|
|
7c9d57dae2 | |
|
|
794cb857c4 | |
|
|
fa83c1033c | |
|
|
c0628d4a68 | |
|
|
aefa0e93e0 | |
|
|
26cd3ebe24 | |
|
|
4760d529d1 | |
|
|
ac7602386e | |
|
|
3cf0cfd3e6 | |
|
|
efe31b9971 | |
|
|
02e559e520 | |
|
|
b03fb01068 | |
|
|
6cd5801d78 | |
|
|
054cceed87 | |
|
|
cc18e0a449 | |
|
|
9411b5d63f | |
|
|
f771a917d8 | |
|
|
80eca0233b | |
|
|
da8ab3d979 | |
|
|
03ccdbbc5c | |
|
|
3e08cfc533 | |
|
|
d05d4829fa | |
|
|
a8a40c18e4 | |
|
|
159f0d5f56 | |
|
|
1aa975bd6f | |
|
|
9fef44c07d | |
|
|
a53325234b | |
|
|
cfd95851d6 | |
|
|
f076195472 | |
|
|
5347d136ef | |
|
|
44348c432c | |
|
|
58fefbe466 | |
|
|
67d7f76376 | |
|
|
5a4e4756f0 | |
|
|
00b0af1a5e | |
|
|
048ebd9aef | |
|
|
6a70c40b26 | |
|
|
508020ac78 | |
|
|
362fce5b0c | |
|
|
51505f7ef3 | |
|
|
8b4828fafa | |
|
|
7847c5830f | |
|
|
574790d360 | |
|
|
421bfcabcd | |
|
|
d96aba237b | |
|
|
c07d34a5fc | |
|
|
1cd954e31c | |
|
|
e0f7e85502 | |
|
|
03dde88c1a | |
|
|
bf52adf76c | |
|
|
3783380e1a | |
|
|
c666ee3ab9 | |
|
|
e618c21b26 | |
|
|
3bbaf16b4d | |
|
|
316ede2c09 | |
|
|
b1f2c5ccaa | |
|
|
538e7208af | |
|
|
66dfef319d | |
|
|
008262acac | |
|
|
90e7cb1184 | |
|
|
9eb115c991 | |
|
|
8077a9f5cf | |
|
|
1f4850158d | |
|
|
a491276cba | |
|
|
ed547fdb1e | |
|
|
57a96e71bc | |
|
|
3f1969ed24 | |
|
|
02dda83fde | |
|
|
d6d5ebe01d | |
|
|
0dc30ca77f | |
|
|
99895e990a | |
|
|
f4fa88beaf | |
|
|
35583b4187 | |
|
|
46621a2438 | |
|
|
ccf201b691 | |
|
|
b02bce3357 | |
|
|
30406de3eb | |
|
|
85bb75e1a6 | |
|
|
837b9e427a | |
|
|
2b93ccb12b | |
|
|
383c3a6cb7 | |
|
|
e52b670b6e | |
|
|
59d7d8f5a7 | |
|
|
474c9232fa | |
|
|
8deb8044e9 | |
|
|
6755047052 | |
|
|
af18fae4f7 | |
|
|
93e1491564 | |
|
|
2d8fe376f2 | |
|
|
6761389db3 | |
|
|
651812639f | |
|
|
04e5993bad | |
|
|
57713d5c5d | |
|
|
2582f0a182 | |
|
|
ef40f872e0 | |
|
|
fb8691a144 | |
|
|
2e04505df0 | |
|
|
9bbea3a4b7 | |
|
|
5d397f611c | |
|
|
ca41fe5a82 | |
|
|
e1ee492cc8 | |
|
|
54ca9d47c3 | |
|
|
04ce3daeac | |
|
|
680d739e6b | |
|
|
69090c8bae | |
|
|
75f00743ff | |
|
|
0e916bfeed | |
|
|
813fb533f9 | |
|
|
8bc07b308a | |
|
|
6aec5e83f2 | |
|
|
70258163f1 | |
|
|
1a2f6f838d | |
|
|
2bd5ed28d6 | |
|
|
273d2901a5 | |
|
|
a2549da76a | |
|
|
8e846102cd | |
|
|
c6ac286662 | |
|
|
6743b3574f | |
|
|
1118871aae | |
|
|
02c088d66a | |
|
|
c1219ffef4 | |
|
|
18ab062c68 | |
|
|
47867b7778 | |
|
|
28f9697713 | |
|
|
923d18d51c | |
|
|
d8a491ea7a | |
|
|
b714af1fe0 | |
|
|
25a783dd27 | |
|
|
262c6c0610 | |
|
|
186cb2d5c4 | |
|
|
5f096be3e5 | |
|
|
97a71537ed | |
|
|
b5bba6f276 | |
|
|
b3796ca605 | |
|
|
d16ecb6b02 | |
|
|
72694b5bdf | |
|
|
ceaf0658fc | |
|
|
58da6a1e87 | |
|
|
729457086b | |
|
|
3112d607dc | |
|
|
2532940c49 | |
|
|
1bec4922f9 | |
|
|
183acf7b0f | |
|
|
d3a0ba8808 | |
|
|
ba6d8fd738 | |
|
|
c32ce5761f | |
|
|
94ab244eeb | |
|
|
6593ad50ab | |
|
|
37abd39163 | |
|
|
0fae97ff00 | |
|
|
6c8b909f27 | |
|
|
f9fde77e12 | |
|
|
a0536fc460 | |
|
|
46ccf99c67 | |
|
|
511c66e405 | |
|
|
d8df48789c | |
|
|
5d8f9bf6da | |
|
|
ff6f40d953 | |
|
|
d1addd3ee0 | |
|
|
ca07e4ef33 | |
|
|
a7893ca0ec | |
|
|
a8ba05adea | |
|
|
37b6ee4c4b | |
|
|
4578eb213c | |
|
|
72eb5ed03e | |
|
|
e7650e1646 | |
|
|
7e35327d7e | |
|
|
e9bab9b678 | |
|
|
1b0ad6c30f | |
|
|
f81f96d6f4 | |
|
|
2e271d0c44 | |
|
|
03ba5564d0 | |
|
|
89dee71738 | |
|
|
57dcd9e0ff | |
|
|
f05c275b25 | |
|
|
aa1d9fca88 | |
|
|
209d9e1cab | |
|
|
c21af3c4d5 | |
|
|
9b5a3cff70 | |
|
|
be0491534a | |
|
|
9f3abe05bc | |
|
|
cc522d8109 | |
|
|
7ac38830d3 | |
|
|
3c9774fe4f | |
|
|
20a40fea27 | |
|
|
be022680a1 | |
|
|
4a9551e661 | |
|
|
e6a49460eb | |
|
|
f8e4835abf | |
|
|
d938083ba9 | |
|
|
0950c4d422 | |
|
|
f6e76f0d20 | |
|
|
5a0505c0f9 | |
|
|
6f3d40da20 | |
|
|
239b800788 | |
|
|
46a7cc9e25 | |
|
|
996bff6430 | |
|
|
3f6d9d4d20 | |
|
|
54f14fc650 | |
|
|
24a54e1b1b | |
|
|
5a6f356a27 | |
|
|
7366c9a749 | |
|
|
1787c92ca5 | |
|
|
a05aea21ca | |
|
|
9f76f39cc7 | |
|
|
96551c620e | |
|
|
6c5f7b2a5d | |
|
|
e0658edfd5 | |
|
|
bec38c5cf1 | |
|
|
e009bc94a7 | |
|
|
480111d6c1 | |
|
|
21b934a4c6 | |
|
|
3b0f02bb0f | |
|
|
3e34665941 | |
|
|
e287e8db26 | |
|
|
9f94ec814b | |
|
|
64e27dd570 | |
|
|
bf8e52de45 | |
|
|
c5f4a49289 | |
|
|
4bc9842e4e | |
|
|
e525c6ae0e | |
|
|
36fff5a416 | |
|
|
bc6d1d40e6 | |
|
|
2cdf7d2969 | |
|
|
720f7af4fa | |
|
|
922110ec43 | |
|
|
dc4bb0caf3 | |
|
|
c43495b293 | |
|
|
345904244f | |
|
|
dcbd7d8b94 | |
|
|
0fae073703 | |
|
|
4bf0cda6e2 | |
|
|
224df71aac | |
|
|
85bca0cb23 | |
|
|
543a991559 | |
|
|
431c3e427e | |
|
|
fa456f991d | |
|
|
59b70501fa | |
|
|
f645f82297 | |
|
|
dfaa93672c | |
|
|
3bbe889177 | |
|
|
48bf0e3edd | |
|
|
0f87c2f23f | |
|
|
6a09a9c662 | |
|
|
626b35a993 | |
|
|
882b437912 | |
|
|
30e27d54f1 | |
|
|
c9778de792 | |
|
|
ebdc42ad6b | |
|
|
357a1af3b5 | |
|
|
bd94a9a893 | |
|
|
f1e1a87d3d | |
|
|
23cf906203 | |
|
|
3d6a26bc04 | |
|
|
d90fb2f092 | |
|
|
cf4104bd96 | |
|
|
202947e4a7 | |
|
|
dfb5679287 | |
|
|
c6c0f525c6 | |
|
|
671f1a36cc | |
|
|
f75050b0c7 | |
|
|
7226d49c55 | |
|
|
25bd61db18 | |
|
|
b2d00b0c2d | |
|
|
f6ce731246 | |
|
|
e8f2001054 | |
|
|
f7dbfbadcc | |
|
|
2a39809116 | |
|
|
c3593afd54 | |
|
|
ec74342e45 | |
|
|
9ed7eec4fb | |
|
|
6e868ed312 | |
|
|
872ba78513 | |
|
|
3a2613fa56 | |
|
|
e4b259aaad | |
|
|
5b942bf763 | |
|
|
db97e790c3 | |
|
|
965f278d3a | |
|
|
967aded9aa | |
|
|
f18c28ec93 | |
|
|
033560a773 | |
|
|
8ac52ed497 | |
|
|
57504bf22e | |
|
|
c5298b508c | |
|
|
f2978e2368 | |
|
|
7d793da679 | |
|
|
17740f8664 | |
|
|
d819dc9d73 | |
|
|
f03b538abb | |
|
|
d3d31a874c | |
|
|
57a8699152 | |
|
|
c3b10668ff | |
|
|
9d7acd034d | |
|
|
1ae86627b8 | |
|
|
e2ed4884ba | |
|
|
548924c854 | |
|
|
e45fad71cd | |
|
|
af8106c97a | |
|
|
bc91ddaae4 | |
|
|
fa1350b1f7 | |
|
|
bf6a3d83cd | |
|
|
ec2d69a6d9 | |
|
|
2ee4a911d0 | |
|
|
1fa0e789c0 | |
|
|
726a75c0a0 | |
|
|
18ead3861d | |
|
|
3671c1578c | |
|
|
526955a025 | |
|
|
92c1e8e3cd | |
|
|
4e12d1ba45 | |
|
|
a2dfd26bbd | |
|
|
cb3d8db550 | |
|
|
5b27d4fc37 | |
|
|
271b5faa4a | |
|
|
63280b8519 | |
|
|
e5a414736f | |
|
|
f68ce27372 | |
|
|
d62b387363 |
|
|
@ -0,0 +1,30 @@
|
||||||
|
name: Notify failure
|
||||||
|
description: Sends a notification that compiling a build has failed
|
||||||
|
inputs:
|
||||||
|
BOT_USERNAME:
|
||||||
|
description: 'Username to use for the discord bot message'
|
||||||
|
default: 'CC BuildBot'
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
BOT_AVATAR:
|
||||||
|
description: 'URL to use for the avatar of the discord bot message'
|
||||||
|
default: 'https://static.classicube.net/img/cc-cube-small.png'
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
NOTIFY_MESSAGE:
|
||||||
|
description: 'Notification message to send'
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
WEBHOOK_URL:
|
||||||
|
description: 'Discord webhook URL'
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
|
||||||
|
runs:
|
||||||
|
using: "composite"
|
||||||
|
steps:
|
||||||
|
- name: Notify failure
|
||||||
|
shell: sh
|
||||||
|
if: ${{ inputs.WEBHOOK_URL != '' }}
|
||||||
|
run: |
|
||||||
|
curl ${{ inputs.WEBHOOK_URL }} -H "Accept: application/json" -H "Content-Type:application/json" -X POST --data "{\"username\": \"${{ inputs.BOT_USERNAME }}\", \"avatar_url\": \"${{ inputs.BOT_AVATAR }}\", \"content\": \"${{ inputs.NOTIFY_MESSAGE }}\" }"
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
name: Notify success
|
||||||
|
description: Sends a notification that a workflow has finished
|
||||||
|
inputs:
|
||||||
|
DESTINATION_URL:
|
||||||
|
description: 'Webhook notification URL'
|
||||||
|
type: string
|
||||||
|
WORKFLOW_NAME:
|
||||||
|
description: 'Workflow name'
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
|
||||||
|
runs:
|
||||||
|
using: "composite"
|
||||||
|
steps:
|
||||||
|
- name: Notify failure
|
||||||
|
if: ${{ inputs.DESTINATION_URL != '' }}
|
||||||
|
shell: sh
|
||||||
|
run: |
|
||||||
|
curl ${{ inputs.DESTINATION_URL }}/${{ inputs.WORKFLOW_NAME }}/${{ github.sha }}
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
name: Upload binary
|
||||||
|
description: Uploads a compiled binary
|
||||||
|
inputs:
|
||||||
|
SOURCE_FILE:
|
||||||
|
description: 'Path to file to upload'
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
DEST_NAME:
|
||||||
|
description: 'Name to use for the uploaded artifact'
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
|
||||||
|
runs:
|
||||||
|
using: "composite"
|
||||||
|
steps:
|
||||||
|
- uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: ${{ inputs.DEST_NAME }}
|
||||||
|
path: ${{ inputs.SOURCE_FILE }}
|
||||||
|
if-no-files-found: error
|
||||||
|
|
@ -1,137 +0,0 @@
|
||||||
name: Build
|
|
||||||
|
|
||||||
on: [push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build_on_ubuntu:
|
|
||||||
name: Build ${{ matrix.config.plat }} (${{ matrix.config.bits }} bit) on Ubuntu
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
config:
|
|
||||||
- { plat: "Linux", bits: 64 }
|
|
||||||
- { plat: "Linux", bits: 32 }
|
|
||||||
- { plat: "Windows", bits: 64 }
|
|
||||||
- { plat: "Windows", bits: 32 }
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
|
|
||||||
- name: Install Shared Dependencies
|
|
||||||
run: |
|
|
||||||
sudo apt-get -y update &&
|
|
||||||
sudo apt-get -y install build-essential
|
|
||||||
|
|
||||||
# Install platform specific dependencies
|
|
||||||
- name: Install Dependencies for ${{ matrix.config.plat }} (${{ matrix.config.bits }} bit)
|
|
||||||
if: matrix.config.plat == 'Linux' && matrix.config.bits == 64
|
|
||||||
run: |
|
|
||||||
sudo apt-get -y install libx11-dev libxi-dev libgl1-mesa-dev
|
|
||||||
|
|
||||||
- name: Install Dependencies for ${{ matrix.config.plat }} (${{ matrix.config.bits }} bit)
|
|
||||||
if: matrix.config.plat == 'Linux' && matrix.config.bits == 32
|
|
||||||
run: |
|
|
||||||
sudo dpkg --add-architecture i386 \
|
|
||||||
&& sudo apt-get -y update \
|
|
||||||
&& sudo apt-get -y install gcc-multilib libx11-dev:i386 libxi-dev:i386 libgl1-mesa-dev:i386
|
|
||||||
|
|
||||||
- name: Install Dependencies for ${{ matrix.config.plat }} (${{ matrix.config.bits }} bit)
|
|
||||||
if: matrix.config.plat == 'Windows' && matrix.config.bits == 64
|
|
||||||
run: |
|
|
||||||
sudo apt-get -y install gcc-mingw-w64-x86-64
|
|
||||||
|
|
||||||
- name: Install Dependencies for ${{ matrix.config.plat }} (${{ matrix.config.bits }} bit)
|
|
||||||
if: matrix.config.plat == 'Windows' && matrix.config.bits == 32
|
|
||||||
run: |
|
|
||||||
sudo apt-get -y install gcc-mingw-w64-i686
|
|
||||||
|
|
||||||
# Build
|
|
||||||
- name: Build for ${{ matrix.config.plat }} (${{ matrix.config.bits }} bit)
|
|
||||||
if: matrix.config.plat == 'Linux' && matrix.config.bits == 64
|
|
||||||
run: |
|
|
||||||
cd src
|
|
||||||
make linux
|
|
||||||
|
|
||||||
- name: Build for ${{ matrix.config.plat }} (${{ matrix.config.bits }} bit)
|
|
||||||
if: matrix.config.plat == 'Linux' && matrix.config.bits == 32
|
|
||||||
run: |
|
|
||||||
cd src
|
|
||||||
# Note, this overwrites the previous flags
|
|
||||||
make linux CFLAGS="-m32" LDFLAGS="-m32"
|
|
||||||
|
|
||||||
- name: Build for ${{ matrix.config.plat }} (${{ matrix.config.bits }} bit)
|
|
||||||
if: matrix.config.plat == 'Windows' && matrix.config.bits == 64
|
|
||||||
run: |
|
|
||||||
cd src
|
|
||||||
make mingw CC="x86_64-w64-mingw32-gcc"
|
|
||||||
|
|
||||||
- name: Build for ${{ matrix.config.plat }} (${{ matrix.config.bits }} bit)
|
|
||||||
if: matrix.config.plat == 'Windows' && matrix.config.bits == 32
|
|
||||||
run: |
|
|
||||||
cd src
|
|
||||||
make mingw CC="i686-w64-mingw32-gcc"
|
|
||||||
|
|
||||||
build_on_windows:
|
|
||||||
name: Build ${{ matrix.config.plat }} (${{ matrix.config.bits }} bit) on Windows
|
|
||||||
runs-on: windows-latest
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
config:
|
|
||||||
- { plat: "Windows", bits: 64 }
|
|
||||||
- { plat: "Windows", bits: 32 }
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
|
|
||||||
- name: Setup MSBuild
|
|
||||||
uses: microsoft/setup-msbuild@v1.1
|
|
||||||
|
|
||||||
# Build
|
|
||||||
- name: Build for ${{ matrix.config.plat }} (${{ matrix.config.bits }} bit)
|
|
||||||
if: matrix.config.plat == 'Windows' && matrix.config.bits == 64
|
|
||||||
run: |
|
|
||||||
msbuild src\ClassiCube.vcxproj `
|
|
||||||
-property:Configuration=Debug -property:Platform=x64 `
|
|
||||||
-property:WindowsTargetPlatformVersion=10 -property:PlatformToolset=v142
|
|
||||||
|
|
||||||
- name: Build for ${{ matrix.config.plat }} (${{ matrix.config.bits }} bit)
|
|
||||||
if: matrix.config.plat == 'Windows' && matrix.config.bits == 32
|
|
||||||
run: |
|
|
||||||
msbuild src\ClassiCube.vcxproj `
|
|
||||||
-property:Configuration=Debug -property:Platform=Win32 `
|
|
||||||
-property:WindowsTargetPlatformVersion=10 -property:PlatformToolset=v142
|
|
||||||
|
|
||||||
build_on_mac:
|
|
||||||
name: Build ${{ matrix.config.plat }} (${{ matrix.config.bits }} bit) on Mac
|
|
||||||
runs-on: macOS-latest
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
config:
|
|
||||||
- { plat: "Mac", bits: 64 }
|
|
||||||
# "ld: warning: ignoring file ..., missing required architecture i386 in file ..."
|
|
||||||
# "Undefined symbols for architecture i386"
|
|
||||||
# - { plat: "Mac", bits: 32 }
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
|
|
||||||
# Build
|
|
||||||
- name: Build for ${{ matrix.config.plat }} (${{ matrix.config.bits }} bit)
|
|
||||||
if: matrix.config.plat == 'Mac' && matrix.config.bits == 64
|
|
||||||
run: |
|
|
||||||
cd src
|
|
||||||
# fix for "error: implicit declaration of function 'CGDisplayBitsPerPixel'"
|
|
||||||
sed -i '' 's|#include <Cocoa/Cocoa.h>|&\'$'\nextern size_t CGDisplayBitsPerPixel(CGDirectDisplayID display);|' interop_cocoa.m
|
|
||||||
make mac_x64
|
|
||||||
|
|
||||||
- name: Build for ${{ matrix.config.plat }} (${{ matrix.config.bits }} bit)
|
|
||||||
if: matrix.config.plat == 'Mac' && matrix.config.bits == 32
|
|
||||||
run: |
|
|
||||||
cd src
|
|
||||||
make mac_x32
|
|
||||||
|
|
@ -0,0 +1,58 @@
|
||||||
|
name: Build latest (3DS)
|
||||||
|
# trigger via either push to selected branches or on manual run
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}-3ds
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-3DS:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: devkitpro/devkitarm:latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Compile 3DS build
|
||||||
|
id: compile
|
||||||
|
run: |
|
||||||
|
make 3ds
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-3ds.cia'
|
||||||
|
DEST_NAME: 'ClassiCube-3ds.cia'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-3ds.3dsx'
|
||||||
|
DEST_NAME: 'ClassiCube-3ds.3dsx'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-3ds.elf'
|
||||||
|
DEST_NAME: 'ClassiCube-3ds.elf'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_success
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
DESTINATION_URL: '${{ secrets.NOTIFY_URL }}'
|
||||||
|
WORKFLOW_NAME: '3ds'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce 3DS build'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
@ -0,0 +1,122 @@
|
||||||
|
name: Build latest (Android2)
|
||||||
|
# trigger via either push to selected branches or on manual run
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}-android
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: ghcr.io/saschpe/android-ndk:34-jdk17.0.8_7-ndk25.2.9519653-cmake3.22.1
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Retrieve dependencies
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
mkdir build-tools
|
||||||
|
wget https://github.com/ClassiCube/rpi-compiling-stuff/raw/main/build-tools.zip
|
||||||
|
unzip build-tools.zip -d build-tools
|
||||||
|
chmod +x build-tools/aapt
|
||||||
|
chmod +x build-tools/dx
|
||||||
|
chmod +x build-tools/zipalign
|
||||||
|
|
||||||
|
- name: Compile android builds
|
||||||
|
shell: bash
|
||||||
|
id: compile
|
||||||
|
env:
|
||||||
|
COMMON_FLAGS: "-O1 -s -fno-stack-protector -fno-math-errno -Qn -Werror"
|
||||||
|
DROID_FLAGS: "-fPIC -shared -fvisibility=hidden -rdynamic -funwind-tables"
|
||||||
|
LIBS: "-lGLESv2 -lEGL -lm -llog"
|
||||||
|
SRCS: "src/*.c src/android/*.c third_party/bearssl/*.c"
|
||||||
|
run: |
|
||||||
|
LATEST_FLAG=-DCC_COMMIT_SHA=\"${GITHUB_SHA::9}\"
|
||||||
|
|
||||||
|
DROID_FLAGS="-fPIC -shared -s -O1 -fvisibility=hidden -rdynamic -funwind-tables"
|
||||||
|
|
||||||
|
ROOT_DIR=$PWD
|
||||||
|
NDK_ROOT="/opt/android-sdk-linux/ndk/25.2.9519653/toolchains/llvm/prebuilt/linux-x86_64/bin"
|
||||||
|
TOOLS_ROOT=$ROOT_DIR/build-tools
|
||||||
|
SDK_ROOT="/opt/android-sdk-linux/platforms/android-34"
|
||||||
|
|
||||||
|
$NDK_ROOT/armv7a-linux-androideabi19-clang ${{ env.SRCS }} $COMMON_FLAGS $DROID_FLAGS -march=armv5 -rtlib=libgcc -L $ROOT_DIR/build-tools/runtime ${{ env.LIBS }} $LATEST_FLAG -o cc-droid-arm_16
|
||||||
|
$NDK_ROOT/armv7a-linux-androideabi19-clang ${{ env.SRCS }} $COMMON_FLAGS $DROID_FLAGS -mfpu=vfp3-d16 ${{ env.LIBS }} $LATEST_FLAG -o cc-droid-arm_32
|
||||||
|
$NDK_ROOT/aarch64-linux-android21-clang ${{ env.SRCS }} $COMMON_FLAGS $DROID_FLAGS ${{ env.LIBS }} $LATEST_FLAG -o cc-droid-arm_64
|
||||||
|
$NDK_ROOT/i686-linux-android21-clang ${{ env.SRCS }} $COMMON_FLAGS $DROID_FLAGS ${{ env.LIBS }} $LATEST_FLAG -o cc-droid-x86_32
|
||||||
|
$NDK_ROOT/x86_64-linux-android21-clang ${{ env.SRCS }} $COMMON_FLAGS $DROID_FLAGS ${{ env.LIBS }} $LATEST_FLAG -o cc-droid-x86_64
|
||||||
|
|
||||||
|
cd $ROOT_DIR/android/app/src/main
|
||||||
|
# copy required native libraries
|
||||||
|
mkdir lib lib/armeabi lib/armeabi-v7a lib/arm64-v8a lib/x86 lib/x86_64
|
||||||
|
cp $ROOT_DIR/cc-droid-arm_16 lib/armeabi/libclassicube.so
|
||||||
|
cp $ROOT_DIR/cc-droid-arm_32 lib/armeabi-v7a/libclassicube.so
|
||||||
|
cp $ROOT_DIR/cc-droid-arm_64 lib/arm64-v8a/libclassicube.so
|
||||||
|
cp $ROOT_DIR/cc-droid-x86_32 lib/x86/libclassicube.so
|
||||||
|
cp $ROOT_DIR/cc-droid-x86_64 lib/x86_64/libclassicube.so
|
||||||
|
|
||||||
|
# The following commands are for manually building an .apk, see
|
||||||
|
# https://spin.atomicobject.com/2011/08/22/building-android-application-bundles-apks-by-hand/
|
||||||
|
# https://github.com/cnlohr/rawdrawandroid/blob/master/Makefile
|
||||||
|
# https://stackoverflow.com/questions/41132753/how-can-i-build-an-android-apk-without-gradle-on-the-command-line
|
||||||
|
# https://github.com/skanti/Android-Manual-Build-Command-Line/blob/master/hello-jni/Makefile
|
||||||
|
# https://github.com/skanti/Android-Manual-Build-Command-Line/blob/master/hello-jni/CMakeLists.txt
|
||||||
|
|
||||||
|
# compile java files into multiple .class files
|
||||||
|
cd $ROOT_DIR/android/app/src/main/java/com/classicube
|
||||||
|
javac *.java -d $ROOT_DIR/android/app/src/main/obj -classpath $SDK_ROOT/android.jar --release 8
|
||||||
|
|
||||||
|
cd $ROOT_DIR/android/app/src/main
|
||||||
|
# get debug signing key
|
||||||
|
echo -n "${{ secrets.ANDROID_SIGNING_KEY_BASE64 }}" | base64 --decode > debug.keystore
|
||||||
|
|
||||||
|
# compile the multiple .class files into one .dex file
|
||||||
|
$TOOLS_ROOT/dx --dex --output=classes.dex ./obj
|
||||||
|
# create initial .apk with packaged version of resources
|
||||||
|
$TOOLS_ROOT/aapt package -f -M AndroidManifest.xml -S res -F cc-unsigned.apk -I $SDK_ROOT/android.jar
|
||||||
|
# and add all the required files
|
||||||
|
$TOOLS_ROOT/aapt add -f cc-unsigned.apk classes.dex lib/armeabi/libclassicube.so lib/armeabi-v7a/libclassicube.so lib/arm64-v8a/libclassicube.so lib/x86/libclassicube.so lib/x86_64/libclassicube.so
|
||||||
|
|
||||||
|
# sign the apk with debug key (https://stackoverflow.com/questions/16711233/)
|
||||||
|
# Note per https://developer.android.com/tools/zipalign
|
||||||
|
# - if using apksigner, zipalign must be called before apksigner
|
||||||
|
# - if using jarsigner, zipalign must be called after jarsigner
|
||||||
|
$TOOLS_ROOT/zipalign -f 4 cc-unsigned.apk cc-signed.apk
|
||||||
|
$TOOLS_ROOT/apksigner sign --ks debug.keystore --ks-pass pass:android cc-signed.apk
|
||||||
|
cp cc-signed.apk $ROOT_DIR/src/cc.apk
|
||||||
|
|
||||||
|
# old v1 only version (doesn't work properly now)
|
||||||
|
#cp cc-unsigned.apk cc-signed.apk
|
||||||
|
#jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore debug.keystore -storepass android -keypass android cc-signed.apk androiddebugkey
|
||||||
|
# jarsigner -verbose
|
||||||
|
# create aligned .apk file
|
||||||
|
#$TOOLS_ROOT/zipalign -f 4 cc-signed.apk $ROOT_DIR/src/cc.apk
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'src/cc.apk'
|
||||||
|
DEST_NAME: 'cc.apk'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_success
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
DESTINATION_URL: '${{ secrets.NOTIFY_URL }}'
|
||||||
|
WORKFLOW_NAME: 'android'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce android build'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
@ -0,0 +1,68 @@
|
||||||
|
name: Build latest (Dreamcast)
|
||||||
|
# trigger via either push to selected branches or on manual run
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}-dreamcast
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: ghcr.io/kos-builds/kos-dc:sha-20149ee-14.2.0
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Install prerequisites
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
apt-get update
|
||||||
|
apt-get -y install genisoimage
|
||||||
|
wget https://github.com/ClassiCube/rpi-compiling-stuff/raw/main/cdi4dc -O /opt/toolchains/dc/kos/utils/cdi4dc
|
||||||
|
chmod +x /opt/toolchains/dc/kos/utils/cdi4dc
|
||||||
|
|
||||||
|
- name: Compile Dreamcast build
|
||||||
|
id: compile
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
export PATH=/opt/toolchains/dc/kos/utils/:$PATH
|
||||||
|
make dreamcast
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-dc.cdi'
|
||||||
|
DEST_NAME: 'ClassiCube-dc.cdi'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-dc.iso'
|
||||||
|
DEST_NAME: 'ClassiCube-dc.iso'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-dc.elf'
|
||||||
|
DEST_NAME: 'ClassiCube-dc.elf'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_success
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
DESTINATION_URL: '${{ secrets.NOTIFY_URL }}'
|
||||||
|
WORKFLOW_NAME: 'dreamcast'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce Dreamcast build'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
@ -0,0 +1,81 @@
|
||||||
|
name: Build latest (FreeBSD)
|
||||||
|
# trigger via either push to selected branches or on manual run
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}-freebsd
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: empterdose/freebsd-cross-build:11.4
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install prerequisites
|
||||||
|
run: apk add bash wget curl
|
||||||
|
|
||||||
|
- name: Retrieve OpenGL and X11 dev files (64 bit)
|
||||||
|
run: |
|
||||||
|
mkdir freebsd64
|
||||||
|
cd freebsd64
|
||||||
|
wget https://github.com/ClassiCube/rpi-compiling-stuff/raw/main/freebsd64.zip
|
||||||
|
unzip freebsd64.zip
|
||||||
|
|
||||||
|
- name: Retrieve OpenGL and X11 dev files (32 bit)
|
||||||
|
run: |
|
||||||
|
mkdir freebsd32
|
||||||
|
cd freebsd32
|
||||||
|
wget https://github.com/ClassiCube/rpi-compiling-stuff/raw/main/freebsd32.zip
|
||||||
|
unzip freebsd32.zip
|
||||||
|
|
||||||
|
- name: Compile FreeBSD builds
|
||||||
|
id: compile
|
||||||
|
shell: bash
|
||||||
|
env:
|
||||||
|
LIBS: "-lm -lpthread -lX11 -lXi -lGL -lexecinfo"
|
||||||
|
SRCS: "src/*.c third_party/bearssl/*.c"
|
||||||
|
FLAGS: "-O1 -s -fno-stack-protector -fno-math-errno -Qn -Werror -fvisibility=hidden -rdynamic -Werror"
|
||||||
|
PLAT32_FLAGS: "-fno-pie -fcf-protection=none -I freebsd32/include -L freebsd32/lib"
|
||||||
|
PLAT64_FLAGS: "-fno-pie -fcf-protection=none -I freebsd64/include -L freebsd64/lib"
|
||||||
|
|
||||||
|
run: |
|
||||||
|
LATEST_FLAG=-DCC_COMMIT_SHA=\"${GITHUB_SHA::9}\"
|
||||||
|
|
||||||
|
i386-freebsd11-clang ${{ env.SRCS }} ${{ env.FLAGS }} ${{ env.PLAT32_FLAGS }} $LATEST_FLAG -o cc-fbsd32-gl1 ${{ env.LIBS }}
|
||||||
|
x86_64-freebsd11-clang ${{ env.SRCS }} ${{ env.FLAGS }} ${{ env.PLAT64_FLAGS }} $LATEST_FLAG -o cc-fbsd64-gl1 ${{ env.LIBS }}
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-fbsd32-gl1'
|
||||||
|
DEST_NAME: 'ClassiCube-FreeBSD-32'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-fbsd64-gl1'
|
||||||
|
DEST_NAME: 'ClassiCube-FreeBSD-64'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_success
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
DESTINATION_URL: '${{ secrets.NOTIFY_URL }}'
|
||||||
|
WORKFLOW_NAME: 'freebsd'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce FreeBSD build(s)'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
@ -0,0 +1,48 @@
|
||||||
|
name: Build latest (GBA)
|
||||||
|
# trigger via either push to selected branches or on manual run
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}-gba
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: devkitpro/devkitarm:latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Compile GBA build
|
||||||
|
id: compile
|
||||||
|
run: |
|
||||||
|
make gba
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-gba.gba'
|
||||||
|
DEST_NAME: 'ClassiCube-gba.gba'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-gba.elf'
|
||||||
|
DEST_NAME: 'ClassiCube-gba.elf'
|
||||||
|
|
||||||
|
|
||||||
|
# NOTE: Not uploaded to website downloads at present
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce GBA build'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
@ -0,0 +1,52 @@
|
||||||
|
name: Build latest (GameCube)
|
||||||
|
# trigger via either push to selected branches or on manual run
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}-gc
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: ghcr.io/extremscorner/libogc2:latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Compile GameCube build
|
||||||
|
id: compile
|
||||||
|
run: |
|
||||||
|
make gamecube
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-gc.dol'
|
||||||
|
DEST_NAME: 'ClassiCube-gc.dol'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-gc.elf'
|
||||||
|
DEST_NAME: 'ClassiCube-gc.elf'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_success
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
DESTINATION_URL: '${{ secrets.NOTIFY_URL }}'
|
||||||
|
WORKFLOW_NAME: 'gc'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce GameCube build'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
@ -0,0 +1,51 @@
|
||||||
|
name: Build latest (Haiku)
|
||||||
|
# trigger via either push to selected branches or on manual run
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}-haiku
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: haiku/cross-compiler:x86_64-r1beta4
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Compile haiku build
|
||||||
|
id: compile
|
||||||
|
env:
|
||||||
|
LIBS: "-lm -lGL -lnetwork -lstdc++ -lbe -lgame -ltracker"
|
||||||
|
SRCS: "src/*.c src/Platform_BeOS.cpp src/Window_BeOS.cpp third_party/bearssl/*.c"
|
||||||
|
COMMON_FLAGS: "-O1 -s -fno-stack-protector -fno-math-errno -Qn -Werror"
|
||||||
|
run: |
|
||||||
|
x86_64-unknown-haiku-gcc ${{ env.SRCS }} -o ClassiCube-haiku ${{ env.COMMON_FLAGS }} ${{ env.LIBS }}
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-haiku'
|
||||||
|
DEST_NAME: 'ClassiCube-haiku'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_success
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
DESTINATION_URL: '${{ secrets.NOTIFY_URL }}'
|
||||||
|
WORKFLOW_NAME: 'haiku'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce Haiku build'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
@ -0,0 +1,49 @@
|
||||||
|
name: Build latest (iOS)
|
||||||
|
# trigger via either push to selected branches or on manual run
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}-ios
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: macOS-14
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Compile iOS build
|
||||||
|
id: compile
|
||||||
|
run: |
|
||||||
|
cd misc/ios
|
||||||
|
sudo xcode-select -s /Applications/Xcode_15.0.1.app/Contents/Developer
|
||||||
|
xcodebuild -sdk iphoneos -configuration Release CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO
|
||||||
|
cd build/Release-iphoneos
|
||||||
|
mkdir Payload
|
||||||
|
mv ClassiCube.app Payload/ClassiCube.app
|
||||||
|
zip -r cc.ipa Payload
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'misc/ios/build/Release-iphoneos/cc.ipa'
|
||||||
|
DEST_NAME: 'cc.ipa'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_success
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
DESTINATION_URL: '${{ secrets.NOTIFY_URL }}'
|
||||||
|
WORKFLOW_NAME: 'ios'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce iOS build'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
@ -0,0 +1,150 @@
|
||||||
|
name: Build latest (Linux)
|
||||||
|
# trigger via either push to selected branches or on manual run
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
- ModernLighting
|
||||||
|
- AngledLighting
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}-linux
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
#============================================
|
||||||
|
# =============== 32 BIT LINUX ==============
|
||||||
|
# ===========================================
|
||||||
|
build-32:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: ubuntu:20.04
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install packages
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
apt-get -y update
|
||||||
|
apt-get -y install gcc-multilib wget curl unzip
|
||||||
|
|
||||||
|
- name: Retrieve dependencies
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
wget https://github.com/ClassiCube/rpi-compiling-stuff/raw/main/linux32.zip
|
||||||
|
unzip linux32.zip
|
||||||
|
|
||||||
|
- name: Compile 32 bit Linux builds
|
||||||
|
shell: bash
|
||||||
|
id: compile
|
||||||
|
env:
|
||||||
|
LIBS: "-lX11 -lXi -lpthread -lGL -lm -ldl"
|
||||||
|
SRCS: "src/*.c third_party/bearssl/*.c"
|
||||||
|
FLAGS: "-O1 -s -fno-stack-protector -fno-math-errno -Qn -Werror -fvisibility=hidden -rdynamic -Werror"
|
||||||
|
NIX32_FLAGS: "-no-pie -fno-pie -m32 -fcf-protection=none -L ./lib -Wl,--unresolved-symbols=ignore-in-shared-libs"
|
||||||
|
run: |
|
||||||
|
LATEST_FLAG=-DCC_COMMIT_SHA=\"${GITHUB_SHA::9}\"
|
||||||
|
|
||||||
|
gcc ${{ env.SRCS }} ${{ env.FLAGS }} ${{ env.NIX32_FLAGS }} $LATEST_FLAG -o cc-nix32-gl1 ${{ env.LIBS }}
|
||||||
|
gcc ${{ env.SRCS }} ${{ env.FLAGS }} ${{ env.NIX32_FLAGS }} $LATEST_FLAG -DCC_GFX_BACKEND=CC_GFX_BACKEND_GL2 -o cc-nix32-gl2 ${{ env.LIBS }}
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-nix32-gl1'
|
||||||
|
DEST_NAME: 'ClassiCube-Linux32-OpenGL'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-nix32-gl2'
|
||||||
|
DEST_NAME: 'ClassiCube-Linux32-ModernGL'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_success
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
DESTINATION_URL: '${{ secrets.NOTIFY_URL }}'
|
||||||
|
WORKFLOW_NAME: 'linux32'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce 32 bit Linux build'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
||||||
|
#============================================
|
||||||
|
# =============== 64 BIT LINUX ==============
|
||||||
|
# ===========================================
|
||||||
|
build-64:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: ubuntu:20.04
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install packages
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
apt-get -y update
|
||||||
|
apt-get -y install gcc wget curl unzip
|
||||||
|
|
||||||
|
- name: Retrieve dependencies
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
wget https://github.com/ClassiCube/rpi-compiling-stuff/raw/main/linux64.zip
|
||||||
|
unzip linux64.zip
|
||||||
|
|
||||||
|
- name: Compile 64 bit Linux builds
|
||||||
|
shell: bash
|
||||||
|
id: compile
|
||||||
|
env:
|
||||||
|
LIBS: "-lX11 -lXi -lpthread -lGL -lm -ldl"
|
||||||
|
SRCS: "src/*.c third_party/bearssl/*.c"
|
||||||
|
FLAGS: "-O1 -s -fno-stack-protector -fno-math-errno -Qn -Werror -fvisibility=hidden -rdynamic -Werror"
|
||||||
|
NIX64_FLAGS: "-no-pie -fno-pie -m64 -fcf-protection=none -rdynamic -L ./lib -Wl,--unresolved-symbols=ignore-in-shared-libs"
|
||||||
|
run: |
|
||||||
|
LATEST_FLAG=-DCC_COMMIT_SHA=\"${GITHUB_SHA::9}\"
|
||||||
|
|
||||||
|
gcc ${{ env.SRCS }} ${{ env.FLAGS }} ${{ env.NIX64_FLAGS }} $LATEST_FLAG -o cc-nix64-gl1 ${{ env.LIBS }}
|
||||||
|
gcc ${{ env.SRCS }} ${{ env.FLAGS }} ${{ env.NIX64_FLAGS }} $LATEST_FLAG -DCC_GFX_BACKEND=CC_GFX_BACKEND_GL2 -o cc-nix64-gl2 ${{ env.LIBS }}
|
||||||
|
#gcc ${{ env.SRCS }} ${{ env.FLAGS }} ${{ env.NIX64_FLAGS }} $LATEST_FLAG -DCC_GFX_BACKEND=CC_GFX_BACKEND_GL2 -DCC_WIN_BACKEND=CC_WIN_BACKEND_SDL2 -o cc-sdl64-gl2 -lSDL2 ${{ env.LIBS }}
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-nix64-gl1'
|
||||||
|
DEST_NAME: 'ClassiCube-Linux64-OpenGL'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-nix64-gl2'
|
||||||
|
DEST_NAME: 'ClassiCube-Linux64-ModernGL'
|
||||||
|
|
||||||
|
# - uses: ./.github/actions/upload_build
|
||||||
|
# if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
# with:
|
||||||
|
# SOURCE_FILE: 'cc-sdl64-gl2'
|
||||||
|
# DEST_NAME: 'ClassiCube-Linux64-SDL2'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_success
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
DESTINATION_URL: '${{ secrets.NOTIFY_URL }}'
|
||||||
|
WORKFLOW_NAME: 'linux64'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce 64 bit Linux build'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
@ -0,0 +1,99 @@
|
||||||
|
name: Build latest (macOS 32 bit)
|
||||||
|
# trigger via either push to selected branches or on manual run
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}-mac32
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: ghcr.io/classicube/minimal-osxcross:latest
|
||||||
|
credentials:
|
||||||
|
username: ${{ github.actor }}
|
||||||
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Compile 32 bit macOS builds
|
||||||
|
shell: bash
|
||||||
|
id: compile
|
||||||
|
env:
|
||||||
|
LIBS: "-framework Security -framework Cocoa -framework OpenGL -framework IOKit -lobjc -lgcc_s.1"
|
||||||
|
SRCS: "src/*.c src/Window_cocoa.m third_party/bearssl/*.c"
|
||||||
|
FLAGS: "-O1 -s -fno-stack-protector -fno-math-errno -Qn -fvisibility=hidden -rdynamic"
|
||||||
|
run: |
|
||||||
|
LATEST_FLAG=-DCC_COMMIT_SHA=\"${GITHUB_SHA::9}\"
|
||||||
|
|
||||||
|
PATH=$PATH:/usr/local/compiler/target/bin
|
||||||
|
i386-apple-darwin8-clang ${{ env.SRCS }} ${{ env.FLAGS }} $LATEST_FLAG -o cc-mac32-gl1 ${{ env.LIBS }}
|
||||||
|
i386-apple-darwin8-clang ${{ env.SRCS }} ${{ env.FLAGS }} $LATEST_FLAG -DCC_GFX_BACKEND=CC_GFX_BACKEND_GL2 -o cc-mac32-gl2 ${{ env.LIBS }}
|
||||||
|
|
||||||
|
- name: Compile 32 bit macOS builds (PowerPC)
|
||||||
|
shell: bash
|
||||||
|
id: compile_ppc
|
||||||
|
env:
|
||||||
|
LIBS: "-framework Security -framework Cocoa -framework OpenGL -framework IOKit -lobjc"
|
||||||
|
SRCS: "src/*.c src/Window_cocoa.m third_party/bearssl/*.c"
|
||||||
|
FLAGS: "-O1 -s -fno-stack-protector -fno-math-errno -Qn -fvisibility=hidden -static-libgcc -Wl,-no_compact_unwind -isystem /usr/local/compiler/ppc/target/SDK/MacOSX10.5.sdk -Wl,-syslibroot /usr/local/compiler/ppc/target/SDK/MacOSX10.5.sdk"
|
||||||
|
run: |
|
||||||
|
LATEST_FLAG=-DCC_COMMIT_SHA=\"${GITHUB_SHA::9}\"
|
||||||
|
|
||||||
|
mkdir -p /home/minty/repos/osxcross-ppc-test/target/bin
|
||||||
|
ln -s /usr/local/compiler/ppc/target/bin/powerpc64-apple-darwin9-as /home/minty/repos/osxcross-ppc-test/target/bin/powerpc64-apple-darwin9-as
|
||||||
|
PATH=$PATH:/usr/local/compiler/ppc/target/bin
|
||||||
|
powerpc-apple-darwin9-base-gcc *${{ env.SRCS }} ${{ env.FLAGS }} $LATEST_FLAG -o cc-mac32-ppc -mmacosx-version-min=10.2.0 -m32 ${{ env.LIBS }}
|
||||||
|
|
||||||
|
- name: Generate combined Intel + PowerPC build
|
||||||
|
shell: bash
|
||||||
|
id: gen_universal
|
||||||
|
run: |
|
||||||
|
PATH=$PATH:/usr/local/compiler/target/bin
|
||||||
|
i386-apple-darwin8-lipo -create -output cc-mac32-universal cc-mac32-gl1 cc-mac32-ppc
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-mac32-gl1'
|
||||||
|
DEST_NAME: 'ClassiCube-mac32-OpenGL'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-mac32-gl2'
|
||||||
|
DEST_NAME: 'ClassiCube-mac32-ModernGL'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile_ppc.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-mac32-ppc'
|
||||||
|
DEST_NAME: 'ClassiCube-mac32-PPC'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.gen_universal.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-mac32-universal'
|
||||||
|
DEST_NAME: 'ClassiCube-mac32'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_success
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
DESTINATION_URL: '${{ secrets.NOTIFY_URL }}'
|
||||||
|
WORKFLOW_NAME: 'mac32'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce 32 bit macOS build'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
@ -0,0 +1,71 @@
|
||||||
|
name: Build latest (macOS 64 bit)
|
||||||
|
# trigger via either push to selected branches or on manual run
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
- AngledLighting
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}-mac64
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: macOS-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Compile 64 bit macOS builds
|
||||||
|
shell: bash
|
||||||
|
id: compile
|
||||||
|
env:
|
||||||
|
LIBS: "-framework Security -framework Cocoa -framework OpenGL -framework IOKit -lobjc"
|
||||||
|
SRCS: "src/*.c src/Window_cocoa.m third_party/bearssl/*.c"
|
||||||
|
FLAGS: "-O1 -s -fno-stack-protector -fno-math-errno -Qn -fvisibility=hidden -rdynamic"
|
||||||
|
ARM64_FLAGS: "-DCC_GFX_BACKEND=CC_GFX_BACKEND_GL2 -arch arm64"
|
||||||
|
INTEL64_FLAGS: "-arch x86_64"
|
||||||
|
run: |
|
||||||
|
LATEST_FLAG=-DCC_COMMIT_SHA=\"$(git rev-parse --short "$GITHUB_SHA")\"
|
||||||
|
|
||||||
|
MACOSX_DEPLOYMENT_TARGET=10.5 clang ${{ env.SRCS }} ${{ env.FLAGS }} ${{ env.INTEL64_FLAGS }} $LATEST_FLAG -o cc-mac64-gl1 ${{ env.LIBS }}
|
||||||
|
MACOSX_DEPLOYMENT_TARGET=10.5 clang ${{ env.SRCS }} ${{ env.FLAGS }} ${{ env.INTEL64_FLAGS }} $LATEST_FLAG -DCC_GFX_BACKEND=CC_GFX_BACKEND_GL2 -o cc-mac64-gl2 ${{ env.LIBS }}
|
||||||
|
|
||||||
|
clang ${{ env.SRCS }} ${{ env.COMMON_FLAGS }} ${{ env.ARM64_FLAGS }} $LATEST_FLAG -o cc-mac-arm64 ${{ env.LIBS }}
|
||||||
|
# https://wiki.freepascal.org/Code_Signing_for_macOS#Ad_hoc_signing
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-mac64-gl1'
|
||||||
|
DEST_NAME: 'ClassiCube-mac64-OpenGL'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-mac64-gl2'
|
||||||
|
DEST_NAME: 'ClassiCube-mac64-ModernGL'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-mac-arm64'
|
||||||
|
DEST_NAME: 'ClassiCube-mac-ARM64'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_success
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
DESTINATION_URL: '${{ secrets.NOTIFY_URL }}'
|
||||||
|
WORKFLOW_NAME: 'mac64'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce 64 bit macOS builds'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
@ -0,0 +1,60 @@
|
||||||
|
name: Build latest (Mac Classic)
|
||||||
|
# trigger via either push to selected branches or on manual run
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}-mac-classic
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: ghcr.io/autc04/retro68
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Compile Mac classic build
|
||||||
|
id: compile
|
||||||
|
run: |
|
||||||
|
make macclassic_ppc RETRO68=/Retro68-build/toolchain
|
||||||
|
make macclassic_68k RETRO68=/Retro68-build/toolchain
|
||||||
|
make macclassic_68k RETRO68=/Retro68-build/toolchain ARCH_68040=1
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-ppc.dsk'
|
||||||
|
DEST_NAME: 'ClassiCube-ppc.dsk'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-68k.dsk'
|
||||||
|
DEST_NAME: 'ClassiCube-68k.dsk'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-68040.dsk'
|
||||||
|
DEST_NAME: 'ClassiCube-68040.dsk'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_success
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
DESTINATION_URL: '${{ secrets.NOTIFY_URL }}'
|
||||||
|
WORKFLOW_NAME: 'macclassic'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce Mac Classic build'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
@ -0,0 +1,51 @@
|
||||||
|
name: Build latest (MS DOS)
|
||||||
|
# trigger via either push to selected branches or on manual run
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}-msdos
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: ghcr.io/volkertb/debian-djgpp
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Install prerequisites
|
||||||
|
run: |
|
||||||
|
apt-get update
|
||||||
|
apt-get -y install curl
|
||||||
|
|
||||||
|
- name: Compile MS dos build
|
||||||
|
id: compile
|
||||||
|
run: |
|
||||||
|
make CC=gcc dos
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'CCDOS.EXE'
|
||||||
|
DEST_NAME: 'ClassiCube.exe'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_success
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
DESTINATION_URL: '${{ secrets.NOTIFY_URL }}'
|
||||||
|
WORKFLOW_NAME: 'msdos'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce MS DOS build'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
@ -0,0 +1,64 @@
|
||||||
|
name: Build latest (N64)
|
||||||
|
# trigger via either push to selected branches or on manual run
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}-n64
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: ghcr.io/dragonminded/libdragon:preview
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Install prerequisites
|
||||||
|
run: |
|
||||||
|
apt-get update
|
||||||
|
apt-get -y install curl
|
||||||
|
|
||||||
|
- name: Compile N64 build
|
||||||
|
id: compile
|
||||||
|
run: |
|
||||||
|
REAL_DIR=`pwd`
|
||||||
|
cd /tmp
|
||||||
|
git clone -b opengl https://github.com/DragonMinded/libdragon.git --depth=1
|
||||||
|
cd libdragon
|
||||||
|
make install
|
||||||
|
make tools-install
|
||||||
|
cd $REAL_DIR
|
||||||
|
make n64
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'build-n64/ClassiCube-n64.elf'
|
||||||
|
DEST_NAME: 'ClassiCube-n64.elf'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-n64.z64'
|
||||||
|
DEST_NAME: 'ClassiCube-n64.z64'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_success
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
DESTINATION_URL: '${{ secrets.NOTIFY_URL }}'
|
||||||
|
WORKFLOW_NAME: 'n64'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce N64 build'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
@ -0,0 +1,71 @@
|
||||||
|
name: Build latest (NDS)
|
||||||
|
# trigger via either push to selected branches or on manual run
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}-nds
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: skylyrac/blocksds:dev-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Install prerequisites
|
||||||
|
run: |
|
||||||
|
apt-get update
|
||||||
|
apt-get -y install curl
|
||||||
|
|
||||||
|
- name: Compile NDS build
|
||||||
|
id: compile
|
||||||
|
run: |
|
||||||
|
make ds
|
||||||
|
export BUILD_NONET=1
|
||||||
|
make ds
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube.nds'
|
||||||
|
DEST_NAME: 'ClassiCube.nds'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'build/nds/cc-arm9.elf'
|
||||||
|
DEST_NAME: 'ClassiCube.elf'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-nonet.nds'
|
||||||
|
DEST_NAME: 'ClassiCube-nonet.nds'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'build/nds_nonet/cc-arm9.elf'
|
||||||
|
DEST_NAME: 'ClassiCube-nonet.elf'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_success
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
DESTINATION_URL: '${{ secrets.NOTIFY_URL }}'
|
||||||
|
WORKFLOW_NAME: 'nds'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce NDS build'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
@ -0,0 +1,66 @@
|
||||||
|
name: Build latest (NetBSD)
|
||||||
|
# trigger via either push to selected branches or on manual run
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}-netbsd
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: ghcr.io/cross-rs/x86_64-unknown-netbsd:edge
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- name: Install prerequisites
|
||||||
|
run: |
|
||||||
|
apt-get update
|
||||||
|
apt-get -y install zip wget
|
||||||
|
|
||||||
|
- name: Retrieve OpenGL and X11 dev files (64 bit)
|
||||||
|
run: |
|
||||||
|
mkdir netbsd64
|
||||||
|
cd netbsd64
|
||||||
|
wget https://github.com/ClassiCube/rpi-compiling-stuff/raw/main/netbsd64.zip
|
||||||
|
unzip netbsd64.zip
|
||||||
|
|
||||||
|
- name: Compile NetBSD builds
|
||||||
|
id: compile
|
||||||
|
shell: bash
|
||||||
|
env:
|
||||||
|
LIBS: "-lm -lpthread -lX11 -lXi -lGL -lexecinfo"
|
||||||
|
SRCS: "src/*.c third_party/bearssl/*.c"
|
||||||
|
FLAGS: "-O1 -s -fno-stack-protector -fno-math-errno -Qn -Werror -Wl,-R/usr/X11R7/lib -fvisibility=hidden -rdynamic -Werror"
|
||||||
|
PLAT64_FLAGS: "-fno-pie -fcf-protection=none -I netbsd64/include -L netbsd64/lib -Wl,--unresolved-symbols=ignore-in-shared-libs"
|
||||||
|
run: |
|
||||||
|
LATEST_FLAG=-DCC_COMMIT_SHA=\"${GITHUB_SHA::9}\"
|
||||||
|
|
||||||
|
x86_64-unknown-netbsd-gcc ${{ env.SRCS }} ${{ env.FLAGS }} ${{ env.PLAT64_FLAGS }} $LATEST_FLAG -o cc-netbsd64-gl1 ${{ env.LIBS }}
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-netbsd64-gl1'
|
||||||
|
DEST_NAME: 'ClassiCube-NetBSD-64'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_success
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
DESTINATION_URL: '${{ secrets.NOTIFY_URL }}'
|
||||||
|
WORKFLOW_NAME: 'netbsd'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce NetBSD build(s)'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
@ -0,0 +1,70 @@
|
||||||
|
name: Build latest (PS1)
|
||||||
|
# trigger via either push to selected branches or on manual run
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}-ps1
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-PS1:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: ghcr.io/classicube/minimal-psn00b:latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Install prerequisites
|
||||||
|
run: |
|
||||||
|
apt-get update
|
||||||
|
apt-get install -y curl
|
||||||
|
|
||||||
|
- name: Compile PS1 build
|
||||||
|
id: compile
|
||||||
|
run: |
|
||||||
|
export PSN00BSDK_ROOT=/usr/local/psnoob
|
||||||
|
make ps1
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'build/ps1/ClassiCube-ps1.elf'
|
||||||
|
DEST_NAME: 'ClassiCube-PS1.elf'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-ps1.exe'
|
||||||
|
DEST_NAME: 'ClassiCube-PS1.exe'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-ps1.bin'
|
||||||
|
DEST_NAME: 'ClassiCube-PS1.bin'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-ps1.cue'
|
||||||
|
DEST_NAME: 'ClassiCube-PS1.cue'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_success
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
DESTINATION_URL: '${{ secrets.NOTIFY_URL }}'
|
||||||
|
WORKFLOW_NAME: 'ps1'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce PS1 build'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
@ -0,0 +1,56 @@
|
||||||
|
name: Build latest (PS2)
|
||||||
|
# trigger via either push to selected branches or on manual run
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}-ps2
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: ghcr.io/ps2dev/ps2sdk:latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Install prerequisites
|
||||||
|
run: |
|
||||||
|
apk add make mpc1 curl
|
||||||
|
|
||||||
|
- name: Compile PS2 build
|
||||||
|
id: compile
|
||||||
|
run: |
|
||||||
|
make ps2
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-ps2.elf'
|
||||||
|
DEST_NAME: 'ClassiCube-ps2.elf'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-ps2-min.elf'
|
||||||
|
DEST_NAME: 'ClassiCube-ps2-min.elf'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_success
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
DESTINATION_URL: '${{ secrets.NOTIFY_URL }}'
|
||||||
|
WORKFLOW_NAME: 'ps2'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce PS2 build'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
@ -0,0 +1,67 @@
|
||||||
|
name: Build latest (PS3)
|
||||||
|
# trigger via either push to selected branches or on manual run
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}-ps3
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-PS3:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: ghcr.io/classicube/minimal-psl1ght:latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Install prerequisites
|
||||||
|
run: |
|
||||||
|
apt-get update
|
||||||
|
apt-get install -y curl
|
||||||
|
|
||||||
|
- name: Compile PS3 build
|
||||||
|
id: compile
|
||||||
|
run: |
|
||||||
|
export PS3DEV=/usr/local/ps3dev
|
||||||
|
export PSL1GHT=/usr/local/ps3dev
|
||||||
|
export PATH=$PATH:$PS3DEV/bin
|
||||||
|
export PATH=$PATH:$PS3DEV/ppu/bin
|
||||||
|
make ps3
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-PS3.elf'
|
||||||
|
DEST_NAME: 'ClassiCube-PS3.elf'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-PS3.self'
|
||||||
|
DEST_NAME: 'ClassiCube-PS3.self'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-PS3.pkg'
|
||||||
|
DEST_NAME: 'ClassiCube-PS3.pkg'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_success
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
DESTINATION_URL: '${{ secrets.NOTIFY_URL }}'
|
||||||
|
WORKFLOW_NAME: 'ps3'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce PS3 build'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
@ -0,0 +1,56 @@
|
||||||
|
name: Build latest (PSP)
|
||||||
|
# trigger via either push to selected branches or on manual run
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}-psp
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: pspdev/pspdev:latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Install prerequisites
|
||||||
|
run: |
|
||||||
|
apk add curl curl-dev
|
||||||
|
|
||||||
|
- name: Compile PSP build
|
||||||
|
id: compile
|
||||||
|
run: |
|
||||||
|
make psp
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'EBOOT.PBP'
|
||||||
|
DEST_NAME: 'EBOOT.PBP'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-psp.elf'
|
||||||
|
DEST_NAME: 'ClassiCube-psp.elf'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_success
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
DESTINATION_URL: '${{ secrets.NOTIFY_URL }}'
|
||||||
|
WORKFLOW_NAME: 'psp'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce PSP build'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
@ -0,0 +1,116 @@
|
||||||
|
name: Build latest (RPI)
|
||||||
|
# trigger via either push to selected branches or on manual run
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}-rpi
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
#============================================
|
||||||
|
# ================ 32 BIT RPI ===============
|
||||||
|
# ===========================================
|
||||||
|
build-RPI32:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: dockcross/linux-armv6-lts
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Retrieve OpenGL and X11 dev files
|
||||||
|
run: |
|
||||||
|
mkdir rpi
|
||||||
|
cd rpi
|
||||||
|
wget https://github.com/ClassiCube/rpi-compiling-stuff/raw/main/rpi32.zip
|
||||||
|
unzip rpi32.zip
|
||||||
|
|
||||||
|
- name: Compile RPI 32 bit build
|
||||||
|
id: compile
|
||||||
|
env:
|
||||||
|
LIBS: "-lGLESv2 -lEGL -lX11 -lXi -lm -lpthread -ldl -lrt"
|
||||||
|
SRCS: "src/*.c third_party/bearssl/*.c"
|
||||||
|
FLAGS: "-O1 -s -fno-stack-protector -fno-math-errno -Qn -Werror -fvisibility=hidden -rdynamic"
|
||||||
|
RPI32_FLAGS: "-DCC_BUILD_RPI -I rpi/include -L rpi/lib -Wl,--unresolved-symbols=ignore-in-shared-libs"
|
||||||
|
run: |
|
||||||
|
LATEST_FLAG=-DCC_COMMIT_SHA=\"$GITHUB_SHA\"
|
||||||
|
|
||||||
|
$CC ${{ env.SRCS }} ${{ env.FLAGS }} ${{ env.RPI32_FLAGS }} $LATEST_FLAG -o cc-rpi32 ${{ env.LIBS }}
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-rpi32'
|
||||||
|
DEST_NAME: 'cc-rpi32'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_success
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
DESTINATION_URL: '${{ secrets.NOTIFY_URL }}'
|
||||||
|
WORKFLOW_NAME: 'rpi32'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce RPI 32 bit build'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
||||||
|
|
||||||
|
#============================================
|
||||||
|
# ================ 64 BIT RPI ===============
|
||||||
|
# ===========================================
|
||||||
|
build-RPI64:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: dockcross/linux-arm64-lts
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Retrieve OpenGL and X11 dev files
|
||||||
|
run: |
|
||||||
|
mkdir rpi
|
||||||
|
cd rpi
|
||||||
|
wget https://github.com/ClassiCube/rpi-compiling-stuff/raw/main/rpi64.zip
|
||||||
|
unzip rpi64.zip
|
||||||
|
|
||||||
|
- name: Compile RPI 64 bit build
|
||||||
|
id: compile
|
||||||
|
env:
|
||||||
|
LIBS: "-lGLESv2 -lEGL -lX11 -lXi -lm -lpthread -ldl -lrt"
|
||||||
|
SRCS: "src/*.c third_party/bearssl/*.c"
|
||||||
|
FLAGS: "-O1 -s -fno-stack-protector -fno-math-errno -Qn -Werror -fvisibility=hidden -rdynamic"
|
||||||
|
RPI64_FLAGS: "-DCC_BUILD_RPI -I rpi/include -L rpi/lib -Wl,--unresolved-symbols=ignore-in-shared-libs"
|
||||||
|
run: |
|
||||||
|
LATEST_FLAG=-DCC_COMMIT_SHA=\"$GITHUB_SHA\"
|
||||||
|
|
||||||
|
$CC ${{ env.SRCS }} ${{ env.FLAGS }} ${{ env.RPI64_FLAGS }} $LATEST_FLAG -o cc-rpi64 ${{ env.LIBS }}
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-rpi64'
|
||||||
|
DEST_NAME: 'cc-rpi64'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_success
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
DESTINATION_URL: '${{ secrets.NOTIFY_URL }}'
|
||||||
|
WORKFLOW_NAME: 'rpi64'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce RPI 64 bit build'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
@ -0,0 +1,63 @@
|
||||||
|
name: Build latest (Saturn)
|
||||||
|
# trigger via either push to selected branches or on manual run
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}-saturn
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: ijacquez/yaul:latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Install prerequisites
|
||||||
|
run: |
|
||||||
|
apt-get --allow-releaseinfo-change update
|
||||||
|
apt-get install -y curl
|
||||||
|
|
||||||
|
- name: Compile Saturn build
|
||||||
|
id: compile
|
||||||
|
run: |
|
||||||
|
make saturn
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'build/saturn/ClassiCube-saturn.elf'
|
||||||
|
DEST_NAME: 'ClassiCube-saturn.elf'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-saturn.iso'
|
||||||
|
DEST_NAME: 'ClassiCube-saturn.iso'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-saturn.cue'
|
||||||
|
DEST_NAME: 'ClassiCube-saturn.cue'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_success
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
DESTINATION_URL: '${{ secrets.NOTIFY_URL }}'
|
||||||
|
WORKFLOW_NAME: 'saturn'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce Saturn build'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
@ -0,0 +1,52 @@
|
||||||
|
name: Build latest (Switch)
|
||||||
|
# trigger via either push to selected branches or on manual run
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}-switch
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: devkitpro/devkita64:latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Compile Switch build
|
||||||
|
id: compile
|
||||||
|
run: |
|
||||||
|
make switch
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-switch.nro'
|
||||||
|
DEST_NAME: 'ClassiCube-switch.nro'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-switch.elf'
|
||||||
|
DEST_NAME: 'ClassiCube-switch.elf'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_success
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
DESTINATION_URL: '${{ secrets.NOTIFY_URL }}'
|
||||||
|
WORKFLOW_NAME: 'switch'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce Switch build'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
@ -0,0 +1,82 @@
|
||||||
|
name: Build latest (Symbian)
|
||||||
|
# trigger via either push to selected branches or on manual run
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
- ModernLighting
|
||||||
|
- AngledLighting
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}-symbian
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: windows-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Download Symbian SDK
|
||||||
|
run: Invoke-WebRequest https://nnp.nnchan.ru/dl/symbiansr1_gcce_workflow.zip -OutFile symbiansdk.zip
|
||||||
|
- name: Extract Symbian SDK
|
||||||
|
run: Expand-Archive symbiansdk.zip -DestinationPath .
|
||||||
|
|
||||||
|
- name: Compile Symbian build
|
||||||
|
id: compile
|
||||||
|
run: |
|
||||||
|
$SDK = "$pwd/SDK/"
|
||||||
|
$Env:EPOCROOT = "$SDK".Substring(2)
|
||||||
|
$Env:SBS_GCCE441BIN = "$pwd/GCCE/bin"
|
||||||
|
cmd /c "$SDK/epoc32/tools/sbs\bin\sbs.bat -b misc/symbian/bld.inf -c armv5_urel_gcce -f - -m $SDK/epoc32/build/ClassiCube/makefile -j 4"
|
||||||
|
|
||||||
|
cd misc/symbian
|
||||||
|
(Get-Content ClassiCube.pkg).Replace('$(EPOCROOT)', "$SDK").Replace('$(PLATFORM)', 'armv5').Replace('$(TARGET)', 'urel') | Set-Content ClassiCube.pkg
|
||||||
|
cmd /c "$SDK/epoc32/tools/makesis.exe ClassiCube.pkg ClassiCube.sis"
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'misc/symbian/ClassiCube.sis'
|
||||||
|
DEST_NAME: 'ClassiCube-Symbian.sis'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'SDK/epoc32/release/armv5/urel/ClassiCube_s60v5.exe'
|
||||||
|
DEST_NAME: 'ClassiCube_s60v5.exe'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'SDK/epoc32/release/armv5/urel/ClassiCube_s60v3.exe'
|
||||||
|
DEST_NAME: 'ClassiCube_s60v3.exe'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'SDK/epoc32/release/armv5/urel/ClassiCube_s60v5.exe.sym'
|
||||||
|
DEST_NAME: 'ClassiCube_s60v5.elf'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'SDK/epoc32/release/armv5/urel/ClassiCube_s60v3.exe.sym'
|
||||||
|
DEST_NAME: 'ClassiCube_s60v3.elf'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_success
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
DESTINATION_URL: '${{ secrets.NOTIFY_URL }}'
|
||||||
|
WORKFLOW_NAME: 'symbian'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce Symbian build'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
@ -0,0 +1,52 @@
|
||||||
|
name: Build latest (Vita)
|
||||||
|
# trigger via either push to selected branches or on manual run
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}-vita
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: vitasdk/vitasdk:latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Compile Vita build
|
||||||
|
id: compile
|
||||||
|
run: |
|
||||||
|
make vita
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-vita.vpk'
|
||||||
|
DEST_NAME: 'ClassiCube-vita.vpk'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-vita.elf'
|
||||||
|
DEST_NAME: 'ClassiCube-vita.elf'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_success
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
DESTINATION_URL: '${{ secrets.NOTIFY_URL }}'
|
||||||
|
WORKFLOW_NAME: 'vita'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce Vita build'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
@ -0,0 +1,48 @@
|
||||||
|
name: Build latest (Webclient)
|
||||||
|
# trigger via either push to selected branches or on manual run
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}-webclient
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: trzeci/emscripten-fastcomp:1.39.0
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Compiles webclient
|
||||||
|
id: compile
|
||||||
|
env:
|
||||||
|
SRCS: "src/*.c src/webclient/*.c"
|
||||||
|
run: |
|
||||||
|
emcc ${{ env.SRCS }} -o ClassiCube.js -s WASM=0 -s NO_EXIT_RUNTIME=1 -s LEGACY_VM_SUPPORT=1 -s ALLOW_MEMORY_GROWTH=1 -s ABORTING_MALLOC=0 -s ENVIRONMENT=web -s TOTAL_STACK=256Kb --js-library src/webclient/interop_web.js -Os -g2 -s SINGLE_FILE
|
||||||
|
sed -i 's#eventHandler.useCapture);#{ useCapture: eventHandler.useCapture, passive: false });#g' ClassiCube.js
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube.js'
|
||||||
|
DEST_NAME: 'ClassiCube.js'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_success
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
DESTINATION_URL: '${{ secrets.NOTIFY_URL }}'
|
||||||
|
WORKFLOW_NAME: 'webclient'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce Webclient'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
@ -0,0 +1,65 @@
|
||||||
|
name: Build latest (Wii)
|
||||||
|
# trigger via either push to selected branches or on manual run
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}-wii
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: devkitpro/devkitppc:latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Compile Wii build
|
||||||
|
id: compile
|
||||||
|
run: |
|
||||||
|
make wii
|
||||||
|
|
||||||
|
- name: Create Wii homebrew
|
||||||
|
run: |
|
||||||
|
mkdir -p wiitest/apps/ClassiCube
|
||||||
|
cp ClassiCube-wii.dol wiitest/apps/ClassiCube/boot.dol
|
||||||
|
cp misc/wii/icon.png wiitest/apps/ClassiCube/icon.png
|
||||||
|
cp misc/wii/meta.xml wiitest/apps/ClassiCube/meta.xml
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-wii.dol'
|
||||||
|
DEST_NAME: 'ClassiCube-wii.dol'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-wii.elf'
|
||||||
|
DEST_NAME: 'ClassiCube-wii.elf'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'wiitest'
|
||||||
|
DEST_NAME: 'ClassiCube-Wii-Homebrew'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_success
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
DESTINATION_URL: '${{ secrets.NOTIFY_URL }}'
|
||||||
|
WORKFLOW_NAME: 'wii'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce Wii build'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
@ -0,0 +1,58 @@
|
||||||
|
name: Build latest (WiiU)
|
||||||
|
# trigger via either push to selected branches or on manual run
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}-wiiu
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: devkitpro/devkitppc:latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Compile Wii U build
|
||||||
|
id: compile
|
||||||
|
run: |
|
||||||
|
make wiiu
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-wiiu.wuhb'
|
||||||
|
DEST_NAME: 'ClassiCube-wiiu.wuhb'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-wiiu.rpx'
|
||||||
|
DEST_NAME: 'ClassiCube-wiiu.rpx'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-wiiu.elf'
|
||||||
|
DEST_NAME: 'ClassiCube-wiiu.elf'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_success
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
DESTINATION_URL: '${{ secrets.NOTIFY_URL }}'
|
||||||
|
WORKFLOW_NAME: 'wiiu'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce WiiU build'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
@ -0,0 +1,92 @@
|
||||||
|
name: Build latest (Windows ARM32/64)
|
||||||
|
# trigger via either push to selected branches or on manual run
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}-windows-arm
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
#============================================
|
||||||
|
# ============== ARM32 WINDOWS ==============
|
||||||
|
# ===========================================
|
||||||
|
build-32:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: dockcross/windows-armv7
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Compile ARM32 Windows builds
|
||||||
|
shell: bash
|
||||||
|
id: compile
|
||||||
|
env:
|
||||||
|
LIBS: "-lwinmm -limagehlp"
|
||||||
|
SRCS: "src/*.c third_party/bearssl/*.c"
|
||||||
|
COMMON_FLAGS: "-O1 -s -fno-stack-protector -fno-math-errno -Qn"
|
||||||
|
WIN32_FLAGS: "-mwindows -nostartfiles -Wl,-emain_real -DCC_NOMAIN -DCC_GFX_BACKEND=CC_GFX_BACKEND_D3D11"
|
||||||
|
run: |
|
||||||
|
LATEST_FLAG=-DCC_COMMIT_SHA=\"${GITHUB_SHA::9}\"
|
||||||
|
|
||||||
|
armv7-w64-mingw32-gcc ${{ env.SRCS }} ${{ env.COMMON_FLAGS }} ${{ env.WIN32_FLAGS }} -o cc-arm32-d3d11.exe $LATEST_FLAG ${{ env.LIBS }}
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-arm32-d3d11.exe'
|
||||||
|
DEST_NAME: 'ClassiCube-arm32-Direct3D11.exe'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce 32 bit Windows-ARM build'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
#============================================
|
||||||
|
# ============== ARM64 WINDOWS ==============
|
||||||
|
# ===========================================
|
||||||
|
build-64:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: dockcross/windows-arm64
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Compile ARM64 Windows builds
|
||||||
|
shell: bash
|
||||||
|
id: compile
|
||||||
|
env:
|
||||||
|
LIBS: "-lwinmm -limagehlp"
|
||||||
|
SRCS: "src/*.c third_party/bearssl/*.c"
|
||||||
|
COMMON_FLAGS: "-O1 -s -fno-stack-protector -fno-math-errno -Qn"
|
||||||
|
WIN64_FLAGS: "-mwindows -nostartfiles -Wl,-emain_real -DCC_NOMAIN -DCC_GFX_BACKEND=CC_GFX_BACKEND_D3D11"
|
||||||
|
run: |
|
||||||
|
LATEST_FLAG=-DCC_COMMIT_SHA=\"${GITHUB_SHA::9}\"
|
||||||
|
|
||||||
|
aarch64-w64-mingw32-gcc ${{ env.SRCS }} ${{ env.COMMON_FLAGS }} ${{ env.WIN64_FLAGS }} -o cc-arm64-d3d11.exe $LATEST_FLAG ${{ env.LIBS }}
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce 64 bit Windows build'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-arm64-d3d11.exe'
|
||||||
|
DEST_NAME: 'ClassiCube-arm64-Direct3D11.exe'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce 64 bit Windows-ARM build'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
@ -0,0 +1,151 @@
|
||||||
|
name: Build latest (Windows)
|
||||||
|
# trigger via either push to selected branches or on manual run
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
- ModernLighting
|
||||||
|
- AngledLighting
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}-windows
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
#============================================
|
||||||
|
# ============== 32 BIT WINDOWS =============
|
||||||
|
# ===========================================
|
||||||
|
build-32:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install packages
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
sudo apt-get -y install gcc-mingw-w64-i686
|
||||||
|
|
||||||
|
- name: Compile 32 bit Windows builds
|
||||||
|
shell: bash
|
||||||
|
id: compile
|
||||||
|
env:
|
||||||
|
LIBS: "-lwinmm -limagehlp"
|
||||||
|
SRCS: "src/*.c third_party/bearssl/*.c"
|
||||||
|
COMMON_FLAGS: "-O1 -s -fno-stack-protector -fno-math-errno -Qn"
|
||||||
|
WIN32_FLAGS: "-mwindows -nostartfiles -Wl,-e_main_real -DCC_NOMAIN src/CCicon_32.res"
|
||||||
|
run: |
|
||||||
|
LATEST_FLAG=-DCC_COMMIT_SHA=\"$(git rev-parse --short "$GITHUB_SHA")\"
|
||||||
|
cp misc/windows/CCicon_32.res src/CCicon_32.res
|
||||||
|
|
||||||
|
i686-w64-mingw32-gcc ${{ env.SRCS }} ${{ env.COMMON_FLAGS }} ${{ env.WIN32_FLAGS }} -o cc-w32-d3d9.exe $LATEST_FLAG ${{ env.LIBS }}
|
||||||
|
i686-w64-mingw32-gcc ${{ env.SRCS }} ${{ env.COMMON_FLAGS }} ${{ env.WIN32_FLAGS }} -o cc-w32-ogl.exe $LATEST_FLAG -DCC_GFX_BACKEND=CC_GFX_BACKEND_GL1 ${{ env.LIBS }}
|
||||||
|
i686-w64-mingw32-gcc ${{ env.SRCS }} ${{ env.COMMON_FLAGS }} ${{ env.WIN32_FLAGS }} -o cc-w32-d3d11.exe $LATEST_FLAG -DCC_GFX_BACKEND=CC_GFX_BACKEND_D3D11 ${{ env.LIBS }}
|
||||||
|
|
||||||
|
# mingw defaults to i686, but some really old CPUs only support i586
|
||||||
|
i686-w64-mingw32-gcc ${{ env.SRCS }} ${{ env.COMMON_FLAGS }} ${{ env.WIN32_FLAGS }} -march=i586 -o cc-w9x-ogl.exe $LATEST_FLAG -DCC_GFX_BACKEND=CC_GFX_BACKEND_GL1 -DCC_BUILD_NOSTDLIB ${{ env.LIBS }}
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-w32-d3d9.exe'
|
||||||
|
DEST_NAME: 'ClassiCube-Win32-Direct3D9.exe'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-w32-ogl.exe'
|
||||||
|
DEST_NAME: 'ClassiCube-Win32-OpenGL.exe'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-w32-d3d11.exe'
|
||||||
|
DEST_NAME: 'ClassiCube-Win32-Direct3D11.exe'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-w9x-ogl.exe'
|
||||||
|
DEST_NAME: 'ClassiCube-Win9x.exe'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_success
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
DESTINATION_URL: '${{ secrets.NOTIFY_URL }}'
|
||||||
|
WORKFLOW_NAME: 'win32'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce 32 bit Windows build'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
||||||
|
|
||||||
|
#============================================
|
||||||
|
# ============== 64 BIT WINDOWS =============
|
||||||
|
# ===========================================
|
||||||
|
build-64:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install packages
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
sudo apt-get -y install gcc-mingw-w64-x86-64
|
||||||
|
|
||||||
|
- name: Compile 64 bit Windows builds
|
||||||
|
shell: bash
|
||||||
|
id: compile
|
||||||
|
env:
|
||||||
|
LIBS: "-lwinmm -limagehlp"
|
||||||
|
SRCS: "src/*.c third_party/bearssl/*.c"
|
||||||
|
COMMON_FLAGS: "-O1 -s -fno-stack-protector -fno-math-errno -Qn"
|
||||||
|
WIN64_FLAGS: "-mwindows -nostartfiles -Wl,-emain_real -DCC_NOMAIN src/CCicon_64.res"
|
||||||
|
run: |
|
||||||
|
LATEST_FLAG=-DCC_COMMIT_SHA=\"$(git rev-parse --short "$GITHUB_SHA")\"
|
||||||
|
|
||||||
|
cp misc/windows/CCicon_64.res src/CCicon_64.res
|
||||||
|
x86_64-w64-mingw32-gcc ${{ env.SRCS }} ${{ env.COMMON_FLAGS }} ${{ env.WIN64_FLAGS }} -o cc-w64-d3d9.exe $LATEST_FLAG ${{ env.LIBS }}
|
||||||
|
x86_64-w64-mingw32-gcc ${{ env.SRCS }} ${{ env.COMMON_FLAGS }} ${{ env.WIN64_FLAGS }} -o cc-w64-ogl.exe $LATEST_FLAG -DCC_GFX_BACKEND=CC_GFX_BACKEND_GL1 ${{ env.LIBS }}
|
||||||
|
x86_64-w64-mingw32-gcc ${{ env.SRCS }} ${{ env.COMMON_FLAGS }} ${{ env.WIN64_FLAGS }} -o cc-w64-d3d11.exe $LATEST_FLAG -DCC_GFX_BACKEND=CC_GFX_BACKEND_D3D11 ${{ env.LIBS }}
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-w64-d3d9.exe'
|
||||||
|
DEST_NAME: 'ClassiCube-Win64-Direct3D9.exe'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-w64-ogl.exe'
|
||||||
|
DEST_NAME: 'ClassiCube-Win64-OpenGL.exe'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-w64-d3d11.exe'
|
||||||
|
DEST_NAME: 'ClassiCube-Win64-Direct3D11.exe'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_success
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
DESTINATION_URL: '${{ secrets.NOTIFY_URL }}'
|
||||||
|
WORKFLOW_NAME: 'win64'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce 64 bit Windows build'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
@ -0,0 +1,57 @@
|
||||||
|
name: Build latest (Xbox)
|
||||||
|
# trigger via either push to selected branches or on manual run
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}-xbox
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: ghcr.io/xboxdev/nxdk:git-e955705a
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Install prerequisites
|
||||||
|
run: |
|
||||||
|
apk add curl curl-dev
|
||||||
|
|
||||||
|
- name: Compile Xbox build
|
||||||
|
id: compile
|
||||||
|
run: |
|
||||||
|
eval $(/usr/src/nxdk/bin/activate -s)
|
||||||
|
make xbox
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-xbox.xbe'
|
||||||
|
DEST_NAME: 'ClassiCube-xbox.xbe'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-xbox.iso'
|
||||||
|
DEST_NAME: 'ClassiCube-xbox.iso'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_success
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
DESTINATION_URL: '${{ secrets.NOTIFY_URL }}'
|
||||||
|
WORKFLOW_NAME: 'xbox'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce Xbox build'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
@ -0,0 +1,60 @@
|
||||||
|
name: Build latest (Xbox 360)
|
||||||
|
# trigger via either push to selected branches or on manual run
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}-xbox360
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
timeout-minutes: 10
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: free60/libxenon
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Install prerequisites
|
||||||
|
run: |
|
||||||
|
sed -i -e 's/archive.ubuntu.com\|security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list
|
||||||
|
apt-get update
|
||||||
|
apt-get install -y curl
|
||||||
|
|
||||||
|
- name: Compile 360 build
|
||||||
|
id: compile
|
||||||
|
run: |
|
||||||
|
export DEVKITXENON=/usr/local/xenon
|
||||||
|
export PATH=$PATH:$DEVKITXENON/bin:$DEVKITXENON/usr/bin
|
||||||
|
make xbox360
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-xbox360.elf'
|
||||||
|
DEST_NAME: 'ClassiCube-xbox360.elf'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'ClassiCube-xbox360.elf32'
|
||||||
|
DEST_NAME: 'ClassiCube-xbox360.elf32'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_success
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
DESTINATION_URL: '${{ secrets.NOTIFY_URL }}'
|
||||||
|
WORKFLOW_NAME: 'xbox360'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce Xbox 360 build'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
@ -0,0 +1,222 @@
|
||||||
|
name: Produce release
|
||||||
|
on: [workflow_dispatch]
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}-release
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
# Download resources
|
||||||
|
- name: Retrieve classicube texture pack
|
||||||
|
run: |
|
||||||
|
wget https://www.classicube.net/static/default.zip
|
||||||
|
- name: Retrieve classicube audio pack
|
||||||
|
run: |
|
||||||
|
wget https://www.classicube.net/static/audio.zip
|
||||||
|
|
||||||
|
# Download windows artifacts
|
||||||
|
- name: Retrieve Windows binaries
|
||||||
|
run: |
|
||||||
|
wget https://cdn.classicube.net/client/latest/ClassiCube.64.exe -O cc-w64.exe
|
||||||
|
wget https://cdn.classicube.net/client/latest/ClassiCube.exe -O cc-w32.exe
|
||||||
|
wget https://cdn.classicube.net/client/latest/cc-w9x.exe -O cc-w9x.exe
|
||||||
|
|
||||||
|
# Download Linux artifacts
|
||||||
|
- name: Retrieve Linux binaries
|
||||||
|
run: |
|
||||||
|
wget https://cdn.classicube.net/client/latest/ClassiCube -O cc-linux-64
|
||||||
|
wget https://cdn.classicube.net/client/latest/ClassiCube.32 -O cc-linux-32
|
||||||
|
|
||||||
|
# Download macOS artifacts
|
||||||
|
- name: Retrieve macOS binaries
|
||||||
|
run: |
|
||||||
|
wget https://cdn.classicube.net/client/latest/ClassiCube.64.osx -O cc-mac-64
|
||||||
|
wget https://cdn.classicube.net/client/latest/ClassiCube.osx -O cc-mac-32
|
||||||
|
|
||||||
|
# Download RPI artifacts
|
||||||
|
- name: Retrieve RPI binaries
|
||||||
|
run: |
|
||||||
|
wget https://cdn.classicube.net/client/latest/cc-rpi64 -O cc-rpi-64
|
||||||
|
wget https://cdn.classicube.net/client/latest/ClassiCube.rpi -O cc-rpi-32
|
||||||
|
|
||||||
|
# Download FreeBSD artifacts
|
||||||
|
- name: Retrieve FreeBSD binaries
|
||||||
|
run: |
|
||||||
|
wget https://cdn.classicube.net/client/latest/cc-freebsd-64 -O cc-freebsd-64
|
||||||
|
wget https://cdn.classicube.net/client/latest/cc-freebsd-32 -O cc-freebsd-32
|
||||||
|
|
||||||
|
# Download NetBSD artifacts
|
||||||
|
- name: Retrieve NetBSD binaries
|
||||||
|
run: |
|
||||||
|
wget https://cdn.classicube.net/client/latest/cc-netbsd-64 -O cc-netbsd-64
|
||||||
|
|
||||||
|
# Download haiku artifacts
|
||||||
|
- name: Retrieve haiku binaries
|
||||||
|
run: |
|
||||||
|
wget https://cdn.classicube.net/client/latest/cc-haiku-64 -O cc-haiku-64
|
||||||
|
|
||||||
|
- name: Generate builds
|
||||||
|
id: compile
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
mkdir ClassiCube
|
||||||
|
mkdir ClassiCube/audio
|
||||||
|
mkdir ClassiCube/texpacks
|
||||||
|
cp audio.zip ClassiCube/audio/classicube.zip
|
||||||
|
cp default.zip ClassiCube/texpacks/classicube.zip
|
||||||
|
|
||||||
|
# ./ClassiCube
|
||||||
|
make_unix_tar() {
|
||||||
|
cp $2 ClassiCube/ClassiCube
|
||||||
|
chmod +x ClassiCube/ClassiCube
|
||||||
|
tar -zcvf $1 ClassiCube
|
||||||
|
rm ClassiCube/ClassiCube
|
||||||
|
}
|
||||||
|
|
||||||
|
# ./ClassiCube
|
||||||
|
make_windows_zip() {
|
||||||
|
cp $2 ClassiCube/ClassiCube.exe
|
||||||
|
zip -r $1 ClassiCube
|
||||||
|
rm ClassiCube/ClassiCube.exe
|
||||||
|
}
|
||||||
|
|
||||||
|
# Generate haiku builds
|
||||||
|
make_unix_tar cc-haiku64.tar.gz cc-haiku-64
|
||||||
|
|
||||||
|
# Generate NetBSD builds
|
||||||
|
make_unix_tar cc-netbsd64.tar.gz cc-netbsd-64
|
||||||
|
|
||||||
|
# Generate FreeBSD builds
|
||||||
|
make_unix_tar cc-freebsd32.tar.gz cc-freebsd-32
|
||||||
|
make_unix_tar cc-freebsd64.tar.gz cc-freebsd-64
|
||||||
|
|
||||||
|
# Generate RPI builds
|
||||||
|
make_unix_tar cc-rpi32.tar.gz cc-rpi-32
|
||||||
|
make_unix_tar cc-rpi64.tar.gz cc-rpi-64
|
||||||
|
|
||||||
|
# Generate macOS builds
|
||||||
|
make_unix_tar cc-mac32.tar.gz cc-mac-32
|
||||||
|
make_unix_tar cc-mac64.tar.gz cc-mac-64
|
||||||
|
|
||||||
|
# Generate Windows builds
|
||||||
|
make_windows_zip cc-win32.zip cc-w32.exe
|
||||||
|
make_windows_zip cc-win64.zip cc-w64.exe
|
||||||
|
|
||||||
|
# Generate Linux builds
|
||||||
|
# NOTE: Must be last since it adds linux specific file
|
||||||
|
cp misc/linux/install-desktop-entry.sh ClassiCube/install-desktop-entry.sh
|
||||||
|
chmod +x ClassiCube/install-desktop-entry.sh
|
||||||
|
|
||||||
|
make_unix_tar cc-linux32.tar.gz cc-linux-32
|
||||||
|
make_unix_tar cc-linux64.tar.gz cc-linux-64
|
||||||
|
|
||||||
|
|
||||||
|
# Generate Linux release files
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-linux32.tar.gz'
|
||||||
|
DEST_NAME: 'cc-linux32.tar.gz'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-linux64.tar.gz'
|
||||||
|
DEST_NAME: 'cc-linux64.tar.gz'
|
||||||
|
|
||||||
|
|
||||||
|
# Generate macOS release files
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-mac32.tar.gz'
|
||||||
|
DEST_NAME: 'cc-mac32.tar.gz'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-mac64.tar.gz'
|
||||||
|
DEST_NAME: 'cc-mac64.tar.gz'
|
||||||
|
|
||||||
|
|
||||||
|
# Generate Windows release files
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-win32.zip'
|
||||||
|
DEST_NAME: 'cc-win32.zip'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-win64.zip'
|
||||||
|
DEST_NAME: 'cc-win64.zip'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-w9x.exe'
|
||||||
|
DEST_NAME: 'cc-win9x.exe'
|
||||||
|
|
||||||
|
|
||||||
|
# Generate RPI release files
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-rpi32.tar.gz'
|
||||||
|
DEST_NAME: 'cc-rpi32.tar.gz'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-rpi64.tar.gz'
|
||||||
|
DEST_NAME: 'cc-rpi64.tar.gz'
|
||||||
|
|
||||||
|
|
||||||
|
# Generate FreeBSD release files
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-freebsd32.tar.gz'
|
||||||
|
DEST_NAME: 'cc-freebsd32.tar.gz'
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-freebsd64.tar.gz'
|
||||||
|
DEST_NAME: 'cc-freebsd64.tar.gz'
|
||||||
|
|
||||||
|
|
||||||
|
# Generate NetBSD release files
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-netbsd64.tar.gz'
|
||||||
|
DEST_NAME: 'cc-netbsd64.tar.gz'
|
||||||
|
|
||||||
|
|
||||||
|
# Generate haiku release files
|
||||||
|
- uses: ./.github/actions/upload_build
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
SOURCE_FILE: 'cc-haiku64.tar.gz'
|
||||||
|
DEST_NAME: 'cc-haiku64.tar.gz'
|
||||||
|
|
||||||
|
|
||||||
|
- uses: ./.github/actions/notify_success
|
||||||
|
if: ${{ always() && steps.compile.outcome == 'success' }}
|
||||||
|
with:
|
||||||
|
DESTINATION_URL: '${{ secrets.NOTIFY_URL }}'
|
||||||
|
WORKFLOW_NAME: 'release'
|
||||||
|
|
||||||
|
|
||||||
|
# Log any failure
|
||||||
|
- uses: ./.github/actions/notify_failure
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
NOTIFY_MESSAGE: 'Failed to produce release'
|
||||||
|
WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}'
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
## Ignore Visual Studio temporary files, build results, and
|
## Ignore Visual Studio temporary files, build results, and
|
||||||
## files generated by popular Visual Studio add-ons.
|
## files generated by popular Visual Studio add-ons.
|
||||||
|
|
||||||
# User-specific files
|
# Visual studio User-specific files
|
||||||
*.suo
|
*.suo
|
||||||
*.user
|
*.user
|
||||||
*.sln.docstates
|
*.sln.docstates
|
||||||
|
|
@ -11,6 +11,8 @@
|
||||||
*.VC.VC.opendb
|
*.VC.VC.opendb
|
||||||
|
|
||||||
# Android build results
|
# Android build results
|
||||||
|
android/app/.cxx/
|
||||||
|
android/.cxx/
|
||||||
android/.idea/
|
android/.idea/
|
||||||
android/.gradle/
|
android/.gradle/
|
||||||
android/build/
|
android/build/
|
||||||
|
|
@ -19,19 +21,50 @@ android/app/.externalNativeBuild/
|
||||||
android/local.properties
|
android/local.properties
|
||||||
*.iml
|
*.iml
|
||||||
|
|
||||||
|
#XCode stuff
|
||||||
|
project.xcworkspace/
|
||||||
|
xcuserdata/
|
||||||
|
|
||||||
|
# Nintendo Console build results
|
||||||
|
build-nds/
|
||||||
|
build-dsi/
|
||||||
|
build-n64/
|
||||||
|
classicube.nds
|
||||||
|
|
||||||
|
# SEGA console build results
|
||||||
|
IP.BIN
|
||||||
|
ISO_FILES/
|
||||||
|
cd/
|
||||||
|
|
||||||
|
# Microsoft console build results
|
||||||
|
build-360/
|
||||||
|
main.exe
|
||||||
|
main.lib
|
||||||
|
misc/xbox/ps_coloured.inl
|
||||||
|
misc/xbox/ps_textured.inl
|
||||||
|
misc/xbox/vs_coloured.inl
|
||||||
|
misc/xbox/vs_textured.inl
|
||||||
|
|
||||||
|
# Sony console build results
|
||||||
|
EBOOT.PBP
|
||||||
|
PARAM.SFO
|
||||||
|
param.sfo
|
||||||
|
eboot.bin
|
||||||
|
pkg.gp4
|
||||||
|
|
||||||
# Build results
|
# Build results
|
||||||
[Dd]ebug/
|
[Dd]ebug/
|
||||||
[Dd]ebugPublic/
|
|
||||||
[Rr]elease/
|
[Rr]elease/
|
||||||
[Rr]eleases/
|
|
||||||
x64/
|
x64/
|
||||||
x86/
|
x86/
|
||||||
build/
|
build/
|
||||||
bld/
|
|
||||||
[Bb]in/
|
[Bb]in/
|
||||||
[Oo]bj/
|
[Oo]bj/
|
||||||
[Oo]utput/
|
[Oo]utput/
|
||||||
[Pp]rofilingSessions/
|
[Pp]rofilingSessions/
|
||||||
|
src/.vs/
|
||||||
|
|
||||||
|
# ClassiCube game files
|
||||||
src/audio
|
src/audio
|
||||||
src/texpacks
|
src/texpacks
|
||||||
src/maps
|
src/maps
|
||||||
|
|
@ -41,9 +74,43 @@ src/options.txt
|
||||||
src/ClassiCube*
|
src/ClassiCube*
|
||||||
src/screenshots
|
src/screenshots
|
||||||
src/fontscache.txt
|
src/fontscache.txt
|
||||||
src/.vs/
|
|
||||||
|
# ClassiCube game files
|
||||||
|
audio
|
||||||
|
texpacks
|
||||||
|
maps
|
||||||
|
texturecache
|
||||||
|
logs
|
||||||
|
options.txt
|
||||||
|
ClassiCube*
|
||||||
|
screenshots
|
||||||
|
fontscache.txt
|
||||||
|
|
||||||
|
# DOS files
|
||||||
|
CWSDPMI.EXE
|
||||||
|
CWSDPMI.SWP
|
||||||
|
OPTIONS.TXT
|
||||||
|
CCDOS.EXE
|
||||||
|
|
||||||
|
# Android source files need to be included
|
||||||
|
!android/app/src/main/java/com/classicube
|
||||||
|
|
||||||
|
# Flatpak wrapper needs to be included
|
||||||
|
!misc/flatpak/ClassiCubeLauncher
|
||||||
|
|
||||||
|
# UWP files needs to be included
|
||||||
|
!misc/UWP/ClassiCube-UWP.sln
|
||||||
|
!misc/UWP/ClassiCube-UWP.vcxproj
|
||||||
|
!misc/UWP/ClassiCube-UWP.vcxproj.filters
|
||||||
|
|
||||||
|
# CMake files
|
||||||
|
CMakeFiles/
|
||||||
|
CMakeCache.txt
|
||||||
|
|
||||||
#GCC object files
|
#GCC object files
|
||||||
*.o
|
*.o
|
||||||
|
# Build dependency files
|
||||||
|
*.d
|
||||||
|
|
||||||
# Roslyn cache directories
|
# Roslyn cache directories
|
||||||
*.ide/
|
*.ide/
|
||||||
|
|
@ -61,6 +128,12 @@ TestResult.xml
|
||||||
[Rr]eleasePS/
|
[Rr]eleasePS/
|
||||||
dlldata.c
|
dlldata.c
|
||||||
|
|
||||||
|
# Mac classic
|
||||||
|
retro68scripts/
|
||||||
|
|
||||||
|
# PS2
|
||||||
|
openvcl/
|
||||||
|
|
||||||
*_i.c
|
*_i.c
|
||||||
*_p.c
|
*_p.c
|
||||||
*_i.h
|
*_i.h
|
||||||
|
|
@ -85,9 +158,11 @@ dlldata.c
|
||||||
*.pidb
|
*.pidb
|
||||||
*.svclog
|
*.svclog
|
||||||
*.scc
|
*.scc
|
||||||
|
*.map
|
||||||
|
|
||||||
# Chutzpah Test files
|
# Binary files
|
||||||
_Chutzpah*
|
*.bin
|
||||||
|
*.elf
|
||||||
|
|
||||||
# Visual C++ cache files
|
# Visual C++ cache files
|
||||||
ipch/
|
ipch/
|
||||||
|
|
@ -102,61 +177,14 @@ ipch/
|
||||||
*.vsp
|
*.vsp
|
||||||
*.vspx
|
*.vspx
|
||||||
|
|
||||||
# TFS 2012 Local Workspace
|
|
||||||
$tf/
|
|
||||||
|
|
||||||
# Guidance Automation Toolkit
|
|
||||||
*.gpState
|
|
||||||
|
|
||||||
# ReSharper is a .NET coding add-in
|
# ReSharper is a .NET coding add-in
|
||||||
_ReSharper*/
|
_ReSharper*/
|
||||||
*.[Rr]e[Ss]harper
|
*.[Rr]e[Ss]harper
|
||||||
*.DotSettings.user
|
*.DotSettings.user
|
||||||
|
|
||||||
# JustCode is a .NET coding addin-in
|
|
||||||
.JustCode
|
|
||||||
|
|
||||||
# TeamCity is a build add-in
|
|
||||||
_TeamCity*
|
|
||||||
|
|
||||||
# DotCover is a Code Coverage Tool
|
|
||||||
*.dotCover
|
|
||||||
|
|
||||||
# NCrunch
|
|
||||||
_NCrunch_*
|
|
||||||
.*crunch*.local.xml
|
|
||||||
|
|
||||||
# MightyMoose
|
|
||||||
*.mm.*
|
|
||||||
AutoTest.Net/
|
|
||||||
|
|
||||||
# Web workbench (sass)
|
|
||||||
.sass-cache/
|
|
||||||
|
|
||||||
# Installshield output folder
|
# Installshield output folder
|
||||||
[Ee]xpress/
|
[Ee]xpress/
|
||||||
|
|
||||||
# DocProject is a documentation generator add-in
|
|
||||||
DocProject/buildhelp/
|
|
||||||
DocProject/Help/*.HxT
|
|
||||||
DocProject/Help/*.HxC
|
|
||||||
DocProject/Help/*.hhc
|
|
||||||
DocProject/Help/*.hhk
|
|
||||||
DocProject/Help/*.hhp
|
|
||||||
DocProject/Help/Html2
|
|
||||||
DocProject/Help/html
|
|
||||||
|
|
||||||
# Click-Once directory
|
|
||||||
publish/
|
|
||||||
|
|
||||||
# Publish Web Output
|
|
||||||
*.[Pp]ublish.xml
|
|
||||||
*.azurePubxml
|
|
||||||
# TODO: Comment the next line if you want to checkin your web deploy settings
|
|
||||||
# but database connection strings (with potential passwords) will be unencrypted
|
|
||||||
*.pubxml
|
|
||||||
*.publishproj
|
|
||||||
|
|
||||||
# NuGet Packages
|
# NuGet Packages
|
||||||
*.nupkg
|
*.nupkg
|
||||||
# The packages folder can be ignored because of Package Restore
|
# The packages folder can be ignored because of Package Restore
|
||||||
|
|
@ -183,11 +211,6 @@ ClientBin/
|
||||||
*.dbmdl
|
*.dbmdl
|
||||||
*.dbproj.schemaview
|
*.dbproj.schemaview
|
||||||
*.pfx
|
*.pfx
|
||||||
*.publishsettings
|
|
||||||
node_modules/
|
|
||||||
|
|
||||||
# RIA/Silverlight projects
|
|
||||||
Generated_Code/
|
|
||||||
|
|
||||||
# Backup & report files from converting an old project file
|
# Backup & report files from converting an old project file
|
||||||
# to a newer Visual Studio version. Backup files are not needed,
|
# to a newer Visual Studio version. Backup files are not needed,
|
||||||
|
|
@ -197,14 +220,6 @@ Backup*/
|
||||||
UpgradeLog*.XML
|
UpgradeLog*.XML
|
||||||
UpgradeLog*.htm
|
UpgradeLog*.htm
|
||||||
|
|
||||||
# SQL Server files
|
# Eclipse
|
||||||
*.mdf
|
.cproject
|
||||||
*.ldf
|
.project
|
||||||
|
|
||||||
# Business Intelligence projects
|
|
||||||
*.rdl.data
|
|
||||||
*.bim.layout
|
|
||||||
*.bim_*.settings
|
|
||||||
|
|
||||||
# Microsoft Fakes
|
|
||||||
FakesAssemblies/
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,371 @@
|
||||||
|
SOURCE_DIR = src
|
||||||
|
BUILD_DIR = build
|
||||||
|
C_SOURCES = $(wildcard $(SOURCE_DIR)/*.c)
|
||||||
|
OBJECTS = $(patsubst %.c, $(BUILD_DIR)/%.o, $(C_SOURCES))
|
||||||
|
BUILD_DIRS = $(BUILD_DIR) $(BUILD_DIR)/src
|
||||||
|
|
||||||
|
##############################
|
||||||
|
# Configurable flags and names
|
||||||
|
##############################
|
||||||
|
# Flags passed to the C compiler
|
||||||
|
CFLAGS = -pipe -fno-math-errno -Werror -Wno-error=missing-braces -Wno-error=strict-aliasing
|
||||||
|
# Flags passed to the linker
|
||||||
|
LDFLAGS = -g -rdynamic
|
||||||
|
# Name of the main executable
|
||||||
|
ENAME = ClassiCube
|
||||||
|
# Name of the final target file
|
||||||
|
# (usually this is the executable, but e.g. is the app bundle on macOS)
|
||||||
|
TARGET := $(ENAME)
|
||||||
|
|
||||||
|
# Enables dependency tracking (https://make.mad-scientist.net/papers/advanced-auto-dependency-generation/)
|
||||||
|
# This ensures that changing a .h file automatically results in the .c files using it being auto recompiled when next running make
|
||||||
|
# On older systems the required GCC options may not be supported - in which case just change TRACK_DEPENDENCIES to 0
|
||||||
|
TRACK_DEPENDENCIES=1
|
||||||
|
# link using C Compiler by default
|
||||||
|
LINK = $(CC)
|
||||||
|
# Whether to add BearSSL source files to list of files to compile
|
||||||
|
BEARSSL=1
|
||||||
|
# Optimization level in release builds
|
||||||
|
OPT_LEVEL=1
|
||||||
|
|
||||||
|
|
||||||
|
#################################################################
|
||||||
|
# Determine shell command used to remove files (for "make clean")
|
||||||
|
#################################################################
|
||||||
|
ifndef RM
|
||||||
|
# No prefined RM variable, try to guess OS default
|
||||||
|
ifeq ($(OS),Windows_NT)
|
||||||
|
RM = del
|
||||||
|
else
|
||||||
|
RM = rm -f
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
###########################################################
|
||||||
|
# If target platform isn't specified, default to current OS
|
||||||
|
###########################################################
|
||||||
|
ifndef $(PLAT)
|
||||||
|
ifeq ($(OS),Windows_NT)
|
||||||
|
PLAT = mingw
|
||||||
|
else
|
||||||
|
PLAT = $(shell uname -s | tr '[:upper:]' '[:lower:]')
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
#########################################################
|
||||||
|
# Setup environment appropriate for the specific platform
|
||||||
|
#########################################################
|
||||||
|
ifeq ($(PLAT),web)
|
||||||
|
CC = emcc
|
||||||
|
OEXT = .html
|
||||||
|
CFLAGS = -g
|
||||||
|
LDFLAGS = -g -s WASM=1 -s NO_EXIT_RUNTIME=1 -s ABORTING_MALLOC=0 -s ALLOW_MEMORY_GROWTH=1 -s TOTAL_STACK=256Kb --js-library $(SOURCE_DIR)/webclient/interop_web.js
|
||||||
|
BUILD_DIR = build/web
|
||||||
|
BEARSSL = 0
|
||||||
|
|
||||||
|
BUILD_DIRS += $(BUILD_DIR)/src/webclient
|
||||||
|
C_SOURCES += $(wildcard src/webclient/*.c)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(PLAT),mingw)
|
||||||
|
CC = gcc
|
||||||
|
OEXT = .exe
|
||||||
|
CFLAGS += -DUNICODE
|
||||||
|
LDFLAGS = -g
|
||||||
|
LIBS = -mwindows -lwinmm
|
||||||
|
BUILD_DIR = build/win
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(PLAT),linux)
|
||||||
|
# -lm may be needed for __builtin_sqetf (in cases where it isn't replaced by a CPU instruction intrinsic)
|
||||||
|
LIBS = -lX11 -lXi -lpthread -lGL -ldl -lm
|
||||||
|
BUILD_DIR = build/linux
|
||||||
|
|
||||||
|
# Detect MCST LCC, where -O3 is about equivalent to -O1
|
||||||
|
ifeq ($(shell $(CC) -dM -E -xc - < /dev/null | grep -o __MCST__),__MCST__)
|
||||||
|
OPT_LEVEL=3
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(PLAT),sunos)
|
||||||
|
LIBS = -lsocket -lX11 -lXi -lGL
|
||||||
|
BUILD_DIR = build/solaris
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(PLAT),hp-ux)
|
||||||
|
CC = gcc
|
||||||
|
CFLAGS += -std=c99 -D_POSIX_C_SOURCE=200112L -D_XOPEN_SOURCE=600 -D_DEFAULT_SOURCE -D_BSD_SOURCE
|
||||||
|
LDFLAGS =
|
||||||
|
LIBS = -lm -lX11 -lXi -lXext -L/opt/graphics/OpenGL/lib/hpux32 -lGL -lpthread
|
||||||
|
BUILD_DIR = build/hpux
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(PLAT),darwin)
|
||||||
|
OBJECTS += $(BUILD_DIR)/src/Window_cocoa.o
|
||||||
|
LIBS =
|
||||||
|
LDFLAGS = -rdynamic -framework Security -framework Cocoa -framework OpenGL -framework IOKit -lobjc
|
||||||
|
BUILD_DIR = build/macos
|
||||||
|
TARGET = $(ENAME).app
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(PLAT),freebsd)
|
||||||
|
CFLAGS += -I /usr/local/include
|
||||||
|
LDFLAGS = -L /usr/local/lib -rdynamic
|
||||||
|
LIBS = -lexecinfo -lGL -lX11 -lXi -lpthread
|
||||||
|
BUILD_DIR = build/freebsd
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(PLAT),openbsd)
|
||||||
|
CFLAGS += -I /usr/X11R6/include -I /usr/local/include
|
||||||
|
LDFLAGS = -L /usr/X11R6/lib -L /usr/local/lib -rdynamic
|
||||||
|
LIBS = -lexecinfo -lGL -lX11 -lXi -lpthread
|
||||||
|
BUILD_DIR = build/openbsd
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(PLAT),netbsd)
|
||||||
|
CFLAGS += -I /usr/X11R7/include -I /usr/pkg/include
|
||||||
|
LDFLAGS = -L /usr/X11R7/lib -L /usr/pkg/lib -rdynamic -Wl,-R/usr/X11R7/lib
|
||||||
|
LIBS = -lexecinfo -lGL -lX11 -lXi -lpthread
|
||||||
|
BUILD_DIR = build/netbsd
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(PLAT),dragonfly)
|
||||||
|
CFLAGS += -I /usr/local/include
|
||||||
|
LDFLAGS = -L /usr/local/lib -rdynamic
|
||||||
|
LIBS = -lexecinfo -lGL -lX11 -lXi -lpthread
|
||||||
|
BUILD_DIR = build/flybsd
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(PLAT),haiku)
|
||||||
|
OBJECTS += $(BUILD_DIR)/src/Platform_BeOS.o $(BUILD_DIR)/src/Window_BeOS.o
|
||||||
|
CFLAGS = -pipe -fno-math-errno
|
||||||
|
LDFLAGS = -g
|
||||||
|
LINK = $(CXX)
|
||||||
|
LIBS = -lGL -lnetwork -lbe -lgame -ltracker
|
||||||
|
BUILD_DIR = build/haiku
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(PLAT),beos)
|
||||||
|
OBJECTS += $(BUILD_DIR)/src/Platform_BeOS.o $(BUILD_DIR)/src/Window_BeOS.o
|
||||||
|
CFLAGS = -pipe
|
||||||
|
LDFLAGS = -g
|
||||||
|
LINK = $(CXX)
|
||||||
|
LIBS = -lGL -lnetwork -lbe -lgame -ltracker
|
||||||
|
BUILD_DIR = build/beos
|
||||||
|
TRACK_DEPENDENCIES = 0
|
||||||
|
BEARSSL = 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(PLAT),serenityos)
|
||||||
|
LIBS = -lgl -lSDL2
|
||||||
|
BUILD_DIR = build/serenity
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(PLAT),irix)
|
||||||
|
CC = gcc
|
||||||
|
LIBS = -lGL -lX11 -lXi -lpthread -ldl
|
||||||
|
BUILD_DIR = build/irix
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(PLAT),rpi)
|
||||||
|
CFLAGS += -DCC_BUILD_RPI
|
||||||
|
LIBS = -lpthread -lX11 -lXi -lEGL -lGLESv2 -ldl
|
||||||
|
BUILD_DIR = build/rpi
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(PLAT),riscos)
|
||||||
|
LIBS =
|
||||||
|
LDFLAGS = -g
|
||||||
|
BUILD_DIR = build/riscos
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(PLAT),wince)
|
||||||
|
CC = arm-mingw32ce-gcc
|
||||||
|
OEXT = .exe
|
||||||
|
CFLAGS += -march=armv5te -DUNICODE -D_WIN32_WCE -std=gnu99
|
||||||
|
LDFLAGS = -g
|
||||||
|
LIBS = -lcoredll -lws2
|
||||||
|
BUILD_DIR = build/wince
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef BUILD_SDL2
|
||||||
|
CFLAGS += -DCC_WIN_BACKEND=CC_WIN_BACKEND_SDL2
|
||||||
|
LIBS += -lSDL2
|
||||||
|
endif
|
||||||
|
ifdef BUILD_SDL3
|
||||||
|
CFLAGS += -DCC_WIN_BACKEND=CC_WIN_BACKEND_SDL3
|
||||||
|
LIBS += -lSDL3
|
||||||
|
endif
|
||||||
|
ifdef BUILD_TERMINAL
|
||||||
|
CFLAGS += -DCC_WIN_BACKEND=CC_WIN_BACKEND_TERMINAL -DCC_GFX_BACKEND=CC_GFX_BACKEND_SOFTGPU
|
||||||
|
LIBS := $(subst mwindows,mconsole,$(LIBS))
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(BEARSSL),1)
|
||||||
|
BUILD_DIRS += $(BUILD_DIR)/third_party/bearssl
|
||||||
|
C_SOURCES += $(wildcard third_party/bearssl/*.c)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef RELEASE
|
||||||
|
CFLAGS += -O$(OPT_LEVEL)
|
||||||
|
else
|
||||||
|
CFLAGS += -g
|
||||||
|
endif
|
||||||
|
|
||||||
|
default: $(PLAT)
|
||||||
|
|
||||||
|
# Build for the specified platform
|
||||||
|
web:
|
||||||
|
$(MAKE) $(TARGET) PLAT=web
|
||||||
|
linux:
|
||||||
|
$(MAKE) $(TARGET) PLAT=linux
|
||||||
|
mingw:
|
||||||
|
$(MAKE) $(TARGET) PLAT=mingw
|
||||||
|
sunos:
|
||||||
|
$(MAKE) $(TARGET) PLAT=sunos
|
||||||
|
hp-ux:
|
||||||
|
$(MAKE) $(TARGET) PLAT=hp-ux
|
||||||
|
darwin:
|
||||||
|
$(MAKE) $(TARGET) PLAT=darwin
|
||||||
|
freebsd:
|
||||||
|
$(MAKE) $(TARGET) PLAT=freebsd
|
||||||
|
openbsd:
|
||||||
|
$(MAKE) $(TARGET) PLAT=openbsd
|
||||||
|
netbsd:
|
||||||
|
$(MAKE) $(TARGET) PLAT=netbsd
|
||||||
|
dragonfly:
|
||||||
|
$(MAKE) $(TARGET) PLAT=dragonfly
|
||||||
|
haiku:
|
||||||
|
$(MAKE) $(TARGET) PLAT=haiku
|
||||||
|
beos:
|
||||||
|
$(MAKE) $(TARGET) PLAT=beos
|
||||||
|
serenityos:
|
||||||
|
$(MAKE) $(TARGET) PLAT=serenityos
|
||||||
|
irix:
|
||||||
|
$(MAKE) $(TARGET) PLAT=irix
|
||||||
|
riscos:
|
||||||
|
$(MAKE) $(TARGET) PLAT=riscos
|
||||||
|
wince:
|
||||||
|
$(MAKE) $(TARGET) PLAT=wince
|
||||||
|
# Default overrides
|
||||||
|
sdl2:
|
||||||
|
$(MAKE) $(TARGET) BUILD_SDL2=1
|
||||||
|
sdl3:
|
||||||
|
$(MAKE) $(TARGET) BUILD_SDL3=1
|
||||||
|
terminal:
|
||||||
|
$(MAKE) $(TARGET) BUILD_TERMINAL=1
|
||||||
|
release:
|
||||||
|
$(MAKE) $(TARGET) RELEASE=1
|
||||||
|
|
||||||
|
# Some builds require more complex handling, so are moved to
|
||||||
|
# separate makefiles to avoid having one giant messy makefile
|
||||||
|
32x:
|
||||||
|
$(MAKE) -f misc/32x/Makefile
|
||||||
|
saturn:
|
||||||
|
$(MAKE) -f misc/saturn/Makefile
|
||||||
|
dreamcast:
|
||||||
|
$(MAKE) -f misc/dreamcast/Makefile
|
||||||
|
psp:
|
||||||
|
$(MAKE) -f misc/psp/Makefile
|
||||||
|
vita:
|
||||||
|
$(MAKE) -f misc/vita/Makefile
|
||||||
|
ps1:
|
||||||
|
$(MAKE) -f misc/ps1/Makefile
|
||||||
|
ps2:
|
||||||
|
$(MAKE) -f misc/ps2/Makefile
|
||||||
|
ps3:
|
||||||
|
$(MAKE) -f misc/ps3/Makefile
|
||||||
|
ps4:
|
||||||
|
$(MAKE) -f misc/ps4/Makefile
|
||||||
|
xbox:
|
||||||
|
$(MAKE) -f misc/xbox/Makefile
|
||||||
|
xbox360:
|
||||||
|
$(MAKE) -f misc/xbox360/Makefile
|
||||||
|
n64:
|
||||||
|
$(MAKE) -f misc/n64/Makefile
|
||||||
|
gba:
|
||||||
|
$(MAKE) -f misc/gba/Makefile
|
||||||
|
ds:
|
||||||
|
$(MAKE) -f misc/nds/Makefile
|
||||||
|
3ds:
|
||||||
|
$(MAKE) -f misc/3ds/Makefile
|
||||||
|
gamecube:
|
||||||
|
$(MAKE) -f misc/gc/Makefile
|
||||||
|
wii:
|
||||||
|
$(MAKE) -f misc/wii/Makefile
|
||||||
|
wiiu:
|
||||||
|
$(MAKE) -f misc/wiiu/Makefile
|
||||||
|
switch:
|
||||||
|
$(MAKE) -f misc/switch/Makefile
|
||||||
|
os/2:
|
||||||
|
$(MAKE) -f misc/os2/Makefile
|
||||||
|
dos:
|
||||||
|
$(MAKE) -f misc/msdos/Makefile
|
||||||
|
macclassic_68k:
|
||||||
|
$(MAKE) -f misc/macclassic/Makefile_68k
|
||||||
|
macclassic_ppc:
|
||||||
|
$(MAKE) -f misc/macclassic/Makefile_ppc
|
||||||
|
amiga_gcc:
|
||||||
|
$(MAKE) -f misc/amiga/Makefile_68k
|
||||||
|
amiga:
|
||||||
|
$(MAKE) -f misc/amiga/Makefile
|
||||||
|
atari_st:
|
||||||
|
$(MAKE) -f misc/atari_st/Makefile
|
||||||
|
|
||||||
|
# Cleans up all build .o files
|
||||||
|
clean:
|
||||||
|
$(RM) $(OBJECTS)
|
||||||
|
|
||||||
|
|
||||||
|
#################################################
|
||||||
|
# Source files and executable compilation section
|
||||||
|
#################################################
|
||||||
|
# Auto creates directories for build files (.o and .d files)
|
||||||
|
$(BUILD_DIRS):
|
||||||
|
mkdir -p $@
|
||||||
|
|
||||||
|
# Main executable (typically just 'ClassiCube' or 'ClassiCube.exe')
|
||||||
|
$(ENAME): $(BUILD_DIRS) $(OBJECTS)
|
||||||
|
$(LINK) $(LDFLAGS) -o $@$(OEXT) $(OBJECTS) $(EXTRA_LIBS) $(LIBS)
|
||||||
|
@echo "----------------------------------------------------"
|
||||||
|
@echo "Successfully compiled executable file: $(ENAME)"
|
||||||
|
@echo "----------------------------------------------------"
|
||||||
|
|
||||||
|
# macOS app bundle
|
||||||
|
$(ENAME).app : $(ENAME)
|
||||||
|
mkdir -p $(TARGET)/Contents/MacOS
|
||||||
|
mkdir -p $(TARGET)/Contents/Resources
|
||||||
|
cp $(ENAME) $(TARGET)/Contents/MacOS/$(ENAME)
|
||||||
|
cp misc/macOS/Info.plist $(TARGET)/Contents/Info.plist
|
||||||
|
cp misc/macOS/appicon.icns $(TARGET)/Contents/Resources/appicon.icns
|
||||||
|
|
||||||
|
|
||||||
|
# === Compiling with dependency tracking ===
|
||||||
|
# NOTE: Tracking dependencies might not work on older systems - disable this if so
|
||||||
|
ifeq ($(TRACK_DEPENDENCIES), 1)
|
||||||
|
|
||||||
|
DEPFLAGS = -MT $@ -MMD -MP -MF $(BUILD_DIR)/$*.d
|
||||||
|
DEPFILES := $(patsubst %.o, %.d, $(OBJECTS))
|
||||||
|
$(DEPFILES):
|
||||||
|
|
||||||
|
$(BUILD_DIR)/%.o : %.c $(BUILD_DIR)/%.d
|
||||||
|
$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(DEPFLAGS) -c $< -o $@
|
||||||
|
$(BUILD_DIR)/%.o : %.cpp $(BUILD_DIR)/%.d
|
||||||
|
$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(DEPFLAGS) -c $< -o $@
|
||||||
|
$(BUILD_DIR)/%.o : %.m $(BUILD_DIR)/%.d
|
||||||
|
$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(DEPFLAGS) -c $< -o $@
|
||||||
|
|
||||||
|
include $(wildcard $(DEPFILES))
|
||||||
|
# === Compiling WITHOUT dependency tracking ===
|
||||||
|
else
|
||||||
|
|
||||||
|
$(BUILD_DIR)/%.o : %.c
|
||||||
|
$(CC) $(CFLAGS) $(EXTRA_CFLAGS) -c $< -o $@
|
||||||
|
$(BUILD_DIR)/%.o : %.cpp
|
||||||
|
$(CC) $(CFLAGS) $(EXTRA_CFLAGS) -c $< -o $@
|
||||||
|
endif
|
||||||
|
|
||||||
|
# EXTRA_CFLAGS and EXTRA_LIBS are not defined in the makefile intentionally -
|
||||||
|
# define them on the command line as a simple way of adding CFLAGS/LIBS
|
||||||
|
|
@ -22,7 +22,6 @@ set(${CMAKE_C_FLAGS}, "${CMAKE_C_FLAGS}")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11 -Wall -Werror")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11 -Wall -Werror")
|
||||||
|
|
||||||
add_library(classicube SHARED
|
add_library(classicube SHARED
|
||||||
../../src/Program.c
|
|
||||||
../../src/IsometricDrawer.c
|
../../src/IsometricDrawer.c
|
||||||
../../src/Builder.c
|
../../src/Builder.c
|
||||||
../../src/ExtMath.c
|
../../src/ExtMath.c
|
||||||
|
|
@ -30,10 +29,9 @@ add_library(classicube SHARED
|
||||||
../../src/Utils.c
|
../../src/Utils.c
|
||||||
../../src/Camera.c
|
../../src/Camera.c
|
||||||
../../src/Game.c
|
../../src/Game.c
|
||||||
../../src/Window_Android.c
|
../../src/GameVersion.c
|
||||||
../../src/_ftbase.c
|
../../src/_ftbase.c
|
||||||
../../src/Graphics_GL2.c
|
../../src/Graphics_GL2.c
|
||||||
../../src/_type1cid.c
|
|
||||||
../../src/Deflate.c
|
../../src/Deflate.c
|
||||||
../../src/_cff.c
|
../../src/_cff.c
|
||||||
../../src/_ftsynth.c
|
../../src/_ftsynth.c
|
||||||
|
|
@ -47,16 +45,14 @@ add_library(classicube SHARED
|
||||||
../../src/Vorbis.c
|
../../src/Vorbis.c
|
||||||
../../src/Protocol.c
|
../../src/Protocol.c
|
||||||
../../src/World.c
|
../../src/World.c
|
||||||
../../src/PickedPosRenderer.c
|
../../src/SelOutlineRenderer.c
|
||||||
../../src/Platform_Posix.c
|
../../src/Platform_Posix.c
|
||||||
../../src/Platform_Android.c
|
|
||||||
../../src/LScreens.c
|
../../src/LScreens.c
|
||||||
../../src/_truetype.c
|
../../src/_truetype.c
|
||||||
../../src/_ftglyph.c
|
../../src/_ftglyph.c
|
||||||
../../src/Model.c
|
../../src/Model.c
|
||||||
../../src/_autofit.c
|
../../src/_autofit.c
|
||||||
../../src/Vectors.c
|
../../src/Vectors.c
|
||||||
../../src/_raster.c
|
|
||||||
../../src/HeldBlockRenderer.c
|
../../src/HeldBlockRenderer.c
|
||||||
../../src/Inventory.c
|
../../src/Inventory.c
|
||||||
../../src/Launcher.c
|
../../src/Launcher.c
|
||||||
|
|
@ -98,12 +94,141 @@ add_library(classicube SHARED
|
||||||
../../src/EnvRenderer.c
|
../../src/EnvRenderer.c
|
||||||
../../src/Animations.c
|
../../src/Animations.c
|
||||||
../../src/LBackend.c
|
../../src/LBackend.c
|
||||||
|
../../src/SystemFonts.c
|
||||||
|
../../src/Commands.c
|
||||||
|
../../src/EntityRenderers.c
|
||||||
|
../../src/Audio_SLES.c
|
||||||
|
../../src/TouchUI.c
|
||||||
|
../../src/LBackend_Android.c
|
||||||
|
../../src/InputHandler.c
|
||||||
|
../../src/MenuOptions.c
|
||||||
|
../../src/FancyLighting.c
|
||||||
|
../../src/Queue.c
|
||||||
|
../../src/SSL.c
|
||||||
|
../../src/Certs.c
|
||||||
|
../../src/android/Platform_Android.c
|
||||||
|
../../src/android/Window_Android.c
|
||||||
|
../../third_party/bearssl/aes_big_cbcdec.c
|
||||||
|
../../third_party/bearssl/aes_big_cbcenc.c
|
||||||
|
../../third_party/bearssl/aes_big_ctr.c
|
||||||
|
../../third_party/bearssl/aes_big_ctrcbc.c
|
||||||
|
../../third_party/bearssl/aes_big_dec.c
|
||||||
|
../../third_party/bearssl/aes_big_enc.c
|
||||||
|
../../third_party/bearssl/aes_common.c
|
||||||
|
../../third_party/bearssl/aesctr_drbg.c
|
||||||
|
../../third_party/bearssl/aes_x86ni.c
|
||||||
|
../../third_party/bearssl/aes_x86ni_cbcdec.c
|
||||||
|
../../third_party/bearssl/aes_x86ni_cbcenc.c
|
||||||
|
../../third_party/bearssl/aes_x86ni_ctr.c
|
||||||
|
../../third_party/bearssl/aes_x86ni_ctrcbc.c
|
||||||
|
../../third_party/bearssl/asn1enc.c
|
||||||
|
../../third_party/bearssl/ccm.c
|
||||||
|
../../third_party/bearssl/ccopy.c
|
||||||
|
../../third_party/bearssl/chacha20_ct.c
|
||||||
|
../../third_party/bearssl/chacha20_sse2.c
|
||||||
|
../../third_party/bearssl/dec32be.c
|
||||||
|
../../third_party/bearssl/dec32le.c
|
||||||
|
../../third_party/bearssl/dec64be.c
|
||||||
|
../../third_party/bearssl/dec64le.c
|
||||||
|
../../third_party/bearssl/dig_oid.c
|
||||||
|
../../third_party/bearssl/dig_size.c
|
||||||
|
../../third_party/bearssl/ec_all_m31.c
|
||||||
|
../../third_party/bearssl/ec_c25519_i31.c
|
||||||
|
../../third_party/bearssl/ec_c25519_m31.c
|
||||||
|
../../third_party/bearssl/ec_c25519_m62.c
|
||||||
|
../../third_party/bearssl/ec_c25519_m64.c
|
||||||
|
../../third_party/bearssl/ec_curve25519.c
|
||||||
|
../../third_party/bearssl/ec_default.c
|
||||||
|
../../third_party/bearssl/ecdsa_atr.c
|
||||||
|
../../third_party/bearssl/ecdsa_default_vrfy_asn1.c
|
||||||
|
../../third_party/bearssl/ecdsa_default_vrfy_raw.c
|
||||||
|
../../third_party/bearssl/ecdsa_i31_bits.c
|
||||||
|
../../third_party/bearssl/ecdsa_i31_vrfy_asn1.c
|
||||||
|
../../third_party/bearssl/ecdsa_i31_vrfy_raw.c
|
||||||
|
../../third_party/bearssl/ec_p256_m31.c
|
||||||
|
../../third_party/bearssl/ec_p256_m62.c
|
||||||
|
../../third_party/bearssl/ec_p256_m64.c
|
||||||
|
../../third_party/bearssl/ec_prime_i31.c
|
||||||
|
../../third_party/bearssl/ec_secp256r1.c
|
||||||
|
../../third_party/bearssl/ec_secp384r1.c
|
||||||
|
../../third_party/bearssl/ec_secp521r1.c
|
||||||
|
../../third_party/bearssl/enc32be.c
|
||||||
|
../../third_party/bearssl/enc32le.c
|
||||||
|
../../third_party/bearssl/enc64be.c
|
||||||
|
../../third_party/bearssl/enc64le.c
|
||||||
|
../../third_party/bearssl/gcm.c
|
||||||
|
../../third_party/bearssl/ghash_ctmul64.c
|
||||||
|
../../third_party/bearssl/ghash_ctmul.c
|
||||||
|
../../third_party/bearssl/ghash_pclmul.c
|
||||||
|
../../third_party/bearssl/hmac.c
|
||||||
|
../../third_party/bearssl/hmac_ct.c
|
||||||
|
../../third_party/bearssl/hmac_drbg.c
|
||||||
|
../../third_party/bearssl/i31_add.c
|
||||||
|
../../third_party/bearssl/i31_bitlen.c
|
||||||
|
../../third_party/bearssl/i31_decmod.c
|
||||||
|
../../third_party/bearssl/i31_decode.c
|
||||||
|
../../third_party/bearssl/i31_decred.c
|
||||||
|
../../third_party/bearssl/i31_encode.c
|
||||||
|
../../third_party/bearssl/i31_fmont.c
|
||||||
|
../../third_party/bearssl/i31_iszero.c
|
||||||
|
../../third_party/bearssl/i31_moddiv.c
|
||||||
|
../../third_party/bearssl/i31_modpow2.c
|
||||||
|
../../third_party/bearssl/i31_modpow.c
|
||||||
|
../../third_party/bearssl/i31_montmul.c
|
||||||
|
../../third_party/bearssl/i31_mulacc.c
|
||||||
|
../../third_party/bearssl/i31_muladd.c
|
||||||
|
../../third_party/bearssl/i31_ninv31.c
|
||||||
|
../../third_party/bearssl/i31_reduce.c
|
||||||
|
../../third_party/bearssl/i31_rshift.c
|
||||||
|
../../third_party/bearssl/i31_sub.c
|
||||||
|
../../third_party/bearssl/i31_tmont.c
|
||||||
|
../../third_party/bearssl/i32_div32.c
|
||||||
|
../../third_party/bearssl/i62_modpow2.c
|
||||||
|
../../third_party/bearssl/md5.c
|
||||||
|
../../third_party/bearssl/md5sha1.c
|
||||||
|
../../third_party/bearssl/multihash.c
|
||||||
|
../../third_party/bearssl/poly1305_ctmul.c
|
||||||
|
../../third_party/bearssl/poly1305_ctmulq.c
|
||||||
|
../../third_party/bearssl/prf.c
|
||||||
|
../../third_party/bearssl/prf_md5sha1.c
|
||||||
|
../../third_party/bearssl/prf_sha256.c
|
||||||
|
../../third_party/bearssl/prf_sha384.c
|
||||||
|
../../third_party/bearssl/rsa_default_pkcs1_vrfy.c
|
||||||
|
../../third_party/bearssl/rsa_default_priv.c
|
||||||
|
../../third_party/bearssl/rsa_default_pub.c
|
||||||
|
../../third_party/bearssl/rsa_i31_pkcs1_vrfy.c
|
||||||
|
../../third_party/bearssl/rsa_i31_priv.c
|
||||||
|
../../third_party/bearssl/rsa_i31_pub.c
|
||||||
|
../../third_party/bearssl/rsa_i62_pkcs1_vrfy.c
|
||||||
|
../../third_party/bearssl/rsa_i62_priv.c
|
||||||
|
../../third_party/bearssl/rsa_i62_pub.c
|
||||||
|
../../third_party/bearssl/rsa_pkcs1_sig_unpad.c
|
||||||
|
../../third_party/bearssl/sha1.c
|
||||||
|
../../third_party/bearssl/sha2big.c
|
||||||
|
../../third_party/bearssl/sha2small.c
|
||||||
|
../../third_party/bearssl/ssl_client.c
|
||||||
|
../../third_party/bearssl/ssl_client_default_rsapub.c
|
||||||
|
../../third_party/bearssl/ssl_client_full.c
|
||||||
|
../../third_party/bearssl/ssl_engine.c
|
||||||
|
../../third_party/bearssl/ssl_engine_default_aescbc.c
|
||||||
|
../../third_party/bearssl/ssl_engine_default_aesccm.c
|
||||||
|
../../third_party/bearssl/ssl_engine_default_aesgcm.c
|
||||||
|
../../third_party/bearssl/ssl_engine_default_chapol.c
|
||||||
|
../../third_party/bearssl/ssl_engine_default_ec.c
|
||||||
|
../../third_party/bearssl/ssl_engine_default_ecdsa.c
|
||||||
|
../../third_party/bearssl/ssl_engine_default_rsavrfy.c
|
||||||
|
../../third_party/bearssl/ssl_hashes.c
|
||||||
|
../../third_party/bearssl/ssl_hs_client.c
|
||||||
|
../../third_party/bearssl/ssl_io.c
|
||||||
|
../../third_party/bearssl/ssl_rec_cbc.c
|
||||||
|
../../third_party/bearssl/ssl_rec_ccm.c
|
||||||
|
../../third_party/bearssl/ssl_rec_chapol.c
|
||||||
|
../../third_party/bearssl/ssl_rec_gcm.c
|
||||||
|
../../third_party/bearssl/x509_minimal.c
|
||||||
|
../../third_party/bearssl/x509_minimal_full.c
|
||||||
)
|
)
|
||||||
|
|
||||||
# add lib dependencies
|
|
||||||
target_link_libraries(classicube
|
target_link_libraries(classicube
|
||||||
android
|
|
||||||
EGL
|
EGL
|
||||||
GLESv2
|
GLESv2
|
||||||
log
|
log)
|
||||||
OpenSLES)
|
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,8 @@
|
||||||
<!-- BEGIN_INCLUDE(manifest) -->
|
<!-- BEGIN_INCLUDE(manifest) -->
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="com.classicube.android.client"
|
package="com.classicube.android.client"
|
||||||
android:versionCode="1"
|
android:versionCode="1370"
|
||||||
android:versionName="1.0">
|
android:versionName="1.3.7">
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="18" />
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="18" />
|
||||||
|
|
@ -11,6 +11,12 @@
|
||||||
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="26"/>
|
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="26"/>
|
||||||
|
|
||||||
<application android:icon="@mipmap/ccicon" android:label="ClassiCube">
|
<application android:icon="@mipmap/ccicon" android:label="ClassiCube">
|
||||||
|
<provider
|
||||||
|
android:name="com.classicube.CCFileProvider"
|
||||||
|
android:authorities="com.classicube.android.client.provider"
|
||||||
|
android:exported="false"
|
||||||
|
android:grantUriPermissions="true" >
|
||||||
|
</provider>
|
||||||
|
|
||||||
<activity android:name="com.classicube.MainActivity" android:label="ClassiCube"
|
<activity android:name="com.classicube.MainActivity" android:label="ClassiCube"
|
||||||
android:configChanges="orientation|screenSize|keyboard|keyboardHidden">
|
android:configChanges="orientation|screenSize|keyboard|keyboardHidden">
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,115 @@
|
||||||
|
package com.classicube;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import android.content.ContentProvider;
|
||||||
|
import android.content.ContentValues;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.pm.ProviderInfo;
|
||||||
|
import android.database.Cursor;
|
||||||
|
import android.database.MatrixCursor;
|
||||||
|
import android.net.Uri;
|
||||||
|
import android.os.ParcelFileDescriptor;
|
||||||
|
import android.provider.MediaStore;
|
||||||
|
import android.provider.OpenableColumns;
|
||||||
|
|
||||||
|
public class CCFileProvider extends ContentProvider
|
||||||
|
{
|
||||||
|
final static String[] DEFAULT_COLUMNS = { OpenableColumns.DISPLAY_NAME, OpenableColumns.SIZE, MediaStore.MediaColumns.DATA };
|
||||||
|
File root;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCreate() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void attachInfo(Context context, ProviderInfo info) {
|
||||||
|
super.attachInfo(context, info);
|
||||||
|
root = context.getExternalFilesDir(null); // getGameDataDirectory
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
|
||||||
|
File file = getFileForUri(uri);
|
||||||
|
// can be null when caller is requesting all columns
|
||||||
|
if (projection == null) projection = DEFAULT_COLUMNS;
|
||||||
|
|
||||||
|
ArrayList<String> cols = new ArrayList<String>(3);
|
||||||
|
ArrayList<Object> vals = new ArrayList<Object>(3);
|
||||||
|
|
||||||
|
for (String column : projection) {
|
||||||
|
if (column.equals(OpenableColumns.DISPLAY_NAME)) {
|
||||||
|
cols.add(OpenableColumns.DISPLAY_NAME);
|
||||||
|
vals.add(file.getName());
|
||||||
|
} else if (column.equals(OpenableColumns.SIZE)) {
|
||||||
|
cols.add(OpenableColumns.SIZE);
|
||||||
|
vals.add(file.length());
|
||||||
|
} else if (column.equals(MediaStore.MediaColumns.DATA)) {
|
||||||
|
cols.add(MediaStore.MediaColumns.DATA);
|
||||||
|
vals.add(file.getAbsolutePath());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://stackoverflow.com/questions/4042434/converting-arrayliststring-to-string-in-java
|
||||||
|
MatrixCursor cursor = new MatrixCursor(cols.toArray(new String[0]), 1);
|
||||||
|
cursor.addRow(vals.toArray());
|
||||||
|
return cursor;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getType(Uri uri) {
|
||||||
|
String path = uri.getEncodedPath();
|
||||||
|
int sepExt = path.lastIndexOf('.');
|
||||||
|
|
||||||
|
if (sepExt >= 0) {
|
||||||
|
String fileExt = path.substring(sepExt);
|
||||||
|
if (fileExt.equals(".png")) return "image/png";
|
||||||
|
}
|
||||||
|
return "application/octet-stream";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Uri insert(Uri uri, ContentValues values) {
|
||||||
|
throw new UnsupportedOperationException("Readonly access");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
|
||||||
|
throw new UnsupportedOperationException("Readonly access");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int delete(Uri uri, String selection, String[] selectionArgs) {
|
||||||
|
throw new UnsupportedOperationException("Readonly access");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
|
||||||
|
File file = getFileForUri(uri);
|
||||||
|
return ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Uri getUriForFile(String path) {
|
||||||
|
// See AndroidManifest.xml for authority
|
||||||
|
return new Uri.Builder()
|
||||||
|
.scheme("content")
|
||||||
|
.authority("com.classicube.android.client.provider")
|
||||||
|
.encodedPath(Uri.encode(path, "/"))
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
File getFileForUri(Uri uri) {
|
||||||
|
String path = uri.getPath();
|
||||||
|
File file = new File(root, path);
|
||||||
|
|
||||||
|
file = file.getAbsoluteFile();
|
||||||
|
// security validation check
|
||||||
|
if (!file.getPath().startsWith(root.getPath())) {
|
||||||
|
throw new SecurityException("Resolved path lies outside app directory:" + path);
|
||||||
|
}
|
||||||
|
return file;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,57 @@
|
||||||
|
package com.classicube;
|
||||||
|
import android.view.InputDevice;
|
||||||
|
import android.view.MotionEvent;
|
||||||
|
import android.view.View;
|
||||||
|
|
||||||
|
public class CCMotionListener implements View.OnGenericMotionListener {
|
||||||
|
MainActivity activity;
|
||||||
|
|
||||||
|
public CCMotionListener(MainActivity activity) {
|
||||||
|
this.activity = activity;
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://developer.android.com/develop/ui/views/touch-and-input/game-controllers/controller-input#java
|
||||||
|
@Override
|
||||||
|
public boolean onGenericMotion(View view, MotionEvent event) {
|
||||||
|
if (event.getAction() != MotionEvent.ACTION_MOVE) return false;
|
||||||
|
boolean source_joystick = (event.getSource() & InputDevice.SOURCE_JOYSTICK) == InputDevice.SOURCE_JOYSTICK;
|
||||||
|
boolean source_gamepad = (event.getSource() & InputDevice.SOURCE_GAMEPAD) == InputDevice.SOURCE_GAMEPAD;
|
||||||
|
|
||||||
|
if (source_joystick || source_gamepad) {
|
||||||
|
int historySize = event.getHistorySize();
|
||||||
|
for (int i = 0; i < historySize; i++) {
|
||||||
|
processJoystickInput(event, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
processJoystickInput(event, -1);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void processJoystickInput(MotionEvent event, int historyPos) {
|
||||||
|
float x1 = getAxisValue(event, MotionEvent.AXIS_X, historyPos);
|
||||||
|
float y1 = getAxisValue(event, MotionEvent.AXIS_Y, historyPos);
|
||||||
|
|
||||||
|
float x2 = getAxisValue(event, MotionEvent.AXIS_Z, historyPos);
|
||||||
|
float y2 = getAxisValue(event, MotionEvent.AXIS_RZ, historyPos);
|
||||||
|
|
||||||
|
if (x1 != 0 || y1 != 0)
|
||||||
|
pushAxisMovement(MainActivity.CMD_GPAD_AXISL, x1, y1);
|
||||||
|
if (x2 != 0 || y2 != 0)
|
||||||
|
pushAxisMovement(MainActivity.CMD_GPAD_AXISR, x2, y2);
|
||||||
|
}
|
||||||
|
|
||||||
|
float getAxisValue(MotionEvent event, int axis, int historyPos) {
|
||||||
|
float value = historyPos < 0 ? event.getAxisValue(axis) :
|
||||||
|
event.getHistoricalAxisValue(axis, historyPos);
|
||||||
|
|
||||||
|
// Deadzone detection
|
||||||
|
if (value >= -0.25f && value <= 0.25f) value = 0;
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
void pushAxisMovement(int axis, float x, float y) {
|
||||||
|
activity.pushCmd(axis, (int)(x * 4096), (int)(y * 4096));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,108 @@
|
||||||
|
package com.classicube;
|
||||||
|
import android.text.Editable;
|
||||||
|
import android.text.Selection;
|
||||||
|
import android.text.SpannableStringBuilder;
|
||||||
|
import android.view.KeyEvent;
|
||||||
|
import android.view.MotionEvent;
|
||||||
|
import android.view.SurfaceView;
|
||||||
|
import android.view.inputmethod.BaseInputConnection;
|
||||||
|
import android.view.inputmethod.EditorInfo;
|
||||||
|
import android.view.inputmethod.InputConnection;
|
||||||
|
|
||||||
|
public class CCView extends SurfaceView {
|
||||||
|
SpannableStringBuilder kbText;
|
||||||
|
MainActivity activity;
|
||||||
|
|
||||||
|
public CCView(MainActivity activity) {
|
||||||
|
// setFocusable, setFocusableInTouchMode - API level 1
|
||||||
|
super(activity);
|
||||||
|
this.activity = activity;
|
||||||
|
setFocusable(true);
|
||||||
|
setFocusableInTouchMode(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean dispatchTouchEvent(MotionEvent ev) {
|
||||||
|
return activity.handleTouchEvent(ev) || super.dispatchTouchEvent(ev);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public InputConnection onCreateInputConnection(EditorInfo attrs) {
|
||||||
|
// BaseInputConnection, IME_ACTION_GO, IME_FLAG_NO_EXTRACT_UI - API level 3
|
||||||
|
attrs.actionLabel = null;
|
||||||
|
attrs.inputType = MainActivity.calcKeyboardType(activity.keyboardType);
|
||||||
|
attrs.imeOptions = MainActivity.calcKeyboardOptions(activity.keyboardType);
|
||||||
|
|
||||||
|
kbText = new SpannableStringBuilder(activity.keyboardText);
|
||||||
|
|
||||||
|
InputConnection ic = new BaseInputConnection(this, true) {
|
||||||
|
boolean inited;
|
||||||
|
|
||||||
|
void updateText() {
|
||||||
|
activity.pushCmd(MainActivity.CMD_KEY_TEXT, kbText.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Editable getEditable() {
|
||||||
|
if (!inited) {
|
||||||
|
// needed to set selection, otherwise random crashes later with backspacing
|
||||||
|
// set selection to end, so backspacing after opening keyboard with text still works
|
||||||
|
Selection.setSelection(kbText, kbText.toString().length());
|
||||||
|
inited = true;
|
||||||
|
}
|
||||||
|
return kbText;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean setComposingText(CharSequence text, int newCursorPosition) {
|
||||||
|
boolean success = super.setComposingText(text, newCursorPosition);
|
||||||
|
updateText();
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean deleteSurroundingText(int beforeLength, int afterLength) {
|
||||||
|
boolean success = super.deleteSurroundingText(beforeLength, afterLength);
|
||||||
|
updateText();
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean commitText(CharSequence text, int newCursorPosition) {
|
||||||
|
boolean success = super.commitText(text, newCursorPosition);
|
||||||
|
updateText();
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean sendKeyEvent(KeyEvent ev) {
|
||||||
|
// getSelectionStart - API level 1
|
||||||
|
if (ev.getAction() != KeyEvent.ACTION_DOWN) return super.sendKeyEvent(ev);
|
||||||
|
int code = ev.getKeyCode();
|
||||||
|
int uni = ev.getUnicodeChar();
|
||||||
|
|
||||||
|
// start is -1 sometimes, and trying to insert/delete there crashes
|
||||||
|
int start = Selection.getSelectionStart(kbText);
|
||||||
|
if (start == -1) start = kbText.toString().length();
|
||||||
|
|
||||||
|
if (code == KeyEvent.KEYCODE_ENTER) {
|
||||||
|
// enter maps to \n but that should not be intercepted
|
||||||
|
} else if (code == KeyEvent.KEYCODE_DEL) {
|
||||||
|
if (start <= 0) return false;
|
||||||
|
kbText.delete(start - 1, start);
|
||||||
|
updateText();
|
||||||
|
return false;
|
||||||
|
} else if (uni != 0) {
|
||||||
|
kbText.insert(start, String.valueOf((char) uni));
|
||||||
|
updateText();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return super.sendKeyEvent(ev);
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
//String text = MainActivity.this.keyboardText;
|
||||||
|
//if (text != null) ic.setComposingText(text, 0);
|
||||||
|
return ic;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,12 +1,16 @@
|
||||||
package com.classicube;
|
package com.classicube;
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.lang.reflect.Method;
|
import java.io.OutputStream;
|
||||||
import java.net.HttpURLConnection;
|
import java.security.KeyStore;
|
||||||
import java.net.URL;
|
import java.security.cert.CertificateFactory;
|
||||||
|
import java.security.cert.X509Certificate;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
import java.util.concurrent.Semaphore;
|
import java.util.concurrent.Semaphore;
|
||||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||||
|
|
@ -18,34 +22,32 @@ import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.pm.ApplicationInfo;
|
import android.content.pm.ApplicationInfo;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
|
import android.database.Cursor;
|
||||||
|
import android.graphics.Canvas;
|
||||||
|
import android.graphics.Color;
|
||||||
import android.graphics.PixelFormat;
|
import android.graphics.PixelFormat;
|
||||||
|
import android.graphics.Rect;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.StrictMode;
|
import android.provider.OpenableColumns;
|
||||||
import android.provider.Settings.Secure;
|
import android.provider.Settings.Secure;
|
||||||
import android.text.Editable;
|
|
||||||
import android.text.InputType;
|
import android.text.InputType;
|
||||||
import android.text.Selection;
|
|
||||||
import android.text.SpannableStringBuilder;
|
|
||||||
import android.util.DisplayMetrics;
|
import android.util.DisplayMetrics;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.Display;
|
|
||||||
import android.view.InputQueue;
|
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
import android.view.Surface;
|
import android.view.Surface;
|
||||||
import android.view.SurfaceHolder;
|
import android.view.SurfaceHolder;
|
||||||
import android.view.SurfaceView;
|
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
|
|
||||||
import android.view.Window;
|
import android.view.Window;
|
||||||
import android.view.inputmethod.BaseInputConnection;
|
|
||||||
import android.view.inputmethod.EditorInfo;
|
import android.view.inputmethod.EditorInfo;
|
||||||
import android.view.inputmethod.InputConnection;
|
|
||||||
import android.view.inputmethod.InputMethod;
|
|
||||||
import android.view.inputmethod.InputMethodManager;
|
import android.view.inputmethod.InputMethodManager;
|
||||||
|
|
||||||
|
import javax.net.ssl.TrustManager;
|
||||||
|
import javax.net.ssl.TrustManagerFactory;
|
||||||
|
import javax.net.ssl.X509TrustManager;
|
||||||
|
|
||||||
// This class contains all the glue/interop code for bridging ClassiCube to the java Android world.
|
// This class contains all the glue/interop code for bridging ClassiCube to the java Android world.
|
||||||
// Some functionality is only available on later Android versions - try {} catch {} is used in such places
|
// Some functionality is only available on later Android versions - try {} catch {} is used in such places
|
||||||
// to ensure that the game can still run on earlier Android versions (albeit with reduced functionality)
|
// to ensure that the game can still run on earlier Android versions (albeit with reduced functionality)
|
||||||
|
|
@ -56,6 +58,7 @@ import android.view.inputmethod.InputMethodManager;
|
||||||
// implements InputQueue.Callback
|
// implements InputQueue.Callback
|
||||||
public class MainActivity extends Activity
|
public class MainActivity extends Activity
|
||||||
{
|
{
|
||||||
|
public boolean launcher;
|
||||||
// ==================================================================
|
// ==================================================================
|
||||||
// ---------------------------- COMMANDS ----------------------------
|
// ---------------------------- COMMANDS ----------------------------
|
||||||
// ==================================================================
|
// ==================================================================
|
||||||
|
|
@ -72,20 +75,28 @@ public class MainActivity extends Activity
|
||||||
return args != null ? args : new NativeCmdArgs();
|
return args != null ? args : new NativeCmdArgs();
|
||||||
}
|
}
|
||||||
|
|
||||||
void pushCmd(int cmd) {
|
public void pushCmd(int cmd) {
|
||||||
NativeCmdArgs args = getCmdArgs();
|
NativeCmdArgs args = getCmdArgs();
|
||||||
args.cmd = cmd;
|
args.cmd = cmd;
|
||||||
pending.add(args);
|
pending.add(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
void pushCmd(int cmd, int a1) {
|
public void pushCmd(int cmd, int a1) {
|
||||||
NativeCmdArgs args = getCmdArgs();
|
NativeCmdArgs args = getCmdArgs();
|
||||||
args.cmd = cmd;
|
args.cmd = cmd;
|
||||||
args.arg1 = a1;
|
args.arg1 = a1;
|
||||||
pending.add(args);
|
pending.add(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
void pushCmd(int cmd, int a1, int a2, int a3, int a4) {
|
public void pushCmd(int cmd, int a1, int a2) {
|
||||||
|
NativeCmdArgs args = getCmdArgs();
|
||||||
|
args.cmd = cmd;
|
||||||
|
args.arg1 = a1;
|
||||||
|
args.arg2 = a2;
|
||||||
|
pending.add(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void pushCmd(int cmd, int a1, int a2, int a3, int a4) {
|
||||||
NativeCmdArgs args = getCmdArgs();
|
NativeCmdArgs args = getCmdArgs();
|
||||||
args.cmd = cmd;
|
args.cmd = cmd;
|
||||||
args.arg1 = a1;
|
args.arg1 = a1;
|
||||||
|
|
@ -95,44 +106,65 @@ public class MainActivity extends Activity
|
||||||
pending.add(args);
|
pending.add(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
void pushCmd(int cmd, String text) {
|
public void pushCmd(int cmd, String text) {
|
||||||
NativeCmdArgs args = getCmdArgs();
|
NativeCmdArgs args = getCmdArgs();
|
||||||
args.cmd = cmd;
|
args.cmd = cmd;
|
||||||
args.str = text;
|
args.str = text;
|
||||||
pending.add(args);
|
pending.add(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
void pushCmd(int cmd, Surface surface) {
|
public void pushCmd(int cmd, int a1, String str) {
|
||||||
NativeCmdArgs args = getCmdArgs();
|
NativeCmdArgs args = getCmdArgs();
|
||||||
args.cmd = cmd;
|
args.cmd = cmd;
|
||||||
args.sur = surface;
|
args.arg1 = a1;
|
||||||
|
args.str = str;
|
||||||
pending.add(args);
|
pending.add(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
final static int CMD_KEY_DOWN = 0;
|
public void pushCmd(int cmd, SurfaceHolder holder) {
|
||||||
|
NativeCmdArgs args = getCmdArgs();
|
||||||
|
Rect rect = holder.getSurfaceFrame();
|
||||||
|
|
||||||
final static int CMD_POINTER_DOWN = 3;
|
args.cmd = cmd;
|
||||||
final static int CMD_POINTER_UP = 4;
|
args.sur = holder.getSurface();
|
||||||
final static int CMD_KEY_UP = 1;
|
args.arg1 = rect.width();
|
||||||
final static int CMD_KEY_CHAR = 2;
|
args.arg2 = rect.height();
|
||||||
final static int CMD_KEY_TEXT = 19;
|
pending.add(args);
|
||||||
final static int CMD_POINTER_MOVE = 5;
|
}
|
||||||
|
|
||||||
final static int CMD_WIN_CREATED = 6;
|
public final static int CMD_KEY_DOWN = 0;
|
||||||
final static int CMD_WIN_DESTROYED = 7;
|
public final static int CMD_KEY_UP = 1;
|
||||||
final static int CMD_WIN_RESIZED = 8;
|
public final static int CMD_KEY_CHAR = 2;
|
||||||
final static int CMD_WIN_REDRAW = 9;
|
public final static int CMD_POINTER_DOWN = 3;
|
||||||
|
public final static int CMD_POINTER_UP = 4;
|
||||||
|
public final static int CMD_POINTER_MOVE = 5;
|
||||||
|
|
||||||
final static int CMD_APP_START = 10;
|
public final static int CMD_WIN_CREATED = 6;
|
||||||
final static int CMD_APP_STOP = 11;
|
public final static int CMD_WIN_DESTROYED = 7;
|
||||||
final static int CMD_APP_RESUME = 12;
|
public final static int CMD_WIN_RESIZED = 8;
|
||||||
final static int CMD_APP_PAUSE = 13;
|
public final static int CMD_WIN_REDRAW = 9;
|
||||||
final static int CMD_APP_DESTROY = 14;
|
|
||||||
|
|
||||||
final static int CMD_GOT_FOCUS = 15;
|
public final static int CMD_APP_START = 10;
|
||||||
final static int CMD_LOST_FOCUS = 16;
|
public final static int CMD_APP_STOP = 11;
|
||||||
final static int CMD_CONFIG_CHANGED = 17;
|
public final static int CMD_APP_RESUME = 12;
|
||||||
final static int CMD_LOW_MEMORY = 18;
|
public final static int CMD_APP_PAUSE = 13;
|
||||||
|
public final static int CMD_APP_DESTROY = 14;
|
||||||
|
|
||||||
|
public final static int CMD_GOT_FOCUS = 15;
|
||||||
|
public final static int CMD_LOST_FOCUS = 16;
|
||||||
|
public final static int CMD_CONFIG_CHANGED = 17;
|
||||||
|
public final static int CMD_LOW_MEMORY = 18;
|
||||||
|
|
||||||
|
public final static int CMD_KEY_TEXT = 19;
|
||||||
|
public final static int CMD_OFD_RESULT = 20;
|
||||||
|
|
||||||
|
public final static int CMD_UI_CREATED = 21;
|
||||||
|
public final static int CMD_UI_CLICKED = 22;
|
||||||
|
public final static int CMD_UI_CHANGED = 23;
|
||||||
|
public final static int CMD_UI_STRING = 24;
|
||||||
|
|
||||||
|
public final static int CMD_GPAD_AXISL = 25;
|
||||||
|
public final static int CMD_GPAD_AXISR = 26;
|
||||||
|
|
||||||
|
|
||||||
// ====================================================================
|
// ====================================================================
|
||||||
|
|
@ -156,19 +188,6 @@ public class MainActivity extends Activity
|
||||||
runGameAsync();
|
runGameAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
void HACK_avoidFileUriExposedErrors() {
|
|
||||||
// StrictMode - API level 9
|
|
||||||
// disableDeathOnFileUriExposure - API level 24 ?????
|
|
||||||
try {
|
|
||||||
Method m = StrictMode.class.getMethod("disableDeathOnFileUriExposure");
|
|
||||||
m.invoke(null);
|
|
||||||
} catch (NoClassDefFoundError ex) {
|
|
||||||
ex.printStackTrace();
|
|
||||||
} catch (Exception ex) {
|
|
||||||
ex.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
// requestWindowFeature - API level 1
|
// requestWindowFeature - API level 1
|
||||||
|
|
@ -190,9 +209,6 @@ public class MainActivity extends Activity
|
||||||
// renderOverDisplayCutouts();
|
// renderOverDisplayCutouts();
|
||||||
// TODO: semaphore for destroyed and surfaceDestroyed
|
// TODO: semaphore for destroyed and surfaceDestroyed
|
||||||
|
|
||||||
// avoid FileUriExposed exception when taking screenshots on recent Android versions
|
|
||||||
HACK_avoidFileUriExposedErrors();
|
|
||||||
|
|
||||||
if (!gameRunning) startGameAsync();
|
if (!gameRunning) startGameAsync();
|
||||||
// TODO rethink to avoid this
|
// TODO rethink to avoid this
|
||||||
if (gameRunning) updateInstance();
|
if (gameRunning) updateInstance();
|
||||||
|
|
@ -336,9 +352,12 @@ public class MainActivity extends Activity
|
||||||
case CMD_POINTER_UP: processPointerUp( c.arg1, c.arg2, c.arg3, c.arg4); break;
|
case CMD_POINTER_UP: processPointerUp( c.arg1, c.arg2, c.arg3, c.arg4); break;
|
||||||
case CMD_POINTER_MOVE: processPointerMove(c.arg1, c.arg2, c.arg3, c.arg4); break;
|
case CMD_POINTER_MOVE: processPointerMove(c.arg1, c.arg2, c.arg3, c.arg4); break;
|
||||||
|
|
||||||
case CMD_WIN_CREATED: processSurfaceCreated(c.sur); break;
|
case CMD_GPAD_AXISL: processJoystickL(c.arg1, c.arg2); break;
|
||||||
|
case CMD_GPAD_AXISR: processJoystickR(c.arg1, c.arg2); break;
|
||||||
|
|
||||||
|
case CMD_WIN_CREATED: processSurfaceCreated(c.sur, c.arg1, c.arg2); break;
|
||||||
case CMD_WIN_DESTROYED: processSurfaceDestroyed(); break;
|
case CMD_WIN_DESTROYED: processSurfaceDestroyed(); break;
|
||||||
case CMD_WIN_RESIZED: processSurfaceResized(c.sur); break;
|
case CMD_WIN_RESIZED: processSurfaceResized(c.arg1, c.arg2); break;
|
||||||
case CMD_WIN_REDRAW: processSurfaceRedrawNeeded(); break;
|
case CMD_WIN_REDRAW: processSurfaceRedrawNeeded(); break;
|
||||||
|
|
||||||
case CMD_APP_START: processOnStart(); break;
|
case CMD_APP_START: processOnStart(); break;
|
||||||
|
|
@ -351,6 +370,8 @@ public class MainActivity extends Activity
|
||||||
case CMD_LOST_FOCUS: processOnLostFocus(); break;
|
case CMD_LOST_FOCUS: processOnLostFocus(); break;
|
||||||
//case CMD_CONFIG_CHANGED: processOnConfigChanged(); break;
|
//case CMD_CONFIG_CHANGED: processOnConfigChanged(); break;
|
||||||
case CMD_LOW_MEMORY: processOnLowMemory(); break;
|
case CMD_LOW_MEMORY: processOnLowMemory(); break;
|
||||||
|
|
||||||
|
case CMD_OFD_RESULT: processOFDResult(c.str); break;
|
||||||
}
|
}
|
||||||
|
|
||||||
c.str = null;
|
c.str = null;
|
||||||
|
|
@ -368,9 +389,12 @@ public class MainActivity extends Activity
|
||||||
native void processPointerUp( int id, int x, int y, int isMouse);
|
native void processPointerUp( int id, int x, int y, int isMouse);
|
||||||
native void processPointerMove(int id, int x, int y, int isMouse);
|
native void processPointerMove(int id, int x, int y, int isMouse);
|
||||||
|
|
||||||
native void processSurfaceCreated(Surface sur);
|
native void processJoystickL(int x, int y);
|
||||||
|
native void processJoystickR(int x, int y);
|
||||||
|
|
||||||
|
native void processSurfaceCreated(Surface sur, int w, int h);
|
||||||
native void processSurfaceDestroyed();
|
native void processSurfaceDestroyed();
|
||||||
native void processSurfaceResized(Surface sur);
|
native void processSurfaceResized(int w, int h);
|
||||||
native void processSurfaceRedrawNeeded();
|
native void processSurfaceRedrawNeeded();
|
||||||
|
|
||||||
native void processOnStart();
|
native void processOnStart();
|
||||||
|
|
@ -384,6 +408,8 @@ public class MainActivity extends Activity
|
||||||
//native void processOnConfigChanged();
|
//native void processOnConfigChanged();
|
||||||
native void processOnLowMemory();
|
native void processOnLowMemory();
|
||||||
|
|
||||||
|
native void processOFDResult(String path);
|
||||||
|
|
||||||
native void runGameAsync();
|
native void runGameAsync();
|
||||||
native void updateInstance();
|
native void updateInstance();
|
||||||
|
|
||||||
|
|
@ -395,20 +421,43 @@ public class MainActivity extends Activity
|
||||||
// static to persist across activity destroy/create
|
// static to persist across activity destroy/create
|
||||||
static final Semaphore winDestroyedSem = new Semaphore(0, true);
|
static final Semaphore winDestroyedSem = new Semaphore(0, true);
|
||||||
SurfaceHolder.Callback callback;
|
SurfaceHolder.Callback callback;
|
||||||
CCView curView;
|
public View curView;
|
||||||
|
|
||||||
|
public void setActiveView(View view) {
|
||||||
|
// setContentView, requestFocus - API level 1
|
||||||
|
curView = view;
|
||||||
|
setContentView(view);
|
||||||
|
curView.requestFocus();
|
||||||
|
|
||||||
|
if (fullscreen) setUIVisibility(FULLSCREEN_FLAGS);
|
||||||
|
hookMotionListener(view);
|
||||||
|
}
|
||||||
|
|
||||||
|
void hookMotionListener(View view) {
|
||||||
|
try {
|
||||||
|
CCMotionListener listener = new CCMotionListener(this);
|
||||||
|
view.setOnGenericMotionListener(listener);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
// Unsupported on android 12
|
||||||
|
} catch (NoClassDefFoundError ex) {
|
||||||
|
// Unsupported on android 12
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// SurfaceHolder.Callback - API level 1
|
// SurfaceHolder.Callback - API level 1
|
||||||
class CCSurfaceCallback implements SurfaceHolder.Callback {
|
class CCSurfaceCallback implements SurfaceHolder.Callback {
|
||||||
public void surfaceCreated(SurfaceHolder holder) {
|
public void surfaceCreated(SurfaceHolder holder) {
|
||||||
// getSurface - API level 1
|
// getSurface - API level 1
|
||||||
Log.i("CC_WIN", "win created " + holder.getSurface());
|
Log.i("CC_WIN", "win created " + holder.getSurface());
|
||||||
MainActivity.this.pushCmd(CMD_WIN_CREATED, holder.getSurface());
|
Rect r = holder.getSurfaceFrame();
|
||||||
|
MainActivity.this.pushCmd(CMD_WIN_CREATED, holder);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
|
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
|
||||||
// getSurface - API level 1
|
// getSurface - API level 1
|
||||||
Log.i("CC_WIN", "win changed " + holder.getSurface());
|
Log.i("CC_WIN", "win changed " + holder.getSurface());
|
||||||
MainActivity.this.pushCmd(CMD_WIN_RESIZED, holder.getSurface());
|
Rect r = holder.getSurfaceFrame();
|
||||||
|
MainActivity.this.pushCmd(CMD_WIN_RESIZED, holder);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void surfaceDestroyed(SurfaceHolder holder) {
|
public void surfaceDestroyed(SurfaceHolder holder) {
|
||||||
|
|
@ -459,107 +508,11 @@ public class MainActivity extends Activity
|
||||||
void attachSurface() {
|
void attachSurface() {
|
||||||
// setContentView, requestFocus, getHolder, addCallback, RGBX_8888 - API level 1
|
// setContentView, requestFocus, getHolder, addCallback, RGBX_8888 - API level 1
|
||||||
createSurfaceCallback();
|
createSurfaceCallback();
|
||||||
curView = new CCView(this);
|
CCView view = new CCView(this);
|
||||||
curView.getHolder().addCallback(callback);
|
view.getHolder().addCallback(callback);
|
||||||
curView.getHolder().setFormat(PixelFormat.RGBX_8888);
|
view.getHolder().setFormat(PixelFormat.RGBX_8888);
|
||||||
|
|
||||||
setContentView(curView);
|
setActiveView(view);
|
||||||
curView.requestFocus();
|
|
||||||
if (fullscreen) setUIVisibility(FULLSCREEN_FLAGS);
|
|
||||||
}
|
|
||||||
|
|
||||||
class CCView extends SurfaceView {
|
|
||||||
SpannableStringBuilder kbText;
|
|
||||||
|
|
||||||
public CCView(Context context) {
|
|
||||||
// setFocusable, setFocusableInTouchMode - API level 1
|
|
||||||
super(context);
|
|
||||||
setFocusable(true);
|
|
||||||
setFocusableInTouchMode(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean dispatchTouchEvent(MotionEvent ev) {
|
|
||||||
return MainActivity.this.handleTouchEvent(ev) || super.dispatchTouchEvent(ev);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public InputConnection onCreateInputConnection(EditorInfo attrs) {
|
|
||||||
// BaseInputConnection, IME_ACTION_GO, IME_FLAG_NO_EXTRACT_UI - API level 3
|
|
||||||
attrs.actionLabel = null;
|
|
||||||
attrs.inputType = MainActivity.this.getKeyboardType();
|
|
||||||
attrs.imeOptions = MainActivity.this.getKeyboardOptions();
|
|
||||||
|
|
||||||
kbText = new SpannableStringBuilder(MainActivity.this.keyboardText);
|
|
||||||
|
|
||||||
InputConnection ic = new BaseInputConnection(this, true) {
|
|
||||||
boolean inited;
|
|
||||||
void updateText() { MainActivity.this.pushCmd(CMD_KEY_TEXT, kbText.toString()); }
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Editable getEditable() {
|
|
||||||
if (!inited) {
|
|
||||||
// needed to set selection, otherwise random crashes later with backspacing
|
|
||||||
// set selection to end, so backspacing after opening keyboard with text still works
|
|
||||||
Selection.setSelection(kbText, kbText.toString().length());
|
|
||||||
inited = true;
|
|
||||||
}
|
|
||||||
return kbText;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean setComposingText(CharSequence text, int newCursorPosition) {
|
|
||||||
boolean success = super.setComposingText(text, newCursorPosition);
|
|
||||||
updateText();
|
|
||||||
return success;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean deleteSurroundingText(int beforeLength, int afterLength) {
|
|
||||||
|
|
||||||
boolean success = super.deleteSurroundingText(beforeLength, afterLength);
|
|
||||||
updateText();
|
|
||||||
return success;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean commitText(CharSequence text, int newCursorPosition) {
|
|
||||||
boolean success = super.commitText(text, newCursorPosition);
|
|
||||||
updateText();
|
|
||||||
return success;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean sendKeyEvent(KeyEvent ev) {
|
|
||||||
// getSelectionStart - API level 1
|
|
||||||
if (ev.getAction() != KeyEvent.ACTION_DOWN) return super.sendKeyEvent(ev);
|
|
||||||
int code = ev.getKeyCode();
|
|
||||||
int uni = ev.getUnicodeChar();
|
|
||||||
|
|
||||||
// start is -1 sometimes, and trying to insert/delete there crashes
|
|
||||||
int start = Selection.getSelectionStart(kbText);
|
|
||||||
if (start == -1) start = kbText.toString().length();
|
|
||||||
|
|
||||||
if (code == KeyEvent.KEYCODE_ENTER) {
|
|
||||||
// enter maps to \n but that should not be intercepted
|
|
||||||
} else if (code == KeyEvent.KEYCODE_DEL) {
|
|
||||||
if (start <= 0) return false;
|
|
||||||
kbText.delete(start - 1, start);
|
|
||||||
updateText();
|
|
||||||
return false;
|
|
||||||
} else if (uni != 0) {
|
|
||||||
kbText.insert(start, String.valueOf((char)uni));
|
|
||||||
updateText();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return super.sendKeyEvent(ev);
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
//String text = MainActivity.this.keyboardText;
|
|
||||||
//if (text != null) ic.setComposingText(text, 0);
|
|
||||||
return ic;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -586,11 +539,22 @@ public class MainActivity extends Activity
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getExternalAppDir() {
|
public String getGameDataDirectory() {
|
||||||
// getExternalFilesDir - API level 8
|
// getExternalFilesDir - API level 8
|
||||||
return getExternalFilesDir(null).getAbsolutePath();
|
return getExternalFilesDir(null).getAbsolutePath();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getGameCacheDirectory() {
|
||||||
|
// getExternalCacheDir - API level 8
|
||||||
|
File root = getExternalCacheDir();
|
||||||
|
if (root != null) return root.getAbsolutePath();
|
||||||
|
|
||||||
|
// although exceedingly rare, getExternalCacheDir() can technically fail
|
||||||
|
// "... May return null if shared storage is not currently available."
|
||||||
|
// getCacheDir - API level 1
|
||||||
|
return getCacheDir().getAbsolutePath();
|
||||||
|
}
|
||||||
|
|
||||||
public String getUUID() {
|
public String getUUID() {
|
||||||
// getContentResolver - API level 1
|
// getContentResolver - API level 1
|
||||||
// getString, ANDROID_ID - API level 3
|
// getString, ANDROID_ID - API level 3
|
||||||
|
|
@ -654,8 +618,9 @@ public class MainActivity extends Activity
|
||||||
if (curView == null) return;
|
if (curView == null) return;
|
||||||
|
|
||||||
// Try to avoid restarting input if possible
|
// Try to avoid restarting input if possible
|
||||||
if (curView.kbText != null) {
|
CCView view = (CCView)curView;
|
||||||
String curText = curView.kbText.toString();
|
if (view.kbText != null) {
|
||||||
|
String curText = view.kbText.toString();
|
||||||
if (text.equals(curText)) return;
|
if (text.equals(curText)) return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -667,9 +632,9 @@ public class MainActivity extends Activity
|
||||||
input.restartInput(curView);
|
input.restartInput(curView);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getKeyboardType() {
|
public static int calcKeyboardType(int kbType) {
|
||||||
// TYPE_CLASS_TEXT, TYPE_CLASS_NUMBER, TYPE_TEXT_VARIATION_PASSWORD - API level 3
|
// TYPE_CLASS_TEXT, TYPE_CLASS_NUMBER, TYPE_TEXT_VARIATION_PASSWORD - API level 3
|
||||||
int type = keyboardType & 0xFF;
|
int type = kbType & 0xFF;
|
||||||
|
|
||||||
if (type == 2) return InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD;
|
if (type == 2) return InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD;
|
||||||
if (type == 1) return InputType.TYPE_CLASS_NUMBER; // KEYBOARD_TYPE_NUMERIC
|
if (type == 1) return InputType.TYPE_CLASS_NUMBER; // KEYBOARD_TYPE_NUMERIC
|
||||||
|
|
@ -677,9 +642,9 @@ public class MainActivity extends Activity
|
||||||
return InputType.TYPE_CLASS_TEXT;
|
return InputType.TYPE_CLASS_TEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getKeyboardOptions() {
|
public static int calcKeyboardOptions(int kbType) {
|
||||||
// IME_ACTION_GO, IME_FLAG_NO_EXTRACT_UI - API level 3
|
// IME_ACTION_GO, IME_FLAG_NO_EXTRACT_UI - API level 3
|
||||||
if ((keyboardType & 0x100) != 0) {
|
if ((kbType & 0x100) != 0) {
|
||||||
return EditorInfo.IME_ACTION_SEND | EditorInfo.IME_FLAG_NO_EXTRACT_UI;
|
return EditorInfo.IME_ACTION_SEND | EditorInfo.IME_FLAG_NO_EXTRACT_UI;
|
||||||
} else {
|
} else {
|
||||||
return EditorInfo.IME_ACTION_GO | EditorInfo.IME_FLAG_NO_EXTRACT_UI;
|
return EditorInfo.IME_ACTION_GO | EditorInfo.IME_FLAG_NO_EXTRACT_UI;
|
||||||
|
|
@ -793,11 +758,21 @@ public class MainActivity extends Activity
|
||||||
|
|
||||||
public String shareScreenshot(String path) {
|
public String shareScreenshot(String path) {
|
||||||
try {
|
try {
|
||||||
File file = new File(getExternalAppDir() + "/screenshots/" + path);
|
Uri uri;
|
||||||
|
if (android.os.Build.VERSION.SDK_INT >= 23){ // android 6.0
|
||||||
|
uri = CCFileProvider.getUriForFile("screenshots/" + path);
|
||||||
|
} else {
|
||||||
|
// when trying to use content:// URIs on my android 4.0.3 test device
|
||||||
|
// - 1 app crashed
|
||||||
|
// - 1 app wouldn't show image previews
|
||||||
|
// so fallback to file:// on older devices as they seem to reliably work
|
||||||
|
File file = new File(getGameDataDirectory() + "/screenshots/" + path);
|
||||||
|
uri = Uri.fromFile(file);
|
||||||
|
}
|
||||||
Intent intent = new Intent();
|
Intent intent = new Intent();
|
||||||
|
|
||||||
intent.setAction(Intent.ACTION_SEND);
|
intent.setAction(Intent.ACTION_SEND);
|
||||||
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
|
intent.putExtra(Intent.EXTRA_STREAM, uri);
|
||||||
intent.setType("image/png");
|
intent.setType("image/png");
|
||||||
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
|
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
|
||||||
startActivity(Intent.createChooser(intent, "share via"));
|
startActivity(Intent.createChooser(intent, "share via"));
|
||||||
|
|
@ -808,109 +783,231 @@ public class MainActivity extends Activity
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ======================================================================
|
static String uploadFolder, savePath;
|
||||||
// -------------------------------- HTTP --------------------------------
|
final static int OPEN_REQUEST = 0x4F50454E;
|
||||||
// ======================================================================
|
final static int SAVE_REQUEST = 0x53415645;
|
||||||
// Implements java Android side of the Android HTTP backend (See Http.c)
|
|
||||||
static HttpURLConnection conn;
|
// https://stackoverflow.com/questions/36557879/how-to-use-native-android-file-open-dialog
|
||||||
static InputStream src;
|
// https://developer.android.com/guide/topics/providers/document-provider
|
||||||
static byte[] readCache = new byte[8192];
|
// https://developer.android.com/training/data-storage/shared/documents-files#java
|
||||||
|
// https://stackoverflow.com/questions/5657411/android-getting-a-file-uri-from-a-content-uri
|
||||||
|
public int openFileDialog(String folder) {
|
||||||
|
uploadFolder = folder;
|
||||||
|
|
||||||
public static int httpInit(String url, String method) {
|
|
||||||
try {
|
try {
|
||||||
conn = (HttpURLConnection)new URL(url).openConnection();
|
Intent intent = new Intent()
|
||||||
conn.setDoInput(true);
|
.setType("*/*")
|
||||||
conn.setRequestMethod(method);
|
.setAction(Intent.ACTION_GET_CONTENT);
|
||||||
conn.setInstanceFollowRedirects(true);
|
|
||||||
|
|
||||||
httpAddMethodHeaders(method);
|
startActivityForResult(Intent.createChooser(intent, "Select a file"), OPEN_REQUEST);
|
||||||
return 0;
|
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
return httpOnError(ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void httpAddMethodHeaders(String method) {
|
|
||||||
if (!method.equals("HEAD")) return;
|
|
||||||
|
|
||||||
// Ever since dropbox switched to to chunked transfer encoding,
|
|
||||||
// sending a HEAD request to dropbox always seems to result in the
|
|
||||||
// next GET request failing with 'Unexpected status line' ProtocolException
|
|
||||||
// Seems to be a known issue: https://github.com/square/okhttp/issues/3689
|
|
||||||
// Simplest workaround is to ask for connection to be closed after HEAD request
|
|
||||||
httpSetHeader("connection", "close");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void httpSetHeader(String name, String value) {
|
|
||||||
conn.setRequestProperty(name, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int httpSetData(byte[] data) {
|
|
||||||
try {
|
|
||||||
conn.setDoOutput(true);
|
|
||||||
conn.getOutputStream().write(data);
|
|
||||||
conn.getOutputStream().flush();
|
|
||||||
return 0;
|
|
||||||
} catch (Exception ex) {
|
|
||||||
return httpOnError(ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int httpPerform() {
|
|
||||||
int len;
|
|
||||||
try {
|
|
||||||
conn.connect();
|
|
||||||
// Some implementations also provide this as getHeaderField(0), but some don't
|
|
||||||
httpParseHeader("HTTP/1.1 " + conn.getResponseCode() + " MSG");
|
|
||||||
|
|
||||||
// Legitimate webservers aren't going to reply with over 200 headers
|
|
||||||
for (int i = 0; i < 200; i++) {
|
|
||||||
String key = conn.getHeaderFieldKey(i);
|
|
||||||
String val = conn.getHeaderField(i);
|
|
||||||
if (key == null && val == null) break;
|
|
||||||
|
|
||||||
if (key == null) {
|
|
||||||
httpParseHeader(val);
|
|
||||||
} else {
|
|
||||||
httpParseHeader(key + ":" + val);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
src = conn.getInputStream();
|
|
||||||
while ((len = src.read(readCache)) > 0) {
|
|
||||||
httpAppendData(readCache, len);
|
|
||||||
}
|
|
||||||
|
|
||||||
httpFinish();
|
|
||||||
return 0;
|
|
||||||
} catch (Exception ex) {
|
|
||||||
return httpOnError(ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void httpFinish() {
|
|
||||||
conn = null;
|
|
||||||
try {
|
|
||||||
src.close();
|
|
||||||
} catch (Exception ex) { }
|
|
||||||
src = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Should we prune this list?
|
|
||||||
static List<String> errors = new ArrayList<String>();
|
|
||||||
|
|
||||||
static int httpOnError(Exception ex) {
|
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
httpFinish();
|
return 0;// TODO log error to in-game
|
||||||
errors.add(ex.getMessage());
|
}
|
||||||
return -errors.size(); // don't want 0 as an error code
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String httpDescribeError(int res) {
|
// https://stackoverflow.com/questions/8586691/how-to-open-file-save-dialog-in-android
|
||||||
res = -res - 1;
|
public int saveFileDialog(String path, String name) {
|
||||||
return res >= 0 && res < errors.size() ? errors.get(res) : null;
|
savePath = path;
|
||||||
|
|
||||||
|
try {
|
||||||
|
Intent intent = new Intent()
|
||||||
|
.setType("/")
|
||||||
|
.addCategory(Intent.CATEGORY_OPENABLE)
|
||||||
|
.setAction(Intent.ACTION_CREATE_DOCUMENT)
|
||||||
|
.setType("application/octet-stream")
|
||||||
|
.putExtra(Intent.EXTRA_TITLE, name);
|
||||||
|
|
||||||
|
startActivityForResult(Intent.createChooser(intent, "Choose destination"), SAVE_REQUEST);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
return 0;// TODO log error to in-game
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
native static void httpParseHeader(String header);
|
@Override
|
||||||
native static void httpAppendData(byte[] data, int len);
|
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||||
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
|
if (resultCode != RESULT_OK) return;
|
||||||
|
|
||||||
|
if (requestCode == OPEN_REQUEST) {
|
||||||
|
handleOpenResult(data);
|
||||||
|
} else if (requestCode == SAVE_REQUEST) {
|
||||||
|
handleSaveResult(data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void handleSaveResult(Intent data) {
|
||||||
|
try {
|
||||||
|
Uri selected = data.getData();
|
||||||
|
saveTempToContent(selected, savePath);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
// TODO log error to in-game
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void saveTempToContent(Uri uri, String path) throws IOException {
|
||||||
|
File file = new File(getGameDataDirectory() + "/" + path);
|
||||||
|
OutputStream output = null;
|
||||||
|
InputStream input = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
input = new FileInputStream(file);
|
||||||
|
output = getContentResolver().openOutputStream(uri);
|
||||||
|
copyStreamData(input, output);
|
||||||
|
file.delete();
|
||||||
|
} finally {
|
||||||
|
if (output != null) output.close();
|
||||||
|
if (input != null) input.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void handleOpenResult(Intent data) {
|
||||||
|
try {
|
||||||
|
Uri selected = data.getData();
|
||||||
|
String name = getContentFilename(selected);
|
||||||
|
String path = saveContentToTemp(selected, uploadFolder, name);
|
||||||
|
pushCmd(CMD_OFD_RESULT, uploadFolder + "/" + name);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
// TODO log error to in-game
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String getContentFilename(Uri uri) {
|
||||||
|
Cursor cursor = getContentResolver().query(uri, new String[] { OpenableColumns.DISPLAY_NAME }, null, null, null);
|
||||||
|
if (cursor != null && cursor.moveToFirst()) {
|
||||||
|
int cIndex = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
|
||||||
|
if (cIndex != -1) return cursor.getString(cIndex);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
String saveContentToTemp(Uri uri, String folder, String name) throws IOException {
|
||||||
|
//File file = new File(getExternalFilesDir(null), folder + "/" + name);
|
||||||
|
File file = new File(getGameDataDirectory() + "/" + folder + "/" + name);
|
||||||
|
file.getParentFile().mkdirs();
|
||||||
|
|
||||||
|
OutputStream output = null;
|
||||||
|
InputStream input = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
output = new FileOutputStream(file);
|
||||||
|
input = getContentResolver().openInputStream(uri);
|
||||||
|
copyStreamData(input, output);
|
||||||
|
} finally {
|
||||||
|
if (output != null) output.close();
|
||||||
|
if (input != null) input.close();
|
||||||
|
}
|
||||||
|
return file.getAbsolutePath();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void copyStreamData(InputStream input, OutputStream output) throws IOException {
|
||||||
|
byte[] temp = new byte[8192];
|
||||||
|
int length;
|
||||||
|
while ((length = input.read(temp)) > 0)
|
||||||
|
output.write(temp, 0, length);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ======================================================================
|
||||||
|
// -------------------------------- SSL ---------------------------------
|
||||||
|
// ======================================================================
|
||||||
|
static X509TrustManager trust;
|
||||||
|
static CertificateFactory certFactory;
|
||||||
|
static ArrayList<X509Certificate> chain = new ArrayList<X509Certificate>();
|
||||||
|
|
||||||
|
static X509TrustManager CreateTrust() throws Exception {
|
||||||
|
TrustManagerFactory factory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
|
||||||
|
// Load default Trust Anchor certificates
|
||||||
|
factory.init((KeyStore)null);
|
||||||
|
|
||||||
|
TrustManager[] trustManagers = factory.getTrustManagers();
|
||||||
|
for (int i = 0; i < trustManagers.length; i++)
|
||||||
|
{
|
||||||
|
// Should be first entry, e.g. X509TrustManagerImpl
|
||||||
|
if (trustManagers[i] instanceof X509TrustManager)
|
||||||
|
return (X509TrustManager)trustManagers[i];
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int sslCreateTrust() {
|
||||||
|
try {
|
||||||
|
trust = CreateTrust();
|
||||||
|
return 1;
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void sslAddCert(byte[] data) {
|
||||||
|
try {
|
||||||
|
if (certFactory == null) certFactory = CertificateFactory.getInstance("X.509");
|
||||||
|
if (certFactory == null) return;
|
||||||
|
|
||||||
|
InputStream in = new ByteArrayInputStream(data);
|
||||||
|
X509Certificate cert = (X509Certificate) certFactory.generateCertificate(in);
|
||||||
|
chain.add(cert);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int sslVerifyChain() {
|
||||||
|
int result = -200;
|
||||||
|
try {
|
||||||
|
X509Certificate[] certs = new X509Certificate[chain.size()];
|
||||||
|
for (int i = 0; i < chain.size(); i++) certs[i] = chain.get(i);
|
||||||
|
|
||||||
|
trust.checkServerTrusted(certs, "INV");
|
||||||
|
// standard java checks auth type, but android doesn't
|
||||||
|
// See https://issues.chromium.org/issues/40955801
|
||||||
|
result = 0;
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
chain.clear();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ======================================================================
|
||||||
|
// --------------------------- Legacy window ----------------------------
|
||||||
|
// ======================================================================
|
||||||
|
Canvas cur_canvas;
|
||||||
|
public int[] legacy_lockCanvas(int l, int t, int r, int b) {
|
||||||
|
CCView surface = (CCView)curView;
|
||||||
|
Rect rect = new Rect(l, t, r, b);
|
||||||
|
cur_canvas = surface.getHolder().lockCanvas(rect);
|
||||||
|
|
||||||
|
int w = (r - l);
|
||||||
|
int h = (b - t);
|
||||||
|
return new int[w * h];
|
||||||
|
}
|
||||||
|
|
||||||
|
public void legacy_unlockCanvas(int l, int t, int r, int b, int[] buf) {
|
||||||
|
CCView surface = (CCView)curView;
|
||||||
|
int w = (r - l);
|
||||||
|
int h = (b - t);
|
||||||
|
|
||||||
|
// TODO avoid need to swap R/B
|
||||||
|
for (int i = 0; i < buf.length; i++)
|
||||||
|
{
|
||||||
|
int color = buf[i];
|
||||||
|
int R = color & 0x00FF0000;
|
||||||
|
int B = color & 0x000000FF;
|
||||||
|
|
||||||
|
buf[i] = (color & 0xFF00FF00) | (B << 16) | (R >> 16);
|
||||||
|
}
|
||||||
|
|
||||||
|
cur_canvas.drawBitmap(buf, 0, w, l, t, w, h, false, null);
|
||||||
|
surface.getHolder().unlockCanvasAndPost(cur_canvas);
|
||||||
|
cur_canvas = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ buildscript {
|
||||||
jcenter()
|
jcenter()
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:3.3.1'
|
classpath 'com.android.tools.build:gradle:3.6.4'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#Sun Feb 05 19:39:12 IST 2017
|
#Fri May 06 22:33:57 AEST 2022
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
|
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-bin.zip
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
|
|
||||||
10
credits.txt
|
|
@ -4,13 +4,15 @@
|
||||||
* AndrewPH - Advice on how to improve ui of both client and launcher, multiple
|
* AndrewPH - Advice on how to improve ui of both client and launcher, multiple
|
||||||
suggestions, and hosting the automatic build bot for ClassiCube.
|
suggestions, and hosting the automatic build bot for ClassiCube.
|
||||||
* 123DMWM - many suggestions, and assistance in identifying bugs and their causes.
|
* 123DMWM - many suggestions, and assistance in identifying bugs and their causes.
|
||||||
* video_error - Allowing remote use of an OSX machine, pointing out many flaws in the plugin API.
|
* video_error - Allowing remote use of an macOS machine, pointing out many flaws in the plugin API.
|
||||||
The OSX port would not have been possible without you, thanks!
|
The macOS port would not have been possible without you, thanks!
|
||||||
* Jerralish - reverse engineering and documenting the original classic map generation algorithm.
|
* Jerralish - reverse engineering and documenting the original classic map generation algorithm.
|
||||||
* Cybertoon - Adding water animation, better metal step/dig sounds, identifying multiple flaws
|
* Cybertoon - Adding water animation, better metal step/dig sounds, identifying multiple flaws
|
||||||
* FabTheZen - suggestions about how to improve user experience, testing.
|
|
||||||
* Cheesse - multiple suggestions, testing ClassicalSharp on AMD graphics cards.
|
* Cheesse - multiple suggestions, testing ClassicalSharp on AMD graphics cards.
|
||||||
* Hemsindor - testing ClassicalSharp on OSX.
|
* Hemsindor - testing ClassicalSharp on macOS.
|
||||||
|
* headshotnoby - developing the Switch port.
|
||||||
|
* Beyond_5D - identifying many differences from original Classic
|
||||||
|
* shinovon - developing the Symbian port.
|
||||||
|
|
||||||
And a big thanks to everyone else in the ClassiCube community (who I didn't mention here),
|
And a big thanks to everyone else in the ClassiCube community (who I didn't mention here),
|
||||||
who in the past have provided many suggestions and assisted in identifying bugs.
|
who in the past have provided many suggestions and assisted in identifying bugs.
|
||||||
|
|
|
||||||
|
|
@ -16,43 +16,13 @@ Common compilation errors
|
||||||
Add ```-lrt``` when compiling. Occurs when using glibc versions before 2.17.
|
Add ```-lrt``` when compiling. Occurs when using glibc versions before 2.17.
|
||||||
|
|
||||||
#### fatal error: execinfo.h: No such file or directory
|
#### fatal error: execinfo.h: No such file or directory
|
||||||
Install ```libexecinfo``` package. Occurs when using musl.
|
Define `CC_BACKTRACE_BUILTIN` when compiling. Usually occurs when using musl.
|
||||||
|
|
||||||
#### Undefined reference to 'backtrace'
|
#### Undefined reference to 'backtrace'
|
||||||
Add ```-lexecinfo``` when compiling. Occurs when using musl.
|
Define `CC_BACKTRACE_BUILTIN` when compiling. Usually occurs when using musl.
|
||||||
|
|
||||||
Webclient patches
|
Webclient patches
|
||||||
---------------------
|
---------------------
|
||||||
#### Starting game **Error 00000002 when setting current directory**
|
|
||||||
This is caused by IndexedDB not being initialised, which also means saved maps are lost when the tab is closed.
|
|
||||||
|
|
||||||
Due to how IndexedDB works, you must load and initialise it before the game starts. Change:
|
|
||||||
|
|
||||||
```
|
|
||||||
<script type='text/javascript'>
|
|
||||||
var Module = {
|
|
||||||
preRun: [],
|
|
||||||
...
|
|
||||||
```
|
|
||||||
to
|
|
||||||
```
|
|
||||||
<script type='text/javascript'>
|
|
||||||
// need to load IndexedDB before running the game
|
|
||||||
function preloadIndexedDB() {
|
|
||||||
addRunDependency('load-idb');
|
|
||||||
FS.mkdir('/classicube');
|
|
||||||
FS.mount(IDBFS, {}, '/classicube');
|
|
||||||
FS.syncfs(true, function(err) {
|
|
||||||
if (err) window.cc_idbErr = err;
|
|
||||||
removeRunDependency('load-idb');
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
var Module = {
|
|
||||||
preRun: [ preloadIndexedDB ],
|
|
||||||
...
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Mouse scrolling not properly prevented
|
#### Mouse scrolling not properly prevented
|
||||||
With recent chrome/firefox versions, page is still scrolled and console is spammed with\
|
With recent chrome/firefox versions, page is still scrolled and console is spammed with\
|
||||||
```"[Intervention] Unable to preventDefault inside passive event listener due to target being treated as passive."```
|
```"[Intervention] Unable to preventDefault inside passive event listener due to target being treated as passive."```
|
||||||
|
|
|
||||||
|
|
@ -72,9 +72,6 @@ if __name__ == "__main__":
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script type='text/javascript'>
|
<script type='text/javascript'>
|
||||||
// need to load IndexedDB before running the game
|
|
||||||
function preloadIndexedDB() { _interop_LoadIndexedDB(); }
|
|
||||||
|
|
||||||
function resizeGameCanvas() {
|
function resizeGameCanvas() {
|
||||||
var cc_canv = $('canvas#canvas');
|
var cc_canv = $('canvas#canvas');
|
||||||
var dpi = window.devicePixelRatio;
|
var dpi = window.devicePixelRatio;
|
||||||
|
|
@ -98,7 +95,7 @@ if __name__ == "__main__":
|
||||||
}
|
}
|
||||||
|
|
||||||
var Module = {
|
var Module = {
|
||||||
preRun: [ preloadIndexedDB, resizeGameCanvas ],
|
preRun: [ resizeGameCanvas ],
|
||||||
postRun: [],
|
postRun: [],
|
||||||
arguments: {{game_args|safe}},
|
arguments: {{game_args|safe}},
|
||||||
print: function(text) {
|
print: function(text) {
|
||||||
|
|
@ -136,7 +133,7 @@ if __name__ == "__main__":
|
||||||
```
|
```
|
||||||
|
|
||||||
#### static/classisphere.js
|
#### static/classisphere.js
|
||||||
Download `cs.classicube.net/c_client/latest/ClassiCube.js` for this
|
Download `cs.classicube.net/client/latest/ClassiCube.js` for this
|
||||||
|
|
||||||
#### static/default.zip
|
#### static/default.zip
|
||||||
Download `classicube.net/static/default.zip` for this
|
Download `classicube.net/static/default.zip` for this
|
||||||
|
|
|
||||||
|
|
@ -1,24 +1,34 @@
|
||||||
So you want to host your own version of the webclient? It's pretty easy to do, you need 3 files:
|
Hosting your own version of the ClassiCube webclient is relatively straightforward
|
||||||
1) A web page to initialise the .js and display the game
|
|
||||||
|
Only the following 3 files are required:
|
||||||
|
1) A web page to initialise the game .js and display the game
|
||||||
2) The game .js file
|
2) The game .js file
|
||||||
3) The default texture pack
|
3) The default texture pack
|
||||||
|
|
||||||
|
TODO: more advanced sample (authentication, custom game.js, skin server)
|
||||||
|
|
||||||
### Example setup
|
### Example setup
|
||||||
|
|
||||||
For example, let's assume our site is setup like this:
|
For example, let's assume your website is setup like this:
|
||||||
* `example.com/play.html`
|
* `example.com/play.html`
|
||||||
* `example.com/static/classisphere.js`
|
* `example.com/static/classisphere.js`
|
||||||
* `example.com/static/default.zip`
|
* `example.com/static/default.zip`
|
||||||
|
|
||||||
For simplicitly,
|
For simplicitly,
|
||||||
1) Download `cs.classicube.net/c_client/latest/ClassiCube.js`, then upload it to `static/classisphere.js` on the webserver
|
1) Download `cs.classicube.net/client/latest/ClassiCube.js`, then upload it to `static/classisphere.js` on the webserver
|
||||||
2) Download `classicube.net/static/default.zip`, then upload it to `static/default.zip` on the webserver
|
2) Download `classicube.net/static/default.zip`, then upload it to `static/default.zip` on the webserver
|
||||||
|
|
||||||
The play.html page is the trickiest part, because how to implement this is website-specific. (depends on how your website is styled, what webserver you use, what programming language is used to generate the html, etc)
|
The play.html page is the trickiest part, because how to implement this is website-specific. (depends on how the website is styled, what webserver is used, what programming language is used to generate the html, etc)
|
||||||
|
|
||||||
|
#### Changing where the game downloads the texture pack from
|
||||||
|
|
||||||
|
There should be this piece of code somewhere in the .JS file: `function _interop_AsyncDownloadTexturePack(rawPath) {`
|
||||||
|
|
||||||
|
A bit below that, there should be `var url = '/static/default.zip';` - change that to the desired URL.
|
||||||
|
|
||||||
#### Embedding the game in play.html
|
#### Embedding the game in play.html
|
||||||
|
|
||||||
You are required to have this HTML code somewhere in the page:
|
The following HTML code is required to be somewhere in the webpage:
|
||||||
```HTML
|
```HTML
|
||||||
<!-- the canvas *must not* have any border or padding, or mouse coords will be wrong -->
|
<!-- the canvas *must not* have any border or padding, or mouse coords will be wrong -->
|
||||||
<canvas id="canvas" style="display:block; border:0; padding:0; background-color: black;"
|
<canvas id="canvas" style="display:block; border:0; padding:0; background-color: black;"
|
||||||
|
|
@ -26,11 +36,8 @@ You are required to have this HTML code somewhere in the page:
|
||||||
<span id="logmsg"></span>
|
<span id="logmsg"></span>
|
||||||
|
|
||||||
<script type='text/javascript'>
|
<script type='text/javascript'>
|
||||||
// need to load IndexedDB before running the game
|
|
||||||
function preloadIndexedDB() { _interop_LoadIndexedDB(); }
|
|
||||||
|
|
||||||
var Module = {
|
var Module = {
|
||||||
preRun: [ preloadIndexedDB ],
|
preRun: [],
|
||||||
postRun: [],
|
postRun: [],
|
||||||
arguments: [ {username}, {mppass}, {server ip}, {server port} ],
|
arguments: [ {username}, {mppass}, {server ip}, {server port} ],
|
||||||
print: function(text) {
|
print: function(text) {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
### Introduction
|
## Introduction
|
||||||
|
|
||||||
The 2D gui works by showing multiple 'screens' or 'layers' on top of each other. Each 'screen' usually contains one or more widgets. (e.g. a 'ButtonWidget' for a 'Close' button)
|
The 2D GUI works by showing multiple 'screens' or 'layers' on top of each other. Each 'screen' usually contains one or more widgets. (e.g. a 'ButtonWidget' for a 'Close' button)
|
||||||
|
|
||||||
Here's an example of multiple screens:
|
Here's an example of multiple screens:
|
||||||
|
|
||||||
|
|
@ -11,52 +11,143 @@ The example above consists of three screens:
|
||||||
2. `ChatScreen` - Text widgets in the bottom left area (Only one is currently used though)
|
2. `ChatScreen` - Text widgets in the bottom left area (Only one is currently used though)
|
||||||
3. `HUDScreen` - Text in the top left and hotbar at the bottom
|
3. `HUDScreen` - Text in the top left and hotbar at the bottom
|
||||||
|
|
||||||
### Screen interface
|
TODO: Explain event processing architecture
|
||||||
|
|
||||||
`Init` - Where you initialise stuff that lasts for the entire duration the screen is open, e.g. hooking into events.
|
TODO: Explain pointer IDs. maybe a separate input-architecture.md file?
|
||||||
|
|
||||||
`Free` - Where you undo the allocating/event hooking you did in Init.
|
TODO: Explain dynamic vertex buffer
|
||||||
|
|
||||||
`ContextRecreated` - Where you actually allocate stuff like textures of widgets and the screen's dynamic vertex buffer. It's where you should call stuff like ButtonWidget_SetConst, TextWidget_SetConst, etc.
|
## Screen interface
|
||||||
|
|
||||||
`ContextLost` - Where you destroy what you allocated in `ContextRecreated`. You **MUST** destroy all the textures/vertex buffers that you allocated, as otherwise you will get an error later with 'recreating context failed' with the Direct3D9 backend when you next try to resize the window or go fullscreen.
|
#### `void Init(void* screen)`
|
||||||
|
|
||||||
`Layout` - Where you reposition all the elements (i.e. widgets + anything else) of this screen. (Will always be called when initially showing this screen and whenever window resizes)
|
Where you initialise state and objects that lasts for the entire duration the screen is open
|
||||||
|
|
||||||
`HandlesInputDown/HandlesInputUp` - Called whenever a keyboard or mouse button is pressed/released.
|
E.g. Hooking into events
|
||||||
|
|
||||||
`HandlesKeyPress` - Called when a key character is entered on the keyboard. (e.g. you'd get '$' here if user pressed 4 while holding shift)
|
#### `void Free(void* screen)`
|
||||||
|
|
||||||
`HandlesTextChanged` - Called when the text changes in the on-screen keyboard. (i.e. KeyPress but for mobile text input)
|
Where you undo the allocating/event hooking you did in `Init`.
|
||||||
|
|
||||||
`HandlesMouseScroll` - Called when the wheel is scrolled on the mouse.
|
#### `void ContextRecreated(void* screen)`
|
||||||
|
|
||||||
`HandlesPointerDown/HandlesPointerUp/HandlesPointerMove` - Called whenever the left mouse or a touch finger is pressed/released/moved.
|
Where you allocate resources used for rendering, such as fonts, textures of widgets, and the screen's dynamic vertex buffer.
|
||||||
|
|
||||||
`BuildMesh` - Where you fill out the screen's dynamic vertex buffer with the vertices of all the widgets. This gets called just before `Render` whenever s->dirty is set to true. (pointer/input events automatically set s->dirty to true for the next frame)
|
E.g. where you should call `ButtonWidget_SetConst`, `TextWidget_SetConst`, etc.
|
||||||
|
|
||||||
`Update` - Called just before `Render` every frame and also provides the elapsed time since last render. Typically you'd use this to update simple stuff that depends on accumulated time. (e.g. whether the flashing caret should appear or not for input widgets)
|
#### `void ContextLost(void* screen)`
|
||||||
|
|
||||||
`Render` - Called every frame and is where you actually draw the widgets and other stuff on-screen. Don't forget to call Gfx_SetTexturing(true) before rendering widgets and Gfx_SetTexturing(false) once you're done.
|
Where you destroy/release all that resources that were allocated in `ContextRecreated`.
|
||||||
|
|
||||||
### Screen members
|
Note: You **MUST** destroy all the textures/vertex buffers that you allocated, as otherwise you will get an error later with 'recreating context failed' with the Direct3D9 backend when you next try to resize the window or go fullscreen. TODO: rewrite this note
|
||||||
|
|
||||||
`VTABLE` - Set to a ScreenVTABLE instance which implements all of the `Screen interface` functions
|
#### `void Layout(void* screen)`
|
||||||
|
|
||||||
`grabsInput` - Whether this screen grabs all input. If any screen grabs all input, then the mouse cursor becomes visible, W/A/S/D stops causing player movement, etc.
|
Where you reposition all the elements (i.e. widgets + anything else) of this screen.
|
||||||
|
|
||||||
`blocksWorld` - Whether this screen completely and opaquely covers the game world behind it. (e.g. loading screen and disconnect screen)
|
Note: This is called when initially showing this screen, and whenever the window is resized
|
||||||
|
|
||||||
`closable` - Whether this screen is automatically closed when pressing Escape. (Usually should be true for screens that are menus, e.g. pause screen)
|
#### `int HandlesInputDown(void* screen, int button)`
|
||||||
|
|
||||||
`dirty` - Whether this screen will have `BuildMesh` called on the next frame
|
Called whenever a input button (keyboard/mouse/gamepad) is pressed.
|
||||||
|
|
||||||
`maxVertices` - The maximum number of vertices that this screen's dynamic vertex buffer may use
|
#### `void OnInputUp(void* screen, int button)`
|
||||||
|
|
||||||
`vb` - This screen's dynamic vertex buffer
|
Called whenever a input button (keyboard/mouse/gamepad) is released.
|
||||||
|
|
||||||
|
#### `int HandlesKeyPress(void* screen, char keyChar)`
|
||||||
|
|
||||||
|
Called when a key character is entered on the keyboard.
|
||||||
|
|
||||||
|
E.g. you'd get '$' here if user pressed 4 while holding shift)
|
||||||
|
|
||||||
|
#### `int HandlesTextChanged(void* screen, const cc_string* str)`
|
||||||
|
|
||||||
|
Called when the text changes in the on-screen keyboard. (i.e. KeyPress but for mobile text input)
|
||||||
|
|
||||||
|
#### `int HandlesMouseScroll(void* screen, float wheelDelta)`
|
||||||
|
|
||||||
|
Called when the wheel is scrolled on the mouse.
|
||||||
|
|
||||||
|
#### `int HandlesPointerDown(void* screen, int pointerID, int x, int y)`
|
||||||
|
|
||||||
|
Called whenever the left mouse or a touch finger is pressed.
|
||||||
|
|
||||||
|
#### `void OnPointerUp(void* screen, int pointerID, int x, int y)`
|
||||||
|
|
||||||
|
Called whenever the left mouse or a touch finger is released.
|
||||||
|
|
||||||
|
#### `int HandlesPointerMove(void* screen, int pointerID, int x, int y)`
|
||||||
|
|
||||||
|
Called whenever the left mouse or a touch finger is moved.
|
||||||
|
|
||||||
|
#### `void BuildMesh(void* screen)`
|
||||||
|
|
||||||
|
Where you fill out the screen's dynamic vertex buffer with the vertices of all the widgets.
|
||||||
|
|
||||||
|
Note: This gets called just before `Render()` whenever the `dirty` field is set to `true`.
|
||||||
|
|
||||||
|
Note: Pointer/Input events automatically set the `dirty` field to `true` for the next frame
|
||||||
|
|
||||||
|
#### `void Update(void* screen, double delta)`
|
||||||
|
|
||||||
|
Called just before `Render()` every frame and also provides the elapsed time since last render.
|
||||||
|
|
||||||
|
Typically you'd use this to update simple stuff that depends on accumulated time.
|
||||||
|
(E.g. whether the flashing caret should appear or not for input widgets)
|
||||||
|
|
||||||
|
#### `void Render(void* screen)`
|
||||||
|
|
||||||
|
Called every frame and is where you actually draw the widgets and other stuff on-screen.
|
||||||
|
|
||||||
|
## Screen members
|
||||||
|
|
||||||
|
#### `struct ScreenVTABLE* VTABLE`
|
||||||
|
|
||||||
|
Set to a `ScreenVTABLE` instance which implements all of the `Screen interface` functions
|
||||||
|
|
||||||
|
#### `cc_bool grabsInput`
|
||||||
|
|
||||||
|
Whether this screen grabs all input.
|
||||||
|
|
||||||
|
Note: If any screen grabs all input, then the mouse cursor becomes visible, W/A/S/D stops causing player movement, etc.
|
||||||
|
|
||||||
|
#### `cc_bool blocksWorld`
|
||||||
|
|
||||||
|
Whether this screen completely and opaquely covers the game world behind it.
|
||||||
|
|
||||||
|
E.g. loading screen and disconnect screen
|
||||||
|
|
||||||
|
#### `cc_bool closable`
|
||||||
|
|
||||||
|
Whether this screen is automatically closed when pressing Escape.
|
||||||
|
|
||||||
|
Note: Usually should be true for screens that are menus (e.g. pause screen)
|
||||||
|
|
||||||
|
#### `cc_bool dirty`
|
||||||
|
|
||||||
|
Whether this screen will have `BuildMesh()` called on the next frame
|
||||||
|
|
||||||
|
Note: This should be set to `true` whenever any event/actions that might alter the screen's appearance occurs TODO explain when automatically called?
|
||||||
|
|
||||||
|
#### `int maxVertices`
|
||||||
|
|
||||||
|
The maximum number of vertices that this screen's dynamic vertex buffer may use
|
||||||
|
|
||||||
|
#### `GfxResourceID vb`
|
||||||
|
|
||||||
|
This screen's dynamic vertex buffer
|
||||||
|
|
||||||
|
#### `struct Widget** widgets;`
|
||||||
|
|
||||||
|
Pointer to the array of pointers to widgets that are contained in this screen
|
||||||
|
|
||||||
|
#### `int numWidgets;`
|
||||||
|
|
||||||
|
The number of widgets that are contained in this screen
|
||||||
|
|
||||||
|
|
||||||
### Screen notes
|
## Screen notes
|
||||||
|
|
||||||
* When the screen is shown via `Gui_Add`, the following functions are called
|
* When the screen is shown via `Gui_Add`, the following functions are called
|
||||||
1) Init
|
1) Init
|
||||||
|
|
@ -74,3 +165,13 @@ The example above consists of three screens:
|
||||||
3) Layout
|
3) Layout
|
||||||
|
|
||||||
Note: Whenever `default.png` (font texture) changes, `Gui_Refresh` is called for all screens. Therefore, fonts should usually be allocated/freed in `ContextRecreated/ContextLost` instead of `Init/Free` to ensure that the screen still looks correct after the texture pack changes.
|
Note: Whenever `default.png` (font texture) changes, `Gui_Refresh` is called for all screens. Therefore, fonts should usually be allocated/freed in `ContextRecreated/ContextLost` instead of `Init/Free` to ensure that the screen still looks correct after the texture pack changes.
|
||||||
|
|
||||||
|
TODO: Move this note earlier?
|
||||||
|
|
||||||
|
# Putting it altogether
|
||||||
|
|
||||||
|
TODO Add example of screen
|
||||||
|
|
||||||
|
Simple menu example that grabs all input
|
||||||
|
|
||||||
|
More complicated example too
|
||||||
147
doc/modules.md
|
|
@ -1,119 +1,124 @@
|
||||||
The overall source code is structured where each .c represents a particular module. These modules are:
|
The overall source code is structured where each .c represents a particular module. These modules are:
|
||||||
|
|
||||||
|
TODO: explain multiple backends for some Modules
|
||||||
|
|
||||||
## 2D modules
|
## 2D modules
|
||||||
|File|Functionality|
|
|Module|Functionality|
|
||||||
|--------|-------|
|
|--------|-------|
|
||||||
|Bitmap.c|Represents a 2D array of pixels (and encoding/decoding to PNG)
|
|Bitmap|Represents a 2D array of pixels (and encoding/decoding to PNG)
|
||||||
|Drawer2D.c|Contains a variety of drawing operations on bitmaps (including text and fonts)
|
|Drawer2D|Contains a variety of drawing operations on bitmaps (including text and fonts)
|
||||||
|PackedCol.c|32 bit RGBA color in a format suitable for using as color component of a vertex
|
|PackedCol|32 bit RGBA color in a format suitable for using as color component of a vertex
|
||||||
|
|SystemFonts|Drawing, measuring, and retrieving the list of platform/system specific fonts
|
||||||
|
|
||||||
## Audio modules
|
## Audio modules
|
||||||
|File|Functionality|
|
|Module|Functionality|
|
||||||
|--------|-------|
|
|--------|-------|
|
||||||
|Audio.c|Playing music and dig/place/step sounds, and abstracts a PCM audio playing API
|
|Audio|Playing music and dig/place/step sounds, and abstracts a PCM audio playing API
|
||||||
|Vorbis.c| Decodes [ogg vorbis](https://xiph.org/vorbis/) audio into PCM audio samples
|
|Vorbis| Decodes [ogg vorbis](https://xiph.org/vorbis/) audio into PCM audio samples
|
||||||
|
|
||||||
## Entity modules
|
## Entity modules
|
||||||
|File|Functionality|
|
|Module|Functionality|
|
||||||
|--------|-------|
|
|--------|-------|
|
||||||
|Entity.c|Represents an in-game entity, and manages updating and rendering all entities
|
|Entity|Represents an in-game entity, and manages updating and rendering all entities
|
||||||
|EntityComponents.c|Various components that can be used by entities (e.g. tilt, animation, hacks state)
|
|EntityComponents|Various components that can be used by entities (e.g. tilt, animation, hacks state)
|
||||||
|Model.c|Contains the list of entity models, and provides relevant methods for entity models
|
|Model|Contains the list of entity models, and provides relevant methods for entity models
|
||||||
|Particle.c|Represents particle effects, and manages rendering and spawning particles
|
|Particle|Represents particle effects, and manages rendering and spawning particles
|
||||||
|
|
||||||
## Game modules
|
## Game modules
|
||||||
|File|Functionality|
|
|File|Functionality|
|
||||||
|--------|-------|
|
|--------|-------|
|
||||||
|Block.c|Stores properties and data for blocks (e.g. collide type, draw type, sound type)
|
|Block|Stores properties and data for blocks (e.g. collide type, draw type, sound type)
|
||||||
|BlockPhysics.c|Implements simple block physics for singleplayer
|
|BlockPhysics|Implements simple block physics for singleplayer
|
||||||
|Camera.c|Represents a camera (can be first or third person)
|
|Camera|Represents a camera (can be first or third person)
|
||||||
|Chat.c|Manages sending, adding, logging and handling chat
|
|Chat|Manages sending, adding, logging and handling chat
|
||||||
|Game.c|Manages the overall game loop, state, and variables (e.g. renders a frame, runs scheduled tasks)
|
|Game|Manages the overall game loop, state, and variables (e.g. renders a frame, runs scheduled tasks)
|
||||||
|Input.c|Manages keyboard, mouse, and touch state and events, and implements base handlers for them
|
|Input|Manages keyboard, mouse, and touch state and events, and implements base handlers for them
|
||||||
|Inventory.c|Manages inventory hotbar, and ordering of blocks in the inventory menu
|
|Inventory|Manages inventory hotbar, and ordering of blocks in the inventory menu
|
||||||
|
|
||||||
## Game gui modules
|
## Game gui modules
|
||||||
|File|Functionality|
|
|File|Functionality|
|
||||||
|--------|-------|
|
|--------|-------|
|
||||||
|Gui.c|Describes and manages the 2D GUI elements on screen
|
|Gui|Describes and manages the 2D GUI elements on screen
|
||||||
|IsometricDrawer.c|Draws 2D isometric blocks for the hotbar and inventory UIs
|
|IsometricDrawer|Draws 2D isometric blocks for the hotbar and inventory UIs
|
||||||
|Menus.c|Contains all 2D non-menu screens (e.g. inventory, HUD, loading, chat)
|
|Menus|Contains all 2D non-menu screens (e.g. inventory, HUD, loading, chat)
|
||||||
|Screens.c|Contains all 2D menu screens (e.g. pause menu, keys list menu, font list menu)
|
|Screens|Contains all 2D menu screens (e.g. pause menu, keys list menu, font list menu)
|
||||||
|Widgets.c|Contains individual GUI widgets (e.g. button, label)
|
|Widgets|Contains individual GUI widgets (e.g. button, label)
|
||||||
|
|
||||||
## Graphics modules
|
## Graphics modules
|
||||||
|File|Functionality|
|
|Module|Functionality|
|
||||||
|--------|-------|
|
|--------|-------|
|
||||||
|Builder.c|Converts a 16x16x16 chunk into a mesh of vertices
|
|Builder|Converts a 16x16x16 chunk into a mesh of vertices
|
||||||
|Drawer.c|Draws the vertices for a cuboid region
|
|Drawer|Draws the vertices for a cuboid region
|
||||||
|Graphics.c|Abstracts a 3D graphics rendering API
|
|Graphics|Abstracts a 3D graphics rendering API
|
||||||
|
|
||||||
## I/O modules
|
## I/O modules
|
||||||
|File|Functionality|
|
|Module|Functionality|
|
||||||
|--------|-------|
|
|--------|-------|
|
||||||
|Deflate.c|Decodes and encodes data compressed using DEFLATE (in addition to GZIP/ZLIB headers)
|
|Deflate|Decodes and encodes data compressed using DEFLATE (in addition to GZIP/ZLIB headers)
|
||||||
|Stream.c|Abstract reading and writing data to/from various sources in a streaming manner
|
|Stream|Abstract reading and writing data to/from various sources in a streaming manner
|
||||||
|
|
||||||
## Launcher modules
|
## Launcher modules
|
||||||
|File|Functionality|
|
|Module|Functionality|
|
||||||
|--------|-------|
|
|--------|-------|
|
||||||
|Launcher.c|Manages the overall launcher loop, state, and variables (e.g. resets pixels in areas, marks areas as needing to be redrawn)
|
|Launcher|Manages the overall launcher loop, state, and variables (e.g. resets pixels in areas, marks areas as needing to be redrawn)
|
||||||
|LScreens.c|Contains all the menus in the launcher (e.g. servers list, updates menu, main menu)
|
|LBackend|Handles the rendering of widgets and forwarding input events to screens/menus
|
||||||
|LWeb.c|Responsible for launcher related web requests (e.g. signing in, fetching servers list)
|
|LScreens|Contains all the menus in the launcher (e.g. servers list, updates menu, main menu)
|
||||||
|LWidgets.c|Contains individual launcher GUI widgets (e.g. button, label, input textbox)
|
|LWeb|Responsible for launcher related web requests (e.g. signing in, fetching servers list)
|
||||||
|Resources.c|Responsible for checking, downloading, and creating the default assets (e.g. default.zip, sounds)
|
|LWidgets|Contains individual launcher GUI widgets (e.g. button, label, input textbox)
|
||||||
|
|Resources|Responsible for checking, downloading, and creating the default assets (e.g. default.zip, sounds)
|
||||||
|
|
||||||
## Map modules
|
## Map modules
|
||||||
|File|Description|
|
|Module|Description|
|
||||||
|--------|-------|
|
|--------|-------|
|
||||||
|Formats.c|Imports/exports a world from/to several map file formats (e.g. .cw, .dat, .lvl)
|
|Formats|Imports/exports a world from/to several map file formats (e.g. .cw, .dat, .lvl)
|
||||||
|Generator.c|Generates a new world in either a flatgrass or Minecraft Classic style
|
|Generator|Generates a new world in either a flatgrass or Minecraft Classic style
|
||||||
|Lighting.c|Gets lighting colors at coordinates in the world
|
|Lighting|Gets lighting colors at coordinates in the world
|
||||||
|World.c|Manages fixed size 3D array of blocks and associated environment metadata
|
|World|Manages fixed size 3D array of blocks and associated environment metadata
|
||||||
|
|
||||||
## Math/Physics modules
|
## Math/Physics modules
|
||||||
|File|Description|
|
|Module|Description|
|
||||||
|--------|-------|
|
|--------|-------|
|
||||||
|ExtMath.c|Math functions, math constants, and a Random Number Generator
|
|ExtMath|Math functions, math constants, and a Random Number Generator
|
||||||
|Physics.c|AABBs and geometry intersection
|
|Physics|AABBs and geometry intersection
|
||||||
|Picking.c|Performs raytracing to e.g. determine the picked/selected block in the world
|
|Picking|Performs raytracing to e.g. determine the picked/selected block in the world
|
||||||
|Vectors.c|Contains vector,matrix,and frustum culling
|
|Vectors|Contains vector,matrix,and frustum culling
|
||||||
|
|
||||||
## Network modules
|
## Network modules
|
||||||
|File|Description|
|
|Module|Description|
|
||||||
|--------|-------|
|
|--------|-------|
|
||||||
|Http.c|Performs GET and POST requests in the background
|
|Http|Performs GET and POST requests in the background
|
||||||
|Protocol.c|Implements Minecraft Classic, CPE, and WoM environment protocols
|
|Protocol|Implements Minecraft Classic, CPE, and WoM environment protocols
|
||||||
|Server.c|Manages a connection to a singleplayer or multiplayer server
|
|Server|Manages a connection to a singleplayer or multiplayer server
|
||||||
|
|SSL|Performs SSL/TLS encryption and decryption
|
||||||
|
|
||||||
## Platform modules
|
## Platform modules
|
||||||
|File|Description|
|
|Module|Description|
|
||||||
|--------|-------|
|
|--------|-------|
|
||||||
|Logger.c|Manages logging to client.log, and dumping state in both intentional and unhandled crashes
|
|Logger|Manages logging to client.log, and dumping state in both intentional and unhandled crashes
|
||||||
|Platform.c|Abstracts platform specific functionality. (e.g. opening a file, allocating memory, starting a thread)
|
|Platform|Abstracts platform specific functionality. (e.g. opening a file, allocating memory, starting a thread)
|
||||||
|Program.c|Parses command line arguments, and then starts either the Game or Launcher
|
|Program|Parses command line arguments, and then starts either the Game or Launcher
|
||||||
|Window.c|Abstracts creating and managing a window (e.g. setting titlebar text, entering fullscreen)
|
|Window|Abstracts creating and managing a window (e.g. setting titlebar text, entering fullscreen)
|
||||||
|
|
||||||
## Rendering modules
|
## Rendering modules
|
||||||
|File|Description|
|
|Module|Description|
|
||||||
|--------|-------|
|
|--------|-------|
|
||||||
|AxisLinesRenderer.c|Renders 3 lines showing direction of each axis
|
|AxisLinesRenderer|Renders 3 lines showing direction of each axis
|
||||||
|EnvRenderer.c|Renders environment of the world (clouds, sky, skybox, world sides/edges, etc)
|
|EnvRenderer|Renders environment of the world (clouds, sky, skybox, world sides/edges, etc)
|
||||||
|HeldBlockRenderer.c|Renders the block currently being held in bottom right corner
|
|HeldBlockRenderer|Renders the block currently being held in bottom right corner
|
||||||
|MapRenderer.c|Renders the blocks of the world by diving it into chunks, and manages sorting/updating these chunks
|
|MapRenderer|Renders the blocks of the world by diving it into chunks, and manages sorting/updating these chunks
|
||||||
|PickedPosRenderer.c|Renders an outline around the block currently being looked at
|
|SelOutlineRenderer|Renders an outline around the block currently being looked at
|
||||||
|SelectionBox.c|Renders and stores selection boxes
|
|SelectionBox|Renders and stores selection boxes
|
||||||
|
|
||||||
## Texture pack modules
|
## Texture pack modules
|
||||||
|File|Functionality|
|
|Module|Functionality|
|
||||||
|--------|-------|
|
|--------|-------|
|
||||||
|Animations.c|Everything relating to texture animations (including default water/lava ones)
|
|Animations|Everything relating to texture animations (including default water/lava ones)
|
||||||
|TexturePack.c|Everything relating to texture packs (e.g. extracting .zip, terrain atlas, etc)
|
|TexturePack|Everything relating to texture packs (e.g. extracting .zip, terrain atlas, etc)
|
||||||
|
|
||||||
## Utility modules
|
## Utility modules
|
||||||
|File|Functionality|
|
|Module|Functionality|
|
||||||
|--------|-------|
|
|--------|-------|
|
||||||
|Event.c|Contains all events and provies helper methods for using events
|
|Event|Contains all events and provies helper methods for using events
|
||||||
|Options.c|Retrieves options from and sets options in options.txt
|
|Options|Retrieves options from and sets options in options.txt
|
||||||
|String.c|Implements operations for a string with a buffer, length, and capacity
|
|String|Implements operations for a string with a buffer, length, and capacity
|
||||||
|Utils.c|Various general utility functions
|
|Utils|Various general utility functions
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,72 @@
|
||||||
|
Although ClassiCube strives to be as platform independent as possible, in some cases it will need to use system specific code
|
||||||
|
|
||||||
|
For instance:
|
||||||
|
* Texture creation for 3D graphics rendering
|
||||||
|
* Buffer allocation for audio output
|
||||||
|
* High resolution time measurement
|
||||||
|
* Window creation
|
||||||
|
|
||||||
|
For simplicity, related system specific code is grouped together as a Module (e.g. `Audio`), which can then be implemented using a backend (e.g. `WinMM`, `OpenAL`, `OpenSL ES`, etc)
|
||||||
|
|
||||||
|
#### Note: By default, ClassiCube automatically selects the recommended backends for the system. <br> It is recommended that you do *NOT* change the backends unless you know exactly what you are doing.
|
||||||
|
|
||||||
|
Some systems may provide multiple potential backends for a Module. For example on Windows:
|
||||||
|
* OpenGL could be used instead of Direct3D 9 for the 3D rendering backend
|
||||||
|
* SDL could be used instead of the native WinAPI for the window backend
|
||||||
|
|
||||||
|
TODO finish this
|
||||||
|
|
||||||
|
TODO introduction (explaining platform specific modules, and how classicube has to integrate with one of them)
|
||||||
|
|
||||||
|
There are two ways of changing the backend that gets used for the system:
|
||||||
|
1) Changing the default defines in `Core.h`
|
||||||
|
2) Using additional compilation flags to override default module backend(s)
|
||||||
|
3) Adding `-DCC_BUILD_MANUAL` to compilation flags and then manually defining all module backends via additional compilation flags
|
||||||
|
|
||||||
|
When manually compiling the source code, 1) is usually the easiest. <br>
|
||||||
|
For automated scripts compiling every single commit, 2) is the recommended approach
|
||||||
|
TODO: Move this into table
|
||||||
|
|
||||||
|
|
||||||
|
### 3D Graphics backends (`CC_GFX_BACKEND`)
|
||||||
|
* CC_GFX_BACKEND_SOFTGPU - Software rasteriser
|
||||||
|
* CC_GFX_BACKEND_D3D9 - Direct3D 9
|
||||||
|
* CC_GFX_BACKEND_D3D11 - Direct3D 11
|
||||||
|
* CC_GFX_BACKEND_GL1 - OpenGL 1.2/1.5
|
||||||
|
* CC_GFX_BACKEND_GL2 - OpenGL 2 (shaders)
|
||||||
|
|
||||||
|
The OpenGL backend can be further customised:
|
||||||
|
* CC_BUILD_GL11 (must be using CC_GFX_BACKEND_GL1)
|
||||||
|
* CC_BUILD_GLES (must be using CC_GFX_BACKEND_GL2)
|
||||||
|
|
||||||
|
### OpenGL context backends
|
||||||
|
* CC_BUILD_EGL
|
||||||
|
* CC_BUILD_WGL
|
||||||
|
|
||||||
|
### HTTP backends (`CC_NET_BACKEND`)
|
||||||
|
* CC_NET_BACKEND_BUILTIN - custom HTTP client
|
||||||
|
* CC_NET_BACKEND_LIBCURL
|
||||||
|
* CC_BUILD_CFNETWORK
|
||||||
|
|
||||||
|
### SSL backends (`CC_SSL_BACKEND`)
|
||||||
|
* CC_SSL_BACKEND_NONE
|
||||||
|
* CC_SSL_BACKEND_BEARSSL
|
||||||
|
* CC_SSL_BACKEND_SCHANNEL
|
||||||
|
|
||||||
|
### Window backends (`CC_WIN_BACKEND`)
|
||||||
|
* CC_WIN_BACKEND_TERMINAL
|
||||||
|
* CC_WIN_BACKEND_SDL2
|
||||||
|
* CC_WIN_BACKEND_SDL3
|
||||||
|
* CC_WIN_BACKEND_X11
|
||||||
|
* CC_WIN_BACKEND_WIN32
|
||||||
|
|
||||||
|
### Audio backends (`CC_AUD_BACKEND`)
|
||||||
|
* CC_AUD_BACKEND_OPENAL
|
||||||
|
* CC_AUD_BACKEND_WINMM
|
||||||
|
* CC_AUD_BACKEND_OPENSLES
|
||||||
|
|
||||||
|
### Platform backends
|
||||||
|
* CC_BUILD_POSIX
|
||||||
|
* CC_BUILD_WIN
|
||||||
|
|
||||||
|
TODO fill in rest
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
This document details how to compile a basic plugin in Visual Studio, MinGW, or GCC.
|
This document details how to compile a basic plugin in Visual Studio, MinGW, or GCC/Clang.
|
||||||
|
|
||||||
To find the functions and variables available for use in plugins, look for CC_API/CC_VAR in the .h files.
|
To find the functions and variables available for use in plugins, look for `CC_API`/`CC_VAR` in the .h files.
|
||||||
|
|
||||||
[Source code of some actual plugins](https://github.com/UnknownShadow200/ClassiCube-Plugins/tree/master/src)
|
[Source code of some actual plugins](https://github.com/ClassiCube/ClassiCube-Plugins/)
|
||||||
|
|
||||||
### Setup
|
### Setup
|
||||||
|
|
||||||
You need to download and install either Visual Studio, MinGW, or GCC.
|
You need to download and install either Visual Studio, MinGW, or GCC/Clang.
|
||||||
|
|
||||||
*Note: MinGW/GCC are relatively small, while Visual Studio is gigabytes in size.
|
*Note: MinGW/GCC/Clang are relatively small, while Visual Studio is gigabytes in size.
|
||||||
If you're just trying to compile a plugin on Windows you might want to use MinGW. See main readme.*
|
If you're just trying to compile a plugin on Windows you might want to use MinGW. See main readme.*
|
||||||
|
|
||||||
I assume your directory is structured like this:
|
I assume your directory is structured like this:
|
||||||
|
|
@ -16,10 +16,11 @@ I assume your directory is structured like this:
|
||||||
src/...
|
src/...
|
||||||
TestPlugin.c
|
TestPlugin.c
|
||||||
```
|
```
|
||||||
Or in other words, in a directory somewhere, you have a file named ```TestPlugin.c```, and then a sub-directory named ```src``` which contains the game's source code.
|
Or in other words, in a directory somewhere, you have a file named `TestPlugin.c`, and then a sub-directory named `src` which contains the game's source code.
|
||||||
|
|
||||||
### Basic plugin
|
### Basic plugin
|
||||||
```C
|
```C
|
||||||
|
#include "src/PluginAPI.h"
|
||||||
#include "src/Chat.h"
|
#include "src/Chat.h"
|
||||||
#include "src/Game.h"
|
#include "src/Game.h"
|
||||||
#include "src/String.h"
|
#include "src/String.h"
|
||||||
|
|
@ -29,118 +30,146 @@ static void TestPlugin_Init(void) {
|
||||||
Chat_Add(&msg);
|
Chat_Add(&msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
int Plugin_ApiVersion = 1;
|
PLUGIN_EXPORT int Plugin_ApiVersion = 1;
|
||||||
struct IGameComponent Plugin_Component = { TestPlugin_Init };
|
PLUGIN_EXPORT struct IGameComponent Plugin_Component = { TestPlugin_Init };
|
||||||
```
|
```
|
||||||
Here's the idea for a basic plugin that shows "Hello world" in chat when the game starts. Alas, this won't compile...
|
Here's a basic plugin that shows "Hello world" in chat when the game starts.
|
||||||
|
|
||||||
### Basic plugin boilerplate
|
Note that `src/PluginAPI.h` must always be included as the first header.
|
||||||
```C
|
|
||||||
#ifdef _WIN32
|
|
||||||
#define CC_API __declspec(dllimport)
|
|
||||||
#define CC_VAR __declspec(dllimport)
|
|
||||||
#define EXPORT __declspec(dllexport)
|
|
||||||
#else
|
|
||||||
#define CC_API
|
|
||||||
#define CC_VAR
|
|
||||||
#define EXPORT __attribute__((visibility("default")))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "src/Chat.h"
|
|
||||||
#include "src/Game.h"
|
|
||||||
#include "src/String.h"
|
|
||||||
|
|
||||||
static void TestPlugin_Init(void) {
|
|
||||||
cc_string msg = String_FromConst("Hello world!");
|
|
||||||
Chat_Add(&msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
EXPORT int Plugin_ApiVersion = 1;
|
|
||||||
EXPORT struct IGameComponent Plugin_Component = { TestPlugin_Init };
|
|
||||||
```
|
|
||||||
With this boilerplate, we're ready to compile the plugin.
|
|
||||||
All plugins require this boilerplate, so feel free to copy and paste it.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Writing plugins in C++
|
### Writing plugins in C++
|
||||||
When including headers from ClassiCube, they **must** be surrounded with `extern "C"`, i.e.
|
|
||||||
```C
|
|
||||||
extern "C" {
|
|
||||||
#include "src/Chat.h"
|
|
||||||
#include "src/Game.h"
|
|
||||||
#include "src/String.h"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
Otherwise you will get obscure `Undefined reference` errors when compiling.
|
|
||||||
|
|
||||||
Exported plugin functions **must** be surrounded with `extern "C"`, i.e.
|
Exported plugin functions **must** be surrounded with `extern "C"`, i.e.
|
||||||
```C
|
```C
|
||||||
extern "C" {
|
extern "C" {
|
||||||
EXPORT int Plugin_ApiVersion = 1;
|
PLUGIN_EXPORT int Plugin_ApiVersion = 1;
|
||||||
EXPORT struct IGameComponent Plugin_Component = { TestPlugin_Init };
|
PLUGIN_EXPORT struct IGameComponent Plugin_Component = { TestPlugin_Init };
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Otherwise your plugin will not load. (you'll see `error getting plugin version` in-game)
|
Otherwise your plugin will not load. (you'll see `error getting plugin version` in-game)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Compiling
|
||||||
|
|
||||||
|
Plugin compilation instructions differs depending on the compiler and operating system
|
||||||
|
|
||||||
### Linux
|
### Linux
|
||||||
#### For Linux
|
|
||||||
**Compiling**
|
|
||||||
|
|
||||||
```gcc TestPlugin.c -o TestPlugin.so -shared -fPIC```
|
[Compiling using gcc or clang](plugin-dev.md#using-gcc-or-clang)
|
||||||
|
|
||||||
Then put ```TestPlugin.so``` into your game's ```plugins``` folder. Done.
|
[Cross compiling for Windows 32-bit](plugin-dev.md#cross-compiling-for-windows-32-bit-using-mingw-w64)
|
||||||
|
|
||||||
#### Cross compile for Windows 32 bit
|
[Cross compiling for Windows 64-bit](plugin-dev.md#cross-compiling-for-windows-64-bit-using-mingw-w64)
|
||||||
**Prerequisites:**
|
|
||||||
|
|
||||||
1) Compile the game, see ```Cross compiling for windows``` in main readme
|
### macOS
|
||||||
2) Rename compiled executable to ClassiCube.exe
|
|
||||||
3) Install the ```mingw-w64-tools``` package
|
|
||||||
|
|
||||||
TODO: this also works for mingw. clean this up.
|
[Compiling using gcc or clang](plugin-dev.md#using-gcc-or-clang-1)
|
||||||
|
|
||||||
|
### Windows
|
||||||
|
|
||||||
|
[Compiling using Visual Studio](plugin-dev.md#using-visual-studio)
|
||||||
|
|
||||||
|
[Compiling using mingw-w64](plugin-dev.md#using-mingw-w64)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Compiling - Linux
|
||||||
|
|
||||||
|
### Using gcc or clang
|
||||||
|
|
||||||
|
#### Compiling
|
||||||
|
|
||||||
|
`cc TestPlugin.c -o TestPlugin.so -shared -fPIC`
|
||||||
|
|
||||||
|
Then put `TestPlugin.so` into your game's `plugins` folder. Done.
|
||||||
|
|
||||||
|
### Cross compiling for Windows 32 bit using mingw-w64
|
||||||
|
|
||||||
|
#### Setup
|
||||||
|
|
||||||
|
1) Create `ClassiCube.exe` by either:
|
||||||
|
1) Compiling the game, see `Cross compiling for windows (32 bit)` in [main readme](/readme.md#cross-compiling-for-windows-32-bit)
|
||||||
|
2) Downloading 32 bit ClassiCube from https://www.classicube.net/download/#dl-win
|
||||||
|
2) Install the `mingw-w64-tools` package (if it isn't already)
|
||||||
|
3) Generate the list of exported symbols from `ClassiCube.exe` by running:
|
||||||
|
* `gendef ClassiCube.exe`
|
||||||
|
4) Create a linkable library from the exported symbols list by running:
|
||||||
|
* `i686-w64-mingw32-dlltool -d ClassiCube.def -l libClassiCube.a -D ClassiCube.exe`
|
||||||
|
|
||||||
TODO: also document alternate method of compiling the game using --out-implib
|
TODO: also document alternate method of compiling the game using --out-implib
|
||||||
|
|
||||||
**Compiling**
|
#### Compiling
|
||||||
|
|
||||||
First, generate list of exported symbols:
|
`i686-w64-mingw32-gcc TestPlugin.c -o TestPlugin.dll -s -shared -L . -lClassiCube`
|
||||||
|
|
||||||
```gendef src/ClassiCube.exe```
|
Then put `TestPlugin.dll` into your game's `plugins` folder. Done.
|
||||||
|
|
||||||
Next create a linkable library:
|
### Cross compiling for Windows 64 bit using mingw-w64
|
||||||
|
|
||||||
```i686-w64-mingw32-dlltool -d ClassiCube.def -l libClassiCube.a -D ClassiCube.exe```
|
#### Setup
|
||||||
|
|
||||||
Finally compile the plugin:
|
1) Create `ClassiCube.exe` by either:
|
||||||
|
1) Compiling the game, see `Cross compiling for windows (64 bit)` in [main readme](/readme.md#cross-compiling-for-windows-64-bit)
|
||||||
|
2) Downloading 64 bit ClassiCube from https://www.classicube.net/download/#dl-win
|
||||||
|
2) Install the `mingw-w64-tools` package (if it isn't already)
|
||||||
|
3) Generate the list of exported symbols from `ClassiCube.exe` by running:
|
||||||
|
* `gendef ClassiCube.exe`
|
||||||
|
4) Create a linkable library from the exported symbols list by running:
|
||||||
|
* `x86_64-w64-mingw32-dlltool -d ClassiCube.def -l libClassiCube.a -D ClassiCube.exe`
|
||||||
|
|
||||||
```i686-w64-mingw32-gcc TestPlugin.c -o TestPlugin.dll -s -shared -L . -lClassiCube```
|
TODO: also document alternate method of compiling the game using --out-implib
|
||||||
|
|
||||||
Then put ```TestPlugin.dll``` into your game's ```plugins``` folder. Done.
|
#### Compiling
|
||||||
|
|
||||||
##### Ultra small dlls
|
`x86_64-w64-mingw32-gcc TestPlugin.c -o TestPlugin.dll -s -shared -L . -lClassiCube`
|
||||||
If you **ONLY** use code from the game (no external libraries and no C standard library functions), add ```-nostartfiles -Wl,--entry=0``` to the compile flags
|
|
||||||
|
|
||||||
This step isn't necessary, the dll works fine without it. But it does reduce the size of the dll from 11 to 4 kb.
|
Then put `TestPlugin.dll` into your game's `plugins` folder. Done.
|
||||||
|
|
||||||
#### Cross compile for Windows 64 bit
|
## Compiling - macOS
|
||||||
Repeat the steps of *Cross compile for Windows 32 bit*, but use ```x86_64-w64-mingw32``` instead of ```i686-w64-mingw32```
|
|
||||||
|
|
||||||
|
### Using gcc or clang
|
||||||
|
|
||||||
### Windows
|
#### Compiling
|
||||||
TODO when I have some more time...
|
|
||||||
|
|
||||||
**Prerequisites:**
|
`cc TestPlugin.c -o TestPlugin.dylib -undefined dynamic_lookup`
|
||||||
|
|
||||||
1) Compile the game, see ```Cross compiling for windows``` in main readme
|
Then put `TestPlugin.dylib` into your game's `plugins` folder. Done.
|
||||||
|
|
||||||
|
## Compiling - Windows
|
||||||
|
|
||||||
|
### Using Visual Studio
|
||||||
|
TODO more detailed when I have some more time...
|
||||||
|
|
||||||
|
#### Setup
|
||||||
|
|
||||||
|
1) Compile the game, see `Compiling - Windows > using Visual Studio` in main readme
|
||||||
2) Find the `ClassiCube.lib` that was generated when compiling the game. Usually it is in either `src\x64\Debug` or `src\x86\Debug`.
|
2) Find the `ClassiCube.lib` that was generated when compiling the game. Usually it is in either `src\x64\Debug` or `src\x86\Debug`.
|
||||||
3) Add a new `Empty Project` to the ClassiCube solution, then add the plugin .c files to it
|
3) Add a new `Empty Project` to the ClassiCube solution, then add the plugin .c files to it
|
||||||
|
|
||||||
Note: If the plugin provides a .vcxproj file, you can skip step 2 and just open that project file instead.
|
Note: If the plugin provides a .vcxproj file, you can skip step 2 and just open that project file instead.
|
||||||
|
|
||||||
**Configuration**
|
#### Configuration - alternative #1
|
||||||
|
|
||||||
|
The simplest way of linking to the `.lib` file is simply adding the following code to one of the plugin's `.c` files
|
||||||
|
|
||||||
|
```C
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#ifdef _WIN64
|
||||||
|
#pragma comment(lib, "[GAME SRC FOLDER]/x64/Debug/ClassiCube.lib")
|
||||||
|
#else
|
||||||
|
#pragma comment(lib, "[GAME SRC FOLDER]/x86/Debug/ClassiCube.lib")
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
```
|
||||||
|
|
||||||
|
replacing `[GAME SRC FOLDER]` with the full path of `src` folder (e.g. `C:/Dev/ClassiCube/src`)
|
||||||
|
|
||||||
|
#### Configuration - alternative #2
|
||||||
|
|
||||||
|
The more complicated way of linking to the `.lib` file is to add it to the plugin's project configuration file
|
||||||
|
|
||||||
Right click the plugin project in the `Solution Explorer` pane, then click `Properties`
|
Right click the plugin project in the `Solution Explorer` pane, then click `Properties`
|
||||||
|
|
||||||
|
|
@ -152,9 +181,49 @@ TODO: may need to configure include directories
|
||||||
|
|
||||||
2) In `Configuration properties` -> `Linker` -> `Input`, click the dropdown button for `Additional Dependencies`, then click `Edit`. Add the full path to `ClassiCube.lib`, then click `OK`
|
2) In `Configuration properties` -> `Linker` -> `Input`, click the dropdown button for `Additional Dependencies`, then click `Edit`. Add the full path to `ClassiCube.lib`, then click `OK`
|
||||||
|
|
||||||
**Compiling**
|
#### Compiling
|
||||||
|
|
||||||
Build the project. There should be a line in the build output that tells you where you can find the .dll file like this:
|
Build the project. There should be a line in the build output that tells you where you can find the .dll file like this:
|
||||||
```
|
`
|
||||||
Project1.vcxproj -> C:\classicube-dev\testplugin\src\x64\Debug\Project1.dll
|
Project1.vcxproj -> C:\classicube-dev\testplugin\src\x64\Debug\TestPlugin.dll
|
||||||
```
|
`
|
||||||
|
|
||||||
|
Then put `TestPlugin.dll` into your game's `plugins` folder. Done.
|
||||||
|
|
||||||
|
### Using mingw-w64
|
||||||
|
|
||||||
|
#### Setup
|
||||||
|
|
||||||
|
1) Create `ClassiCube.exe` by either:
|
||||||
|
1) Compiling the game, see `Compiling for windows (MinGW-w64)` in [main readme](/readme.md#using-mingw-w64)
|
||||||
|
2) Downloading ClassiCube from https://www.classicube.net/download/#dl-win
|
||||||
|
2) Generate the list of exported symbols in `ClassiCube.exe` by running:
|
||||||
|
* `gendef ClassiCube.exe`
|
||||||
|
3) Create a linkable library from the exported symbols list by running:
|
||||||
|
* `dlltool -d ClassiCube.def -l libClassiCube.a -D ClassiCube.exe`
|
||||||
|
|
||||||
|
#### Compiling
|
||||||
|
|
||||||
|
`gcc TestPlugin.c -o TestPlugin.dll -s -shared -L . -lClassiCube`
|
||||||
|
|
||||||
|
Then put `TestPlugin.dll` into your game's `plugins` folder. Done.
|
||||||
|
|
||||||
|
## Notes for compiling for Windows
|
||||||
|
|
||||||
|
### Ensuring your plugin works when the ClassiCube exe isn't named ClassiCube.exe
|
||||||
|
|
||||||
|
If you follow the prior compilation instructions, the compiled DLL will have a runtime dependancy on `ClassiCube.exe`
|
||||||
|
|
||||||
|
However, this means that if the executable is e.g. named `ClassiCube (2).exe` instead. the plugin DLL will fail to load
|
||||||
|
|
||||||
|
To avoid this problem, you must
|
||||||
|
1) Stop linking to `ClassiCube` (e.g. for `MinGW`, remove the ` -L . -lClassiCube`)
|
||||||
|
2) Load all functions and variables exported from ClassiCube via `GetProcAddress` instead
|
||||||
|
|
||||||
|
This is somewhat tedious to do - see [here](https://github.com/ClassiCube/ClassiCube-Plugins/) for some examples of plugins which do this
|
||||||
|
|
||||||
|
#### Compiling ultra small plugin DLLs - MinGW
|
||||||
|
If you **ONLY** use code from the game (no external libraries and no C standard library functions):
|
||||||
|
* You can add `-nostartfiles -Wl,--entry=0` to the compile flags to reduce the DLL size (e.g from 11 to 4 kb)
|
||||||
|
|
||||||
|
This isn't necessary to do though, and plugin DLLs work completely fine without doing this.
|
||||||
|
|
|
||||||
|
|
@ -1,68 +1,23 @@
|
||||||
Although most of the code is platform-independent, some per-platform functionality is required.
|
Although most of the code is platform-independent, some per-platform functionality is required.
|
||||||
|
|
||||||
By default I try to automatically define appropriate backends for your OS in Core.h. Define ```CC_BUILD_MANUAL``` to disable this.
|
By default `Core.h` tries to automatically define appropriate backends for your system. Define ```CC_BUILD_MANUAL``` to disable this.
|
||||||
|
|
||||||
|
Note: Updating doesn't work properly in Windows 95 or Windows 98
|
||||||
|
|
||||||
## Before you start
|
## Before you start
|
||||||
* IEEE floating support is required.
|
* IEEE floating-point support is required. (Can be emulated in software, but will affect performance)
|
||||||
* int must be 32-bits. 32-bit addressing (or more) is required.
|
* The `int` data type must be 32-bits.
|
||||||
|
* 32-bit addressing (or more) is required.
|
||||||
* Support for 8/16/32/64 integer types is required. (your compiler must support 64-bit arithmetic)
|
* Support for 8/16/32/64 integer types is required. (your compiler must support 64-bit arithmetic)
|
||||||
|
* At least around 2 MB of RAM is required at a minimum
|
||||||
|
* At least 128 kb for main thread stack size
|
||||||
|
|
||||||
In other words, the codebase can theroetically be ported to any modern-ish hardware, but not stuff like a UNIVAC machine, the SuperFX chip on the SNES, or an 8-bit microcontroller.
|
In summary, the codebase can theroetically be ported to any modern-ish hardware, but not stuff like a UNIVAC machine, the SuperFX chip on the SNES, or an 8-bit microcontroller.
|
||||||
|
|
||||||
## Supported platforms
|
|
||||||
**Note:** Some of these machines are just virtual machines. Should still work on real hardware though.
|
|
||||||
|
|
||||||
#### Tier 1 support
|
|
||||||
These platforms are regularly tested on and have executables automatically compiled for. (see buildbot.sh)
|
|
||||||
|
|
||||||
|Platform|Machine|Notes|
|
|
||||||
|--------|-------|-----|
|
|
||||||
|Windows x86/x64 | Windows 7 |
|
|
||||||
|macOS x86/x64 | macOS 10.12 |
|
|
||||||
|Linux x86/x64 | Xubuntu 14 |
|
|
||||||
|Web client | Chrome |
|
|
||||||
|
|
||||||
#### Tier 2 support
|
|
||||||
These machines are far less frequently tested on, but are otherwise same as tier 1 support.
|
|
||||||
|
|
||||||
|Platform|Machine|Notes|
|
|
||||||
|--------|-------|-----|
|
|
||||||
|Windows x86 | Windows 2000 |
|
|
||||||
|Windows x86 | 98 + KernelEX | Updating doesn't work
|
|
||||||
|Windows x64 | Windows 10 |
|
|
||||||
|ReactOS | ReactOS |
|
|
||||||
|Linux x64 | Arch linux |
|
|
||||||
|Linux x64 | Linux Mint |
|
|
||||||
|Linux x64 | Kubuntu |
|
|
||||||
|Linux x64 | Debian |
|
|
||||||
|Linux x64 | Fedora |
|
|
||||||
|Linux x86/x64 | Lubuntu |
|
|
||||||
|Web client | Firefox |
|
|
||||||
|Web client | Safari |
|
|
||||||
|Web client | Edge | Cursor doesn't seem to disappear
|
|
||||||
|
|
||||||
#### Tier 3 support
|
|
||||||
The game has been compiled and run on these platforms before. It may or may not still compile for them.
|
|
||||||
|
|
||||||
I don't really test these platforms at all, only when I suspect some changes to the code might impact them.
|
|
||||||
|
|
||||||
|Platform|Machine|Notes|
|
|
||||||
|--------|-------|-----|
|
|
||||||
|macOS x86 | macOS 10.4 |
|
|
||||||
|FreeBSD x86 | FreeBSD | x64 should work too |
|
|
||||||
|NetBSD x86 | NetBSD | x64 should work too |
|
|
||||||
|OpenBSD x86 | OpenBSD | x64 should work too |
|
|
||||||
|Solaris x86 | OpenIndiana | x64 should work too |
|
|
||||||
|macOS PPC | macOS 10.3 | PPC64 completely untested |
|
|
||||||
|Linux PPC | Debian | Issues with colour channels incorrectly swapped? |
|
|
||||||
|Linux ARM | Raspberry pi | ARM64 should work too |
|
|
||||||
|Linux SPARC | Debian | Didn't really work due to lack of 24-bit colours |
|
|
||||||
|HaikuOS | Nightly | Requires SDL for windowing
|
|
||||||
|
|
||||||
## Porting
|
## Porting
|
||||||
|
|
||||||
Listed below are the requirements for implementing each platform-dependent file.
|
Listed below are the requirements for implementing each platform-dependent file.<br>
|
||||||
You should try to take advantage of existing backends when porting to other platforms.
|
When porting to other platforms, you should try to leverage existing backends when possible.<br>
|
||||||
Only cross platform backends are listed below.
|
Only cross platform backends are listed below.
|
||||||
|
|
||||||
### Platform
|
### Platform
|
||||||
|
|
@ -90,8 +45,8 @@ Create a window, show a dialog window, set window contents, keyboard/mouse input
|
||||||
Also monitor size, clipboard, cursor, raw relative mouse movement (optional)
|
Also monitor size, clipboard, cursor, raw relative mouse movement (optional)
|
||||||
|
|
||||||
Define:
|
Define:
|
||||||
- ```CC_BUILD_X11``` - Use X11/XLib (unix-ish) (glX)
|
- ```DEFAULT_WIN_BACKEND CC_WIN_BACKEND_X11 ``` - Use X11/XLib (unix-ish) (glX)
|
||||||
- ```CC_BUILD_SDL``` - Use SDL library (SDL)
|
- ```DEFAULT_WIN_BACKEND CC_WIN_BACKEND_SDL2``` - Use SDL2 library (SDL2)
|
||||||
|
|
||||||
If using OpenGL, also OpenGL context management
|
If using OpenGL, also OpenGL context management
|
||||||
|
|
||||||
|
|
@ -109,23 +64,29 @@ posix note: Register access is highly dependent on OS and architecture.
|
||||||
Play multiple audio streams with varying sample rates
|
Play multiple audio streams with varying sample rates
|
||||||
|
|
||||||
Define:
|
Define:
|
||||||
- ```CC_BUILD_OPENAL``` - use OpenAL
|
- ```DEFAULT_AUD_BACKEND CC_AUD_BACKEND_OPENAL``` - use OpenAL
|
||||||
- ```CC_BUILD_NOAUDIO``` - stub audio implementation (silent)
|
- ```CC_BUILD_NOAUDIO``` - stub audio implementation (silent)
|
||||||
|
|
||||||
### 3D Graphics
|
### 3D Graphics
|
||||||
Texturing, depth buffer, alpha, etc (See Graphics.h for full list)
|
Texturing, depth buffer, alpha, etc (See Graphics.h for full list)
|
||||||
|
|
||||||
Define:
|
Define:
|
||||||
- ```CC_BUILD_D3D9``` - Use Direct3D9
|
- ```DEFAULT_GFX_BACKEND CC_GFX_BACKEND_GL1``` - Use legacy OpenGL (1.5/1.2 + ARB_VERTEX_BUFFER_OBJECT)
|
||||||
- ```CC_BUILD_GL``` - Use OpenGL (1.5/1.2 + ARB_VERTEX_BUFFER_OBJECT)
|
- ```CC_BUILD_GL11``` - Use OpenGL 1.1 features only
|
||||||
- ```CC_BUILD_GL11``` - Use OpenGL 1.1 features only
|
- ```DEFAULT_GFX_BACKEND CC_GFX_BACKEND_GL2``` - Use modern OpenGL shaders
|
||||||
- ```CC_BUILD_GLMODERN``` - Use modern OpenGL shaders
|
- ```CC_BUILD_GLES``` - Makes these shaders compatible with OpenGL ES
|
||||||
- ```CC_BUILD_GLES``` - Makes these shaders compatible with OpenGL ES
|
- ```DEFAULT_GFX_BACKEND CC_GFX_BACKEND_SOFTGPU``` - Use built in software rasteriser
|
||||||
|
|
||||||
### Http
|
### HTTP
|
||||||
HTTP, HTTPS, and setting request/getting response headers
|
HTTP, HTTPS, and setting request/getting response headers
|
||||||
|
|
||||||
Define:
|
Define:
|
||||||
- ```CC_BUILD_CURL``` - use libcurl for http
|
- ```DEFAULT_NET_BACKEND CC_NET_BACKEND_BUILTIN``` - use built in simple HTTP backend
|
||||||
|
|
||||||
Supporting connection reuse is highly recommended. (but not required)
|
Supporting connection reuse is highly recommended. (but not required)
|
||||||
|
|
||||||
|
### SSL
|
||||||
|
SSL and TLS support, plus basic certificate validation
|
||||||
|
|
||||||
|
Define:
|
||||||
|
- ```DEFAULT_SSL_BACKEND CC_SSL_BACKEND_BEARSSL``` - use BearSSL for SSL/TLS
|
||||||
|
|
|
||||||
148
doc/strings.md
|
|
@ -3,7 +3,7 @@
|
||||||
ClassiCube uses a custom string type rather than the standard C `char*` string in most places
|
ClassiCube uses a custom string type rather than the standard C `char*` string in most places
|
||||||
|
|
||||||
ClassiCube strings (`cc_string`) are a struct with the following fields:
|
ClassiCube strings (`cc_string`) are a struct with the following fields:
|
||||||
- `buffer` -> Pointer to 8 bit characters (unsigned code page 437 indices)
|
- `buffer` -> Pointer to 8 bit characters (unsigned [code page 437 indices](https://en.wikipedia.org/wiki/Code_page_437#Character_set))
|
||||||
- `length` -> Number of characters currently used
|
- `length` -> Number of characters currently used
|
||||||
- `capacity` -> Maximum number of characters (i.e buffer size)
|
- `capacity` -> Maximum number of characters (i.e buffer size)
|
||||||
|
|
||||||
|
|
@ -20,6 +20,29 @@ Some general guidelines to keep in mind when it comes to `cc_string` strings:
|
||||||
- Strings are not garbage collected or reference counted<br>
|
- Strings are not garbage collected or reference counted<br>
|
||||||
(i.e. you are responsible for managing the lifetime of strings)
|
(i.e. you are responsible for managing the lifetime of strings)
|
||||||
|
|
||||||
|
## Usage examples
|
||||||
|
|
||||||
|
Initialisating a string from readonly text:
|
||||||
|
```C
|
||||||
|
cc_string str = String_FromConst("ABC");
|
||||||
|
```
|
||||||
|
|
||||||
|
Initialising a string from temporary memory on the stack:
|
||||||
|
```C
|
||||||
|
// str will be able to store at most 200 characters in it
|
||||||
|
char strBuffer[200];
|
||||||
|
cc_string str = String_FromArray(strBuffer);
|
||||||
|
```
|
||||||
|
|
||||||
|
Initialising a string from persistent memory on the heap:
|
||||||
|
```C
|
||||||
|
// str will be able to store at most 200 characters in it
|
||||||
|
char* str = Mem_Alloc(1, 200, "String buffer");
|
||||||
|
cc_string str = String_Init(str, 0, 200);
|
||||||
|
```
|
||||||
|
|
||||||
|
# Converting to/from other string representations
|
||||||
|
|
||||||
## C String conversion
|
## C String conversion
|
||||||
|
|
||||||
### C string -> cc_string
|
### C string -> cc_string
|
||||||
|
|
@ -79,37 +102,42 @@ The following functions are provided to convert `cc_string` strings into operati
|
||||||
|
|
||||||
### cc_string -> Windows string
|
### cc_string -> Windows string
|
||||||
|
|
||||||
`Platform_EncodeUtf16` converts a `cc_string` into a null terminated `WCHAR` string
|
`Platform_EncodeString` converts a `cc_string` into a null terminated `WCHAR` and `CHAR` string
|
||||||
|
|
||||||
#### Example
|
#### Example
|
||||||
```C
|
```C
|
||||||
void SetWorkingDir(cc_string* title) {
|
void SetWorkingDir(cc_string* title) {
|
||||||
WCHAR buffer[NATIVE_STR_LEN];
|
cc_winstring str;
|
||||||
Platform_EncodeUtf16(buffer, title);
|
Platform_EncodeUtf16(&str, title);
|
||||||
SetCurrentDirectoryW(buffer);
|
SetCurrentDirectoryW(str.uni);
|
||||||
|
|
||||||
|
// it's recommended that you DON'T use the ansi format whenever possible
|
||||||
|
//SetCurrentDirectoryA(str.ansi);
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### cc_string -> Unix string
|
### cc_string -> UTF8 string
|
||||||
|
|
||||||
`Platform_EncodeUtf8` converts a `cc_string` into a null terminated UTF8-encoded `char*` string
|
`String_EncodeUtf8` converts a `cc_string` into a null terminated UTF8-encoded `char*` string
|
||||||
|
|
||||||
#### Example
|
#### Example
|
||||||
```C
|
```C
|
||||||
void SetWorkingDir(cc_string* title) {
|
void SetWorkingDir(cc_string* title) {
|
||||||
char buffer[NATIVE_STR_LEN];
|
char buffer[NATIVE_STR_LEN];
|
||||||
Platform_EncodeUtf8(buffer, title);
|
String_EncodeUtf8(buffer, title);
|
||||||
chdir(buffer);
|
chdir(buffer);
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## API
|
# API
|
||||||
|
|
||||||
I'm lazy so I will just link to [String.h](/src/String.h)
|
I'm lazy so I will just link to [String.h](/src/String.h)
|
||||||
|
|
||||||
If you'd rather I provided a more detailed reference here, please let me know.
|
If you'd rather I provided a more detailed reference here, please let me know.
|
||||||
|
|
||||||
# Extra details
|
TODO
|
||||||
|
|
||||||
|
# Comparisons to other string implementations
|
||||||
|
|
||||||
## C comparison
|
## C comparison
|
||||||
|
|
||||||
|
|
@ -199,11 +227,103 @@ string::compare -> String_Compare
|
||||||
std::sprintf -> String_Format1/2/3/4
|
std::sprintf -> String_Format1/2/3/4
|
||||||
```
|
```
|
||||||
|
|
||||||
|
# Detailed lifetime examples
|
||||||
|
|
||||||
## lifetime examples
|
Managing the lifetime of strings is important, as not properly managing them can cause issues.
|
||||||
|
|
||||||
Stack allocated returning example
|
For example, consider the following function:
|
||||||
|
```C
|
||||||
|
const cc_string* GetString(void);
|
||||||
|
|
||||||
Mem_Alloc/Mem_Free and function example
|
void PrintSomething(void) {
|
||||||
|
cc_string* str = GetString();
|
||||||
|
// .. other code ..
|
||||||
|
Chat_Add(str);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
UNSAFE and mutating characters example
|
Without knowing the lifetime of the string returned from `GetString`, using it might either:
|
||||||
|
* Work just fine
|
||||||
|
* Sometimes work fine
|
||||||
|
* Cause a subtle issue
|
||||||
|
* Cause a major problem
|
||||||
|
ptodo rearrange
|
||||||
|
|
||||||
|
### Constant string return example
|
||||||
|
```C
|
||||||
|
const cc_string* GetString(void) {
|
||||||
|
static cc_string str = String_FromConst("ABC");
|
||||||
|
return &str;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
This will work fine - as long as the caller does not modify the returned string at all
|
||||||
|
|
||||||
|
### Stack allocated string return example
|
||||||
|
|
||||||
|
```C
|
||||||
|
const cc_string* GetString(void) {
|
||||||
|
char strBuffer[1024];
|
||||||
|
cc_string str = String_FromArray(strBuffer);
|
||||||
|
|
||||||
|
String_AppendConst(&str, "ABC");
|
||||||
|
return &str;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
This will **almost certainly cause problems** - after `GetString` returns, the contents of both `str` and `strBuffer` may be changed to arbitary values (as once `GetString` returns, their contents are then eligible to be overwritten by other stack allocated variables)
|
||||||
|
|
||||||
|
As a general rule, you should **NEVER** return a string allocated on the stack
|
||||||
|
|
||||||
|
### Dynamically allocated string return example
|
||||||
|
|
||||||
|
```C
|
||||||
|
const cc_string* GetString(void) {
|
||||||
|
char* buffer = Mem_Alloc(1024, 1, "string buffer");
|
||||||
|
cc_string* str = Mem_Alloc(1, sizeof(cc_string), "string");
|
||||||
|
|
||||||
|
*str = String_Init(buffer, 0, 1024);
|
||||||
|
String_AppendConst(str, "ABC");
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
This will work fine - however, now you also need to remember to `Mem_Free` both the string and its buffer to avoid a memory leak
|
||||||
|
|
||||||
|
As a general rule, you should avoid returning a dynamically allocated string
|
||||||
|
|
||||||
|
### UNSAFE mutable string return example
|
||||||
|
|
||||||
|
```C
|
||||||
|
char global_buffer[1024];
|
||||||
|
cc_string global_str = String_FromArray(global_buffer);
|
||||||
|
|
||||||
|
const cc_string* GetString(void) {
|
||||||
|
return &global_str;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Depending on what functions are called in-between `GetString` and `Chat_Add`, `global_str` or its contents may be modified - which can result in an unexpected value being displayed in chat
|
||||||
|
|
||||||
|
This potential issue is not just theoretical - it has actually resulted in several real bugs in ClassiCube itself
|
||||||
|
|
||||||
|
As a general rule, for unsafe functions returning a string that may be mutated behind your back, you should try to maintain a reference to the string for as short of time as possible
|
||||||
|
|
||||||
|
### Reducing string lifetime issues
|
||||||
|
|
||||||
|
In general, for functions that produce strings, you should try to leave the responsibility of managing the string's lifetime up to the calling function to avoid these pitfalls
|
||||||
|
|
||||||
|
The example from before could instead be rewritten like so:
|
||||||
|
|
||||||
|
```C
|
||||||
|
void GetString(cc_string* str);
|
||||||
|
|
||||||
|
void PrintSomething(void) {
|
||||||
|
char strBuffer[256];
|
||||||
|
cc_string str = String_InitArray(strBuffer);
|
||||||
|
GetString(&str);
|
||||||
|
|
||||||
|
// .. other code ..
|
||||||
|
Chat_Add(&str);
|
||||||
|
}
|
||||||
|
```
|
||||||
24
doc/style.md
|
|
@ -6,29 +6,29 @@
|
||||||
* Private variables don't really have a consistent style.
|
* Private variables don't really have a consistent style.
|
||||||
|
|
||||||
### Types
|
### Types
|
||||||
* Explicit integer typedefs are provided in ```Core.h``` for when needed. Otherwise just use int.
|
* Explicit integer size typedefs are provided in `Core.h` for when needed. Otherwise just use int.
|
||||||
* A few common simple structs are typedef-ed, but are rarely otherwise.
|
* A few common simple structs are typedef-ed, but are rarely otherwise.
|
||||||
* ```cc_bool``` is an alias for 8 bit unsigned integer
|
* `cc_bool` is an alias for 8 bit unsigned integer
|
||||||
* ```PackedCol``` field order differs depending on the underlying 3D graphics API
|
* `PackedCol` field order differs depending on the underlying 3D graphics API
|
||||||
|
|
||||||
I may not have defined the appropriate types for your compiler, so you may need to modify ```Core.h```
|
Note: The explicit integer size typedefs may not have been defined if you aren't compiling using GCC/Clang/MSVC, so for other compilers you may need to add them into `Core.h`
|
||||||
|
|
||||||
### Strings
|
### Strings
|
||||||
|
|
||||||
A custom string type (`cc_string`) is used rather than `char*` strings in most places (see [strings](doc/strings.md) page for more details)
|
A custom string type (`cc_string`) is used rather than `char*` strings in most places (see [strings](strings.md) page for more details)
|
||||||
|
|
||||||
*Note: Several functions will take raw ```char*``` for performance, but this is not encouraged*
|
*Note: Several functions will take raw `char*` for performance, but this is not encouraged*
|
||||||
|
|
||||||
#### String arguments
|
#### String arguments
|
||||||
String arguments are annotated to indicate storage and readonly requirements. These are:
|
String arguments are annotated to indicate storage and readonly requirements. These are:
|
||||||
- ```const cc_string*``` - String is not modified at all
|
- `const cc_string*` - String is not modified at all
|
||||||
- ```cc_string*``` - Characters in string may be modified
|
- `cc_string*` - Characters in string may be modified
|
||||||
- ```STRING_REF``` - Macro annotation indicating a **reference is kept to the characters**
|
- `STRING_REF` - Macro annotation indicating a **reference is kept to the characters**
|
||||||
|
|
||||||
To make it extra clear, functions with ```STRING_REF``` arguments usually also have ```_UNSAFE_``` as part of their name.
|
To make it extra clear, functions with `STRING_REF` arguments usually also have `_UNSAFE_` as part of their name.
|
||||||
|
|
||||||
For example, consider the function ```cc_string Substring_UNSAFE(STRING_REF const cc_string* str, length)```
|
For example, consider the function `cc_string Substring_UNSAFE(STRING_REF const cc_string* str, length)`
|
||||||
|
|
||||||
The *input string* is not modified at all. However, the characters of the *returned string* points to the characters of the *input string*, so modifying the characters in the *input string* also modifies the *returned string*.
|
The *input string* is not modified at all. However, the characters of the *returned string* points to the characters of the *input string*, so modifying the characters in the *input string* also modifies the *returned string*.
|
||||||
|
|
||||||
In general, use of ```const String*``` is preferred when possible, and ```STRING_REF``` as little as possible.
|
In general, use of `const cc_string*` is preferred when possible, and `STRING_REF` as little as possible.
|
||||||
|
|
|
||||||
|
|
@ -1,35 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
<key>NSPhotoLibraryAddUsageDescription</key>
|
|
||||||
<string>Saving screenshot</string>
|
|
||||||
<key>CFBundleExecutable</key>
|
|
||||||
<string>ClassiCube</string>
|
|
||||||
<key>CFBundleIdentifier</key>
|
|
||||||
<string>com.classicube.client.ios</string>
|
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
|
||||||
<string>6.0</string>
|
|
||||||
<key>CFBundleName</key>
|
|
||||||
<string>ClassiCube</string>
|
|
||||||
<key>CFBundlePackageType</key>
|
|
||||||
<string>APPL</string>
|
|
||||||
<key>LSRequiresIPhoneOS</key>
|
|
||||||
<true/>
|
|
||||||
<key>UILaunchStoryboardName</key>
|
|
||||||
<string>LaunchScreen</string>
|
|
||||||
<key>UISupportedInterfaceOrientations</key>
|
|
||||||
<array>
|
|
||||||
<string>UIInterfaceOrientationPortrait</string>
|
|
||||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
|
||||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
|
||||||
</array>
|
|
||||||
<key>UISupportedInterfaceOrientations~ipad</key>
|
|
||||||
<array>
|
|
||||||
<string>UIInterfaceOrientationPortrait</string>
|
|
||||||
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
|
||||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
|
||||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
|
||||||
</array>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
||||||
55
license.txt
|
|
@ -1,4 +1,4 @@
|
||||||
Copyright (c) 2014 - 2021, UnknownShadow200
|
Copyright (c) 2014 - 2024, UnknownShadow200
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without modification,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
|
@ -150,6 +150,59 @@ SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE SOFTWARE.
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
|
||||||
|
|
||||||
|
BearSSL license
|
||||||
|
==============================================================================
|
||||||
|
Copyright (c) 2016 Thomas Pornin <pornin@bolet.org>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||||
|
BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||||
|
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
==============================================================================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
BearSSL license
|
||||||
|
==================
|
||||||
|
Copyright (c) 2016 Thomas Pornin <pornin@bolet.org>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||||
|
BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||||
|
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
FreeType license
|
FreeType license
|
||||||
==================
|
==================
|
||||||
The FreeType Project LICENSE
|
The FreeType Project LICENSE
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,130 @@
|
||||||
|
#ifndef __32X_H__
|
||||||
|
#define __32X_H__
|
||||||
|
|
||||||
|
/* Create a 5:5:5 RGB color */
|
||||||
|
#define COLOR(r,g,b) (((r)&0x1F)|((g)&0x1F)<<5|((b)&0x1F)<<10)
|
||||||
|
|
||||||
|
#define MARS_CRAM (*(volatile unsigned short *)0x20004200)
|
||||||
|
#define MARS_FRAMEBUFFER (*(volatile unsigned short *)0x24000000)
|
||||||
|
#define MARS_OVERWRITE_IMG (*(volatile unsigned short *)0x24020000)
|
||||||
|
#define MARS_SDRAM (*(volatile unsigned short *)0x26000000)
|
||||||
|
|
||||||
|
#define MARS_SYS_INTMSK (*(volatile unsigned short *)0x20004000)
|
||||||
|
#define MARS_SYS_DMACTR (*(volatile unsigned short *)0x20004006)
|
||||||
|
#define MARS_SYS_DMASAR (*(volatile unsigned long *)0x20004008)
|
||||||
|
#define MARS_SYS_DMADAR (*(volatile unsigned long *)0x2000400C)
|
||||||
|
#define MARS_SYS_DMALEN (*(volatile unsigned short *)0x20004010)
|
||||||
|
#define MARS_SYS_DMAFIFO (*(volatile unsigned short *)0x20004012)
|
||||||
|
#define MARS_SYS_VRESI_CLR (*(volatile unsigned short *)0x20004014)
|
||||||
|
#define MARS_SYS_VINT_CLR (*(volatile unsigned short *)0x20004016)
|
||||||
|
#define MARS_SYS_HINT_CLR (*(volatile unsigned short *)0x20004018)
|
||||||
|
#define MARS_SYS_CMDI_CLR (*(volatile unsigned short *)0x2000401A)
|
||||||
|
#define MARS_SYS_PWMI_CLR (*(volatile unsigned short *)0x2000401C)
|
||||||
|
#define MARS_SYS_COMM0 (*(volatile unsigned short *)0x20004020) /* Master SH2 communication */
|
||||||
|
#define MARS_SYS_COMM2 (*(volatile unsigned short *)0x20004022)
|
||||||
|
#define MARS_SYS_COMM4 (*(volatile unsigned short *)0x20004024) /* Slave SH2 communication */
|
||||||
|
#define MARS_SYS_COMM6 (*(volatile unsigned short *)0x20004026)
|
||||||
|
#define MARS_SYS_COMM8 (*(volatile unsigned short *)0x20004028) /* controller 1 current value */
|
||||||
|
#define MARS_SYS_COMM10 (*(volatile unsigned short *)0x2000402A) /* controller 2 current value */
|
||||||
|
#define MARS_SYS_COMM12 (*(volatile unsigned long *)0x2000402C) /* vcount current value */
|
||||||
|
|
||||||
|
#define MARS_PWM_CTRL (*(volatile unsigned short *)0x20004030)
|
||||||
|
#define MARS_PWM_CYCLE (*(volatile unsigned short *)0x20004032)
|
||||||
|
#define MARS_PWM_LEFT (*(volatile unsigned short *)0x20004034)
|
||||||
|
#define MARS_PWM_RIGHT (*(volatile unsigned short *)0x20004036)
|
||||||
|
#define MARS_PWM_MONO (*(volatile unsigned short *)0x20004038)
|
||||||
|
|
||||||
|
#define MARS_VDP_DISPMODE (*(volatile unsigned short *)0x20004100)
|
||||||
|
#define MARS_VDP_FILLEN (*(volatile unsigned short *)0x20004104)
|
||||||
|
#define MARS_VDP_FILADR (*(volatile unsigned short *)0x20004106)
|
||||||
|
#define MARS_VDP_FILDAT (*(volatile unsigned short *)0x20004108)
|
||||||
|
#define MARS_VDP_FBCTL (*(volatile unsigned short *)0x2000410A)
|
||||||
|
|
||||||
|
#define MARS_SH2_ACCESS_VDP 0x8000
|
||||||
|
#define MARS_68K_ACCESS_VDP 0x0000
|
||||||
|
|
||||||
|
#define MARS_PAL_FORMAT 0x0000
|
||||||
|
#define MARS_NTSC_FORMAT 0x8000
|
||||||
|
|
||||||
|
#define MARS_VDP_PRIO_68K 0x0000
|
||||||
|
#define MARS_VDP_PRIO_32X 0x0080
|
||||||
|
|
||||||
|
#define MARS_224_LINES 0x0000
|
||||||
|
#define MARS_240_LINES 0x0040
|
||||||
|
|
||||||
|
#define MARS_VDP_MODE_OFF 0x0000
|
||||||
|
#define MARS_VDP_MODE_256 0x0001
|
||||||
|
#define MARS_VDP_MODE_32K 0x0002
|
||||||
|
#define MARS_VDP_MODE_RLE 0x0003
|
||||||
|
|
||||||
|
#define MARS_VDP_VBLK 0x8000
|
||||||
|
#define MARS_VDP_HBLK 0x4000
|
||||||
|
#define MARS_VDP_PEN 0x2000
|
||||||
|
#define MARS_VDP_FEN 0x0002
|
||||||
|
#define MARS_VDP_FS 0x0001
|
||||||
|
|
||||||
|
#define SH2_CCTL_CP 0x10
|
||||||
|
#define SH2_CCTL_TW 0x08
|
||||||
|
#define SH2_CCTL_CE 0x01
|
||||||
|
|
||||||
|
#define SH2_FRT_TIER (*(volatile unsigned char *)0xFFFFFE10)
|
||||||
|
#define SH2_FRT_FTCSR (*(volatile unsigned char *)0xFFFFFE11)
|
||||||
|
#define SH2_FRT_FRCH (*(volatile unsigned char *)0xFFFFFE12)
|
||||||
|
#define SH2_FRT_FRCL (*(volatile unsigned char *)0xFFFFFE13)
|
||||||
|
#define SH2_FRT_OCRH (*(volatile unsigned char *)0xFFFFFE14)
|
||||||
|
#define SH2_FRT_OCRL (*(volatile unsigned char *)0xFFFFFE15)
|
||||||
|
#define SH2_FRT_TCR (*(volatile unsigned char *)0xFFFFFE16)
|
||||||
|
#define SH2_FRT_TOCR (*(volatile unsigned char *)0xFFFFFE17)
|
||||||
|
#define SH2_FRT_ICRH (*(volatile unsigned char *)0xFFFFFE18)
|
||||||
|
#define SH2_FRT_ICRL (*(volatile unsigned char *)0xFFFFFE19)
|
||||||
|
|
||||||
|
#define SH2_DMA_SAR0 (*(volatile unsigned long *)0xFFFFFF80)
|
||||||
|
#define SH2_DMA_DAR0 (*(volatile unsigned long *)0xFFFFFF84)
|
||||||
|
#define SH2_DMA_TCR0 (*(volatile unsigned long *)0xFFFFFF88)
|
||||||
|
#define SH2_DMA_CHCR0 (*(volatile unsigned long *)0xFFFFFF8C)
|
||||||
|
#define SH2_DMA_VCR0 (*(volatile unsigned long *)0xFFFFFFA0)
|
||||||
|
#define SH2_DMA_DRCR0 (*(volatile unsigned char *)0xFFFFFE71)
|
||||||
|
|
||||||
|
#define SH2_DMA_SAR1 (*(volatile unsigned long *)0xFFFFFF90)
|
||||||
|
#define SH2_DMA_DAR1 (*(volatile unsigned long *)0xFFFFFF94)
|
||||||
|
#define SH2_DMA_TCR1 (*(volatile unsigned long *)0xFFFFFF98)
|
||||||
|
#define SH2_DMA_CHCR1 (*(volatile unsigned long *)0xFFFFFF9C)
|
||||||
|
#define SH2_DMA_VCR1 (*(volatile unsigned long *)0xFFFFFFA8)
|
||||||
|
#define SH2_DMA_DRCR1 (*(volatile unsigned char *)0xFFFFFE72)
|
||||||
|
|
||||||
|
#define SH2_DMA_DMAOR (*(volatile unsigned long *)0xFFFFFFB0)
|
||||||
|
|
||||||
|
#define SH2_INT_IPRA (*(volatile unsigned short *)0xFFFFFEE2)
|
||||||
|
|
||||||
|
#define SEGA_CTRL_UP 0x0001
|
||||||
|
#define SEGA_CTRL_DOWN 0x0002
|
||||||
|
#define SEGA_CTRL_LEFT 0x0004
|
||||||
|
#define SEGA_CTRL_RIGHT 0x0008
|
||||||
|
#define SEGA_CTRL_B 0x0010
|
||||||
|
#define SEGA_CTRL_C 0x0020
|
||||||
|
#define SEGA_CTRL_A 0x0040
|
||||||
|
#define SEGA_CTRL_START 0x0080
|
||||||
|
#define SEGA_CTRL_Z 0x0100
|
||||||
|
#define SEGA_CTRL_Y 0x0200
|
||||||
|
#define SEGA_CTRL_X 0x0400
|
||||||
|
#define SEGA_CTRL_MODE 0x0800
|
||||||
|
|
||||||
|
#define SEGA_CTRL_TYPE 0xF000
|
||||||
|
#define SEGA_CTRL_THREE 0x0000
|
||||||
|
#define SEGA_CTRL_SIX 0x1000
|
||||||
|
#define SEGA_CTRL_NONE 0xF000
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* global functions in sh2_crt0.s */
|
||||||
|
extern void fast_memcpy(void *dst, void *src, int len);
|
||||||
|
extern void CacheControl(int mode);
|
||||||
|
extern void CacheClearLine(void* ptr);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,119 @@
|
||||||
|
ifdef $(GENDEV)
|
||||||
|
ROOTDIR = $(GENDEV)
|
||||||
|
else
|
||||||
|
ROOTDIR = /opt/toolchains/sega
|
||||||
|
endif
|
||||||
|
|
||||||
|
.SUFFIXES:
|
||||||
|
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# Configurable options
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
TARGET = ClassiCube-32x
|
||||||
|
BUILD_DIR = build/32x
|
||||||
|
SOURCE_DIRS = src src/32x misc/32x
|
||||||
|
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# Compilable files
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
C_FILES = $(foreach dir,$(SOURCE_DIRS),$(wildcard $(dir)/*.c))
|
||||||
|
S_FILES = misc/32x/sh2_crt0.s
|
||||||
|
OBJS = $(addprefix $(BUILD_DIR)/, $(notdir $(C_FILES:%.c=%.o) $(S_FILES:%.s=%.o)))
|
||||||
|
|
||||||
|
# Dependency tracking
|
||||||
|
DEPFLAGS = -MT $@ -MMD -MP -MF $(BUILD_DIR)/$*.d
|
||||||
|
DEPFILES := $(OBJS:%.o=%.d)
|
||||||
|
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# Code generation
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
LDSCRIPTSDIR = $(ROOTDIR)/ldscripts
|
||||||
|
LIBS = $(LIBPATH) -lc -lgcc -lgcc-Os-4-200 -lnosys
|
||||||
|
|
||||||
|
LIBPATH = -L$(ROOTDIR)/sh-elf/lib -L$(ROOTDIR)/sh-elf/lib/gcc/sh-elf/4.6.2 -L$(ROOTDIR)/sh-elf/sh-elf/lib
|
||||||
|
INCPATH = -I$(ROOTDIR)/sh-elf/include -I$(ROOTDIR)/sh-elf/sh-elf/include
|
||||||
|
|
||||||
|
SHCCFLAGS = -m2 -mb -Ofast -Wall -g -c -fomit-frame-pointer -DPLAT_32X -ffunction-sections -fdata-sections
|
||||||
|
SHHWFLAGS = -m2 -mb -O1 -Wall -g -c -fomit-frame-pointer
|
||||||
|
SHLDFLAGS = -T $(LDSCRIPTSDIR)/mars.ld -nostdlib -Wl,--gc-sections
|
||||||
|
SHASFLAGS = --big
|
||||||
|
|
||||||
|
MDLDFLAGS = -T $(LDSCRIPTSDIR)/md.ld --oformat binary
|
||||||
|
MDASFLAGS = -m68000 --register-prefix-optional
|
||||||
|
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# Compiler tools
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
SHPREFIX = $(ROOTDIR)/sh-elf/bin/sh-elf-
|
||||||
|
SHCC = $(SHPREFIX)gcc
|
||||||
|
SHAS = $(SHPREFIX)as
|
||||||
|
SHLD = $(SHPREFIX)ld
|
||||||
|
SHOBJC = $(SHPREFIX)objcopy
|
||||||
|
|
||||||
|
MDPREFIX = $(ROOTDIR)/m68k-elf/bin/m68k-elf-
|
||||||
|
MDAS = $(MDPREFIX)as
|
||||||
|
MDLD = $(MDPREFIX)ld
|
||||||
|
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# main targets
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
all: $(BUILD_DIR) $(BUILD_DIR)/m68k_crt0.bin $(BUILD_DIR)/m68k_crt1.bin $(TARGET).bin
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(BUILD_DIR)/*.o $(BUILD_DIR)/*.bin $(TARGET).bin $(TARGET).elf
|
||||||
|
|
||||||
|
$(BUILD_DIR):
|
||||||
|
mkdir -p $(BUILD_DIR)
|
||||||
|
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# binary generation
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
$(TARGET).bin: $(TARGET).elf
|
||||||
|
$(SHOBJC) -O binary $< $(BUILD_DIR)/temp.bin
|
||||||
|
dd if=$(BUILD_DIR)/temp.bin of=$@ bs=64K conv=sync
|
||||||
|
|
||||||
|
$(TARGET).elf: $(OBJS)
|
||||||
|
$(SHCC) $(SHLDFLAGS) $(OBJS) $(LIBS) -o $(TARGET).elf
|
||||||
|
|
||||||
|
|
||||||
|
$(BUILD_DIR)/m68k_crt0.o: misc/32x/m68k_crt0.s
|
||||||
|
$(MDAS) $(MDASFLAGS) $< -o $@
|
||||||
|
|
||||||
|
$(BUILD_DIR)/m68k_crt0.bin: $(BUILD_DIR)/m68k_crt0.o
|
||||||
|
$(MDLD) $(MDLDFLAGS) $< -o $@
|
||||||
|
|
||||||
|
$(BUILD_DIR)/m68k_crt1.o: misc/32x/m68k_crt1.s
|
||||||
|
$(MDAS) $(MDASFLAGS) $< -o $@
|
||||||
|
|
||||||
|
$(BUILD_DIR)/m68k_crt1.bin: $(BUILD_DIR)/m68k_crt1.o
|
||||||
|
$(MDLD) $(MDLDFLAGS) $< -o $@
|
||||||
|
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# object generation
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
$(BUILD_DIR)/%.o: src/%.c
|
||||||
|
$(SHCC) $(SHCCFLAGS) $(INCPATH) $(DEPFLAGS) $< -o $@
|
||||||
|
|
||||||
|
$(BUILD_DIR)/%.o: src/32x/%.c
|
||||||
|
$(SHCC) $(SHCCFLAGS) $(INCPATH) $(DEPFLAGS) $< -o $@
|
||||||
|
|
||||||
|
$(BUILD_DIR)/%.o: misc/32x/%.c
|
||||||
|
$(SHCC) $(SHCCFLAGS) $(INCPATH) $(DEPFLAGS) $< -o $@
|
||||||
|
|
||||||
|
$(BUILD_DIR)/%.o: misc/32x/%.s
|
||||||
|
$(SHAS) $(SHASFLAGS) $(INCPATH) $< -o $@
|
||||||
|
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# Dependency tracking
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
$(DEPFILES):
|
||||||
|
|
||||||
|
include $(wildcard $(DEPFILES))
|
||||||
|
|
@ -0,0 +1,256 @@
|
||||||
|
/*
|
||||||
|
* Licensed under the BSD license
|
||||||
|
*
|
||||||
|
* debug_32x.c - Debug screen functions.
|
||||||
|
*
|
||||||
|
* Copyright (c) 2005 Marcus R. Brown <mrbrown@ocgnet.org>
|
||||||
|
* Copyright (c) 2005 James Forshaw <tyranid@gmail.com>
|
||||||
|
* Copyright (c) 2005 John Kelley <ps2dev@kelley.ca>
|
||||||
|
*
|
||||||
|
* Altered for 32X by Chilly Willy
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "32x.h"
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
static int init = 0;
|
||||||
|
static unsigned short fgc = 0, bgc = 0;
|
||||||
|
static unsigned char fgs = 0, bgs = 0;
|
||||||
|
|
||||||
|
static unsigned short currentFB = 0;
|
||||||
|
|
||||||
|
void Hw32xSetFGColor(int s, int r, int g, int b)
|
||||||
|
{
|
||||||
|
volatile unsigned short *palette = &MARS_CRAM;
|
||||||
|
fgs = s;
|
||||||
|
fgc = COLOR(r, g, b);
|
||||||
|
palette[fgs] = fgc;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Hw32xSetBGColor(int s, int r, int g, int b)
|
||||||
|
{
|
||||||
|
volatile unsigned short *palette = &MARS_CRAM;
|
||||||
|
bgs = s;
|
||||||
|
bgc = COLOR(r, g, b);
|
||||||
|
palette[bgs] = bgc;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Hw32xInit(int vmode, int lineskip)
|
||||||
|
{
|
||||||
|
volatile unsigned short *frameBuffer16 = &MARS_FRAMEBUFFER;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
// Wait for the SH2 to gain access to the VDP
|
||||||
|
while ((MARS_SYS_INTMSK & MARS_SH2_ACCESS_VDP) == 0) ;
|
||||||
|
|
||||||
|
if (vmode == MARS_VDP_MODE_32K)
|
||||||
|
{
|
||||||
|
// Set 16-bit direct mode, 224 lines
|
||||||
|
MARS_VDP_DISPMODE = MARS_224_LINES | MARS_VDP_MODE_32K;
|
||||||
|
|
||||||
|
// init both framebuffers
|
||||||
|
|
||||||
|
// Flip the framebuffer selection bit and wait for it to take effect
|
||||||
|
MARS_VDP_FBCTL = currentFB ^ 1;
|
||||||
|
while ((MARS_VDP_FBCTL & MARS_VDP_FS) == currentFB) ;
|
||||||
|
currentFB ^= 1;
|
||||||
|
// rewrite line table
|
||||||
|
for (i=0; i<224/(lineskip+1); i++)
|
||||||
|
{
|
||||||
|
if (lineskip)
|
||||||
|
{
|
||||||
|
int j = lineskip + 1;
|
||||||
|
while (j)
|
||||||
|
{
|
||||||
|
frameBuffer16[i*(lineskip+1) + (lineskip + 1 - j)] = i*320 + 0x100; /* word offset of line */
|
||||||
|
j--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (i<200)
|
||||||
|
frameBuffer16[i] = i*320 + 0x100; /* word offset of line */
|
||||||
|
else
|
||||||
|
frameBuffer16[i] = 200*320 + 0x100; /* word offset of line */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// clear screen
|
||||||
|
for (i=0x100; i<0x10000; i++)
|
||||||
|
frameBuffer16[i] = 0;
|
||||||
|
|
||||||
|
// Flip the framebuffer selection bit and wait for it to take effect
|
||||||
|
MARS_VDP_FBCTL = currentFB ^ 1;
|
||||||
|
while ((MARS_VDP_FBCTL & MARS_VDP_FS) == currentFB) ;
|
||||||
|
currentFB ^= 1;
|
||||||
|
// rewrite line table
|
||||||
|
for (i=0; i<224/(lineskip+1); i++)
|
||||||
|
{
|
||||||
|
if (lineskip)
|
||||||
|
{
|
||||||
|
int j = lineskip + 1;
|
||||||
|
while (j)
|
||||||
|
{
|
||||||
|
frameBuffer16[i*(lineskip+1) + (lineskip + 1 - j)] = i*320 + 0x100; /* word offset of line */
|
||||||
|
j--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (i<200)
|
||||||
|
frameBuffer16[i] = i*320 + 0x100; /* word offset of line */
|
||||||
|
else
|
||||||
|
frameBuffer16[i] = 200*320 + 0x100; /* word offset of line */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// clear screen
|
||||||
|
for (i=0x100; i<0x10000; i++)
|
||||||
|
frameBuffer16[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Hw32xSetFGColor(255,31,31,31);
|
||||||
|
Hw32xSetBGColor(0,0,0,0);
|
||||||
|
init = vmode;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Hw32xScreenClear()
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int l = (init == MARS_VDP_MODE_256) ? 320*224/2 + 0x100 : 320*200 + 0x100;
|
||||||
|
volatile unsigned short *frameBuffer16 = &MARS_FRAMEBUFFER;
|
||||||
|
|
||||||
|
// clear screen
|
||||||
|
for (i=0x100; i<l; i++)
|
||||||
|
frameBuffer16[i] = 0;
|
||||||
|
|
||||||
|
// Flip the framebuffer selection bit and wait for it to take effect
|
||||||
|
MARS_VDP_FBCTL = currentFB ^ 1;
|
||||||
|
while ((MARS_VDP_FBCTL & MARS_VDP_FS) == currentFB) ;
|
||||||
|
currentFB ^= 1;
|
||||||
|
|
||||||
|
// clear screen
|
||||||
|
for (i=0x100; i<l; i++)
|
||||||
|
frameBuffer16[i] = 0;
|
||||||
|
|
||||||
|
Hw32xSetFGColor(255,31,31,31);
|
||||||
|
Hw32xSetBGColor(0,0,0,0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Hw32xDelay(int ticks)
|
||||||
|
{
|
||||||
|
unsigned long ct = MARS_SYS_COMM12 + ticks;
|
||||||
|
while (MARS_SYS_COMM12 < ct) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Hw32xScreenFlip(int wait)
|
||||||
|
{
|
||||||
|
// Flip the framebuffer selection bit
|
||||||
|
MARS_VDP_FBCTL = currentFB ^ 1;
|
||||||
|
if (wait)
|
||||||
|
{
|
||||||
|
while ((MARS_VDP_FBCTL & MARS_VDP_FS) == currentFB) ;
|
||||||
|
currentFB ^= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Hw32xFlipWait()
|
||||||
|
{
|
||||||
|
while ((MARS_VDP_FBCTL & MARS_VDP_FS) == currentFB) ;
|
||||||
|
currentFB ^= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// MD Command support code ---------------------------------------------
|
||||||
|
|
||||||
|
unsigned short HwMdReadPad(int port)
|
||||||
|
{
|
||||||
|
if (port == 0)
|
||||||
|
return MARS_SYS_COMM8;
|
||||||
|
else if (port == 1)
|
||||||
|
return MARS_SYS_COMM10;
|
||||||
|
else
|
||||||
|
return SEGA_CTRL_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned char HwMdReadSram(unsigned short offset)
|
||||||
|
{
|
||||||
|
while (MARS_SYS_COMM0) ; // wait until 68000 has responded to any earlier requests
|
||||||
|
MARS_SYS_COMM2 = offset;
|
||||||
|
MARS_SYS_COMM0 = 0x0100; // Read SRAM
|
||||||
|
while (MARS_SYS_COMM0) ;
|
||||||
|
return MARS_SYS_COMM2 & 0x00FF;
|
||||||
|
}
|
||||||
|
|
||||||
|
void HwMdWriteSram(unsigned char byte, unsigned short offset)
|
||||||
|
{
|
||||||
|
while (MARS_SYS_COMM0) ; // wait until 68000 has responded to any earlier requests
|
||||||
|
MARS_SYS_COMM2 = offset;
|
||||||
|
MARS_SYS_COMM0 = 0x0200 | byte; // Write SRAM
|
||||||
|
while (MARS_SYS_COMM0) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
int HwMdReadMouse(int port)
|
||||||
|
{
|
||||||
|
unsigned int mouse1, mouse2;
|
||||||
|
while (MARS_SYS_COMM0) ; // wait until 68000 has responded to any earlier requests
|
||||||
|
MARS_SYS_COMM0 = 0x0300|port; // tells 68000 to read mouse
|
||||||
|
while (MARS_SYS_COMM0 == (0x0300|port)) ; // wait for mouse value
|
||||||
|
mouse1 = MARS_SYS_COMM0;
|
||||||
|
mouse2 = MARS_SYS_COMM2;
|
||||||
|
MARS_SYS_COMM0 = 0; // tells 68000 we got the mouse value
|
||||||
|
return (int)((mouse1 << 16) | mouse2);
|
||||||
|
}
|
||||||
|
|
||||||
|
void HwMdClearScreen(void)
|
||||||
|
{
|
||||||
|
while (MARS_SYS_COMM0) ; // wait until 68000 has responded to any earlier requests
|
||||||
|
MARS_SYS_COMM0 = 0x0400; // Clear Screen (Name Table B)
|
||||||
|
while (MARS_SYS_COMM0) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
void HwMdSetOffset(unsigned short offset)
|
||||||
|
{
|
||||||
|
while (MARS_SYS_COMM0) ; // wait until 68000 has responded to any earlier requests
|
||||||
|
MARS_SYS_COMM2 = offset;
|
||||||
|
MARS_SYS_COMM0 = 0x0500; // Set offset (into either Name Table B or VRAM)
|
||||||
|
while (MARS_SYS_COMM0) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
void HwMdSetNTable(unsigned short word)
|
||||||
|
{
|
||||||
|
while (MARS_SYS_COMM0) ; // wait until 68000 has responded to any earlier requests
|
||||||
|
MARS_SYS_COMM2 = word;
|
||||||
|
MARS_SYS_COMM0 = 0x0600; // Set word at offset in Name Table B
|
||||||
|
while (MARS_SYS_COMM0) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
void HwMdSetVram(unsigned short word)
|
||||||
|
{
|
||||||
|
while (MARS_SYS_COMM0) ; // wait until 68000 has responded to any earlier requests
|
||||||
|
MARS_SYS_COMM2 = word;
|
||||||
|
MARS_SYS_COMM0 = 0x0700; // Set word at offset in VRAM
|
||||||
|
while (MARS_SYS_COMM0) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
void HwMdPuts(char *str, int color, int x, int y)
|
||||||
|
{
|
||||||
|
HwMdSetOffset(((y<<6) | x) << 1);
|
||||||
|
while (*str)
|
||||||
|
HwMdSetNTable(((*str++ - 0x20) & 0xFF) | color);
|
||||||
|
}
|
||||||
|
|
||||||
|
void HwMdPutc(char chr, int color, int x, int y)
|
||||||
|
{
|
||||||
|
HwMdSetOffset(((y<<6) | x) << 1);
|
||||||
|
HwMdSetNTable(((chr - 0x20) & 0xFF) | color);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Slave SH2 support code ----------------------------------------------
|
||||||
|
|
||||||
|
void slave(void)
|
||||||
|
{
|
||||||
|
while (1) ;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
#ifndef HW_32X_H
|
||||||
|
#define HW_32X_H
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
extern void Hw32xSetFGColor(int s, int r, int g, int b);
|
||||||
|
extern void Hw32xSetBGColor(int s, int r, int g, int b);
|
||||||
|
extern void Hw32xInit(int vmode, int lineskip);
|
||||||
|
extern int Hw32xScreenGetX();
|
||||||
|
extern int Hw32xScreenGetY();
|
||||||
|
extern void Hw32xScreenSetXY(int x, int y);
|
||||||
|
extern void Hw32xScreenClear();
|
||||||
|
extern void Hw32xDelay(int ticks);
|
||||||
|
extern void Hw32xScreenFlip(int wait);
|
||||||
|
extern void Hw32xFlipWait();
|
||||||
|
|
||||||
|
extern unsigned short HwMdReadPad(int port);
|
||||||
|
extern unsigned char HwMdReadSram(unsigned short offset);
|
||||||
|
extern void HwMdWriteSram(unsigned char byte, unsigned short offset);
|
||||||
|
extern int HwMdReadMouse(int port);
|
||||||
|
extern void HwMdClearScreen(void);
|
||||||
|
extern void HwMdSetOffset(unsigned short offset);
|
||||||
|
extern void HwMdSetNTable(unsigned short word);
|
||||||
|
extern void HwMdSetVram(unsigned short word);
|
||||||
|
extern void HwMdPuts(char *str, int color, int x, int y);
|
||||||
|
extern void HwMdPutc(char chr, int color, int x, int y);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,98 @@
|
||||||
|
| SEGA 32X support code for the 68000
|
||||||
|
| by Chilly Willy
|
||||||
|
| First part of rom header
|
||||||
|
|
||||||
|
.text
|
||||||
|
|
||||||
|
| Initial exception vectors. When the console is first turned on, it is
|
||||||
|
| in MegaDrive mode. All vectors just point to the code to start up the
|
||||||
|
| Mars adapter. After the adapter is enabled, none of these vectors will
|
||||||
|
| appear as the adapter uses its own vector table to route exceptions to
|
||||||
|
| the jump table. 0x3F0 is where the 68000 starts at for the 32X.
|
||||||
|
|
||||||
|
.long 0x01000000,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0
|
||||||
|
.long 0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0
|
||||||
|
.long 0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0
|
||||||
|
.long 0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0
|
||||||
|
.long 0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0
|
||||||
|
.long 0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0
|
||||||
|
.long 0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0
|
||||||
|
.long 0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0
|
||||||
|
|
||||||
|
| Standard MegaDrive ROM header at 0x100
|
||||||
|
|
||||||
|
.ascii "SEGA 32X Example" /* SEGA must be the first four chars for TMSS */
|
||||||
|
.ascii "(C)2024 "
|
||||||
|
.ascii "ClassiCube 32X " /* export name */
|
||||||
|
.ascii " "
|
||||||
|
.ascii " "
|
||||||
|
.ascii "ClassiCube 32X " /* domestic (Japanese) name */
|
||||||
|
.ascii " "
|
||||||
|
.ascii " "
|
||||||
|
.ascii "GM MK-0000 -00"
|
||||||
|
.word 0x0000 /* checksum - not needed */
|
||||||
|
.ascii "J6 "
|
||||||
|
.long 0x00000000,0x0007FFFF /* ROM start, end */
|
||||||
|
.long 0x00FF0000,0x00FFFFFF /* RAM start, end */
|
||||||
|
|
||||||
|
.ifdef HAS_SAVE_RAM
|
||||||
|
.ascii "RA" /* External RAM */
|
||||||
|
.byte 0xF8 /* don't clear + odd bytes */
|
||||||
|
.byte 0x20 /* SRAM */
|
||||||
|
.long 0x00200001,0x0020FFFF /* SRAM start, end */
|
||||||
|
.else
|
||||||
|
.ascii " " /* no SRAM */
|
||||||
|
.endif
|
||||||
|
|
||||||
|
.ascii " "
|
||||||
|
.ascii " "
|
||||||
|
|
||||||
|
.ifdef MYTH_HOMEBREW
|
||||||
|
.ascii "MYTH3900" /* memo indicates Myth native executable */
|
||||||
|
.else
|
||||||
|
.ascii " " /* memo */
|
||||||
|
.endif
|
||||||
|
|
||||||
|
.ascii " "
|
||||||
|
.ascii " "
|
||||||
|
.ascii "F " /* enable any hardware configuration */
|
||||||
|
|
||||||
|
| Mars exception vector jump table at 0x200
|
||||||
|
|
||||||
|
jmp 0x880800.l /* reset = hot start */
|
||||||
|
jsr 0x880806.l /* EX_BusError */
|
||||||
|
jsr 0x880806.l /* EX_AddrError */
|
||||||
|
jsr 0x880806.l /* EX_IllInstr */
|
||||||
|
jsr 0x880806.l /* EX_DivByZero */
|
||||||
|
jsr 0x880806.l /* EX_CHK */
|
||||||
|
jsr 0x880806.l /* EX_TrapV */
|
||||||
|
jsr 0x880806.l /* EX_Priviledge */
|
||||||
|
jsr 0x880806.l /* EX_Trace */
|
||||||
|
jsr 0x880806.l /* EX_LineA */
|
||||||
|
jsr 0x880806.l /* EX_LineF */
|
||||||
|
.space 72 /* reserved */
|
||||||
|
jsr 0x880806.l /* EX_Spurious */
|
||||||
|
jsr 0x880806.l /* EX_Level1 */
|
||||||
|
jsr 0x880806.l /* EX_Level2 */
|
||||||
|
jsr 0x880806.l /* EX_Level3 */
|
||||||
|
jmp 0x88080C.l /* EX_Level4 HBlank */
|
||||||
|
jsr 0x880806.l /* EX_Level5 */
|
||||||
|
jmp 0x880812.l /* EX_Level6 VBlank */
|
||||||
|
jsr 0x880806.l /* EX_Level7 */
|
||||||
|
jsr 0x880806.l /* EX_Trap0 */
|
||||||
|
jsr 0x880806.l /* EX_Trap1 */
|
||||||
|
jsr 0x880806.l /* EX_Trap2 */
|
||||||
|
jsr 0x880806.l /* EX_Trap3 */
|
||||||
|
jsr 0x880806.l /* EX_Trap4 */
|
||||||
|
jsr 0x880806.l /* EX_Trap5 */
|
||||||
|
jsr 0x880806.l /* EX_Trap6 */
|
||||||
|
jsr 0x880806.l /* EX_Trap7 */
|
||||||
|
jsr 0x880806.l /* EX_Trap8 */
|
||||||
|
jsr 0x880806.l /* EX_Trap9 */
|
||||||
|
jsr 0x880806.l /* EX_TrapA */
|
||||||
|
jsr 0x880806.l /* EX_TrapB */
|
||||||
|
jsr 0x880806.l /* EX_TrapC */
|
||||||
|
jsr 0x880806.l /* EX_TrapD */
|
||||||
|
jsr 0x880806.l /* EX_TrapE */
|
||||||
|
jsr 0x880806.l /* EX_TrapF */
|
||||||
|
.space 166 /* reserved */
|
||||||
|
|
@ -0,0 +1,727 @@
|
||||||
|
! SEGA 32X support code for SH2
|
||||||
|
! by Chilly Willy
|
||||||
|
! Rom header and SH2 init/exception code - must be first in object list
|
||||||
|
|
||||||
|
.text
|
||||||
|
|
||||||
|
! Standard MD Header at 0x000
|
||||||
|
|
||||||
|
.incbin "build/32x/m68k_crt0.bin", 0, 0x3C0
|
||||||
|
|
||||||
|
! Standard Mars Header at 0x3C0
|
||||||
|
|
||||||
|
.ascii "ClassiCube 32X " /* module name (16 chars) */
|
||||||
|
.long 0x00000000 /* version */
|
||||||
|
.long __text_end-0x02000000 /* Source (in ROM) */
|
||||||
|
.long 0x00000000 /* Destination (in SDRAM) */
|
||||||
|
.long __data_size /* Size */
|
||||||
|
.long 0x06000240 /* Master SH2 Jump */
|
||||||
|
.long 0x06000244 /* Slave SH2 Jump */
|
||||||
|
.long 0x06000000 /* Master SH2 VBR */
|
||||||
|
.long 0x06000120 /* Slave SH2 VBR */
|
||||||
|
|
||||||
|
! Standard MD startup code at 0x3F0
|
||||||
|
|
||||||
|
.incbin "build/32x/m68k_crt1.bin"
|
||||||
|
|
||||||
|
|
||||||
|
.data
|
||||||
|
|
||||||
|
! Master Vector Base Table at 0x06000000
|
||||||
|
|
||||||
|
.long mstart /* 0, Cold Start PC */
|
||||||
|
.long 0x0603FC00 /* 1, Cold Start SP */
|
||||||
|
.long mstart /* 2, Manual Reset PC */
|
||||||
|
.long 0x0603FC00 /* 3, Manual Reset SP */
|
||||||
|
.long main_err /* 4, Illegal instruction */
|
||||||
|
.long _wdt_handler/* 5, reserved - repurposed for WDT */
|
||||||
|
.long main_err /* 6, Invalid slot instruction */
|
||||||
|
.long 0x20100400 /* 7, reserved */
|
||||||
|
.long 0x20100420 /* 8, reserved */
|
||||||
|
.long main_err /* 9, CPU address error */
|
||||||
|
.long main_err /* 10, DMA address error */
|
||||||
|
.long main_err /* 11, NMI vector */
|
||||||
|
.long main_err /* 12, User break vector */
|
||||||
|
.space 76 /* reserved */
|
||||||
|
.long main_err /* TRAPA #32 */
|
||||||
|
.long main_err /* TRAPA #33 */
|
||||||
|
.long main_err /* TRAPA #34 */
|
||||||
|
.long main_err /* TRAPA #35 */
|
||||||
|
.long main_err /* TRAPA #36 */
|
||||||
|
.long main_err /* TRAPA #37 */
|
||||||
|
.long main_err /* TRAPA #38 */
|
||||||
|
.long main_err /* TRAPA #39 */
|
||||||
|
.long main_err /* TRAPA #40 */
|
||||||
|
.long main_err /* TRAPA #41 */
|
||||||
|
.long main_err /* TRAPA #42 */
|
||||||
|
.long main_err /* TRAPA #43 */
|
||||||
|
.long main_err /* TRAPA #44 */
|
||||||
|
.long main_err /* TRAPA #45 */
|
||||||
|
.long main_err /* TRAPA #46 */
|
||||||
|
.long main_err /* TRAPA #47 */
|
||||||
|
.long main_err /* TRAPA #48 */
|
||||||
|
.long main_err /* TRAPA #49 */
|
||||||
|
.long main_err /* TRAPA #50 */
|
||||||
|
.long main_err /* TRAPA #51 */
|
||||||
|
.long main_err /* TRAPA #52 */
|
||||||
|
.long main_err /* TRAPA #53 */
|
||||||
|
.long main_err /* TRAPA #54 */
|
||||||
|
.long main_err /* TRAPA #55 */
|
||||||
|
.long main_err /* TRAPA #56 */
|
||||||
|
.long main_err /* TRAPA #57 */
|
||||||
|
.long main_err /* TRAPA #58 */
|
||||||
|
.long main_err /* TRAPA #59 */
|
||||||
|
.long main_err /* TRAPA #60 */
|
||||||
|
.long main_err /* TRAPA #61 */
|
||||||
|
.long main_err /* TRAPA #62 */
|
||||||
|
.long main_err /* TRAPA #63 */
|
||||||
|
.long main_irq /* Level 1 IRQ */
|
||||||
|
.long main_irq /* Level 2 & 3 IRQ's */
|
||||||
|
.long main_irq /* Level 4 & 5 IRQ's */
|
||||||
|
.long main_irq /* PWM interupt */
|
||||||
|
.long main_irq /* Command interupt */
|
||||||
|
.long main_irq /* H Blank interupt */
|
||||||
|
.long main_irq /* V Blank interupt */
|
||||||
|
.long main_irq /* Reset Button */
|
||||||
|
|
||||||
|
! Slave Vector Base Table at 0x06000120
|
||||||
|
|
||||||
|
.long sstart /* Cold Start PC */
|
||||||
|
.long 0x06040000 /* Cold Start SP */
|
||||||
|
.long sstart /* Manual Reset PC */
|
||||||
|
.long 0x06040000 /* Manual Reset SP */
|
||||||
|
.long slav_err /* Illegal instruction */
|
||||||
|
.long 0x00000000 /* reserved */
|
||||||
|
.long slav_err /* Invalid slot instruction */
|
||||||
|
.long 0x20100400 /* reserved */
|
||||||
|
.long 0x20100420 /* reserved */
|
||||||
|
.long slav_err /* CPU address error */
|
||||||
|
.long slav_err /* DMA address error */
|
||||||
|
.long slav_err /* NMI vector */
|
||||||
|
.long slav_err /* User break vector */
|
||||||
|
.space 76 /* reserved */
|
||||||
|
.long slav_err /* TRAPA #32 */
|
||||||
|
.long slav_err /* TRAPA #33 */
|
||||||
|
.long slav_err /* TRAPA #34 */
|
||||||
|
.long slav_err /* TRAPA #35 */
|
||||||
|
.long slav_err /* TRAPA #36 */
|
||||||
|
.long slav_err /* TRAPA #37 */
|
||||||
|
.long slav_err /* TRAPA #38 */
|
||||||
|
.long slav_err /* TRAPA #39 */
|
||||||
|
.long slav_err /* TRAPA #40 */
|
||||||
|
.long slav_err /* TRAPA #41 */
|
||||||
|
.long slav_err /* TRAPA #42 */
|
||||||
|
.long slav_err /* TRAPA #43 */
|
||||||
|
.long slav_err /* TRAPA #44 */
|
||||||
|
.long slav_err /* TRAPA #45 */
|
||||||
|
.long slav_err /* TRAPA #46 */
|
||||||
|
.long slav_err /* TRAPA #47 */
|
||||||
|
.long slav_err /* TRAPA #48 */
|
||||||
|
.long slav_err /* TRAPA #49 */
|
||||||
|
.long slav_err /* TRAPA #50 */
|
||||||
|
.long slav_err /* TRAPA #51 */
|
||||||
|
.long slav_err /* TRAPA #52 */
|
||||||
|
.long slav_err /* TRAPA #53 */
|
||||||
|
.long slav_err /* TRAPA #54 */
|
||||||
|
.long slav_err /* TRAPA #55 */
|
||||||
|
.long slav_err /* TRAPA #56 */
|
||||||
|
.long slav_err /* TRAPA #57 */
|
||||||
|
.long slav_err /* TRAPA #58 */
|
||||||
|
.long slav_err /* TRAPA #59 */
|
||||||
|
.long slav_err /* TRAPA #60 */
|
||||||
|
.long slav_err /* TRAPA #61 */
|
||||||
|
.long slav_err /* TRAPA #62 */
|
||||||
|
.long slav_err /* TRAPA #63 */
|
||||||
|
.long slav_irq /* Level 1 IRQ */
|
||||||
|
.long slav_irq /* Level 2 & 3 IRQ's */
|
||||||
|
.long slav_irq /* Level 4 & 5 IRQ's */
|
||||||
|
.long slav_irq /* PWM interupt */
|
||||||
|
.long slav_irq /* Command interupt */
|
||||||
|
.long slav_irq /* H Blank interupt */
|
||||||
|
.long slav_irq /* V Blank interupt */
|
||||||
|
.long slav_irq /* Reset Button */
|
||||||
|
|
||||||
|
! The main SH2 starts here at 0x06000240
|
||||||
|
|
||||||
|
mstart:
|
||||||
|
bra mcont
|
||||||
|
nop
|
||||||
|
|
||||||
|
! The slave SH2 starts here at 0x06000244
|
||||||
|
|
||||||
|
sstart:
|
||||||
|
bra scont
|
||||||
|
nop
|
||||||
|
|
||||||
|
! Each section of code below has its own data table so that the code
|
||||||
|
! can be extended without worrying about the offsets becoming too big.
|
||||||
|
! This results in duplicate entries, but not so many that we care. :)
|
||||||
|
|
||||||
|
mcont:
|
||||||
|
! clear interrupt flags
|
||||||
|
mov.l _master_int_clr,r1
|
||||||
|
mov.w r0,@-r1 /* PWM INT clear */
|
||||||
|
mov.w r0,@r1
|
||||||
|
mov.w r0,@-r1 /* CMD INT clear */
|
||||||
|
mov.w r0,@r1
|
||||||
|
mov.w r0,@-r1 /* H INT clear */
|
||||||
|
mov.w r0,@r1
|
||||||
|
mov.w r0,@-r1 /* V INT clear */
|
||||||
|
mov.w r0,@r1
|
||||||
|
mov.w r0,@-r1 /* VRES INT clear */
|
||||||
|
mov.w r0,@r1
|
||||||
|
|
||||||
|
mov.l _master_stk,r15
|
||||||
|
! purge cache and turn it off
|
||||||
|
mov.l _master_cctl,r0
|
||||||
|
mov #0x10,r1
|
||||||
|
mov.b r1,@r0
|
||||||
|
|
||||||
|
! clear bss
|
||||||
|
mov #0,r0
|
||||||
|
mov.l _master_bss_start,r1
|
||||||
|
mov.l _master_bss_end,r2
|
||||||
|
0:
|
||||||
|
mov.l r0,@r1
|
||||||
|
cmp/eq r1,r2
|
||||||
|
bf/s 0b
|
||||||
|
add #4,r1
|
||||||
|
|
||||||
|
! wait for 68000 to finish init
|
||||||
|
mov.l _master_sts,r0
|
||||||
|
mov.l _master_ok,r1
|
||||||
|
1:
|
||||||
|
mov.l @r0,r2
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
cmp/eq r1,r2
|
||||||
|
bt 1b
|
||||||
|
|
||||||
|
! do all initializers
|
||||||
|
mov.l _master_do_init,r0
|
||||||
|
jsr @r0
|
||||||
|
nop
|
||||||
|
|
||||||
|
! let Slave SH2 run
|
||||||
|
mov #0,r1
|
||||||
|
mov.l r1,@(4,r0) /* clear slave status */
|
||||||
|
|
||||||
|
mov #0x80,r0
|
||||||
|
mov.l _master_adapter,r1
|
||||||
|
mov.b r0,@r1 /* set FM */
|
||||||
|
mov #0x00,r0
|
||||||
|
mov.b r0,@(1,r1) /* set int enables */
|
||||||
|
mov #0x20,r0
|
||||||
|
ldc r0,sr /* allow ints */
|
||||||
|
|
||||||
|
! purge cache, turn it on, and run main()
|
||||||
|
mov.l _master_cctl,r0
|
||||||
|
mov #0x11,r1
|
||||||
|
mov.b r1,@r0
|
||||||
|
mov.l _master_go,r0
|
||||||
|
jsr @r0
|
||||||
|
nop
|
||||||
|
|
||||||
|
! do all finishers
|
||||||
|
mov.l _master_do_fini,r0
|
||||||
|
jsr @r0
|
||||||
|
nop
|
||||||
|
2:
|
||||||
|
bra 2b
|
||||||
|
nop
|
||||||
|
|
||||||
|
.align 2
|
||||||
|
_master_int_clr:
|
||||||
|
.long 0x2000401E /* one word passed last int clr reg */
|
||||||
|
_master_stk:
|
||||||
|
.long 0x0603FC00 /* Cold Start SP */
|
||||||
|
_master_sts:
|
||||||
|
.long 0x20004020
|
||||||
|
_master_ok:
|
||||||
|
.ascii "M_OK"
|
||||||
|
_master_adapter:
|
||||||
|
.long 0x20004000
|
||||||
|
_master_cctl:
|
||||||
|
.long 0xFFFFFE92
|
||||||
|
_master_go:
|
||||||
|
.long _main
|
||||||
|
|
||||||
|
_master_bss_start:
|
||||||
|
.long __bss_start
|
||||||
|
_master_bss_end:
|
||||||
|
.long __bss_end
|
||||||
|
_master_do_init:
|
||||||
|
.long __INIT_SECTION__
|
||||||
|
_master_do_fini:
|
||||||
|
.long __FINI_SECTION__
|
||||||
|
|
||||||
|
scont:
|
||||||
|
! clear interrupt flags
|
||||||
|
mov.l _slave_int_clr,r1
|
||||||
|
mov.w r0,@-r1 /* PWM INT clear */
|
||||||
|
mov.w r0,@r1
|
||||||
|
mov.w r0,@-r1 /* CMD INT clear */
|
||||||
|
mov.w r0,@r1
|
||||||
|
mov.w r0,@-r1 /* H INT clear */
|
||||||
|
mov.w r0,@r1
|
||||||
|
mov.w r0,@-r1 /* V INT clear */
|
||||||
|
mov.w r0,@r1
|
||||||
|
mov.w r0,@-r1 /* VRES INT clear */
|
||||||
|
mov.w r0,@r1
|
||||||
|
|
||||||
|
mov.l _slave_stk,r15
|
||||||
|
! wait for Master SH2 and 68000 to finish init
|
||||||
|
mov.l _slave_sts,r0
|
||||||
|
mov.l _slave_ok,r1
|
||||||
|
1:
|
||||||
|
mov.l @r0,r2
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
cmp/eq r1,r2
|
||||||
|
bt 1b
|
||||||
|
|
||||||
|
mov.l _slave_adapter,r1
|
||||||
|
mov #0x00,r0
|
||||||
|
mov.b r0,@(1,r1) /* set int enables (different from master despite same address!) */
|
||||||
|
mov #0x20,r0
|
||||||
|
ldc r0,sr /* allow ints */
|
||||||
|
|
||||||
|
! purge cache, turn it on, and run slave()
|
||||||
|
mov.l _slave_cctl,r0
|
||||||
|
mov #0x11,r1
|
||||||
|
mov.b r1,@r0
|
||||||
|
mov.l _slave_go,r0
|
||||||
|
jmp @r0
|
||||||
|
nop
|
||||||
|
|
||||||
|
.align 2
|
||||||
|
_slave_int_clr:
|
||||||
|
.long 0x2000401E /* one word passed last int clr reg */
|
||||||
|
_slave_stk:
|
||||||
|
.long 0x06040000 /* Cold Start SP */
|
||||||
|
_slave_sts:
|
||||||
|
.long 0x20004024
|
||||||
|
_slave_ok:
|
||||||
|
.ascii "S_OK"
|
||||||
|
_slave_adapter:
|
||||||
|
.long 0x20004000
|
||||||
|
_slave_cctl:
|
||||||
|
.long 0xFFFFFE92
|
||||||
|
_slave_go:
|
||||||
|
.long _slave
|
||||||
|
|
||||||
|
! Master exception handler
|
||||||
|
|
||||||
|
main_err:
|
||||||
|
rte
|
||||||
|
nop
|
||||||
|
|
||||||
|
! Master IRQ handler
|
||||||
|
|
||||||
|
main_irq:
|
||||||
|
mov.l r0,@-r15
|
||||||
|
|
||||||
|
stc sr,r0 /* SR holds IRQ level in I3-I0 */
|
||||||
|
shlr2 r0
|
||||||
|
and #0x38,r0
|
||||||
|
cmp/eq #0x28,r0
|
||||||
|
bt main_h_irq
|
||||||
|
cmp/eq #0x18,r0
|
||||||
|
bt main_pwm_irq
|
||||||
|
cmp/eq #0x30,r0
|
||||||
|
bt main_v_irq
|
||||||
|
cmp/eq #0x20,r0
|
||||||
|
bt main_cmd_irq
|
||||||
|
cmp/eq #0x38,r0
|
||||||
|
bt main_vres_irq
|
||||||
|
|
||||||
|
mov.l @r15+,r0
|
||||||
|
rte
|
||||||
|
nop
|
||||||
|
|
||||||
|
main_v_irq:
|
||||||
|
mov.l r1,@-r15
|
||||||
|
|
||||||
|
mov.l mvi_mars_adapter,r1
|
||||||
|
mov.w r0,@(0x16,r1) /* clear V IRQ */
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
|
||||||
|
! handle V IRQ
|
||||||
|
|
||||||
|
mov.l @r15+,r1
|
||||||
|
mov.l @r15+,r0
|
||||||
|
rte
|
||||||
|
nop
|
||||||
|
|
||||||
|
.align 2
|
||||||
|
mvi_mars_adapter:
|
||||||
|
.long 0x20004000
|
||||||
|
|
||||||
|
main_h_irq:
|
||||||
|
mov.l r1,@-r15
|
||||||
|
|
||||||
|
mov.l mhi_mars_adapter,r1
|
||||||
|
mov.w r0,@(0x18,r1) /* clear H IRQ */
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
|
||||||
|
! handle H IRQ
|
||||||
|
|
||||||
|
mov.l @r15+,r1
|
||||||
|
mov.l @r15+,r0
|
||||||
|
rte
|
||||||
|
nop
|
||||||
|
|
||||||
|
.align 2
|
||||||
|
mhi_mars_adapter:
|
||||||
|
.long 0x20004000
|
||||||
|
|
||||||
|
main_cmd_irq:
|
||||||
|
mov.l r1,@-r15
|
||||||
|
|
||||||
|
mov.l mci_mars_adapter,r1
|
||||||
|
mov.w r0,@(0x1A,r1) /* clear CMD IRQ */
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
|
||||||
|
! handle CMD IRQ
|
||||||
|
|
||||||
|
mov.l @r15+,r1
|
||||||
|
mov.l @r15+,r0
|
||||||
|
rte
|
||||||
|
nop
|
||||||
|
|
||||||
|
.align 2
|
||||||
|
mci_mars_adapter:
|
||||||
|
.long 0x20004000
|
||||||
|
|
||||||
|
main_pwm_irq:
|
||||||
|
mov.l r1,@-r15
|
||||||
|
|
||||||
|
mov.l mpi_mars_adapter,r1
|
||||||
|
mov.w r0,@(0x1C,r1) /* clear PWM IRQ */
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
|
||||||
|
! handle PWM IRQ
|
||||||
|
|
||||||
|
mov.l @r15+,r1
|
||||||
|
mov.l @r15+,r0
|
||||||
|
rte
|
||||||
|
nop
|
||||||
|
|
||||||
|
.align 2
|
||||||
|
mpi_mars_adapter:
|
||||||
|
.long 0x20004000
|
||||||
|
|
||||||
|
main_vres_irq:
|
||||||
|
mov.l mvri_mars_adapter,r1
|
||||||
|
mov.w r0,@(0x14,r1) /* clear VRES IRQ */
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
|
||||||
|
mov #0x0F,r0
|
||||||
|
shll2 r0
|
||||||
|
shll2 r0
|
||||||
|
ldc r0,sr /* disallow ints */
|
||||||
|
|
||||||
|
mov.l mvri_master_stk,r15
|
||||||
|
mov.l mvri_master_vres,r0
|
||||||
|
jmp @r0
|
||||||
|
nop
|
||||||
|
|
||||||
|
.align 2
|
||||||
|
mvri_mars_adapter:
|
||||||
|
.long 0x20004000
|
||||||
|
mvri_master_stk:
|
||||||
|
.long 0x0603FC00 /* Cold Start SP */
|
||||||
|
mvri_master_vres:
|
||||||
|
.long main_reset
|
||||||
|
|
||||||
|
! Slave exception handler
|
||||||
|
|
||||||
|
slav_err:
|
||||||
|
rte
|
||||||
|
nop
|
||||||
|
|
||||||
|
! Slave IRQ handler
|
||||||
|
|
||||||
|
slav_irq:
|
||||||
|
mov.l r0,@-r15
|
||||||
|
|
||||||
|
stc sr,r0 /* SR holds IRQ level I3-I0 */
|
||||||
|
shlr2 r0
|
||||||
|
and #0x38,r0
|
||||||
|
cmp/eq #0x28,r0
|
||||||
|
bt slav_h_irq
|
||||||
|
cmp/eq #0x18,r0
|
||||||
|
bt slav_pwm_irq
|
||||||
|
cmp/eq #0x30,r0
|
||||||
|
bt slav_v_irq
|
||||||
|
cmp/eq #0x20,r0
|
||||||
|
bt slav_cmd_irq
|
||||||
|
cmp/eq #0x38,r0
|
||||||
|
bt slav_vres_irq
|
||||||
|
|
||||||
|
mov.l @r15+,r0
|
||||||
|
rte
|
||||||
|
nop
|
||||||
|
|
||||||
|
slav_v_irq:
|
||||||
|
mov.l r1,@-r15
|
||||||
|
|
||||||
|
mov.l svi_mars_adapter,r1
|
||||||
|
mov.w r0,@(0x16,r1) /* clear V IRQ */
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
|
||||||
|
! handle V IRQ
|
||||||
|
|
||||||
|
mov.l @r15+,r1
|
||||||
|
mov.l @r15+,r0
|
||||||
|
rte
|
||||||
|
nop
|
||||||
|
|
||||||
|
.align 2
|
||||||
|
svi_mars_adapter:
|
||||||
|
.long 0x20004000
|
||||||
|
|
||||||
|
slav_h_irq:
|
||||||
|
mov.l r1,@-r15
|
||||||
|
|
||||||
|
mov.l shi_mars_adapter,r1
|
||||||
|
mov.w r0,@(0x18,r1) /* clear H IRQ */
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
|
||||||
|
! handle H IRQ
|
||||||
|
|
||||||
|
mov.l @r15+,r1
|
||||||
|
mov.l @r15+,r0
|
||||||
|
rte
|
||||||
|
nop
|
||||||
|
|
||||||
|
.align 2
|
||||||
|
shi_mars_adapter:
|
||||||
|
.long 0x20004000
|
||||||
|
|
||||||
|
slav_cmd_irq:
|
||||||
|
mov.l r1,@-r15
|
||||||
|
|
||||||
|
mov.l sci_mars_adapter,r1
|
||||||
|
mov.w r0,@(0x1A,r1) /* clear CMD IRQ */
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
|
||||||
|
! handle CMD IRQ
|
||||||
|
|
||||||
|
mov.l @r15+,r1
|
||||||
|
mov.l @r15+,r0
|
||||||
|
rte
|
||||||
|
nop
|
||||||
|
|
||||||
|
.align 2
|
||||||
|
sci_mars_adapter:
|
||||||
|
.long 0x20004000
|
||||||
|
|
||||||
|
slav_pwm_irq:
|
||||||
|
mov.l r1,@-r15
|
||||||
|
|
||||||
|
mov.l spi_mars_adapter,r1
|
||||||
|
mov.w r0,@(0x1C,r1) /* clear PWM IRQ */
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
|
||||||
|
! handle PWM IRQ
|
||||||
|
|
||||||
|
mov.l @r15+,r1
|
||||||
|
mov.l @r15+,r0
|
||||||
|
rte
|
||||||
|
nop
|
||||||
|
|
||||||
|
.align 2
|
||||||
|
spi_mars_adapter:
|
||||||
|
.long 0x20004000
|
||||||
|
|
||||||
|
slav_vres_irq:
|
||||||
|
mov.l svri_mars_adapter,r1
|
||||||
|
mov.w r0,@(0x14,r1) /* clear VRES IRQ */
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
|
||||||
|
mov #0x0F,r0
|
||||||
|
shll2 r0
|
||||||
|
shll2 r0
|
||||||
|
ldc r0,sr /* disallow ints */
|
||||||
|
|
||||||
|
mov.l svri_slave_stk,r15
|
||||||
|
mov.l svri_slave_vres,r0
|
||||||
|
jmp @r0
|
||||||
|
nop
|
||||||
|
|
||||||
|
.align 2
|
||||||
|
svri_mars_adapter:
|
||||||
|
.long 0x20004000
|
||||||
|
svri_slave_stk:
|
||||||
|
.long 0x06040000 /* Cold Start SP */
|
||||||
|
svri_slave_vres:
|
||||||
|
.long slav_reset
|
||||||
|
|
||||||
|
|
||||||
|
! Fast memcpy function - copies longs, runs from sdram for speed
|
||||||
|
! On entry: r4 = dst, r5 = src, r6 = len (in longs)
|
||||||
|
|
||||||
|
.align 4
|
||||||
|
.global _fast_memcpy
|
||||||
|
_fast_memcpy:
|
||||||
|
mov.l @r5+,r3
|
||||||
|
mov.l r3,@r4
|
||||||
|
dt r6
|
||||||
|
bf/s _fast_memcpy
|
||||||
|
add #4,r4
|
||||||
|
rts
|
||||||
|
nop
|
||||||
|
|
||||||
|
! Cache clear line function
|
||||||
|
! On entry: r4 = ptr - should be 16 byte aligned
|
||||||
|
|
||||||
|
.align 4
|
||||||
|
.global _CacheClearLine
|
||||||
|
_CacheClearLine:
|
||||||
|
mov.l _cache_flush,r0
|
||||||
|
or r0,r4
|
||||||
|
mov #0,r0
|
||||||
|
mov.l r0,@r4
|
||||||
|
rts
|
||||||
|
nop
|
||||||
|
|
||||||
|
.align 2
|
||||||
|
|
||||||
|
_cache_flush:
|
||||||
|
.long 0x40000000
|
||||||
|
|
||||||
|
! Cache control function
|
||||||
|
! On entry: r4 = cache mode => 0x10 = CP, 0x08 = TW, 0x01 = CE
|
||||||
|
|
||||||
|
.align 4
|
||||||
|
.global _CacheControl
|
||||||
|
_CacheControl:
|
||||||
|
mov.l _sh2_cctl,r0
|
||||||
|
mov.b r4,@r0
|
||||||
|
rts
|
||||||
|
nop
|
||||||
|
|
||||||
|
.align 2
|
||||||
|
|
||||||
|
_sh2_cctl:
|
||||||
|
.long 0xFFFFFE92
|
||||||
|
|
||||||
|
.align 2
|
||||||
|
|
||||||
|
.text
|
||||||
|
|
||||||
|
main_reset:
|
||||||
|
! do any master SH2 specific reset code here
|
||||||
|
|
||||||
|
mov.l slav_st,r0
|
||||||
|
mov.l slav_ok,r1
|
||||||
|
0:
|
||||||
|
mov.l @r0,r2
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
cmp/eq r1,r2
|
||||||
|
bf 0b /* wait for slave */
|
||||||
|
|
||||||
|
! recopy rom data to sdram
|
||||||
|
|
||||||
|
mov.l rom_header,r1
|
||||||
|
mov.l @r1,r2 /* src relative to start of rom */
|
||||||
|
mov.l @(4,r1),r3 /* dst relative to start of sdram */
|
||||||
|
mov.l @(8,r1),r4 /* size (longword aligned) */
|
||||||
|
mov.l rom_start,r1
|
||||||
|
add r1,r2
|
||||||
|
mov.l sdram_start,r1
|
||||||
|
add r1,r3
|
||||||
|
shlr2 r4 /* number of longs */
|
||||||
|
add #-1,r4
|
||||||
|
1:
|
||||||
|
mov.l @r2+,r0
|
||||||
|
mov.l r0,@r3
|
||||||
|
add #4,r3
|
||||||
|
dt r4
|
||||||
|
bf 1b
|
||||||
|
|
||||||
|
mov.l main_st,r0
|
||||||
|
mov.l main_ok,r1
|
||||||
|
mov.l r1,@r0 /* tell everyone reset complete */
|
||||||
|
|
||||||
|
mov.l main_go,r0
|
||||||
|
jmp @r0
|
||||||
|
nop
|
||||||
|
|
||||||
|
slav_reset:
|
||||||
|
! do any slave SH2 specific reset code here
|
||||||
|
|
||||||
|
mov.l slav_st,r0
|
||||||
|
mov.l slav_ok,r1
|
||||||
|
mov.l r1,@r0 /* tell master to start reset */
|
||||||
|
|
||||||
|
mov.l main_st,r0
|
||||||
|
mov.l main_ok,r1
|
||||||
|
0:
|
||||||
|
mov.l @r0,r2
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
cmp/eq r1,r2
|
||||||
|
bf 0b /* wait for master to do the work */
|
||||||
|
|
||||||
|
mov.l slav_go,r0
|
||||||
|
jmp @r0
|
||||||
|
nop
|
||||||
|
|
||||||
|
.align 2
|
||||||
|
main_st:
|
||||||
|
.long 0x20004020
|
||||||
|
main_ok:
|
||||||
|
.ascii "M_OK"
|
||||||
|
main_go:
|
||||||
|
.long mstart
|
||||||
|
rom_header:
|
||||||
|
.long 0x220003D4
|
||||||
|
rom_start:
|
||||||
|
.long 0x22000000
|
||||||
|
sdram_start:
|
||||||
|
.long 0x26000000
|
||||||
|
|
||||||
|
slav_st:
|
||||||
|
.long 0x20004024
|
||||||
|
slav_ok:
|
||||||
|
.ascii "S_OK"
|
||||||
|
slav_go:
|
||||||
|
.long sstart
|
||||||
|
|
||||||
|
|
||||||
|
.global _start
|
||||||
|
_start:
|
||||||
|
|
||||||
|
|
@ -0,0 +1,132 @@
|
||||||
|
ifeq ($(strip $(DEVKITPRO)),)
|
||||||
|
$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>devkitPro)
|
||||||
|
endif
|
||||||
|
|
||||||
|
.SUFFIXES:
|
||||||
|
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# Configurable options
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# Name of the final output
|
||||||
|
TARGET = ClassiCube-3ds
|
||||||
|
# List of directories containing source code
|
||||||
|
SOURCE_DIRS = src src/3ds third_party/bearssl
|
||||||
|
# List of directories containing shader files
|
||||||
|
SHDR_DIRS = misc/3ds
|
||||||
|
# Directory where object files are placed
|
||||||
|
BUILD_DIR = build/3ds
|
||||||
|
|
||||||
|
APP_ICON = misc/3ds/icon.png
|
||||||
|
APP_TITLE = ClassiCube
|
||||||
|
APP_DESCRIPTION = Simple block building sandbox
|
||||||
|
APP_AUTHOR = ClassiCube team
|
||||||
|
|
||||||
|
CIA_BANNER_BIN = misc/3ds/banner.bin
|
||||||
|
CIA_ICON_BIN = misc/3ds/icon.bin
|
||||||
|
CIA_SPEC_RSF = misc/3ds/spec.rsf
|
||||||
|
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# Compilable files
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
S_FILES = $(foreach dir,$(SOURCE_DIRS),$(wildcard $(dir)/*.S))
|
||||||
|
C_FILES = $(foreach dir,$(SOURCE_DIRS),$(wildcard $(dir)/*.c))
|
||||||
|
OBJS = $(addprefix $(BUILD_DIR)/, $(notdir $(C_FILES:%.c=%.o) $(S_FILES:%.S=%.o)))
|
||||||
|
|
||||||
|
PICAFILES := $(foreach dir,$(SHDR_DIRS),$(notdir $(wildcard $(dir)/*.v.pica)))
|
||||||
|
OBJS += $(addprefix $(BUILD_DIR)/, $(PICAFILES:.v.pica=.shbin.o))
|
||||||
|
|
||||||
|
# Dependency tracking
|
||||||
|
DEPFLAGS = -MT $@ -MMD -MP -MF $(BUILD_DIR)/$*.d
|
||||||
|
DEPFILES := $(OBJS:%.o=%.d)
|
||||||
|
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# Code generation
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
ARCH = -march=armv6k -mtune=mpcore -mfloat-abi=hard -mtp=soft
|
||||||
|
CFLAGS = -g -Wall -O2 -mword-relocations -ffunction-sections $(ARCH) $(INCLUDE) -D__3DS__ -DPLAT_3DS
|
||||||
|
ASFLAGS = -g $(ARCH)
|
||||||
|
|
||||||
|
LDFLAGS = -specs=3dsx.specs -g $(ARCH)
|
||||||
|
LIBS = -lctru -lm
|
||||||
|
INCLUDES=
|
||||||
|
|
||||||
|
CTRULIB = $(DEVKITPRO)/libctru
|
||||||
|
INCLUDES += $(foreach dir, $(CTRULIB), -I$(dir)/include)
|
||||||
|
LDFLAGS += $(foreach dir,$(CTRULIB), -L$(dir)/lib)
|
||||||
|
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# Compiler tools
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
PREFIX := $(DEVKITPRO)/devkitARM/bin/arm-none-eabi-
|
||||||
|
ARM_AS := $(PREFIX)as
|
||||||
|
ARM_CC := $(PREFIX)gcc
|
||||||
|
ARM_CXX := $(PREFIX)g++
|
||||||
|
|
||||||
|
_DSXTOOL := $(DEVKITPRO)/tools/bin/3dsxtool
|
||||||
|
SMDHTOOL := $(DEVKITPRO)/tools/bin/smdhtool
|
||||||
|
PICASSO := $(DEVKITPRO)/tools/bin/picasso
|
||||||
|
BIN2S := $(DEVKITPRO)/tools/bin/bin2s
|
||||||
|
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# Main targets
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
default: $(BUILD_DIR) $(TARGET).cia
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm $(TARGET).cia $(TARGET).3dsx $(TARGET).elf $(OBJS)
|
||||||
|
|
||||||
|
$(BUILD_DIR):
|
||||||
|
mkdir -p $(BUILD_DIR)
|
||||||
|
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# Executable generation
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
$(TARGET).elf: $(OBJS)
|
||||||
|
$(ARM_CC) $(LDFLAGS) $^ -o $@ $(LIBS)
|
||||||
|
|
||||||
|
$(BUILD_DIR).smdh: $(APP_ICON)
|
||||||
|
$(SMDHTOOL) --create "$(APP_TITLE)" "$(APP_DESCRIPTION)" "$(APP_AUTHOR)" $(APP_ICON) $@
|
||||||
|
|
||||||
|
$(TARGET).3dsx: $(TARGET).elf $(BUILD_DIR).smdh
|
||||||
|
$(_DSXTOOL) $< $@ --smdh=$(BUILD_DIR).smdh
|
||||||
|
|
||||||
|
$(BUILD_DIR)/makerom:
|
||||||
|
wget https://github.com/3DSGuy/Project_CTR/releases/download/makerom-v0.18.3/makerom-v0.18.3-ubuntu_x86_64.zip -O $(BUILD_DIR)/makerom.zip
|
||||||
|
unzip $(BUILD_DIR)/makerom.zip -d $(BUILD_DIR)
|
||||||
|
chmod +x $(BUILD_DIR)/makerom
|
||||||
|
|
||||||
|
$(TARGET).cia : $(TARGET).3dsx $(BUILD_DIR)/makerom
|
||||||
|
$(BUILD_DIR)/makerom -f cia -o $(TARGET).cia -elf $(TARGET).elf -rsf $(CIA_SPEC_RSF) -icon $(CIA_ICON_BIN) -banner $(CIA_BANNER_BIN) -exefslogo -target t
|
||||||
|
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# Object generation
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
$(BUILD_DIR)/%.o: src/%.c
|
||||||
|
$(ARM_CC) $(CFLAGS) $(INCLUDES) $(DEPFLAGS) -c $< -o $@
|
||||||
|
|
||||||
|
$(BUILD_DIR)/%.o: src/3ds/%.c
|
||||||
|
$(ARM_CC) $(CFLAGS) $(INCLUDES) $(DEPFLAGS) -c $< -o $@
|
||||||
|
|
||||||
|
$(BUILD_DIR)/%.o: third_party/bearssl/%.c
|
||||||
|
$(ARM_CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
|
||||||
|
|
||||||
|
$(BUILD_DIR)/%.shbin: misc/3ds/%.v.pica
|
||||||
|
$(PICASSO) $< -o $@
|
||||||
|
|
||||||
|
$(BUILD_DIR)/%.shbin.o: $(BUILD_DIR)/%.shbin
|
||||||
|
$(BIN2S) $< | $(ARM_CC) -x assembler-with-cpp -c - -o $@
|
||||||
|
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# Dependency tracking
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
$(DEPFILES):
|
||||||
|
|
||||||
|
include $(wildcard $(DEPFILES))
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
To see debug log messages in Citra:
|
||||||
|
|
||||||
|
1) Make sure log level set to "Debug.Emulated:Debug"
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Commands used to generate the .bin files:
|
||||||
|
|
||||||
|
`bannertool makebanner -i banner.png -a audio.wav -o banner.bin`
|
||||||
|
|
||||||
|
`bannertool makesmdh -s ClassiCube -l ClassiCube -p UnknownShadow200 -i icon.png -o icon.bin`
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Debug log messages output to debug service, so may be possible to see from console via remote gdb
|
||||||
|
After Width: | Height: | Size: 10 KiB |
|
|
@ -0,0 +1,34 @@
|
||||||
|
; Vertex shader for rendering coloured vertices for PICA200 GPU on the Nintendo 3DS
|
||||||
|
; ==================================================================================
|
||||||
|
|
||||||
|
; Uniforms (layout common to all shaders)
|
||||||
|
.alias MVP_0 c0
|
||||||
|
.alias MVP_1 c1
|
||||||
|
.alias MVP_2 c2
|
||||||
|
.alias MVP_3 c3
|
||||||
|
.alias TEX_OFFSET c4
|
||||||
|
|
||||||
|
; Constants (initialised in Graphics_3DS.c)
|
||||||
|
.alias ONE_DIV_255 c5
|
||||||
|
|
||||||
|
; Outputs
|
||||||
|
.out out_pos position
|
||||||
|
.out out_col color
|
||||||
|
|
||||||
|
; Inputs (defined as aliases for convenience)
|
||||||
|
.alias in_pos v0
|
||||||
|
.alias in_col v1
|
||||||
|
|
||||||
|
.proc main
|
||||||
|
; out_pos = MVP * in_pos
|
||||||
|
dp4 out_pos.x, MVP_0, in_pos
|
||||||
|
dp4 out_pos.y, MVP_1, in_pos
|
||||||
|
dp4 out_pos.z, MVP_2, in_pos
|
||||||
|
dp4 out_pos.w, MVP_3, in_pos
|
||||||
|
|
||||||
|
; out_col = in_col * ONE_DIV_255
|
||||||
|
mul out_col, ONE_DIV_255, in_col
|
||||||
|
|
||||||
|
end
|
||||||
|
.end
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 1.4 KiB |
|
|
@ -0,0 +1,38 @@
|
||||||
|
; Vertex shader for rendering textured vertices with an offset for PICA200 GPU on the Nintendo 3DS
|
||||||
|
; ==================================================================================
|
||||||
|
|
||||||
|
; Uniforms (layout common to all shaders)
|
||||||
|
.alias MVP_0 c0
|
||||||
|
.alias MVP_1 c1
|
||||||
|
.alias MVP_2 c2
|
||||||
|
.alias MVP_3 c3
|
||||||
|
.alias TEX_OFFSET c4
|
||||||
|
|
||||||
|
; Constants (initialised in Graphics_3DS.c)
|
||||||
|
.alias ONE_DIV_255 c5
|
||||||
|
|
||||||
|
; Outputs
|
||||||
|
.out out_pos position
|
||||||
|
.out out_col color
|
||||||
|
.out out_tex texcoord0
|
||||||
|
|
||||||
|
; Inputs (defined as aliases for convenience)
|
||||||
|
.alias in_pos v0
|
||||||
|
.alias in_col v1
|
||||||
|
.alias in_tex v2
|
||||||
|
|
||||||
|
.proc main
|
||||||
|
; out_pos = MVP * in_pos
|
||||||
|
dp4 out_pos.x, MVP_0, in_pos
|
||||||
|
dp4 out_pos.y, MVP_1, in_pos
|
||||||
|
dp4 out_pos.z, MVP_2, in_pos
|
||||||
|
dp4 out_pos.w, MVP_3, in_pos
|
||||||
|
|
||||||
|
; out_col = in_col * ONE_DIV_255
|
||||||
|
mul out_col, ONE_DIV_255, in_col
|
||||||
|
; out_tex = in_tex + tex_offset
|
||||||
|
add out_tex, TEX_OFFSET, in_tex
|
||||||
|
|
||||||
|
end
|
||||||
|
.end
|
||||||
|
|
||||||
|
|
@ -0,0 +1,204 @@
|
||||||
|
# https://github.com/msikma/3ds-tpl
|
||||||
|
# https://gist.github.com/jakcron/9f9f02ffd94d98a72632
|
||||||
|
|
||||||
|
BasicInfo:
|
||||||
|
Title : ClassiCube
|
||||||
|
CompanyCode : "00"
|
||||||
|
ProductCode : CCBE
|
||||||
|
ContentType : Application
|
||||||
|
Logo : Nintendo
|
||||||
|
|
||||||
|
TitleInfo:
|
||||||
|
UniqueId : 0x00CCBE
|
||||||
|
Category : Application
|
||||||
|
|
||||||
|
CardInfo:
|
||||||
|
MediaSize : 128MB # 128MB / 256MB / 512MB / 1GB / 2GB / 4GB
|
||||||
|
MediaType : Card1 # Card1 / Card2
|
||||||
|
CardDevice : NorFlash # NorFlash(Pick this if you use savedata) / None
|
||||||
|
|
||||||
|
|
||||||
|
Option:
|
||||||
|
UseOnSD : true # true if App is to be installed to SD
|
||||||
|
FreeProductCode : true # Removes limitations on ProductCode
|
||||||
|
MediaFootPadding : false # If true CCI files are created with padding
|
||||||
|
EnableCrypt : false # Enables encryption for NCCH and CIA
|
||||||
|
EnableCompress : true # Compresses exefs code
|
||||||
|
|
||||||
|
AccessControlInfo:
|
||||||
|
#UseExtSaveData : true
|
||||||
|
#ExtSaveDataId: 0xff3ff
|
||||||
|
#UseExtendedSaveDataAccessControl: true
|
||||||
|
#AccessibleSaveDataIds: [0x101, 0x202, 0x303, 0x404, 0x505, 0x606]
|
||||||
|
|
||||||
|
SystemControlInfo:
|
||||||
|
SaveDataSize: 128KB
|
||||||
|
RemasterVersion: 0
|
||||||
|
StackSize: 0x40000
|
||||||
|
|
||||||
|
AccessControlInfo:
|
||||||
|
FileSystemAccess:
|
||||||
|
- Debug
|
||||||
|
- DirectSdmc
|
||||||
|
- DirectSdmcWrite
|
||||||
|
|
||||||
|
IdealProcessor : 0
|
||||||
|
AffinityMask : 1
|
||||||
|
|
||||||
|
Priority : 16
|
||||||
|
SystemMode : 80MB
|
||||||
|
MaxCpu : 0x9E # Default
|
||||||
|
DisableDebug : false
|
||||||
|
EnableForceDebug : false
|
||||||
|
CanWriteSharedPage : false
|
||||||
|
CanUsePrivilegedPriority : false
|
||||||
|
CanUseNonAlphabetAndNumber : false
|
||||||
|
PermitMainFunctionArgument : false
|
||||||
|
CanShareDeviceMemory : false
|
||||||
|
RunnableOnSleep : false
|
||||||
|
SpecialMemoryArrange : false
|
||||||
|
CoreVersion : 2
|
||||||
|
DescVersion : 2
|
||||||
|
|
||||||
|
ReleaseKernelMajor : "02"
|
||||||
|
ReleaseKernelMinor : "33"
|
||||||
|
MemoryType : Application
|
||||||
|
HandleTableSize: 512
|
||||||
|
|
||||||
|
# New3DS Exclusive Process Settings
|
||||||
|
SystemModeExt : 124MB # Legacy(Default)/124MB/178MB Legacy:Use Old3DS SystemMode
|
||||||
|
CpuSpeed : 804MHz # 268MHz(Default)/804MHz
|
||||||
|
EnableL2Cache : true # false(default)/true
|
||||||
|
CanAccessCore2 : true
|
||||||
|
|
||||||
|
# Virtual Address Mappings
|
||||||
|
IORegisterMapping:
|
||||||
|
- 1ff50000-1ff57fff # DSP memory
|
||||||
|
- 1ff70000-1ff77fff
|
||||||
|
MemoryMapping:
|
||||||
|
- 1f000000-1f5fffff # VRAM
|
||||||
|
|
||||||
|
SystemCallAccess:
|
||||||
|
ArbitrateAddress: 34
|
||||||
|
Break: 60
|
||||||
|
CancelTimer: 28
|
||||||
|
ClearEvent: 25
|
||||||
|
ClearTimer: 29
|
||||||
|
CloseHandle: 35
|
||||||
|
ConnectToPort: 45
|
||||||
|
ControlMemory: 1
|
||||||
|
CreateAddressArbiter: 33
|
||||||
|
CreateEvent: 23
|
||||||
|
CreateMemoryBlock: 30
|
||||||
|
CreateMutex: 19
|
||||||
|
CreateSemaphore: 21
|
||||||
|
CreateThread: 8
|
||||||
|
CreateTimer: 26
|
||||||
|
DuplicateHandle: 39
|
||||||
|
ExitProcess: 3
|
||||||
|
ExitThread: 9
|
||||||
|
GetCurrentProcessorNumber: 17
|
||||||
|
GetHandleInfo: 41
|
||||||
|
GetProcessId: 53
|
||||||
|
GetProcessIdOfThread: 54
|
||||||
|
GetProcessIdealProcessor: 6
|
||||||
|
GetProcessInfo: 43
|
||||||
|
GetResourceLimit: 56
|
||||||
|
GetResourceLimitCurrentValues: 58
|
||||||
|
GetResourceLimitLimitValues: 57
|
||||||
|
GetSystemInfo: 42
|
||||||
|
GetSystemTick: 40
|
||||||
|
GetThreadContext: 59
|
||||||
|
GetThreadId: 55
|
||||||
|
GetThreadIdealProcessor: 15
|
||||||
|
GetThreadInfo: 44
|
||||||
|
GetThreadPriority: 11
|
||||||
|
MapMemoryBlock: 31
|
||||||
|
OutputDebugString: 61
|
||||||
|
QueryMemory: 2
|
||||||
|
ReleaseMutex: 20
|
||||||
|
ReleaseSemaphore: 22
|
||||||
|
SendSyncRequest1: 46
|
||||||
|
SendSyncRequest2: 47
|
||||||
|
SendSyncRequest3: 48
|
||||||
|
SendSyncRequest4: 49
|
||||||
|
SendSyncRequest: 50
|
||||||
|
SetThreadPriority: 12
|
||||||
|
SetTimer: 27
|
||||||
|
SignalEvent: 24
|
||||||
|
SleepThread: 10
|
||||||
|
UnmapMemoryBlock: 32
|
||||||
|
WaitSynchronization1: 36
|
||||||
|
WaitSynchronizationN: 37
|
||||||
|
InterruptNumbers:
|
||||||
|
|
||||||
|
# Service List
|
||||||
|
# Maximum 34 services (32 if firmware is prior to 9.3.0)
|
||||||
|
ServiceAccessControl:
|
||||||
|
- APT:U
|
||||||
|
- $hioFIO
|
||||||
|
- $hostio0
|
||||||
|
- $hostio1
|
||||||
|
- ac:u
|
||||||
|
- boss:U
|
||||||
|
- cam:u
|
||||||
|
- cecd:u
|
||||||
|
- cfg:u
|
||||||
|
- dlp:FKCL
|
||||||
|
- dlp:SRVR
|
||||||
|
- dsp::DSP
|
||||||
|
- frd:u
|
||||||
|
- fs:USER
|
||||||
|
- gsp::Gpu
|
||||||
|
- hid:USER
|
||||||
|
- mic:u
|
||||||
|
- ndm:u
|
||||||
|
- news:s
|
||||||
|
- nwm::UDS
|
||||||
|
- ptm:u
|
||||||
|
- pxi:dev
|
||||||
|
- soc:U
|
||||||
|
- gsp::Lcd
|
||||||
|
- y2r:u
|
||||||
|
- ldr:ro
|
||||||
|
- ir:USER
|
||||||
|
- ir:u
|
||||||
|
- csnd:SND
|
||||||
|
- am:u
|
||||||
|
- ns:s
|
||||||
|
|
||||||
|
SystemControlInfo:
|
||||||
|
# Modules that run services listed above should be included below
|
||||||
|
# Maximum 48 dependencies
|
||||||
|
# If a module is listed that isn't present on the 3DS, the title will get stuck at the logo (3ds waves)
|
||||||
|
# So act, nfc and qtm are commented for 4.x support. Uncomment if you need these.
|
||||||
|
# <module name>:<module titleid>
|
||||||
|
Dependency:
|
||||||
|
ac: 0x0004013000002402L
|
||||||
|
am: 0x0004013000001502L
|
||||||
|
boss: 0x0004013000003402L
|
||||||
|
camera: 0x0004013000001602L
|
||||||
|
cecd: 0x0004013000002602L
|
||||||
|
cfg: 0x0004013000001702L
|
||||||
|
codec: 0x0004013000001802L
|
||||||
|
csnd: 0x0004013000002702L
|
||||||
|
dlp: 0x0004013000002802L
|
||||||
|
dsp: 0x0004013000001a02L
|
||||||
|
friends: 0x0004013000003202L
|
||||||
|
gpio: 0x0004013000001b02L
|
||||||
|
gsp: 0x0004013000001c02L
|
||||||
|
hid: 0x0004013000001d02L
|
||||||
|
i2c: 0x0004013000001e02L
|
||||||
|
ir: 0x0004013000003302L
|
||||||
|
mcu: 0x0004013000001f02L
|
||||||
|
mic: 0x0004013000002002L
|
||||||
|
ndm: 0x0004013000002b02L
|
||||||
|
news: 0x0004013000003502L
|
||||||
|
nim: 0x0004013000002c02L
|
||||||
|
nwm: 0x0004013000002d02L
|
||||||
|
pdn: 0x0004013000002102L
|
||||||
|
ps: 0x0004013000003102L
|
||||||
|
ptm: 0x0004013000002202L
|
||||||
|
ro: 0x0004013000003702L
|
||||||
|
socket: 0x0004013000002e02L
|
||||||
|
spi: 0x0004013000002302L
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
; Vertex shader for rendering textured vertices for PICA200 GPU on the Nintendo 3DS
|
||||||
|
; ==================================================================================
|
||||||
|
|
||||||
|
; Uniforms (layout common to all shaders)
|
||||||
|
.alias MVP_0 c0
|
||||||
|
.alias MVP_1 c1
|
||||||
|
.alias MVP_2 c2
|
||||||
|
.alias MVP_3 c3
|
||||||
|
.alias TEX_OFFSET c4
|
||||||
|
|
||||||
|
; Constants (initialised in Graphics_3DS.c)
|
||||||
|
.alias ONE_DIV_255 c5
|
||||||
|
|
||||||
|
; Outputs
|
||||||
|
.out out_pos position
|
||||||
|
.out out_col color
|
||||||
|
.out out_tex texcoord0
|
||||||
|
|
||||||
|
; Inputs (defined as aliases for convenience)
|
||||||
|
.alias in_pos v0
|
||||||
|
.alias in_col v1
|
||||||
|
.alias in_tex v2
|
||||||
|
|
||||||
|
.proc main
|
||||||
|
; out_pos = MVP * in_pos
|
||||||
|
dp4 out_pos.x, MVP_0, in_pos
|
||||||
|
dp4 out_pos.y, MVP_1, in_pos
|
||||||
|
dp4 out_pos.z, MVP_2, in_pos
|
||||||
|
dp4 out_pos.w, MVP_3, in_pos
|
||||||
|
|
||||||
|
; out_col = in_col * ONE_DIV_255
|
||||||
|
mul out_col, ONE_DIV_255, in_col
|
||||||
|
; out_tex = in_tex
|
||||||
|
mov out_tex, in_tex
|
||||||
|
|
||||||
|
end
|
||||||
|
.end
|
||||||
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
1 ICON "CCicon.ico"
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
* Blocks over 256 are not saved or loaded at all.
|
|
||||||
* Custom block information for blocks over 256 is not saved or loaded at all.
|
|
||||||
* /hold 0 prevents you deleting blocks until you change to another.
|
|
||||||
* Sometimes when holding air and your own model is a block model, you crash.
|
|
||||||
* Labels and buttons overlap in launcher with some fonts. (e.g. Lucida Console)
|
|
||||||
* terrain.png with width under 16 insta-crash the game
|
|
||||||
* catbox.moe texture packs/terrain.png links insta-crash the game
|
|
||||||
* Sometimes you randomly crash reading leveldatachunk packet on OSX
|
|
||||||
* Models with size of over 2 are not supported at all
|
|
||||||
* Direct3D9 backend uses an ill-formed vertex format that works by accident
|
|
||||||
* Alt text doesn't update its Y position if you click on chat
|
|
||||||
* Menu inputs (save, edit hotkey, water level, etc) are reset on window resize
|
|
||||||
* Chat input caret is reset on window resize
|
|
||||||
* Position in chat (if you scrolled up into history) is reset on window resize
|
|
||||||
* Two blank lines get shown in chat when you type /client cuboid
|
|
||||||
* Alt text is closed on window resize
|
|
||||||
* Changing server texture packs sometimes still retains textures from previous one
|
|
||||||
* Crashes at startup when another process has exclusively acquired Direct3D9 device
|
|
||||||
* Can't bind controls to mouse buttons
|
|
||||||
* Does not work at all on 64 bit macOS
|
|
||||||
* Making a gas block undeletable doesn't prevent placing blocks over it
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
Here lies ClassicalSharp, the original C# client. (works with Mono and .NET framework 2.0)
|
|
||||||
It has unfixed bugs and missing features. There's no reason to use it anymore.
|
|
||||||
|
|
||||||
For licensing, please see license.txt inside ClassicalSharp.zip.
|
|
||||||
Absolutely no support or assistance will be provided for ClassicalSharp.
|
|
||||||
|
|
@ -0,0 +1,51 @@
|
||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio Version 16
|
||||||
|
VisualStudioVersion = 16.0.32002.261
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ClassiCube-UWP", "ClassiCube-UWP.vcxproj", "{A901236D-C8EF-4041-966F-46F17511E342}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|ARM = Debug|ARM
|
||||||
|
Debug|ARM64 = Debug|ARM64
|
||||||
|
Debug|x64 = Debug|x64
|
||||||
|
Debug|x86 = Debug|x86
|
||||||
|
Release|ARM = Release|ARM
|
||||||
|
Release|ARM64 = Release|ARM64
|
||||||
|
Release|x64 = Release|x64
|
||||||
|
Release|x86 = Release|x86
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{A901236D-C8EF-4041-966F-46F17511E342}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||||
|
{A901236D-C8EF-4041-966F-46F17511E342}.Debug|ARM.Build.0 = Debug|ARM
|
||||||
|
{A901236D-C8EF-4041-966F-46F17511E342}.Debug|ARM.Deploy.0 = Debug|ARM
|
||||||
|
{A901236D-C8EF-4041-966F-46F17511E342}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
||||||
|
{A901236D-C8EF-4041-966F-46F17511E342}.Debug|ARM64.Build.0 = Debug|ARM64
|
||||||
|
{A901236D-C8EF-4041-966F-46F17511E342}.Debug|ARM64.Deploy.0 = Debug|ARM64
|
||||||
|
{A901236D-C8EF-4041-966F-46F17511E342}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{A901236D-C8EF-4041-966F-46F17511E342}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{A901236D-C8EF-4041-966F-46F17511E342}.Debug|x64.Deploy.0 = Debug|x64
|
||||||
|
{A901236D-C8EF-4041-966F-46F17511E342}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
|
{A901236D-C8EF-4041-966F-46F17511E342}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{A901236D-C8EF-4041-966F-46F17511E342}.Debug|x86.Deploy.0 = Debug|Win32
|
||||||
|
{A901236D-C8EF-4041-966F-46F17511E342}.Release|ARM.ActiveCfg = Release|ARM
|
||||||
|
{A901236D-C8EF-4041-966F-46F17511E342}.Release|ARM.Build.0 = Release|ARM
|
||||||
|
{A901236D-C8EF-4041-966F-46F17511E342}.Release|ARM.Deploy.0 = Release|ARM
|
||||||
|
{A901236D-C8EF-4041-966F-46F17511E342}.Release|ARM64.ActiveCfg = Release|ARM64
|
||||||
|
{A901236D-C8EF-4041-966F-46F17511E342}.Release|ARM64.Build.0 = Release|ARM64
|
||||||
|
{A901236D-C8EF-4041-966F-46F17511E342}.Release|ARM64.Deploy.0 = Release|ARM64
|
||||||
|
{A901236D-C8EF-4041-966F-46F17511E342}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{A901236D-C8EF-4041-966F-46F17511E342}.Release|x64.Build.0 = Release|x64
|
||||||
|
{A901236D-C8EF-4041-966F-46F17511E342}.Release|x64.Deploy.0 = Release|x64
|
||||||
|
{A901236D-C8EF-4041-966F-46F17511E342}.Release|x86.ActiveCfg = Release|Win32
|
||||||
|
{A901236D-C8EF-4041-966F-46F17511E342}.Release|x86.Build.0 = Release|Win32
|
||||||
|
{A901236D-C8EF-4041-966F-46F17511E342}.Release|x86.Deploy.0 = Release|Win32
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
|
SolutionGuid = {AB4A9C28-F91F-439E-8D2E-E54273138ADC}
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
||||||
|
|
@ -0,0 +1,432 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{a901236d-c8ef-4041-966f-46f17511e342}</ProjectGuid>
|
||||||
|
<RootNamespace>ClassiCube_UWP</RootNamespace>
|
||||||
|
<DefaultLanguage>en-US</DefaultLanguage>
|
||||||
|
<MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>
|
||||||
|
<AppContainerApplication>true</AppContainerApplication>
|
||||||
|
<ApplicationType>Windows Store</ApplicationType>
|
||||||
|
<WindowsTargetPlatformVersion Condition=" '$(WindowsTargetPlatformVersion)' == '' ">10.0.20348.0</WindowsTargetPlatformVersion>
|
||||||
|
<WindowsTargetPlatformMinVersion>10.0.10240.0</WindowsTargetPlatformMinVersion>
|
||||||
|
<ApplicationTypeRevision>10.0</ApplicationTypeRevision>
|
||||||
|
<AppxPackageSigningEnabled>false</AppxPackageSigningEnabled>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|ARM">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>ARM</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|ARM64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>ARM64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|ARM">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>ARM</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|ARM64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>ARM64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
|
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
|
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
|
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
|
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
|
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
|
||||||
|
<DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
|
||||||
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
|
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||||
|
<CompileAs>Default</CompileAs>
|
||||||
|
<CompileAsWinRT>false</CompileAsWinRT>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
|
||||||
|
<DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
|
||||||
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
|
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||||
|
<CompileAs>Default</CompileAs>
|
||||||
|
<CompileAsWinRT>false</CompileAsWinRT>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
|
||||||
|
<DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
|
||||||
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
|
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||||
|
<CompileAs>Default</CompileAs>
|
||||||
|
<CompileAsWinRT>false</CompileAsWinRT>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
|
||||||
|
<DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
|
||||||
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
|
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||||
|
<CompileAs>Default</CompileAs>
|
||||||
|
<CompileAsWinRT>false</CompileAsWinRT>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
|
||||||
|
<DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
|
||||||
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
|
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||||
|
<CompileAs>Default</CompileAs>
|
||||||
|
<CompileAsWinRT>false</CompileAsWinRT>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
|
||||||
|
<DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
|
||||||
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
|
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||||
|
<CompileAs>Default</CompileAs>
|
||||||
|
<CompileAsWinRT>false</CompileAsWinRT>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
|
||||||
|
<DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
|
||||||
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
|
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||||
|
<CompileAs>Default</CompileAs>
|
||||||
|
<CompileAsWinRT>false</CompileAsWinRT>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
|
||||||
|
<DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
|
||||||
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
|
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||||
|
<CompileAs>Default</CompileAs>
|
||||||
|
<CompileAsWinRT>false</CompileAsWinRT>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<AppxManifest Include="Package.appxmanifest">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</AppxManifest>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\..\src\Animations.c" />
|
||||||
|
<ClCompile Include="..\..\src\Audio.c" />
|
||||||
|
<ClCompile Include="..\..\src\Audio_OpenAL.c" />
|
||||||
|
<ClCompile Include="..\..\src\AxisLinesRenderer.c" />
|
||||||
|
<ClCompile Include="..\..\src\Bitmap.c" />
|
||||||
|
<ClCompile Include="..\..\src\Block.c" />
|
||||||
|
<ClCompile Include="..\..\src\BlockPhysics.c" />
|
||||||
|
<ClCompile Include="..\..\src\Builder.c" />
|
||||||
|
<ClCompile Include="..\..\src\Camera.c" />
|
||||||
|
<ClCompile Include="..\..\src\Certs.c" />
|
||||||
|
<ClCompile Include="..\..\src\Chat.c" />
|
||||||
|
<ClCompile Include="..\..\src\Commands.c" />
|
||||||
|
<ClCompile Include="..\..\src\Deflate.c" />
|
||||||
|
<ClCompile Include="..\..\src\Drawer.c" />
|
||||||
|
<ClCompile Include="..\..\src\Drawer2D.c" />
|
||||||
|
<ClCompile Include="..\..\src\Entity.c" />
|
||||||
|
<ClCompile Include="..\..\src\EntityComponents.c" />
|
||||||
|
<ClCompile Include="..\..\src\EntityRenderers.c" />
|
||||||
|
<ClCompile Include="..\..\src\EnvRenderer.c" />
|
||||||
|
<ClCompile Include="..\..\src\Event.c" />
|
||||||
|
<ClCompile Include="..\..\src\ExtMath.c" />
|
||||||
|
<ClCompile Include="..\..\src\FancyLighting.c" />
|
||||||
|
<ClCompile Include="..\..\src\Formats.c" />
|
||||||
|
<ClCompile Include="..\..\src\Game.c" />
|
||||||
|
<ClCompile Include="..\..\src\GameVersion.c" />
|
||||||
|
<ClCompile Include="..\..\src\Generator.c" />
|
||||||
|
<ClCompile Include="..\..\src\Graphics_D3D11.c" />
|
||||||
|
<ClCompile Include="..\..\src\Gui.c" />
|
||||||
|
<ClCompile Include="..\..\src\HeldBlockRenderer.c" />
|
||||||
|
<ClCompile Include="..\..\src\Http_Worker.c" />
|
||||||
|
<ClCompile Include="..\..\src\Input.c" />
|
||||||
|
<ClCompile Include="..\..\src\InputHandler.c" />
|
||||||
|
<ClCompile Include="..\..\src\Inventory.c" />
|
||||||
|
<ClCompile Include="..\..\src\IsometricDrawer.c" />
|
||||||
|
<ClCompile Include="..\..\src\Launcher.c" />
|
||||||
|
<ClCompile Include="..\..\src\LBackend.c" />
|
||||||
|
<ClCompile Include="..\..\src\LBackend_Android.c" />
|
||||||
|
<ClCompile Include="..\..\src\Lighting.c" />
|
||||||
|
<ClCompile Include="..\..\src\Logger.c" />
|
||||||
|
<ClCompile Include="..\..\src\LScreens.c" />
|
||||||
|
<ClCompile Include="..\..\src\LWeb.c" />
|
||||||
|
<ClCompile Include="..\..\src\LWidgets.c" />
|
||||||
|
<ClCompile Include="..\..\src\MapRenderer.c" />
|
||||||
|
<ClCompile Include="..\..\src\MenuOptions.c" />
|
||||||
|
<ClCompile Include="..\..\src\Menus.c" />
|
||||||
|
<ClCompile Include="..\..\src\Model.c" />
|
||||||
|
<ClCompile Include="..\..\src\Options.c" />
|
||||||
|
<ClCompile Include="..\..\src\PackedCol.c" />
|
||||||
|
<ClCompile Include="..\..\src\Particle.c" />
|
||||||
|
<ClCompile Include="..\..\src\Physics.c" />
|
||||||
|
<ClCompile Include="..\..\src\Picking.c" />
|
||||||
|
<ClCompile Include="..\..\src\Protocol.c" />
|
||||||
|
<ClCompile Include="..\..\src\Queue.c" />
|
||||||
|
<ClCompile Include="..\..\src\Resources.c" />
|
||||||
|
<ClCompile Include="..\..\src\Screens.c" />
|
||||||
|
<ClCompile Include="..\..\src\SelectionBox.c" />
|
||||||
|
<ClCompile Include="..\..\src\SelOutlineRenderer.c" />
|
||||||
|
<ClCompile Include="..\..\src\Server.c" />
|
||||||
|
<ClCompile Include="..\..\src\SSL.c" />
|
||||||
|
<ClCompile Include="..\..\src\Stream.c" />
|
||||||
|
<ClCompile Include="..\..\src\String.c" />
|
||||||
|
<ClCompile Include="..\..\src\SystemFonts.c" />
|
||||||
|
<ClCompile Include="..\..\src\TexturePack.c" />
|
||||||
|
<ClCompile Include="..\..\src\TouchUI.c" />
|
||||||
|
<ClCompile Include="..\..\src\Utils.c" />
|
||||||
|
<ClCompile Include="..\..\src\UWP\Platform_UWP.cpp" />
|
||||||
|
<ClCompile Include="..\..\src\UWP\Window_UWP.cpp" />
|
||||||
|
<ClCompile Include="..\..\src\Vectors.c" />
|
||||||
|
<ClCompile Include="..\..\src\Vorbis.c" />
|
||||||
|
<ClCompile Include="..\..\src\Widgets.c" />
|
||||||
|
<ClCompile Include="..\..\src\World.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\aesctr_drbg.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\aes_big_cbcdec.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\aes_big_cbcenc.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\aes_big_ctr.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\aes_big_ctrcbc.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\aes_big_dec.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\aes_big_enc.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\aes_common.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\aes_x86ni.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\aes_x86ni_cbcdec.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\aes_x86ni_cbcenc.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\aes_x86ni_ctr.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\aes_x86ni_ctrcbc.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\asn1enc.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ccm.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ccopy.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\chacha20_ct.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\chacha20_sse2.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\dec32be.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\dec32le.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\dec64be.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\dec64le.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\dig_oid.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\dig_size.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ecdsa_atr.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ecdsa_default_vrfy_asn1.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ecdsa_default_vrfy_raw.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ecdsa_i31_bits.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ecdsa_i31_vrfy_asn1.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ecdsa_i31_vrfy_raw.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ec_all_m31.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ec_c25519_i31.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ec_c25519_m31.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ec_c25519_m62.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ec_c25519_m64.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ec_curve25519.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ec_default.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ec_p256_m31.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ec_p256_m62.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ec_p256_m64.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ec_prime_i31.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ec_secp256r1.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ec_secp384r1.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ec_secp521r1.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\enc32be.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\enc32le.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\enc64be.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\enc64le.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\gcm.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ghash_ctmul.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ghash_ctmul64.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ghash_pclmul.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\hmac.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\hmac_ct.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\hmac_drbg.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_add.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_bitlen.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_decmod.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_decode.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_decred.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_encode.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_fmont.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_iszero.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_moddiv.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_modpow.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_modpow2.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_montmul.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_mulacc.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_muladd.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_ninv31.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_reduce.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_rshift.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_sub.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_tmont.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i32_div32.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i62_modpow2.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\md5.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\md5sha1.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\multihash.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\poly1305_ctmul.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\poly1305_ctmulq.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\prf.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\prf_md5sha1.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\prf_sha256.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\prf_sha384.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\rsa_default_pkcs1_vrfy.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\rsa_default_priv.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\rsa_default_pub.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\rsa_i31_pkcs1_vrfy.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\rsa_i31_priv.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\rsa_i31_pub.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\rsa_i62_pkcs1_vrfy.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\rsa_i62_priv.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\rsa_i62_pub.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\rsa_pkcs1_sig_unpad.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\sha1.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\sha2big.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\sha2small.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_client.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_client_default_rsapub.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_client_full.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_engine.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_engine_default_aescbc.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_engine_default_aesccm.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_engine_default_aesgcm.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_engine_default_chapol.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_engine_default_ec.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_engine_default_ecdsa.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_engine_default_rsavrfy.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_hashes.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_hs_client.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_io.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_rec_cbc.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_rec_ccm.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_rec_chapol.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_rec_gcm.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\x509_minimal.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\x509_minimal_full.c" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Image Include="Assets\Square150x150Logo.scale-200.png">
|
||||||
|
<DeploymentContent>true</DeploymentContent>
|
||||||
|
</Image>
|
||||||
|
<Image Include="Assets\Square44x44Logo.scale-200.png">
|
||||||
|
<DeploymentContent>true</DeploymentContent>
|
||||||
|
</Image>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
||||||
|
|
@ -0,0 +1,445 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Common">
|
||||||
|
<UniqueIdentifier>a901236d-c8ef-4041-966f-46f17511e342</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="BearSSL">
|
||||||
|
<UniqueIdentifier>{93fa4266-80e4-4bbf-a7fa-c47e07da5098}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<AppxManifest Include="Package.appxmanifest" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\..\src\Animations.c" />
|
||||||
|
<ClCompile Include="..\..\src\Audio.c" />
|
||||||
|
<ClCompile Include="..\..\src\AxisLinesRenderer.c" />
|
||||||
|
<ClCompile Include="..\..\src\Bitmap.c" />
|
||||||
|
<ClCompile Include="..\..\src\Block.c" />
|
||||||
|
<ClCompile Include="..\..\src\BlockPhysics.c" />
|
||||||
|
<ClCompile Include="..\..\src\Builder.c" />
|
||||||
|
<ClCompile Include="..\..\src\Camera.c" />
|
||||||
|
<ClCompile Include="..\..\src\Chat.c" />
|
||||||
|
<ClCompile Include="..\..\src\Commands.c" />
|
||||||
|
<ClCompile Include="..\..\src\Deflate.c" />
|
||||||
|
<ClCompile Include="..\..\src\Drawer.c" />
|
||||||
|
<ClCompile Include="..\..\src\Drawer2D.c" />
|
||||||
|
<ClCompile Include="..\..\src\Entity.c" />
|
||||||
|
<ClCompile Include="..\..\src\EntityComponents.c" />
|
||||||
|
<ClCompile Include="..\..\src\EntityRenderers.c" />
|
||||||
|
<ClCompile Include="..\..\src\EnvRenderer.c" />
|
||||||
|
<ClCompile Include="..\..\src\Event.c" />
|
||||||
|
<ClCompile Include="..\..\src\ExtMath.c" />
|
||||||
|
<ClCompile Include="..\..\src\FancyLighting.c" />
|
||||||
|
<ClCompile Include="..\..\src\Formats.c" />
|
||||||
|
<ClCompile Include="..\..\src\Game.c" />
|
||||||
|
<ClCompile Include="..\..\src\GameVersion.c" />
|
||||||
|
<ClCompile Include="..\..\src\Generator.c" />
|
||||||
|
<ClCompile Include="..\..\src\Gui.c" />
|
||||||
|
<ClCompile Include="..\..\src\HeldBlockRenderer.c" />
|
||||||
|
<ClCompile Include="..\..\src\Http_Worker.c" />
|
||||||
|
<ClCompile Include="..\..\src\Input.c" />
|
||||||
|
<ClCompile Include="..\..\src\InputHandler.c" />
|
||||||
|
<ClCompile Include="..\..\src\Inventory.c" />
|
||||||
|
<ClCompile Include="..\..\src\IsometricDrawer.c" />
|
||||||
|
<ClCompile Include="..\..\src\Launcher.c" />
|
||||||
|
<ClCompile Include="..\..\src\LBackend.c" />
|
||||||
|
<ClCompile Include="..\..\src\LBackend_Android.c" />
|
||||||
|
<ClCompile Include="..\..\src\Lighting.c" />
|
||||||
|
<ClCompile Include="..\..\src\Logger.c" />
|
||||||
|
<ClCompile Include="..\..\src\LScreens.c" />
|
||||||
|
<ClCompile Include="..\..\src\LWeb.c" />
|
||||||
|
<ClCompile Include="..\..\src\LWidgets.c" />
|
||||||
|
<ClCompile Include="..\..\src\MapRenderer.c" />
|
||||||
|
<ClCompile Include="..\..\src\MenuOptions.c" />
|
||||||
|
<ClCompile Include="..\..\src\Menus.c" />
|
||||||
|
<ClCompile Include="..\..\src\Model.c" />
|
||||||
|
<ClCompile Include="..\..\src\Options.c" />
|
||||||
|
<ClCompile Include="..\..\src\PackedCol.c" />
|
||||||
|
<ClCompile Include="..\..\src\Particle.c" />
|
||||||
|
<ClCompile Include="..\..\src\Physics.c" />
|
||||||
|
<ClCompile Include="..\..\src\Picking.c" />
|
||||||
|
<ClCompile Include="..\..\src\Protocol.c" />
|
||||||
|
<ClCompile Include="..\..\src\Queue.c" />
|
||||||
|
<ClCompile Include="..\..\src\Resources.c" />
|
||||||
|
<ClCompile Include="..\..\src\Screens.c" />
|
||||||
|
<ClCompile Include="..\..\src\SelectionBox.c" />
|
||||||
|
<ClCompile Include="..\..\src\SelOutlineRenderer.c" />
|
||||||
|
<ClCompile Include="..\..\src\Server.c" />
|
||||||
|
<ClCompile Include="..\..\src\SSL.c" />
|
||||||
|
<ClCompile Include="..\..\src\Stream.c" />
|
||||||
|
<ClCompile Include="..\..\src\String.c" />
|
||||||
|
<ClCompile Include="..\..\src\SystemFonts.c" />
|
||||||
|
<ClCompile Include="..\..\src\TexturePack.c" />
|
||||||
|
<ClCompile Include="..\..\src\TouchUI.c" />
|
||||||
|
<ClCompile Include="..\..\src\Utils.c" />
|
||||||
|
<ClCompile Include="..\..\src\Vectors.c" />
|
||||||
|
<ClCompile Include="..\..\src\Vorbis.c" />
|
||||||
|
<ClCompile Include="..\..\src\Widgets.c" />
|
||||||
|
<ClCompile Include="..\..\src\World.c" />
|
||||||
|
<ClCompile Include="..\..\src\Graphics_D3D11.c" />
|
||||||
|
<ClCompile Include="..\..\src\UWP\Platform_UWP.cpp" />
|
||||||
|
<ClCompile Include="..\..\src\UWP\Window_UWP.cpp" />
|
||||||
|
<ClCompile Include="..\..\src\Audio_OpenAL.c" />
|
||||||
|
<ClCompile Include="..\..\src\Certs.c" />
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\aes_big_cbcdec.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\aes_big_cbcenc.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\aes_big_ctr.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\aes_big_ctrcbc.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\aes_big_dec.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\aes_big_enc.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\aes_common.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\aes_x86ni.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\aes_x86ni_cbcdec.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\aes_x86ni_cbcenc.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\aes_x86ni_ctr.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\aes_x86ni_ctrcbc.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\aesctr_drbg.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\asn1enc.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ccm.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ccopy.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\chacha20_ct.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\chacha20_sse2.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\dec32be.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\dec32le.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\dec64be.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\dec64le.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\dig_oid.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\dig_size.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ec_all_m31.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ec_c25519_i31.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ec_c25519_m31.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ec_c25519_m62.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ec_c25519_m64.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ec_curve25519.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ec_default.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ec_p256_m31.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ec_p256_m62.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ec_p256_m64.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ec_prime_i31.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ec_secp256r1.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ec_secp384r1.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ec_secp521r1.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ecdsa_atr.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ecdsa_default_vrfy_asn1.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ecdsa_default_vrfy_raw.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ecdsa_i31_bits.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ecdsa_i31_vrfy_asn1.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ecdsa_i31_vrfy_raw.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\enc32be.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\enc32le.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\enc64be.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\enc64le.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\gcm.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ghash_ctmul.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ghash_ctmul64.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ghash_pclmul.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\hmac.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\hmac_ct.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\hmac_drbg.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_add.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_bitlen.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_decmod.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_decode.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_decred.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_encode.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_fmont.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_iszero.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_moddiv.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_modpow.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_modpow2.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_montmul.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_mulacc.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_muladd.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_ninv31.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_reduce.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_rshift.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_sub.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i31_tmont.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i32_div32.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\i62_modpow2.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\md5.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\md5sha1.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\multihash.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\poly1305_ctmul.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\poly1305_ctmulq.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\prf.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\prf_md5sha1.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\prf_sha256.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\prf_sha384.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\rsa_default_pkcs1_vrfy.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\rsa_default_priv.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\rsa_default_pub.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\rsa_i31_pkcs1_vrfy.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\rsa_i31_priv.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\rsa_i31_pub.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\rsa_i62_pkcs1_vrfy.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\rsa_i62_priv.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\rsa_i62_pub.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\rsa_pkcs1_sig_unpad.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\sha1.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\sha2big.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\sha2small.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_client.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_client_default_rsapub.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_client_full.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_engine.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_engine_default_aescbc.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_engine_default_aesccm.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_engine_default_aesgcm.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_engine_default_chapol.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_engine_default_ec.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_engine_default_ecdsa.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_engine_default_rsavrfy.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_hashes.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_hs_client.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_io.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_rec_cbc.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_rec_ccm.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_rec_chapol.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\ssl_rec_gcm.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\x509_minimal.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\third_party\bearssl\x509_minimal_full.c">
|
||||||
|
<Filter>BearSSL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Image Include="Assets\Square44x44Logo.scale-200.png" />
|
||||||
|
<Image Include="Assets\Square150x150Logo.scale-200.png" />
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
||||||
|
|
@ -0,0 +1,50 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
|
<Package
|
||||||
|
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
|
||||||
|
xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
|
||||||
|
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
|
||||||
|
IgnorableNamespaces="uap mp">
|
||||||
|
|
||||||
|
<Identity
|
||||||
|
Name="64f1d536-965b-4190-90d3-47d861786f88"
|
||||||
|
Publisher="CN=ClassiCube"
|
||||||
|
Version="1.0.0.0" />
|
||||||
|
|
||||||
|
<mp:PhoneIdentity PhoneProductId="64f1d536-965b-4190-90d3-47d861786f88" PhonePublisherId="00000000-0000-0000-0000-000000000000"/>
|
||||||
|
|
||||||
|
<Properties>
|
||||||
|
<DisplayName>ClassiCube-UWP</DisplayName>
|
||||||
|
<PublisherDisplayName>ClassiCube</PublisherDisplayName>
|
||||||
|
<Logo>Assets\StoreLogo.png</Logo>
|
||||||
|
</Properties>
|
||||||
|
|
||||||
|
<Dependencies>
|
||||||
|
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.0.0" MaxVersionTested="10.0.0.0" />
|
||||||
|
</Dependencies>
|
||||||
|
|
||||||
|
<Resources>
|
||||||
|
<Resource Language="x-generate"/>
|
||||||
|
</Resources>
|
||||||
|
|
||||||
|
<Applications>
|
||||||
|
<Application Id="App"
|
||||||
|
Executable="$targetnametoken$.exe"
|
||||||
|
EntryPoint="ClassiCube_UWP.App">
|
||||||
|
<uap:VisualElements
|
||||||
|
DisplayName="ClassiCube-UWP"
|
||||||
|
Description="ClassiCube-UWP"
|
||||||
|
BackgroundColor="transparent" Square44x44Logo="Assets\Square44x44Logo.png" Square150x150Logo="Assets\Square150x150Logo.png">
|
||||||
|
<uap:DefaultTile>
|
||||||
|
<uap:ShowNameOnTiles>
|
||||||
|
<uap:ShowOn Tile="square150x150Logo"/>
|
||||||
|
</uap:ShowNameOnTiles>
|
||||||
|
</uap:DefaultTile>
|
||||||
|
</uap:VisualElements>
|
||||||
|
</Application>
|
||||||
|
</Applications>
|
||||||
|
|
||||||
|
<Capabilities>
|
||||||
|
<Capability Name="internetClient" />
|
||||||
|
</Capabilities>
|
||||||
|
</Package>
|
||||||
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 7.5 KiB |
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
|
@ -0,0 +1,42 @@
|
||||||
|
TARGET := ClassiCube-amiga
|
||||||
|
BUILD_DIR := build/amiga
|
||||||
|
SOURCE_DIRS := src src/amiga
|
||||||
|
|
||||||
|
S_FILES := $(foreach dir,$(SOURCE_DIRS),$(wildcard $(dir)/*.S))
|
||||||
|
C_FILES := $(foreach dir,$(SOURCE_DIRS),$(wildcard $(dir)/*.c))
|
||||||
|
OBJS := $(addprefix $(BUILD_DIR)/, $(notdir $(C_FILES:%.c=%.o) $(S_FILES:%.S=%.o)))
|
||||||
|
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# Code generation
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
CC = vc +aos68k
|
||||||
|
CFLAGS = -rmcfg-amiga-softfloat -O1 -DPLAT_AMIGA
|
||||||
|
|
||||||
|
AS = vasmm68k_mot
|
||||||
|
ASFLAGS = -Fvobj -m68000 -no-fpu
|
||||||
|
|
||||||
|
LDFLAGS = $(CFLAGS)
|
||||||
|
LDLIBS = -lamiga -lmsoft
|
||||||
|
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# Main targets
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
default: $(BUILD_DIR) $(TARGET)
|
||||||
|
|
||||||
|
$(BUILD_DIR):
|
||||||
|
mkdir -p $(BUILD_DIR)
|
||||||
|
|
||||||
|
$(TARGET): $(OBJS)
|
||||||
|
$(CC) $(LDFLAGS) -final -o $@ $^ $(LDLIBS)
|
||||||
|
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# object generation
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
$(BUILD_DIR)/%.o : src/%.c
|
||||||
|
$(CC) $(CFLAGS) -c -o $@ $<
|
||||||
|
|
||||||
|
$(BUILD_DIR)/%.o : src/amiga/%.c
|
||||||
|
$(CC) $(CFLAGS) -c -o $@ $<
|
||||||