Compare commits
1061 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 6cd5a7eab9 | |||
| d119cf6e96 | |||
| 9b3a878c18 | |||
| 365b264656 | |||
| 1184d6aecb | |||
| b12edf70bb | |||
| 53c1da8f94 | |||
| 213b810279 | |||
| 8a4617d3c2 | |||
| c108b31954 | |||
| fd6829f757 | |||
| dabb2cc9a0 | |||
| 4ecb06c901 | |||
| 375bc4cc69 | |||
| 9265ff53d0 | |||
| 75ad56338b | |||
| db24ce7708 | |||
| 2d45ecff22 | |||
| 5d98f3866c | |||
| 106f31db6a | |||
| 9a5bdc9b4f | |||
| 0b829be798 | |||
| 94bb75fb7c | |||
| 7d84d0f83e | |||
| bc40b61ef1 | |||
| 73c3d5fc81 | |||
| 13575029c0 | |||
| ea016382f2 | |||
| 782344eed8 | |||
| 95fb7859d2 | |||
| 9d3e626b55 | |||
| a6e8b9037a | |||
| c9f91ecee9 | |||
| 7cb2d3f143 | |||
| a975b4937a | |||
| fce8e0fef0 | |||
| 12fe55a258 | |||
| 3bbc2c1f4c | |||
| 99671b754f | |||
| 9fc5f6271b | |||
| 4647f3046e | |||
| c44cddabfa | |||
| 9ff91c29f2 | |||
| e303cc536c | |||
| afdfefc9ad | |||
| 3033914e2d | |||
| 70b124cfa0 | |||
| 38a5313ed2 | |||
| 9291e2777d | |||
| 465da5136d | |||
| 568e7481d8 | |||
| a0297933ce | |||
| 50dad6801b | |||
| ee7475a9d4 | |||
| ba988f1d3f | |||
| db029ed29f | |||
| 41d38975f7 | |||
| eecadab387 | |||
| e27e6c0b2d | |||
| 30a5d646ec | |||
| 882fb3e049 | |||
| 0423781363 | |||
| 43cfb3cd10 | |||
| de15c9746f | |||
| 1371bf89e0 | |||
| 3b8f8d7fc8 | |||
| a828c214b5 | |||
| 3381144d2e | |||
| a19883f875 | |||
| 482722af0a | |||
| 02bac61c9c | |||
| e8ee5831d3 | |||
| 083b4f0d3b | |||
| c0280b43f2 | |||
| d153e977a7 | |||
| eee7bf0c97 | |||
| 0c94606fcf | |||
| ed75bab7b2 | |||
| bff6e0d277 | |||
| c325017675 | |||
| 4b12c9a9fc | |||
| 0d57744efa | |||
| e882d64d8a | |||
| 16f910e350 | |||
| e2c2ef9788 | |||
| a98b4adead | |||
| 186fe53279 | |||
| c9917c826a | |||
| aedebecae2 | |||
| 482dd0e8f8 | |||
| cae2e7de80 | |||
| e76ce05e29 | |||
| a98174be85 | |||
| b68cfbf794 | |||
| 17d8f2884e | |||
| 050b8fa7df | |||
| c30c9b2168 | |||
| 358735a199 | |||
| d909bbc297 | |||
| 2adb2f82d7 | |||
| 5a013127ec | |||
| 1219e5c244 | |||
| 4aec48c2ca | |||
| 8d54ddf426 | |||
| c21cdb8055 | |||
| 05824e6acd | |||
| b3b680f073 | |||
| 598fe85243 | |||
| e7ac84fca3 | |||
| b9ea6be842 | |||
| d46dbc0fa8 | |||
| 0e10f12ec0 | |||
| 8f178b2c29 | |||
| d41fe80b8e | |||
| 96e992bd26 | |||
| 465c421707 | |||
| f7e9622084 | |||
| 79e000f63d | |||
| 10af0e8c93 | |||
| d13cf0e29a | |||
| 1671922f7e | |||
| c9da795bf3 | |||
| 69eb1401a9 | |||
| aa06ac119f | |||
| 1afee59c95 | |||
| 4decad6f6b | |||
| a37f786a37 | |||
| 8f98e572e1 | |||
| c818f8af82 | |||
| fac8bcc20c | |||
| 1d004f2788 | |||
| cef4ea786a | |||
| 8ebf24d8e7 | |||
| 69b02f7e46 | |||
| b788e05396 | |||
| 5dc4e74c98 | |||
| 436ef1cff6 | |||
| d77a78cdf1 | |||
| 66cb855db0 | |||
| fb3aa9628d | |||
| 89c81d9f22 | |||
| cffcfad42a | |||
| 21f5976d35 | |||
| 21ada251fe | |||
| 44801c50f3 | |||
| 6a1fb8cb73 | |||
| 8e8cefb3f6 | |||
| e0e4fa3b3e | |||
| b9dbda5ddc | |||
| 931a2c516f | |||
| 2f9e1cf4df | |||
| 68d1c38f3b | |||
| c4acea6c82 | |||
| 7ebabddfe0 | |||
| a047ddffc0 | |||
| 92992a5406 | |||
| 593f850693 | |||
| f87db1ac14 | |||
| 363e498462 | |||
| a03dd44924 | |||
| 554b27a82a | |||
| 7062ead4fd | |||
| 5f2f084091 | |||
| a560121775 | |||
| b0a346709e | |||
| 7b64cd2a8e | |||
| 9ecfecb83e | |||
| ec4565263d | |||
| ed1da364e5 | |||
| 942dbbc8fa | |||
| 3e8f9cbbf2 | |||
| 322b5dac79 | |||
| 5a85fee3f1 | |||
| ca472b6750 | |||
| 8e3d0af08e | |||
| 12f2b900ca | |||
| 6228dff809 | |||
| d34b3190f7 | |||
| 4f5348c7d4 | |||
| aff871f127 | |||
| 9f00359e17 | |||
| 0871436488 | |||
| 6aa598b029 | |||
| 83e22fa9f0 | |||
| a230340578 | |||
| 2da78c6591 | |||
| 46350200d7 | |||
| 00502e94b5 | |||
| 70ce7ee106 | |||
| cf4ae38699 | |||
| 09f83e48ff | |||
| bcbce5dd48 | |||
| 0a0ef50caf | |||
| e20f1587cd | |||
| 715e3856f2 | |||
| 850166eca1 | |||
| 00cca7be69 | |||
| 0a43f69e87 | |||
| c84d2d895e | |||
| 87d5f45277 | |||
| 137f37cd41 | |||
| 18722d7874 | |||
| 307e1351df | |||
| 441fbd63bb | |||
| 073b723c09 | |||
| 37bc73865d | |||
| e2bced978e | |||
| a6d8c4343f | |||
| d5654d64d5 | |||
| 06459eb37b | |||
| d08fea551e | |||
| 924692bf1c | |||
| ec9e8916b1 | |||
| d3be8ee2b7 | |||
| 16f869fe5a | |||
| a90858193e | |||
| 6dcf63009e | |||
| 5f8f86b5a7 | |||
| a78117e094 | |||
| 44421920b3 | |||
| 0e79fbda05 | |||
| 9ab89c634b | |||
| 0a6f12f448 | |||
| 8612bdd03d | |||
| f08d3e12ca | |||
| deda47f461 | |||
| 2751f5e254 | |||
| 2ac1ff1d0a | |||
| 30e8c70055 | |||
| 62600b3be0 | |||
| 57b9130cf7 | |||
| b557a7fa16 | |||
| 73e336adfa | |||
| 86b27a3088 | |||
| cce699a465 | |||
| d662a39a12 | |||
| 49c6c2c529 | |||
| 29f3eec957 | |||
| c1d875d841 | |||
| d28e3c4f08 | |||
| cedfb95f9b | |||
| 59430ee83e | |||
| b436d2a7f4 | |||
| 84d2ad70e6 | |||
| 1bd9549e45 | |||
| 2409a0d04e | |||
| 635fed0427 | |||
| 5d7e75c5d8 | |||
| c0e97b4e96 | |||
| b2842dcd52 | |||
| 112f1016ed | |||
| c78c504043 | |||
| 27349c5c69 | |||
| 872aa2b358 | |||
| 72abc0f219 | |||
| 4d565eade6 | |||
| 2df7e46cb1 | |||
| 105205312b | |||
| 97f7461aa9 | |||
| 7e2eaf43ca | |||
| d752ab0151 | |||
| c87a7cb2c0 | |||
| 6aff2803e5 | |||
| fcfca6efda | |||
| 0ebe832f8e | |||
| 86ed82dcec | |||
| 769b69999f | |||
| 91ee066751 | |||
| 404d08ef6d | |||
| 11487cd591 | |||
| 51a30977d2 | |||
| c0366ba40c | |||
| 3f5bc3464d | |||
| fcd6be71b0 | |||
| ad22cf5051 | |||
| 8f66c50721 | |||
| 6f834e99d2 | |||
| 86c7b31b6d | |||
| 6d918b565f | |||
| 52575a44b2 | |||
| d5eebd6ab4 | |||
| 3f44ecb77a | |||
| 9bd4426225 | |||
| 4af0a33f1f | |||
| 636bde6343 | |||
| 16579e0b1f | |||
| 292d3faa9e | |||
| 6d2f7f6e54 | |||
| a131a41874 | |||
| 48ffc19193 | |||
| e75c0dbaa1 | |||
| 0c0f63a2a8 | |||
| c9942aa828 | |||
| ca56f0747e | |||
| e77c01d00a | |||
| c85775922e | |||
| da0c9c2ce9 | |||
| 42b388317e | |||
| 6a570ae57e | |||
| 5e6aa45658 | |||
| 5fa8af1c9a | |||
| 2e4bf9ef1b | |||
| ba9f55679d | |||
| 2c999a550b | |||
| 805de248d3 | |||
| 1240874e41 | |||
| feff50e7e0 | |||
| 33558d14e5 | |||
| c37fc73a02 | |||
| d152537e50 | |||
| 5d4e87373f | |||
| 1c36156594 | |||
| 300701a06b | |||
| a776f15557 | |||
| 1c89f8a855 | |||
| 81e4d9c2ee | |||
| 49be6be8f4 | |||
| b861a9c5d0 | |||
| 9828e6cafc | |||
| 3d8d9ef61c | |||
| 5d13978bbf | |||
| b844aecb9e | |||
| f57c8c1c35 | |||
| bbbc5f6e6c | |||
| ac0c60b740 | |||
| f2f95a20a3 | |||
| 12f213ffad | |||
| 66e1cf96e2 | |||
| c3b7229fbb | |||
| f96a0ce9d2 | |||
| ba592070f7 | |||
| 6a2ea62f82 | |||
| 6cfd817b5a | |||
| c99ef4b09f | |||
| 7e131f8fb6 | |||
| 10171c19c3 | |||
| e0853095e3 | |||
| 5a365506f7 | |||
| 4aee1b378a | |||
| 9f5e3ecb8c | |||
| 7b9614fcf3 | |||
| 8e62a0e22d | |||
| f89d3d5077 | |||
| 145e059cdf | |||
| 22916a7e8d | |||
| 07f458f991 | |||
| 6180a58d7a | |||
| 5cc2a7c09e | |||
| e584653b72 | |||
| f4b346a6f8 | |||
| cb1b71bc57 | |||
| 95060efb7d | |||
| b82dd61a0c | |||
| c84d10686f | |||
| d652a81078 | |||
| fc76d2df38 | |||
| 1a98682ea0 | |||
| 64437a531b | |||
| 4d26170bd6 | |||
| 36831a3d6a | |||
| e7c0df4eac | |||
| a296c19633 | |||
| 8b5f7a0770 | |||
| 7b9a36be7d | |||
| cbe1628cf2 | |||
| d482c078bc | |||
| 38f9332905 | |||
| 96f1f9e45e | |||
| f031cd9b42 | |||
| 3aa15c8a23 | |||
| a3cc3aa8b8 | |||
| 29f67448e9 | |||
| 976a3ed3bf | |||
| 98c0944419 | |||
| bf78b197a3 | |||
| 427960fee8 | |||
| 75da7d80dc | |||
| 7eb730ee03 | |||
| 4b9fa7a417 | |||
| 6163acc8c5 | |||
| 4add5b6bf0 | |||
| 1ae3b37fbe | |||
| 23c710cf53 | |||
| e29b81c444 | |||
| 73dba6d6e0 | |||
| 09e845a539 | |||
| e1744ceab2 | |||
| cbb1b1f28e | |||
| 59f9938849 | |||
| 8db318094f | |||
| 5a4206e05d | |||
| 6794ae35a1 | |||
| 8676913e73 | |||
| 2ef120fdcd | |||
| 08c1a14b13 | |||
| 4a138aa918 | |||
| 793a21a825 | |||
| 6fd76054b4 | |||
| c80be9e54b | |||
| 56ebae773c | |||
| fad6647255 | |||
| edb2b60f2f | |||
| d894ccb4ea | |||
| bd09dc8ea8 | |||
| a1e19e1cf8 | |||
| 799dbfc2c5 | |||
| 54e6cf95d7 | |||
| 3ea0e391db | |||
| 4fd21f7764 | |||
| f8009451a9 | |||
| f5c48a00b4 | |||
| c70338a9a9 | |||
| e83540d80c | |||
| 24dde5d42b | |||
| 8e15afb2c4 | |||
| 911cd678ff | |||
| f11770b88b | |||
| 514ef9a9c5 | |||
| 57070aa8ff | |||
| e06c6b5ac8 | |||
| a6dada6c36 | |||
| a058cf2ff0 | |||
| 142d25c0d7 | |||
| 4e6231a321 | |||
| 29d87a3743 | |||
| 9a2b06f35f | |||
| 4e2f3a289c | |||
| db70cd058a | |||
| b6cdf18165 | |||
| 7d710cbf8c | |||
| 654c4e3c06 | |||
| a3271b08b7 | |||
| b0de5970ce | |||
| db7f84f9f8 | |||
| 58140e1d3a | |||
| 315d9c308b | |||
| d13c0ee393 | |||
| 7740cac6dd | |||
| ead8e5e0c3 | |||
| 195de818b6 | |||
| 5c0113ce59 | |||
| db2341c842 | |||
| b7b87096d8 | |||
| 6a41b22a1b | |||
| 5696065727 | |||
| e9281843bf | |||
| 43184a271f | |||
| a7e1bc34de | |||
| 98c46f7eb0 | |||
| 3de0f042c6 | |||
| f115032095 | |||
| 0b628cb50e | |||
| 751775a04c | |||
| 177bb3c569 | |||
| 3cf8c629fa | |||
| 3947250daa | |||
| 96be211c88 | |||
| b00b8ae71b | |||
| 45f416c4f1 | |||
| c58149f5b6 | |||
| 579a6c9311 | |||
| 08e7a23121 | |||
| bf190fd3d8 | |||
| ea3a73b598 | |||
| 9989fb4bbc | |||
| 0524f4a540 | |||
| 43febd392c | |||
| dea894161a | |||
| 710f07049d | |||
| fe977c4288 | |||
| f5b9d86e42 | |||
| 9ab4802d07 | |||
| f0828ebbc0 | |||
| 84b1624b23 | |||
| 47da39a2ff | |||
| 7bec3b30b7 | |||
| ad5a62b62d | |||
| f080798000 | |||
| 6af81d649f | |||
| 5f3f8eeec6 | |||
| 9b4302bc2f | |||
| fa618a2bf7 | |||
| 6915025c7e | |||
| 5cf80c05a5 | |||
| 711afeb688 | |||
| 96165cd21d | |||
| 1a07f40c4b | |||
| eb5ea82bb1 | |||
| cd9ff08235 | |||
| 957713015a | |||
| a639772dfe | |||
| 6c85d97d6c | |||
| 7feb13671a | |||
| 3f066cca4a | |||
| c86d221ba5 | |||
| 5870dad639 | |||
| 53a70c6e77 | |||
| 45fecf0059 | |||
| a6e4b77273 | |||
| f932cc4073 | |||
| 6bf77166e1 | |||
| 6b9d0d5df5 | |||
| 9778322d99 | |||
| 6ff04ec91b | |||
| c7700fcd72 | |||
| 027b1d5cab | |||
| ce65a1c2a7 | |||
| 650b0c7c30 | |||
| 823b23f800 | |||
| b47db88ded | |||
| 20b92f50d9 | |||
| b401ad85d1 | |||
| e9df63119b | |||
| caa6c9b471 | |||
| bb8e43f16c | |||
| 2c71d08ea2 | |||
| 500f7901ac | |||
| 5fb716fc21 | |||
| 31ef970f23 | |||
| a770eaf500 | |||
| e171f3af41 | |||
| 1041284384 | |||
| 6555de6ef5 | |||
| b81e77cffa | |||
| a1741f21cc | |||
| 76a36f45bf | |||
| a767beec60 | |||
| 183bea3b98 | |||
| 6981cbb985 | |||
| fdfcc6c5ea | |||
| b86ecf7441 | |||
| 5107d1b69b | |||
| e133c8c2c3 | |||
| 450ab7c289 | |||
| 32bfb808ae | |||
| 1f19804cab | |||
| 9ff6003dfc | |||
| f725ea7d0d | |||
| 39d17a94c6 | |||
| 8153e5338f | |||
| 999caea021 | |||
| b70665865f | |||
| 6a9e0c52c3 | |||
| 44b3709d1d | |||
| b060165817 | |||
| 98fc073f89 | |||
| ba29f0ccd1 | |||
| 3473e19508 | |||
| 22bd7dcc42 | |||
| 79d09d02ed | |||
| a6313fa46c | |||
| 2a7431bd61 | |||
| 90851459c8 | |||
| 27c9bf137c | |||
| 2205790dd4 | |||
| 0115c2f70a | |||
| 7bce99d77b | |||
| 47b65868f4 | |||
| 8735a06f3c | |||
| d35fecbeea | |||
| 0e388639cc | |||
| 17e6ad1fe8 | |||
| a3f077c783 | |||
| 86b3229746 | |||
| 06b0e35fb9 | |||
| 6fbca1acfd | |||
| f0e36c6365 | |||
| e9cb7000cc | |||
| 0e8b0e414a | |||
| ec3114d6d8 | |||
| 60fc51ed22 | |||
| 603b775f4a | |||
| 964ce3d6aa | |||
| fb88e1c1c9 | |||
| 7081b89e97 | |||
| c6ab1aa227 | |||
| 8a509afc20 | |||
| 6a95e0877b | |||
| 28c37ab465 | |||
| 842edbcbe7 | |||
| 3e556c710b | |||
| 4289ffef1c | |||
| 0c051a83a7 | |||
| 82dedb1fbb | |||
| 04c0f309be | |||
| 8408d51359 | |||
| a8ada492b2 | |||
| 55d6ee65ae | |||
| 69ecf8aea7 | |||
| f2b51668b4 | |||
| c2527c9e1b | |||
| 0bcd45c1d4 | |||
| ecf0022fd1 | |||
| 4d4a70ad0e | |||
| 0f45a8c180 | |||
| ad3e740c09 | |||
| 7e6cc02e09 | |||
| 7000ef4471 | |||
| 0beda6fa89 | |||
| a41d2e43fd | |||
| c98158b460 | |||
| 02a53c582c | |||
| 192f4825a2 | |||
| bcce3acd5f | |||
| 8cd6b9275a | |||
| 5fa9dfac6a | |||
| fe51c7b960 | |||
| cf5346c263 | |||
| 776b3b5efa | |||
| 520524285a | |||
| ec8cb1668c | |||
| 1b7b59466d | |||
| e45e9c20dd | |||
| 450cb1771c | |||
| f7a3d45c2c | |||
| 65eb625843 | |||
| c06b957a8a | |||
| 05064dfaf4 | |||
| 425610b98a | |||
| 0d34b97948 | |||
| c6426245e4 | |||
| 6fe41870ab | |||
| 2d4e02f277 | |||
| 6d7d3fff6d | |||
| cc145eaf2e | |||
| da6d1d359c | |||
| 92ae57c9ee | |||
| 8409979dc5 | |||
| 8bc92a2cbb | |||
| 2de4c03faa | |||
| 382a7c94a2 | |||
| 1d7a00666e | |||
| 14c0289542 | |||
| 69ebdfd689 | |||
| fc21ece784 | |||
| a3ededdcf1 | |||
| 0178b20983 | |||
| f9142a1c56 | |||
| b19209c45c | |||
| 73b5b9d7b7 | |||
| 0a9d646bd7 | |||
| 24edfe2190 | |||
| 0bb8127372 | |||
| 1b8a69154f | |||
| f2155b49e2 | |||
| 62c9b99e72 | |||
| 2a344e1d87 | |||
| ae14aa991d | |||
| 2885c8a4ab | |||
| 3d411431c6 | |||
| 1800faf0dd | |||
| 19ded3809f | |||
| 40cd255051 | |||
| ad4677a67c | |||
| d9e0d016c6 | |||
| c570fd03d1 | |||
| 1e0565f17b | |||
| 3ff464641a | |||
| 7cb3d305d4 | |||
| e46dba43ad | |||
| afad96a52a | |||
| 1a00341e6b | |||
| 3388c8ed09 | |||
| 6d4967ffef | |||
| b27366e1e6 | |||
| 95a29b5d1d | |||
| d320867569 | |||
| aabd388070 | |||
| 7db6594358 | |||
| 388ca1c645 | |||
| 7c04b00e2b | |||
| dac0644f07 | |||
| 7d103fe0f0 | |||
| 901d9f3f6e | |||
| ddc9e74aa8 | |||
| 12690de9de | |||
| 6b30cdac09 | |||
| ccb7528a59 | |||
| 01ed8a07af | |||
| a9f399d6cc | |||
| a527a485f8 | |||
| f0c8f6d47b | |||
| a29dc3893f | |||
| c6f392bf6c | |||
| f2ded2fdb7 | |||
| 080737fd1f | |||
| 1040757556 | |||
| 38d612e5ba | |||
| c20aa2ad5f | |||
| a7c3753c5a | |||
| ebf72eb126 | |||
| be49a80bc7 | |||
| 23da770364 | |||
| 6186ac0245 | |||
| 364c33060b | |||
| 3922f76ab5 | |||
| bb2c9196f5 | |||
| 1c8d3e0dca | |||
| 6b556a5206 | |||
| bbd308a908 | |||
| b5b8f7c35a | |||
| de592267fe | |||
| 5bb89328d0 | |||
| 75fbb3d551 | |||
| eb0fb2fef7 | |||
| b1b92e95ab | |||
| 3a68b7ac0d | |||
| 3976018980 | |||
| 1dac708323 | |||
| d4187242b9 | |||
| 61c0d81667 | |||
| c3e4b6da46 | |||
| 38c7cf474d | |||
| ec4cbe5380 | |||
| 465ca97531 | |||
| 2f7a2d5134 | |||
| c1b5af21f0 | |||
| cfb788941c | |||
| 69435dd951 | |||
| 3b09a39576 | |||
| 53f81ce9c7 | |||
| e064380a7d | |||
| 9375e255e1 | |||
| a56fc57a83 | |||
| 4f75dc06b9 | |||
| d3b7a5146c | |||
| bc487f43f7 | |||
| 088ac71930 | |||
| 27cad422b9 | |||
| 5a63271f0e | |||
| 9a35684507 | |||
| 0d2714a1d9 | |||
| 553e4b28bf | |||
| b579e45ed7 | |||
| 1662bcfae4 | |||
| 8652b7d358 | |||
| 1cf8aacc11 | |||
| 13ef4c1236 | |||
| 68dd25a4a5 | |||
| bcb1c6c080 | |||
| 2372116acc | |||
| 508dd2b509 | |||
| 61b69eeed2 | |||
| dc8652806e | |||
| af6db7d895 | |||
| 64ec99be33 | |||
| 53e906d0f3 | |||
| 780a6a7b40 | |||
| 737fbf661a | |||
| c0243a92d0 | |||
| 3a8fcd1b0b | |||
| 04d9693b51 | |||
| 0023716053 | |||
| 37b46df738 | |||
| ba06198012 | |||
| acf9caa4ae | |||
| d69e345bc0 | |||
| c5b25fa132 | |||
| 262ecda2bf | |||
| f243539362 | |||
| ec33891f6f | |||
| f007188fa0 | |||
| 170fd813f0 | |||
| 4c59359cf7 | |||
| ddf25b7869 | |||
| 4914f3b2c3 | |||
| 08faed7d86 | |||
| 989e0f28d6 | |||
| 54f41095e9 | |||
| faaa72d398 | |||
| 97b36eb53c | |||
| 2503525016 | |||
| e96fedfefe | |||
| f279d8d6d1 | |||
| 4bfba20877 | |||
| 504bd93007 | |||
| 2f2fe72808 | |||
| 5babf47e70 | |||
| 78a588cacb | |||
| 205f8a6479 | |||
| 34c1e1a9ad | |||
| 0885884839 | |||
| c471120a80 | |||
| 3202cc7021 | |||
| fc34b3f144 | |||
| fb974a4551 | |||
| 3d99fea575 | |||
| feb04c64a8 | |||
| d3dbf9e83f | |||
| 9b6d7a5275 | |||
| 754fd03750 | |||
| adfa5d63bb | |||
| 81ff956a48 | |||
| daefe27fec | |||
| 6106ff8b31 | |||
| 1e6c180690 | |||
| d1a950d59f | |||
| 641fadc1fb | |||
| 5299061282 | |||
| d0c029c83e | |||
| 5aced2e44b | |||
| 18ab42dc83 | |||
| a748508bc9 | |||
| 8b453e6a3b | |||
| 3196ada481 | |||
| 7c4734c24d | |||
| 813f7b50c1 | |||
| 6532d2b650 | |||
| e0baad417a | |||
| f6759de1e9 | |||
| 7648171fe2 | |||
| 71c3264ea7 | |||
| 49455965c0 | |||
| 5f0467b084 | |||
| 6adcabda29 | |||
| 52b67b46fc | |||
| a700e3b39e | |||
| 4fbbdf8732 | |||
| 9a91fef337 | |||
| 53cc067c17 | |||
| d3183708e8 | |||
| 44771150b7 | |||
| ac2b2d82d2 | |||
| 11c42eb8d4 | |||
| dc0230c476 | |||
| 0a8c343e6e | |||
| afdbef1a81 | |||
| f659338e5e | |||
| 4a82d81efe | |||
| 6b4208be9b | |||
| 3d78c7f43a | |||
| 34df4509af | |||
| 6c3b2b938a | |||
| 59588b12c8 | |||
| 3eaa29e7c2 | |||
| c3c2bb7ad8 | |||
| 0e64c74a78 | |||
| d2dc57585c | |||
| e0fe7989e9 | |||
| 709305df0e | |||
| 24445123fc | |||
| 450a64b58b | |||
| b3a9c8d83f | |||
| 35c92723c7 | |||
| 719e7a9d56 | |||
| eed9e56bf4 | |||
| 1d214ed26a | |||
| 2d9d92b7d7 | |||
| 240cb2d627 | |||
| bd69466e94 | |||
| e6a7597444 | |||
| 1852b370d7 | |||
| 12fa7c41f6 | |||
| fc85ed8730 | |||
| 65f10ff840 | |||
| 6809d84a00 | |||
| 2752cd1390 | |||
| 10b56415e8 | |||
| bd87c80943 | |||
| f71e7ef1cc | |||
| 756ad17c2c | |||
| 29c1b20b41 | |||
| aa5097e0d4 | |||
| 2ccfee2e45 | |||
| bf1311b902 | |||
| 71efb3bc84 | |||
| 439bdde849 | |||
| c7fed20f3c | |||
| 3dd6e5664c | |||
| d4ee308ffd | |||
| a272f3e3b9 | |||
| f6027719d2 | |||
| 38402e78c0 | |||
| eae1ac6558 | |||
| 0b019401bd | |||
| 73cda2324a | |||
| 3dba894369 | |||
| 659ee81e80 | |||
| 99c307a68e | |||
| d28eea342a | |||
| 29078bc428 | |||
| 6bcb5ae66b | |||
| cf1e68fb0e | |||
| 43288a6760 | |||
| 9ee7d04560 | |||
| 16bf215d8a | |||
| 99ed77da8c | |||
| b9f733c401 | |||
| 18966d424c | |||
| c725b886e1 | |||
| 9b7eaf5117 | |||
| 36a55660bf | |||
| 0946e5945f | |||
| 8ec1a5627d | |||
| df718bcb0f | |||
| 8eefbcae45 | |||
| 8cf28730cb | |||
| f894e2b9a2 | |||
| e3cd31f057 | |||
| 05086cda3b | |||
| 7c2d6f8a23 | |||
| 7423abb136 | |||
| 310fa7127d | |||
| 3250c16cdc | |||
| 02f35383bd | |||
| 1d5fef4930 | |||
| dddea008e9 | |||
| dd8ec8f09e | |||
| 98dbbd84ac | |||
| 382a27cb2f | |||
| eeda958f33 | |||
| 2f9cac8d18 | |||
| 9d432187aa | |||
| b13165f95a | |||
| 110c20d25f | |||
| 4def7f143c | |||
| 908d524631 | |||
| 6c74274502 | |||
| ee8cd82e9d | |||
| 820e692e57 | |||
| 5b95cfda40 | |||
| b2c4fed39c | |||
| 96c6dc01eb | |||
| f545532556 | |||
| 8ac9968096 | |||
| a9ee9a69a4 | |||
| 46a50265a3 | |||
| 41e9e0b965 | |||
| 388d090b91 | |||
| 1a60fb3c96 | |||
| baa2768a69 | |||
| 04fb86556a | |||
| 90cf47cdce | |||
| bf96cbe980 | |||
| 66dc1cc15d | |||
| a05e3f02b8 | |||
| 8ec01450f8 | |||
| b2962e0522 | |||
| 8980fc5524 | |||
| f54da22f6f | |||
| cebc0ec4a1 | |||
| 812224f7f7 | |||
| d78e2dad29 | |||
| 7e35679ec2 | |||
| b39f457363 | |||
| 18b7955384 | |||
| 0e625e6928 | |||
| 65ae85061f | |||
| e2c1547d95 | |||
| 2d5a427bd4 | |||
| 45bd0d1f25 | |||
| f38084f0cf | |||
| 0d929a210f | |||
| 057f5beac6 | |||
| 26021e11f7 | |||
| 941ecc76a1 | |||
| 12806af6aa | |||
| 55886b0a50 | |||
| 577b5ef2bd | |||
| 780c38a5e5 | |||
| 6756bf7d4b | |||
| 9c0b2338cf | |||
| a0ef1a672c | |||
| 1fd265d316 | |||
| e3b23822fd | |||
| ab3c8268f0 | |||
| 6f306121a6 | |||
| 8399516475 | |||
| a60ea61291 | |||
| 64cff74861 | |||
| e2c1e656b9 | |||
| cdc1d0c02b | |||
| 151a0955cf | |||
| 40406bd3fe | |||
| 1cc3e6e510 | |||
| 064ab58f3c | |||
| 85c0a2e602 | |||
| 809e880bd1 | |||
| 7df093c94b | |||
| f572e29a13 | |||
| 681a6ef73c | |||
| bf37087a10 | |||
| a18b46d8ad | |||
| 74bb90b414 | |||
| 8334767c16 | |||
| 0d126afb1f | |||
| b7d80ab335 | |||
| b0e376ae76 | |||
| a3bcb6c15a | |||
| 88269636d3 | |||
| 4f5076346d | |||
| 89de913e95 | |||
| 0e73c4598e | |||
| 6b8aef9fdd | |||
| 1811dd67bf | |||
| 6d4379059c | |||
| a0f3704b41 | |||
| 9274b3f14d | |||
| 0a3e540a10 | |||
| 4657afd899 | |||
| 2082f06443 | |||
| b49f8623f6 | |||
| 69e4138223 | |||
| 5fec8666e3 | |||
| 8af4a94864 | |||
| ab873129f8 | |||
| 6155207407 | |||
| 98a58daf57 | |||
| 0aaa40cd53 | |||
| a6b44ea1bb | |||
| ca0ca2e5a8 | |||
| 14a388b3fe | |||
| 82a8d96fba | |||
| ad3ea966cb | |||
| 8d9dd1d19c | |||
| 337ee77a99 | |||
| c09991ebdb | |||
| 5188293242 | |||
| 2805fe0a06 | |||
| b4757b514d | |||
| 630edde10f | |||
| e9e139c364 | |||
| 60c01ef9a9 | |||
| 5dbadccd7f | |||
| 49a968219f | |||
| 8b934abcf2 | |||
| fa74d3e88c | |||
| 1123e25136 | |||
| 7c15001042 | |||
| bf388e5428 | |||
| 661be41c5a | |||
| 8be4ac6869 | |||
| 81f9259063 | |||
| a97424d46c | |||
| b639f3c8ec | |||
| 13ca1a7f09 | |||
| 16098c38c8 | |||
| c4b259e0f8 | |||
| e04855a0da | |||
| 8199f97e7a | |||
| 2eef3ab645 | |||
| d56ec56458 | |||
| 0293415db1 | |||
| 6e935d9d84 | |||
| 99ae561caa | |||
| 3f8421fc17 | |||
| 324b1039cf | |||
| 961d905433 | |||
| 3c79f3943f | |||
| 1e7b2c052a | |||
| ff082b98cb | |||
| 3236931416 | |||
| ed0c798252 | |||
| 5943b802d7 | |||
| b875a86e1d | |||
| 0a35a62235 | |||
| e98b07de03 | |||
| de5217745c | |||
| ec53adc2b7 | |||
| b57ab74ee7 | |||
| 69368d972d |
@@ -3,15 +3,16 @@
|
||||
# Pull all the submodules except llvm
|
||||
# Note: Tried to use git submodule status, but it takes over 20 seconds
|
||||
# shellcheck disable=SC2046
|
||||
git submodule -q update --init --depth 1 $(awk '/path/ && !/llvm/ { print $3 }' .gitmodules)
|
||||
git submodule -q update --init --depth 1 $(awk '/path/ && !/llvm/ && !/SPIRV/ { print $3 }' .gitmodules)
|
||||
|
||||
# Prefer newer Clang than in base system (see also .ci/install-freebsd.sh)
|
||||
# libc++ isn't in llvm* packages, so download manually
|
||||
fetch https://github.com/llvm/llvm-project/archive/refs/tags/llvmorg-13.0.1-rc1.tar.gz
|
||||
tar xf llvm*.tar.gz
|
||||
export CC=clang13 CXX=clang++13
|
||||
fetch https://github.com/llvm/llvm-project/releases/download/llvmorg-16.0.1/llvm-project-16.0.1.src.tar.xz
|
||||
tar xf llvm*.tar.xz
|
||||
export CC=clang16 CXX=clang++16
|
||||
cmake -B libcxx_build -G Ninja -S llvm*/libcxx \
|
||||
-DLLVM_CCACHE_BUILD=ON \
|
||||
-DLIBCXX_INCLUDE_BENCHMARKS=OFF \
|
||||
-DCMAKE_INSTALL_PREFIX:PATH=libcxx_prefix
|
||||
cmake --build libcxx_build
|
||||
cmake --install libcxx_build
|
||||
@@ -19,7 +20,8 @@ export CXXFLAGS="$CXXFLAGS -nostdinc++ -isystem$PWD/libcxx_prefix/include/c++/v1
|
||||
export LDFLAGS="$LDFLAGS -nostdlib++ -L$PWD/libcxx_prefix/lib -l:libc++.a -lcxxrt"
|
||||
|
||||
CONFIGURE_ARGS="
|
||||
-DWITH_LLVM=OFF
|
||||
-DWITH_LLVM=ON
|
||||
-DUSE_SDL=OFF
|
||||
-DUSE_PRECOMPILED_HEADERS=OFF
|
||||
-DUSE_NATIVE_INSTRUCTIONS=OFF
|
||||
-DUSE_SYSTEM_FFMPEG=ON
|
||||
|
||||
+5
-14
@@ -1,23 +1,13 @@
|
||||
#!/bin/sh -ex
|
||||
|
||||
# Setup Qt variables
|
||||
export QT_BASE_DIR=/opt/qt"${QTVERMIN}"
|
||||
export PATH="$QT_BASE_DIR"/bin:"$PATH"
|
||||
export LD_LIBRARY_PATH="$QT_BASE_DIR"/lib/x86_64-linux-gnu:"$QT_BASE_DIR"/lib
|
||||
|
||||
if [ -z "$CIRRUS_CI" ]; then
|
||||
cd rpcs3 || exit 1
|
||||
fi
|
||||
|
||||
# Pull all the submodules except llvm, since it is built separately and we just download that build
|
||||
# Pull all the submodules except llvm
|
||||
# Note: Tried to use git submodule status, but it takes over 20 seconds
|
||||
# shellcheck disable=SC2046
|
||||
git submodule -q update --init $(awk '/path/ && !/llvm/ { print $3 }' .gitmodules)
|
||||
|
||||
# Download pre-compiled llvm libs
|
||||
curl -sLO https://github.com/RPCS3/llvm-mirror/releases/download/custom-build/llvmlibs-linux.tar.gz
|
||||
mkdir llvmlibs
|
||||
tar -xzf ./llvmlibs-linux.tar.gz -C llvmlibs
|
||||
git submodule -q update --init $(awk '/path/ && !/llvm/ && !/SPIRV/ { print $3 }' .gitmodules)
|
||||
|
||||
mkdir build && cd build || exit 1
|
||||
|
||||
@@ -42,8 +32,6 @@ export CFLAGS="$CFLAGS -fuse-ld=${LINKER}"
|
||||
|
||||
cmake .. \
|
||||
-DCMAKE_INSTALL_PREFIX=/usr \
|
||||
-DBUILD_LLVM_SUBMODULE=OFF \
|
||||
-DLLVM_DIR=llvmlibs/lib/cmake/llvm/ \
|
||||
-DUSE_NATIVE_INSTRUCTIONS=OFF \
|
||||
-DUSE_PRECOMPILED_HEADERS=OFF \
|
||||
-DCMAKE_C_FLAGS="$CFLAGS" \
|
||||
@@ -51,7 +39,10 @@ cmake .. \
|
||||
-DCMAKE_AR="$AR" \
|
||||
-DCMAKE_RANLIB="$RANLIB" \
|
||||
-DUSE_SYSTEM_CURL=ON \
|
||||
-DUSE_SDL=ON \
|
||||
-DOpenGL_GL_PREFERENCE=LEGACY \
|
||||
-DLLVM_DIR=/opt/llvm/lib/cmake/llvm \
|
||||
-DSTATIC_LINK_LLVM=ON \
|
||||
-G Ninja
|
||||
|
||||
ninja; build_status=$?;
|
||||
|
||||
+83
-16
@@ -1,33 +1,100 @@
|
||||
#!/bin/sh -ex
|
||||
|
||||
brew update
|
||||
brew install llvm@13 sdl2 nasm qt@5 ninja cmake glew git p7zip create-dmg ccache
|
||||
export HOMEBREW_NO_AUTO_UPDATE=1
|
||||
brew install -f --overwrite nasm ninja git p7zip create-dmg ccache pipenv
|
||||
|
||||
export MACOSX_DEPLOYMENT_TARGET=11.6
|
||||
#/usr/sbin/softwareupdate --install-rosetta --agree-to-license
|
||||
arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
||||
arch -x86_64 /usr/local/bin/brew update
|
||||
arch -x86_64 /usr/local/bin/brew install -f --overwrite llvm@16 sdl2 glew cmake faudio vulkan-headers
|
||||
arch -x86_64 /usr/local/bin/brew link -f llvm@16
|
||||
|
||||
# moltenvk based on commit for 1.2.4 release
|
||||
wget https://raw.githubusercontent.com/Homebrew/homebrew-core/b233d4f9f40f26d81da11140defbfd578cfe4a69/Formula/molten-vk.rb
|
||||
arch -x86_64 /usr/local/bin/brew install -f --overwrite ./molten-vk.rb
|
||||
#export MACOSX_DEPLOYMENT_TARGET=12.0
|
||||
export CXX=clang++
|
||||
export CC=clang
|
||||
export Qt5_DIR="/usr/local/opt/qt@5/lib/cmake/Qt5"
|
||||
export PATH="/usr/local/opt/llvm@13/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Library/Apple/usr/bin"
|
||||
export LDFLAGS="-L/usr/local/opt/llvm@13/lib -Wl,-rpath,/usr/local/opt/llvm@13/lib"
|
||||
export CPPFLAGS="-I/usr/local/opt/llvm@13/include -msse -msse2 -mcx16 -no-pie"
|
||||
|
||||
git submodule update --init --recursive --depth 1
|
||||
export BREW_PATH;
|
||||
BREW_PATH="$(brew --prefix)"
|
||||
export BREW_X64_PATH;
|
||||
BREW_X64_PATH="$("/usr/local/bin/brew" --prefix)"
|
||||
export BREW_BIN="/usr/local/bin"
|
||||
export BREW_SBIN="/usr/local/sbin"
|
||||
export CMAKE_EXTRA_OPTS='-DLLVM_TARGETS_TO_BUILD=X86'
|
||||
|
||||
export WORKDIR;
|
||||
WORKDIR="$(pwd)"
|
||||
|
||||
# Get Qt
|
||||
if [ ! -d "/tmp/Qt/$QT_VER" ]; then
|
||||
mkdir -p "/tmp/Qt"
|
||||
git clone https://github.com/engnr/qt-downloader.git
|
||||
cd qt-downloader
|
||||
git checkout f52efee0f18668c6d6de2dec0234b8c4bc54c597
|
||||
cd "/tmp/Qt"
|
||||
"/opt/homebrew/bin/pipenv" run pip3 install py7zr requests semantic_version lxml
|
||||
mkdir -p "$QT_VER/macos" ; ln -s "macos" "$QT_VER/clang_64"
|
||||
"/opt/homebrew/bin/pipenv" run "$WORKDIR/qt-downloader/qt-downloader" macos desktop "$QT_VER" clang_64 --opensource --addons qtmultimedia
|
||||
fi
|
||||
|
||||
cd "$WORKDIR"
|
||||
ditto "/tmp/Qt/$QT_VER" "qt-downloader/$QT_VER"
|
||||
|
||||
export Qt6_DIR="$WORKDIR/qt-downloader/$QT_VER/clang_64/lib/cmake/Qt$QT_VER_MAIN"
|
||||
export SDL2_DIR="$BREW_X64_PATH/opt/sdl2/lib/cmake/SDL2"
|
||||
|
||||
export PATH="$BREW_X64_PATH/opt/llvm@16/bin:$WORKDIR/qt-downloader/$QT_VER/clang_64/bin:$BREW_BIN:$BREW_SBIN:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Library/Apple/usr/bin:$PATH"
|
||||
export LDFLAGS="-L$BREW_X64_PATH/lib -Wl,-rpath,$BREW_X64_PATH/lib"
|
||||
export CPPFLAGS="-I$BREW_X64_PATH/include -msse -msse2 -mcx16 -no-pie"
|
||||
export LIBRARY_PATH="$BREW_X64_PATH/lib"
|
||||
export LD_LIBRARY_PATH="$BREW_X64_PATH/lib"
|
||||
|
||||
export VULKAN_SDK
|
||||
VULKAN_SDK="$BREW_X64_PATH/opt/molten-vk"
|
||||
ln -s "$VULKAN_SDK/lib/libMoltenVK.dylib" "$VULKAN_SDK/lib/libvulkan.dylib"
|
||||
export VK_ICD_FILENAMES="$VULKAN_SDK/share/vulkan/icd.d/MoltenVK_icd.json"
|
||||
|
||||
export LLVM_DIR
|
||||
LLVM_DIR="BREW_X64_PATH/opt/llvm@16"
|
||||
# exclude FAudio, SPIRV and LLVM, and sdl from submodule update
|
||||
# shellcheck disable=SC2046
|
||||
git submodule -q update --init --depth=1 --jobs=8 $(awk '/path/ && !/FAudio/ && !/llvm/ && !/SPIRV/ && !/SDL/ { print $3 }' .gitmodules)
|
||||
|
||||
# 3rdparty fixes
|
||||
sed -i '' "s/extern const double NSAppKitVersionNumber;/const double NSAppKitVersionNumber = 1343;/g" 3rdparty/hidapi/hidapi/mac/hid.c
|
||||
|
||||
mkdir build && cd build || exit 1
|
||||
|
||||
cmake .. \
|
||||
-DUSE_DISCORD_RPC=OFF -DUSE_VULKAN=ON -DUSE_ALSA=OFF -DUSE_PULSE=OFF -DUSE_AUDIOUNIT=ON \
|
||||
-DLLVM_CCACHE_BUILD=OFF -DLLVM_TARGETS_TO_BUILD="X86" -DLLVM_BUILD_RUNTIME=OFF -DLLVM_BUILD_TOOLS=OFF \
|
||||
-DLLVM_INCLUDE_DOCS=OFF -DLLVM_INCLUDE_EXAMPLES=OFF -DLLVM_INCLUDE_TESTS=OFF -DLLVM_INCLUDE_TOOLS=OFF \
|
||||
-DLLVM_INCLUDE_UTILS=OFF -DLLVM_USE_PERF=OFF -DLLVM_ENABLE_Z3_SOLVER=OFF \
|
||||
"$BREW_X64_PATH/bin/cmake" .. \
|
||||
-DUSE_SDL=ON \
|
||||
-DUSE_DISCORD_RPC=ON \
|
||||
-DUSE_VULKAN=ON \
|
||||
-DUSE_ALSA=OFF \
|
||||
-DUSE_PULSE=OFF \
|
||||
-DUSE_AUDIOUNIT=ON \
|
||||
-DLLVM_CCACHE_BUILD=OFF \
|
||||
-DLLVM_BUILD_RUNTIME=OFF \
|
||||
-DLLVM_BUILD_TOOLS=OFF \
|
||||
-DLLVM_INCLUDE_DOCS=OFF \
|
||||
-DLLVM_INCLUDE_EXAMPLES=OFF \
|
||||
-DLLVM_INCLUDE_TESTS=OFF \
|
||||
-DLLVM_INCLUDE_TOOLS=OFF \
|
||||
-DLLVM_INCLUDE_UTILS=OFF \
|
||||
-DLLVM_USE_PERF=OFF \
|
||||
-DLLVM_ENABLE_Z3_SOLVER=OFF \
|
||||
-DUSE_NATIVE_INSTRUCTIONS=OFF \
|
||||
-DUSE_SYSTEM_MVK=OFF \
|
||||
-DUSE_SYSTEM_MVK=ON \
|
||||
-DUSE_SYSTEM_FAUDIO=ON \
|
||||
-DUSE_SYSTEM_SDL=ON \
|
||||
$CMAKE_EXTRA_OPTS \
|
||||
-DLLVM_TARGET_ARCH=X86_64 \
|
||||
-DCMAKE_OSX_ARCHITECTURES=x86_64 \
|
||||
-DCMAKE_IGNORE_PATH="$BREW_PATH/lib" \
|
||||
-G Ninja
|
||||
|
||||
ninja; build_status=$?;
|
||||
"$BREW_PATH/bin/ninja"; build_status=$?;
|
||||
|
||||
cd ..
|
||||
|
||||
@@ -36,4 +103,4 @@ cd ..
|
||||
|
||||
if [ "$build_status" -eq 0 ] && [ "$SHOULD_DEPLOY" = "true" ]; then
|
||||
.ci/deploy-mac.sh
|
||||
fi
|
||||
fi
|
||||
|
||||
+15
-37
@@ -3,44 +3,27 @@
|
||||
cd build || exit 1
|
||||
|
||||
if [ "$DEPLOY_APPIMAGE" = "true" ]; then
|
||||
DESTDIR=appdir ninja install
|
||||
QT_APPIMAGE="linuxdeployqt.AppImage"
|
||||
DESTDIR=AppDir ninja install
|
||||
|
||||
curl -sL "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage" > "$QT_APPIMAGE"
|
||||
chmod a+x "$QT_APPIMAGE"
|
||||
"./$QT_APPIMAGE" --appimage-extract
|
||||
./squashfs-root/AppRun ./appdir/usr/share/applications/*.desktop -bundle-non-qt-libs
|
||||
ls ./appdir/usr/lib/
|
||||
rm -r ./appdir/usr/share/doc
|
||||
cp "$(readlink -f /lib/x86_64-linux-gnu/libnsl.so.1)" ./appdir/usr/lib/libnsl.so.1
|
||||
export PATH=/rpcs3/build/squashfs-root/usr/bin/:"${PATH}"
|
||||
curl -sL -o /usr/bin/linuxdeploy https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage
|
||||
chmod +x /usr/bin/linuxdeploy
|
||||
curl -sL -o /usr/bin/linuxdeploy-plugin-qt https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage
|
||||
chmod +x /usr/bin/linuxdeploy-plugin-qt
|
||||
curl -sL -o linuxdeploy-plugin-checkrt.sh https://github.com/linuxdeploy/linuxdeploy-plugin-checkrt/releases/download/continuous/linuxdeploy-plugin-checkrt-x86_64.sh
|
||||
chmod +x ./linuxdeploy-plugin-checkrt.sh
|
||||
|
||||
EXTRA_QT_PLUGINS="svg;" APPIMAGE_EXTRACT_AND_RUN=1 linuxdeploy --appdir AppDir --plugin qt
|
||||
|
||||
# Embed newer libstdc++ for distros that don't come with it (ubuntu 16.04)
|
||||
mkdir -p appdir/usr/optional/ ; mkdir -p appdir/usr/optional/libstdc++/
|
||||
cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6 ./appdir/usr/optional/libstdc++/
|
||||
|
||||
# Remove libwayland-client because it has platform-dependent exports and breaks other OSes
|
||||
rm -f ./appdir/usr/lib/libwayland-client.so*
|
||||
|
||||
# Install latest appimage runner
|
||||
rm ./appdir/AppRun
|
||||
curl -sL https://github.com/RPCS3/AppImageKit-checkrt/releases/download/continuous2/AppRun-patched-x86_64 -o ./appdir/AppRun
|
||||
chmod a+x ./appdir/AppRun
|
||||
curl -sL https://github.com/RPCS3/AppImageKit-checkrt/releases/download/continuous2/exec-x86_64.so -o ./appdir/usr/optional/exec.so
|
||||
rm -f ./AppDir/usr/lib/libwayland-client.so*
|
||||
|
||||
# Compile checker binary for AppImageKit-checkrt
|
||||
# Remove git directory containing local commit history file
|
||||
rm -rf ./AppDir/usr/share/rpcs3/git
|
||||
|
||||
# This may need updating if you update the compiler or rpcs3 uses newer c++ features
|
||||
# See https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/config/abi/pre/gnu.ver
|
||||
# for which definitions correlate to which CXXABI version.
|
||||
# Currently we target a minimum of GLIBCXX_3.4.29 and CXXABI_1.3.11
|
||||
printf "#include <sstream>\n#include <exception>\n#include <memory_resource>\nint main(){auto x = std::stringbuf();x.get_allocator();std::make_exception_ptr(0);std::pmr::get_default_resource();}" \
|
||||
| $CXX -x c++ -std=c++2a -o ./appdir/usr/optional/checker -
|
||||
./linuxdeploy-plugin-checkrt.sh --appdir AppDir
|
||||
|
||||
# Package it up and send it off
|
||||
./squashfs-root/usr/bin/appimagetool "$APPDIR"
|
||||
|
||||
ls
|
||||
linuxdeploy --appimage-extract
|
||||
./squashfs-root/plugins/linuxdeploy-plugin-appimage/usr/bin/appimagetool AppDir -g
|
||||
|
||||
COMM_TAG=$(awk '/version{.*}/ { printf("%d.%d.%d", $5, $6, $7) }' ../rpcs3/rpcs3_version.cpp)
|
||||
COMM_COUNT="$(git rev-list --count HEAD)"
|
||||
@@ -57,9 +40,4 @@ if [ "$DEPLOY_APPIMAGE" = "true" ]; then
|
||||
FILESIZE=$(stat -c %s ./rpcs3*.AppImage)
|
||||
SHA256SUM=$(sha256sum ./rpcs3*.AppImage | awk '{ print $1 }')
|
||||
echo "${SHA256SUM};${FILESIZE}B" > "$RELEASE_MESSAGE"
|
||||
|
||||
fi
|
||||
|
||||
if [ "$DEPLOY_PPA" = "true" ]; then
|
||||
export DEBFULLNAME="RPCS3 Build Bot"
|
||||
fi
|
||||
|
||||
+7
-4
@@ -14,14 +14,17 @@ echo "AVVER=$AVVER" >> ../.ci/ci-vars.env
|
||||
|
||||
cd bin
|
||||
mkdir "rpcs3.app/Contents/lib/"
|
||||
cp "/usr/local/opt/llvm@13/lib/c++/libc++abi.1.0.dylib" "rpcs3.app/Contents/lib/libc++abi.1.dylib"
|
||||
|
||||
cp "/usr/local/opt/llvm@16/lib/c++/libc++abi.1.0.dylib" "rpcs3.app/Contents/lib/libc++abi.1.dylib"
|
||||
|
||||
rm -rf "rpcs3.app/Contents/Frameworks/QtPdf.framework" \
|
||||
"rpcs3.app/Contents/Frameworks/QtQml.framework" \
|
||||
"rpcs3.app/Contents/Frameworks/QtQmlModels.framework" \
|
||||
"rpcs3.app/Contents/Frameworks/QtQuick.framework" \
|
||||
"rpcs3.app/Contents/Frameworks/QtVirtualKeyboard.framework" \
|
||||
"rpcs3.app/Contents/Plugins/platforminputcontexts" \
|
||||
"rpcs3.app/Contents/Plugins/virtualkeyboard"
|
||||
"rpcs3.app/Contents/Plugins/virtualkeyboard" \
|
||||
"rpcs3.app/Contents/Resources/git"
|
||||
|
||||
# Need to do this rename hack due to case insensitive filesystem
|
||||
mv rpcs3.app RPCS3_.app
|
||||
@@ -33,7 +36,7 @@ echo "IconIndex=0" >> Quickstart.url
|
||||
|
||||
DMG_FILEPATH="$BUILD_ARTIFACTSTAGINGDIRECTORY/rpcs3-v${COMM_TAG}-${COMM_COUNT}-${COMM_HASH}_macos.dmg"
|
||||
|
||||
create-dmg --volname RPCS3 \
|
||||
/opt/homebrew/bin/create-dmg --volname RPCS3 \
|
||||
--window-size 800 400 \
|
||||
--icon-size 100 \
|
||||
--icon rpcs3.app 200 190 \
|
||||
@@ -45,7 +48,7 @@ create-dmg --volname RPCS3 \
|
||||
"$DMG_FILEPATH" \
|
||||
RPCS3.app
|
||||
|
||||
7z a -mx9 rpcs3-v"${COMM_TAG}"-"${COMM_COUNT}"-"${COMM_HASH}"_macos.7z RPCS3.app
|
||||
/opt/homebrew/bin/7z a -mx9 rpcs3-v"${COMM_TAG}"-"${COMM_COUNT}"-"${COMM_HASH}"_macos.7z RPCS3.app
|
||||
|
||||
FILESIZE=$(stat -f %z "$DMG_FILEPATH")
|
||||
SHA256SUM=$(shasum -a 256 "$DMG_FILEPATH" | awk '{ print $1 }')
|
||||
|
||||
@@ -5,6 +5,7 @@ ARTIFACT_DIR="$BUILD_ARTIFACTSTAGINGDIRECTORY"
|
||||
|
||||
# Remove unecessary files
|
||||
rm -f ./bin/rpcs3.exp ./bin/rpcs3.lib ./bin/rpcs3.pdb ./bin/vc_redist.x64.exe
|
||||
rm -rf ./bin/git
|
||||
|
||||
# Prepare compatibility database for packaging, as well as
|
||||
# certificate for ssl (auto-updater)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/bin/sh -ex
|
||||
|
||||
curl -L -o "./llvm.lock" "https://github.com/RPCS3/llvm-mirror/releases/download/custom-build-win/llvmlibs_mt.7z.sha256"
|
||||
curl -L -o "./llvm.lock" "https://github.com/RPCS3/llvm-mirror/releases/download/custom-build-win-16.0.1/llvmlibs_mt.7z.sha256"
|
||||
curl -L -o "./glslang.lock" "https://github.com/RPCS3/glslang/releases/download/custom-build-win/glslanglibs_mt.7z.sha256"
|
||||
|
||||
@@ -2,17 +2,17 @@
|
||||
# NOTE: this script is run under root permissions
|
||||
# shellcheck shell=sh disable=SC2096
|
||||
|
||||
# RPCS3 often needs recent Qt5 and Vulkan-Headers
|
||||
# RPCS3 often needs recent Qt and Vulkan-Headers
|
||||
sed -i '' 's/quarterly/latest/' /etc/pkg/FreeBSD.conf
|
||||
|
||||
export ASSUME_ALWAYS_YES=true
|
||||
pkg info # debug
|
||||
|
||||
# Prefer newer Clang than in base system (see also .ci/build-freebsd.sh)
|
||||
pkg install llvm13
|
||||
pkg install llvm16
|
||||
|
||||
# Mandatory dependencies (qt5-dbus and qt5-gui are pulled via qt5-widgets)
|
||||
pkg install git ccache cmake ninja qt5-qmake qt5-buildtools qt5-widgets qt5-concurrent qt5-multimedia qt5-svg glew openal-soft ffmpeg
|
||||
# Mandatory dependencies (qt6-base and qt6-svg are pulled via qt6-multimedia)
|
||||
pkg install git ccache cmake ninja qt6-multimedia glew openal-soft ffmpeg
|
||||
|
||||
# Optional dependencies (libevdev is pulled by qt5-gui)
|
||||
# Optional dependencies (libevdev is pulled by qt6-base)
|
||||
pkg install pkgconf alsa-lib pulseaudio sdl2 evdev-proto vulkan-headers vulkan-loader
|
||||
|
||||
+14
-13
@@ -11,25 +11,26 @@ PR_NUMBER="$SYSTEM_PULLREQUEST_PULLREQUESTID"
|
||||
QT_HOST="http://qt.mirror.constant.com/"
|
||||
QT_URL_VER=$(echo "$QT_VER" | sed "s/\.//g")
|
||||
QT_VER_MSVC_UP=$(echo "${QT_VER_MSVC}" | tr '[:lower:]' '[:upper:]')
|
||||
QT_PREFIX="online/qtsdkrepository/windows_x86/desktop/qt${QT_VER_MAIN}_${QT_URL_VER}/qt.qt${QT_VER_MAIN}.${QT_URL_VER}.win64_${QT_VER_MSVC}_64/${QT_VER}-0-${QT_DATE}"
|
||||
QT_SUFFIX="-Windows-Windows_10-${QT_VER_MSVC_UP}-Windows-Windows_10-X86_64.7z"
|
||||
QT_BASE_URL="${QT_HOST}${QT_PREFIX}qtbase${QT_SUFFIX}"
|
||||
QT_WINE_URL="${QT_HOST}${QT_PREFIX}qtwinextras${QT_SUFFIX}"
|
||||
QT_DECL_URL="${QT_HOST}${QT_PREFIX}qtdeclarative${QT_SUFFIX}"
|
||||
QT_TOOL_URL="${QT_HOST}${QT_PREFIX}qttools${QT_SUFFIX}"
|
||||
QT_MM_URL="${QT_HOST}${QT_PREFIX}qtmultimedia${QT_SUFFIX}"
|
||||
QT_SVG_URL="${QT_HOST}${QT_PREFIX}qtsvg${QT_SUFFIX}"
|
||||
LLVMLIBS_URL='https://github.com/RPCS3/llvm-mirror/releases/download/custom-build-win/llvmlibs_mt.7z'
|
||||
QT_PREFIX="online/qtsdkrepository/windows_x86/desktop/qt${QT_VER_MAIN}_${QT_URL_VER}/qt.qt${QT_VER_MAIN}.${QT_URL_VER}."
|
||||
QT_PREFIX_2="win64_${QT_VER_MSVC}_64/${QT_VER}-0-${QT_DATE}"
|
||||
QT_SUFFIX="-Windows-Windows_10_22H2-${QT_VER_MSVC_UP}-Windows-Windows_10_22H2-X86_64.7z"
|
||||
QT_BASE_URL="${QT_HOST}${QT_PREFIX}${QT_PREFIX_2}qtbase${QT_SUFFIX}"
|
||||
QT_DECL_URL="${QT_HOST}${QT_PREFIX}${QT_PREFIX_2}qtdeclarative${QT_SUFFIX}"
|
||||
QT_TOOL_URL="${QT_HOST}${QT_PREFIX}${QT_PREFIX_2}qttools${QT_SUFFIX}"
|
||||
QT_MM_URL="${QT_HOST}${QT_PREFIX}addons.qtmultimedia.${QT_PREFIX_2}qtmultimedia${QT_SUFFIX}"
|
||||
QT_SVG_URL="${QT_HOST}${QT_PREFIX}${QT_PREFIX_2}qtsvg${QT_SUFFIX}"
|
||||
QT_5CMP_URL="${QT_HOST}${QT_PREFIX}qt5compat.${QT_PREFIX_2}qt5compat${QT_SUFFIX}"
|
||||
LLVMLIBS_URL='https://github.com/RPCS3/llvm-mirror/releases/download/custom-build-win-16.0.1/llvmlibs_mt.7z'
|
||||
GLSLANG_URL='https://github.com/RPCS3/glslang/releases/download/custom-build-win/glslanglibs_mt.7z'
|
||||
VULKAN_SDK_URL="https://www.dropbox.com/s/o918fc11pfk8x9c/VulkanSDK-${VULKAN_VER}-Installer.exe"
|
||||
VULKAN_SDK_URL="https://www.dropbox.com/s/cs77c3iv5mbo0bt/VulkanSDK-${VULKAN_VER}-Installer.exe"
|
||||
|
||||
DEP_URLS=" \
|
||||
$QT_BASE_URL \
|
||||
$QT_WINE_URL \
|
||||
$QT_DECL_URL \
|
||||
$QT_TOOL_URL \
|
||||
$QT_MM_URL \
|
||||
$QT_SVG_URL \
|
||||
$QT_5CMP_URL \
|
||||
$LLVMLIBS_URL \
|
||||
$GLSLANG_URL \
|
||||
$VULKAN_SDK_URL"
|
||||
@@ -40,7 +41,7 @@ DEP_URLS=" \
|
||||
# Pull all the submodules except llvm, since it is built separately and we just download that build
|
||||
# Note: Tried to use git submodule status, but it takes over 20 seconds
|
||||
# shellcheck disable=SC2046
|
||||
git submodule -q update --init --depth=1 --jobs=8 $(awk '/path/ && !/llvm/ { print $3 }' .gitmodules)
|
||||
git submodule -q update --init --depth=1 --jobs=8 $(awk '/path/ && !/FAudio/ && !/llvm/ && !/SPIRV/ { print $3 }' .gitmodules)
|
||||
|
||||
# Git bash doesn't have rev, so here it is
|
||||
rev()
|
||||
@@ -79,7 +80,7 @@ for url in $DEP_URLS; do
|
||||
# shellcheck disable=SC1003
|
||||
case "$url" in
|
||||
*qt*) checksum=$(curl -L "${url}.sha1"); algo="sha1"; outDir='C:\Qt\' ;;
|
||||
*llvm*) checksum=$(curl -L "${url}.sha256"); algo="sha256"; outDir="." ;;
|
||||
*llvm*) checksum=$(curl -L "${url}.sha256"); algo="sha256"; outDir="./3rdparty/llvm" ;;
|
||||
*glslang*) checksum=$(curl -L "${url}.sha256"); algo="sha256"; outDir="./lib/Release-x64" ;;
|
||||
*Vulkan*)
|
||||
# Vulkan setup needs to be run in batch environment
|
||||
|
||||
+17
-11
@@ -6,6 +6,8 @@ env:
|
||||
BUILD_SOURCEVERSION: $CIRRUS_CHANGE_IN_REPO
|
||||
BUILD_SOURCEBRANCHNAME: $CIRRUS_BRANCH
|
||||
RPCS3_TOKEN: ENCRYPTED[!a4c3850e29ab150692286a74bec29819d25971a7ec431b86de2a35f7ed90c5b2ab3c93469f9298e30924d843599110e9!]
|
||||
QT_VER_MAIN: '6'
|
||||
QT_VER: '6.5.2'
|
||||
|
||||
windows_task:
|
||||
matrix:
|
||||
@@ -17,14 +19,12 @@ windows_task:
|
||||
env:
|
||||
CIRRUS_SHELL: "bash"
|
||||
COMPILER: msvc
|
||||
QT_VER_MAIN: '5'
|
||||
BUILD_ARTIFACTSTAGINGDIRECTORY: ${CIRRUS_WORKING_DIR}\artifacts\
|
||||
QT_VER: '5.15.2'
|
||||
QT_VER_MSVC: 'msvc2019'
|
||||
QT_DATE: '202011130602'
|
||||
QT_DATE: '202307080351'
|
||||
QTDIR: C:\Qt\${QT_VER}\${QT_VER_MSVC}_64
|
||||
VULKAN_VER: '1.3.204.0'
|
||||
VULKAN_SDK_SHA: '41f4996335cc5a545d7b2f6e5ff29cf3867789aae4be053a7069aa93408861fa'
|
||||
VULKAN_VER: '1.3.224.1'
|
||||
VULKAN_SDK_SHA: '2029e652e39ee6a6036cff3765da31e1e6c595fd2413d3cd111dfab7855621ea'
|
||||
VULKAN_SDK: C:\VulkanSDK\${VULKAN_VER}
|
||||
CACHE_DIR: "./cache"
|
||||
UPLOAD_COMMIT_HASH: 7d09e3be30805911226241afbb14f8cdc2eb054e
|
||||
@@ -61,7 +61,7 @@ windows_task:
|
||||
|
||||
linux_task:
|
||||
container:
|
||||
image: rpcs3/rpcs3-ci-bionic:1.5
|
||||
image: rpcs3/rpcs3-ci-focal:1.0
|
||||
cpu: 4
|
||||
memory: 16G
|
||||
env:
|
||||
@@ -108,7 +108,7 @@ freebsd_task:
|
||||
matrix:
|
||||
- name: Cirrus FreeBSD
|
||||
freebsd_instance:
|
||||
image_family: freebsd-13-1
|
||||
image_family: freebsd-13-2
|
||||
cpu: 8
|
||||
memory: 8G
|
||||
env:
|
||||
@@ -120,15 +120,21 @@ freebsd_task:
|
||||
script: "./.ci/build-freebsd.sh"
|
||||
|
||||
macos_task:
|
||||
timeout_in: 120m
|
||||
timeout_in: 12000m
|
||||
homebrew_cache:
|
||||
folder: /Users/admin/Library/Caches/Homebrew
|
||||
qt_cache:
|
||||
folder: /tmp/Qt
|
||||
ccache_cache:
|
||||
folder: /tmp/ccache_dir
|
||||
matrix:
|
||||
- name: Cirrus macOS
|
||||
osx_instance:
|
||||
image: monterey-xcode-13.3
|
||||
macos_instance:
|
||||
image: ghcr.io/cirruslabs/macos-monterey-xcode:latest
|
||||
mac_script:
|
||||
- mkdir artifacts
|
||||
- chmod +x ".ci/build-mac.sh"
|
||||
- chmod +x ".ci/deploy-mac.sh"
|
||||
- ".ci/build-mac.sh"
|
||||
env:
|
||||
BUILD_ARTIFACTSTAGINGDIRECTORY: ${CIRRUS_WORKING_DIR}/artifacts
|
||||
@@ -141,7 +147,7 @@ macos_task:
|
||||
RELEASE_MESSAGE: "../GitHubReleaseMessage.txt"
|
||||
artifacts:
|
||||
name: Artifact
|
||||
path: "artifacts/rpcs3-*_macos.*"
|
||||
path: "artifacts/*"
|
||||
push_script: |
|
||||
if [ "$CIRRUS_REPO_OWNER" = "RPCS3" ] && [ -z "$CIRRUS_PR" ] && [ "$CIRRUS_BRANCH" = "master" ]; then
|
||||
source './.ci/export-cirrus-vars.sh'
|
||||
|
||||
@@ -29,8 +29,8 @@ body:
|
||||
Please provide the _exact_ build (or commit) information that introduced the regression you're reporting.
|
||||
* Please see [How to find the build that caused a regression](https://wiki.rpcs3.net/index.php?title=Help:Using_different_versions_of_RPCS3#How_to_find_the_build_that_caused_a_regression.3F) in our wiki.
|
||||
* You can find [History of RPCS3 builds](https://rpcs3.net/compatibility?b) here.
|
||||
|
||||
Make sure you're running with settings as close to default as possible
|
||||
|
||||
Make sure you're running with settings as close to default as possible
|
||||
* **Do NOT enable any emulator game patches when reporting issues**
|
||||
* Only change settings that are required for the game to work
|
||||
- type: input
|
||||
@@ -48,7 +48,7 @@ body:
|
||||
Obtaining the log file:
|
||||
* Run the game until you find the regression.
|
||||
* Completely close RPCS3 and locate the log file.
|
||||
|
||||
|
||||
RPCS3's Log file will be ```RPCS3.log.gz``` (sometimes shows as RPCS3.log with zip icon) or ```RPCS3.log``` (sometimes shows as RPCS3 wtih notepad icon).
|
||||
* On Windows it will be in the RPCS3 directory near the executable
|
||||
* On Linux it will be in ```~/.cache/rpcs3/```
|
||||
@@ -70,21 +70,21 @@ body:
|
||||
* To create an RSX capture, use _Create_ _RSX_ _Capture_ under _Utilities_.
|
||||
* Captures will be stored in RPCS3 folder → captures.
|
||||
* To create a RenderDoc capture, please refer to [RenderDoc's documentation](https://renderdoc.org/docs/how/how_capture_frame.html).
|
||||
- type: textarea
|
||||
- type: textarea
|
||||
id: captures
|
||||
attributes:
|
||||
label: Attach capture files for visual issues
|
||||
description: Compress your capture with 7z, Rar etc. and attach it here, or upload it to the cloud (Dropbox, Mega etc) and add a link to it.
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
- type: textarea
|
||||
id: system-info
|
||||
attributes:
|
||||
label: System configuration
|
||||
description: Provide information about your system, such as operating system, CPU and GPU model, GPU driver version and other information that describes your system configuration.
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
- type: textarea
|
||||
id: other-details
|
||||
attributes:
|
||||
label: Other details
|
||||
|
||||
@@ -28,13 +28,13 @@ body:
|
||||
attributes:
|
||||
value: |
|
||||
# Log files
|
||||
|
||||
|
||||
Provide a log file that includes the bug you're reporting.
|
||||
|
||||
|
||||
Obtaining the log file:
|
||||
* Run the game until you find the regression.
|
||||
* Completely close RPCS3 and locate the log file.
|
||||
|
||||
|
||||
RPCS3's Log file will be ```RPCS3.log.gz``` (sometimes shows as RPCS3.log with zip icon) or ```RPCS3.log``` (sometimes shows as RPCS3 wtih notepad icon).
|
||||
* On Windows it will be in the RPCS3 directory near the executable
|
||||
* On Linux it will be in ```~/.cache/rpcs3/```
|
||||
@@ -55,21 +55,21 @@ body:
|
||||
* To create an RSX capture, use _Create_ _RSX_ _Capture_ under _Utilities_.
|
||||
* Captures will be stored in RPCS3 folder → captures.
|
||||
* To create a RenderDoc capture, please refer to [RenderDoc's documentation](https://renderdoc.org/docs/how/how_capture_frame.html).
|
||||
- type: textarea
|
||||
- type: textarea
|
||||
id: captures
|
||||
attributes:
|
||||
label: Attach capture files for visual issues
|
||||
description: Compress your capture with 7z, Rar etc. and attach it here, or upload it to the cloud (Dropbox, Mega etc) and add a link to it.
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
- type: textarea
|
||||
id: system-info
|
||||
attributes:
|
||||
label: System configuration
|
||||
description: Provide information about your system, such as operating system, CPU and GPU model, GPU driver version and other information that describes your system configuration.
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
- type: textarea
|
||||
id: other-details
|
||||
attributes:
|
||||
label: Other details
|
||||
|
||||
@@ -29,7 +29,7 @@ body:
|
||||
* Why your feature is important to RPCS3.
|
||||
* If the feature is implemented in other projects, attach screenshots.
|
||||
* If this feature is something that a game is trying to use, upload a log file for it.
|
||||
|
||||
|
||||
RPCS3's Log file will be ```RPCS3.log.gz``` (sometimes shows as RPCS3.log with zip icon) or ```RPCS3.log``` (sometimes shows as RPCS3 wtih notepad icon).
|
||||
* On Windows it will be in the RPCS3 directory near the executable
|
||||
* On Linux it will be in ```~/.cache/rpcs3/```
|
||||
|
||||
+15
-1
@@ -31,12 +31,12 @@
|
||||
*.wav
|
||||
|
||||
/build
|
||||
/build-*
|
||||
/lib
|
||||
/tmp
|
||||
/ipch
|
||||
/rpcs3/Debug
|
||||
/rpcs3/Release
|
||||
/llvm_build
|
||||
|
||||
!/bin
|
||||
/bin/*
|
||||
@@ -104,6 +104,7 @@ rpcs3/rpcs3_autogen/*
|
||||
|
||||
# QtCreator
|
||||
CMakeLists.txt.user
|
||||
*.autosave
|
||||
|
||||
# CLion
|
||||
/.idea/*
|
||||
@@ -122,7 +123,20 @@ yaml-cpp.pc
|
||||
/3rdparty/libusb_cmake/config.h
|
||||
/3rdparty/libusb_cmake/libusb-1.0.pc
|
||||
|
||||
# miniupnp
|
||||
/3rdparty/miniupnp/x64/*
|
||||
|
||||
# llvm
|
||||
/3rdparty/llvm/llvm_build
|
||||
|
||||
# legacy llvm
|
||||
/llvm_build
|
||||
|
||||
# ssl certificate
|
||||
cacert.pem
|
||||
|
||||
_ReSharper.*/
|
||||
CMakeUserPresets.json
|
||||
|
||||
.cache/
|
||||
.lldbinit
|
||||
|
||||
+14
-3
@@ -7,9 +7,9 @@
|
||||
url = ../../RPCS3/asmjit.git
|
||||
branch = aarch64
|
||||
ignore = dirty
|
||||
[submodule "llvm"]
|
||||
path = llvm
|
||||
url = ../../RPCS3/llvm-mirror.git
|
||||
[submodule "3rdparty/llvm/llvm"]
|
||||
path = 3rdparty/llvm/llvm
|
||||
url = ../../llvm/llvm-project.git
|
||||
ignore = dirty
|
||||
[submodule "3rdparty/glslang"]
|
||||
path = 3rdparty/glslang/glslang
|
||||
@@ -76,3 +76,14 @@
|
||||
path = 3rdparty/SoundTouch/soundtouch
|
||||
url = ../../RPCS3/soundtouch.git
|
||||
ignore = dirty
|
||||
[submodule "3rdparty/libsdl-org/SDL"]
|
||||
path = 3rdparty/libsdl-org/SDL
|
||||
url = ../../libsdl-org/SDL.git
|
||||
ignore = dirty
|
||||
[submodule "3rdparty/miniupnp/miniupnp"]
|
||||
path = 3rdparty/miniupnp/miniupnp
|
||||
url = ../../miniupnp/miniupnp.git
|
||||
ignore = dirty
|
||||
[submodule "3rdparty/rtmidi/rtmidi"]
|
||||
path = 3rdparty/rtmidi/rtmidi
|
||||
url = ../../thestk/rtmidi
|
||||
|
||||
Vendored
+89
-51
@@ -4,6 +4,11 @@ include(CMakeDependentOption)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 20)
|
||||
|
||||
# Warnings are silenced for 3rdparty code
|
||||
if(NOT MSVC)
|
||||
add_compile_options("$<$<COMPILE_LANGUAGE:CXX,C>:-w>")
|
||||
endif()
|
||||
|
||||
# Dummy target to use when lib isn't available
|
||||
add_library(3rdparty_dummy_lib INTERFACE)
|
||||
|
||||
@@ -42,16 +47,16 @@ endif()
|
||||
|
||||
|
||||
# libusb
|
||||
if(CMAKE_SYSTEM MATCHES "DragonFly|FreeBSD")
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "DragonFly|FreeBSD")
|
||||
pkg_check_modules(LIBUSB REQUIRED IMPORTED_TARGET libusb-1.0>=1.0 )
|
||||
CMAKE_DEPENDENT_OPTION( USE_SYSTEM_LIBUSB "Use system libusb-1.0 as shared library" ON
|
||||
cmake_dependent_option(USE_SYSTEM_LIBUSB "Use system libusb-1.0 as shared library" ON
|
||||
"LIBUSB_FOUND" OFF)
|
||||
else()
|
||||
pkg_check_modules(LIBUSB IMPORTED_TARGET libusb-1.0>=1.0 )
|
||||
CMAKE_DEPENDENT_OPTION( USE_SYSTEM_LIBUSB "Use system libusb-1.0 as shared library" OFF
|
||||
cmake_dependent_option(USE_SYSTEM_LIBUSB "Use system libusb-1.0 as shared library" OFF
|
||||
"LIBUSB_FOUND" OFF)
|
||||
endif()
|
||||
if(CMAKE_SYSTEM MATCHES "DragonFly|FreeBSD")
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "DragonFly|FreeBSD")
|
||||
# Always use system libusb as reference implementation isn't supported
|
||||
add_library(usb-1.0-shared INTERFACE)
|
||||
target_link_libraries(usb-1.0-shared INTERFACE PkgConfig::LIBUSB)
|
||||
@@ -78,7 +83,7 @@ add_subdirectory(hidapi)
|
||||
|
||||
# Vulkan
|
||||
add_subdirectory(glslang EXCLUDE_FROM_ALL)
|
||||
add_subdirectory(SPIRV EXCLUDE_FROM_ALL)
|
||||
#add_subdirectory(SPIRV EXCLUDE_FROM_ALL)
|
||||
|
||||
|
||||
# yaml-cpp
|
||||
@@ -100,10 +105,6 @@ endif()
|
||||
|
||||
# OpenGL
|
||||
|
||||
# Prefer GLVND for OpenGL rather than legacy, unless it's been defined elsewhere, in the case of AppImage builds
|
||||
if(NOT DEFINED OpenGL_GL_PREFERENCE)
|
||||
set(OpenGL_GL_PREFERENCE GLVND)
|
||||
endif()
|
||||
find_package(OpenGL REQUIRED)
|
||||
|
||||
add_library(3rdparty_opengl INTERFACE)
|
||||
@@ -111,17 +112,14 @@ target_include_directories(3rdparty_opengl INTERFACE GL)
|
||||
|
||||
if (WIN32)
|
||||
if(NOT MSVC)
|
||||
target_link_libraries(3rdparty_opengl INTERFACE ${OPENGL_LIBRARIES} opengl32.lib glu32.lib)
|
||||
target_link_libraries(3rdparty_opengl INTERFACE OpenGL::GL OpenGL::GLU)
|
||||
else()
|
||||
target_link_libraries(3rdparty_opengl INTERFACE dxgi.lib d2d1.lib dwrite.lib)
|
||||
endif()
|
||||
elseif(APPLE)
|
||||
target_link_libraries(3rdparty_opengl INTERFACE OpenGL::GL OpenGL::GLU)
|
||||
else()
|
||||
target_link_libraries(3rdparty_opengl INTERFACE ${OPENGL_LIBRARIES})
|
||||
|
||||
target_compile_definitions(3rdparty_opengl
|
||||
INTERFACE
|
||||
-DGL_GLEXT_PROTOTYPES
|
||||
-DGLX_GLXEXT_PROTOTYPES)
|
||||
target_link_libraries(3rdparty_opengl INTERFACE OpenGL::GL OpenGL::GLU OpenGL::GLX)
|
||||
endif()
|
||||
|
||||
|
||||
@@ -142,7 +140,7 @@ add_subdirectory(SoundTouch EXCLUDE_FROM_ALL)
|
||||
# libevdev
|
||||
set(LIBEVDEV_TARGET 3rdparty_dummy_lib)
|
||||
if(USE_LIBEVDEV)
|
||||
pkg_check_modules(LIBEVDEV libevdev)
|
||||
pkg_check_modules(LIBEVDEV libevdev libudev)
|
||||
if(LIBEVDEV_FOUND)
|
||||
add_library(3rdparty_libevdev INTERFACE)
|
||||
target_compile_definitions(3rdparty_libevdev INTERFACE -DHAVE_LIBEVDEV)
|
||||
@@ -160,15 +158,15 @@ set(VULKAN_TARGET 3rdparty_dummy_lib)
|
||||
if(USE_VULKAN)
|
||||
if(APPLE)
|
||||
if(USE_SYSTEM_MVK)
|
||||
message("-- RPCS3: Using system MoltenVK")
|
||||
message(STATUS "RPCS3: Using system MoltenVK")
|
||||
else()
|
||||
message("-- RPCS3: MoltenVK submodule")
|
||||
message(STATUS "RPCS3: MoltenVK submodule")
|
||||
|
||||
execute_process(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" .
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK"
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK"
|
||||
)
|
||||
execute_process(COMMAND "${CMAKE_COMMAND}" --build .
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK"
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK"
|
||||
)
|
||||
|
||||
add_library(moltenvk_lib SHARED IMPORTED)
|
||||
@@ -189,7 +187,7 @@ if(USE_VULKAN)
|
||||
if(VULKAN_FOUND)
|
||||
add_library(3rdparty_vulkan INTERFACE)
|
||||
target_compile_definitions(3rdparty_vulkan INTERFACE -DHAVE_VULKAN)
|
||||
target_link_libraries(3rdparty_vulkan INTERFACE SPIRV SPIRV-Tools-opt Vulkan::Vulkan)
|
||||
target_link_libraries(3rdparty_vulkan INTERFACE SPIRV Vulkan::Vulkan)
|
||||
|
||||
if(UNIX AND NOT APPLE)
|
||||
find_package(Wayland)
|
||||
@@ -204,9 +202,9 @@ if(USE_VULKAN)
|
||||
|
||||
set(VULKAN_TARGET 3rdparty_vulkan)
|
||||
else()
|
||||
message("WARNING! USE_VULKAN was enabled, but libvulkan was not found. RPCS3 will be compiled without Vulkan support.")
|
||||
message(WARNING "USE_VULKAN was enabled, but libvulkan was not found. RPCS3 will be compiled without Vulkan support.")
|
||||
if(APPLE)
|
||||
message( FATAL_ERROR "ERROR! To build without Vulkan support on macOS, please disable USE_VULKAN.")
|
||||
message(FATAL_ERROR "To build without Vulkan support on macOS, please disable USE_VULKAN.")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
@@ -222,21 +220,28 @@ set(FAUDIO_TARGET 3rdparty_dummy_lib)
|
||||
if(USE_FAUDIO)
|
||||
# FAudio depends on SDL2
|
||||
find_package(SDL2)
|
||||
if (NOT SDL2_FOUND OR SDL2_VERSION VERSION_LESS 2.0.12)
|
||||
message(WARNING
|
||||
"-- RPCS3: FAudio requires SDL 2.0.9 or newer. Please note, this warning"
|
||||
"can also be displayed with SDL2 versions between 2.0.9-2.0.12, as the"
|
||||
"CMake config files are not correctly installed. Since a valid SDL2"
|
||||
">=2.0.9 version cannot be found, building with FAudio will be skipped.")
|
||||
set(USE_FAUDIO False)
|
||||
else()
|
||||
if (USE_SYSTEM_FAUDIO)
|
||||
if (USE_SYSTEM_FAUDIO)
|
||||
if (NOT SDL2_FOUND OR SDL2_VERSION VERSION_LESS 2.0.12)
|
||||
message(WARNING
|
||||
"RPCS3: FAudio requires SDL 2.0.9 or newer. Please note, this warning"
|
||||
"can also be displayed with SDL2 versions between 2.0.9-2.0.12, as the"
|
||||
"CMake config files are not correctly installed. Since a valid SDL2"
|
||||
">=2.0.9 version cannot be found, building with FAudio will be skipped.")
|
||||
set(USE_FAUDIO OFF CACHE BOOL "Disabled using system FAudio with SDL < 2.0.12" FORCE)
|
||||
else()
|
||||
message(STATUS "RPCS3: Using system FAudio")
|
||||
find_package(FAudio REQUIRED CONFIGS FAudioConfig.cmake FAudio-config.cmake)
|
||||
add_library(3rdparty_FAudio INTERFACE)
|
||||
target_link_libraries(3rdparty_FAudio INTERFACE FAudio)
|
||||
target_compile_definitions(3rdparty_FAudio INTERFACE -DHAVE_FAUDIO)
|
||||
set(FAUDIO_TARGET 3rdparty_FAudio)
|
||||
endif()
|
||||
else()
|
||||
if (NOT SDL2_FOUND OR SDL2_VERSION VERSION_LESS 2.24.0)
|
||||
message(WARNING
|
||||
"-- RPCS3: 3rdparty FAudio requires SDL 2.24.0 or newer. Since a valid SDL2"
|
||||
">=2.24.0 version cannot be found, building with FAudio will be skipped.")
|
||||
set(USE_FAUDIO OFF CACHE BOOL "Disabled FAudio with SDL < 2.24.0" FORCE)
|
||||
else()
|
||||
message(STATUS "RPCS3: Using builtin FAudio")
|
||||
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build shared library")
|
||||
@@ -255,36 +260,36 @@ add_library(3rdparty_ffmpeg INTERFACE)
|
||||
|
||||
# Select the version of ffmpeg to use, default is builtin
|
||||
if(USE_SYSTEM_FFMPEG)
|
||||
message("-- RPCS3: using shared ffmpeg")
|
||||
message(STATUS "RPCS3: using shared ffmpeg")
|
||||
find_package(FFMPEG REQUIRED)
|
||||
|
||||
target_include_directories(3rdparty_ffmpeg INTERFACE ${FFMPEG_INCLUDE_DIR})
|
||||
target_link_libraries(3rdparty_ffmpeg INTERFACE ${FFMPEG_LIBRARIES})
|
||||
else()
|
||||
if (NOT MSVC AND WIN32)
|
||||
message("-- RPCS3: building ffmpeg submodule")
|
||||
message(STATUS "RPCS3: building ffmpeg submodule")
|
||||
|
||||
include(ProcessorCount)
|
||||
ProcessorCount(N)
|
||||
|
||||
ExternalProject_Add(ffmpeg-mingw
|
||||
DOWNLOAD_COMMAND ""
|
||||
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/ffmpeg
|
||||
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/ffmpeg
|
||||
CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/ffmpeg/configure --prefix=./windows/x86_64 --arch=x86_64 --disable-avdevice --disable-programs --disable-avfilter --disable-postproc --disable-doc --disable-pthreads --enable-w32threads --disable-network --disable-everything --disable-encoders --disable-muxers --disable-hwaccels --disable-parsers --disable-protocols --enable-dxva2 --enable-static --disable-shared --enable-decoder=aac --enable-decoder=aac_latm --enable-decoder=atrac3 --enable-decoder=atrac3p --enable-decoder=mp3 --enable-decoder=pcm_s16le --enable-decoder=pcm_s8 --enable-decoder=h264 --enable-decoder=mpeg4 --enable-decoder=mpeg2video --enable-decoder=mjpeg --enable-decoder=mjpegb --enable-encoder=pcm_s16le --enable-encoder=ffv1 --enable-encoder=mpeg4 --enable-parser=h264 --enable-parser=mpeg4video --enable-parser=mpegaudio --enable-parser=mpegvideo --enable-parser=mjpeg --enable-parser=aac --enable-parser=aac_latm --enable-muxer=avi --enable-demuxer=h264 --enable-demuxer=m4v --enable-demuxer=mp3 --enable-demuxer=mpegvideo --enable-demuxer=mpegps --enable-demuxer=mjpeg --enable-demuxer=avi --enable-demuxer=aac --enable-demuxer=pmp --enable-demuxer=oma --enable-demuxer=pcm_s16le --enable-demuxer=pcm_s8 --enable-demuxer=wav --enable-hwaccel=h264_dxva2 --enable-indev=dshow --enable-protocol=file
|
||||
BUILD_COMMAND make -j 4
|
||||
CONFIGURE_COMMAND bash ${CMAKE_CURRENT_SOURCE_DIR}/ffmpeg/configure --prefix=./windows/x86_64 --arch=x86_64 --disable-avdevice --disable-programs --disable-avfilter --disable-postproc --disable-doc --disable-pthreads --enable-w32threads --disable-network --disable-everything --disable-encoders --disable-muxers --disable-hwaccels --disable-parsers --disable-protocols --enable-dxva2 --enable-static --disable-shared --enable-decoder=aac --enable-decoder=aac_latm --enable-decoder=atrac3 --enable-decoder=atrac3p --enable-decoder=mp3 --enable-decoder=pcm_s16le --enable-decoder=pcm_s8 --enable-decoder=h264 --enable-decoder=mpeg4 --enable-decoder=mpeg2video --enable-decoder=mjpeg --enable-decoder=mjpegb --enable-encoder=pcm_s16le --enable-encoder=ffv1 --enable-encoder=mpeg4 --enable-parser=h264 --enable-parser=mpeg4video --enable-parser=mpegaudio --enable-parser=mpegvideo --enable-parser=mjpeg --enable-parser=aac --enable-parser=aac_latm --enable-muxer=avi --enable-demuxer=h264 --enable-demuxer=m4v --enable-demuxer=mp3 --enable-demuxer=mpegvideo --enable-demuxer=mpegps --enable-demuxer=mjpeg --enable-demuxer=avi --enable-demuxer=aac --enable-demuxer=pmp --enable-demuxer=oma --enable-demuxer=pcm_s16le --enable-demuxer=pcm_s8 --enable-demuxer=wav --enable-hwaccel=h264_dxva2 --enable-indev=dshow --enable-protocol=file
|
||||
BUILD_COMMAND make -j ${N}
|
||||
INSTALL_COMMAND make install
|
||||
)
|
||||
|
||||
set(FFMPEG_LIB_AVFORMAT "${CMAKE_CURRENT_BINARY_DIR}/ffmpeg/windows/x86_64/lib/libavformat.a")
|
||||
set(FFMPEG_LIB_AVCODEC "${CMAKE_CURRENT_BINARY_DIR}/ffmpeg/windows/x86_64/lib/libavcodec.a")
|
||||
set(FFMPEG_LIB_AVUTIL "${CMAKE_CURRENT_BINARY_DIR}/ffmpeg/windows/x86_64/lib/libavutil.a")
|
||||
set(FFMPEG_LIB_SWSCALE "${CMAKE_CURRENT_BINARY_DIR}/ffmpeg/windows/x86_64/lib/libswscale.a")
|
||||
set(FFMPEG_LIB_SWRESAMPLE "${CMAKE_CURRENT_BINARY_DIR}/ffmpeg/windows/x86_64/lib/libswresample.a")
|
||||
target_link_directories(3rdparty_ffmpeg INTERFACE "${CMAKE_CURRENT_BINARY_DIR}/ffmpeg/windows/x86_64/lib")
|
||||
target_link_libraries(3rdparty_ffmpeg INTERFACE avformat avcodec avutil swscale swresample iconv)
|
||||
else()
|
||||
message("-- RPCS3: using builtin ffmpeg")
|
||||
message(STATUS "RPCS3: using builtin ffmpeg")
|
||||
|
||||
if (WIN32)
|
||||
set(FFMPEG_LIB_DIR "ffmpeg/windows/x86_64")
|
||||
target_link_libraries(3rdparty_ffmpeg INTERFACE "Bcrypt.lib")
|
||||
elseif(CMAKE_SYSTEM MATCHES "Linux")
|
||||
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
set(FFMPEG_LIB_DIR "ffmpeg/linux/x86_64")
|
||||
elseif(APPLE)
|
||||
set(FFMPEG_LIB_DIR "ffmpeg/macos/x86_64")
|
||||
@@ -297,31 +302,31 @@ else()
|
||||
find_library(FFMPEG_LIB_AVUTIL avutil PATHS ${FFMPEG_LIB_DIR} NO_DEFAULT_PATH)
|
||||
find_library(FFMPEG_LIB_SWSCALE swscale PATHS ${FFMPEG_LIB_DIR} NO_DEFAULT_PATH)
|
||||
find_library(FFMPEG_LIB_SWRESAMPLE swresample PATHS ${FFMPEG_LIB_DIR} NO_DEFAULT_PATH)
|
||||
endif()
|
||||
|
||||
target_include_directories(3rdparty_ffmpeg INTERFACE "ffmpeg/include")
|
||||
|
||||
target_link_libraries(3rdparty_ffmpeg
|
||||
target_link_libraries(3rdparty_ffmpeg
|
||||
INTERFACE
|
||||
${FFMPEG_LIB_AVFORMAT}
|
||||
${FFMPEG_LIB_AVCODEC}
|
||||
${FFMPEG_LIB_AVUTIL}
|
||||
${FFMPEG_LIB_SWSCALE}
|
||||
${FFMPEG_LIB_SWRESAMPLE}
|
||||
)
|
||||
)
|
||||
endif()
|
||||
|
||||
target_include_directories(3rdparty_ffmpeg INTERFACE "ffmpeg/include")
|
||||
endif()
|
||||
|
||||
|
||||
# GLEW
|
||||
add_library(3rdparty_glew INTERFACE)
|
||||
if(NOT MSVC)
|
||||
find_package(GLEW 1.13.0 REQUIRED)
|
||||
find_package(GLEW REQUIRED)
|
||||
target_link_libraries(3rdparty_glew INTERFACE GLEW::GLEW)
|
||||
endif()
|
||||
|
||||
|
||||
# LLVM
|
||||
include(llvm.cmake)
|
||||
add_subdirectory(llvm EXCLUDE_FROM_ALL)
|
||||
|
||||
# WOLFSSL
|
||||
add_subdirectory(wolfssl EXCLUDE_FROM_ALL)
|
||||
@@ -329,6 +334,36 @@ add_subdirectory(wolfssl EXCLUDE_FROM_ALL)
|
||||
# CURL
|
||||
add_subdirectory(curl EXCLUDE_FROM_ALL)
|
||||
|
||||
# SDL2
|
||||
set(SDL2_TARGET 3rdparty_dummy_lib)
|
||||
if(USE_SDL)
|
||||
if(USE_SYSTEM_SDL)
|
||||
find_package(SDL2)
|
||||
if(SDL2_FOUND AND NOT SDL2_VERSION VERSION_LESS 2.24.0)
|
||||
message(STATUS "Using system SDL2")
|
||||
add_library(3rdparty_sdl2 INTERFACE)
|
||||
target_compile_definitions(3rdparty_sdl2 INTERFACE -DHAVE_SDL2=1)
|
||||
target_include_directories(3rdparty_sdl2 INTERFACE ${SDL2_INCLUDE_DIRS})
|
||||
target_link_libraries(3rdparty_sdl2 INTERFACE ${SDL2_LIBRARIES})
|
||||
set(SDL2_TARGET 3rdparty_sdl2)
|
||||
else()
|
||||
message(FATAL_ERROR "SDL2 is not available on this system")
|
||||
endif()
|
||||
else()
|
||||
message(STATUS "Using static SDL2 from 3rdparty")
|
||||
add_library(3rdparty_sdl2 INTERFACE)
|
||||
target_compile_definitions(3rdparty_sdl2 INTERFACE -DHAVE_SDL2=1)
|
||||
add_subdirectory(libsdl-org EXCLUDE_FROM_ALL)
|
||||
set(SDL2_TARGET 3rdparty_sdl2)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# MINIUPNP
|
||||
add_subdirectory(miniupnp EXCLUDE_FROM_ALL)
|
||||
|
||||
# RTMIDI
|
||||
add_subdirectory(rtmidi EXCLUDE_FROM_ALL)
|
||||
|
||||
# add nice ALIAS targets for ease of use
|
||||
if(USE_SYSTEM_LIBUSB)
|
||||
add_library(3rdparty::libusb ALIAS usb-1.0-shared)
|
||||
@@ -355,3 +390,6 @@ add_library(3rdparty::glew ALIAS 3rdparty_glew)
|
||||
add_library(3rdparty::wolfssl ALIAS wolfssl)
|
||||
add_library(3rdparty::libcurl ALIAS libcurl)
|
||||
add_library(3rdparty::soundtouch ALIAS soundtouch)
|
||||
add_library(3rdparty::sdl2 ALIAS ${SDL2_TARGET})
|
||||
add_library(3rdparty::miniupnpc ALIAS libminiupnpc-static)
|
||||
add_library(3rdparty::rtmidi ALIAS rtmidi)
|
||||
|
||||
Vendored
+1
-1
Submodule 3rdparty/FAudio updated: e787ed7655...58cf606b5f
Vendored
+1
-1
@@ -4,7 +4,7 @@ include(ExternalProject)
|
||||
|
||||
ExternalProject_Add(moltenvk
|
||||
GIT_REPOSITORY https://github.com/KhronosGroup/MoltenVK.git
|
||||
GIT_TAG 260bad4
|
||||
GIT_TAG 4c6bfbe
|
||||
BUILD_IN_SOURCE 1
|
||||
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK
|
||||
CONFIGURE_COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK/fetchDependencies" --macos
|
||||
|
||||
Vendored
+1
-1
@@ -1,5 +1,5 @@
|
||||
# OpenAL
|
||||
if (MSVC)
|
||||
if (WIN32)
|
||||
find_path(OPENAL_INCLUDE_DIR al.h PATHS include/)
|
||||
find_library(OPENAL_LIBRARY OpenAL32 PATHS libs/Win64/)
|
||||
else()
|
||||
|
||||
Vendored
+1
-1
Submodule 3rdparty/SPIRV/SPIRV-Headers updated: b2a156e1c0...85a1ed200d
Vendored
+1
-1
Submodule 3rdparty/SPIRV/SPIRV-Tools updated: 5e61ea2098...eb0a36633d
+1
@@ -70,6 +70,7 @@
|
||||
<PreprocessorDefinitions>SOUNDTOUCH_ALLOW_SSE;ST_NO_EXCEPTION_HANDLING;USE_MULTICH_ALWAYS;SOUNDTOUCH_FLOAT_SAMPLES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>./soundtouch/source/SoundTouch;./soundtouch/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<DebugInformationFormat Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">ProgramDatabase</DebugInformationFormat>
|
||||
<Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
|
||||
Vendored
+1
-1
Submodule 3rdparty/asmjit/asmjit updated: 06d0badec5...c59847629d
Vendored
+1
@@ -187,6 +187,7 @@
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PreprocessorDefinitions>ASMJIT_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<Optimization Condition="'$(Configuration)|$(Platform)'=='Release'">MaxSpeed</Optimization>
|
||||
<Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
|
||||
Vendored
+1
-1
Submodule 3rdparty/cubeb/cubeb updated: dc511c6b35...70b4e3db78
Vendored
+1
@@ -79,6 +79,7 @@
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>OUTSIDE_SPEEX;RANDOM_PREFIX=speex;FLOATING_POINT;_USE_SSE;_USE_SSE2;EXPORT=;USE_WASAPI;USE_WINMM;CUBEB_WASAPI_USE_IAUDIOSTREAMVOLUME;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>./cubeb/subprojects/;./extra/;./cubeb/src/;./cubeb/include/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
|
||||
Vendored
+22
-10
@@ -1,24 +1,36 @@
|
||||
# CURL
|
||||
|
||||
if(USE_SYSTEM_CURL)
|
||||
message("-- RPCS3: using shared libcurl")
|
||||
message(STATUS "RPCS3: using shared libcurl")
|
||||
find_package(CURL REQUIRED)
|
||||
add_library(libcurl INTERFACE)
|
||||
target_link_libraries(libcurl INTERFACE CURL::libcurl)
|
||||
else()
|
||||
message("-- RPCS3: building libcurl + wolfssl submodules")
|
||||
add_compile_definitions(HAVE_SNI OPENSSL_EXTRA)
|
||||
option(BUILD_CURL_EXE "Set to ON to build curl executable." OFF)
|
||||
option(CURL_USE_WOLFSSL "enable wolfSSL for SSL/TLS" ON)
|
||||
option(HTTP_ONLY "disables all protocols except HTTP (This overrides all CURL_DISABLE_* options)" ON)
|
||||
option(CURL_ZLIB "Set to ON to enable building curl with zlib support." OFF)
|
||||
option(USE_LIBIDN2 "Use libidn2 for IDN support" OFF) # Disabled because MacOs CI doesn't work otherwise
|
||||
message(STATUS "RPCS3: building libcurl + wolfssl submodules")
|
||||
set(BUILD_CURL_EXE OFF CACHE BOOL "Set to ON to build curl executable.")
|
||||
# If set to ON then CURL can not find our wolfssl
|
||||
set(CURL_USE_WOLFSSL OFF CACHE BOOL "enable wolfSSL for SSL/TLS")
|
||||
set(CURL_USE_OPENSSL OFF CACHE BOOL "Use OpenSSL code. Experimental")
|
||||
set(HTTP_ONLY ON CACHE BOOL "disables all protocols except HTTP (This overrides all CURL_DISABLE_* options)")
|
||||
set(USE_LIBIDN2 OFF CACHE BOOL "Use libidn2 for IDN support") # Disabled because MacOS CI doesn't work otherwise
|
||||
set(CURL_CA_PATH "none" CACHE STRING "Location of default CA path. Set 'none' to disable or 'auto' for auto-detection. Defaults to 'auto'.")
|
||||
if(USE_MSVC_STATIC_CRT)
|
||||
set(CURL_STATIC_CRT ON CACHE BOOL "Use static crt to build curl" FORCE)
|
||||
set(CURL_STATIC_CRT ON CACHE BOOL "Use static crt to build curl")
|
||||
endif()
|
||||
if(WIN32)
|
||||
set(ENABLE_UNICODE ON CACHE BOOL "enable Unicode")
|
||||
endif()
|
||||
set(CURL_USE_LIBSSH2 OFF CACHE BOOL "Use libSSH2")
|
||||
set(CURL_USE_LIBPSL OFF CACHE BOOL "Use libPSL")
|
||||
|
||||
set(SSL_ENABLED ON)
|
||||
set(USE_WOLFSSL ON)
|
||||
|
||||
add_subdirectory(curl EXCLUDE_FROM_ALL)
|
||||
|
||||
set_property(TARGET libcurl PROPERTY FOLDER "3rdparty/")
|
||||
target_link_libraries(libcurl PRIVATE wolfssl)
|
||||
if(MSVC)
|
||||
target_compile_definitions(libcurl PRIVATE HAVE_SSIZE_T)
|
||||
endif()
|
||||
|
||||
endif()
|
||||
|
||||
Vendored
+1
-1
Submodule 3rdparty/curl/curl updated: 45ac4d0194...7ab9d43720
Vendored
+34
-12
@@ -64,20 +64,27 @@
|
||||
<ClCompile Include="curl\lib\asyn-ares.c" />
|
||||
<ClCompile Include="curl\lib\asyn-thread.c" />
|
||||
<ClCompile Include="curl\lib\base64.c" />
|
||||
<ClCompile Include="curl\lib\bufq.c" />
|
||||
<ClCompile Include="curl\lib\bufref.c" />
|
||||
<ClCompile Include="curl\lib\c-hyper.c" />
|
||||
<ClCompile Include="curl\lib\cf-h1-proxy.c" />
|
||||
<ClCompile Include="curl\lib\cf-h2-proxy.c" />
|
||||
<ClCompile Include="curl\lib\cf-haproxy.c" />
|
||||
<ClCompile Include="curl\lib\cf-https-connect.c" />
|
||||
<ClCompile Include="curl\lib\cf-socket.c" />
|
||||
<ClCompile Include="curl\lib\cfilters.c" />
|
||||
<ClCompile Include="curl\lib\conncache.c" />
|
||||
<ClCompile Include="curl\lib\connect.c" />
|
||||
<ClCompile Include="curl\lib\content_encoding.c" />
|
||||
<ClCompile Include="curl\lib\cookie.c" />
|
||||
<ClCompile Include="curl\lib\curl_addrinfo.c" />
|
||||
<ClCompile Include="curl\lib\curl_ctype.c" />
|
||||
<ClCompile Include="curl\lib\curl_des.c" />
|
||||
<ClCompile Include="curl\lib\curl_endian.c" />
|
||||
<ClCompile Include="curl\lib\curl_fnmatch.c" />
|
||||
<ClCompile Include="curl\lib\curl_gethostname.c" />
|
||||
<ClCompile Include="curl\lib\curl_get_line.c" />
|
||||
<ClCompile Include="curl\lib\curl_gssapi.c" />
|
||||
<ClCompile Include="curl\lib\curl_log.c" />
|
||||
<ClCompile Include="curl\lib\curl_memrchr.c" />
|
||||
<ClCompile Include="curl\lib\curl_multibyte.c" />
|
||||
<ClCompile Include="curl\lib\curl_ntlm_core.c" />
|
||||
@@ -90,8 +97,8 @@
|
||||
<ClCompile Include="curl\lib\curl_threads.c" />
|
||||
<ClCompile Include="curl\lib\dict.c" />
|
||||
<ClCompile Include="curl\lib\doh.c" />
|
||||
<ClCompile Include="curl\lib\dotdot.c" />
|
||||
<ClCompile Include="curl\lib\dynbuf.c" />
|
||||
<ClCompile Include="curl\lib\dynhds.c" />
|
||||
<ClCompile Include="curl\lib\easy.c" />
|
||||
<ClCompile Include="curl\lib\easygetopt.c" />
|
||||
<ClCompile Include="curl\lib\easyoptions.c" />
|
||||
@@ -105,7 +112,6 @@
|
||||
<ClCompile Include="curl\lib\getenv.c" />
|
||||
<ClCompile Include="curl\lib\getinfo.c" />
|
||||
<ClCompile Include="curl\lib\gopher.c" />
|
||||
<ClCompile Include="curl\lib\h2h3.c" />
|
||||
<ClCompile Include="curl\lib\hash.c" />
|
||||
<ClCompile Include="curl\lib\headers.c" />
|
||||
<ClCompile Include="curl\lib\hmac.c" />
|
||||
@@ -116,6 +122,7 @@
|
||||
<ClCompile Include="curl\lib\hostsyn.c" />
|
||||
<ClCompile Include="curl\lib\hsts.c" />
|
||||
<ClCompile Include="curl\lib\http.c" />
|
||||
<ClCompile Include="curl\lib\http1.c" />
|
||||
<ClCompile Include="curl\lib\http2.c" />
|
||||
<ClCompile Include="curl\lib\http_aws_sigv4.c" />
|
||||
<ClCompile Include="curl\lib\http_chunks.c" />
|
||||
@@ -123,7 +130,7 @@
|
||||
<ClCompile Include="curl\lib\http_negotiate.c" />
|
||||
<ClCompile Include="curl\lib\http_ntlm.c" />
|
||||
<ClCompile Include="curl\lib\http_proxy.c" />
|
||||
<ClCompile Include="curl\lib\idn_win32.c" />
|
||||
<ClCompile Include="curl\lib\idn.c" />
|
||||
<ClCompile Include="curl\lib\if2ip.c" />
|
||||
<ClCompile Include="curl\lib\imap.c" />
|
||||
<ClCompile Include="curl\lib\inet_ntop.c" />
|
||||
@@ -140,6 +147,7 @@
|
||||
<ClCompile Include="curl\lib\multi.c" />
|
||||
<ClCompile Include="curl\lib\netrc.c" />
|
||||
<ClCompile Include="curl\lib\nonblock.c" />
|
||||
<ClCompile Include="curl\lib\noproxy.c" />
|
||||
<ClCompile Include="curl\lib\openldap.c" />
|
||||
<ClCompile Include="curl\lib\parsedate.c" />
|
||||
<ClCompile Include="curl\lib\pingpong.c" />
|
||||
@@ -179,11 +187,13 @@
|
||||
<ClCompile Include="curl\lib\vauth\gsasl.c" />
|
||||
<ClCompile Include="curl\lib\version.c" />
|
||||
<ClCompile Include="curl\lib\version_win32.c" />
|
||||
<ClCompile Include="curl\lib\vquic\curl_msh3.c" />
|
||||
<ClCompile Include="curl\lib\vquic\curl_ngtcp2.c" />
|
||||
<ClCompile Include="curl\lib\vquic\curl_quiche.c" />
|
||||
<ClCompile Include="curl\lib\vtls\hostcheck.c" />
|
||||
<ClCompile Include="curl\lib\vtls\rustls.c" />
|
||||
<ClCompile Include="curl\lib\vtls\x509asn1.c" />
|
||||
<ClCompile Include="curl\lib\warnless.c" />
|
||||
<ClCompile Include="curl\lib\wildcard.c" />
|
||||
<ClCompile Include="curl\lib\vauth\cleartext.c" />
|
||||
<ClCompile Include="curl\lib\vauth\cram.c" />
|
||||
<ClCompile Include="curl\lib\vauth\digest.c" />
|
||||
@@ -196,8 +206,6 @@
|
||||
<ClCompile Include="curl\lib\vauth\spnego_gssapi.c" />
|
||||
<ClCompile Include="curl\lib\vauth\spnego_sspi.c" />
|
||||
<ClCompile Include="curl\lib\vauth\vauth.c" />
|
||||
<ClCompile Include="curl\lib\vquic\ngtcp2.c" />
|
||||
<ClCompile Include="curl\lib\vquic\quiche.c" />
|
||||
<ClCompile Include="curl\lib\vquic\vquic.c" />
|
||||
<ClCompile Include="curl\lib\vssh\libssh.c" />
|
||||
<ClCompile Include="curl\lib\vssh\libssh2.c" />
|
||||
@@ -215,6 +223,7 @@
|
||||
<ClCompile Include="curl\lib\vtls\sectransp.c" />
|
||||
<ClCompile Include="curl\lib\vtls\vtls.c" />
|
||||
<ClCompile Include="curl\lib\vtls\wolfssl.c" />
|
||||
<ClCompile Include="curl\lib\ws.c" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="curl\include\curl\curl.h" />
|
||||
@@ -230,8 +239,15 @@
|
||||
<ClInclude Include="curl\lib\amigaos.h" />
|
||||
<ClInclude Include="curl\lib\arpa_telnet.h" />
|
||||
<ClInclude Include="curl\lib\asyn.h" />
|
||||
<ClInclude Include="curl\lib\bufq.h" />
|
||||
<ClInclude Include="curl\lib\bufref.h" />
|
||||
<ClInclude Include="curl\lib\c-hyper.h" />
|
||||
<ClInclude Include="curl\lib\cf-h1-proxy.h" />
|
||||
<ClInclude Include="curl\lib\cf-h2-proxy.h" />
|
||||
<ClInclude Include="curl\lib\cf-haproxy.h" />
|
||||
<ClInclude Include="curl\lib\cf-https-connect.h" />
|
||||
<ClInclude Include="curl\lib\cf-socket.h" />
|
||||
<ClInclude Include="curl\lib\cfilters.h" />
|
||||
<ClInclude Include="curl\lib\config-amigaos.h" />
|
||||
<ClInclude Include="curl\lib\config-dos.h" />
|
||||
<ClInclude Include="curl\lib\config-mac.h" />
|
||||
@@ -257,6 +273,7 @@
|
||||
<ClInclude Include="curl\lib\curl_hmac.h" />
|
||||
<ClInclude Include="curl\lib\curl_krb5.h" />
|
||||
<ClInclude Include="curl\lib\curl_ldap.h" />
|
||||
<ClInclude Include="curl\lib\curl_log.h" />
|
||||
<ClInclude Include="curl\lib\curl_md4.h" />
|
||||
<ClInclude Include="curl\lib\curl_md5.h" />
|
||||
<ClInclude Include="curl\lib\curl_memory.h" />
|
||||
@@ -278,6 +295,7 @@
|
||||
<ClInclude Include="curl\lib\doh.h" />
|
||||
<ClInclude Include="curl\lib\dotdot.h" />
|
||||
<ClInclude Include="curl\lib\dynbuf.h" />
|
||||
<ClInclude Include="curl\lib\dynhds.h" />
|
||||
<ClInclude Include="curl\lib\easyif.h" />
|
||||
<ClInclude Include="curl\lib\easyoptions.h" />
|
||||
<ClInclude Include="curl\lib\easy_lock.h" />
|
||||
@@ -288,14 +306,15 @@
|
||||
<ClInclude Include="curl\lib\formdata.h" />
|
||||
<ClInclude Include="curl\lib\ftp.h" />
|
||||
<ClInclude Include="curl\lib\ftplistparser.h" />
|
||||
<ClInclude Include="curl\lib\functypes.h" />
|
||||
<ClInclude Include="curl\lib\getinfo.h" />
|
||||
<ClInclude Include="curl\lib\gopher.h" />
|
||||
<ClInclude Include="curl\lib\h2h3.h" />
|
||||
<ClInclude Include="curl\lib\hash.h" />
|
||||
<ClInclude Include="curl\lib\headers.h" />
|
||||
<ClInclude Include="curl\lib\hostip.h" />
|
||||
<ClInclude Include="curl\lib\hsts.h" />
|
||||
<ClInclude Include="curl\lib\http.h" />
|
||||
<ClInclude Include="curl\lib\http1.h" />
|
||||
<ClInclude Include="curl\lib\http2.h" />
|
||||
<ClInclude Include="curl\lib\http_aws_sigv4.h" />
|
||||
<ClInclude Include="curl\lib\http_chunks.h" />
|
||||
@@ -303,6 +322,7 @@
|
||||
<ClInclude Include="curl\lib\http_negotiate.h" />
|
||||
<ClInclude Include="curl\lib\http_ntlm.h" />
|
||||
<ClInclude Include="curl\lib\http_proxy.h" />
|
||||
<ClInclude Include="curl\lib\idn.h" />
|
||||
<ClInclude Include="curl\lib\if2ip.h" />
|
||||
<ClInclude Include="curl\lib\imap.h" />
|
||||
<ClInclude Include="curl\lib\inet_ntop.h" />
|
||||
@@ -315,12 +335,12 @@
|
||||
<ClInclude Include="curl\lib\multiif.h" />
|
||||
<ClInclude Include="curl\lib\netrc.h" />
|
||||
<ClInclude Include="curl\lib\nonblock.h" />
|
||||
<ClInclude Include="curl\lib\noproxy.h" />
|
||||
<ClInclude Include="curl\lib\parsedate.h" />
|
||||
<ClInclude Include="curl\lib\pingpong.h" />
|
||||
<ClInclude Include="curl\lib\pop3.h" />
|
||||
<ClInclude Include="curl\lib\progress.h" />
|
||||
<ClInclude Include="curl\lib\psl.h" />
|
||||
<ClInclude Include="curl\lib\quic.h" />
|
||||
<ClInclude Include="curl\lib\rand.h" />
|
||||
<ClInclude Include="curl\lib\rename.h" />
|
||||
<ClInclude Include="curl\lib\rtsp.h" />
|
||||
@@ -355,16 +375,17 @@
|
||||
<ClInclude Include="curl\lib\urlapi-int.h" />
|
||||
<ClInclude Include="curl\lib\urldata.h" />
|
||||
<ClInclude Include="curl\lib\version_win32.h" />
|
||||
<ClInclude Include="curl\lib\vquic\curl_msh3.h" />
|
||||
<ClInclude Include="curl\lib\vquic\curl_ngtcp2.h" />
|
||||
<ClInclude Include="curl\lib\vquic\curl_quiche.h" />
|
||||
<ClInclude Include="curl\lib\vquic\vquic_int.h" />
|
||||
<ClInclude Include="curl\lib\vtls\hostcheck.h" />
|
||||
<ClInclude Include="curl\lib\vtls\rustls.h" />
|
||||
<ClInclude Include="curl\lib\vtls\x509asn1.h" />
|
||||
<ClInclude Include="curl\lib\warnless.h" />
|
||||
<ClInclude Include="curl\lib\wildcard.h" />
|
||||
<ClInclude Include="curl\lib\vauth\digest.h" />
|
||||
<ClInclude Include="curl\lib\vauth\ntlm.h" />
|
||||
<ClInclude Include="curl\lib\vauth\vauth.h" />
|
||||
<ClInclude Include="curl\lib\vquic\ngtcp2.h" />
|
||||
<ClInclude Include="curl\lib\vquic\quiche.h" />
|
||||
<ClInclude Include="curl\lib\vquic\vquic.h" />
|
||||
<ClInclude Include="curl\lib\vssh\ssh.h" />
|
||||
<ClInclude Include="curl\lib\vssh\wolfssh.h" />
|
||||
@@ -380,6 +401,7 @@
|
||||
<ClInclude Include="curl\lib\vtls\sectransp.h" />
|
||||
<ClInclude Include="curl\lib\vtls\vtls.h" />
|
||||
<ClInclude Include="curl\lib\vtls\wolfssl.h" />
|
||||
<ClInclude Include="curl\lib\ws.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="curl\lib\libcurl.rc" />
|
||||
|
||||
+102
-36
@@ -48,9 +48,6 @@
|
||||
<ClCompile Include="curl\lib\curl_addrinfo.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="curl\lib\curl_ctype.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="curl\lib\curl_des.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
@@ -105,9 +102,6 @@
|
||||
<ClCompile Include="curl\lib\doh.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="curl\lib\dotdot.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="curl\lib\easy.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
@@ -180,9 +174,6 @@
|
||||
<ClCompile Include="curl\lib\http_proxy.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="curl\lib\idn_win32.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="curl\lib\if2ip.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
@@ -339,9 +330,6 @@
|
||||
<ClCompile Include="curl\lib\warnless.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="curl\lib\wildcard.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="curl\lib\vauth\cleartext.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
@@ -378,12 +366,6 @@
|
||||
<ClCompile Include="curl\lib\vauth\vauth.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="curl\lib\vquic\ngtcp2.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="curl\lib\vquic\quiche.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="curl\lib\vssh\libssh.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
@@ -465,9 +447,6 @@
|
||||
<ClCompile Include="curl\lib\vauth\gsasl.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="curl\lib\h2h3.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="curl\lib\vtls\hostcheck.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
@@ -483,6 +462,54 @@
|
||||
<ClCompile Include="curl\lib\fopen.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="curl\lib\noproxy.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="curl\lib\ws.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="curl\lib\cfilters.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="curl\lib\idn.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="curl\lib\curl_log.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="curl\lib\cf-https-connect.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="curl\lib\cf-socket.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="curl\lib\vquic\curl_msh3.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="curl\lib\vquic\curl_ngtcp2.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="curl\lib\vquic\curl_quiche.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="curl\lib\http1.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="curl\lib\dynhds.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="curl\lib\bufq.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="curl\lib\cf-h1-proxy.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="curl\lib\cf-h2-proxy.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="curl\lib\cf-haproxy.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="curl\include\curl\curl.h">
|
||||
@@ -761,9 +788,6 @@
|
||||
<ClInclude Include="curl\lib\psl.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="curl\lib\quic.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="curl\lib\rand.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
@@ -860,9 +884,6 @@
|
||||
<ClInclude Include="curl\lib\warnless.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="curl\lib\wildcard.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="curl\lib\vauth\digest.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
@@ -872,12 +893,6 @@
|
||||
<ClInclude Include="curl\lib\vauth\vauth.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="curl\lib\vquic\ngtcp2.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="curl\lib\vquic\quiche.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="curl\lib\vssh\ssh.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
@@ -953,9 +968,6 @@
|
||||
<ClInclude Include="curl\lib\vtls\rustls.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="curl\lib\h2h3.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="curl\lib\vtls\hostcheck.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
@@ -974,6 +986,60 @@
|
||||
<ClInclude Include="curl\lib\fopen.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="curl\lib\functypes.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="curl\lib\noproxy.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="curl\lib\ws.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="curl\lib\cfilters.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="curl\lib\idn.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="curl\lib\curl_log.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="curl\lib\cf-https-connect.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="curl\lib\cf-socket.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="curl\lib\vquic\curl_msh3.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="curl\lib\vquic\curl_ngtcp2.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="curl\lib\vquic\curl_quiche.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="curl\lib\vquic\vquic_int.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="curl\lib\http1.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="curl\lib\dynhds.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="curl\lib\bufq.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="curl\lib\cf-h1-proxy.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="curl\lib\cf-h2-proxy.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="curl\lib\cf-haproxy.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="curl\lib\libcurl.rc">
|
||||
|
||||
Vendored
+1
-1
@@ -14,7 +14,7 @@ if(APPLE)
|
||||
elseif(CMAKE_SYSTEM MATCHES "Linux")
|
||||
target_link_libraries(3rdparty_hidapi INTERFACE hidapi-hidraw udev)
|
||||
elseif(WIN32)
|
||||
target_link_libraries(3rdparty_hidapi INTERFACE hidapi-hid Shlwapi.lib)
|
||||
target_link_libraries(3rdparty_hidapi INTERFACE hidapi::hidapi hidapi::include Shlwapi.lib)
|
||||
else()
|
||||
target_link_libraries(3rdparty_hidapi INTERFACE hidapi-libusb usb)
|
||||
endif()
|
||||
|
||||
Vendored
+1
-1
Submodule 3rdparty/hidapi/hidapi updated: c2aa9dd37c...8b43a97a93
Vendored
+5
-4
@@ -2,14 +2,15 @@
|
||||
# Select the version of libpng to use, default is builtin
|
||||
if (NOT USE_SYSTEM_LIBPNG)
|
||||
# We use libpng's static library and don't need to build the shared library and run the tests
|
||||
set(PNG_SHARED OFF CACHE BOOL "Build shared lib" FORCE)
|
||||
set(PNG_TESTS OFF CACHE BOOL "Build libpng tests" FORCE)
|
||||
set(PNG_BUILD_ZLIB ON CACHE BOOL "ZLIB is already build or package is found" FORCE)
|
||||
set(PNG_SHARED OFF CACHE BOOL "Build shared lib")
|
||||
set(PNG_TESTS OFF CACHE BOOL "Build libpng tests")
|
||||
set(PNG_BUILD_ZLIB ON CACHE BOOL "ZLIB is already build or package is found")
|
||||
set(SKIP_INSTALL_ALL ON)
|
||||
add_subdirectory(libpng EXCLUDE_FROM_ALL)
|
||||
target_include_directories(png_static INTERFACE "${libpng_BINARY_DIR}" "${libpng_SOURCE_DIR}")
|
||||
target_link_libraries(png_static 3rdparty::zlib)
|
||||
|
||||
set(LIBPNG_TARGET png_static PARENT_SCOPE)
|
||||
set(LIBPNG_TARGET png_static PARENT_SCOPE)
|
||||
else()
|
||||
find_package(PNG REQUIRED)
|
||||
|
||||
|
||||
Vendored
+1
-1
Submodule 3rdparty/libpng/libpng updated: 0a158f3506...f135775ad4
Vendored
+11
@@ -0,0 +1,11 @@
|
||||
option(SDL2_DISABLE_SDL2MAIN "" ON)
|
||||
option(SDL2_DISABLE_INSTALL "" ON)
|
||||
option(SDL2_DISABLE_UNINSTALL "" ON)
|
||||
option(SDL_SHARED OFF)
|
||||
set(SDL_SHARED_ENABLED_BY_DEFAULT OFF)
|
||||
option(SDL_STATIC ON)
|
||||
set(SDL_STATIC_ENABLED_BY_DEFAULT ON)
|
||||
option(SDL_TEST OFF)
|
||||
set(SDL_TEST_ENABLED_BY_DEFAULT OFF)
|
||||
set(OPT_DEF_LIBC ON)
|
||||
add_subdirectory(SDL EXCLUDE_FROM_ALL)
|
||||
+1
Submodule 3rdparty/libsdl-org/SDL added at ffa78e6bea
Vendored
+462
@@ -0,0 +1,462 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="SDL\include\begin_code.h" />
|
||||
<ClInclude Include="SDL\include\close_code.h" />
|
||||
<ClInclude Include="SDL\include\SDL.h" />
|
||||
<ClInclude Include="SDL\include\SDL_assert.h" />
|
||||
<ClInclude Include="SDL\include\SDL_atomic.h" />
|
||||
<ClInclude Include="SDL\include\SDL_audio.h" />
|
||||
<ClInclude Include="SDL\include\SDL_bits.h" />
|
||||
<ClInclude Include="SDL\include\SDL_blendmode.h" />
|
||||
<ClInclude Include="SDL\include\SDL_clipboard.h" />
|
||||
<ClInclude Include="SDL\include\SDL_config.h" />
|
||||
<ClInclude Include="SDL\include\SDL_config_windows.h" />
|
||||
<ClInclude Include="SDL\include\SDL_copying.h" />
|
||||
<ClInclude Include="SDL\include\SDL_cpuinfo.h" />
|
||||
<ClInclude Include="SDL\include\SDL_egl.h" />
|
||||
<ClInclude Include="SDL\include\SDL_endian.h" />
|
||||
<ClInclude Include="SDL\include\SDL_error.h" />
|
||||
<ClInclude Include="SDL\include\SDL_events.h" />
|
||||
<ClInclude Include="SDL\include\SDL_filesystem.h" />
|
||||
<ClInclude Include="SDL\include\SDL_gamecontroller.h" />
|
||||
<ClInclude Include="SDL\include\SDL_gesture.h" />
|
||||
<ClInclude Include="SDL\include\SDL_guid.h" />
|
||||
<ClInclude Include="SDL\include\SDL_haptic.h" />
|
||||
<ClInclude Include="SDL\include\SDL_hints.h" />
|
||||
<ClInclude Include="SDL\include\SDL_hidapi.h" />
|
||||
<ClInclude Include="SDL\include\SDL_joystick.h" />
|
||||
<ClInclude Include="SDL\include\SDL_keyboard.h" />
|
||||
<ClInclude Include="SDL\include\SDL_keycode.h" />
|
||||
<ClInclude Include="SDL\include\SDL_loadso.h" />
|
||||
<ClInclude Include="SDL\include\SDL_locale.h" />
|
||||
<ClInclude Include="SDL\include\SDL_log.h" />
|
||||
<ClInclude Include="SDL\include\SDL_main.h" />
|
||||
<ClInclude Include="SDL\include\SDL_messagebox.h" />
|
||||
<ClInclude Include="SDL\include\SDL_metal.h" />
|
||||
<ClInclude Include="SDL\include\SDL_misc.h" />
|
||||
<ClInclude Include="SDL\include\SDL_mouse.h" />
|
||||
<ClInclude Include="SDL\include\SDL_mutex.h" />
|
||||
<ClInclude Include="SDL\include\SDL_name.h" />
|
||||
<ClInclude Include="SDL\include\SDL_opengl.h" />
|
||||
<ClInclude Include="SDL\include\SDL_opengl_glext.h" />
|
||||
<ClInclude Include="SDL\include\SDL_opengles.h" />
|
||||
<ClInclude Include="SDL\include\SDL_opengles2.h" />
|
||||
<ClInclude Include="SDL\include\SDL_opengles2_gl2.h" />
|
||||
<ClInclude Include="SDL\include\SDL_opengles2_gl2ext.h" />
|
||||
<ClInclude Include="SDL\include\SDL_opengles2_gl2platform.h" />
|
||||
<ClInclude Include="SDL\include\SDL_opengles2_khrplatform.h" />
|
||||
<ClInclude Include="SDL\include\SDL_pixels.h" />
|
||||
<ClInclude Include="SDL\include\SDL_platform.h" />
|
||||
<ClInclude Include="SDL\include\SDL_power.h" />
|
||||
<ClInclude Include="SDL\include\SDL_quit.h" />
|
||||
<ClInclude Include="SDL\include\SDL_rect.h" />
|
||||
<ClInclude Include="SDL\include\SDL_render.h" />
|
||||
<ClInclude Include="SDL\include\SDL_revision.h" />
|
||||
<ClInclude Include="SDL\include\SDL_rwops.h" />
|
||||
<ClInclude Include="SDL\include\SDL_scancode.h" />
|
||||
<ClInclude Include="SDL\include\SDL_sensor.h" />
|
||||
<ClInclude Include="SDL\include\SDL_shape.h" />
|
||||
<ClInclude Include="SDL\include\SDL_stdinc.h" />
|
||||
<ClInclude Include="SDL\include\SDL_surface.h" />
|
||||
<ClInclude Include="SDL\include\SDL_system.h" />
|
||||
<ClInclude Include="SDL\include\SDL_syswm.h" />
|
||||
<ClInclude Include="SDL\include\SDL_test.h" />
|
||||
<ClInclude Include="SDL\include\SDL_test_assert.h" />
|
||||
<ClInclude Include="SDL\include\SDL_test_common.h" />
|
||||
<ClInclude Include="SDL\include\SDL_test_compare.h" />
|
||||
<ClInclude Include="SDL\include\SDL_test_crc32.h" />
|
||||
<ClInclude Include="SDL\include\SDL_test_font.h" />
|
||||
<ClInclude Include="SDL\include\SDL_test_fuzzer.h" />
|
||||
<ClInclude Include="SDL\include\SDL_test_harness.h" />
|
||||
<ClInclude Include="SDL\include\SDL_test_images.h" />
|
||||
<ClInclude Include="SDL\include\SDL_test_log.h" />
|
||||
<ClInclude Include="SDL\include\SDL_test_md5.h" />
|
||||
<ClInclude Include="SDL\include\SDL_test_memory.h" />
|
||||
<ClInclude Include="SDL\include\SDL_test_random.h" />
|
||||
<ClInclude Include="SDL\include\SDL_thread.h" />
|
||||
<ClInclude Include="SDL\include\SDL_timer.h" />
|
||||
<ClInclude Include="SDL\include\SDL_touch.h" />
|
||||
<ClInclude Include="SDL\include\SDL_types.h" />
|
||||
<ClInclude Include="SDL\include\SDL_version.h" />
|
||||
<ClInclude Include="SDL\include\SDL_video.h" />
|
||||
<ClInclude Include="SDL\include\SDL_vulkan.h" />
|
||||
<ClInclude Include="SDL\src\audio\directsound\SDL_directsound.h" />
|
||||
<ClInclude Include="SDL\src\audio\disk\SDL_diskaudio.h" />
|
||||
<ClInclude Include="SDL\src\audio\dummy\SDL_dummyaudio.h" />
|
||||
<ClInclude Include="SDL\src\audio\SDL_audio_c.h" />
|
||||
<ClInclude Include="SDL\src\audio\SDL_audiodev_c.h" />
|
||||
<ClInclude Include="SDL\src\audio\SDL_sysaudio.h" />
|
||||
<ClInclude Include="SDL\src\audio\SDL_wave.h" />
|
||||
<ClInclude Include="SDL\src\audio\wasapi\SDL_wasapi.h" />
|
||||
<ClInclude Include="SDL\src\audio\winmm\SDL_winmm.h" />
|
||||
<ClInclude Include="SDL\src\core\windows\SDL_directx.h" />
|
||||
<ClInclude Include="SDL\src\core\windows\SDL_hid.h" />
|
||||
<ClInclude Include="SDL\src\core\windows\SDL_immdevice.h" />
|
||||
<ClInclude Include="SDL\src\core\windows\SDL_windows.h" />
|
||||
<ClInclude Include="SDL\src\core\windows\SDL_xinput.h" />
|
||||
<ClInclude Include="SDL\src\dynapi\SDL_dynapi.h" />
|
||||
<ClInclude Include="SDL\src\dynapi\SDL_dynapi_overrides.h" />
|
||||
<ClInclude Include="SDL\src\dynapi\SDL_dynapi_procs.h" />
|
||||
<ClInclude Include="SDL\src\events\blank_cursor.h" />
|
||||
<ClInclude Include="SDL\src\events\default_cursor.h" />
|
||||
<ClInclude Include="SDL\src\events\scancodes_windows.h" />
|
||||
<ClInclude Include="SDL\src\events\SDL_clipboardevents_c.h" />
|
||||
<ClInclude Include="SDL\src\events\SDL_displayevents_c.h" />
|
||||
<ClInclude Include="SDL\src\events\SDL_dropevents_c.h" />
|
||||
<ClInclude Include="SDL\src\events\SDL_events_c.h" />
|
||||
<ClInclude Include="SDL\src\events\SDL_gesture_c.h" />
|
||||
<ClInclude Include="SDL\src\events\SDL_keyboard_c.h" />
|
||||
<ClInclude Include="SDL\src\events\SDL_mouse_c.h" />
|
||||
<ClInclude Include="SDL\src\events\SDL_touch_c.h" />
|
||||
<ClInclude Include="SDL\src\events\SDL_windowevents_c.h" />
|
||||
<ClInclude Include="SDL\src\haptic\SDL_haptic_c.h" />
|
||||
<ClInclude Include="SDL\src\haptic\SDL_syshaptic.h" />
|
||||
<ClInclude Include="SDL\src\haptic\windows\SDL_dinputhaptic_c.h" />
|
||||
<ClInclude Include="SDL\src\haptic\windows\SDL_windowshaptic_c.h" />
|
||||
<ClInclude Include="SDL\src\haptic\windows\SDL_xinputhaptic_c.h" />
|
||||
<ClInclude Include="SDL\src\hidapi\hidapi\hidapi.h" />
|
||||
<ClInclude Include="SDL\src\hidapi\SDL_hidapi_c.h" />
|
||||
<ClInclude Include="SDL\src\joystick\controller_type.h" />
|
||||
<ClInclude Include="SDL\src\joystick\hidapi\SDL_hidapijoystick_c.h" />
|
||||
<ClInclude Include="SDL\src\joystick\hidapi\SDL_hidapi_nintendo.h" />
|
||||
<ClInclude Include="SDL\src\joystick\hidapi\SDL_hidapi_rumble.h" />
|
||||
<ClInclude Include="SDL\src\joystick\SDL_gamecontrollerdb.h" />
|
||||
<ClInclude Include="SDL\src\joystick\SDL_joystick_c.h" />
|
||||
<ClInclude Include="SDL\src\joystick\SDL_sysjoystick.h" />
|
||||
<ClInclude Include="SDL\src\joystick\usb_ids.h" />
|
||||
<ClInclude Include="SDL\src\joystick\virtual\SDL_virtualjoystick_c.h" />
|
||||
<ClInclude Include="SDL\src\joystick\windows\SDL_dinputjoystick_c.h" />
|
||||
<ClInclude Include="SDL\src\joystick\windows\SDL_rawinputjoystick_c.h" />
|
||||
<ClInclude Include="SDL\src\joystick\windows\SDL_windowsjoystick_c.h" />
|
||||
<ClInclude Include="SDL\src\joystick\windows\SDL_xinputjoystick_c.h" />
|
||||
<ClInclude Include="SDL\src\libm\math_libm.h" />
|
||||
<ClInclude Include="SDL\src\libm\math_private.h" />
|
||||
<ClInclude Include="SDL\src\locale\SDL_syslocale.h" />
|
||||
<ClInclude Include="SDL\src\misc\SDL_sysurl.h" />
|
||||
<ClInclude Include="SDL\src\power\SDL_syspower.h" />
|
||||
<ClInclude Include="SDL\src\render\direct3d11\SDL_shaders_d3d11.h" />
|
||||
<ClInclude Include="SDL\src\render\direct3d12\SDL_shaders_d3d12.h" />
|
||||
<ClInclude Include="SDL\src\render\direct3d\SDL_shaders_d3d.h" />
|
||||
<ClInclude Include="SDL\src\render\opengles2\SDL_gles2funcs.h" />
|
||||
<ClInclude Include="SDL\src\render\opengles2\SDL_shaders_gles2.h" />
|
||||
<ClInclude Include="SDL\src\render\opengl\SDL_glfuncs.h" />
|
||||
<ClInclude Include="SDL\src\render\opengl\SDL_shaders_gl.h" />
|
||||
<ClInclude Include="SDL\src\render\SDL_d3dmath.h" />
|
||||
<ClInclude Include="SDL\src\render\SDL_sysrender.h" />
|
||||
<ClInclude Include="SDL\src\render\SDL_yuv_sw_c.h" />
|
||||
<ClInclude Include="SDL\src\render\software\SDL_blendfillrect.h" />
|
||||
<ClInclude Include="SDL\src\render\software\SDL_blendline.h" />
|
||||
<ClInclude Include="SDL\src\render\software\SDL_blendpoint.h" />
|
||||
<ClInclude Include="SDL\src\render\software\SDL_draw.h" />
|
||||
<ClInclude Include="SDL\src\render\software\SDL_drawline.h" />
|
||||
<ClInclude Include="SDL\src\render\software\SDL_drawpoint.h" />
|
||||
<ClInclude Include="SDL\src\render\software\SDL_render_sw_c.h" />
|
||||
<ClInclude Include="SDL\src\render\software\SDL_rotate.h" />
|
||||
<ClInclude Include="SDL\src\render\software\SDL_triangle.h" />
|
||||
<ClInclude Include="SDL\src\SDL_assert_c.h" />
|
||||
<ClInclude Include="SDL\src\SDL_dataqueue.h" />
|
||||
<ClInclude Include="SDL\src\SDL_error_c.h" />
|
||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_ps3.c" />
|
||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_steam.c" />
|
||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_wii.c" />
|
||||
<ClCompile Include="SDL\src\SDL_guid.c" />
|
||||
<ClInclude Include="SDL\src\SDL_hints_c.h" />
|
||||
<ClInclude Include="SDL\src\SDL_internal.h" />
|
||||
<ClInclude Include="SDL\src\SDL_list.h" />
|
||||
<ClInclude Include="SDL\src\SDL_log_c.h" />
|
||||
<ClInclude Include="SDL\src\sensor\dummy\SDL_dummysensor.h" />
|
||||
<ClInclude Include="SDL\src\sensor\SDL_sensor_c.h" />
|
||||
<ClInclude Include="SDL\src\sensor\SDL_syssensor.h" />
|
||||
<ClInclude Include="SDL\src\sensor\windows\SDL_windowssensor.h" />
|
||||
<ClInclude Include="SDL\src\thread\SDL_systhread.h" />
|
||||
<ClInclude Include="SDL\src\thread\SDL_thread_c.h" />
|
||||
<ClInclude Include="SDL\src\thread\generic\SDL_syscond_c.h" />
|
||||
<ClInclude Include="SDL\src\thread\windows\SDL_sysmutex_c.h" />
|
||||
<ClInclude Include="SDL\src\thread\windows\SDL_systhread_c.h" />
|
||||
<ClInclude Include="SDL\src\timer\SDL_timer_c.h" />
|
||||
<ClInclude Include="SDL\src\video\dummy\SDL_nullevents_c.h" />
|
||||
<ClInclude Include="SDL\src\video\dummy\SDL_nullframebuffer_c.h" />
|
||||
<ClInclude Include="SDL\src\video\dummy\SDL_nullvideo.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vk_icd.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vk_layer.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vk_platform.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vk_sdk_platform.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan.hpp" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_android.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_beta.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_core.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_directfb.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_fuchsia.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_ggp.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_ios.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_macos.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_metal.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_vi.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_wayland.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_win32.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_xcb.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_xlib.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_xlib_xrandr.h" />
|
||||
<ClInclude Include="SDL\src\video\SDL_blit.h" />
|
||||
<ClInclude Include="SDL\src\video\SDL_blit_auto.h" />
|
||||
<ClInclude Include="SDL\src\video\SDL_blit_copy.h" />
|
||||
<ClInclude Include="SDL\src\video\SDL_blit_slow.h" />
|
||||
<ClInclude Include="SDL\src\video\SDL_egl_c.h" />
|
||||
<ClInclude Include="SDL\src\video\SDL_pixels_c.h" />
|
||||
<ClInclude Include="SDL\src\video\SDL_rect_c.h" />
|
||||
<ClInclude Include="SDL\src\video\SDL_RLEaccel_c.h" />
|
||||
<ClInclude Include="SDL\src\video\SDL_shape_internals.h" />
|
||||
<ClInclude Include="SDL\src\video\SDL_sysvideo.h" />
|
||||
<ClInclude Include="SDL\src\video\SDL_vulkan_internal.h" />
|
||||
<ClInclude Include="SDL\src\video\SDL_yuv_c.h" />
|
||||
<ClInclude Include="SDL\src\video\windows\SDL_msctf.h" />
|
||||
<ClInclude Include="SDL\src\video\windows\SDL_vkeys.h" />
|
||||
<ClInclude Include="SDL\src\video\windows\SDL_windowsclipboard.h" />
|
||||
<ClInclude Include="SDL\src\video\windows\SDL_windowsevents.h" />
|
||||
<ClInclude Include="SDL\src\video\windows\SDL_windowsframebuffer.h" />
|
||||
<ClInclude Include="SDL\src\video\windows\SDL_windowskeyboard.h" />
|
||||
<ClInclude Include="SDL\src\video\windows\SDL_windowsmessagebox.h" />
|
||||
<ClInclude Include="SDL\src\video\windows\SDL_windowsmodes.h" />
|
||||
<ClInclude Include="SDL\src\video\windows\SDL_windowsmouse.h" />
|
||||
<ClInclude Include="SDL\src\video\windows\SDL_windowsopengl.h" />
|
||||
<ClInclude Include="SDL\src\video\windows\SDL_windowsopengles.h" />
|
||||
<ClInclude Include="SDL\src\video\windows\SDL_windowsshape.h" />
|
||||
<ClInclude Include="SDL\src\video\windows\SDL_windowsvideo.h" />
|
||||
<ClInclude Include="SDL\src\video\windows\SDL_windowsvulkan.h" />
|
||||
<ClInclude Include="SDL\src\video\windows\SDL_windowswindow.h" />
|
||||
<ClInclude Include="SDL\src\video\windows\wmmsg.h" />
|
||||
<ClInclude Include="SDL\src\video\yuv2rgb\yuv_rgb.h" />
|
||||
<ClInclude Include="SDL\src\video\yuv2rgb\yuv_rgb_sse_func.h" />
|
||||
<ClInclude Include="SDL\src\video\yuv2rgb\yuv_rgb_std_func.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="SDL\src\atomic\SDL_atomic.c" />
|
||||
<ClCompile Include="SDL\src\atomic\SDL_spinlock.c" />
|
||||
<ClCompile Include="SDL\src\audio\directsound\SDL_directsound.c" />
|
||||
<ClCompile Include="SDL\src\audio\disk\SDL_diskaudio.c" />
|
||||
<ClCompile Include="SDL\src\audio\dummy\SDL_dummyaudio.c" />
|
||||
<ClCompile Include="SDL\src\audio\SDL_audio.c" />
|
||||
<ClCompile Include="SDL\src\audio\SDL_audiocvt.c" />
|
||||
<ClCompile Include="SDL\src\audio\SDL_audiodev.c" />
|
||||
<ClCompile Include="SDL\src\audio\SDL_audiotypecvt.c" />
|
||||
<ClCompile Include="SDL\src\audio\SDL_mixer.c" />
|
||||
<ClCompile Include="SDL\src\audio\SDL_wave.c" />
|
||||
<ClCompile Include="SDL\src\audio\winmm\SDL_winmm.c" />
|
||||
<ClCompile Include="SDL\src\audio\wasapi\SDL_wasapi.c" />
|
||||
<ClCompile Include="SDL\src\audio\wasapi\SDL_wasapi_win32.c" />
|
||||
<ClCompile Include="SDL\src\core\windows\SDL_hid.c" />
|
||||
<ClCompile Include="SDL\src\core\windows\SDL_immdevice.c" />
|
||||
<ClCompile Include="SDL\src\core\windows\SDL_windows.c" />
|
||||
<ClCompile Include="SDL\src\core\windows\SDL_xinput.c" />
|
||||
<ClCompile Include="SDL\src\cpuinfo\SDL_cpuinfo.c" />
|
||||
<ClCompile Include="SDL\src\dynapi\SDL_dynapi.c" />
|
||||
<ClCompile Include="SDL\src\events\SDL_clipboardevents.c" />
|
||||
<ClCompile Include="SDL\src\events\SDL_displayevents.c" />
|
||||
<ClCompile Include="SDL\src\events\SDL_dropevents.c" />
|
||||
<ClCompile Include="SDL\src\events\SDL_events.c" />
|
||||
<ClCompile Include="SDL\src\events\SDL_gesture.c" />
|
||||
<ClCompile Include="SDL\src\events\SDL_keyboard.c" />
|
||||
<ClCompile Include="SDL\src\events\SDL_mouse.c" />
|
||||
<ClCompile Include="SDL\src\events\SDL_quit.c" />
|
||||
<ClCompile Include="SDL\src\events\SDL_touch.c" />
|
||||
<ClCompile Include="SDL\src\events\SDL_windowevents.c" />
|
||||
<ClCompile Include="SDL\src\file\SDL_rwops.c" />
|
||||
<ClCompile Include="SDL\src\filesystem\windows\SDL_sysfilesystem.c" />
|
||||
<ClCompile Include="SDL\src\haptic\dummy\SDL_syshaptic.c" />
|
||||
<ClCompile Include="SDL\src\haptic\SDL_haptic.c" />
|
||||
<ClCompile Include="SDL\src\haptic\windows\SDL_dinputhaptic.c" />
|
||||
<ClCompile Include="SDL\src\haptic\windows\SDL_windowshaptic.c" />
|
||||
<ClCompile Include="SDL\src\haptic\windows\SDL_xinputhaptic.c" />
|
||||
<ClCompile Include="SDL\src\hidapi\SDL_hidapi.c" />
|
||||
<ClCompile Include="SDL\src\joystick\controller_type.c" />
|
||||
<ClCompile Include="SDL\src\joystick\dummy\SDL_sysjoystick.c" />
|
||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapijoystick.c" />
|
||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_combined.c" />
|
||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_gamecube.c" />
|
||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_luna.c" />
|
||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_ps4.c" />
|
||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_ps5.c" />
|
||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_rumble.c" />
|
||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_shield.c" />
|
||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_stadia.c" />
|
||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_switch.c" />
|
||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_xbox360.c" />
|
||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_xbox360w.c" />
|
||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_xboxone.c" />
|
||||
<ClCompile Include="SDL\src\joystick\SDL_gamecontroller.c" />
|
||||
<ClCompile Include="SDL\src\joystick\SDL_joystick.c" />
|
||||
<ClCompile Include="SDL\src\joystick\virtual\SDL_virtualjoystick.c" />
|
||||
<ClCompile Include="SDL\src\joystick\windows\SDL_dinputjoystick.c" />
|
||||
<ClCompile Include="SDL\src\joystick\windows\SDL_rawinputjoystick.c" />
|
||||
<ClCompile Include="SDL\src\joystick\windows\SDL_windowsjoystick.c" />
|
||||
<ClCompile Include="SDL\src\joystick\windows\SDL_windows_gaming_input.c" />
|
||||
<ClCompile Include="SDL\src\joystick\windows\SDL_xinputjoystick.c" />
|
||||
<ClCompile Include="SDL\src\libm\e_atan2.c" />
|
||||
<ClCompile Include="SDL\src\libm\e_exp.c" />
|
||||
<ClCompile Include="SDL\src\libm\e_fmod.c" />
|
||||
<ClCompile Include="SDL\src\libm\e_log.c" />
|
||||
<ClCompile Include="SDL\src\libm\e_log10.c" />
|
||||
<ClCompile Include="SDL\src\libm\e_pow.c" />
|
||||
<ClCompile Include="SDL\src\libm\e_rem_pio2.c" />
|
||||
<ClCompile Include="SDL\src\libm\e_sqrt.c" />
|
||||
<ClCompile Include="SDL\src\libm\k_cos.c" />
|
||||
<ClCompile Include="SDL\src\libm\k_rem_pio2.c" />
|
||||
<ClCompile Include="SDL\src\libm\k_sin.c" />
|
||||
<ClCompile Include="SDL\src\libm\k_tan.c" />
|
||||
<ClCompile Include="SDL\src\libm\s_atan.c" />
|
||||
<ClCompile Include="SDL\src\libm\s_copysign.c" />
|
||||
<ClCompile Include="SDL\src\libm\s_cos.c" />
|
||||
<ClCompile Include="SDL\src\libm\s_fabs.c" />
|
||||
<ClCompile Include="SDL\src\libm\s_floor.c" />
|
||||
<ClCompile Include="SDL\src\libm\s_scalbn.c" />
|
||||
<ClCompile Include="SDL\src\libm\s_sin.c" />
|
||||
<ClCompile Include="SDL\src\libm\s_tan.c" />
|
||||
<ClCompile Include="SDL\src\loadso\windows\SDL_sysloadso.c" />
|
||||
<ClCompile Include="SDL\src\locale\SDL_locale.c" />
|
||||
<ClCompile Include="SDL\src\locale\windows\SDL_syslocale.c" />
|
||||
<ClCompile Include="SDL\src\misc\SDL_url.c" />
|
||||
<ClCompile Include="SDL\src\misc\windows\SDL_sysurl.c" />
|
||||
<ClCompile Include="SDL\src\power\SDL_power.c" />
|
||||
<ClCompile Include="SDL\src\power\windows\SDL_syspower.c" />
|
||||
<ClCompile Include="SDL\src\render\direct3d11\SDL_shaders_d3d11.c" />
|
||||
<ClCompile Include="SDL\src\render\direct3d12\SDL_render_d3d12.c" />
|
||||
<ClCompile Include="SDL\src\render\direct3d12\SDL_shaders_d3d12.c" />
|
||||
<ClCompile Include="SDL\src\render\direct3d\SDL_render_d3d.c" />
|
||||
<ClCompile Include="SDL\src\render\direct3d11\SDL_render_d3d11.c" />
|
||||
<ClCompile Include="SDL\src\render\direct3d\SDL_shaders_d3d.c" />
|
||||
<ClCompile Include="SDL\src\render\opengl\SDL_render_gl.c" />
|
||||
<ClCompile Include="SDL\src\render\opengl\SDL_shaders_gl.c" />
|
||||
<ClCompile Include="SDL\src\render\opengles2\SDL_render_gles2.c" />
|
||||
<ClCompile Include="SDL\src\render\opengles2\SDL_shaders_gles2.c" />
|
||||
<ClCompile Include="SDL\src\render\SDL_d3dmath.c" />
|
||||
<ClCompile Include="SDL\src\render\SDL_render.c" />
|
||||
<ClCompile Include="SDL\src\render\SDL_yuv_sw.c" />
|
||||
<ClCompile Include="SDL\src\render\software\SDL_blendfillrect.c" />
|
||||
<ClCompile Include="SDL\src\render\software\SDL_blendline.c" />
|
||||
<ClCompile Include="SDL\src\render\software\SDL_blendpoint.c" />
|
||||
<ClCompile Include="SDL\src\render\software\SDL_drawline.c" />
|
||||
<ClCompile Include="SDL\src\render\software\SDL_drawpoint.c" />
|
||||
<ClCompile Include="SDL\src\render\software\SDL_render_sw.c" />
|
||||
<ClCompile Include="SDL\src\render\software\SDL_rotate.c" />
|
||||
<ClCompile Include="SDL\src\render\software\SDL_triangle.c" />
|
||||
<ClCompile Include="SDL\src\SDL.c" />
|
||||
<ClCompile Include="SDL\src\SDL_assert.c" />
|
||||
<ClCompile Include="SDL\src\SDL_dataqueue.c" />
|
||||
<ClCompile Include="SDL\src\SDL_list.c" />
|
||||
<ClCompile Include="SDL\src\SDL_error.c" />
|
||||
<ClCompile Include="SDL\src\SDL_hints.c" />
|
||||
<ClCompile Include="SDL\src\SDL_log.c" />
|
||||
<ClCompile Include="SDL\src\SDL_utils.c" />
|
||||
<ClCompile Include="SDL\src\sensor\dummy\SDL_dummysensor.c" />
|
||||
<ClCompile Include="SDL\src\sensor\SDL_sensor.c" />
|
||||
<ClCompile Include="SDL\src\sensor\windows\SDL_windowssensor.c" />
|
||||
<ClCompile Include="SDL\src\stdlib\SDL_crc16.c" />
|
||||
<ClCompile Include="SDL\src\stdlib\SDL_crc32.c" />
|
||||
<ClCompile Include="SDL\src\stdlib\SDL_getenv.c" />
|
||||
<ClCompile Include="SDL\src\stdlib\SDL_iconv.c" />
|
||||
<ClCompile Include="SDL\src\stdlib\SDL_malloc.c" />
|
||||
<ClCompile Include="SDL\src\stdlib\SDL_mslibc.c" />
|
||||
<ClCompile Include="SDL\src\stdlib\SDL_qsort.c" />
|
||||
<ClCompile Include="SDL\src\stdlib\SDL_stdlib.c" />
|
||||
<ClCompile Include="SDL\src\stdlib\SDL_string.c" />
|
||||
<ClCompile Include="SDL\src\stdlib\SDL_strtokr.c" />
|
||||
<ClCompile Include="SDL\src\thread\generic\SDL_syscond.c" />
|
||||
<ClCompile Include="SDL\src\thread\SDL_thread.c" />
|
||||
<ClCompile Include="SDL\src\thread\windows\SDL_syscond_cv.c" />
|
||||
<ClCompile Include="SDL\src\thread\windows\SDL_sysmutex.c" />
|
||||
<ClCompile Include="SDL\src\thread\windows\SDL_syssem.c" />
|
||||
<ClCompile Include="SDL\src\thread\windows\SDL_systhread.c" />
|
||||
<ClCompile Include="SDL\src\thread\windows\SDL_systls.c" />
|
||||
<ClCompile Include="SDL\src\timer\SDL_timer.c" />
|
||||
<ClCompile Include="SDL\src\timer\windows\SDL_systimer.c" />
|
||||
<ClCompile Include="SDL\src\video\dummy\SDL_nullevents.c" />
|
||||
<ClCompile Include="SDL\src\video\dummy\SDL_nullframebuffer.c" />
|
||||
<ClCompile Include="SDL\src\video\dummy\SDL_nullvideo.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_blit.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_blit_0.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_blit_1.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_blit_A.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_blit_auto.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_blit_copy.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_blit_N.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_blit_slow.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_bmp.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_clipboard.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_egl.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_fillrect.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_pixels.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_rect.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_RLEaccel.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_shape.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_stretch.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_surface.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_video.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_vulkan_utils.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_yuv.c" />
|
||||
<ClCompile Include="SDL\src\video\windows\SDL_windowsclipboard.c" />
|
||||
<ClCompile Include="SDL\src\video\windows\SDL_windowsevents.c" />
|
||||
<ClCompile Include="SDL\src\video\windows\SDL_windowsframebuffer.c" />
|
||||
<ClCompile Include="SDL\src\video\windows\SDL_windowskeyboard.c" />
|
||||
<ClCompile Include="SDL\src\video\windows\SDL_windowsmessagebox.c" />
|
||||
<ClCompile Include="SDL\src\video\windows\SDL_windowsmodes.c" />
|
||||
<ClCompile Include="SDL\src\video\windows\SDL_windowsmouse.c" />
|
||||
<ClCompile Include="SDL\src\video\windows\SDL_windowsopengl.c" />
|
||||
<ClCompile Include="SDL\src\video\windows\SDL_windowsopengles.c" />
|
||||
<ClCompile Include="SDL\src\video\windows\SDL_windowsshape.c" />
|
||||
<ClCompile Include="SDL\src\video\windows\SDL_windowsvideo.c" />
|
||||
<ClCompile Include="SDL\src\video\windows\SDL_windowsvulkan.c" />
|
||||
<ClCompile Include="SDL\src\video\windows\SDL_windowswindow.c" />
|
||||
<ClCompile Include="SDL\src\video\yuv2rgb\yuv_rgb.c" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{8DC244EE-A0BD-4038-BAF7-CFAFA5EB2BAA}</ProjectGuid>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(SolutionDir)\buildfiles\msvc\common_default.props" />
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<Import Project="$(SolutionDir)\buildfiles\msvc\common_default_macros.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="$(SolutionDir)\buildfiles\msvc\rpcs3_default.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Import Project="$(SolutionDir)\buildfiles\msvc\rpcs3_debug.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Import Project="$(SolutionDir)\buildfiles\msvc\rpcs3_release.props" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<ItemDefinitionGroup>
|
||||
<ClCompile>
|
||||
<WarningLevel>TurnOffAllWarnings</WarningLevel>
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<AdditionalIncludeDirectories>SDL\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<DebugInformationFormat Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">ProgramDatabase</DebugInformationFormat>
|
||||
<Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
+413
@@ -0,0 +1,413 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<ClCompile Include="SDL\src\SDL_guid.c" />
|
||||
<ClCompile Include="SDL\src\atomic\SDL_atomic.c" />
|
||||
<ClCompile Include="SDL\src\atomic\SDL_spinlock.c" />
|
||||
<ClCompile Include="SDL\src\audio\directsound\SDL_directsound.c" />
|
||||
<ClCompile Include="SDL\src\audio\disk\SDL_diskaudio.c" />
|
||||
<ClCompile Include="SDL\src\audio\dummy\SDL_dummyaudio.c" />
|
||||
<ClCompile Include="SDL\src\audio\SDL_audio.c" />
|
||||
<ClCompile Include="SDL\src\audio\SDL_audiocvt.c" />
|
||||
<ClCompile Include="SDL\src\audio\SDL_audiodev.c" />
|
||||
<ClCompile Include="SDL\src\audio\SDL_audiotypecvt.c" />
|
||||
<ClCompile Include="SDL\src\audio\SDL_mixer.c" />
|
||||
<ClCompile Include="SDL\src\audio\SDL_wave.c" />
|
||||
<ClCompile Include="SDL\src\audio\winmm\SDL_winmm.c" />
|
||||
<ClCompile Include="SDL\src\audio\wasapi\SDL_wasapi.c" />
|
||||
<ClCompile Include="SDL\src\audio\wasapi\SDL_wasapi_win32.c" />
|
||||
<ClCompile Include="SDL\src\core\windows\SDL_hid.c" />
|
||||
<ClCompile Include="SDL\src\core\windows\SDL_immdevice.c" />
|
||||
<ClCompile Include="SDL\src\core\windows\SDL_windows.c" />
|
||||
<ClCompile Include="SDL\src\core\windows\SDL_xinput.c" />
|
||||
<ClCompile Include="SDL\src\cpuinfo\SDL_cpuinfo.c" />
|
||||
<ClCompile Include="SDL\src\dynapi\SDL_dynapi.c" />
|
||||
<ClCompile Include="SDL\src\events\SDL_clipboardevents.c" />
|
||||
<ClCompile Include="SDL\src\events\SDL_displayevents.c" />
|
||||
<ClCompile Include="SDL\src\events\SDL_dropevents.c" />
|
||||
<ClCompile Include="SDL\src\events\SDL_events.c" />
|
||||
<ClCompile Include="SDL\src\events\SDL_gesture.c" />
|
||||
<ClCompile Include="SDL\src\events\SDL_keyboard.c" />
|
||||
<ClCompile Include="SDL\src\events\SDL_mouse.c" />
|
||||
<ClCompile Include="SDL\src\events\SDL_quit.c" />
|
||||
<ClCompile Include="SDL\src\events\SDL_touch.c" />
|
||||
<ClCompile Include="SDL\src\events\SDL_windowevents.c" />
|
||||
<ClCompile Include="SDL\src\file\SDL_rwops.c" />
|
||||
<ClCompile Include="SDL\src\filesystem\windows\SDL_sysfilesystem.c" />
|
||||
<ClCompile Include="SDL\src\haptic\dummy\SDL_syshaptic.c" />
|
||||
<ClCompile Include="SDL\src\haptic\SDL_haptic.c" />
|
||||
<ClCompile Include="SDL\src\haptic\windows\SDL_dinputhaptic.c" />
|
||||
<ClCompile Include="SDL\src\haptic\windows\SDL_windowshaptic.c" />
|
||||
<ClCompile Include="SDL\src\haptic\windows\SDL_xinputhaptic.c" />
|
||||
<ClCompile Include="SDL\src\hidapi\SDL_hidapi.c" />
|
||||
<ClCompile Include="SDL\src\joystick\controller_type.c" />
|
||||
<ClCompile Include="SDL\src\joystick\dummy\SDL_sysjoystick.c" />
|
||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapijoystick.c" />
|
||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_combined.c" />
|
||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_gamecube.c" />
|
||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_luna.c" />
|
||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_ps4.c" />
|
||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_ps5.c" />
|
||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_rumble.c" />
|
||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_shield.c" />
|
||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_stadia.c" />
|
||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_switch.c" />
|
||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_xbox360.c" />
|
||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_xbox360w.c" />
|
||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_xboxone.c" />
|
||||
<ClCompile Include="SDL\src\joystick\SDL_gamecontroller.c" />
|
||||
<ClCompile Include="SDL\src\joystick\SDL_joystick.c" />
|
||||
<ClCompile Include="SDL\src\joystick\virtual\SDL_virtualjoystick.c" />
|
||||
<ClCompile Include="SDL\src\joystick\windows\SDL_dinputjoystick.c" />
|
||||
<ClCompile Include="SDL\src\joystick\windows\SDL_rawinputjoystick.c" />
|
||||
<ClCompile Include="SDL\src\joystick\windows\SDL_windowsjoystick.c" />
|
||||
<ClCompile Include="SDL\src\joystick\windows\SDL_windows_gaming_input.c" />
|
||||
<ClCompile Include="SDL\src\joystick\windows\SDL_xinputjoystick.c" />
|
||||
<ClCompile Include="SDL\src\libm\e_atan2.c" />
|
||||
<ClCompile Include="SDL\src\libm\e_exp.c" />
|
||||
<ClCompile Include="SDL\src\libm\e_fmod.c" />
|
||||
<ClCompile Include="SDL\src\libm\e_log.c" />
|
||||
<ClCompile Include="SDL\src\libm\e_log10.c" />
|
||||
<ClCompile Include="SDL\src\libm\e_pow.c" />
|
||||
<ClCompile Include="SDL\src\libm\e_rem_pio2.c" />
|
||||
<ClCompile Include="SDL\src\libm\e_sqrt.c" />
|
||||
<ClCompile Include="SDL\src\libm\k_cos.c" />
|
||||
<ClCompile Include="SDL\src\libm\k_rem_pio2.c" />
|
||||
<ClCompile Include="SDL\src\libm\k_sin.c" />
|
||||
<ClCompile Include="SDL\src\libm\k_tan.c" />
|
||||
<ClCompile Include="SDL\src\libm\s_atan.c" />
|
||||
<ClCompile Include="SDL\src\libm\s_copysign.c" />
|
||||
<ClCompile Include="SDL\src\libm\s_cos.c" />
|
||||
<ClCompile Include="SDL\src\libm\s_fabs.c" />
|
||||
<ClCompile Include="SDL\src\libm\s_floor.c" />
|
||||
<ClCompile Include="SDL\src\libm\s_scalbn.c" />
|
||||
<ClCompile Include="SDL\src\libm\s_sin.c" />
|
||||
<ClCompile Include="SDL\src\libm\s_tan.c" />
|
||||
<ClCompile Include="SDL\src\loadso\windows\SDL_sysloadso.c" />
|
||||
<ClCompile Include="SDL\src\locale\SDL_locale.c" />
|
||||
<ClCompile Include="SDL\src\locale\windows\SDL_syslocale.c" />
|
||||
<ClCompile Include="SDL\src\misc\SDL_url.c" />
|
||||
<ClCompile Include="SDL\src\misc\windows\SDL_sysurl.c" />
|
||||
<ClCompile Include="SDL\src\power\SDL_power.c" />
|
||||
<ClCompile Include="SDL\src\power\windows\SDL_syspower.c" />
|
||||
<ClCompile Include="SDL\src\render\direct3d11\SDL_shaders_d3d11.c" />
|
||||
<ClCompile Include="SDL\src\render\direct3d12\SDL_render_d3d12.c" />
|
||||
<ClCompile Include="SDL\src\render\direct3d12\SDL_shaders_d3d12.c" />
|
||||
<ClCompile Include="SDL\src\render\direct3d\SDL_render_d3d.c" />
|
||||
<ClCompile Include="SDL\src\render\direct3d11\SDL_render_d3d11.c" />
|
||||
<ClCompile Include="SDL\src\render\direct3d\SDL_shaders_d3d.c" />
|
||||
<ClCompile Include="SDL\src\render\opengl\SDL_render_gl.c" />
|
||||
<ClCompile Include="SDL\src\render\opengl\SDL_shaders_gl.c" />
|
||||
<ClCompile Include="SDL\src\render\opengles2\SDL_render_gles2.c" />
|
||||
<ClCompile Include="SDL\src\render\opengles2\SDL_shaders_gles2.c" />
|
||||
<ClCompile Include="SDL\src\render\SDL_d3dmath.c" />
|
||||
<ClCompile Include="SDL\src\render\SDL_render.c" />
|
||||
<ClCompile Include="SDL\src\render\SDL_yuv_sw.c" />
|
||||
<ClCompile Include="SDL\src\render\software\SDL_blendfillrect.c" />
|
||||
<ClCompile Include="SDL\src\render\software\SDL_blendline.c" />
|
||||
<ClCompile Include="SDL\src\render\software\SDL_blendpoint.c" />
|
||||
<ClCompile Include="SDL\src\render\software\SDL_drawline.c" />
|
||||
<ClCompile Include="SDL\src\render\software\SDL_drawpoint.c" />
|
||||
<ClCompile Include="SDL\src\render\software\SDL_render_sw.c" />
|
||||
<ClCompile Include="SDL\src\render\software\SDL_rotate.c" />
|
||||
<ClCompile Include="SDL\src\render\software\SDL_triangle.c" />
|
||||
<ClCompile Include="SDL\src\SDL.c" />
|
||||
<ClCompile Include="SDL\src\SDL_assert.c" />
|
||||
<ClCompile Include="SDL\src\SDL_dataqueue.c" />
|
||||
<ClCompile Include="SDL\src\SDL_list.c" />
|
||||
<ClCompile Include="SDL\src\SDL_error.c" />
|
||||
<ClCompile Include="SDL\src\SDL_hints.c" />
|
||||
<ClCompile Include="SDL\src\SDL_log.c" />
|
||||
<ClCompile Include="SDL\src\SDL_utils.c" />
|
||||
<ClCompile Include="SDL\src\sensor\dummy\SDL_dummysensor.c" />
|
||||
<ClCompile Include="SDL\src\sensor\SDL_sensor.c" />
|
||||
<ClCompile Include="SDL\src\sensor\windows\SDL_windowssensor.c" />
|
||||
<ClCompile Include="SDL\src\stdlib\SDL_crc16.c" />
|
||||
<ClCompile Include="SDL\src\stdlib\SDL_crc32.c" />
|
||||
<ClCompile Include="SDL\src\stdlib\SDL_getenv.c" />
|
||||
<ClCompile Include="SDL\src\stdlib\SDL_iconv.c" />
|
||||
<ClCompile Include="SDL\src\stdlib\SDL_malloc.c" />
|
||||
<ClCompile Include="SDL\src\stdlib\SDL_mslibc.c" />
|
||||
<ClCompile Include="SDL\src\stdlib\SDL_qsort.c" />
|
||||
<ClCompile Include="SDL\src\stdlib\SDL_stdlib.c" />
|
||||
<ClCompile Include="SDL\src\stdlib\SDL_string.c" />
|
||||
<ClCompile Include="SDL\src\stdlib\SDL_strtokr.c" />
|
||||
<ClCompile Include="SDL\src\thread\generic\SDL_syscond.c" />
|
||||
<ClCompile Include="SDL\src\thread\SDL_thread.c" />
|
||||
<ClCompile Include="SDL\src\thread\windows\SDL_syscond_cv.c" />
|
||||
<ClCompile Include="SDL\src\thread\windows\SDL_sysmutex.c" />
|
||||
<ClCompile Include="SDL\src\thread\windows\SDL_syssem.c" />
|
||||
<ClCompile Include="SDL\src\thread\windows\SDL_systhread.c" />
|
||||
<ClCompile Include="SDL\src\thread\windows\SDL_systls.c" />
|
||||
<ClCompile Include="SDL\src\timer\SDL_timer.c" />
|
||||
<ClCompile Include="SDL\src\timer\windows\SDL_systimer.c" />
|
||||
<ClCompile Include="SDL\src\video\dummy\SDL_nullevents.c" />
|
||||
<ClCompile Include="SDL\src\video\dummy\SDL_nullframebuffer.c" />
|
||||
<ClCompile Include="SDL\src\video\dummy\SDL_nullvideo.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_blit.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_blit_0.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_blit_1.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_blit_A.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_blit_auto.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_blit_copy.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_blit_N.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_blit_slow.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_bmp.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_clipboard.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_egl.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_fillrect.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_pixels.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_rect.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_RLEaccel.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_shape.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_stretch.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_surface.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_video.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_vulkan_utils.c" />
|
||||
<ClCompile Include="SDL\src\video\SDL_yuv.c" />
|
||||
<ClCompile Include="SDL\src\video\windows\SDL_windowsclipboard.c" />
|
||||
<ClCompile Include="SDL\src\video\windows\SDL_windowsevents.c" />
|
||||
<ClCompile Include="SDL\src\video\windows\SDL_windowsframebuffer.c" />
|
||||
<ClCompile Include="SDL\src\video\windows\SDL_windowskeyboard.c" />
|
||||
<ClCompile Include="SDL\src\video\windows\SDL_windowsmessagebox.c" />
|
||||
<ClCompile Include="SDL\src\video\windows\SDL_windowsmodes.c" />
|
||||
<ClCompile Include="SDL\src\video\windows\SDL_windowsmouse.c" />
|
||||
<ClCompile Include="SDL\src\video\windows\SDL_windowsopengl.c" />
|
||||
<ClCompile Include="SDL\src\video\windows\SDL_windowsopengles.c" />
|
||||
<ClCompile Include="SDL\src\video\windows\SDL_windowsshape.c" />
|
||||
<ClCompile Include="SDL\src\video\windows\SDL_windowsvideo.c" />
|
||||
<ClCompile Include="SDL\src\video\windows\SDL_windowsvulkan.c" />
|
||||
<ClCompile Include="SDL\src\video\windows\SDL_windowswindow.c" />
|
||||
<ClCompile Include="SDL\src\video\yuv2rgb\yuv_rgb.c" />
|
||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_ps3.c" />
|
||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_steam.c" />
|
||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_wii.c" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="SDL\include\begin_code.h" />
|
||||
<ClInclude Include="SDL\include\close_code.h" />
|
||||
<ClInclude Include="SDL\include\SDL.h" />
|
||||
<ClInclude Include="SDL\include\SDL_assert.h" />
|
||||
<ClInclude Include="SDL\include\SDL_atomic.h" />
|
||||
<ClInclude Include="SDL\include\SDL_audio.h" />
|
||||
<ClInclude Include="SDL\include\SDL_bits.h" />
|
||||
<ClInclude Include="SDL\include\SDL_blendmode.h" />
|
||||
<ClInclude Include="SDL\include\SDL_clipboard.h" />
|
||||
<ClInclude Include="SDL\include\SDL_config.h" />
|
||||
<ClInclude Include="SDL\include\SDL_config_windows.h" />
|
||||
<ClInclude Include="SDL\include\SDL_copying.h" />
|
||||
<ClInclude Include="SDL\include\SDL_cpuinfo.h" />
|
||||
<ClInclude Include="SDL\include\SDL_egl.h" />
|
||||
<ClInclude Include="SDL\include\SDL_endian.h" />
|
||||
<ClInclude Include="SDL\include\SDL_error.h" />
|
||||
<ClInclude Include="SDL\include\SDL_events.h" />
|
||||
<ClInclude Include="SDL\include\SDL_filesystem.h" />
|
||||
<ClInclude Include="SDL\include\SDL_gamecontroller.h" />
|
||||
<ClInclude Include="SDL\include\SDL_gesture.h" />
|
||||
<ClInclude Include="SDL\include\SDL_guid.h" />
|
||||
<ClInclude Include="SDL\include\SDL_haptic.h" />
|
||||
<ClInclude Include="SDL\include\SDL_hints.h" />
|
||||
<ClInclude Include="SDL\include\SDL_hidapi.h" />
|
||||
<ClInclude Include="SDL\include\SDL_joystick.h" />
|
||||
<ClInclude Include="SDL\include\SDL_keyboard.h" />
|
||||
<ClInclude Include="SDL\include\SDL_keycode.h" />
|
||||
<ClInclude Include="SDL\include\SDL_loadso.h" />
|
||||
<ClInclude Include="SDL\include\SDL_locale.h" />
|
||||
<ClInclude Include="SDL\include\SDL_log.h" />
|
||||
<ClInclude Include="SDL\include\SDL_main.h" />
|
||||
<ClInclude Include="SDL\include\SDL_messagebox.h" />
|
||||
<ClInclude Include="SDL\include\SDL_metal.h" />
|
||||
<ClInclude Include="SDL\include\SDL_misc.h" />
|
||||
<ClInclude Include="SDL\include\SDL_mouse.h" />
|
||||
<ClInclude Include="SDL\include\SDL_mutex.h" />
|
||||
<ClInclude Include="SDL\include\SDL_name.h" />
|
||||
<ClInclude Include="SDL\include\SDL_opengl.h" />
|
||||
<ClInclude Include="SDL\include\SDL_opengl_glext.h" />
|
||||
<ClInclude Include="SDL\include\SDL_opengles.h" />
|
||||
<ClInclude Include="SDL\include\SDL_opengles2.h" />
|
||||
<ClInclude Include="SDL\include\SDL_opengles2_gl2.h" />
|
||||
<ClInclude Include="SDL\include\SDL_opengles2_gl2ext.h" />
|
||||
<ClInclude Include="SDL\include\SDL_opengles2_gl2platform.h" />
|
||||
<ClInclude Include="SDL\include\SDL_opengles2_khrplatform.h" />
|
||||
<ClInclude Include="SDL\include\SDL_pixels.h" />
|
||||
<ClInclude Include="SDL\include\SDL_platform.h" />
|
||||
<ClInclude Include="SDL\include\SDL_power.h" />
|
||||
<ClInclude Include="SDL\include\SDL_quit.h" />
|
||||
<ClInclude Include="SDL\include\SDL_rect.h" />
|
||||
<ClInclude Include="SDL\include\SDL_render.h" />
|
||||
<ClInclude Include="SDL\include\SDL_revision.h" />
|
||||
<ClInclude Include="SDL\include\SDL_rwops.h" />
|
||||
<ClInclude Include="SDL\include\SDL_scancode.h" />
|
||||
<ClInclude Include="SDL\include\SDL_sensor.h" />
|
||||
<ClInclude Include="SDL\include\SDL_shape.h" />
|
||||
<ClInclude Include="SDL\include\SDL_stdinc.h" />
|
||||
<ClInclude Include="SDL\include\SDL_surface.h" />
|
||||
<ClInclude Include="SDL\include\SDL_system.h" />
|
||||
<ClInclude Include="SDL\include\SDL_syswm.h" />
|
||||
<ClInclude Include="SDL\include\SDL_test.h" />
|
||||
<ClInclude Include="SDL\include\SDL_test_assert.h" />
|
||||
<ClInclude Include="SDL\include\SDL_test_common.h" />
|
||||
<ClInclude Include="SDL\include\SDL_test_compare.h" />
|
||||
<ClInclude Include="SDL\include\SDL_test_crc32.h" />
|
||||
<ClInclude Include="SDL\include\SDL_test_font.h" />
|
||||
<ClInclude Include="SDL\include\SDL_test_fuzzer.h" />
|
||||
<ClInclude Include="SDL\include\SDL_test_harness.h" />
|
||||
<ClInclude Include="SDL\include\SDL_test_images.h" />
|
||||
<ClInclude Include="SDL\include\SDL_test_log.h" />
|
||||
<ClInclude Include="SDL\include\SDL_test_md5.h" />
|
||||
<ClInclude Include="SDL\include\SDL_test_memory.h" />
|
||||
<ClInclude Include="SDL\include\SDL_test_random.h" />
|
||||
<ClInclude Include="SDL\include\SDL_thread.h" />
|
||||
<ClInclude Include="SDL\include\SDL_timer.h" />
|
||||
<ClInclude Include="SDL\include\SDL_touch.h" />
|
||||
<ClInclude Include="SDL\include\SDL_types.h" />
|
||||
<ClInclude Include="SDL\include\SDL_version.h" />
|
||||
<ClInclude Include="SDL\include\SDL_video.h" />
|
||||
<ClInclude Include="SDL\include\SDL_vulkan.h" />
|
||||
<ClInclude Include="SDL\src\audio\directsound\SDL_directsound.h" />
|
||||
<ClInclude Include="SDL\src\audio\disk\SDL_diskaudio.h" />
|
||||
<ClInclude Include="SDL\src\audio\dummy\SDL_dummyaudio.h" />
|
||||
<ClInclude Include="SDL\src\audio\SDL_audio_c.h" />
|
||||
<ClInclude Include="SDL\src\audio\SDL_audiodev_c.h" />
|
||||
<ClInclude Include="SDL\src\audio\SDL_sysaudio.h" />
|
||||
<ClInclude Include="SDL\src\audio\SDL_wave.h" />
|
||||
<ClInclude Include="SDL\src\audio\wasapi\SDL_wasapi.h" />
|
||||
<ClInclude Include="SDL\src\audio\winmm\SDL_winmm.h" />
|
||||
<ClInclude Include="SDL\src\core\windows\SDL_directx.h" />
|
||||
<ClInclude Include="SDL\src\core\windows\SDL_hid.h" />
|
||||
<ClInclude Include="SDL\src\core\windows\SDL_immdevice.h" />
|
||||
<ClInclude Include="SDL\src\core\windows\SDL_windows.h" />
|
||||
<ClInclude Include="SDL\src\core\windows\SDL_xinput.h" />
|
||||
<ClInclude Include="SDL\src\dynapi\SDL_dynapi.h" />
|
||||
<ClInclude Include="SDL\src\dynapi\SDL_dynapi_overrides.h" />
|
||||
<ClInclude Include="SDL\src\dynapi\SDL_dynapi_procs.h" />
|
||||
<ClInclude Include="SDL\src\events\blank_cursor.h" />
|
||||
<ClInclude Include="SDL\src\events\default_cursor.h" />
|
||||
<ClInclude Include="SDL\src\events\scancodes_windows.h" />
|
||||
<ClInclude Include="SDL\src\events\SDL_clipboardevents_c.h" />
|
||||
<ClInclude Include="SDL\src\events\SDL_displayevents_c.h" />
|
||||
<ClInclude Include="SDL\src\events\SDL_dropevents_c.h" />
|
||||
<ClInclude Include="SDL\src\events\SDL_events_c.h" />
|
||||
<ClInclude Include="SDL\src\events\SDL_gesture_c.h" />
|
||||
<ClInclude Include="SDL\src\events\SDL_keyboard_c.h" />
|
||||
<ClInclude Include="SDL\src\events\SDL_mouse_c.h" />
|
||||
<ClInclude Include="SDL\src\events\SDL_touch_c.h" />
|
||||
<ClInclude Include="SDL\src\events\SDL_windowevents_c.h" />
|
||||
<ClInclude Include="SDL\src\haptic\SDL_haptic_c.h" />
|
||||
<ClInclude Include="SDL\src\haptic\SDL_syshaptic.h" />
|
||||
<ClInclude Include="SDL\src\haptic\windows\SDL_dinputhaptic_c.h" />
|
||||
<ClInclude Include="SDL\src\haptic\windows\SDL_windowshaptic_c.h" />
|
||||
<ClInclude Include="SDL\src\haptic\windows\SDL_xinputhaptic_c.h" />
|
||||
<ClInclude Include="SDL\src\hidapi\hidapi\hidapi.h" />
|
||||
<ClInclude Include="SDL\src\hidapi\SDL_hidapi_c.h" />
|
||||
<ClInclude Include="SDL\src\joystick\controller_type.h" />
|
||||
<ClInclude Include="SDL\src\joystick\hidapi\SDL_hidapijoystick_c.h" />
|
||||
<ClInclude Include="SDL\src\joystick\hidapi\SDL_hidapi_rumble.h" />
|
||||
<ClInclude Include="SDL\src\joystick\SDL_gamecontrollerdb.h" />
|
||||
<ClInclude Include="SDL\src\joystick\SDL_joystick_c.h" />
|
||||
<ClInclude Include="SDL\src\joystick\SDL_sysjoystick.h" />
|
||||
<ClInclude Include="SDL\src\joystick\usb_ids.h" />
|
||||
<ClInclude Include="SDL\src\joystick\virtual\SDL_virtualjoystick_c.h" />
|
||||
<ClInclude Include="SDL\src\joystick\windows\SDL_dinputjoystick_c.h" />
|
||||
<ClInclude Include="SDL\src\joystick\windows\SDL_rawinputjoystick_c.h" />
|
||||
<ClInclude Include="SDL\src\joystick\windows\SDL_windowsjoystick_c.h" />
|
||||
<ClInclude Include="SDL\src\joystick\windows\SDL_xinputjoystick_c.h" />
|
||||
<ClInclude Include="SDL\src\libm\math_libm.h" />
|
||||
<ClInclude Include="SDL\src\libm\math_private.h" />
|
||||
<ClInclude Include="SDL\src\locale\SDL_syslocale.h" />
|
||||
<ClInclude Include="SDL\src\misc\SDL_sysurl.h" />
|
||||
<ClInclude Include="SDL\src\power\SDL_syspower.h" />
|
||||
<ClInclude Include="SDL\src\render\direct3d11\SDL_shaders_d3d11.h" />
|
||||
<ClInclude Include="SDL\src\render\direct3d12\SDL_shaders_d3d12.h" />
|
||||
<ClInclude Include="SDL\src\render\direct3d\SDL_shaders_d3d.h" />
|
||||
<ClInclude Include="SDL\src\render\opengles2\SDL_gles2funcs.h" />
|
||||
<ClInclude Include="SDL\src\render\opengles2\SDL_shaders_gles2.h" />
|
||||
<ClInclude Include="SDL\src\render\opengl\SDL_glfuncs.h" />
|
||||
<ClInclude Include="SDL\src\render\opengl\SDL_shaders_gl.h" />
|
||||
<ClInclude Include="SDL\src\render\SDL_d3dmath.h" />
|
||||
<ClInclude Include="SDL\src\render\SDL_sysrender.h" />
|
||||
<ClInclude Include="SDL\src\render\SDL_yuv_sw_c.h" />
|
||||
<ClInclude Include="SDL\src\render\software\SDL_blendfillrect.h" />
|
||||
<ClInclude Include="SDL\src\render\software\SDL_blendline.h" />
|
||||
<ClInclude Include="SDL\src\render\software\SDL_blendpoint.h" />
|
||||
<ClInclude Include="SDL\src\render\software\SDL_draw.h" />
|
||||
<ClInclude Include="SDL\src\render\software\SDL_drawline.h" />
|
||||
<ClInclude Include="SDL\src\render\software\SDL_drawpoint.h" />
|
||||
<ClInclude Include="SDL\src\render\software\SDL_render_sw_c.h" />
|
||||
<ClInclude Include="SDL\src\render\software\SDL_rotate.h" />
|
||||
<ClInclude Include="SDL\src\render\software\SDL_triangle.h" />
|
||||
<ClInclude Include="SDL\src\SDL_assert_c.h" />
|
||||
<ClInclude Include="SDL\src\SDL_dataqueue.h" />
|
||||
<ClInclude Include="SDL\src\SDL_error_c.h" />
|
||||
<ClInclude Include="SDL\src\SDL_hints_c.h" />
|
||||
<ClInclude Include="SDL\src\SDL_internal.h" />
|
||||
<ClInclude Include="SDL\src\SDL_list.h" />
|
||||
<ClInclude Include="SDL\src\SDL_log_c.h" />
|
||||
<ClInclude Include="SDL\src\sensor\dummy\SDL_dummysensor.h" />
|
||||
<ClInclude Include="SDL\src\sensor\SDL_sensor_c.h" />
|
||||
<ClInclude Include="SDL\src\sensor\SDL_syssensor.h" />
|
||||
<ClInclude Include="SDL\src\sensor\windows\SDL_windowssensor.h" />
|
||||
<ClInclude Include="SDL\src\thread\SDL_systhread.h" />
|
||||
<ClInclude Include="SDL\src\thread\SDL_thread_c.h" />
|
||||
<ClInclude Include="SDL\src\thread\generic\SDL_syscond_c.h" />
|
||||
<ClInclude Include="SDL\src\thread\windows\SDL_sysmutex_c.h" />
|
||||
<ClInclude Include="SDL\src\thread\windows\SDL_systhread_c.h" />
|
||||
<ClInclude Include="SDL\src\timer\SDL_timer_c.h" />
|
||||
<ClInclude Include="SDL\src\video\dummy\SDL_nullevents_c.h" />
|
||||
<ClInclude Include="SDL\src\video\dummy\SDL_nullframebuffer_c.h" />
|
||||
<ClInclude Include="SDL\src\video\dummy\SDL_nullvideo.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vk_icd.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vk_layer.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vk_platform.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vk_sdk_platform.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan.hpp" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_android.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_beta.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_core.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_directfb.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_fuchsia.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_ggp.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_ios.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_macos.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_metal.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_vi.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_wayland.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_win32.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_xcb.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_xlib.h" />
|
||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_xlib_xrandr.h" />
|
||||
<ClInclude Include="SDL\src\video\SDL_blit.h" />
|
||||
<ClInclude Include="SDL\src\video\SDL_blit_auto.h" />
|
||||
<ClInclude Include="SDL\src\video\SDL_blit_copy.h" />
|
||||
<ClInclude Include="SDL\src\video\SDL_blit_slow.h" />
|
||||
<ClInclude Include="SDL\src\video\SDL_egl_c.h" />
|
||||
<ClInclude Include="SDL\src\video\SDL_pixels_c.h" />
|
||||
<ClInclude Include="SDL\src\video\SDL_rect_c.h" />
|
||||
<ClInclude Include="SDL\src\video\SDL_RLEaccel_c.h" />
|
||||
<ClInclude Include="SDL\src\video\SDL_shape_internals.h" />
|
||||
<ClInclude Include="SDL\src\video\SDL_sysvideo.h" />
|
||||
<ClInclude Include="SDL\src\video\SDL_vulkan_internal.h" />
|
||||
<ClInclude Include="SDL\src\video\SDL_yuv_c.h" />
|
||||
<ClInclude Include="SDL\src\video\windows\SDL_msctf.h" />
|
||||
<ClInclude Include="SDL\src\video\windows\SDL_vkeys.h" />
|
||||
<ClInclude Include="SDL\src\video\windows\SDL_windowsclipboard.h" />
|
||||
<ClInclude Include="SDL\src\video\windows\SDL_windowsevents.h" />
|
||||
<ClInclude Include="SDL\src\video\windows\SDL_windowsframebuffer.h" />
|
||||
<ClInclude Include="SDL\src\video\windows\SDL_windowskeyboard.h" />
|
||||
<ClInclude Include="SDL\src\video\windows\SDL_windowsmessagebox.h" />
|
||||
<ClInclude Include="SDL\src\video\windows\SDL_windowsmodes.h" />
|
||||
<ClInclude Include="SDL\src\video\windows\SDL_windowsmouse.h" />
|
||||
<ClInclude Include="SDL\src\video\windows\SDL_windowsopengl.h" />
|
||||
<ClInclude Include="SDL\src\video\windows\SDL_windowsopengles.h" />
|
||||
<ClInclude Include="SDL\src\video\windows\SDL_windowsshape.h" />
|
||||
<ClInclude Include="SDL\src\video\windows\SDL_windowsvideo.h" />
|
||||
<ClInclude Include="SDL\src\video\windows\SDL_windowsvulkan.h" />
|
||||
<ClInclude Include="SDL\src\video\windows\SDL_windowswindow.h" />
|
||||
<ClInclude Include="SDL\src\video\windows\wmmsg.h" />
|
||||
<ClInclude Include="SDL\src\video\yuv2rgb\yuv_rgb.h" />
|
||||
<ClInclude Include="SDL\src\video\yuv2rgb\yuv_rgb_sse_func.h" />
|
||||
<ClInclude Include="SDL\src\video\yuv2rgb\yuv_rgb_std_func.h" />
|
||||
<ClInclude Include="SDL\src\joystick\hidapi\SDL_hidapi_nintendo.h" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
Vendored
+1
-1
@@ -1,4 +1,4 @@
|
||||
cmake_minimum_required(VERSION 2.8.4)
|
||||
cmake_minimum_required(VERSION 3.0)
|
||||
|
||||
project(libusb)
|
||||
|
||||
|
||||
Vendored
+5
-1
@@ -89,7 +89,11 @@ set(PACKAGE_URL "http://www.libusb.org" CACHE INTERNAL "package url" FORCE)
|
||||
set(PACKAGE_TARNAME "libusb" CACHE INTERNAL "tarball name" FORCE)
|
||||
set(VERSION "${PACKAGE_VERSION}" CACHE INTERNAL "version" FORCE)
|
||||
|
||||
configure_file(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h @ONLY)
|
||||
if(MSVC)
|
||||
file(COPY libusb/msvc/config.h DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
|
||||
else()
|
||||
configure_file(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h @ONLY)
|
||||
endif()
|
||||
message(STATUS "Generated configuration file in ${CMAKE_CURRENT_BINARY_DIR}/config.h")
|
||||
|
||||
# for generated config.h
|
||||
|
||||
Vendored
+8
-17
@@ -3,22 +3,6 @@ include(os.cmake)
|
||||
include(config.cmake)
|
||||
include(FindThreads)
|
||||
|
||||
set (LIBUSB_COMMON
|
||||
core.c
|
||||
descriptor.c
|
||||
io.c
|
||||
sync.c
|
||||
hotplug.c
|
||||
strerror.c
|
||||
libusb-1.0.rc
|
||||
libusb-1.0.def
|
||||
)
|
||||
|
||||
foreach(SRC IN LISTS LIBUSB_COMMON)
|
||||
list(APPEND LIBUSB_COMMON_FINAL ${LIBUSB_SOURCE_DIR}/libusb/${SRC})
|
||||
endforeach()
|
||||
|
||||
|
||||
include_directories(${LIBUSB_SOURCE_DIR}/libusb)
|
||||
include_directories(${LIBUSB_SOURCE_DIR}/libusb/os)
|
||||
|
||||
@@ -28,7 +12,14 @@ endif()
|
||||
|
||||
add_library(usb-1.0-static
|
||||
STATIC
|
||||
${LIBUSB_COMMON_FINAL}
|
||||
libusb/libusb/core.c
|
||||
libusb/libusb/descriptor.c
|
||||
libusb/libusb/io.c
|
||||
libusb/libusb/sync.c
|
||||
libusb/libusb/hotplug.c
|
||||
libusb/libusb/strerror.c
|
||||
libusb/libusb/libusb-1.0.rc
|
||||
libusb/libusb/libusb-1.0.def
|
||||
${LIBUSB_PLATFORM}
|
||||
)
|
||||
|
||||
|
||||
Vendored
+22
-21
@@ -5,42 +5,43 @@ if (CMAKE_USE_PTHREADS_INIT)
|
||||
set(PTHREADS_ENABLED TRUE)
|
||||
endif()
|
||||
|
||||
if (WIN32 OR "${CMAKE_SYSTEM_NAME}" STREQUAL "CYGWIN")
|
||||
if (CYGWIN)
|
||||
add_compile_definitions(PLATFORM_WINDOWS=1)
|
||||
set(OS_WINDOWS 1 CACHE INTERNAL "controls config.h macro definition" FORCE)
|
||||
set(OS_WINDOWS 1)
|
||||
|
||||
# Enable MingW support for RC language (for CMake pre-2.8)
|
||||
if (MINGW)
|
||||
set(CMAKE_RC_COMPILER_INIT windres)
|
||||
set(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> <FLAGS> -O coff <DEFINES> -i <SOURCE> -o <OBJECT>")
|
||||
endif()
|
||||
enable_language(RC)
|
||||
|
||||
if ("${CMAKE_SYSTEM_NAME}" STREQUAL "CYGWIN")
|
||||
message(STATUS "Detected cygwin")
|
||||
set(PTHREADS_ENABLED TRUE)
|
||||
set(WITHOUT_POLL_H TRUE CACHE INTERNAL "Disable using poll.h even if it's available - use windows poll instead fo cygwin's" FORCE)
|
||||
endif()
|
||||
message(STATUS "Detected Cygwin")
|
||||
set(PTHREADS_ENABLED TRUE)
|
||||
set(WITHOUT_POLL_H TRUE)
|
||||
|
||||
list(APPEND PLATFORM_SRC
|
||||
events_windows.c
|
||||
windows_usbdk.c
|
||||
windows_common.c
|
||||
windows_winusb.c
|
||||
threads_windows.c
|
||||
)
|
||||
|
||||
if (PTHREADS_ENABLED AND NOT WITHOUT_PTHREADS)
|
||||
list(APPEND PLATFORM_SRC threads_posix)
|
||||
else()
|
||||
list(APPEND PLATFORM_SRC threads_windows.c)
|
||||
endif()
|
||||
elseif(WIN32)
|
||||
add_compile_definitions(PLATFORM_WINDOWS=1)
|
||||
set(OS_WINDOWS 1)
|
||||
set(PTHREADS_ENABLED FALSE)
|
||||
|
||||
list(APPEND PLATFORM_SRC
|
||||
events_windows.c
|
||||
windows_usbdk.c
|
||||
windows_common.c
|
||||
windows_winusb.c
|
||||
)
|
||||
|
||||
list(APPEND PLATFORM_SRC threads_windows.c)
|
||||
elseif (APPLE)
|
||||
# Apple != OSX alone
|
||||
add_compile_definitions(PLATFORM_POSIX=1 HAVE_CLOCK_GETTIME)
|
||||
set(OS_DARWIN 1 CACHE INTERNAL "controls config.h macro definition" FORCE)
|
||||
set(OS_DARWIN 1)
|
||||
|
||||
if ("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
||||
set(PLATFORM_SRC
|
||||
darwin_usb.c
|
||||
threads_posix.c
|
||||
@@ -77,7 +78,7 @@ elseif (UNIX)
|
||||
# Unix is for all *NIX systems including OSX
|
||||
add_compile_definitions(PLATFORM_POSIX=1 HAVE_CLOCK_GETTIME)
|
||||
if ("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
|
||||
set(OS_LINUX 1 CACHE INTERNAL "controls config.h macro definition" FORCE)
|
||||
set(OS_LINUX 1)
|
||||
|
||||
set(PLATFORM_SRC
|
||||
linux_usbfs.c
|
||||
@@ -108,4 +109,4 @@ set(LIBUSB_LIBRARIES ${LIBUSB_LIBRARIES} PARENT_SCOPE)
|
||||
if (WITHOUT_PTHREADS)
|
||||
set(PTHREADS_ENABLED FALSE)
|
||||
endif()
|
||||
set(THREADS_POSIX ${PTHREADS_ENABLED} CACHE INTERNAL "use pthreads" FORCE)
|
||||
set(THREADS_POSIX ${PTHREADS_ENABLED})
|
||||
|
||||
Vendored
-93
@@ -1,93 +0,0 @@
|
||||
if(WITH_LLVM)
|
||||
CHECK_CXX_COMPILER_FLAG("-msse -msse2 -mcx16" COMPILER_X86)
|
||||
CHECK_CXX_COMPILER_FLAG("-march=armv8-a+lse" COMPILER_ARM)
|
||||
|
||||
if(BUILD_LLVM_SUBMODULE)
|
||||
message(STATUS "LLVM will be built from the submodule.")
|
||||
|
||||
set(LLVM_TARGETS_TO_BUILD "AArch64;X86")
|
||||
option(LLVM_BUILD_RUNTIME OFF)
|
||||
option(LLVM_BUILD_TOOLS OFF)
|
||||
option(LLVM_INCLUDE_BENCHMARKS OFF)
|
||||
option(LLVM_INCLUDE_DOCS OFF)
|
||||
option(LLVM_INCLUDE_EXAMPLES OFF)
|
||||
option(LLVM_INCLUDE_TESTS OFF)
|
||||
option(LLVM_INCLUDE_TOOLS OFF)
|
||||
option(LLVM_INCLUDE_UTILS OFF)
|
||||
option(LLVM_CCACHE_BUILD ON)
|
||||
|
||||
if(WIN32)
|
||||
set(LLVM_USE_INTEL_JITEVENTS ON)
|
||||
endif()
|
||||
|
||||
if(CMAKE_SYSTEM MATCHES "Linux")
|
||||
set(LLVM_USE_INTEL_JITEVENTS ON)
|
||||
set(LLVM_USE_PERF ON)
|
||||
endif()
|
||||
|
||||
set(CXX_FLAGS_OLD ${CMAKE_CXX_FLAGS})
|
||||
|
||||
if (MSVC)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS")
|
||||
endif()
|
||||
|
||||
# LLVM needs to be built out-of-tree
|
||||
add_subdirectory(${CMAKE_SOURCE_DIR}/llvm ${CMAKE_CURRENT_BINARY_DIR}/llvm_build EXCLUDE_FROM_ALL)
|
||||
set(LLVM_DIR "${CMAKE_CURRENT_BINARY_DIR}/llvm_build/lib/cmake/llvm/")
|
||||
|
||||
set(CMAKE_CXX_FLAGS ${CXX_FLAGS_OLD})
|
||||
|
||||
# now tries to find LLVM again
|
||||
find_package(LLVM 13.0 CONFIG)
|
||||
if(NOT LLVM_FOUND)
|
||||
message(FATAL_ERROR "Couldn't build LLVM from the submodule. You might need to run `git submodule update --init`")
|
||||
endif()
|
||||
|
||||
else()
|
||||
message(STATUS "Using prebuilt LLVM")
|
||||
|
||||
if (LLVM_DIR AND NOT IS_ABSOLUTE "${LLVM_DIR}")
|
||||
# change relative LLVM_DIR to be relative to the source dir
|
||||
set(LLVM_DIR ${CMAKE_SOURCE_DIR}/${LLVM_DIR})
|
||||
endif()
|
||||
|
||||
find_package(LLVM 13.0 CONFIG)
|
||||
|
||||
if (NOT LLVM_FOUND)
|
||||
if (LLVM_VERSION AND LLVM_VERSION_MAJOR LESS 11)
|
||||
message(FATAL_ERROR "Found LLVM version ${LLVM_VERSION}. Required version 11.0. \
|
||||
Enable BUILD_LLVM_SUBMODULE option to build LLVM from included as a git submodule.")
|
||||
endif()
|
||||
|
||||
message(FATAL_ERROR "Can't find LLVM libraries from the CMAKE_PREFIX_PATH path or LLVM_DIR. \
|
||||
Enable BUILD_LLVM_SUBMODULE option to build LLVM from included as a git submodule.")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(LLVM_LIBS LLVMMCJIT)
|
||||
|
||||
if(COMPILER_X86)
|
||||
set(LLVM_LIBS ${LLVM_LIBS} LLVMX86CodeGen LLVMX86AsmParser)
|
||||
endif()
|
||||
|
||||
if(COMPILER_ARM)
|
||||
set(LLVM_LIBS ${LLVM_LIBS} LLVMX86CodeGen LLVMX86AsmParser LLVMAArch64CodeGen LLVMAArch64AsmParser)
|
||||
endif()
|
||||
|
||||
if(WIN32 OR CMAKE_SYSTEM MATCHES "Linux")
|
||||
set(LLVM_LIBS ${LLVM_LIBS} LLVMIntelJITEvents)
|
||||
endif()
|
||||
|
||||
if(CMAKE_SYSTEM MATCHES "Linux")
|
||||
set(LLVM_LIBS ${LLVM_LIBS} LLVMPerfJITEvents)
|
||||
endif()
|
||||
|
||||
add_library(3rdparty_llvm INTERFACE)
|
||||
target_link_libraries(3rdparty_llvm INTERFACE ${LLVM_LIBS})
|
||||
target_include_directories(3rdparty_llvm INTERFACE ${LLVM_INCLUDE_DIRS})
|
||||
target_compile_definitions(3rdparty_llvm INTERFACE ${LLVM_DEFINITIONS} -DLLVM_AVAILABLE)
|
||||
|
||||
add_library(3rdparty::llvm ALIAS 3rdparty_llvm)
|
||||
else()
|
||||
add_library(3rdparty::llvm ALIAS 3rdparty_dummy_lib)
|
||||
endif()
|
||||
Vendored
+99
@@ -0,0 +1,99 @@
|
||||
if(WITH_LLVM)
|
||||
check_cxx_compiler_flag("-msse -msse2 -mcx16" COMPILER_X86)
|
||||
check_cxx_compiler_flag("-march=armv8-a+lse" COMPILER_ARM)
|
||||
|
||||
if(BUILD_LLVM)
|
||||
message(STATUS "LLVM will be built from the submodule.")
|
||||
|
||||
set(LLVM_TARGETS_TO_BUILD "AArch64;X86" CACHE STRING "Semicolon-separated list of targets to build, or \"all\".")
|
||||
option(LLVM_BUILD_RUNTIME OFF)
|
||||
option(LLVM_BUILD_TOOLS OFF)
|
||||
option(LLVM_INCLUDE_BENCHMARKS OFF)
|
||||
option(LLVM_INCLUDE_DOCS OFF)
|
||||
option(LLVM_INCLUDE_EXAMPLES OFF)
|
||||
option(LLVM_INCLUDE_TESTS OFF)
|
||||
option(LLVM_INCLUDE_TOOLS OFF)
|
||||
option(LLVM_INCLUDE_UTILS OFF)
|
||||
# we globally enable ccache
|
||||
set(LLVM_CCACHE_BUILD OFF CACHE BOOL "Set to ON for a ccache enabled build")
|
||||
|
||||
if(WIN32)
|
||||
set(LLVM_USE_INTEL_JITEVENTS ON)
|
||||
endif()
|
||||
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
set(LLVM_USE_INTEL_JITEVENTS ON)
|
||||
set(LLVM_USE_PERF ON)
|
||||
endif()
|
||||
|
||||
if (MSVC)
|
||||
add_compile_definitions("$<$<COMPILE_LANGUAGE:CXX>:_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS>")
|
||||
endif()
|
||||
|
||||
# LLVM needs to be built out-of-tree
|
||||
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/llvm/llvm ${CMAKE_CURRENT_BINARY_DIR}/llvm_build EXCLUDE_FROM_ALL)
|
||||
set(LLVM_DIR "${CMAKE_CURRENT_BINARY_DIR}/llvm_build/lib/cmake/llvm/")
|
||||
|
||||
set(STATIC_LINK_LLVM ON CACHE BOOL "Link against LLVM statically. This will get set to ON if you build LLVM from the submodule." FORCE)
|
||||
|
||||
# now tries to find LLVM again
|
||||
find_package(LLVM 16.0 CONFIG)
|
||||
if(NOT LLVM_FOUND)
|
||||
message(FATAL_ERROR "Couldn't build LLVM from the submodule. You might need to run `git submodule update --init`")
|
||||
endif()
|
||||
else()
|
||||
message(STATUS "Using prebuilt or system LLVM")
|
||||
|
||||
if (LLVM_DIR AND NOT IS_ABSOLUTE "${LLVM_DIR}")
|
||||
# change relative LLVM_DIR to be relative to the source dir
|
||||
set(LLVM_DIR ${CMAKE_SOURCE_DIR}/${LLVM_DIR})
|
||||
endif()
|
||||
|
||||
find_package(LLVM 16.0 CONFIG)
|
||||
|
||||
if (NOT LLVM_FOUND)
|
||||
if (LLVM_VERSION AND LLVM_VERSION_MAJOR LESS 16)
|
||||
message(FATAL_ERROR "Found LLVM version ${LLVM_VERSION}. Required version 16. \
|
||||
Enable BUILD_LLVM option to build LLVM from included as a git submodule.")
|
||||
endif()
|
||||
|
||||
message(FATAL_ERROR "Can't find LLVM libraries from the CMAKE_PREFIX_PATH path or LLVM_DIR. \
|
||||
Enable BUILD_LLVM option to build LLVM from included as a git submodule.")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (STATIC_LINK_LLVM)
|
||||
if (NOT DEFINED LLVM_TARGETS_TO_BUILD)
|
||||
if(COMPILER_ARM)
|
||||
set(LLVM_TARGETS_TO_BUILD "AArch64;X86" CACHE STRING "Semicolon-separated list of targets to build, or \"all\".")
|
||||
else()
|
||||
set(LLVM_TARGETS_TO_BUILD "X86" CACHE STRING "Semicolon-separated list of targets to build, or \"all\".")
|
||||
endif()
|
||||
endif()
|
||||
if((WIN32 AND BUILD_LLVM) OR CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
list (APPEND LLVM_ADDITIONAL_LIBS IntelJITEvents)
|
||||
endif()
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
list (APPEND LLVM_ADDITIONAL_LIBS PerfJITEvents)
|
||||
endif()
|
||||
llvm_map_components_to_libnames(LLVM_LIBS
|
||||
${LLVM_TARGETS_TO_BUILD}
|
||||
${LLVM_ADDITIONAL_LIBS}
|
||||
Core
|
||||
ExecutionEngine
|
||||
MCJIT
|
||||
)
|
||||
else()
|
||||
set(LLVM_LIBS LLVM)
|
||||
endif()
|
||||
|
||||
add_library(3rdparty_llvm INTERFACE)
|
||||
target_link_libraries(3rdparty_llvm INTERFACE ${LLVM_LIBS})
|
||||
target_include_directories(3rdparty_llvm INTERFACE ${LLVM_INCLUDE_DIRS})
|
||||
separate_arguments(LLVM_DEFINITIONS_LIST NATIVE_COMMAND ${LLVM_DEFINITIONS})
|
||||
target_compile_definitions(3rdparty_llvm INTERFACE ${LLVM_DEFINITIONS_LIST} LLVM_AVAILABLE)
|
||||
|
||||
add_library(3rdparty::llvm ALIAS 3rdparty_llvm)
|
||||
else()
|
||||
add_library(3rdparty::llvm ALIAS 3rdparty_dummy_lib)
|
||||
endif()
|
||||
+1
Submodule 3rdparty/llvm/llvm added at cd89023f79
+4
-4
@@ -14,9 +14,9 @@
|
||||
<ProjectGuid>{8BC303AB-25BE-4276-8E57-73F171B2D672}</ProjectGuid>
|
||||
<Keyword>MakeFileProj</Keyword>
|
||||
</PropertyGroup>
|
||||
<Import Project="..\buildfiles\msvc\common_default.props" />
|
||||
<Import Project="$(SolutionDir)\buildfiles\msvc\common_default.props" />
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<Import Project="..\buildfiles\msvc\common_default_macros.props" />
|
||||
<Import Project="$(SolutionDir)\buildfiles\msvc\common_default_macros.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Makefile</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
@@ -39,9 +39,9 @@
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros">
|
||||
<CmakeReleaseCLI>call vsdevcmd.bat -arch=amd64
|
||||
cmake -G Ninja -DCMAKE_CXX_COMPILER="cl.exe" -DCMAKE_C_COMPILER="cl.exe" -DCMAKE_BUILD_TYPE="Release" -DCMAKE_INSTALL_PREFIX="./Release" -DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_DEFAULT_TARGET_TRIPLE:STRING=x86_64-pc-windows-msvc -DLLVM_HOST_TRIPLE:STRING=x86_64-pc-windows-msvc -DLLVM_BUILD_RUNTIME=OFF -DLLVM_BUILD_TOOLS=OFF -DLLVM_INCLUDE_DOCS=OFF -DLLVM_INCLUDE_EXAMPLES=OFF -DLLVM_INCLUDE_TESTS=OFF -DLLVM_INCLUDE_TOOLS=OFF -DLLVM_INCLUDE_UTILS=OFF -DCMAKE_SYSTEM_VERSION=6.1 -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON -DCMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION=$(WindowsTargetPlatformVersion) -DLLVM_USE_CRT_DEBUG=MTd -DLLVM_USE_CRT_RELEASE=MT -DLLVM_USE_INTEL_JITEVENTS=ON ../llvm</CmakeReleaseCLI>
|
||||
cmake -G Ninja -DCMAKE_CXX_COMPILER="cl.exe" -DCMAKE_C_COMPILER="cl.exe" -DCMAKE_BUILD_TYPE="Release" -DCMAKE_INSTALL_PREFIX="./Release" -DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_DEFAULT_TARGET_TRIPLE:STRING=x86_64-pc-windows-msvc -DLLVM_HOST_TRIPLE:STRING=x86_64-pc-windows-msvc -DLLVM_BUILD_RUNTIME=OFF -DLLVM_BUILD_TOOLS=OFF -DLLVM_INCLUDE_DOCS=OFF -DLLVM_INCLUDE_EXAMPLES=OFF -DLLVM_INCLUDE_TESTS=OFF -DLLVM_INCLUDE_BENCHMARKS=OFF -DLLVM_INCLUDE_UTILS=OFF -DCMAKE_SYSTEM_VERSION=6.1 -DCMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION=$(WindowsTargetPlatformVersion) -DLLVM_USE_CRT_DEBUG=MTd -DLLVM_USE_CRT_RELEASE=MT -DLLVM_USE_INTEL_JITEVENTS=ON ../llvm/llvm</CmakeReleaseCLI>
|
||||
<CmakeDebugCLI>call vsdevcmd.bat -arch=amd64
|
||||
cmake -G Ninja -DCMAKE_CXX_COMPILER="cl.exe" -DCMAKE_C_COMPILER="cl.exe" -DCMAKE_BUILD_TYPE="Debug" -DCMAKE_INSTALL_PREFIX="./Debug" -DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_DEFAULT_TARGET_TRIPLE:STRING=x86_64-pc-windows-msvc -DLLVM_HOST_TRIPLE:STRING=x86_64-pc-windows-msvc -DLLVM_BUILD_RUNTIME=OFF -DLLVM_BUILD_TOOLS=OFF -DLLVM_INCLUDE_DOCS=OFF -DLLVM_INCLUDE_EXAMPLES=OFF -DLLVM_INCLUDE_TESTS=OFF -DLLVM_INCLUDE_TOOLS=OFF -DLLVM_INCLUDE_UTILS=OFF -DCMAKE_SYSTEM_VERSION=6.1 -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON -DCMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION=$(WindowsTargetPlatformVersion) -DLLVM_USE_CRT_DEBUG=MTd -DLLVM_USE_CRT_RELEASE=MT -DLLVM_USE_INTEL_JITEVENTS=ON ../llvm</CmakeDebugCLI>
|
||||
cmake -G Ninja -DCMAKE_CXX_COMPILER="cl.exe" -DCMAKE_C_COMPILER="cl.exe" -DCMAKE_BUILD_TYPE="Debug" -DCMAKE_INSTALL_PREFIX="./Debug" -DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_DEFAULT_TARGET_TRIPLE:STRING=x86_64-pc-windows-msvc -DLLVM_HOST_TRIPLE:STRING=x86_64-pc-windows-msvc -DLLVM_BUILD_RUNTIME=OFF -DLLVM_BUILD_TOOLS=OFF -DLLVM_INCLUDE_DOCS=OFF -DLLVM_INCLUDE_EXAMPLES=OFF -DLLVM_INCLUDE_TESTS=OFF -DLLVM_INCLUDE_BENCHMARKS=OFF -DLLVM_INCLUDE_UTILS=OFF -DCMAKE_SYSTEM_VERSION=6.1 -DCMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION=$(WindowsTargetPlatformVersion) -DLLVM_USE_CRT_DEBUG=MTd -DLLVM_USE_CRT_RELEASE=MT -DLLVM_USE_INTEL_JITEVENTS=ON ../llvm/llvm</CmakeDebugCLI>
|
||||
<CmakeCleanCLI>echo Cleaning..
|
||||
for /F "delims= eol=|" %%f in ('
|
||||
dir /b ^| findstr /V "[^.]*\build[^.]*\.vcxproj"') do (
|
||||
Vendored
Vendored
+4
-4
@@ -14,9 +14,9 @@
|
||||
<ProjectGuid>{A37E4273-85DB-4217-B775-CE971B87D9DF}</ProjectGuid>
|
||||
<Keyword>MakeFileProj</Keyword>
|
||||
</PropertyGroup>
|
||||
<Import Project="..\buildfiles\msvc\common_default_clang_cl.props" />
|
||||
<Import Project="$(SolutionDir)\buildfiles\msvc\common_default_clang_cl.props" />
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<Import Project="..\buildfiles\msvc\common_default_macros.props" />
|
||||
<Import Project="$(SolutionDir)\buildfiles\msvc\common_default_macros.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Makefile</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
@@ -39,9 +39,9 @@
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros">
|
||||
<CmakeReleaseCLI>call vsdevcmd.bat -arch=amd64
|
||||
cmake -G Ninja -DCMAKE_CXX_COMPILER="clang-cl.exe" -DCMAKE_C_COMPILER="clang-cl.exe" -DCMAKE_BUILD_TYPE="Release" -DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_DEFAULT_TARGET_TRIPLE:STRING=x86_64-pc-windows-msvc -DLLVM_HOST_TRIPLE:STRING=x86_64-pc-windows-msvc -DCMAKE_INSTALL_PREFIX="./Release" -DLLVM_BUILD_RUNTIME=OFF -DLLVM_BUILD_TOOLS=OFF -DLLVM_INCLUDE_DOCS=OFF -DLLVM_INCLUDE_EXAMPLES=OFF -DLLVM_INCLUDE_TESTS=OFF -DLLVM_INCLUDE_TOOLS=OFF -DLLVM_INCLUDE_UTILS=OFF -DCMAKE_SYSTEM_VERSION=6.1 -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON -DCMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION=$(WindowsTargetPlatformVersion) -DLLVM_USE_CRT_DEBUG=MTd -DLLVM_USE_CRT_RELEASE=MT -DLLVM_USE_INTEL_JITEVENTS=ON ../llvm</CmakeReleaseCLI>
|
||||
cmake -G Ninja -DCMAKE_CXX_COMPILER="clang-cl.exe" -DCMAKE_C_COMPILER="clang-cl.exe" -DCMAKE_BUILD_TYPE="Release" -DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_DEFAULT_TARGET_TRIPLE:STRING=x86_64-pc-windows-msvc -DLLVM_HOST_TRIPLE:STRING=x86_64-pc-windows-msvc -DCMAKE_INSTALL_PREFIX="./Release" -DLLVM_BUILD_RUNTIME=OFF -DLLVM_BUILD_TOOLS=OFF -DLLVM_INCLUDE_DOCS=OFF -DLLVM_INCLUDE_EXAMPLES=OFF -DLLVM_INCLUDE_TESTS=OFF -DLLVM_INCLUDE_BENCHMARKS=OFF -DLLVM_INCLUDE_UTILS=OFF -DCMAKE_SYSTEM_VERSION=6.1 -DCMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION=$(WindowsTargetPlatformVersion) -DLLVM_USE_CRT_DEBUG=MTd -DLLVM_USE_CRT_RELEASE=MT -DLLVM_USE_INTEL_JITEVENTS=ON ../llvm/llvm</CmakeReleaseCLI>
|
||||
<CmakeDebugCLI>call vsdevcmd.bat -arch=amd64
|
||||
cmake -G Ninja -DCMAKE_CXX_COMPILER="clang-cl.exe" -DCMAKE_C_COMPILER="clang-cl.exe" -DCMAKE_BUILD_TYPE="Debug" -DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_DEFAULT_TARGET_TRIPLE:STRING=x86_64-pc-windows-msvc -DLLVM_HOST_TRIPLE:STRING=x86_64-pc-windows-msvc -DCMAKE_INSTALL_PREFIX="./Debug" -DLLVM_BUILD_RUNTIME=OFF -DLLVM_BUILD_TOOLS=OFF -DLLVM_INCLUDE_DOCS=OFF -DLLVM_INCLUDE_EXAMPLES=OFF -DLLVM_INCLUDE_TESTS=OFF -DLLVM_INCLUDE_TOOLS=OFF -DLLVM_INCLUDE_UTILS=OFF -DCMAKE_SYSTEM_VERSION=6.1 -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON -DCMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION=$(WindowsTargetPlatformVersion) -DLLVM_USE_CRT_DEBUG=MTd -DLLVM_USE_CRT_RELEASE=MT -DLLVM_USE_INTEL_JITEVENTS=ON ../llvm</CmakeDebugCLI>
|
||||
cmake -G Ninja -DCMAKE_CXX_COMPILER="clang-cl.exe" -DCMAKE_C_COMPILER="clang-cl.exe" -DCMAKE_BUILD_TYPE="Debug" -DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_DEFAULT_TARGET_TRIPLE:STRING=x86_64-pc-windows-msvc -DLLVM_HOST_TRIPLE:STRING=x86_64-pc-windows-msvc -DCMAKE_INSTALL_PREFIX="./Debug" -DLLVM_BUILD_RUNTIME=OFF -DLLVM_BUILD_TOOLS=OFF -DLLVM_INCLUDE_DOCS=OFF -DLLVM_INCLUDE_EXAMPLES=OFF -DLLVM_INCLUDE_TESTS=OFF -DLLVM_INCLUDE_BENCHMARKS=OFF -DLLVM_INCLUDE_UTILS=OFF -DCMAKE_SYSTEM_VERSION=6.1 -DCMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION=$(WindowsTargetPlatformVersion) -DLLVM_USE_CRT_DEBUG=MTd -DLLVM_USE_CRT_RELEASE=MT -DLLVM_USE_INTEL_JITEVENTS=ON ../llvm/llvm</CmakeDebugCLI>
|
||||
<CmakeCleanCLI>echo Cleaning..
|
||||
for /F "delims= eol=|" %%f in ('
|
||||
dir /b ^| findstr /V "[^.]*\build[^.]*\.vcxproj"') do (
|
||||
Vendored
+8
@@ -0,0 +1,8 @@
|
||||
option (UPNPC_BUILD_STATIC "Build static library" TRUE)
|
||||
option (UPNPC_BUILD_SHARED "Build shared library" FALSE)
|
||||
option (UPNPC_BUILD_TESTS "Build test executables" FALSE)
|
||||
option (UPNPC_BUILD_SAMPLE "Build sample executables" FALSE)
|
||||
option (NO_GETADDRINFO "Define NO_GETADDRINFO" FALSE)
|
||||
option (UPNPC_NO_INSTALL "Disable installation" TRUE)
|
||||
|
||||
add_subdirectory(miniupnp/miniupnpc EXCLUDE_FROM_ALL)
|
||||
+1
Submodule 3rdparty/miniupnp/miniupnp added at e439318cf7
+138
@@ -0,0 +1,138 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<ProjectGuid>{5228f863-e0dd-4de7-aa7b-5c52b14cd4d0}</ProjectGuid>
|
||||
<RootNamespace>miniupnpcstatic</RootNamespace>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(SolutionDir)\buildfiles\msvc\common_default.props" />
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<Import Project="$(SolutionDir)\buildfiles\msvc\common_default_macros.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</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" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<OutDir>$(SolutionDir)lib\$(Configuration)-$(Platform)\</OutDir>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<OutDir>$(SolutionDir)lib\$(Configuration)-$(Platform)\</OutDir>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>_WINSOCK_DEPRECATED_NO_WARNINGS; _CRT_SECURE_NO_WARNINGS;MINIUPNP_STATICLIB;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<AdditionalIncludeDirectories>generated;miniupnp\miniupnpc;miniupnp\miniupnpc\include</AdditionalIncludeDirectories>
|
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
</Link>
|
||||
<PreBuildEvent>
|
||||
<Command>cd $(ProjectDir)miniupnp\miniupnpc\msvc
|
||||
cscript genminiupnpcstrings.vbs</Command>
|
||||
</PreBuildEvent>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>_WINSOCK_DEPRECATED_NO_WARNINGS; _CRT_SECURE_NO_WARNINGS;MINIUPNP_STATICLIB;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<AdditionalIncludeDirectories>generated;miniupnp\miniupnpc;miniupnp\miniupnpc\include</AdditionalIncludeDirectories>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>
|
||||
</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
<PreBuildEvent>
|
||||
<Command>cd $(ProjectDir)miniupnp\miniupnpc\msvc
|
||||
cscript genminiupnpcstrings.vbs</Command>
|
||||
</PreBuildEvent>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="miniupnp\miniupnpc\src\addr_is_reserved.c" />
|
||||
<ClCompile Include="miniupnp\miniupnpc\src\connecthostport.c" />
|
||||
<ClCompile Include="miniupnp\miniupnpc\src\igd_desc_parse.c" />
|
||||
<ClCompile Include="miniupnp\miniupnpc\src\minisoap.c" />
|
||||
<ClCompile Include="miniupnp\miniupnpc\src\minissdpc.c" />
|
||||
<ClCompile Include="miniupnp\miniupnpc\src\miniupnpc.c" />
|
||||
<ClCompile Include="miniupnp\miniupnpc\src\miniwget.c" />
|
||||
<ClCompile Include="miniupnp\miniupnpc\src\minixml.c" />
|
||||
<ClCompile Include="miniupnp\miniupnpc\src\portlistingparse.c" />
|
||||
<ClCompile Include="miniupnp\miniupnpc\src\receivedata.c" />
|
||||
<ClCompile Include="miniupnp\miniupnpc\src\upnpcommands.c" />
|
||||
<ClCompile Include="miniupnp\miniupnpc\src\upnpdev.c" />
|
||||
<ClCompile Include="miniupnp\miniupnpc\src\upnperrors.c" />
|
||||
<ClCompile Include="miniupnp\miniupnpc\src\upnpreplyparse.c" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="miniupnp\miniupnpc\src\addr_is_reserved.h" />
|
||||
<ClInclude Include="miniupnp\miniupnpc\src\connecthostport.h" />
|
||||
<ClInclude Include="miniupnp\miniupnpc\include\igd_desc_parse.h" />
|
||||
<ClInclude Include="miniupnp\miniupnpc\src\minisoap.h" />
|
||||
<ClInclude Include="miniupnp\miniupnpc\src\minissdpc.h" />
|
||||
<ClInclude Include="miniupnp\miniupnpc\include\miniupnpc.h" />
|
||||
<ClInclude Include="miniupnp\miniupnpc\miniupnpcstrings.h" />
|
||||
<ClInclude Include="miniupnp\miniupnpc\include\miniupnpctypes.h" />
|
||||
<ClInclude Include="miniupnp\miniupnpc\include\miniupnpc_declspec.h" />
|
||||
<ClInclude Include="miniupnp\miniupnpc\include\miniwget.h" />
|
||||
<ClInclude Include="miniupnp\miniupnpc\src\miniwget_private.h" />
|
||||
<ClInclude Include="miniupnp\miniupnpc\src\minixml.h" />
|
||||
<ClInclude Include="miniupnp\miniupnpc\include\portlistingparse.h" />
|
||||
<ClInclude Include="miniupnp\miniupnpc\src\receivedata.h" />
|
||||
<ClInclude Include="miniupnp\miniupnpc\include\upnpcommands.h" />
|
||||
<ClInclude Include="miniupnp\miniupnpc\include\upnpdev.h" />
|
||||
<ClInclude Include="miniupnp\miniupnpc\include\upnperrors.h" />
|
||||
<ClInclude Include="miniupnp\miniupnpc\include\upnpreplyparse.h" />
|
||||
<ClInclude Include="miniupnp\miniupnpc\src\win32_snprintf.h" />
|
||||
<ClInclude Include="miniupnp\miniupnpc\rc_version.h" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
Vendored
+110
-105
@@ -12,23 +12,32 @@
|
||||
#include <thread>
|
||||
#include <sys/types.h>
|
||||
#if _WIN32
|
||||
#define read_portable(a, b, c) (recv(a, b, c, 0))
|
||||
#define write_portable(a, b, c) (send(a, b, c, 0))
|
||||
#define read_portable(a, b, c) (recv(a, b, ::narrow<int>(c), 0))
|
||||
#define write_portable(a, b, c) (send(a, b, ::narrow<int>(c), 0))
|
||||
#define close_portable(a) (closesocket(a))
|
||||
#define bzero(b, len) (memset((b), '\0', (len)), (void)0)
|
||||
#include <WinSock2.h>
|
||||
#include <windows.h>
|
||||
#include <ws2tcpip.h>
|
||||
#else
|
||||
#define read_portable(a, b, c) (read(a, b, c))
|
||||
#define write_portable(a, b, c) (write(a, b, c))
|
||||
#define close_portable(a) (close(a))
|
||||
#include <sys/socket.h>
|
||||
#include <sys/un.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <poll.h>
|
||||
#if defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__)
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32
|
||||
constexpr SOCKET invalid_socket = INVALID_SOCKET;
|
||||
#else
|
||||
constexpr int invalid_socket = -1;
|
||||
#endif
|
||||
|
||||
namespace pine
|
||||
{
|
||||
/**
|
||||
@@ -79,13 +88,13 @@ namespace pine
|
||||
* A preallocated buffer used to store all IPC replies.
|
||||
* to the size of 50.000 MsgWrite64 IPC calls.
|
||||
*/
|
||||
char* m_ret_buffer;
|
||||
std::vector<char> m_ret_buffer;
|
||||
|
||||
/**
|
||||
* IPC messages buffer.
|
||||
* A preallocated buffer used to store all IPC messages.
|
||||
*/
|
||||
char* m_ipc_buffer;
|
||||
std::vector<char> m_ipc_buffer;
|
||||
|
||||
/**
|
||||
* IPC Command messages opcodes.
|
||||
@@ -118,8 +127,8 @@ namespace pine
|
||||
*/
|
||||
struct IPCBuffer
|
||||
{
|
||||
int size; /**< Size of the buffer. */
|
||||
char* buffer; /**< Buffer. */
|
||||
usz size{}; /**< Size of the buffer. */
|
||||
char* buffer{}; /**< Buffer. */
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -144,13 +153,30 @@ namespace pine
|
||||
*/
|
||||
IPCBuffer ParseCommand(char* buf, char* ret_buffer, u32 buf_size)
|
||||
{
|
||||
u32 ret_cnt = 5;
|
||||
u32 buf_cnt = 0;
|
||||
usz ret_cnt = 5;
|
||||
usz buf_cnt = 0;
|
||||
|
||||
const auto error = [&]()
|
||||
{
|
||||
return IPCBuffer{ 5, MakeFailIPC(ret_buffer) };
|
||||
};
|
||||
|
||||
const auto write_string = [&](const std::string& str)
|
||||
{
|
||||
if (!SafetyChecks(buf_cnt, 0, ret_cnt, str.size() + 1 + sizeof(u32), buf_size))
|
||||
return false;
|
||||
ToArray(ret_buffer, ::narrow<u32>(str.size() + 1), ret_cnt);
|
||||
ret_cnt += sizeof(u32);
|
||||
memcpy(&ret_buffer[ret_cnt], str.data(), str.size());
|
||||
ret_cnt += str.size();
|
||||
ret_buffer[ret_cnt++] = '\0';
|
||||
return true;
|
||||
};
|
||||
|
||||
while (buf_cnt < buf_size)
|
||||
{
|
||||
if (!SafetyChecks(buf_cnt, 1, ret_cnt, 0, buf_size))
|
||||
return IPCBuffer{ 5, MakeFailIPC(ret_buffer) };
|
||||
return error();
|
||||
buf_cnt++;
|
||||
// example IPC messages: MsgRead/Write
|
||||
// refer to the client doc for more info on the format
|
||||
@@ -169,10 +195,10 @@ namespace pine
|
||||
case MsgRead8:
|
||||
{
|
||||
if (!SafetyChecks(buf_cnt, 4, ret_cnt, 1, buf_size))
|
||||
goto error;
|
||||
return error();
|
||||
const u32 a = FromArray<u32>(&buf[buf_cnt], 0);
|
||||
if (!Impl::template check_addr(a))
|
||||
goto error;
|
||||
return error();
|
||||
const u8 res = Impl::read8(a);
|
||||
ToArray(ret_buffer, res, ret_cnt);
|
||||
ret_cnt += 1;
|
||||
@@ -182,10 +208,10 @@ namespace pine
|
||||
case MsgRead16:
|
||||
{
|
||||
if (!SafetyChecks(buf_cnt, 4, ret_cnt, 2, buf_size))
|
||||
goto error;
|
||||
return error();
|
||||
const u32 a = FromArray<u32>(&buf[buf_cnt], 0);
|
||||
if (!Impl::template check_addr<2>(a))
|
||||
goto error;
|
||||
return error();
|
||||
const u16 res = Impl::read16(a);
|
||||
ToArray(ret_buffer, res, ret_cnt);
|
||||
ret_cnt += 2;
|
||||
@@ -195,10 +221,10 @@ namespace pine
|
||||
case MsgRead32:
|
||||
{
|
||||
if (!SafetyChecks(buf_cnt, 4, ret_cnt, 4, buf_size))
|
||||
goto error;
|
||||
return error();
|
||||
const u32 a = FromArray<u32>(&buf[buf_cnt], 0);
|
||||
if (!Impl::template check_addr<4>(a))
|
||||
goto error;
|
||||
return error();
|
||||
const u32 res = Impl::read32(a);
|
||||
ToArray(ret_buffer, res, ret_cnt);
|
||||
ret_cnt += 4;
|
||||
@@ -208,10 +234,10 @@ namespace pine
|
||||
case MsgRead64:
|
||||
{
|
||||
if (!SafetyChecks(buf_cnt, 4, ret_cnt, 8, buf_size))
|
||||
goto error;
|
||||
return error();
|
||||
const u32 a = FromArray<u32>(&buf[buf_cnt], 0);
|
||||
if (!Impl::template check_addr<8>(a))
|
||||
goto error;
|
||||
return error();
|
||||
u64 res = Impl::read64(a);
|
||||
ToArray(ret_buffer, res, ret_cnt);
|
||||
ret_cnt += 8;
|
||||
@@ -221,10 +247,10 @@ namespace pine
|
||||
case MsgWrite8:
|
||||
{
|
||||
if (!SafetyChecks(buf_cnt, 1 + 4, ret_cnt, 0, buf_size))
|
||||
goto error;
|
||||
return error();
|
||||
const u32 a = FromArray<u32>(&buf[buf_cnt], 0);
|
||||
if (!Impl::template check_addr(a, vm::page_writable))
|
||||
goto error;
|
||||
return error();
|
||||
Impl::write8(a, FromArray<u8>(&buf[buf_cnt], 4));
|
||||
buf_cnt += 5;
|
||||
break;
|
||||
@@ -232,10 +258,10 @@ namespace pine
|
||||
case MsgWrite16:
|
||||
{
|
||||
if (!SafetyChecks(buf_cnt, 2 + 4, ret_cnt, 0, buf_size))
|
||||
goto error;
|
||||
return error();
|
||||
const u32 a = FromArray<u32>(&buf[buf_cnt], 0);
|
||||
if (!Impl::template check_addr<2>(a, vm::page_writable))
|
||||
goto error;
|
||||
return error();
|
||||
Impl::write16(a, FromArray<u16>(&buf[buf_cnt], 4));
|
||||
buf_cnt += 6;
|
||||
break;
|
||||
@@ -243,10 +269,10 @@ namespace pine
|
||||
case MsgWrite32:
|
||||
{
|
||||
if (!SafetyChecks(buf_cnt, 4 + 4, ret_cnt, 0, buf_size))
|
||||
goto error;
|
||||
return error();
|
||||
const u32 a = FromArray<u32>(&buf[buf_cnt], 0);
|
||||
if (!Impl::template check_addr<4>(a, vm::page_writable))
|
||||
goto error;
|
||||
return error();
|
||||
Impl::write32(a, FromArray<u32>(&buf[buf_cnt], 4));
|
||||
buf_cnt += 8;
|
||||
break;
|
||||
@@ -254,31 +280,24 @@ namespace pine
|
||||
case MsgWrite64:
|
||||
{
|
||||
if (!SafetyChecks(buf_cnt, 8 + 4, ret_cnt, 0, buf_size))
|
||||
goto error;
|
||||
return error();
|
||||
const u32 a = FromArray<u32>(&buf[buf_cnt], 0);
|
||||
if (!Impl::template check_addr<8>(a, vm::page_writable))
|
||||
goto error;
|
||||
return error();
|
||||
Impl::write64(a, FromArray<u64>(&buf[buf_cnt], 4));
|
||||
buf_cnt += 12;
|
||||
break;
|
||||
}
|
||||
case MsgVersion:
|
||||
{
|
||||
char version[256] = {};
|
||||
snprintf(version, sizeof(version), "RPCS3 %s", Impl::get_version_and_branch().c_str());
|
||||
const u32 size = strlen(version) + 1;
|
||||
if (!SafetyChecks(buf_cnt, 0, ret_cnt, size + 4, buf_size))
|
||||
goto error;
|
||||
ToArray(ret_buffer, size, ret_cnt);
|
||||
ret_cnt += 4;
|
||||
memcpy(&ret_buffer[ret_cnt], version, size);
|
||||
ret_cnt += size;
|
||||
if (!write_string("RPCS3 " + Impl::get_version_and_branch()))
|
||||
return error();
|
||||
break;
|
||||
}
|
||||
case MsgStatus:
|
||||
{
|
||||
if (!SafetyChecks(buf_cnt, 0, ret_cnt, 4, buf_size))
|
||||
goto error;
|
||||
return error();
|
||||
EmuStatus status = Impl::get_status();
|
||||
ToArray(ret_buffer, status, ret_cnt);
|
||||
ret_cnt += 4;
|
||||
@@ -287,72 +306,35 @@ namespace pine
|
||||
}
|
||||
case MsgTitle:
|
||||
{
|
||||
const auto title_string = Impl::get_title();
|
||||
const auto size = title_string.size() + 1;
|
||||
char* title = new char[size];
|
||||
snprintf(title, size, "%s", title_string.c_str());
|
||||
if (!SafetyChecks(buf_cnt, 0, ret_cnt, size + 4, buf_size))
|
||||
goto error;
|
||||
ToArray(ret_buffer, size, ret_cnt);
|
||||
ret_cnt += 4;
|
||||
memcpy(&ret_buffer[ret_cnt], title, size);
|
||||
ret_cnt += size;
|
||||
delete[] title;
|
||||
if (!write_string(Impl::get_title()))
|
||||
return error();
|
||||
break;
|
||||
}
|
||||
case MsgID:
|
||||
{
|
||||
const auto title_id_string = Impl::get_title_ID();
|
||||
const auto size = title_id_string.size() + 1;
|
||||
char* title_id = new char[size];
|
||||
snprintf(title_id, size, "%s", title_id_string.c_str());
|
||||
if (!SafetyChecks(buf_cnt, 0, ret_cnt, size + 4, buf_size))
|
||||
goto error;
|
||||
ToArray(ret_buffer, size, ret_cnt);
|
||||
ret_cnt += 4;
|
||||
memcpy(&ret_buffer[ret_cnt], title_id, size);
|
||||
ret_cnt += size;
|
||||
delete[] title_id;
|
||||
if (!write_string(Impl::get_title_ID()))
|
||||
return error();
|
||||
break;
|
||||
}
|
||||
case MsgUUID:
|
||||
{
|
||||
const auto hash_string = Impl::get_executable_hash();
|
||||
const auto size = hash_string.size() + 1;
|
||||
char* hash = new char[size];
|
||||
snprintf(hash, size, "%s", hash_string.c_str());
|
||||
if (!SafetyChecks(buf_cnt, 0, ret_cnt, size + 4, buf_size))
|
||||
goto error;
|
||||
ToArray(ret_buffer, size, ret_cnt);
|
||||
ret_cnt += 4;
|
||||
memcpy(&ret_buffer[ret_cnt], hash, size);
|
||||
ret_cnt += size;
|
||||
delete[] hash;
|
||||
if (!write_string(Impl::get_executable_hash()))
|
||||
return error();
|
||||
break;
|
||||
}
|
||||
case MsgGameVersion:
|
||||
{
|
||||
const auto game_version_string = Impl::get_app_version();
|
||||
const auto size = game_version_string.size() + 1;
|
||||
char* game_version = new char[size];
|
||||
snprintf(game_version, size, "%s", game_version_string.c_str());
|
||||
if (!SafetyChecks(buf_cnt, 0, ret_cnt, size, buf_size))
|
||||
goto error;
|
||||
ToArray(ret_buffer, size, ret_cnt);
|
||||
ret_cnt += 4;
|
||||
memcpy(&ret_buffer[ret_cnt], game_version, size);
|
||||
ret_cnt += size;
|
||||
delete[] game_version;
|
||||
if (!write_string(Impl::get_app_version()))
|
||||
return error();
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
error:
|
||||
return IPCBuffer{ 5, MakeFailIPC(ret_buffer) };
|
||||
return error();
|
||||
}
|
||||
}
|
||||
}
|
||||
return IPCBuffer{ static_cast<int>(ret_cnt), MakeOkIPC(ret_buffer, ret_cnt) };
|
||||
return IPCBuffer{ ret_cnt, MakeOkIPC(ret_buffer, ret_cnt) };
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -361,29 +343,51 @@ namespace pine
|
||||
* size: size of the IPC buffer.
|
||||
* return value: buffer containing the status code allocated of size
|
||||
*/
|
||||
static inline char* MakeOkIPC(char* ret_buffer, uint32_t size = 5)
|
||||
static inline char* MakeOkIPC(char* ret_buffer, usz size = 5)
|
||||
{
|
||||
ToArray<uint32_t>(ret_buffer, size, 0);
|
||||
ToArray(ret_buffer, ::narrow<u32>(size), 0);
|
||||
ret_buffer[4] = IPC_OK;
|
||||
return ret_buffer;
|
||||
}
|
||||
|
||||
static inline char* MakeFailIPC(char* ret_buffer, uint32_t size = 5)
|
||||
static inline char* MakeFailIPC(char* ret_buffer, usz size = 5)
|
||||
{
|
||||
ToArray<uint32_t>(ret_buffer, size, 0);
|
||||
ToArray(ret_buffer, ::narrow<u32>(size), 0);
|
||||
ret_buffer[4] = IPC_FAIL;
|
||||
return ret_buffer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes an open socket for IPC communication.
|
||||
* return value: -1 if a fatal failure happened, 0 otherwise.
|
||||
* return value: false if a fatal failure happened, true otherwise.
|
||||
*/
|
||||
int StartSocket()
|
||||
bool StartSocket()
|
||||
{
|
||||
::pollfd poll_fd{};
|
||||
|
||||
for (int pending_connection = 0; pending_connection != 1;)
|
||||
{
|
||||
if (thread_ctrl::state() == thread_state::aborting)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
std::memset(&poll_fd, 0, sizeof(poll_fd));
|
||||
poll_fd.events = POLLIN;
|
||||
poll_fd.revents = 0;
|
||||
poll_fd.fd = m_sock;
|
||||
|
||||
#ifdef _WIN32
|
||||
// Try to wait for an incoming connection
|
||||
pending_connection = ::WSAPoll(&poll_fd, 1, 10);
|
||||
#else
|
||||
pending_connection = ::poll(&poll_fd, 1, 10);
|
||||
#endif
|
||||
}
|
||||
|
||||
m_msgsock = accept(m_sock, 0, 0);
|
||||
|
||||
if (m_msgsock == -1)
|
||||
if (m_msgsock == invalid_socket)
|
||||
{
|
||||
// everything else is non recoverable in our scope
|
||||
// we also mark as recoverable socket errors where it would block a
|
||||
@@ -398,10 +402,10 @@ namespace pine
|
||||
{
|
||||
#endif
|
||||
Impl::error("IPC: An unrecoverable error happened! Shutting down...");
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
// Thread used to relay IPC commands.
|
||||
@@ -409,10 +413,10 @@ namespace pine
|
||||
{
|
||||
// we allocate once buffers to not have to do mallocs for each IPC
|
||||
// request, as malloc is expansive when we optimize for µs.
|
||||
m_ret_buffer = new char[MAX_IPC_RETURN_SIZE];
|
||||
m_ipc_buffer = new char[MAX_IPC_SIZE];
|
||||
m_ret_buffer.resize(MAX_IPC_RETURN_SIZE);
|
||||
m_ipc_buffer.resize(MAX_IPC_SIZE);
|
||||
|
||||
if (StartSocket() < 0)
|
||||
if (!StartSocket())
|
||||
return;
|
||||
|
||||
while (thread_ctrl::state() != thread_state::aborting)
|
||||
@@ -432,7 +436,7 @@ namespace pine
|
||||
if (tmp_length <= 0)
|
||||
{
|
||||
receive_length = 0;
|
||||
if (StartSocket() < 0)
|
||||
if (!StartSocket())
|
||||
return;
|
||||
break;
|
||||
}
|
||||
@@ -442,7 +446,7 @@ namespace pine
|
||||
// if we got at least the final size then update
|
||||
if (end_length == 4 && receive_length >= 4)
|
||||
{
|
||||
end_length = FromArray<u32>(m_ipc_buffer, 0);
|
||||
end_length = FromArray<u32>(m_ipc_buffer.data(), 0);
|
||||
// we'd like to avoid a client trying to do OOB
|
||||
if (end_length > MAX_IPC_SIZE || end_length < 4)
|
||||
{
|
||||
@@ -459,12 +463,12 @@ namespace pine
|
||||
// disconnects
|
||||
if (receive_length != 0)
|
||||
{
|
||||
pine_server::IPCBuffer res = ParseCommand(&m_ipc_buffer[4], m_ret_buffer, static_cast<u32>(end_length) - 4);
|
||||
pine_server::IPCBuffer res = ParseCommand(&m_ipc_buffer[4], m_ret_buffer.data(), static_cast<u32>(end_length) - 4);
|
||||
|
||||
// if we cannot send back our answer restart the socket
|
||||
if (write_portable(m_msgsock, res.buffer, res.size) < 0)
|
||||
{
|
||||
if (StartSocket() < 0)
|
||||
if (!StartSocket())
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -480,9 +484,9 @@ namespace pine
|
||||
* NB: implicitely inlined
|
||||
*/
|
||||
template <typename T>
|
||||
static char* ToArray(char* res_array, T res, int i)
|
||||
static char* ToArray(char* res_array, T res, usz i)
|
||||
{
|
||||
memcpy((res_array + i), reinterpret_cast<char*>(&res), sizeof(T));
|
||||
memcpy(res_array + i, reinterpret_cast<char*>(&res), sizeof(T));
|
||||
return res_array;
|
||||
}
|
||||
|
||||
@@ -503,7 +507,7 @@ namespace pine
|
||||
* Ensures an IPC message isn't too big.
|
||||
* return value: false if checks failed, true otherwise.
|
||||
*/
|
||||
static inline bool SafetyChecks(u32 command_len, int command_size, u32 reply_len, int reply_size = 0, u32 buf_size = MAX_IPC_SIZE - 1)
|
||||
static inline bool SafetyChecks(usz command_len, usz command_size, usz reply_len, usz reply_size = 0, usz buf_size = MAX_IPC_SIZE - 1)
|
||||
{
|
||||
bool res = ((command_len + command_size) > buf_size ||
|
||||
(reply_len + reply_size) >= MAX_IPC_RETURN_SIZE);
|
||||
@@ -537,10 +541,13 @@ namespace pine
|
||||
// yes very good windows s/sun/sin/g sure is fine
|
||||
server.sin_family = AF_INET;
|
||||
// localhost only
|
||||
server.sin_addr.s_addr = inet_addr("127.0.0.1");
|
||||
if (!inet_pton(server.sin_family, "127.0.0.1", &server.sin_addr.s_addr))
|
||||
{
|
||||
fmt::throw_exception("IPC: Failed to convert localhost");
|
||||
}
|
||||
server.sin_port = htons(Impl::get_port());
|
||||
|
||||
if (bind(m_sock, (struct sockaddr*)&server, sizeof(server)) == SOCKET_ERROR)
|
||||
if (bind(m_sock, reinterpret_cast<struct sockaddr*>(&server), sizeof(server)) == SOCKET_ERROR)
|
||||
{
|
||||
Impl::error("IPC: Error while binding to socket! Shutting down...");
|
||||
return;
|
||||
@@ -609,8 +616,6 @@ namespace pine
|
||||
~pine_server()
|
||||
{
|
||||
Cleanup();
|
||||
delete[] m_ret_buffer;
|
||||
delete[] m_ipc_buffer;
|
||||
}
|
||||
|
||||
}; // class pine_server
|
||||
|
||||
Vendored
+1
-1
Submodule 3rdparty/pugixml updated: dd50fa5b45...a0e0643363
Vendored
-45
@@ -1,45 +0,0 @@
|
||||
add_library(3rdparty_qt5 INTERFACE)
|
||||
|
||||
set(QT_MIN_VER 5.15.2)
|
||||
|
||||
find_package(Qt5 ${QT_MIN_VER} CONFIG COMPONENTS Widgets Concurrent Multimedia MultimediaWidgets Svg)
|
||||
if(WIN32)
|
||||
find_package(Qt5 ${QT_MIN_VER} COMPONENTS WinExtras REQUIRED)
|
||||
target_link_libraries(3rdparty_qt5 INTERFACE Qt5::Widgets Qt5::WinExtras Qt5::Concurrent Qt5::Multimedia Qt5::MultimediaWidgets Qt5::Svg)
|
||||
else()
|
||||
find_package(Qt5 ${QT_MIN_VER} COMPONENTS DBus Gui)
|
||||
if(Qt5DBus_FOUND)
|
||||
target_link_libraries(3rdparty_qt5 INTERFACE Qt5::Widgets Qt5::DBus Qt5::Concurrent Qt5::Multimedia Qt5::MultimediaWidgets Qt5::Svg)
|
||||
target_compile_definitions(3rdparty_qt5 INTERFACE -DHAVE_QTDBUS)
|
||||
else()
|
||||
target_link_libraries(3rdparty_qt5 INTERFACE Qt5::Widgets Qt5::Concurrent Qt5::Multimedia Qt5::MultimediaWidgets Qt5::Svg)
|
||||
endif()
|
||||
target_include_directories(3rdparty_qt5 INTERFACE ${Qt5Gui_PRIVATE_INCLUDE_DIRS})
|
||||
endif()
|
||||
|
||||
if(NOT Qt5Widgets_FOUND)
|
||||
if(Qt5Widgets_VERSION VERSION_LESS ${QT_MIN_VER})
|
||||
message("Minimum supported Qt5 version is ${QT_MIN_VER}! You have version ${Qt5Widgets_VERSION} installed, please upgrade!")
|
||||
if(CMAKE_SYSTEM MATCHES "Linux")
|
||||
message(FATAL_ERROR "Most distros do not provide an up-to-date version of Qt.
|
||||
If you're on Ubuntu or Linux Mint, there are PPAs you can use to install one of the latest qt5 versions.
|
||||
Find the correct ppa at https://launchpad.net/~beineri and follow the instructions.")
|
||||
elseif(WIN32)
|
||||
message(FATAL_ERROR "You can download the latest version of Qt5 here: https://www.qt.io/download-open-source/")
|
||||
else()
|
||||
message(FATAL_ERROR "Look online for instructions on installing an up-to-date Qt5 on ${CMAKE_SYSTEM}.")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
message("CMake was unable to find Qt5!")
|
||||
if(WIN32)
|
||||
message(FATAL_ERROR "Make sure the QTDIR env variable has been set properly. (for example C:\\Qt\\${QT_MIN_VER}\\msvc2019_64\\)
|
||||
You can also try setting the Qt5_DIR preprocessor definiton.")
|
||||
elseif(CMAKE_SYSTEM MATCHES "Linux")
|
||||
message(FATAL_ERROR "Make sure to install your distro's qt5 package!")
|
||||
else()
|
||||
message(FATAL_ERROR "You need to have Qt5 installed, look online for instructions on installing Qt5 on ${CMAKE_SYSTEM}.")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
add_library(3rdparty::qt5 ALIAS 3rdparty_qt5)
|
||||
Vendored
+45
@@ -0,0 +1,45 @@
|
||||
add_library(3rdparty_qt6 INTERFACE)
|
||||
|
||||
set(QT_MIN_VER 6.4.0)
|
||||
|
||||
find_package(Qt6 ${QT_MIN_VER} CONFIG COMPONENTS Widgets Concurrent Multimedia MultimediaWidgets Svg SvgWidgets)
|
||||
if(WIN32)
|
||||
find_package(Qt6 ${QT_MIN_VER} COMPONENTS WinExtras REQUIRED)
|
||||
target_link_libraries(3rdparty_qt6 INTERFACE Qt6::Widgets Qt6::WinExtras Qt6::Concurrent Qt6::Multimedia Qt6::MultimediaWidgets Qt6::Svg Qt6::SvgWidgets)
|
||||
else()
|
||||
find_package(Qt6 ${QT_MIN_VER} COMPONENTS DBus Gui)
|
||||
if(Qt6DBus_FOUND)
|
||||
target_link_libraries(3rdparty_qt6 INTERFACE Qt6::Widgets Qt6::DBus Qt6::Concurrent Qt6::Multimedia Qt6::MultimediaWidgets Qt6::Svg Qt6::SvgWidgets)
|
||||
target_compile_definitions(3rdparty_qt6 INTERFACE -DHAVE_QTDBUS)
|
||||
else()
|
||||
target_link_libraries(3rdparty_qt6 INTERFACE Qt6::Widgets Qt6::Concurrent Qt6::Multimedia Qt6::MultimediaWidgets Qt6::Svg Qt6::SvgWidgets)
|
||||
endif()
|
||||
target_include_directories(3rdparty_qt6 INTERFACE ${Qt6Gui_PRIVATE_INCLUDE_DIRS})
|
||||
endif()
|
||||
|
||||
if(Qt6Widgets_FOUND)
|
||||
if(Qt6Widgets_VERSION VERSION_LESS ${QT_MIN_VER})
|
||||
message("Minimum supported Qt version is ${QT_MIN_VER}! You have version ${Qt6Widgets_VERSION} installed, please upgrade!")
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
message(FATAL_ERROR "Most distros do not provide an up-to-date version of Qt.
|
||||
If you're on Ubuntu or Linux Mint, there are PPAs you can use to install one of the latest qt6 versions.
|
||||
Find the correct ppa at https://launchpad.net/~beineri and follow the instructions.")
|
||||
elseif(WIN32)
|
||||
message(FATAL_ERROR "You can download the latest version of Qt6 here: https://www.qt.io/download-open-source/")
|
||||
else()
|
||||
message(FATAL_ERROR "Look online for instructions on installing an up-to-date Qt6 on ${CMAKE_SYSTEM}.")
|
||||
endif()
|
||||
endif()
|
||||
else()
|
||||
message("CMake was unable to find Qt6!")
|
||||
if(WIN32)
|
||||
message(FATAL_ERROR "Make sure the QTDIR env variable has been set properly. (for example C:\\Qt\\${QT_MIN_VER}\\msvc2019_64\\)
|
||||
You can also try setting the Qt6_DIR preprocessor definiton.")
|
||||
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
message(FATAL_ERROR "Make sure to install your distro's qt6 package!")
|
||||
else()
|
||||
message(FATAL_ERROR "You need to have Qt6 installed, look online for instructions on installing Qt6 on ${CMAKE_SYSTEM}.")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
add_library(3rdparty::qt6 ALIAS 3rdparty_qt6)
|
||||
+2551
File diff suppressed because it is too large
Load Diff
Vendored
+1
@@ -0,0 +1 @@
|
||||
add_subdirectory(rtmidi EXCLUDE_FROM_ALL)
|
||||
+1
Submodule 3rdparty/rtmidi/rtmidi added at 84a99422a3
Vendored
+61
@@ -0,0 +1,61 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="rtmidi\RtMidi.h" />
|
||||
<ClInclude Include="rtmidi\rtmidi_c.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="rtmidi\RtMidi.cpp" />
|
||||
<ClCompile Include="rtmidi\rtmidi_c.cpp" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{2C902C67-985C-4BE0-94A3-E0FE2EB929A3}</ProjectGuid>
|
||||
<RootNamespace>rtmidi</RootNamespace>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(SolutionDir)\buildfiles\msvc\common_default.props" />
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<Import Project="$(SolutionDir)\buildfiles\msvc\common_default_macros.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="$(SolutionDir)\buildfiles\msvc\rpcs3_default.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Import Project="$(SolutionDir)\buildfiles\msvc\rpcs3_debug.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Import Project="$(SolutionDir)\buildfiles\msvc\rpcs3_release.props" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<ItemDefinitionGroup>
|
||||
<ClCompile>
|
||||
<WarningLevel>TurnOffAllWarnings</WarningLevel>
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>__WINDOWS_MM__;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>./rtmidi/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<DebugInformationFormat Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">ProgramDatabase</DebugInformationFormat>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
Vendored
+17
-31
@@ -1,40 +1,26 @@
|
||||
if(USE_SYSTEM_WOLFSSL)
|
||||
message("-- RPCS3: using shared wolfssl")
|
||||
message(STATUS "RPCS3: using shared wolfssl")
|
||||
pkg_check_modules(WolfSSL REQUIRED IMPORTED_TARGET wolfssl>=4.7.0)
|
||||
add_library(wolfssl INTERFACE)
|
||||
target_link_libraries(wolfssl INTERFACE PkgConfig::WolfSSL)
|
||||
else()
|
||||
# TODO(cjj19970505@live.cn)
|
||||
# OPENSSL_EXTRA, and HAVE_SNI are unconfigurable from CMake cache.
|
||||
# but they do have it in a TODO list (wolfssl/CMakeList, 1021)
|
||||
add_compile_definitions(OPENSSL_EXTRA WOLFSSL_DES_ECB HAVE_SNI HAVE_WRITE_DUP)
|
||||
add_compile_definitions(FP_MAX_BITS=8192)
|
||||
|
||||
set(WOLFSSL_TLS13 "no" CACHE INTERNAL "")
|
||||
set(WOLFSSL_SHA224 "yes" CACHE INTERNAL "")
|
||||
set(WOLFSSL_SHA3 "yes" CACHE INTERNAL "")
|
||||
set(WOLFSSL_SHAKE256 "yes" CACHE INTERNAL "")
|
||||
set(WOLFSSL_BASE64_ENCODE "no" CACHE INTERNAL "")
|
||||
set(WOLFSSL_DES3 "yes" CACHE INTERNAL "")
|
||||
set(WOLFSSL_POLY1305 "yes" CACHE INTERNAL "")
|
||||
set(WOLFSSL_CHACHA "yes" CACHE INTERNAL "")
|
||||
set(WOLFSSL_FILESYSTEM "yes" CACHE INTERNAL "")
|
||||
set(WOLFSSL_PWDBASED "yes" CACHE INTERNAL "")
|
||||
set(WOLFSSL_FAST_MATH "yes" CACHE INTERNAL "")
|
||||
set(WOLFSSL_EXAMPLES "no" CACHE INTERNAL "")
|
||||
set(WOLFSSL_CRYPT_TESTS "no" CACHE INTERNAL "")
|
||||
set(WOLFSSL_ASYNC_THREADS "no" CACHE INTERNAL "")
|
||||
set(WOLFSSL_CONFIG_H "no" CACHE INTERNAL "")
|
||||
set(WOLFSSL_TLS13 OFF CACHE STRING "Enable wolfSSL TLS v1.3 (default: enabled)")
|
||||
set(WOLFSSL_SHA3 ON CACHE STRING "Enable wolfSSL SHA-3 support (default: enabled on x86_64/aarch64)")
|
||||
set(WOLFSSL_SHAKE256 ON CACHE STRING "Enable wolfSSL SHAKE256 support (default: enabled on x86_64/aarch64)")
|
||||
set(WOLFSSL_BASE64_ENCODE OFF CACHE STRING "Enable Base64 encoding (default: enabled on x86_64)")
|
||||
set(WOLFSSL_DES3 ON CACHE STRING "Enable DES3 (default: disabled)")
|
||||
set(WOLFSSL_PWDBASED ON CACHE STRING "Enable PWDBASED (default: disabled)")
|
||||
set(WOLFSSL_FAST_MATH ON CACHE STRING "Enable fast math ops (default: disabled)")
|
||||
set(WOLFSSL_EXAMPLES OFF CACHE STRING "Enable examples (default: enabled)")
|
||||
set(WOLFSSL_CRYPT_TESTS OFF CACHE STRING "Enable Crypt Bench/Test (default: enabled)")
|
||||
set(WOLFSSL_ASYNC_THREADS OFF CACHE STRING "Enable Asynchronous Threading (default: enabled)")
|
||||
set(WOLFSSL_BUILD_OUT_OF_TREE ON CACHE STRING "Don't generate files in the source tree (default: no)")
|
||||
set(WOLFSSL_SNI ON CACHE STRING "Enable SNI (default: disabled)")
|
||||
set(WOLFSSL_OPENSSLEXTRA ON CACHE STRING "Enable extra OpenSSL API, size+ (default: disabled)")
|
||||
set(WOLFSSL_HARDEN OFF CACHE STRING "Enable Hardened build, Enables Timing Resistance and Blinding (default: enabled)")
|
||||
|
||||
add_subdirectory(wolfssl EXCLUDE_FROM_ALL)
|
||||
|
||||
set(WolfSSL_LIBRARY "$<TARGET_FILE:wolfssl>" CACHE INTERNAL "")
|
||||
|
||||
# "${CMAKE_CURRENT_SOURCE_DIR}/wolfssl/wolfssl/" provides openssl headers
|
||||
# So that curl can be built on an environment where openssl headers are not provided
|
||||
set(WolfSSL_INCLUDE_DIR
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/wolfssl/"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/wolfssl/wolfssl/"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/wolfssl/"
|
||||
CACHE INTERNAL "")
|
||||
target_compile_definitions(wolfssl PUBLIC WOLFSSL_DES_ECB HAVE_WRITE_DUP)
|
||||
target_compile_definitions(wolfssl PUBLIC FP_MAX_BITS=8192)
|
||||
endif()
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
#define NO_PSK
|
||||
#define HAVE_EXTENDED_MASTER
|
||||
#define WOLFSSL_SNIFFER
|
||||
#define WOLFSSL_IGNORE_FILE_WARN
|
||||
#define HAVE_AESGCM
|
||||
#define HAVE_SUPPORTED_CURVES
|
||||
#define HAVE_TLS_EXTENSIONS
|
||||
@@ -63,11 +64,16 @@ extern FILE* wolfSSL_fopen_utf8(const char* name, const char* mode);
|
||||
#define XFWRITE fwrite
|
||||
#define XFCLOSE fclose
|
||||
#define XSEEK_END SEEK_END
|
||||
#define XSEEK_SET SEEK_SET
|
||||
#define XBADFILE NULL
|
||||
#define XFGETS fgets
|
||||
#define XFPRINTF fprintf
|
||||
#define XFFLUSH fflush
|
||||
|
||||
/* For some reason we need to define ssize_t */
|
||||
#define HAVE_SSIZE_T
|
||||
#define ssize_t __int64
|
||||
|
||||
#include <sys/stat.h>
|
||||
extern int wolfSSL_stat_utf8(const char* path, struct _stat* buffer);
|
||||
#define XSTAT wolfSSL_stat_utf8
|
||||
|
||||
Vendored
+1
-1
Submodule 3rdparty/wolfssl/wolfssl updated: 57aac1c50b...3b3c175af0
Vendored
+1
@@ -73,6 +73,7 @@
|
||||
<ItemGroup>
|
||||
<ClCompile Include="wolfssl\src\crl.c" />
|
||||
<ClCompile Include="wolfssl\src\internal.c" />
|
||||
<ClCompile Include="wolfssl\src\ssl_asn1.c" />
|
||||
<ClCompile Include="wolfssl\src\wolfio.c" />
|
||||
<ClCompile Include="wolfssl\src\keys.c" />
|
||||
<ClCompile Include="wolfssl\src\ocsp.c" />
|
||||
|
||||
Vendored
+11
-9
@@ -1,14 +1,16 @@
|
||||
if (USE_SYSTEM_ZLIB)
|
||||
message(STATUS "-- RPCS3: Using syztem ZLIB")
|
||||
find_package(ZLIB QUIET)
|
||||
message(STATUS "RPCS3: Using system ZLIB")
|
||||
find_package(ZLIB QUIET)
|
||||
|
||||
add_library(3rdparty_zlib INTERFACE)
|
||||
target_link_libraries(3rdparty_zlib INTERFACE ${ZLIB_LIBRARIES})
|
||||
target_include_directories(3rdparty_zlib INTERFACE ${ZLIB_INCLUDE_DIRS})
|
||||
else()
|
||||
message(STATUS "-- RPCS3: Using builtin ZLIB")
|
||||
message(STATUS "RPCS3: Using builtin ZLIB")
|
||||
set(SKIP_INSTALL_ALL ON)
|
||||
add_subdirectory(zlib EXCLUDE_FROM_ALL)
|
||||
set(ZLIB_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/zlib" "${CMAKE_CURRENT_BINARY_DIR}/zlib")
|
||||
set(ZLIB_LIBRARY zlibstatic)
|
||||
endif()
|
||||
|
||||
add_library(3rdparty_zlib INTERFACE)
|
||||
target_link_libraries(3rdparty_zlib INTERFACE ${ZLIB_LIBRARY})
|
||||
target_include_directories(3rdparty_zlib INTERFACE ${ZLIB_INCLUDE_DIR})
|
||||
add_library(3rdparty_zlib INTERFACE)
|
||||
target_link_libraries(3rdparty_zlib INTERFACE zlibstatic)
|
||||
target_include_directories(3rdparty_zlib INTERFACE zlib ${CMAKE_CURRENT_BINARY_DIR}/zlib)
|
||||
endif()
|
||||
|
||||
+12
-19
@@ -9,11 +9,11 @@ Other instructions may be found [here](https://wiki.rpcs3.net/index.php?title=Bu
|
||||
|
||||
* [CMake 3.16.9+](https://www.cmake.org/download/) (add to PATH)
|
||||
* [Python 3.6+](https://www.python.org/downloads/) (add to PATH)
|
||||
* [Qt 5.15.2](https://www.qt.io/download-qt-installer)
|
||||
* [Qt 6.5.2](https://www.qt.io/download-qt-installer)
|
||||
* [Visual Studio 2019](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community)
|
||||
* [Vulkan SDK 1.2.198+](https://vulkan.lunarg.com/sdk/home) (See "Install the SDK" [here](https://vulkan.lunarg.com/doc/sdk/latest/windows/getting_started.html))
|
||||
* [Vulkan SDK 1.3.224+](https://vulkan.lunarg.com/sdk/home) (See "Install the SDK" [here](https://vulkan.lunarg.com/doc/sdk/latest/windows/getting_started.html))
|
||||
|
||||
**Either add the** `QTDIR` **environment variable, e.g.** `<QtInstallFolder>\5.15.2\msvc2019_64\` **, or use the [Visual Studio Qt Plugin](https://marketplace.visualstudio.com/items?itemName=TheQtCompany.QtVisualStudioTools2019)**
|
||||
**Either add the** `QTDIR` **environment variable, e.g.** `<QtInstallFolder>\6.5.2\msvc2019_64\` **, or use the [Visual Studio Qt Plugin](https://marketplace.visualstudio.com/items?itemName=TheQtCompany.QtVisualStudioTools2019)**
|
||||
|
||||
### Linux
|
||||
|
||||
@@ -21,15 +21,15 @@ These are the essentials tools to build RPCS3 on Linux. Some of them can be inst
|
||||
|
||||
* Clang 12+ or GCC 11+
|
||||
* [CMake 3.16.9+](https://www.cmake.org/download/)
|
||||
* [Qt 5.15.2](https://www.qt.io/download-qt-installer)
|
||||
* [Vulkan SDK 1.2.198+](https://vulkan.lunarg.com/sdk/home) (See "Install the SDK" [here](https://vulkan.lunarg.com/doc/sdk/latest/linux/getting_started.html))
|
||||
* [SDL2](https://www.libsdl.org/download-2.0.php) (for the FAudio backend)
|
||||
* [Qt 6.5.2](https://www.qt.io/download-qt-installer)
|
||||
* [Vulkan SDK 1.3.224+](https://vulkan.lunarg.com/sdk/home) (See "Install the SDK" [here](https://vulkan.lunarg.com/doc/sdk/latest/linux/getting_started.html))
|
||||
* [SDL2](https://github.com/libsdl-org/SDL/releases) (for the FAudio backend)
|
||||
|
||||
**If you have an NVIDIA GPU, you may need to install the libglvnd package.**
|
||||
|
||||
#### Arch Linux
|
||||
|
||||
sudo pacman -S glew openal cmake vulkan-validation-layers qt5-base qt5-declarative qt5-multimedia sdl2 sndio jack2 base-devel
|
||||
sudo pacman -S glew openal cmake vulkan-validation-layers qt6-base qt6-declarative qt6-multimedia sdl2 sndio jack2 base-devel
|
||||
|
||||
#### Debian & Ubuntu
|
||||
|
||||
@@ -38,14 +38,7 @@ These are the essentials tools to build RPCS3 on Linux. Some of them can be inst
|
||||
Ubuntu is usually horrendously out of date, and some packages need to be downloaded by hand. This part is for Qt, GCC, Vulkan, and CMake
|
||||
##### Qt PPA
|
||||
|
||||
Ubuntu usually does not have a new enough Qt package to suit rpcs3's needs. There is a PPA available to work around this. Run the following:
|
||||
```
|
||||
. /etc/os-release
|
||||
sudo add-apt-repository ppa:beineri/opt-qt-5.15.2-$UBUNTU_CODENAME
|
||||
sudo apt-get update
|
||||
sudo apt-get install qt515base qt515svg
|
||||
. /opt/qt515/bin/qt515-env.sh >/dev/null 2>&1
|
||||
```
|
||||
Ubuntu usually does not have a new enough Qt package to suit rpcs3's needs. There is currently no PPA available to work around this.
|
||||
|
||||
##### GCC 11.x installation
|
||||
|
||||
@@ -82,11 +75,11 @@ sudo apt-get install cmake
|
||||
|
||||
#### Fedora
|
||||
|
||||
sudo dnf install alsa-lib-devel cmake glew glew-devel libatomic libevdev-devel libudev-devel openal-devel qt5-qtbase-devel qt5-qtbase-private-devel vulkan-devel pipewire-jack-audio-connection-kit-devel qt5-qtmultimedia-devel qt5-qtsvg-devel
|
||||
sudo dnf install alsa-lib-devel cmake glew glew-devel libatomic libevdev-devel libudev-devel openal-devel qt6-qtbase-devel qt6-qtbase-private-devel vulkan-devel pipewire-jack-audio-connection-kit-devel qt6-qtmultimedia-devel qt6-qtsvg-devel
|
||||
|
||||
#### OpenSUSE
|
||||
|
||||
sudo zypper install git cmake libasound2 libpulse-devel openal-soft-devel glew-devel zlib-devel libedit-devel vulkan-devel libudev-devel libqt5-qtbase-devel libqt5-qtmultimedia-devel libqt5-qtsvg-devel libQt5Gui-private-headers-devel libevdev-devel libsndio7_1 libjack-devel
|
||||
sudo zypper install git cmake libasound2 libpulse-devel openal-soft-devel glew-devel zlib-devel libedit-devel vulkan-devel libudev-devel libqt6-qtbase-devel libqt6-qtmultimedia-devel libqt6-qtsvg-devel libQt6Gui-private-headers-devel libevdev-devel libsndio7_1 libjack-devel
|
||||
|
||||
## Setup the project
|
||||
|
||||
@@ -103,7 +96,7 @@ git submodule update --init
|
||||
#### Configuring the Qt plugin (if used)
|
||||
|
||||
1) Go to `Extensions->Qt VS Tools->Qt Versions`.
|
||||
2) Add the path to your Qt installation with compiler e.g. `<QtInstallFolder>\5.15.2\msvc2019_64`, version will fill in automatically.
|
||||
2) Add the path to your Qt installation with compiler e.g. `<QtInstallFolder>\6.5.2\msvc2019_64`, version will fill in automatically.
|
||||
3) Go to `Extensions->Qt VS Tools->Options->Legacy Project Format`.
|
||||
4) Set `Build: Run pre-build setup` to `true`.
|
||||
|
||||
@@ -111,7 +104,7 @@ git submodule update --init
|
||||
|
||||
Open `rpcs3.sln`. The recommended build configuration is `Release`. (On older revisions: `Release - LLVM`)
|
||||
|
||||
You may want to download the precompiled [LLVM libs](https://github.com/RPCS3/llvm-mirror/releases/download/custom-build-win/llvmlibs_mt.7z) and extract them to the root rpcs3 folder (which contains `rpcs3.sln`), as well as download and extract the [additional libs](https://github.com/RPCS3/glslang/releases/download/custom-build-win/glslanglibs_mt.7z) to `lib\%CONFIGURATION%-x64\` to speed up compilation time (unoptimised/debug libs are currently not available precompiled).
|
||||
You may want to download the precompiled [LLVM libs](https://github.com/RPCS3/llvm-mirror/releases/download/custom-build-win-16.0.1/llvmlibs_mt.7z) and extract them to `3rdparty\llvm\`, as well as download and extract the [additional libs](https://github.com/RPCS3/glslang/releases/download/custom-build-win/glslanglibs_mt.7z) to `lib\%CONFIGURATION%-x64\` to speed up compilation time (unoptimised/debug libs are currently not available precompiled).
|
||||
|
||||
If you're not using the precompiled libs, build the following projects in *__BUILD_BEFORE* folder by right-clicking on a project > *Build*.:
|
||||
* glslang
|
||||
|
||||
+20
-21
@@ -1,12 +1,14 @@
|
||||
cmake_minimum_required(VERSION 3.16.9)
|
||||
|
||||
project(rpcs3)
|
||||
project(rpcs3 LANGUAGES C CXX)
|
||||
|
||||
if(${CMAKE_CXX_COMPILER_ID} MATCHES "GNU")
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
|
||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 11)
|
||||
message(FATAL_ERROR "RPCS3 requires at least gcc-11.")
|
||||
endif()
|
||||
elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
|
||||
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
||||
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.0)
|
||||
message(FATAL_ERROR "RPCS3 requires at least clang-12.0.")
|
||||
endif()
|
||||
@@ -14,15 +16,18 @@ endif()
|
||||
|
||||
option(USE_NATIVE_INSTRUCTIONS "USE_NATIVE_INSTRUCTIONS makes rpcs3 compile with -march=native, which is useful for local builds, but not good for packages." ON)
|
||||
option(WITH_LLVM "Enable usage of LLVM library" ON)
|
||||
option(BUILD_LLVM_SUBMODULE "Build LLVM from git submodule" ON)
|
||||
option(BUILD_LLVM "Build LLVM from git submodule" OFF)
|
||||
option(STATIC_LINK_LLVM "Link against LLVM statically. This will get set to ON if you build LLVM from the submodule." OFF)
|
||||
option(USE_FAUDIO "FAudio audio backend" ON)
|
||||
option(USE_LIBEVDEV "libevdev-based joystick support" ON)
|
||||
option(USE_DISCORD_RPC "Discord rich presence integration" OFF)
|
||||
option(USE_SYSTEM_ZLIB "Prefer system ZLIB instead of the builtin one" ON)
|
||||
option(USE_VULKAN "Vulkan render backend" ON)
|
||||
option(USE_PRECOMPILED_HEADERS "Use precompiled headers" OFF)
|
||||
option(USE_SDL "Enables SDL input handler" OFF)
|
||||
option(USE_SYSTEM_SDL "Prefer system SDL instead of the builtin one" OFF)
|
||||
|
||||
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/buildfiles/cmake")
|
||||
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/buildfiles/cmake")
|
||||
|
||||
include(CheckCXXCompilerFlag)
|
||||
|
||||
@@ -40,7 +45,7 @@ else()
|
||||
endif()
|
||||
|
||||
if(CMAKE_BUILD_TYPE MATCHES "Debug" AND NOT MSVC)
|
||||
add_definitions(-D_DEBUG)
|
||||
add_compile_definitions(_DEBUG)
|
||||
endif()
|
||||
|
||||
if(MSVC)
|
||||
@@ -72,7 +77,7 @@ if(MSVC)
|
||||
# TODO(cjj19970505@live.cn)
|
||||
# offical QT uses dynamic CRT.
|
||||
# When building our lib with static CRT and debug build type
|
||||
# and linking with Qt with dynmaic CRT and debug build,
|
||||
# and linking with Qt with dynamic CRT and debug build,
|
||||
# error is encountered in runtime (which is expected).
|
||||
# But building our lib with static CRT and release build type,
|
||||
# and linking with Qt with dynamic CRT and release build seems to be working,
|
||||
@@ -87,6 +92,7 @@ if(MSVC)
|
||||
message(AUTHOR_WARNING "Debug build currently can not work with static CRT.")
|
||||
endif()
|
||||
endif()
|
||||
add_compile_options(/MP)
|
||||
endif()
|
||||
|
||||
if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
@@ -95,13 +101,12 @@ endif()
|
||||
|
||||
find_program(CCACHE_FOUND ccache)
|
||||
if(CCACHE_FOUND)
|
||||
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
|
||||
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
|
||||
set(CMAKE_CXX_COMPILER_LAUNCHER ccache)
|
||||
endif()
|
||||
|
||||
if(WIN32)
|
||||
add_definitions(-DUNICODE)
|
||||
add_definitions(-D_WIN32_WINNT=0x0602)
|
||||
add_compile_definitions(UNICODE)
|
||||
add_compile_definitions(_WIN32_WINNT=0x0602)
|
||||
endif()
|
||||
|
||||
if(APPLE AND CMAKE_OSX_ARCHITECTURES STREQUAL "arm64")
|
||||
@@ -109,10 +114,7 @@ if(APPLE AND CMAKE_OSX_ARCHITECTURES STREQUAL "arm64")
|
||||
link_directories(/opt/homebrew/lib)
|
||||
endif()
|
||||
|
||||
# Warnings are silenced for 3rdparty code
|
||||
set(CMAKE_CXX_FLAGS -w)
|
||||
set(CMAKE_C_FLAGS -w)
|
||||
set(LLVM_ENABLE_WARNINGS OFF CACHE BOOL "")
|
||||
set(LLVM_ENABLE_WARNINGS OFF CACHE BOOL "Enable compiler warnings.")
|
||||
|
||||
if(MSVC)
|
||||
add_compile_options(/wd4530 /utf-8) # C++ exception handler used, but unwind semantics are not enabled
|
||||
@@ -120,9 +122,6 @@ endif()
|
||||
|
||||
add_subdirectory(3rdparty)
|
||||
|
||||
unset(CMAKE_CXX_FLAGS)
|
||||
unset(CMAKE_C_FLAGS)
|
||||
|
||||
if (DISABLE_LTO)
|
||||
if (CMAKE_C_FLAGS)
|
||||
string(REGEX REPLACE "-flto[^ ]*" "" CMAKE_C_FLAGS ${CMAKE_C_FLAGS})
|
||||
@@ -134,7 +133,7 @@ endif()
|
||||
|
||||
string(FIND "${CMAKE_C_FLAGS} ${CMAKE_CXX_FLAGS}" "-flto" FOUND_LTO)
|
||||
if (NOT FOUND_LTO EQUAL -1)
|
||||
message(FATAL_ERROR "Rpcs3 doesn't support building with LTO, use -DDISABLE_LTO=TRUE to force-disable it")
|
||||
message(FATAL_ERROR "RPCS3 doesn't support building with LTO, use -DDISABLE_LTO=TRUE to force-disable it")
|
||||
endif()
|
||||
|
||||
if(NOT WIN32)
|
||||
@@ -146,6 +145,6 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${PROJECT_BINARY_DIR}/bin")
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${PROJECT_BINARY_DIR}/bin")
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${PROJECT_BINARY_DIR}/bin")
|
||||
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
|
||||
add_subdirectory(rpcs3)
|
||||
|
||||
set_directory_properties(PROPERTIES VS_STARTUP_PROJECT rpcs3)
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
{
|
||||
"version": 3,
|
||||
"configurePresets": [
|
||||
{
|
||||
"name": "gcc",
|
||||
"generator": "Ninja",
|
||||
"binaryDir": "build-gcc",
|
||||
"cacheVariables": {
|
||||
"CMAKE_BUILD_TYPE": "Debug",
|
||||
"USE_FAUDIO": "OFF",
|
||||
"USE_SYSTEM_CURL": "OFF",
|
||||
"USE_SYSTEM_ZLIB": "OFF",
|
||||
"USE_SYSTEM_LIBPNG": "OFF",
|
||||
"USE_NATIVE_INSTRUCTIONS": "ON",
|
||||
"USE_PRECOMPILED_HEADERS": "ON",
|
||||
"BUILD_LLVM": "OFF",
|
||||
"STATIC_LINK_LLVM": "ON"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "clang",
|
||||
"generator": "Ninja",
|
||||
"binaryDir": "build-clang64",
|
||||
"cacheVariables": {
|
||||
"CMAKE_BUILD_TYPE": "Debug",
|
||||
"USE_FAUDIO": "OFF",
|
||||
"USE_SYSTEM_CURL": "OFF",
|
||||
"USE_SYSTEM_ZLIB": "OFF",
|
||||
"USE_SYSTEM_LIBPNG": "OFF",
|
||||
"LLVM_ENABLE_LIBCXX": "ON",
|
||||
"USE_NATIVE_INSTRUCTIONS": "ON",
|
||||
"USE_PRECOMPILED_HEADERS": "ON",
|
||||
"BUILD_LLVM": "OFF",
|
||||
"STATIC_LINK_LLVM": "ON"
|
||||
},
|
||||
"environment": {
|
||||
"CXX": "clang++",
|
||||
"CC": "clang"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "msvc",
|
||||
"displayName": "Windows x64",
|
||||
"generator": "Visual Studio 17 2022",
|
||||
"binaryDir": "build-msvc",
|
||||
"architecture": {
|
||||
"value": "x64",
|
||||
"strategy": "external"
|
||||
},
|
||||
"cacheVariables": {
|
||||
"CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}",
|
||||
"USE_FAUDIO": "OFF",
|
||||
"USE_PRECOMPILED_HEADERS": "ON",
|
||||
"USE_SYSTEM_ZLIB": "OFF",
|
||||
"USE_NATIVE_INSTRUCTIONS": "ON",
|
||||
"BUILD_LLVM": "ON",
|
||||
"STATIC_LINK_LLVM": "ON"
|
||||
},
|
||||
"vendor": {
|
||||
"microsoft.com/VisualStudioSettings/CMake/1.0": {
|
||||
"hostOS": [
|
||||
"Windows"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,9 +1,8 @@
|
||||
RPCS3
|
||||
=====
|
||||
|
||||
[](https://dev.azure.com/nekotekina/nekotekina/_build?definitionId=4&branchName=master)
|
||||
[&logo=cirrus-ci)](https://cirrus-ci.com/github/RPCS3/rpcs3)
|
||||
[](https://discord.me/rpcs3)
|
||||
[](https://cirrus-ci.com/github/RPCS3/rpcs3)
|
||||
[](https://discord.me/rpcs3)
|
||||
|
||||
The world's first free and open-source PlayStation 3 emulator/debugger, written in C++ for Windows, Linux, macOS and FreeBSD.
|
||||
|
||||
|
||||
+2
-2
@@ -725,7 +725,7 @@ namespace CRCPP
|
||||
{
|
||||
while (size--)
|
||||
{
|
||||
#if defined(WIN32) || defined(_WIN32) || defined(WINCE)
|
||||
#ifdef _MSC_VER
|
||||
// Disable warning about data loss when doing (remainder >> CHAR_BIT) when
|
||||
// remainder is one byte long. The algorithm is still correct in this case,
|
||||
// though it's possible that one additional machine instruction will be executed.
|
||||
@@ -733,7 +733,7 @@ namespace CRCPP
|
||||
# pragma warning (disable : 4333)
|
||||
#endif
|
||||
remainder = (remainder >> CHAR_BIT) ^ lookupTable[static_cast<unsigned char>(remainder ^ *current++)];
|
||||
#if defined(WIN32) || defined(_WIN32) || defined(WINCE)
|
||||
#ifdef _MSC_VER
|
||||
# pragma warning (pop)
|
||||
#endif
|
||||
}
|
||||
|
||||
+46
-8
@@ -1,13 +1,18 @@
|
||||
#include "stdafx.h"
|
||||
#include "Config.h"
|
||||
#include "util/types.hpp"
|
||||
|
||||
#include "util/yaml.hpp"
|
||||
|
||||
#include <charconv>
|
||||
|
||||
LOG_CHANNEL(cfg_log, "CFG");
|
||||
|
||||
template <>
|
||||
void fmt_class_string<cfg::node>::format(std::string& out, u64 arg)
|
||||
{
|
||||
out += get_object(arg).to_string();
|
||||
}
|
||||
|
||||
namespace cfg
|
||||
{
|
||||
_base::_base(type _type)
|
||||
@@ -24,9 +29,9 @@ namespace cfg
|
||||
{
|
||||
for (const auto& node : owner->m_nodes)
|
||||
{
|
||||
if (node->get_name() == name)
|
||||
if (node->get_name() == m_name)
|
||||
{
|
||||
cfg_log.fatal("Node already exists: %s", name);
|
||||
cfg_log.fatal("Node already exists: %s", m_name);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,7 +67,7 @@ bool try_to_int64(s64* out, std::string_view value, s64 min, s64 max)
|
||||
{
|
||||
if (value.empty())
|
||||
{
|
||||
if (out) cfg_log.error("cfg::try_to_uint64(): called with an empty string");
|
||||
if (out) cfg_log.error("cfg::try_to_int64(): called with an empty string");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -97,7 +102,7 @@ bool try_to_int64(s64* out, std::string_view value, s64 min, s64 max)
|
||||
|
||||
if (result < min || result > max)
|
||||
{
|
||||
if (out) cfg_log.error("cfg::try_to_int64('%s'): out of bounds (%d..%d)", value, min, max);
|
||||
if (out) cfg_log.error("cfg::try_to_int64('%s'): out of bounds (val=%d, min=%d, max=%d)", value, result, min, max);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -140,7 +145,7 @@ bool try_to_uint64(u64* out, std::string_view value, u64 min, u64 max)
|
||||
|
||||
if (result < min || result > max)
|
||||
{
|
||||
if (out) cfg_log.error("cfg::try_to_uint64('%s'): out of bounds (%u..%u)", value, min, max);
|
||||
if (out) cfg_log.error("cfg::try_to_uint64('%s'): out of bounds (val=%u, min=%u, max=%u)", value, result, min, max);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -176,7 +181,7 @@ bool try_to_float(f64* out, std::string_view value, f64 min, f64 max)
|
||||
|
||||
if (result < min || result > max)
|
||||
{
|
||||
if (out) cfg_log.error("cfg::try_to_float('%s'): out of bounds (%f..%f)", value, min, max);
|
||||
if (out) cfg_log.error("cfg::try_to_float('%s'): out of bounds (val=%f, min=%f, max=%f)", value, result, min, max);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -184,6 +189,27 @@ bool try_to_float(f64* out, std::string_view value, f64 min, f64 max)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool try_to_string(std::string* out, const f64& value)
|
||||
{
|
||||
#ifdef __APPLE__
|
||||
if (out) *out = std::to_string(value);
|
||||
return true;
|
||||
#else
|
||||
std::array<char, 32> str{};
|
||||
|
||||
if (auto [ptr, ec] = std::to_chars(str.data(), str.data() + str.size(), value, std::chars_format::fixed); ec == std::errc())
|
||||
{
|
||||
if (out) *out = std::string(str.data(), ptr);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (out) cfg_log.error("cfg::try_to_string(): could not convert value '%f' to string. error='%s'", value, std::make_error_code(ec).message());
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
bool cfg::try_to_enum_value(u64* out, decltype(&fmt_class_string<int>::format) func, std::string_view value)
|
||||
{
|
||||
u64 max = umax;
|
||||
@@ -231,7 +257,7 @@ bool cfg::try_to_enum_value(u64* out, decltype(&fmt_class_string<int>::format) f
|
||||
|
||||
if (result > max)
|
||||
{
|
||||
if (out) cfg_log.error("cfg::try_to_enum_value('%s'): out of bounds(0..%u)", value, max);
|
||||
if (out) cfg_log.error("cfg::try_to_enum_value('%s'): out of bounds(val=%u, min=0, max=%u)", value, result, max);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -559,6 +585,18 @@ void cfg::log_entry::from_default()
|
||||
set_map({});
|
||||
}
|
||||
|
||||
std::pair<u16, u16> cfg::device_info::get_usb_ids() const
|
||||
{
|
||||
auto string_to_hex = [](const std::string& str) -> u16
|
||||
{
|
||||
u16 value = 0x0000;
|
||||
if (!str.empty() && std::from_chars(str.data(), str.data() + str.size(), value, 16).ec != std::errc{})
|
||||
cfg_log.error("Failed to parse hex from string \"%s\"", str);
|
||||
return value;
|
||||
};
|
||||
return {string_to_hex(vid), string_to_hex(pid)};
|
||||
}
|
||||
|
||||
void cfg::device_entry::set_map(map_of_type<device_info>&& map)
|
||||
{
|
||||
m_map = std::move(map);
|
||||
|
||||
+77
-10
@@ -80,7 +80,13 @@ namespace cfg
|
||||
// Convert to string (optional)
|
||||
virtual std::string to_string() const
|
||||
{
|
||||
return{};
|
||||
return {};
|
||||
}
|
||||
|
||||
// Convert default to string (optional)
|
||||
virtual std::string def_to_string() const
|
||||
{
|
||||
return {};
|
||||
}
|
||||
|
||||
// Try to convert from string (optional)
|
||||
@@ -89,7 +95,7 @@ namespace cfg
|
||||
// Get string list (optional)
|
||||
virtual std::vector<std::string> to_list() const
|
||||
{
|
||||
return{};
|
||||
return {};
|
||||
}
|
||||
|
||||
// Set multiple values. Implementation-specific, optional.
|
||||
@@ -163,11 +169,24 @@ namespace cfg
|
||||
return m_value ? "true" : "false";
|
||||
}
|
||||
|
||||
std::string def_to_string() const override
|
||||
{
|
||||
return def ? "true" : "false";
|
||||
}
|
||||
|
||||
bool from_string(std::string_view value, bool /*dynamic*/ = false) override
|
||||
{
|
||||
if (value == "false")
|
||||
if (value.size() != 4 && value.size() != 5)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
char copy[5];
|
||||
std::transform(value.begin(), value.end(), std::begin(copy), ::tolower);
|
||||
|
||||
if (value.size() == 5 && std::string_view{copy, 5} == "false")
|
||||
m_value = false;
|
||||
else if (value == "true")
|
||||
else if (value.size() == 4 && std::string_view{copy, 4} == "true")
|
||||
m_value = true;
|
||||
else
|
||||
return false;
|
||||
@@ -207,6 +226,11 @@ namespace cfg
|
||||
return m_value;
|
||||
}
|
||||
|
||||
T get_default() const
|
||||
{
|
||||
return def;
|
||||
}
|
||||
|
||||
void set(T value)
|
||||
{
|
||||
m_value = value;
|
||||
@@ -224,6 +248,13 @@ namespace cfg
|
||||
return result; // TODO: ???
|
||||
}
|
||||
|
||||
std::string def_to_string() const override
|
||||
{
|
||||
std::string result;
|
||||
fmt_class_string<T>::format(result, fmt_unveil<T>::get(def));
|
||||
return result; // TODO: ???
|
||||
}
|
||||
|
||||
bool from_string(std::string_view value, bool /*dynamic*/ = false) override
|
||||
{
|
||||
u64 result;
|
||||
@@ -259,8 +290,8 @@ namespace cfg
|
||||
int_type def;
|
||||
|
||||
// Expose range
|
||||
static const s64 max = Max;
|
||||
static const s64 min = Min;
|
||||
static constexpr s64 max = Max;
|
||||
static constexpr s64 min = Min;
|
||||
|
||||
_int(node* owner, const std::string& name, int_type def = std::min<int_type>(Max, std::max<int_type>(Min, 0)), bool dynamic = false)
|
||||
: _base(type::_int, owner, name, dynamic)
|
||||
@@ -289,6 +320,11 @@ namespace cfg
|
||||
return std::to_string(m_value);
|
||||
}
|
||||
|
||||
std::string def_to_string() const override
|
||||
{
|
||||
return std::to_string(def);
|
||||
}
|
||||
|
||||
bool from_string(std::string_view value, bool /*dynamic*/ = false) override
|
||||
{
|
||||
s64 result;
|
||||
@@ -303,6 +339,7 @@ namespace cfg
|
||||
|
||||
void set(const s64& value)
|
||||
{
|
||||
ensure(value >= Min && value <= Max);
|
||||
m_value = static_cast<int_type>(value);
|
||||
}
|
||||
|
||||
@@ -352,7 +389,24 @@ namespace cfg
|
||||
|
||||
std::string to_string() const override
|
||||
{
|
||||
return std::to_string(m_value);
|
||||
std::string result;
|
||||
if (try_to_string(&result, m_value))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
return "0.0";
|
||||
}
|
||||
|
||||
std::string def_to_string() const override
|
||||
{
|
||||
std::string result;
|
||||
if (try_to_string(&result, def))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
return "0.0";
|
||||
}
|
||||
|
||||
bool from_string(std::string_view value, bool /*dynamic*/ = false) override
|
||||
@@ -369,6 +423,7 @@ namespace cfg
|
||||
|
||||
void set(const f64& value)
|
||||
{
|
||||
ensure(value >= Min && value <= Max);
|
||||
m_value = static_cast<float_type>(value);
|
||||
}
|
||||
|
||||
@@ -399,8 +454,8 @@ namespace cfg
|
||||
int_type def;
|
||||
|
||||
// Expose range
|
||||
static const u64 max = Max;
|
||||
static const u64 min = Min;
|
||||
static constexpr u64 max = Max;
|
||||
static constexpr u64 min = Min;
|
||||
|
||||
uint(node* owner, const std::string& name, int_type def = std::max<int_type>(Min, 0), bool dynamic = false)
|
||||
: _base(type::uint, owner, name, dynamic)
|
||||
@@ -429,6 +484,11 @@ namespace cfg
|
||||
return std::to_string(m_value);
|
||||
}
|
||||
|
||||
std::string def_to_string() const override
|
||||
{
|
||||
return std::to_string(def);
|
||||
}
|
||||
|
||||
bool from_string(std::string_view value, bool /*dynamic*/ = false) override
|
||||
{
|
||||
u64 result;
|
||||
@@ -443,6 +503,7 @@ namespace cfg
|
||||
|
||||
void set(const u64& value)
|
||||
{
|
||||
ensure(value >= Min && value <= Max);
|
||||
m_value = static_cast<int_type>(value);
|
||||
}
|
||||
|
||||
@@ -500,6 +561,11 @@ namespace cfg
|
||||
return *m_value.load().get();
|
||||
}
|
||||
|
||||
std::string def_to_string() const override
|
||||
{
|
||||
return def;
|
||||
}
|
||||
|
||||
bool from_string(std::string_view value, bool /*dynamic*/ = false) override
|
||||
{
|
||||
m_value = std::string(value);
|
||||
@@ -533,7 +599,7 @@ namespace cfg
|
||||
|
||||
std::vector<std::string> to_list() const override
|
||||
{
|
||||
return{ m_set.begin(), m_set.end() };
|
||||
return { m_set.begin(), m_set.end() };
|
||||
}
|
||||
|
||||
bool from_list(std::vector<std::string>&& list) override
|
||||
@@ -598,6 +664,7 @@ namespace cfg
|
||||
std::string serial;
|
||||
std::string vid;
|
||||
std::string pid;
|
||||
std::pair<u16, u16> get_usb_ids() const;
|
||||
};
|
||||
|
||||
class device_entry final : public _base
|
||||
|
||||
+303
-35
@@ -130,6 +130,7 @@ static fs::error to_error(DWORD e)
|
||||
case ERROR_NOT_READY: return fs::error::noent;
|
||||
case ERROR_FILENAME_EXCED_RANGE: return fs::error::toolong;
|
||||
case ERROR_DISK_FULL: return fs::error::nospace;
|
||||
case ERROR_NOT_SAME_DEVICE: return fs::error::xdev;
|
||||
default: return fs::error::unknown;
|
||||
}
|
||||
}
|
||||
@@ -172,6 +173,7 @@ static fs::error to_error(int e)
|
||||
case EROFS: return fs::error::readonly;
|
||||
case EISDIR: return fs::error::isdir;
|
||||
case ENOSPC: return fs::error::nospace;
|
||||
case EXDEV: return fs::error::xdev;
|
||||
default: return fs::error::unknown;
|
||||
}
|
||||
}
|
||||
@@ -225,9 +227,9 @@ namespace fs
|
||||
{
|
||||
}
|
||||
|
||||
[[noreturn]] stat_t file_base::stat()
|
||||
[[noreturn]] stat_t file_base::get_stat()
|
||||
{
|
||||
fmt::throw_exception("fs::file::stat() not supported.");
|
||||
fmt::throw_exception("fs::file::get_stat() not supported.");
|
||||
}
|
||||
|
||||
void file_base::sync()
|
||||
@@ -244,6 +246,11 @@ namespace fs
|
||||
#endif
|
||||
}
|
||||
|
||||
file_id file_base::get_id()
|
||||
{
|
||||
return {};
|
||||
}
|
||||
|
||||
u64 file_base::write_gather(const iovec_clone* buffers, u64 buf_count)
|
||||
{
|
||||
u64 total = 0;
|
||||
@@ -272,6 +279,66 @@ namespace fs
|
||||
return this->write(buf.get(), total);
|
||||
}
|
||||
|
||||
file_id::operator bool() const
|
||||
{
|
||||
return !type.empty() && !data.empty();
|
||||
}
|
||||
|
||||
// Test if identical
|
||||
// For example: when LHS writes one byte to a file at X offset, RHS file be able to read that exact byte at X offset)
|
||||
bool file_id::is_mirror_of(const file_id& rhs) const
|
||||
{
|
||||
// If either is an invalid ID we cannot compare safely, return false
|
||||
return rhs && type == rhs.type && data == rhs.data;
|
||||
}
|
||||
|
||||
// Test if both files point to the same file
|
||||
// For example: if a file descriptor pointing to the complete file exists and is being truncated to 0 bytes from non-
|
||||
// -zero size state: this has to affect both RHS and LHS files.
|
||||
bool file_id::is_coherent_with(const file_id& rhs) const
|
||||
{
|
||||
struct id_view
|
||||
{
|
||||
std::string_view type_view;
|
||||
std::basic_string_view<u8> data_view;
|
||||
};
|
||||
|
||||
id_view _rhs{rhs.type, {rhs.data.data(), rhs.data.size()}};
|
||||
id_view _lhs{type, {data.data(), data.size()}};
|
||||
|
||||
// Peek through fs::file wrappers
|
||||
auto peek_wrapppers = [](id_view& id)
|
||||
{
|
||||
u64 offset_count = 0;
|
||||
constexpr auto lv2_view = "lv2_file::file_view: "sv;
|
||||
|
||||
for (usz pos = 0; (pos = id.type_view.find(lv2_view, pos)) != umax; pos += lv2_view.size())
|
||||
{
|
||||
offset_count++;
|
||||
}
|
||||
|
||||
// Remove offsets data
|
||||
id.data_view.remove_suffix(sizeof(u64) * offset_count);
|
||||
|
||||
// Get last category identifier
|
||||
if (usz sep = id.type_view.rfind(": "); sep != umax)
|
||||
{
|
||||
id.type_view.remove_prefix(sep + 2);
|
||||
}
|
||||
};
|
||||
|
||||
peek_wrapppers(_rhs);
|
||||
peek_wrapppers(_lhs);
|
||||
|
||||
// If either is an invalid ID we cannot compare safely, return false
|
||||
if (_rhs.type_view.empty() || _rhs.data_view.empty())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return _rhs.type_view == _lhs.type_view && _rhs.data_view == _lhs.data_view;
|
||||
}
|
||||
|
||||
dir_base::~dir_base()
|
||||
{
|
||||
}
|
||||
@@ -384,12 +451,12 @@ shared_ptr<fs::device_base> fs::set_virtual_device(const std::string& name, shar
|
||||
return get_device_manager().set_device(name, std::move(device));
|
||||
}
|
||||
|
||||
std::string fs::get_parent_dir(std::string_view path, u32 levels)
|
||||
std::string_view fs::get_parent_dir_view(std::string_view path, u32 parent_level)
|
||||
{
|
||||
std::string_view result = path;
|
||||
|
||||
// Number of path components to remove
|
||||
usz to_remove = levels;
|
||||
usz to_remove = parent_level;
|
||||
|
||||
while (to_remove--)
|
||||
{
|
||||
@@ -432,11 +499,14 @@ std::string fs::get_parent_dir(std::string_view path, u32 levels)
|
||||
return "/";
|
||||
}
|
||||
|
||||
return std::string{result};
|
||||
return result;
|
||||
}
|
||||
|
||||
bool fs::stat(const std::string& path, stat_t& info)
|
||||
bool fs::get_stat(const std::string& path, stat_t& info)
|
||||
{
|
||||
// Ensure consistent information on failure
|
||||
info = {};
|
||||
|
||||
if (auto device = get_virtual_device(path))
|
||||
{
|
||||
return device->stat(path, info);
|
||||
@@ -548,13 +618,13 @@ bool fs::stat(const std::string& path, stat_t& info)
|
||||
bool fs::exists(const std::string& path)
|
||||
{
|
||||
fs::stat_t info{};
|
||||
return fs::stat(path, info);
|
||||
return fs::get_stat(path, info);
|
||||
}
|
||||
|
||||
bool fs::is_file(const std::string& path)
|
||||
{
|
||||
fs::stat_t info{};
|
||||
if (!fs::stat(path, info))
|
||||
if (!fs::get_stat(path, info))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -571,7 +641,7 @@ bool fs::is_file(const std::string& path)
|
||||
bool fs::is_dir(const std::string& path)
|
||||
{
|
||||
fs::stat_t info{};
|
||||
if (!fs::stat(path, info))
|
||||
if (!fs::get_stat(path, info))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -860,9 +930,20 @@ bool fs::copy_file(const std::string& from, const std::string& to, bool overwrit
|
||||
if (::fcopyfile(input, output, 0, COPYFILE_ALL))
|
||||
#elif defined(__linux__) || defined(__sun)
|
||||
// sendfile will work with non-socket output (i.e. regular file) on Linux 2.6.33+
|
||||
off_t bytes_copied = 0;
|
||||
struct ::stat fileinfo = { 0 };
|
||||
if (::fstat(input, &fileinfo) == -1 || ::sendfile(output, input, &bytes_copied, fileinfo.st_size) == -1)
|
||||
bool result = ::fstat(input, &fileinfo) != -1;
|
||||
if (result)
|
||||
{
|
||||
for (off_t bytes_copied = 0; bytes_copied < fileinfo.st_size; /* Do nothing, bytes_copied is increased by sendfile. */)
|
||||
{
|
||||
if (::sendfile(output, input, &bytes_copied, fileinfo.st_size - bytes_copied) == -1)
|
||||
{
|
||||
result = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!result)
|
||||
#else
|
||||
#error "Native file copy implementation is missing"
|
||||
#endif
|
||||
@@ -1103,10 +1184,12 @@ fs::file::file(const std::string& path, bs_t<open_mode> mode)
|
||||
class windows_file final : public file_base
|
||||
{
|
||||
const HANDLE m_handle;
|
||||
atomic_t<u64> m_pos;
|
||||
|
||||
public:
|
||||
windows_file(HANDLE handle)
|
||||
: m_handle(handle)
|
||||
, m_pos(0)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -1115,7 +1198,7 @@ fs::file::file(const std::string& path, bs_t<open_mode> mode)
|
||||
CloseHandle(m_handle);
|
||||
}
|
||||
|
||||
stat_t stat() override
|
||||
stat_t get_stat() override
|
||||
{
|
||||
FILE_BASIC_INFO basic_info;
|
||||
ensure(GetFileInformationByHandleEx(m_handle, FileBasicInfo, &basic_info, sizeof(FILE_BASIC_INFO))); // "file::stat"
|
||||
@@ -1162,7 +1245,39 @@ fs::file::file(const std::string& path, bs_t<open_mode> mode)
|
||||
const DWORD size = static_cast<DWORD>(std::min<u64>(count, DWORD{umax} & -4096));
|
||||
|
||||
DWORD nread = 0;
|
||||
ensure(ReadFile(m_handle, data, size, &nread, nullptr)); // "file::read"
|
||||
OVERLAPPED ovl{};
|
||||
const u64 pos = m_pos;
|
||||
ovl.Offset = DWORD(pos);
|
||||
ovl.OffsetHigh = DWORD(pos >> 32);
|
||||
ensure(ReadFile(m_handle, data, size, &nread, &ovl) || GetLastError() == ERROR_HANDLE_EOF); // "file::read"
|
||||
nread_sum += nread;
|
||||
m_pos += nread;
|
||||
|
||||
if (nread < size)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
count -= size;
|
||||
data += size;
|
||||
}
|
||||
|
||||
return nread_sum;
|
||||
}
|
||||
|
||||
u64 read_at(u64 offset, void* buffer, u64 count) override
|
||||
{
|
||||
u64 nread_sum = 0;
|
||||
|
||||
for (char* data = static_cast<char*>(buffer); count;)
|
||||
{
|
||||
const DWORD size = static_cast<DWORD>(std::min<u64>(count, DWORD{umax} & -4096));
|
||||
|
||||
DWORD nread = 0;
|
||||
OVERLAPPED ovl{};
|
||||
ovl.Offset = DWORD(offset);
|
||||
ovl.OffsetHigh = DWORD(offset >> 32);
|
||||
ensure(ReadFile(m_handle, data, size, &nread, &ovl) || GetLastError() == ERROR_HANDLE_EOF); // "file::read"
|
||||
nread_sum += nread;
|
||||
|
||||
if (nread < size)
|
||||
@@ -1172,6 +1287,7 @@ fs::file::file(const std::string& path, bs_t<open_mode> mode)
|
||||
|
||||
count -= size;
|
||||
data += size;
|
||||
offset += size;
|
||||
}
|
||||
|
||||
return nread_sum;
|
||||
@@ -1186,8 +1302,13 @@ fs::file::file(const std::string& path, bs_t<open_mode> mode)
|
||||
const DWORD size = static_cast<DWORD>(std::min<u64>(count, DWORD{umax} & -4096));
|
||||
|
||||
DWORD nwritten = 0;
|
||||
ensure(WriteFile(m_handle, data, size, &nwritten, nullptr)); // "file::write"
|
||||
OVERLAPPED ovl{};
|
||||
const u64 pos = m_pos;
|
||||
ovl.Offset = DWORD(pos);
|
||||
ovl.OffsetHigh = DWORD(pos >> 32);
|
||||
ensure(WriteFile(m_handle, data, size, &nwritten, &ovl)); // "file::write"
|
||||
nwritten_sum += nwritten;
|
||||
m_pos += nwritten;
|
||||
|
||||
if (nwritten < size)
|
||||
{
|
||||
@@ -1208,20 +1329,19 @@ fs::file::file(const std::string& path, bs_t<open_mode> mode)
|
||||
fmt::throw_exception("Invalid whence (0x%x)", whence);
|
||||
}
|
||||
|
||||
LARGE_INTEGER pos;
|
||||
pos.QuadPart = offset;
|
||||
const s64 new_pos =
|
||||
whence == fs::seek_set ? offset :
|
||||
whence == fs::seek_cur ? offset + m_pos :
|
||||
whence == fs::seek_end ? offset + size() : -1;
|
||||
|
||||
const DWORD mode =
|
||||
whence == seek_set ? FILE_BEGIN :
|
||||
whence == seek_cur ? FILE_CURRENT : FILE_END;
|
||||
|
||||
if (!SetFilePointerEx(m_handle, pos, &pos, mode))
|
||||
if (new_pos < 0)
|
||||
{
|
||||
g_tls_error = to_error(GetLastError());
|
||||
fs::g_tls_error = fs::error::inval;
|
||||
return -1;
|
||||
}
|
||||
|
||||
return pos.QuadPart;
|
||||
m_pos = new_pos;
|
||||
return m_pos;
|
||||
}
|
||||
|
||||
u64 size() override
|
||||
@@ -1236,6 +1356,28 @@ fs::file::file(const std::string& path, bs_t<open_mode> mode)
|
||||
{
|
||||
return m_handle;
|
||||
}
|
||||
|
||||
file_id get_id() override
|
||||
{
|
||||
file_id id{"windows_file"};
|
||||
id.data.resize(sizeof(FILE_ID_INFO));
|
||||
|
||||
FILE_ID_INFO info;
|
||||
|
||||
if (!GetFileInformationByHandleEx(m_handle, FileIdInfo, &info, sizeof(info)))
|
||||
{
|
||||
// Try GetFileInformationByHandle as a fallback
|
||||
BY_HANDLE_FILE_INFORMATION info2;
|
||||
ensure(GetFileInformationByHandle(m_handle, &info2));
|
||||
|
||||
info = {};
|
||||
info.VolumeSerialNumber = info2.dwVolumeSerialNumber;
|
||||
std::memcpy(&info.FileId, &info2.nFileIndexHigh, 8);
|
||||
}
|
||||
|
||||
std::memcpy(id.data.data(), &info, sizeof(info));
|
||||
return id;
|
||||
}
|
||||
};
|
||||
|
||||
m_file = std::make_unique<windows_file>(handle);
|
||||
@@ -1303,7 +1445,7 @@ fs::file::file(const std::string& path, bs_t<open_mode> mode)
|
||||
::close(m_fd);
|
||||
}
|
||||
|
||||
stat_t stat() override
|
||||
stat_t get_stat() override
|
||||
{
|
||||
struct ::stat file_info;
|
||||
ensure(::fstat(m_fd, &file_info) == 0); // "file::stat"
|
||||
@@ -1340,16 +1482,55 @@ fs::file::file(const std::string& path, bs_t<open_mode> mode)
|
||||
|
||||
u64 read(void* buffer, u64 count) override
|
||||
{
|
||||
const auto result = ::read(m_fd, buffer, count);
|
||||
ensure(result != -1); // "file::read"
|
||||
u64 result = 0;
|
||||
|
||||
// Loop because (huge?) read can be processed partially
|
||||
while (auto r = ::read(m_fd, buffer, count))
|
||||
{
|
||||
ensure(r > 0); // "file::read"
|
||||
count -= r;
|
||||
result += r;
|
||||
buffer = static_cast<u8*>(buffer) + r;
|
||||
if (!count)
|
||||
break;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
u64 read_at(u64 offset, void* buffer, u64 count) override
|
||||
{
|
||||
u64 result = 0;
|
||||
|
||||
// For safety; see read()
|
||||
while (auto r = ::pread(m_fd, buffer, count, offset))
|
||||
{
|
||||
ensure(r > 0); // "file::read_at"
|
||||
count -= r;
|
||||
offset += r;
|
||||
result += r;
|
||||
buffer = static_cast<u8*>(buffer) + r;
|
||||
if (!count)
|
||||
break;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
u64 write(const void* buffer, u64 count) override
|
||||
{
|
||||
const auto result = ::write(m_fd, buffer, count);
|
||||
ensure(result != -1); // "file::write"
|
||||
u64 result = 0;
|
||||
|
||||
// For safety; see read()
|
||||
while (auto r = ::write(m_fd, buffer, count))
|
||||
{
|
||||
ensure(r > 0); // "file::write"
|
||||
count -= r;
|
||||
result += r;
|
||||
buffer = static_cast<const u8*>(buffer) + r;
|
||||
if (!count)
|
||||
break;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -1389,6 +1570,19 @@ fs::file::file(const std::string& path, bs_t<open_mode> mode)
|
||||
return m_fd;
|
||||
}
|
||||
|
||||
file_id get_id() override
|
||||
{
|
||||
struct ::stat file_info;
|
||||
ensure(::fstat(m_fd, &file_info) == 0); // "file::get_id"
|
||||
|
||||
file_id id{"unix_file"};
|
||||
id.data.resize(sizeof(file_info.st_dev) + sizeof(file_info.st_ino));
|
||||
|
||||
std::memcpy(id.data.data(), &file_info.st_dev, sizeof(file_info.st_dev));
|
||||
std::memcpy(id.data.data() + sizeof(file_info.st_dev), &file_info.st_ino, sizeof(file_info.st_ino));
|
||||
return id;
|
||||
}
|
||||
|
||||
u64 write_gather(const iovec_clone* buffers, u64 buf_count) override
|
||||
{
|
||||
static_assert(sizeof(iovec) == sizeof(iovec_clone), "Weird iovec size");
|
||||
@@ -1414,7 +1608,7 @@ fs::file::file(const std::string& path, bs_t<open_mode> mode)
|
||||
|
||||
m_file = std::make_unique<unix_file>(fd);
|
||||
|
||||
if (mode & fs::isfile && !(mode & fs::write) && stat().is_directory)
|
||||
if (mode & fs::isfile && !(mode & fs::write) && get_stat().is_directory)
|
||||
{
|
||||
m_file.reset();
|
||||
g_tls_error = error::isdir;
|
||||
@@ -1463,6 +1657,21 @@ fs::file::file(const void* ptr, usz size)
|
||||
return 0;
|
||||
}
|
||||
|
||||
u64 read_at(u64 offset, void* buffer, u64 count) override
|
||||
{
|
||||
if (offset < m_size)
|
||||
{
|
||||
// Get readable size
|
||||
if (const u64 result = std::min<u64>(count, m_size - offset))
|
||||
{
|
||||
std::memcpy(buffer, m_ptr + offset, result);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
u64 write(const void*, u64) override
|
||||
{
|
||||
return 0;
|
||||
@@ -1508,6 +1717,16 @@ fs::native_handle fs::file::get_handle() const
|
||||
#endif
|
||||
}
|
||||
|
||||
fs::file_id fs::file::get_id() const
|
||||
{
|
||||
if (m_file)
|
||||
{
|
||||
return m_file->get_id();
|
||||
}
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
bool fs::dir::open(const std::string& path)
|
||||
{
|
||||
if (path.empty())
|
||||
@@ -1550,7 +1769,7 @@ bool fs::dir::open(const std::string& path)
|
||||
to_utf8(info.name, found.cFileName);
|
||||
info.is_directory = (found.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0;
|
||||
info.is_writable = (found.dwFileAttributes & FILE_ATTRIBUTE_READONLY) == 0;
|
||||
info.size = ((u64)found.nFileSizeHigh << 32) | (u64)found.nFileSizeLow;
|
||||
info.size = (static_cast<u64>(found.nFileSizeHigh) << 32) | static_cast<u64>(found.nFileSizeLow);
|
||||
info.atime = to_time(found.ftLastAccessTime);
|
||||
info.mtime = to_time(found.ftLastWriteTime);
|
||||
info.ctime = info.mtime;
|
||||
@@ -1687,7 +1906,7 @@ const std::string& fs::get_config_dir()
|
||||
if (GetEnvironmentVariable(L"RPCS3_CONFIG_DIR", buf, size) - 1 >= size - 1 &&
|
||||
GetModuleFileName(nullptr, buf, size) - 1 >= size - 1)
|
||||
{
|
||||
MessageBoxA(nullptr, fmt::format("GetModuleFileName() failed: error %u.", GetLastError()).c_str(), "fs::get_config_dir()", MB_ICONERROR);
|
||||
MessageBoxA(nullptr, fmt::format("GetModuleFileName() failed: error: %s", fmt::win_error{GetLastError(), nullptr}).c_str(), "fs::get_config_dir()", MB_ICONERROR);
|
||||
return dir; // empty
|
||||
}
|
||||
|
||||
@@ -1772,7 +1991,7 @@ const std::string& fs::get_temp_dir()
|
||||
wchar_t buf[MAX_PATH + 2]{};
|
||||
if (GetTempPathW(MAX_PATH + 1, buf) - 1 > MAX_PATH)
|
||||
{
|
||||
MessageBoxA(nullptr, fmt::format("GetTempPath() failed: error %u.", GetLastError()).c_str(), "fs::get_temp_dir()", MB_ICONERROR);
|
||||
MessageBoxA(nullptr, fmt::format("GetTempPath() failed: error: %s", fmt::win_error{GetLastError(), nullptr}).c_str(), "fs::get_temp_dir()", MB_ICONERROR);
|
||||
return dir; // empty
|
||||
}
|
||||
|
||||
@@ -1828,7 +2047,7 @@ bool fs::remove_all(const std::string& path, bool remove_root, bool is_no_dir_ok
|
||||
return true;
|
||||
}
|
||||
|
||||
u64 fs::get_dir_size(const std::string& path, u64 rounding_alignment)
|
||||
u64 fs::get_dir_size(const std::string& path, u64 rounding_alignment, atomic_t<bool>* cancel_flag)
|
||||
{
|
||||
u64 result = 0;
|
||||
|
||||
@@ -1841,6 +2060,11 @@ u64 fs::get_dir_size(const std::string& path, u64 rounding_alignment)
|
||||
|
||||
for (const auto& entry : root_dir)
|
||||
{
|
||||
if (cancel_flag && *cancel_flag)
|
||||
{
|
||||
return umax;
|
||||
}
|
||||
|
||||
if (entry.name == "." || entry.name == "..")
|
||||
{
|
||||
continue;
|
||||
@@ -1890,13 +2114,13 @@ fs::file fs::make_gather(std::vector<fs::file> files)
|
||||
{
|
||||
}
|
||||
|
||||
fs::stat_t stat() override
|
||||
fs::stat_t get_stat() override
|
||||
{
|
||||
fs::stat_t result{};
|
||||
|
||||
if (!files.empty())
|
||||
{
|
||||
result = files[0].stat();
|
||||
result = files[0].get_stat();
|
||||
}
|
||||
|
||||
result.is_directory = false;
|
||||
@@ -1948,6 +2172,40 @@ fs::file fs::make_gather(std::vector<fs::file> files)
|
||||
return 0;
|
||||
}
|
||||
|
||||
u64 read_at(u64 start, void* buffer, u64 size) override
|
||||
{
|
||||
if (start < end)
|
||||
{
|
||||
u64 pos = start;
|
||||
|
||||
// Get readable size
|
||||
if (const u64 max = std::min<u64>(size, end - pos))
|
||||
{
|
||||
u8* buf_out = static_cast<u8*>(buffer);
|
||||
u64 buf_max = max;
|
||||
|
||||
for (auto it = ends.upper_bound(pos); it != ends.end(); ++it)
|
||||
{
|
||||
const u64 count = std::min<u64>(it->first - pos, buf_max);
|
||||
const u64 read = files[it->second].read_at(files[it->second].size() + pos - it->first, buf_out, count);
|
||||
|
||||
buf_out += count;
|
||||
buf_max -= count;
|
||||
pos += read;
|
||||
|
||||
if (read < count || buf_max == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return pos - start;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
u64 write(const void*, u64) override
|
||||
{
|
||||
return 0;
|
||||
@@ -2104,9 +2362,19 @@ void fmt_class_string<fs::error>::format(std::string& out, u64 arg)
|
||||
case fs::error::isdir: return "Is a directory";
|
||||
case fs::error::toolong: return "Path too long";
|
||||
case fs::error::nospace: return "Not enough space on the device";
|
||||
case fs::error::xdev: return "Device mismatch";
|
||||
case fs::error::unknown: return "Unknown system error";
|
||||
}
|
||||
|
||||
return unknown;
|
||||
});
|
||||
}
|
||||
|
||||
template<>
|
||||
void fmt_class_string<fs::file_id>::format(std::string& out, u64 arg)
|
||||
{
|
||||
const fs::file_id& id = get_object(arg);
|
||||
|
||||
// TODO: Format data
|
||||
fmt::append(out, "{type='%s'}", id.type);
|
||||
}
|
||||
|
||||
+59
-8
@@ -84,19 +84,31 @@ namespace fs
|
||||
usz iov_len;
|
||||
};
|
||||
|
||||
struct file_id
|
||||
{
|
||||
std::string type;
|
||||
std::vector<u8> data;
|
||||
|
||||
explicit operator bool() const;
|
||||
bool is_mirror_of(const file_id&) const;
|
||||
bool is_coherent_with(const file_id&) const;
|
||||
};
|
||||
|
||||
// File handle base
|
||||
struct file_base
|
||||
{
|
||||
virtual ~file_base();
|
||||
|
||||
[[noreturn]] virtual stat_t stat();
|
||||
[[noreturn]] virtual stat_t get_stat();
|
||||
virtual void sync();
|
||||
virtual bool trunc(u64 length) = 0;
|
||||
virtual u64 read(void* buffer, u64 size) = 0;
|
||||
virtual u64 read_at(u64 offset, void* buffer, u64 size) = 0;
|
||||
virtual u64 write(const void* buffer, u64 size) = 0;
|
||||
virtual u64 seek(s64 offset, seek_mode whence) = 0;
|
||||
virtual u64 size() = 0;
|
||||
virtual native_handle get_handle();
|
||||
virtual file_id get_id();
|
||||
virtual u64 write_gather(const iovec_clone* buffers, u64 buf_count);
|
||||
};
|
||||
|
||||
@@ -164,11 +176,17 @@ namespace fs
|
||||
// Set virtual device with specified name (nullptr for deletion)
|
||||
shared_ptr<device_base> set_virtual_device(const std::string& name, shared_ptr<device_base> device);
|
||||
|
||||
// Try to get parent directory (returns empty string on failure)
|
||||
std::string get_parent_dir(std::string_view path, u32 levels = 1);
|
||||
// Try to get parent directory
|
||||
std::string_view get_parent_dir_view(std::string_view path, u32 parent_level = 1);
|
||||
|
||||
// String (typical use) version
|
||||
inline std::string get_parent_dir(std::string_view path, u32 parent_level = 1)
|
||||
{
|
||||
return std::string{get_parent_dir_view(path, parent_level)};
|
||||
}
|
||||
|
||||
// Get file information
|
||||
bool stat(const std::string& path, stat_t& info);
|
||||
bool get_stat(const std::string& path, stat_t& info);
|
||||
|
||||
// Check whether a file or a directory exists (not recommended, use is_file() or is_dir() instead)
|
||||
bool exists(const std::string& path);
|
||||
@@ -266,14 +284,14 @@ namespace fs
|
||||
}
|
||||
|
||||
// Get file information
|
||||
stat_t stat(
|
||||
stat_t get_stat(
|
||||
u32 line = __builtin_LINE(),
|
||||
u32 col = __builtin_COLUMN(),
|
||||
const char* file = __builtin_FILE(),
|
||||
const char* func = __builtin_FUNCTION()) const
|
||||
{
|
||||
if (!m_file) xnull({line, col, file, func});
|
||||
return m_file->stat();
|
||||
return m_file->get_stat();
|
||||
}
|
||||
|
||||
// Sync file buffers
|
||||
@@ -301,6 +319,17 @@ namespace fs
|
||||
return m_file->read(buffer, count);
|
||||
}
|
||||
|
||||
// Read the data from the file at specified offset in thread-safe manner
|
||||
u64 read_at(u64 offset, void* buffer, u64 count,
|
||||
u32 line = __builtin_LINE(),
|
||||
u32 col = __builtin_COLUMN(),
|
||||
const char* file = __builtin_FILE(),
|
||||
const char* func = __builtin_FUNCTION()) const
|
||||
{
|
||||
if (!m_file) xnull({line, col, file, func});
|
||||
return m_file->read_at(offset, buffer, count);
|
||||
}
|
||||
|
||||
// Write the data to the file and return the amount of data actually written
|
||||
u64 write(const void* buffer, u64 count,
|
||||
u32 line = __builtin_LINE(),
|
||||
@@ -487,6 +516,9 @@ namespace fs
|
||||
// Get native handle if available
|
||||
native_handle get_handle() const;
|
||||
|
||||
// Get file ID information (custom ID)
|
||||
file_id get_id() const;
|
||||
|
||||
// Gathered write
|
||||
u64 write_gather(const iovec_clone* buffers, u64 buf_count,
|
||||
u32 line = __builtin_LINE(),
|
||||
@@ -657,7 +689,7 @@ namespace fs
|
||||
bool remove_all(const std::string& path, bool remove_root = true, bool is_no_dir_ok = false);
|
||||
|
||||
// Get size of all files recursively
|
||||
u64 get_dir_size(const std::string& path, u64 rounding_alignment = 1);
|
||||
u64 get_dir_size(const std::string& path, u64 rounding_alignment = 1, atomic_t<bool>* cancel_flag = nullptr);
|
||||
|
||||
enum class error : uint
|
||||
{
|
||||
@@ -672,6 +704,7 @@ namespace fs
|
||||
isdir,
|
||||
toolong,
|
||||
nospace,
|
||||
xdev,
|
||||
unknown
|
||||
};
|
||||
|
||||
@@ -724,6 +757,24 @@ namespace fs
|
||||
return 0;
|
||||
}
|
||||
|
||||
u64 read_at(u64 offset, void* buffer, u64 size) override
|
||||
{
|
||||
const u64 end = obj.size();
|
||||
|
||||
if (offset < end)
|
||||
{
|
||||
// Get readable size
|
||||
if (const u64 max = std::min<u64>(size, end - offset))
|
||||
{
|
||||
std::copy(obj.cbegin() + offset, obj.cbegin() + offset + max, static_cast<value_type*>(buffer));
|
||||
update_time();
|
||||
return max;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
u64 write(const void* buffer, u64 size) override
|
||||
{
|
||||
const u64 old_size = obj.size();
|
||||
@@ -778,7 +829,7 @@ namespace fs
|
||||
return obj.size();
|
||||
}
|
||||
|
||||
stat_t stat() override
|
||||
stat_t get_stat() override
|
||||
{
|
||||
return m_stat;
|
||||
}
|
||||
|
||||
+67
-23
@@ -198,6 +198,9 @@ static u8* add_jit_memory(usz size, uint align)
|
||||
});
|
||||
}
|
||||
|
||||
ensure(pointer + pos >= get_jit_memory() + Off);
|
||||
ensure(pointer + pos < get_jit_memory() + Off + 0x40000000);
|
||||
|
||||
return pointer + pos;
|
||||
}
|
||||
|
||||
@@ -795,7 +798,7 @@ void asmjit::simd_builder::vec_cmp_eq(u32 esize, const Operand& dst, const Opera
|
||||
}
|
||||
else
|
||||
{
|
||||
_vec_binary_op(kIdPcmpeqw, kIdVpcmpeqw, kIdNone, dst, lhs, rhs);
|
||||
_vec_binary_op(kIdPcmpeqd, kIdVpcmpeqd, kIdNone, dst, lhs, rhs);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1304,7 +1307,7 @@ std::string jit_compiler::cpu(const std::string& _cpu)
|
||||
|
||||
if (m_cpu.empty())
|
||||
{
|
||||
m_cpu = llvm::sys::getHostCPUName().operator std::string();
|
||||
m_cpu = llvm::sys::getHostCPUName().str();
|
||||
|
||||
if (m_cpu == "sandybridge" ||
|
||||
m_cpu == "ivybridge" ||
|
||||
@@ -1319,7 +1322,10 @@ std::string jit_compiler::cpu(const std::string& _cpu)
|
||||
m_cpu == "icelake-client" ||
|
||||
m_cpu == "icelake-server" ||
|
||||
m_cpu == "tigerlake" ||
|
||||
m_cpu == "rocketlake")
|
||||
m_cpu == "rocketlake" ||
|
||||
m_cpu == "alderlake" ||
|
||||
m_cpu == "raptorlake" ||
|
||||
m_cpu == "meteorlake")
|
||||
{
|
||||
// Downgrade if AVX is not supported by some chips
|
||||
if (!utils::has_avx())
|
||||
@@ -1350,11 +1356,51 @@ std::string jit_compiler::cpu(const std::string& _cpu)
|
||||
// Upgrade
|
||||
m_cpu = "znver2";
|
||||
}
|
||||
|
||||
if ((m_cpu == "znver3" || m_cpu == "goldmont" || m_cpu == "alderlake" || m_cpu == "raptorlake" || m_cpu == "meteorlake") && utils::has_avx512_icl())
|
||||
{
|
||||
// Upgrade
|
||||
m_cpu = "icelake-client";
|
||||
}
|
||||
|
||||
if (m_cpu == "goldmont" && utils::has_avx2())
|
||||
{
|
||||
// Upgrade
|
||||
m_cpu = "alderlake";
|
||||
}
|
||||
}
|
||||
|
||||
return m_cpu;
|
||||
}
|
||||
|
||||
std::string jit_compiler::triple1()
|
||||
{
|
||||
#if defined(_WIN32)
|
||||
return llvm::Triple::normalize(llvm::sys::getProcessTriple());
|
||||
#elif defined(__APPLE__) && defined(ARCH_X64)
|
||||
return llvm::Triple::normalize("x86_64-unknown-linux-gnu");
|
||||
#elif defined(__APPLE__) && defined(ARCH_ARM64)
|
||||
return llvm::Triple::normalize("aarch64-unknown-linux-gnu");
|
||||
#else
|
||||
return llvm::Triple::normalize(llvm::sys::getProcessTriple());
|
||||
#endif
|
||||
}
|
||||
|
||||
std::string jit_compiler::triple2()
|
||||
{
|
||||
#if defined(_WIN32) && defined(ARCH_X64)
|
||||
return llvm::Triple::normalize("x86_64-unknown-linux-gnu");
|
||||
#elif defined(_WIN32) && defined(ARCH_ARM64)
|
||||
return llvm::Triple::normalize("aarch64-unknown-linux-gnu");
|
||||
#elif defined(__APPLE__) && defined(ARCH_X64)
|
||||
return llvm::Triple::normalize("x86_64-unknown-linux-gnu");
|
||||
#elif defined(__APPLE__) && defined(ARCH_ARM64)
|
||||
return llvm::Triple::normalize("aarch64-unknown-linux-gnu");
|
||||
#else
|
||||
return llvm::Triple::normalize(llvm::sys::getProcessTriple());
|
||||
#endif
|
||||
}
|
||||
|
||||
jit_compiler::jit_compiler(const std::unordered_map<std::string, u64>& _link, const std::string& _cpu, u32 flags)
|
||||
: m_context(new llvm::LLVMContext)
|
||||
, m_cpu(cpu(_cpu))
|
||||
@@ -1362,15 +1408,13 @@ jit_compiler::jit_compiler(const std::unordered_map<std::string, u64>& _link, co
|
||||
std::string result;
|
||||
|
||||
auto null_mod = std::make_unique<llvm::Module> ("null_", *m_context);
|
||||
#if defined(__APPLE__) && defined(ARCH_ARM64)
|
||||
// Force override triple on Apple arm64 or we'll get linking errors.
|
||||
null_mod->setTargetTriple(llvm::Triple::normalize(utils::c_llvm_default_triple));
|
||||
#endif
|
||||
null_mod->setTargetTriple(jit_compiler::triple1());
|
||||
|
||||
std::unique_ptr<llvm::RTDyldMemoryManager> mem;
|
||||
|
||||
if (_link.empty())
|
||||
{
|
||||
std::unique_ptr<llvm::RTDyldMemoryManager> mem;
|
||||
|
||||
// Auxiliary JIT (does not use custom memory manager, only writes the objects)
|
||||
if (flags & 0x1)
|
||||
{
|
||||
mem = std::make_unique<MemoryManager1>();
|
||||
@@ -1378,31 +1422,31 @@ jit_compiler::jit_compiler(const std::unordered_map<std::string, u64>& _link, co
|
||||
else
|
||||
{
|
||||
mem = std::make_unique<MemoryManager2>();
|
||||
null_mod->setTargetTriple(llvm::Triple::normalize(utils::c_llvm_default_triple));
|
||||
null_mod->setTargetTriple(jit_compiler::triple2());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
mem = std::make_unique<MemoryManager1>();
|
||||
}
|
||||
|
||||
// Auxiliary JIT (does not use custom memory manager, only writes the objects)
|
||||
{
|
||||
m_engine.reset(llvm::EngineBuilder(std::move(null_mod))
|
||||
.setErrorStr(&result)
|
||||
.setEngineKind(llvm::EngineKind::JIT)
|
||||
.setMCJITMemoryManager(std::move(mem))
|
||||
.setOptLevel(llvm::CodeGenOpt::Aggressive)
|
||||
.setCodeModel(flags & 0x2 ? llvm::CodeModel::Large : llvm::CodeModel::Small)
|
||||
#ifdef __APPLE__
|
||||
//.setCodeModel(llvm::CodeModel::Large)
|
||||
#endif
|
||||
.setRelocationModel(llvm::Reloc::Model::PIC_)
|
||||
.setMCPU(m_cpu)
|
||||
.create());
|
||||
}
|
||||
else
|
||||
{
|
||||
// Primary JIT
|
||||
m_engine.reset(llvm::EngineBuilder(std::move(null_mod))
|
||||
.setErrorStr(&result)
|
||||
.setEngineKind(llvm::EngineKind::JIT)
|
||||
.setMCJITMemoryManager(std::make_unique<MemoryManager1>())
|
||||
.setOptLevel(llvm::CodeGenOpt::Aggressive)
|
||||
.setCodeModel(flags & 0x2 ? llvm::CodeModel::Large : llvm::CodeModel::Small)
|
||||
.setMCPU(m_cpu)
|
||||
.create());
|
||||
|
||||
if (!_link.empty())
|
||||
{
|
||||
for (auto&& [name, addr] : _link)
|
||||
{
|
||||
m_engine->updateGlobalMapping(name, addr);
|
||||
@@ -1461,7 +1505,7 @@ void jit_compiler::add(const std::string& path)
|
||||
|
||||
if (auto object_file = llvm::object::ObjectFile::createObjectFile(*cache))
|
||||
{
|
||||
m_engine->addObjectFile( std::move(*object_file) );
|
||||
m_engine->addObjectFile(llvm::object::OwningBinary<llvm::object::ObjectFile>(std::move(*object_file), std::move(cache)));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -546,6 +546,12 @@ public:
|
||||
|
||||
// Get CPU info
|
||||
static std::string cpu(const std::string& _cpu);
|
||||
|
||||
// Get system triple (PPU)
|
||||
static std::string triple1();
|
||||
|
||||
// Get system triple (SPU)
|
||||
static std::string triple2();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
+50
-6
@@ -37,6 +37,12 @@ std::string utf16_to_utf8(std::u16string_view src)
|
||||
return converter.to_bytes(src.data());
|
||||
}
|
||||
|
||||
std::u16string utf8_to_utf16(std::string_view src)
|
||||
{
|
||||
std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> converter{};
|
||||
return converter.from_bytes(src.data());
|
||||
}
|
||||
|
||||
std::wstring utf8_to_wchar(std::string_view src)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
@@ -57,7 +63,7 @@ std::string fmt::win_error_to_string(unsigned long error, void* module_handle)
|
||||
std::string message;
|
||||
LPWSTR message_buffer = nullptr;
|
||||
if (FormatMessageW((module_handle ? FORMAT_MESSAGE_FROM_HMODULE : FORMAT_MESSAGE_FROM_SYSTEM) | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS,
|
||||
module_handle, error, 0, (LPWSTR)&message_buffer, 0, nullptr))
|
||||
module_handle, error, 0, reinterpret_cast<LPWSTR>(&message_buffer), 0, nullptr))
|
||||
{
|
||||
message = fmt::format("%s (0x%x)", fmt::trim(wchar_to_utf8(message_buffer), " \t\n\r\f\v"), error);
|
||||
}
|
||||
@@ -73,6 +79,17 @@ std::string fmt::win_error_to_string(unsigned long error, void* module_handle)
|
||||
|
||||
return message;
|
||||
}
|
||||
|
||||
std::string fmt::win_error_to_string(const fmt::win_error& error)
|
||||
{
|
||||
return fmt::win_error_to_string(error.error, error.module_handle);
|
||||
}
|
||||
|
||||
template <>
|
||||
void fmt_class_string<fmt::win_error>::format(std::string& out, u64 arg)
|
||||
{
|
||||
fmt::append(out, "%s", fmt::win_error_to_string(get_object(arg)));
|
||||
}
|
||||
#endif
|
||||
|
||||
template <>
|
||||
@@ -197,6 +214,26 @@ void fmt_class_string<std::vector<char8_t>>::format(std::string& out, u64 arg)
|
||||
out.append(obj.cbegin(), obj.cend());
|
||||
}
|
||||
|
||||
template <>
|
||||
void fmt_class_string<fmt::buf_to_hexstring>::format(std::string& out, u64 arg)
|
||||
{
|
||||
const auto& _arg = get_object(arg);
|
||||
const std::vector<u8> buf(_arg.buf, _arg.buf + _arg.len);
|
||||
out.reserve(out.size() + (buf.size() * 3));
|
||||
static constexpr char hex[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
|
||||
|
||||
for (usz index = 0; index < buf.size(); index++)
|
||||
{
|
||||
out += hex[buf[index] >> 4];
|
||||
out += hex[buf[index] & 15];
|
||||
|
||||
if (((index + 1) % 16) == 0)
|
||||
out += '\n';
|
||||
else
|
||||
out += ' ';
|
||||
}
|
||||
}
|
||||
|
||||
void format_byte_array(std::string& out, const uchar* data, usz size)
|
||||
{
|
||||
if (!size)
|
||||
@@ -449,7 +486,7 @@ struct fmt::cfmt_src
|
||||
{
|
||||
// Hack: use known function pointers to determine type
|
||||
#define TYPE(type) \
|
||||
if (sup[extra].fmt_string == &fmt_class_string<type>::format) return sizeof(type);
|
||||
if (sup[extra].fmt_string == &fmt_class_string<type>::format) return sizeof(type);
|
||||
|
||||
TYPE(int);
|
||||
TYPE(llong);
|
||||
@@ -457,10 +494,11 @@ struct fmt::cfmt_src
|
||||
TYPE(short);
|
||||
if (std::is_signed<char>::value) TYPE(char);
|
||||
TYPE(long);
|
||||
TYPE(u128);
|
||||
TYPE(s128);
|
||||
|
||||
#undef TYPE
|
||||
if (sup[extra].fmt_string == &fmt_class_string<u128>::format)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -551,7 +589,7 @@ std::vector<std::string> fmt::split(std::string_view source, std::initializer_li
|
||||
return result;
|
||||
}
|
||||
|
||||
std::string fmt::trim(const std::string& source, const std::string& values)
|
||||
std::string fmt::trim(const std::string& source, std::string_view values)
|
||||
{
|
||||
usz begin = source.find_first_not_of(values);
|
||||
|
||||
@@ -561,7 +599,13 @@ std::string fmt::trim(const std::string& source, const std::string& values)
|
||||
return source.substr(begin, source.find_last_not_of(values) + 1);
|
||||
}
|
||||
|
||||
std::string fmt::to_upper(const std::string& string)
|
||||
void fmt::trim_back(std::string& source, std::string_view values)
|
||||
{
|
||||
const usz index = source.find_last_not_of(values);
|
||||
source.resize(index + 1);
|
||||
}
|
||||
|
||||
std::string fmt::to_upper(std::string_view string)
|
||||
{
|
||||
std::string result;
|
||||
result.resize(string.size());
|
||||
@@ -569,7 +613,7 @@ std::string fmt::to_upper(const std::string& string)
|
||||
return result;
|
||||
}
|
||||
|
||||
std::string fmt::to_lower(const std::string& string)
|
||||
std::string fmt::to_lower(std::string_view string)
|
||||
{
|
||||
std::string result;
|
||||
result.resize(string.size());
|
||||
|
||||
@@ -10,8 +10,15 @@ namespace fmt
|
||||
static std::string format(const CharT(&)[N], const Args&...);
|
||||
|
||||
#ifdef _WIN32
|
||||
struct win_error
|
||||
{
|
||||
unsigned long error{};
|
||||
void* module_handle{};
|
||||
};
|
||||
|
||||
// Get a string for a windows error (DWORD). Optionally a module HANDLE can be passed.
|
||||
std::string win_error_to_string(unsigned long error, void* module_handle = nullptr);
|
||||
std::string win_error_to_string(const win_error& error);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -237,6 +244,29 @@ struct fmt_class_string<wchar_t*, void> : fmt_class_string<const wchar_t*>
|
||||
{
|
||||
};
|
||||
|
||||
namespace fmt
|
||||
{
|
||||
template <typename T>
|
||||
concept StringConvertible = requires (T & t)
|
||||
{
|
||||
{ t.to_string() } -> std::convertible_to<std::string>;
|
||||
};
|
||||
}
|
||||
|
||||
template <fmt::StringConvertible T>
|
||||
struct fmt_class_string<T, void>
|
||||
{
|
||||
static FORCE_INLINE SAFE_BUFFERS(const T&) get_object(u64 arg)
|
||||
{
|
||||
return *reinterpret_cast<const T*>(static_cast<uptr>(arg));
|
||||
}
|
||||
|
||||
static void format(std::string& out, u64 arg)
|
||||
{
|
||||
out += get_object(arg).to_string();
|
||||
}
|
||||
};
|
||||
|
||||
namespace fmt
|
||||
{
|
||||
// Both uchar and std::byte are allowed
|
||||
|
||||
+38
-5
@@ -11,12 +11,13 @@
|
||||
std::wstring utf8_to_wchar(std::string_view src);
|
||||
std::string wchar_to_utf8(std::wstring_view src);
|
||||
std::string utf16_to_utf8(std::u16string_view src);
|
||||
std::u16string utf8_to_utf16(std::string_view src);
|
||||
|
||||
// Copy null-terminated string from a std::string or a char array to a char array with truncation
|
||||
template <typename D, typename T>
|
||||
inline void strcpy_trunc(D& dst, const T& src)
|
||||
inline void strcpy_trunc(D&& dst, const T& src)
|
||||
{
|
||||
const usz count = std::size(src) >= std::size(dst) ? std::size(dst) - 1 : std::size(src);
|
||||
const usz count = std::size(src) >= std::size(dst) ? std::max<usz>(std::size(dst), 1) - 1 : std::size(src);
|
||||
std::memcpy(std::data(dst), std::data(src), count);
|
||||
std::memset(std::data(dst) + count, 0, std::size(dst) - count);
|
||||
}
|
||||
@@ -30,6 +31,9 @@ bool try_to_uint64(u64* out, std::string_view value, u64 min, u64 max);
|
||||
// Convert string to float
|
||||
bool try_to_float(f64* out, std::string_view value, f64 min, f64 max);
|
||||
|
||||
// Convert float to string locale independent
|
||||
bool try_to_string(std::string* out, const f64& value);
|
||||
|
||||
// Get the file extension of a file path ("png", "jpg", etc.)
|
||||
std::string get_file_extension(const std::string& file_path);
|
||||
|
||||
@@ -120,7 +124,8 @@ namespace fmt
|
||||
}
|
||||
|
||||
std::vector<std::string> split(std::string_view source, std::initializer_list<std::string_view> separators, bool is_skip_empty = true);
|
||||
std::string trim(const std::string& source, const std::string& values = " \t");
|
||||
std::string trim(const std::string& source, std::string_view values = " \t");
|
||||
void trim_back(std::string& source, std::string_view values = " \t");
|
||||
|
||||
template <typename T>
|
||||
std::string merge(const T& source, const std::string& separator)
|
||||
@@ -169,8 +174,36 @@ namespace fmt
|
||||
return result;
|
||||
}
|
||||
|
||||
std::string to_upper(const std::string& string);
|
||||
std::string to_lower(const std::string& string);
|
||||
std::string to_upper(std::string_view string);
|
||||
std::string to_lower(std::string_view string);
|
||||
|
||||
bool match(const std::string& source, const std::string& mask);
|
||||
|
||||
struct buf_to_hexstring
|
||||
{
|
||||
buf_to_hexstring(const u8* buf, usz len)
|
||||
: buf(buf), len(len) {}
|
||||
|
||||
const u8* buf;
|
||||
usz len;
|
||||
};
|
||||
|
||||
struct string_hash
|
||||
{
|
||||
using hash_type = std::hash<std::string_view>;
|
||||
using is_transparent = void;
|
||||
|
||||
std::size_t operator()(const char* str) const
|
||||
{
|
||||
return hash_type{}(str);
|
||||
}
|
||||
std::size_t operator()(std::string_view str) const
|
||||
{
|
||||
return hash_type{}(str);
|
||||
}
|
||||
std::size_t operator()(std::string const& str) const
|
||||
{
|
||||
return hash_type{}(str);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
+124
-55
@@ -4,6 +4,7 @@
|
||||
#include "Emu/Cell/PPUThread.h"
|
||||
#include "Emu/Cell/lv2/sys_mmapper.h"
|
||||
#include "Emu/Cell/lv2/sys_event.h"
|
||||
#include "Emu/Cell/lv2/sys_process.h"
|
||||
#include "Emu/RSX/RSXThread.h"
|
||||
#include "Thread.h"
|
||||
#include "Utilities/JIT.h"
|
||||
@@ -15,6 +16,11 @@
|
||||
#include <Psapi.h>
|
||||
#include <process.h>
|
||||
#include <sysinfoapi.h>
|
||||
|
||||
#include "util/dyn_lib.hpp"
|
||||
|
||||
DYNAMIC_IMPORT_RENAME("Kernel32.dll", SetThreadDescriptionImport, "SetThreadDescription", HRESULT(HANDLE hThread, PCWSTR lpThreadDescription));
|
||||
|
||||
#else
|
||||
#ifndef _GNU_SOURCE
|
||||
#define _GNU_SOURCE
|
||||
@@ -96,27 +102,17 @@ thread_local bool g_tls_access_violation_recovered = false;
|
||||
extern thread_local std::string(*g_tls_log_prefix)();
|
||||
|
||||
// Report error and call std::abort(), defined in main.cpp
|
||||
[[noreturn]] void report_fatal_error(std::string_view);
|
||||
[[noreturn]] void report_fatal_error(std::string_view text, bool is_html = false, bool include_help_text = true);
|
||||
|
||||
std::string dump_useful_thread_info()
|
||||
{
|
||||
thread_local volatile bool guard = false;
|
||||
|
||||
std::string result;
|
||||
|
||||
// In case the dumping function was the cause for the exception/access violation
|
||||
// Avoid recursion
|
||||
if (std::exchange(guard, true))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
if (auto cpu = get_current_cpu_thread())
|
||||
{
|
||||
cpu->dump_all(result);
|
||||
}
|
||||
|
||||
guard = false;
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -283,8 +279,11 @@ enum x64_op_t : u32
|
||||
X64OP_ADC, // lock adc [mem], ...
|
||||
X64OP_SUB, // lock sub [mem], ...
|
||||
X64OP_SBB, // lock sbb [mem], ...
|
||||
X64OP_BEXTR,
|
||||
};
|
||||
|
||||
static thread_local x64_reg_t s_tls_reg3{};
|
||||
|
||||
void decode_x64_reg_op(const u8* code, x64_op_t& out_op, x64_reg_t& out_reg, usz& out_size, usz& out_length)
|
||||
{
|
||||
// simple analysis of x64 code allows to reinterpret MOV or other instructions in any desired way
|
||||
@@ -745,10 +744,12 @@ void decode_x64_reg_op(const u8* code, x64_op_t& out_op, x64_reg_t& out_reg, usz
|
||||
const u8 vopm = op1 == 0xc5 ? 1 : op2 & 0x1f;
|
||||
const u8 vop1 = op1 == 0xc5 ? op3 : code[2];
|
||||
const u8 vlen = (opx & 0x4) ? 32 : 16;
|
||||
//const u8 vreg = (~opx >> 3) & 0xf;
|
||||
const u8 vreg = (~opx >> 3) & 0xf;
|
||||
out_length += op1 == 0xc5 ? 2 : 3;
|
||||
code += op1 == 0xc5 ? 2 : 3;
|
||||
|
||||
s_tls_reg3 = x64_reg_t{vreg};
|
||||
|
||||
if (vopm == 0x1) switch (vop1) // Implied leading byte 0x0F
|
||||
{
|
||||
case 0x11:
|
||||
@@ -778,6 +779,22 @@ void decode_x64_reg_op(const u8* code, x64_op_t& out_op, x64_reg_t& out_reg, usz
|
||||
}
|
||||
}
|
||||
|
||||
if (vopm == 0x2) switch (vop1) // Implied leading bytes 0x0F 0x38
|
||||
{
|
||||
case 0xf7:
|
||||
{
|
||||
if (!repe && !repne && vlen == 16) // BEXTR r32,mem,r32
|
||||
{
|
||||
out_op = X64OP_BEXTR;
|
||||
out_reg = get_modRM_reg_xmm(code, rex);
|
||||
out_size = opx & 0x80 ? 8 : 4;
|
||||
out_length += get_modRM_size(code);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case 0xc6:
|
||||
@@ -1373,6 +1390,37 @@ bool handle_access_violation(u32 addr, bool is_writing, ucontext_t* context) noe
|
||||
|
||||
break;
|
||||
}
|
||||
case X64OP_BEXTR:
|
||||
{
|
||||
u32 value;
|
||||
if (is_writing || !thread->read_reg(addr, value))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
value = stx::se_storage<u32>::swap(value);
|
||||
|
||||
u64 ctrl;
|
||||
if (!get_x64_reg_value(context, s_tls_reg3, d_size, i_size, ctrl))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
u8 start = ctrl & 0xff;
|
||||
u8 _len = (ctrl & 0xff00) >> 8;
|
||||
if (_len > 32)
|
||||
_len = 32;
|
||||
if (start > 32)
|
||||
start = 32;
|
||||
value = (u64{value} >> start) & ~(u64{umax} << _len);
|
||||
|
||||
if (!put_x64_reg_value(context, reg, d_size, value) || !set_x64_cmp_flags(context, d_size, value, 0))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case X64OP_STORE:
|
||||
case X64OP_STORE_BE:
|
||||
{
|
||||
@@ -1463,7 +1511,7 @@ bool handle_access_violation(u32 addr, bool is_writing, ucontext_t* context) noe
|
||||
}
|
||||
}
|
||||
|
||||
if (pf_port_id)
|
||||
if (auto pf_port = idm::get<lv2_obj, lv2_event_port>(pf_port_id); pf_port && pf_port->queue)
|
||||
{
|
||||
// We notify the game that a page fault occurred so it can rectify it.
|
||||
// Note, for data3, were the memory readable AND we got a page fault, it must be due to a write violation since reads are allowed.
|
||||
@@ -1501,21 +1549,34 @@ bool handle_access_violation(u32 addr, bool is_writing, ucontext_t* context) noe
|
||||
}
|
||||
}
|
||||
|
||||
// Deschedule
|
||||
if (cpu->id_type() == 1)
|
||||
{
|
||||
lv2_obj::sleep(*cpu);
|
||||
}
|
||||
|
||||
// Now, place the page fault event onto table so that other functions [sys_mmapper_free_address and pagefault recovery funcs etc]
|
||||
// know that this thread is page faulted and where.
|
||||
|
||||
auto& pf_events = g_fxo->get<page_fault_event_entries>();
|
||||
|
||||
// De-schedule
|
||||
if (cpu->id_type() == 1)
|
||||
{
|
||||
std::lock_guard pf_lock(pf_events.pf_mutex);
|
||||
pf_events.events.emplace(cpu, addr);
|
||||
cpu->state -= cpu_flag::signal; // Cannot use check_state here and signal must be removed if exists
|
||||
lv2_obj::sleep(*cpu);
|
||||
}
|
||||
|
||||
auto send_event = [&]() -> error_code
|
||||
{
|
||||
lv2_obj::notify_all_t notify_later{};
|
||||
|
||||
std::lock_guard pf_lock(pf_events.pf_mutex);
|
||||
|
||||
if (auto error = pf_port->queue->send(pf_port->name ? pf_port->name : ((u64{process_getpid() + 0u} << 32) | u64{pf_port_id}), data1, data2, data3))
|
||||
{
|
||||
return error;
|
||||
}
|
||||
|
||||
pf_events.events.emplace(cpu, addr);
|
||||
return {};
|
||||
};
|
||||
|
||||
sig_log.warning("Page_fault %s location 0x%x because of %s memory", is_writing ? "writing" : "reading",
|
||||
addr, data3 == SYS_MEMORY_PAGE_FAULT_CAUSE_READ_ONLY ? "writing read-only" : "using unmapped");
|
||||
|
||||
@@ -1527,13 +1588,12 @@ bool handle_access_violation(u32 addr, bool is_writing, ucontext_t* context) noe
|
||||
}
|
||||
}
|
||||
|
||||
error_code sending_error = sys_event_port_send(pf_port_id, data1, data2, data3);
|
||||
error_code sending_error = not_an_error(CELL_EBUSY);
|
||||
|
||||
// If we fail due to being busy, wait a bit and try again.
|
||||
while (static_cast<u32>(sending_error) == CELL_EBUSY)
|
||||
for (; static_cast<u32>(sending_error) == CELL_EBUSY; thread_ctrl::wait_for(1000))
|
||||
{
|
||||
thread_ctrl::wait_for(1000);
|
||||
sending_error = sys_event_port_send(pf_port_id, data1, data2, data3);
|
||||
sending_error = send_event();
|
||||
|
||||
if (cpu->is_stopped())
|
||||
{
|
||||
@@ -1575,7 +1635,7 @@ bool handle_access_violation(u32 addr, bool is_writing, ucontext_t* context) noe
|
||||
if (!g_tls_access_violation_recovered)
|
||||
{
|
||||
vm_log.notice("\n%s", dump_useful_thread_info());
|
||||
vm_log.error("Access violation %s location 0x%x (%s)", is_writing ? "writing" : "reading", addr, (is_writing && vm::check_addr(addr)) ? "read-only memory" : "unmapped memory");
|
||||
vm_log.error("[%s] Access violation %s location 0x%x (%s)", cpu->get_name(), is_writing ? "writing" : "reading", addr, (is_writing && vm::check_addr(addr)) ? "read-only memory" : "unmapped memory");
|
||||
}
|
||||
|
||||
// TODO:
|
||||
@@ -1767,12 +1827,16 @@ static LONG exception_filter(PEXCEPTION_POINTERS pExp) noexcept
|
||||
|
||||
const bool s_exception_handler_set = []() -> bool
|
||||
{
|
||||
if (!AddVectoredExceptionHandler(1, (PVECTORED_EXCEPTION_HANDLER)exception_handler))
|
||||
#ifdef USE_ASAN
|
||||
if (!AddVectoredExceptionHandler(FALSE, static_cast<PVECTORED_EXCEPTION_HANDLER>(exception_handler)))
|
||||
#else
|
||||
if (!AddVectoredExceptionHandler(1, static_cast<PVECTORED_EXCEPTION_HANDLER>(exception_handler)))
|
||||
#endif
|
||||
{
|
||||
report_fatal_error("AddVectoredExceptionHandler() failed.");
|
||||
}
|
||||
|
||||
if (!SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)exception_filter))
|
||||
if (!SetUnhandledExceptionFilter(static_cast<LPTOP_LEVEL_EXCEPTION_FILTER>(exception_filter)))
|
||||
{
|
||||
report_fatal_error("SetUnhandledExceptionFilter() failed.");
|
||||
}
|
||||
@@ -1802,7 +1866,7 @@ static void signal_handler(int /*sig*/, siginfo_t* info, void* uct) noexcept
|
||||
const bool is_executing = err & 0x10;
|
||||
const bool is_writing = err & 0x2;
|
||||
#elif defined(ARCH_ARM64)
|
||||
const bool is_executing = uptr(info->si_addr) == RIP(context);
|
||||
const bool is_executing = uptr(info->si_addr) == uptr(RIP(context));
|
||||
const u32 insn = is_executing ? 0 : *reinterpret_cast<u32*>(RIP(context));
|
||||
const bool is_writing = (insn & 0xbfff0000) == 0x0c000000
|
||||
|| (insn & 0xbfe00000) == 0x0c800000
|
||||
@@ -1927,7 +1991,10 @@ const bool s_terminate_handler_set = []() -> bool
|
||||
std::set_terminate([]()
|
||||
{
|
||||
if (IsDebuggerPresent())
|
||||
{
|
||||
logs::listener::sync_all();
|
||||
utils::trap();
|
||||
}
|
||||
|
||||
report_fatal_error("RPCS3 has abnormally terminated.");
|
||||
});
|
||||
@@ -1975,7 +2042,7 @@ void thread_base::start()
|
||||
#ifdef _WIN32
|
||||
m_thread = ::_beginthreadex(nullptr, 0, entry_point, this, CREATE_SUSPENDED, nullptr);
|
||||
ensure(m_thread);
|
||||
ensure(::ResumeThread(reinterpret_cast<HANDLE>(+m_thread)) != -1);
|
||||
ensure(::ResumeThread(reinterpret_cast<HANDLE>(+m_thread)) != static_cast<DWORD>(-1));
|
||||
#elif defined(__APPLE__)
|
||||
pthread_attr_t stack_size_attr;
|
||||
pthread_attr_init(&stack_size_attr);
|
||||
@@ -2021,6 +2088,13 @@ void thread_base::initialize(void (*error_cb)())
|
||||
|
||||
void thread_base::set_name(std::string name)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
if (SetThreadDescriptionImport)
|
||||
{
|
||||
SetThreadDescriptionImport(GetCurrentThread(), utf8_to_wchar(name).c_str());
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef _MSC_VER
|
||||
struct THREADNAME_INFO
|
||||
{
|
||||
@@ -2065,7 +2139,7 @@ void thread_base::set_name(std::string name)
|
||||
u64 thread_base::finalize(thread_state result_state) noexcept
|
||||
{
|
||||
// Report pending errors
|
||||
error_code::error_report(0, 0, 0, 0);
|
||||
error_code::error_report(0, nullptr, nullptr, nullptr, nullptr);
|
||||
|
||||
#ifdef _WIN32
|
||||
static thread_local ULONG64 tls_cycles{};
|
||||
@@ -2076,7 +2150,7 @@ u64 thread_base::finalize(thread_state result_state) noexcept
|
||||
tls_cycles += cycles;
|
||||
FILETIME ctime, etime, ktime, utime;
|
||||
GetThreadTimes(GetCurrentThread(), &ctime, &etime, &ktime, &utime);
|
||||
const u64 time = ((ktime.dwLowDateTime | (u64)ktime.dwHighDateTime << 32) + (utime.dwLowDateTime | (u64)utime.dwHighDateTime << 32)) * 100ull - tls_time;
|
||||
const u64 time = ((ktime.dwLowDateTime | static_cast<u64>(ktime.dwHighDateTime) << 32) + (utime.dwLowDateTime | static_cast<u64>(utime.dwHighDateTime) << 32)) * 100ull - tls_time;
|
||||
tls_time += time;
|
||||
const u64 fsoft = 0;
|
||||
const u64 fhard = 0;
|
||||
@@ -2354,10 +2428,9 @@ void thread_ctrl::wait_for(u64 usec, [[maybe_unused]] bool alert /* true */)
|
||||
{
|
||||
struct itimerspec timeout;
|
||||
u64 missed;
|
||||
u64 nsec = usec * 1000ull;
|
||||
|
||||
timeout.it_value.tv_nsec = (nsec % 1000000000ull);
|
||||
timeout.it_value.tv_sec = nsec / 1000000000ull;
|
||||
timeout.it_value.tv_nsec = usec * 1'000ull;
|
||||
timeout.it_value.tv_sec = 0;
|
||||
timeout.it_interval.tv_sec = 0;
|
||||
timeout.it_interval.tv_nsec = 0;
|
||||
timerfd_settime(fd_timer, 0, &timeout, NULL);
|
||||
@@ -2583,26 +2656,24 @@ void thread_base::exec()
|
||||
while (shared_ptr<thread_future> head = m_taskq.exchange(null_ptr))
|
||||
{
|
||||
// TODO: check if adapting reverse algorithm is feasible here
|
||||
shared_ptr<thread_future>* prev{};
|
||||
thread_future* prev_head{head.get()};
|
||||
|
||||
for (auto ptr = head.get(); ptr; ptr = ptr->next.get())
|
||||
for (thread_future* prev{};;)
|
||||
{
|
||||
utils::prefetch_exec(ptr->exec.load());
|
||||
utils::prefetch_exec(prev_head->exec.load());
|
||||
|
||||
ptr->prev = prev;
|
||||
|
||||
if (ptr->next)
|
||||
if (auto next = prev_head->next.get())
|
||||
{
|
||||
prev = &ptr->next;
|
||||
prev = std::exchange(prev_head, next);
|
||||
prev_head->prev = prev;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!prev)
|
||||
{
|
||||
prev = &head;
|
||||
}
|
||||
|
||||
for (auto ptr = prev->get(); ptr; ptr = ptr->prev->get())
|
||||
for (auto ptr = prev_head; ptr; ptr = ptr->prev)
|
||||
{
|
||||
if (auto task = ptr->exec.load()) [[likely]]
|
||||
{
|
||||
@@ -2626,11 +2697,6 @@ void thread_base::exec()
|
||||
// Partial cleanup
|
||||
ptr->next.reset();
|
||||
}
|
||||
|
||||
if (!ptr->prev)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!m_taskq) [[likely]]
|
||||
@@ -2650,7 +2716,10 @@ void thread_base::exec()
|
||||
sig_log.fatal("Thread terminated due to fatal error: %s", reason);
|
||||
|
||||
if (IsDebuggerPresent())
|
||||
{
|
||||
logs::listener::sync_all();
|
||||
utils::trap();
|
||||
}
|
||||
|
||||
if (const auto _this = g_tls_this_thread)
|
||||
{
|
||||
@@ -2710,7 +2779,7 @@ void thread_ctrl::detect_cpu_layout()
|
||||
if (!GetLogicalProcessorInformationEx(relationship,
|
||||
reinterpret_cast<SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX *>(buffer.data()), &buffer_size))
|
||||
{
|
||||
sig_log.error("GetLogicalProcessorInformationEx failed (size=%u, error=%u)", buffer_size, GetLastError());
|
||||
sig_log.error("GetLogicalProcessorInformationEx failed (size=%u, error=%s)", buffer_size, fmt::win_error{GetLastError(), nullptr});
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -2957,7 +3026,7 @@ void thread_ctrl::set_native_priority(int priority)
|
||||
|
||||
if (!SetThreadPriority(_this_thread, native_priority))
|
||||
{
|
||||
sig_log.error("SetThreadPriority() failed: 0x%x", GetLastError());
|
||||
sig_log.error("SetThreadPriority() failed: %s", fmt::win_error{GetLastError(), nullptr});
|
||||
}
|
||||
#else
|
||||
int policy;
|
||||
@@ -3009,7 +3078,7 @@ void thread_ctrl::set_thread_affinity_mask(u64 mask)
|
||||
HANDLE _this_thread = GetCurrentThread();
|
||||
if (!SetThreadAffinityMask(_this_thread, !mask ? process_affinity_mask : mask))
|
||||
{
|
||||
sig_log.error("Failed to set thread affinity 0x%x: error 0x%x.", mask, GetLastError());
|
||||
sig_log.error("Failed to set thread affinity 0x%x: error: %s", mask, fmt::win_error{GetLastError(), nullptr});
|
||||
}
|
||||
#elif __APPLE__
|
||||
// Supports only one core
|
||||
|
||||
+1
-1
@@ -95,7 +95,7 @@ class thread_future
|
||||
|
||||
shared_ptr<thread_future> next{};
|
||||
|
||||
shared_ptr<thread_future>* prev{};
|
||||
thread_future* prev{};
|
||||
|
||||
protected:
|
||||
atomic_t<void(*)(thread_base*, thread_future*)> exec{};
|
||||
|
||||
+698
-158
File diff suppressed because it is too large
Load Diff
+62
-2
@@ -3,6 +3,7 @@
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
#include <functional>
|
||||
|
||||
#include "util/types.hpp"
|
||||
#include "util/yaml.hpp"
|
||||
@@ -18,6 +19,13 @@ namespace patch_key
|
||||
static const std::string patch = "Patch";
|
||||
static const std::string patch_version = "Patch Version";
|
||||
static const std::string version = "Version";
|
||||
static const std::string enabled = "Enabled";
|
||||
static const std::string config_values = "Configurable Values";
|
||||
static const std::string value = "Value";
|
||||
static const std::string type = "Type";
|
||||
static const std::string min = "Min";
|
||||
static const std::string max = "Max";
|
||||
static const std::string allowed_values = "Allowed Values";
|
||||
}
|
||||
|
||||
inline static const std::string patch_engine_version = "1.2";
|
||||
@@ -45,6 +53,22 @@ enum class patch_type
|
||||
bef32,
|
||||
bef64,
|
||||
utf8, // Text of string (not null-terminated automatically)
|
||||
c_utf8, // Text of string (null-terminated automatically)
|
||||
move_file, // Move file
|
||||
hide_file, // Hide file
|
||||
};
|
||||
|
||||
static constexpr bool patch_type_uses_hex_offset(patch_type type)
|
||||
{
|
||||
return type >= patch_type::alloc && type <= patch_type::c_utf8;
|
||||
}
|
||||
|
||||
enum class patch_configurable_type
|
||||
{
|
||||
double_range,
|
||||
double_enum,
|
||||
long_range,
|
||||
long_enum
|
||||
};
|
||||
|
||||
class patch_engine
|
||||
@@ -54,6 +78,7 @@ public:
|
||||
{
|
||||
patch_type type = patch_type::load;
|
||||
u32 offset = 0;
|
||||
std::string original_offset{}; // Used for specifying paths
|
||||
std::string original_value{}; // Used for import consistency (avoid rounding etc.)
|
||||
union
|
||||
{
|
||||
@@ -63,7 +88,40 @@ public:
|
||||
mutable u32 alloc_addr = 0; // Used to save optional allocation address (if occured)
|
||||
};
|
||||
|
||||
using patch_app_versions = std::unordered_map<std::string /*app_version*/, bool /*enabled*/>;
|
||||
struct patch_allowed_value
|
||||
{
|
||||
std::string label;
|
||||
f64 value{};
|
||||
|
||||
bool operator==(const patch_allowed_value& other) const
|
||||
{
|
||||
return value == other.value && label == other.label;
|
||||
}
|
||||
};
|
||||
|
||||
struct patch_config_value
|
||||
{
|
||||
f64 value{};
|
||||
f64 min{};
|
||||
f64 max{};
|
||||
patch_configurable_type type{};
|
||||
std::vector<patch_allowed_value> allowed_values;
|
||||
|
||||
bool operator==(const patch_config_value& other) const
|
||||
{
|
||||
return value == other.value && min == other.min && max == other.max && type == other.type && allowed_values == other.allowed_values;
|
||||
}
|
||||
|
||||
void set_and_check_value(f64 new_value, const std::string& name);
|
||||
};
|
||||
|
||||
struct patch_config_values
|
||||
{
|
||||
bool enabled{};
|
||||
std::map<std::string, patch_config_value> config_values;
|
||||
};
|
||||
|
||||
using patch_app_versions = std::unordered_map<std::string /*app_version*/, patch_config_values>;
|
||||
using patch_serials = std::unordered_map<std::string /*serial*/, patch_app_versions>;
|
||||
using patch_titles = std::unordered_map<std::string /*serial*/, patch_serials>;
|
||||
|
||||
@@ -78,10 +136,12 @@ public:
|
||||
std::string author{};
|
||||
std::string notes{};
|
||||
std::string source_path{};
|
||||
std::map<std::string, patch_config_value> default_config_values;
|
||||
|
||||
// Redundant information for accessibility (see patch_container)
|
||||
std::string hash{};
|
||||
std::string version{};
|
||||
std::map<std::string, patch_config_value> actual_config_values;
|
||||
};
|
||||
|
||||
struct patch_container
|
||||
@@ -154,7 +214,7 @@ public:
|
||||
void append_title_patches(const std::string& title_id);
|
||||
|
||||
// Apply patch (returns the number of entries applied)
|
||||
std::basic_string<u32> apply(const std::string& name, u8* dst, u32 filesz = -1, u32 min_addr = 0);
|
||||
std::basic_string<u32> apply(const std::string& name, std::function<u8*(u32, u32)> mem_translate, u32 filesz = -1, u32 min_addr = 0);
|
||||
|
||||
// Deallocate memory used by patches
|
||||
void unload(const std::string& name);
|
||||
|
||||
+7
-5
@@ -42,6 +42,8 @@ public:
|
||||
// Underlying type
|
||||
using under = std::underlying_type_t<T>;
|
||||
|
||||
ENABLE_BITWISE_SERIALIZATION;
|
||||
|
||||
private:
|
||||
// Underlying value
|
||||
under m_data;
|
||||
@@ -49,7 +51,7 @@ private:
|
||||
friend class atomic_bs_t<T>;
|
||||
|
||||
// Value constructor
|
||||
constexpr explicit bs_t(int, under data)
|
||||
constexpr explicit bs_t(int, under data) noexcept
|
||||
: m_data(data)
|
||||
{
|
||||
}
|
||||
@@ -71,19 +73,19 @@ public:
|
||||
bs_t() = default;
|
||||
|
||||
// Construct from a single bit
|
||||
constexpr bs_t(T bit)
|
||||
constexpr bs_t(T bit) noexcept
|
||||
: m_data(shift(bit))
|
||||
{
|
||||
}
|
||||
|
||||
// Test for empty bitset
|
||||
constexpr explicit operator bool() const
|
||||
constexpr explicit operator bool() const noexcept
|
||||
{
|
||||
return m_data != 0;
|
||||
}
|
||||
|
||||
// Extract underlying data
|
||||
constexpr explicit operator under() const
|
||||
constexpr explicit operator under() const noexcept
|
||||
{
|
||||
return m_data;
|
||||
}
|
||||
@@ -138,7 +140,7 @@ public:
|
||||
return bs_t(0, lhs.m_data ^ rhs.m_data);
|
||||
}
|
||||
|
||||
constexpr bool operator ==(bs_t rhs) const
|
||||
constexpr bool operator ==(bs_t rhs) const noexcept
|
||||
{
|
||||
return m_data == rhs.m_data;
|
||||
}
|
||||
|
||||
+33
-20
@@ -367,9 +367,11 @@ usz cfmt_append(Dst& out, const Char* fmt, Src&& src)
|
||||
break;
|
||||
}
|
||||
|
||||
if (!ctx.type)
|
||||
const usz src_type = src.type(ctx.args);
|
||||
|
||||
if (!ctx.type || src_type > 8)
|
||||
{
|
||||
ctx.type = static_cast<u8>(src.type(ctx.args));
|
||||
ctx.type = static_cast<u8>(src_type);
|
||||
|
||||
if (!ctx.type)
|
||||
{
|
||||
@@ -379,7 +381,13 @@ usz cfmt_append(Dst& out, const Char* fmt, Src&& src)
|
||||
|
||||
// Sign-extended argument expected
|
||||
const u64 val = src.template get<u64>(ctx.args);
|
||||
const bool negative = ctx.type && static_cast<s64>(val) < 0;
|
||||
bool negative = ctx.type && ctx.type <= 8 && static_cast<s64>(val) < 0;
|
||||
|
||||
if (ctx.type == 16)
|
||||
{
|
||||
u128 val2 = *reinterpret_cast<const u128*>(val);
|
||||
negative = !!(val2 & (u128{1} << 127));
|
||||
}
|
||||
|
||||
const usz start = out.size();
|
||||
|
||||
@@ -398,15 +406,14 @@ usz cfmt_append(Dst& out, const Char* fmt, Src&& src)
|
||||
out.push_back(' ');
|
||||
}
|
||||
|
||||
if (ctx.type == 16)
|
||||
if (ctx.type >= 16)
|
||||
{
|
||||
// TODO: support negative values (s128)
|
||||
u128 val2 = *reinterpret_cast<u128*>(val);
|
||||
write_decimal(val2, ctx.prec);
|
||||
u128 val2 = *reinterpret_cast<const u128*>(val);
|
||||
write_decimal(negative ? u128{} - val2 : val2, ctx.prec);
|
||||
}
|
||||
else
|
||||
{
|
||||
write_decimal(negative ? 0 - val : val, ctx.prec);
|
||||
write_decimal(negative ? u64{} - val : val, ctx.prec);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -438,9 +445,11 @@ usz cfmt_append(Dst& out, const Char* fmt, Src&& src)
|
||||
break;
|
||||
}
|
||||
|
||||
if (!ctx.type)
|
||||
const usz src_type = src.type(ctx.args);
|
||||
|
||||
if (!ctx.type || src_type > 8)
|
||||
{
|
||||
ctx.type = static_cast<u8>(src.type(ctx.args));
|
||||
ctx.type = static_cast<u8>(src_type);
|
||||
|
||||
if (!ctx.type)
|
||||
{
|
||||
@@ -471,9 +480,9 @@ usz cfmt_append(Dst& out, const Char* fmt, Src&& src)
|
||||
|
||||
if ((ctx.alter && val) || !ctx.dot || ctx.prec)
|
||||
{
|
||||
if (ctx.type == 16)
|
||||
if (ctx.type >= 16)
|
||||
{
|
||||
u128 val2 = *reinterpret_cast<u128*>(val);
|
||||
u128 val2 = *reinterpret_cast<const u128*>(val);
|
||||
write_octal(val2, ctx.prec);
|
||||
}
|
||||
else
|
||||
@@ -504,9 +513,11 @@ usz cfmt_append(Dst& out, const Char* fmt, Src&& src)
|
||||
break;
|
||||
}
|
||||
|
||||
if (!ctx.type)
|
||||
const usz src_type = src.type(ctx.args);
|
||||
|
||||
if (!ctx.type || src_type > 8)
|
||||
{
|
||||
ctx.type = static_cast<u8>(src.type(ctx.args));
|
||||
ctx.type = static_cast<u8>(src_type);
|
||||
|
||||
if (!ctx.type)
|
||||
{
|
||||
@@ -537,9 +548,9 @@ usz cfmt_append(Dst& out, const Char* fmt, Src&& src)
|
||||
|
||||
if ((ctx.alter && val) || !ctx.dot || ctx.prec)
|
||||
{
|
||||
if (ctx.type == 16)
|
||||
if (ctx.type >= 16)
|
||||
{
|
||||
u128 val2 = *reinterpret_cast<u128*>(val);
|
||||
u128 val2 = *reinterpret_cast<const u128*>(val);
|
||||
write_hex(val2, ch == 'X', ctx.prec);
|
||||
}
|
||||
else
|
||||
@@ -576,9 +587,11 @@ usz cfmt_append(Dst& out, const Char* fmt, Src&& src)
|
||||
break;
|
||||
}
|
||||
|
||||
if (!ctx.type)
|
||||
const usz src_type = src.type(ctx.args);
|
||||
|
||||
if (!ctx.type || src_type > 8)
|
||||
{
|
||||
ctx.type = static_cast<u8>(src.type(ctx.args));
|
||||
ctx.type = static_cast<u8>(src_type);
|
||||
|
||||
if (!ctx.type)
|
||||
{
|
||||
@@ -599,9 +612,9 @@ usz cfmt_append(Dst& out, const Char* fmt, Src&& src)
|
||||
|
||||
if (!ctx.dot || ctx.prec)
|
||||
{
|
||||
if (ctx.type == 16)
|
||||
if (ctx.type >= 16)
|
||||
{
|
||||
u128 val2 = *reinterpret_cast<u128*>(val);
|
||||
u128 val2 = *reinterpret_cast<const u128*>(val);
|
||||
write_decimal(val2, ctx.prec);
|
||||
}
|
||||
else
|
||||
|
||||
@@ -777,9 +777,9 @@ struct color4_base
|
||||
};
|
||||
|
||||
constexpr color4_base()
|
||||
: x{}
|
||||
, y{}
|
||||
, z{}
|
||||
: x{ T{0} }
|
||||
, y{ T{0} }
|
||||
, z{ T{0} }
|
||||
, w{ T(1) }
|
||||
{
|
||||
}
|
||||
|
||||
@@ -359,6 +359,14 @@ public:
|
||||
return result;
|
||||
}
|
||||
|
||||
// Withdraw the list in reverse order (LIFO/FILO)
|
||||
lf_queue_slice<T> pop_all_reversed()
|
||||
{
|
||||
lf_queue_slice<T> result;
|
||||
result.m_head = m_head.exchange(nullptr);
|
||||
return result;
|
||||
}
|
||||
|
||||
// Apply func(data) to each element, return the total length
|
||||
template <typename F>
|
||||
usz apply(F func)
|
||||
|
||||
+63
-26
@@ -5,54 +5,81 @@ rXmlNode::rXmlNode()
|
||||
{
|
||||
}
|
||||
|
||||
rXmlNode::rXmlNode(const pugi::xml_node &node)
|
||||
rXmlNode::rXmlNode(const pugi::xml_node& node)
|
||||
{
|
||||
handle = node;
|
||||
}
|
||||
|
||||
std::shared_ptr<rXmlNode> rXmlNode::GetChildren()
|
||||
{
|
||||
// it.begin() returns node_iterator*, *it.begin() return node*.
|
||||
pugi::xml_object_range<pugi::xml_node_iterator> it = handle.children();
|
||||
pugi::xml_node begin = *it.begin();
|
||||
if (handle)
|
||||
{
|
||||
if (const pugi::xml_node child = handle.first_child())
|
||||
{
|
||||
return std::make_shared<rXmlNode>(child);
|
||||
}
|
||||
}
|
||||
|
||||
if (begin)
|
||||
{
|
||||
return std::make_shared<rXmlNode>(begin);
|
||||
}
|
||||
else
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
std::shared_ptr<rXmlNode> rXmlNode::GetNext()
|
||||
{
|
||||
pugi::xml_node result = handle.next_sibling();
|
||||
if (result)
|
||||
if (handle)
|
||||
{
|
||||
return std::make_shared<rXmlNode>(result);
|
||||
}
|
||||
else
|
||||
{
|
||||
return nullptr;
|
||||
if (const pugi::xml_node result = handle.next_sibling())
|
||||
{
|
||||
return std::make_shared<rXmlNode>(result);
|
||||
}
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
std::string rXmlNode::GetName()
|
||||
{
|
||||
return handle.name();
|
||||
if (handle)
|
||||
{
|
||||
if (const pugi::char_t* name = handle.name())
|
||||
{
|
||||
return name;
|
||||
}
|
||||
}
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
std::string rXmlNode::GetAttribute(const std::string &name)
|
||||
std::string rXmlNode::GetAttribute(const std::string& name)
|
||||
{
|
||||
auto pred = [&name](pugi::xml_attribute attr) { return (name == attr.name()); };
|
||||
return handle.find_attribute(pred).value();
|
||||
if (handle)
|
||||
{
|
||||
const auto pred = [&name](const pugi::xml_attribute& attr) { return (name == attr.name()); };
|
||||
if (const pugi::xml_attribute attr = handle.find_attribute(pred))
|
||||
{
|
||||
if (const pugi::char_t* value = attr.value())
|
||||
{
|
||||
return value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
std::string rXmlNode::GetNodeContent()
|
||||
{
|
||||
return handle.text().get();
|
||||
if (handle)
|
||||
{
|
||||
if (const pugi::xml_text text = handle.text())
|
||||
{
|
||||
if (const pugi::char_t* value = text.get())
|
||||
{
|
||||
return value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
rXmlDocument::rXmlDocument()
|
||||
@@ -61,10 +88,20 @@ rXmlDocument::rXmlDocument()
|
||||
|
||||
pugi::xml_parse_result rXmlDocument::Read(const std::string& data)
|
||||
{
|
||||
return handle.load_buffer(data.data(), data.size());
|
||||
if (handle)
|
||||
{
|
||||
return handle.load_buffer(data.data(), data.size());
|
||||
}
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
std::shared_ptr<rXmlNode> rXmlDocument::GetRoot()
|
||||
{
|
||||
return std::make_shared<rXmlNode>(handle.root());
|
||||
if (const pugi::xml_node root = handle.root())
|
||||
{
|
||||
return std::make_shared<rXmlNode>(root);
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
+2
-2
@@ -19,11 +19,11 @@
|
||||
struct rXmlNode
|
||||
{
|
||||
rXmlNode();
|
||||
rXmlNode(const pugi::xml_node &);
|
||||
rXmlNode(const pugi::xml_node& node);
|
||||
std::shared_ptr<rXmlNode> GetChildren();
|
||||
std::shared_ptr<rXmlNode> GetNext();
|
||||
std::string GetName();
|
||||
std::string GetAttribute(const std::string &name);
|
||||
std::string GetAttribute(const std::string& name);
|
||||
std::string GetNodeContent();
|
||||
|
||||
pugi::xml_node handle{};
|
||||
|
||||
@@ -73,12 +73,12 @@ namespace utils
|
||||
std::vector<std::string> get_backtrace_symbols(const std::vector<void*>& stack)
|
||||
{
|
||||
std::vector<std::string> result = {};
|
||||
std::vector<u8> symbol_buf(sizeof(SYMBOL_INFO) + sizeof(TCHAR) * 256);
|
||||
std::vector<u8> symbol_buf(sizeof(SYMBOL_INFOW) + sizeof(TCHAR) * 256);
|
||||
|
||||
const auto hProcess = ::GetCurrentProcess();
|
||||
|
||||
auto sym = reinterpret_cast<SYMBOL_INFO*>(symbol_buf.data());
|
||||
sym->SizeOfStruct = sizeof(SYMBOL_INFO);
|
||||
auto sym = reinterpret_cast<SYMBOL_INFOW*>(symbol_buf.data());
|
||||
sym->SizeOfStruct = sizeof(SYMBOL_INFOW);
|
||||
sym->MaxNameLen = 256;
|
||||
|
||||
IMAGEHLP_LINEW64 line_info{};
|
||||
@@ -90,7 +90,7 @@ namespace utils
|
||||
for (const auto& pointer : stack)
|
||||
{
|
||||
DWORD64 unused;
|
||||
SymFromAddr(hProcess, reinterpret_cast<DWORD64>(pointer), &unused, sym);
|
||||
SymFromAddrW(hProcess, reinterpret_cast<DWORD64>(pointer), &unused, sym);
|
||||
|
||||
if (sym->NameLen)
|
||||
{
|
||||
@@ -98,7 +98,7 @@ namespace utils
|
||||
|
||||
// Attempt to get file and line information if available
|
||||
DWORD unused2;
|
||||
if (SymGetLineFromAddrW(hProcess, reinterpret_cast<DWORD64>(pointer), &unused2, &line_info))
|
||||
if (SymGetLineFromAddrW64(hProcess, reinterpret_cast<DWORD64>(pointer), &unused2, &line_info))
|
||||
{
|
||||
const auto full_path = fmt::format("%s:%u %s", wstr_to_utf8(line_info.FileName, -1), line_info.LineNumber, function_name);
|
||||
result.push_back(full_path);
|
||||
|
||||
+28
-2
@@ -4,17 +4,43 @@
|
||||
|
||||
namespace utils
|
||||
{
|
||||
namespace stack_trace
|
||||
{
|
||||
// Printing utilities
|
||||
|
||||
template <typename T>
|
||||
concept Logger = requires (T& t, const std::string& msg)
|
||||
{
|
||||
{ t.print(msg) };
|
||||
};
|
||||
|
||||
struct print_to_log
|
||||
{
|
||||
logs::channel& log;
|
||||
|
||||
public:
|
||||
print_to_log(logs::channel& chan)
|
||||
: log(chan)
|
||||
{}
|
||||
|
||||
void print(const std::string& s)
|
||||
{
|
||||
log.error("%s", s);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
std::vector<void*> get_backtrace(int max_depth = 255);
|
||||
std::vector<std::string> get_backtrace_symbols(const std::vector<void*>& stack);
|
||||
|
||||
FORCE_INLINE void print_trace(logs::channel& logger, int max_depth = 255)
|
||||
FORCE_INLINE void print_trace(stack_trace::Logger auto& logger, int max_depth = 255)
|
||||
{
|
||||
const auto trace = get_backtrace(max_depth);
|
||||
const auto lines = get_backtrace_symbols(trace);
|
||||
|
||||
for (const auto& line : lines)
|
||||
{
|
||||
logger.error("%s", line);
|
||||
logger.print(line);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+5
-5
@@ -65,13 +65,13 @@ jobs:
|
||||
- job: Windows_Build
|
||||
variables:
|
||||
COMPILER: msvc
|
||||
QT_VER_MAIN: '5'
|
||||
QT_VER: '5.15.2'
|
||||
QT_VER_MAIN: '6'
|
||||
QT_VER: '6.5.2'
|
||||
QT_VER_MSVC: 'msvc2019'
|
||||
QT_DATE: '202011130602'
|
||||
QT_DATE: '202307080351'
|
||||
QTDIR: C:\Qt\$(QT_VER)\$(QT_VER_MSVC)_64
|
||||
VULKAN_VER: '1.3.204.0'
|
||||
VULKAN_SDK_SHA: '41f4996335cc5a545d7b2f6e5ff29cf3867789aae4be053a7069aa93408861fa'
|
||||
VULKAN_VER: '1.3.224.1'
|
||||
VULKAN_SDK_SHA: '2029e652e39ee6a6036cff3765da31e1e6c595fd2413d3cd111dfab7855621ea'
|
||||
VULKAN_SDK: C:\VulkanSDK\$(VULKAN_VER)
|
||||
CACHE_DIR: ./cache
|
||||
UPLOAD_COMMIT_HASH: 7d09e3be30805911226241afbb14f8cdc2eb054e
|
||||
|
||||
@@ -43,28 +43,14 @@ QLabel#gamelist_icon_background_color {
|
||||
color: rgba(209,209,209,255);
|
||||
}
|
||||
|
||||
/* game grid stylesheet */
|
||||
QTableWidget#game_grid {
|
||||
font-weight:600;
|
||||
font-size:8pt;
|
||||
font-family:Lucida Grande;
|
||||
color: rgba(51,51,51,255);
|
||||
}
|
||||
QTableWidget#game_grid::item:selected:active {
|
||||
selection-background-color: #0078D7;
|
||||
}
|
||||
QTableWidget#game_grid::item:selected:!active {
|
||||
selection-background-color: #008cff;
|
||||
}
|
||||
|
||||
/* log stylesheet */
|
||||
QTextEdit#tty_frame {
|
||||
QPlainTextEdit#tty_frame {
|
||||
background-color:#ffffff;
|
||||
}
|
||||
QLabel#tty_text {
|
||||
color:#000000;
|
||||
}
|
||||
QTextEdit#log_frame {
|
||||
QPlainTextEdit#log_frame {
|
||||
background-color:#ffffff;
|
||||
}
|
||||
QLabel#log_level_always {
|
||||
@@ -131,3 +117,33 @@ QLabel#rsx_debugger_display_buffer {
|
||||
QLabel#l_controller {
|
||||
color:#434343;
|
||||
}
|
||||
|
||||
/* Game Grid */
|
||||
#game_list_grid_item[selected="true"] {
|
||||
background: #0078D7;
|
||||
}
|
||||
#game_list_grid_item:hover {
|
||||
background: #008cff;
|
||||
}
|
||||
#game_list_grid_item:focus {
|
||||
background: #0078D7;
|
||||
}
|
||||
|
||||
/* Game Grid Font */
|
||||
#game_list_grid_item #game_list_grid_item_title_label {
|
||||
font-weight: 600;
|
||||
font-size: 8pt;
|
||||
font-family: Lucida Grande;
|
||||
color: rgba(51,51,51,255);
|
||||
}
|
||||
|
||||
/* Game Grid hover and focus: we need to handle properties differently when using descendants */
|
||||
#game_list_grid_item[selected="true"] #game_list_grid_item_title_label {
|
||||
color: #fff;
|
||||
}
|
||||
#game_list_grid_item[hover="true"] #game_list_grid_item_title_label {
|
||||
color: #fff;
|
||||
}
|
||||
#game_list_grid_item[focus="true"] #game_list_grid_item_title_label {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
TheMitoSan Dark-Theme for RPCS3
|
||||
/*
|
||||
TheMitoSan Dark-Theme for RPCS3
|
||||
Based on Kuroi (Dark) by Ani
|
||||
by themitosan @ twitter.com/themitosan
|
||||
Ani @ https://github.com/AniLeo
|
||||
@@ -135,7 +135,7 @@ QPushButton::disabled {
|
||||
}
|
||||
|
||||
QPushButton::pressed {
|
||||
background-color: #333;
|
||||
background-color: #333;
|
||||
}
|
||||
|
||||
/* Log and Debugger borders */
|
||||
@@ -193,21 +193,10 @@ QListWidget::item:hover {
|
||||
}
|
||||
|
||||
/* Pad Settings: Controller Image */
|
||||
QLabel#l_controller {
|
||||
QLabel#l_controller {
|
||||
color: #FFF;
|
||||
}
|
||||
|
||||
/* Game Grid Font */
|
||||
QTableWidget#game_grid {
|
||||
font-weight: 600;
|
||||
font-size: 8pt;
|
||||
font-family: Lucida Grande;
|
||||
color: #FFF;
|
||||
}
|
||||
QTableWidget#game_grid::item:selected:!active {
|
||||
selection-background-color: #313f4e;
|
||||
}
|
||||
|
||||
/* Slider on toolbar */
|
||||
QWidget#sizeSliderContainer {
|
||||
background: transparent;
|
||||
@@ -230,8 +219,8 @@ QLabel#color_button {
|
||||
}
|
||||
|
||||
/* Search bar on main toolbar */
|
||||
QLineEdit#mw_searchbar {
|
||||
margin-left: 0.7em;
|
||||
QLineEdit#mw_searchbar {
|
||||
margin-left: 0.7em;
|
||||
color: #ecf0f1;
|
||||
}
|
||||
|
||||
@@ -264,7 +253,7 @@ QLabel#thumbnail_icon_color {
|
||||
}
|
||||
|
||||
/* Set Log colors */
|
||||
QTextEdit#log_frame {
|
||||
QPlainTextEdit#log_frame {
|
||||
background-color: #000; /* Black */
|
||||
}
|
||||
QLabel#log_level_always {
|
||||
@@ -296,7 +285,7 @@ QLabel#log_stack {
|
||||
}
|
||||
|
||||
/* Set TTY colors */
|
||||
QTextEdit#tty_frame {
|
||||
QPlainTextEdit#tty_frame {
|
||||
background-color: #000; /* Black */
|
||||
}
|
||||
QLabel#tty_text {
|
||||
@@ -344,24 +333,57 @@ QLabel#debugger_frame_pc {
|
||||
/* Tree view changes*/
|
||||
QTreeView::branch:has-children:!has-siblings:closed,
|
||||
QTreeView::branch:closed:has-children:has-siblings {
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_white.png");
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_white.png");
|
||||
}
|
||||
|
||||
QTreeView::branch:open:has-children:!has-siblings,
|
||||
QTreeView::branch:open:has-children:has-siblings {
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_down_white.png");
|
||||
QTreeView::branch:open:has-children:has-siblings {
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_down_white.png");
|
||||
}
|
||||
|
||||
QTreeView::branch:has-children:!has-siblings:closed:hover,
|
||||
QTreeView::branch:closed:has-children:has-siblings:hover {
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_blue.png");
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_blue.png");
|
||||
}
|
||||
|
||||
QTreeView::branch:open:has-children:!has-siblings:hover,
|
||||
QTreeView::branch:open:has-children:has-siblings:hover {
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_down_blue.png");
|
||||
QTreeView::branch:open:has-children:has-siblings:hover {
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_down_blue.png");
|
||||
}
|
||||
|
||||
/* Game Grid */
|
||||
#game_list_grid_item[selected="true"] {
|
||||
background: #313f4e;
|
||||
}
|
||||
#game_list_grid_item:hover {
|
||||
background: #313f4e;
|
||||
}
|
||||
#game_list_grid_item:focus {
|
||||
background: #0078D7;
|
||||
}
|
||||
|
||||
/* Game Grid Font */
|
||||
#game_list_grid_item #game_list_grid_item_title_label {
|
||||
font-weight: 600;
|
||||
font-size: 8pt;
|
||||
font-family: Lucida Grande;
|
||||
color: #FFF;
|
||||
}
|
||||
|
||||
/* Game Grid hover and focus: we need to handle properties differently when using descendants */
|
||||
#game_list_grid_item[selected="true"] #game_list_grid_item_title_label {
|
||||
background-color: #313f4e;
|
||||
}
|
||||
#game_list_grid_item[hover="true"] #game_list_grid_item_title_label {
|
||||
background-color: #313f4e;
|
||||
}
|
||||
#game_list_grid_item[focus="true"] #game_list_grid_item_title_label {
|
||||
background-color: #0078D7;
|
||||
}
|
||||
|
||||
/* Richtext link color */
|
||||
QLabel#richtext_link_color { color: #87cefa; }
|
||||
|
||||
+45
-24
@@ -1,4 +1,4 @@
|
||||
/*
|
||||
/*
|
||||
Envy theme for RPCS3 by drysalter (https://github.com/drysalter)
|
||||
03/04/2019
|
||||
*/
|
||||
@@ -19,7 +19,7 @@ Candy Red: #ff007a
|
||||
Yellow: #f2d571
|
||||
Fuchsia: #ff00ff
|
||||
Orange: #ff6000
|
||||
Cyan: #3498d8
|
||||
Cyan: #3498d8
|
||||
|
||||
*/
|
||||
|
||||
@@ -209,7 +209,7 @@ QRadioButton::indicator:unchecked {
|
||||
}
|
||||
|
||||
QRadioButton::indicator:disabled {
|
||||
background-color: #4d5058;
|
||||
background-color: #4d5058;
|
||||
}
|
||||
|
||||
/* Combo Boxes */
|
||||
@@ -272,7 +272,7 @@ QSlider::handle:horizontal {
|
||||
border: 1px solid #5c5c5c;
|
||||
border-radius: 0.1em;
|
||||
width: 18px;
|
||||
margin: -2px 2;
|
||||
margin: -2px 2;
|
||||
}
|
||||
|
||||
QSlider::handle:horizontal:hover {
|
||||
@@ -335,7 +335,7 @@ QPushButton:disabled {
|
||||
}
|
||||
|
||||
QPushButton::pressed {
|
||||
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #2d3038, stop: 1 #2d3038);
|
||||
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #2d3038, stop: 1 #2d3038);
|
||||
}
|
||||
|
||||
/* Spinboxes */
|
||||
@@ -454,7 +454,7 @@ QListWidget::item:selected {
|
||||
}
|
||||
|
||||
QListWidget::item:hover {
|
||||
background-color: #30333a;
|
||||
background-color: #30333a;
|
||||
color: #8cf944;
|
||||
border-radius: 0.25em;
|
||||
}
|
||||
@@ -479,7 +479,7 @@ QListWidget::indicator:disabled {
|
||||
}
|
||||
|
||||
/* Pad Settings: Controller Image */
|
||||
QLabel#l_controller {
|
||||
QLabel#l_controller {
|
||||
color: #8cf944;
|
||||
}
|
||||
|
||||
@@ -505,7 +505,7 @@ QLabel#color_button {
|
||||
}
|
||||
|
||||
/* Search bar on main toolbar */
|
||||
QLineEdit#mw_searchbar {
|
||||
QLineEdit#mw_searchbar {
|
||||
color: #ecf0f1;
|
||||
background-color: #2d3038;
|
||||
border: 1px solid #f8f8f8;
|
||||
@@ -513,14 +513,14 @@ QLineEdit#mw_searchbar {
|
||||
padding-left: 5px;
|
||||
}
|
||||
|
||||
QLineEdit#mw_searchbar:hover {
|
||||
QLineEdit#mw_searchbar:hover {
|
||||
color: #ecf0f1;
|
||||
background-color: #2d3038;
|
||||
border: 1px solid #8cf944;
|
||||
margin: 15px;
|
||||
}
|
||||
|
||||
QLineEdit#mw_searchbar:focus {
|
||||
QLineEdit#mw_searchbar:focus {
|
||||
border: 1px solid #8cf944;
|
||||
}
|
||||
|
||||
@@ -565,8 +565,8 @@ QTableView {
|
||||
}
|
||||
|
||||
QTableView::item:hover {
|
||||
color: #8cf944;
|
||||
}
|
||||
color: #8cf944;
|
||||
}
|
||||
|
||||
/* Game Icon Background */
|
||||
QLabel#gamelist_icon_background_color {
|
||||
@@ -579,7 +579,7 @@ QLabel#thumbnail_icon_color {
|
||||
}
|
||||
|
||||
/* Log colors */
|
||||
QTextEdit#log_frame {
|
||||
QPlainTextEdit#log_frame {
|
||||
background-color: #23262d;
|
||||
}
|
||||
|
||||
@@ -620,7 +620,7 @@ QLabel#log_stack {
|
||||
}
|
||||
|
||||
/* TTY colors */
|
||||
QTextEdit#tty_frame {
|
||||
QPlainTextEdit#tty_frame {
|
||||
background-color: #23262d;
|
||||
}
|
||||
|
||||
@@ -641,24 +641,45 @@ QLabel#debugger_frame_pc {
|
||||
/* Tree view changes*/
|
||||
QTreeView::branch:has-children:!has-siblings:closed,
|
||||
QTreeView::branch:closed:has-children:has-siblings {
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_white.png");
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_white.png");
|
||||
}
|
||||
|
||||
QTreeView::branch:open:has-children:!has-siblings,
|
||||
QTreeView::branch:open:has-children:has-siblings {
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_down_white.png");
|
||||
QTreeView::branch:open:has-children:has-siblings {
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_down_white.png");
|
||||
}
|
||||
|
||||
QTreeView::branch:has-children:!has-siblings:closed:hover,
|
||||
QTreeView::branch:closed:has-children:has-siblings:hover {
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_green.png");
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_green.png");
|
||||
}
|
||||
|
||||
QTreeView::branch:open:has-children:!has-siblings:hover,
|
||||
QTreeView::branch:open:has-children:has-siblings:hover {
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_down_green.png");
|
||||
QTreeView::branch:open:has-children:has-siblings:hover {
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_down_green.png");
|
||||
}
|
||||
|
||||
/* Game Grid */
|
||||
#game_list_grid_item[selected="true"] {
|
||||
background: #2d3038;
|
||||
}
|
||||
#game_list_grid_item:focus {
|
||||
background: #2d3038;
|
||||
}
|
||||
|
||||
/* Game Grid hover and focus: we need to handle properties differently when using descendants */
|
||||
#game_list_grid_item[selected="true"] #game_list_grid_item_title_label {
|
||||
background-color: #2d3038;
|
||||
color: #8cf944;
|
||||
}
|
||||
#game_list_grid_item[focus="true"] #game_list_grid_item_title_label {
|
||||
background-color: #2d3038;
|
||||
color: #8cf944;
|
||||
}
|
||||
|
||||
/* Richtext link color */
|
||||
QLabel#richtext_link_color { color: #8cf944; }
|
||||
|
||||
@@ -249,20 +249,6 @@ QWidget#trophy_notification_frame {
|
||||
color: #e6e6e6;
|
||||
}
|
||||
|
||||
/* Game Grid Font */
|
||||
QTableWidget#game_grid {
|
||||
font-weight: 600;
|
||||
font-size: 8pt;
|
||||
font-family: Lucida Grande;
|
||||
selection-color: #e6e6e6;
|
||||
}
|
||||
QTableWidget#game_grid::item:selected:active {
|
||||
selection-background-color: #4c4b4b;
|
||||
}
|
||||
QTableWidget#game_grid::item:selected:!active {
|
||||
selection-background-color: #3d3d3d;
|
||||
}
|
||||
|
||||
/* Set Toolbar Slider Size */
|
||||
QSlider#sizeSlider::groove:horizontal {
|
||||
border: 0em solid transparent;
|
||||
@@ -306,7 +292,7 @@ QLabel#debugger_frame_pc {
|
||||
}
|
||||
|
||||
/* Set Log colors */
|
||||
QTextEdit#log_frame {
|
||||
QPlainTextEdit#log_frame {
|
||||
background-color: #000000; /* Black */
|
||||
}
|
||||
QLabel#log_level_always {
|
||||
@@ -337,7 +323,7 @@ QLabel#log_stack {
|
||||
color: #ffffff; /* White */
|
||||
}
|
||||
/* Set TTY colors */
|
||||
QTextEdit#tty_frame {
|
||||
QPlainTextEdit#tty_frame {
|
||||
background-color: #000000; /* Black */
|
||||
}
|
||||
QLabel#tty_text {
|
||||
@@ -347,24 +333,57 @@ QLabel#tty_text {
|
||||
/* Tree view changes*/
|
||||
QTreeView::branch:has-children:!has-siblings:closed,
|
||||
QTreeView::branch:closed:has-children:has-siblings {
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_white.png");
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_white.png");
|
||||
}
|
||||
|
||||
QTreeView::branch:open:has-children:!has-siblings,
|
||||
QTreeView::branch:open:has-children:has-siblings {
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_down_white.png");
|
||||
QTreeView::branch:open:has-children:has-siblings {
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_down_white.png");
|
||||
}
|
||||
|
||||
QTreeView::branch:has-children:!has-siblings:closed:hover,
|
||||
QTreeView::branch:closed:has-children:has-siblings:hover {
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_blue.png");
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_blue.png");
|
||||
}
|
||||
|
||||
QTreeView::branch:open:has-children:!has-siblings:hover,
|
||||
QTreeView::branch:open:has-children:has-siblings:hover {
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_down_blue.png");
|
||||
QTreeView::branch:open:has-children:has-siblings:hover {
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_down_blue.png");
|
||||
}
|
||||
|
||||
/* Game Grid */
|
||||
#game_list_grid_item[selected="true"] {
|
||||
background: #3d3d3d;
|
||||
}
|
||||
#game_list_grid_item:hover {
|
||||
background: #3d3d3d;
|
||||
}
|
||||
#game_list_grid_item:focus {
|
||||
background: #4c4b4b;
|
||||
}
|
||||
|
||||
/* Game Grid Font */
|
||||
#game_list_grid_item #game_list_grid_item_title_label {
|
||||
font-weight: 600;
|
||||
font-size: 8pt;
|
||||
font-family: Lucida Grande;
|
||||
}
|
||||
|
||||
/* Game Grid hover and focus: we need to handle properties differently when using descendants */
|
||||
#game_list_grid_item[selected="true"] #game_list_grid_item_title_label {
|
||||
background-color: #3d3d3d;
|
||||
}
|
||||
#game_list_grid_item[hover="true"] #game_list_grid_item_title_label {
|
||||
background-color: #3d3d3d;
|
||||
}
|
||||
#game_list_grid_item[focus="true"] #game_list_grid_item_title_label {
|
||||
color: #e6e6e6;
|
||||
background-color: #4c4b4b;
|
||||
}
|
||||
|
||||
/* Richtext link color */
|
||||
QLabel#richtext_link_color { color: #87cefa; }
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
ModernBlue Theme for RPCS3
|
||||
/*
|
||||
ModernBlue Theme for RPCS3
|
||||
by themitosan @ twitter.com/themitosan
|
||||
(2017.12.12)
|
||||
*/
|
||||
@@ -124,7 +124,7 @@ QGroupBox::title {
|
||||
/* Buttons */
|
||||
QPushButton {
|
||||
background-color: #46598b;
|
||||
color: #fff;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
QPushButton::disabled {
|
||||
@@ -133,7 +133,7 @@ QPushButton::disabled {
|
||||
}
|
||||
|
||||
QPushButton::pressed {
|
||||
background-color: #172038;
|
||||
background-color: #172038;
|
||||
}
|
||||
|
||||
/* Log and Debugger borders */
|
||||
@@ -190,21 +190,10 @@ QListWidget::item:hover {
|
||||
}
|
||||
|
||||
/* Pad Settings: Controller Image */
|
||||
QLabel#l_controller {
|
||||
QLabel#l_controller {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
/* Game Grid Font */
|
||||
QTableWidget#game_grid {
|
||||
font-weight: 600;
|
||||
font-size: 8pt;
|
||||
font-family: Lucida Grande;
|
||||
color: #fff;
|
||||
}
|
||||
QTableWidget#game_grid::item:selected:!active {
|
||||
selection-background-color: #354454;
|
||||
}
|
||||
|
||||
/* Slider on toolbar */
|
||||
QWidget#sizeSliderContainer {
|
||||
background: transparent;
|
||||
@@ -227,8 +216,8 @@ QLabel#color_button {
|
||||
}
|
||||
|
||||
/* Search bar on main toolbar */
|
||||
QLineEdit#mw_searchbar {
|
||||
margin-left: 0.7em;
|
||||
QLineEdit#mw_searchbar {
|
||||
margin-left: 0.7em;
|
||||
color: #ecf0f1;
|
||||
}
|
||||
|
||||
@@ -261,7 +250,7 @@ QLabel#thumbnail_icon_color {
|
||||
}
|
||||
|
||||
/* Set Log colors */
|
||||
QTextEdit#log_frame {
|
||||
QPlainTextEdit#log_frame {
|
||||
background-color: #181d24; /* Black */
|
||||
}
|
||||
QLabel#log_level_always {
|
||||
@@ -293,7 +282,7 @@ QLabel#log_stack {
|
||||
}
|
||||
|
||||
/* Set TTY colors */
|
||||
QTextEdit#tty_frame {
|
||||
QPlainTextEdit#tty_frame {
|
||||
background-color: #181d24; /* Black */
|
||||
}
|
||||
QLabel#tty_text {
|
||||
@@ -341,24 +330,57 @@ QLabel#debugger_frame_pc {
|
||||
/* Tree view changes*/
|
||||
QTreeView::branch:has-children:!has-siblings:closed,
|
||||
QTreeView::branch:closed:has-children:has-siblings {
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_white.png");
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_white.png");
|
||||
}
|
||||
|
||||
QTreeView::branch:open:has-children:!has-siblings,
|
||||
QTreeView::branch:open:has-children:has-siblings {
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_down_white.png");
|
||||
QTreeView::branch:open:has-children:has-siblings {
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_down_white.png");
|
||||
}
|
||||
|
||||
QTreeView::branch:has-children:!has-siblings:closed:hover,
|
||||
QTreeView::branch:closed:has-children:has-siblings:hover {
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_blue.png");
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_blue.png");
|
||||
}
|
||||
|
||||
QTreeView::branch:open:has-children:!has-siblings:hover,
|
||||
QTreeView::branch:open:has-children:has-siblings:hover {
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_down_blue.png");
|
||||
QTreeView::branch:open:has-children:has-siblings:hover {
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_down_blue.png");
|
||||
}
|
||||
|
||||
/* Game Grid */
|
||||
#game_list_grid_item[selected="true"] {
|
||||
background: #354454;
|
||||
}
|
||||
#game_list_grid_item:hover {
|
||||
background: #354454;
|
||||
}
|
||||
#game_list_grid_item:focus {
|
||||
background: #0078D7;
|
||||
}
|
||||
|
||||
/* Game Grid Font */
|
||||
#game_list_grid_item #game_list_grid_item_title_label {
|
||||
font-weight: 600;
|
||||
font-size: 8pt;
|
||||
font-family: Lucida Grande;
|
||||
color: #FFF;
|
||||
}
|
||||
|
||||
/* Game Grid hover and focus: we need to handle properties differently when using descendants */
|
||||
#game_list_grid_item[selected="true"] #game_list_grid_item_title_label {
|
||||
background-color: #354454;
|
||||
}
|
||||
#game_list_grid_item[hover="true"] #game_list_grid_item_title_label {
|
||||
background-color: #354454;
|
||||
}
|
||||
#game_list_grid_item[focus="true"] #game_list_grid_item_title_label {
|
||||
background-color: #0078D7;
|
||||
}
|
||||
|
||||
/* Richtext link color */
|
||||
QLabel#richtext_link_color { color: #87cefa; }
|
||||
|
||||
@@ -367,21 +367,6 @@ QLabel#l_controller {
|
||||
}
|
||||
|
||||
|
||||
/* Game Grid Font */
|
||||
QTableWidget#game_grid {
|
||||
font-weight: 600;
|
||||
color: #ffd785;
|
||||
text-transform: uppercase;
|
||||
selection-color: #ffd785;
|
||||
}
|
||||
QTableWidget#game_grid::item:selected:active {
|
||||
selection-background-color: #4d4940;
|
||||
}
|
||||
QTableWidget#game_grid::item:selected:!active {
|
||||
selection-background-color: #615c51;
|
||||
}
|
||||
|
||||
|
||||
/* Debug UI Settings buttons */
|
||||
QLabel#color_button {
|
||||
background: transparent;
|
||||
@@ -489,3 +474,36 @@ QWidget#trophy_notification_frame {
|
||||
background-color: #b3ac98;
|
||||
color: #4d4940;
|
||||
}
|
||||
|
||||
/* Game Grid */
|
||||
#game_list_grid_item[selected="true"] {
|
||||
background: #615c51;
|
||||
}
|
||||
#game_list_grid_item:hover {
|
||||
background: #615c51;
|
||||
}
|
||||
#game_list_grid_item:focus {
|
||||
background: #4d4940;
|
||||
}
|
||||
|
||||
/* Game Grid Font */
|
||||
#game_list_grid_item #game_list_grid_item_title_label {
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
color: #ffd785;
|
||||
}
|
||||
|
||||
/* Game Grid hover and focus: we need to handle properties differently when using descendants */
|
||||
#game_list_grid_item[selected="true"] #game_list_grid_item_title_label {
|
||||
background-color: #615c51;
|
||||
}
|
||||
#game_list_grid_item[hover="true"] #game_list_grid_item_title_label {
|
||||
background-color: #615c51;
|
||||
}
|
||||
#game_list_grid_item[focus="true"] #game_list_grid_item_title_label {
|
||||
background-color: #4d4940;
|
||||
color: #ffd785;
|
||||
}
|
||||
|
||||
/* Richtext link color */
|
||||
QLabel#richtext_link_color { color: #87cefa; }
|
||||
|
||||
@@ -105,7 +105,7 @@ QToolButton:hover {
|
||||
}
|
||||
|
||||
/* Search bar in Main Toolbar */
|
||||
QLineEdit#mw_searchbar {
|
||||
QLineEdit#mw_searchbar {
|
||||
color: #455971;
|
||||
background-color: #FFFFFF;
|
||||
border: 1px solid #999999;
|
||||
@@ -113,15 +113,15 @@ QLineEdit#mw_searchbar {
|
||||
padding-left: 5px;
|
||||
}
|
||||
|
||||
QLineEdit#mw_searchbar:hover {
|
||||
margin-left: 0.7em;
|
||||
QLineEdit#mw_searchbar:hover {
|
||||
margin-left: 0.7em;
|
||||
color: #0074e7;
|
||||
background-color: #FFFFFF;
|
||||
border: 1px solid #0071ec;
|
||||
margin: 15px;
|
||||
}
|
||||
|
||||
QLineEdit#mw_searchbar:focus {
|
||||
QLineEdit#mw_searchbar:focus {
|
||||
border: 1px solid #0074e7;
|
||||
}
|
||||
|
||||
@@ -148,7 +148,7 @@ QSlider::handle:horizontal {
|
||||
border: 1px solid #5c5c5c;
|
||||
border-radius: 0.1em;
|
||||
width: 18px;
|
||||
margin: -2px 2;
|
||||
margin: -2px 2;
|
||||
}
|
||||
|
||||
QSlider::handle:horizontal:hover {
|
||||
@@ -220,6 +220,17 @@ QScrollBar::up-arrow, QScrollBar::down-arrow, QScrollBar::up-button:vertical, QS
|
||||
border: none;
|
||||
}
|
||||
|
||||
#game_list_grid QScrollBar {
|
||||
width: 10px;
|
||||
height: 3px;
|
||||
}
|
||||
#game_list_grid QScrollBar::handle {
|
||||
background: #1c273d;
|
||||
}
|
||||
#game_list_grid QScrollBar::handle:hover, QScrollBar::handle:pressed {
|
||||
background: #0074e7;
|
||||
}
|
||||
|
||||
/* Radio Buttons */
|
||||
QRadioButton::indicator {
|
||||
border: 0.0625em solid #455971;
|
||||
@@ -242,7 +253,7 @@ QRadioButton::indicator:unchecked {
|
||||
}
|
||||
|
||||
QRadioButton::indicator:disabled {
|
||||
background-color: #455971;
|
||||
background-color: #455971;
|
||||
}
|
||||
|
||||
/* Checkboxes */
|
||||
@@ -533,7 +544,7 @@ QProgressBar::chunk {
|
||||
}
|
||||
|
||||
/* Pad Settings: Controller Image */
|
||||
QLabel#l_controller {
|
||||
QLabel#l_controller {
|
||||
color: #0074e7;
|
||||
}
|
||||
|
||||
@@ -554,7 +565,7 @@ QHeaderView::section {
|
||||
background-color: #111525;
|
||||
color: #FFFFFF;
|
||||
padding-top: 3px;
|
||||
padding-left: 3px;
|
||||
padding-left: 3px;
|
||||
height: 20px;
|
||||
border: none;
|
||||
}
|
||||
@@ -600,7 +611,7 @@ QLineEdit:focus {
|
||||
}
|
||||
|
||||
/* Log colors */
|
||||
QTextEdit#log_frame {
|
||||
QPlainTextEdit#log_frame {
|
||||
background-color: #111525;
|
||||
}
|
||||
|
||||
@@ -663,24 +674,52 @@ QLabel#debugger_frame_pc {
|
||||
/* Tree view changes*/
|
||||
QTreeView::branch:has-children:!has-siblings:closed,
|
||||
QTreeView::branch:closed:has-children:has-siblings {
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_white.png");
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_white.png");
|
||||
}
|
||||
|
||||
QTreeView::branch:open:has-children:!has-siblings,
|
||||
QTreeView::branch:open:has-children:has-siblings {
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_down_white.png");
|
||||
QTreeView::branch:open:has-children:has-siblings {
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_down_white.png");
|
||||
}
|
||||
|
||||
QTreeView::branch:has-children:!has-siblings:closed:hover,
|
||||
QTreeView::branch:closed:has-children:has-siblings:hover {
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_blue.png");
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_blue.png");
|
||||
}
|
||||
|
||||
QTreeView::branch:open:has-children:!has-siblings:hover,
|
||||
QTreeView::branch:open:has-children:has-siblings:hover {
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_down_blue.png");
|
||||
QTreeView::branch:open:has-children:has-siblings:hover {
|
||||
border-image: none;
|
||||
image: url("GuiConfigs/list_arrow_down_blue.png");
|
||||
}
|
||||
|
||||
/* Game Grid */
|
||||
#game_list_grid_item[selected="true"] {
|
||||
background: #0f1d36;
|
||||
}
|
||||
#game_list_grid_item:focus {
|
||||
background: #0f1d36;
|
||||
}
|
||||
|
||||
#game_list_grid_item #game_list_grid_item_title_label {
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
/* Game Grid hover and focus: we need to handle properties differently when using descendants */
|
||||
#game_list_grid_item[selected="true"] #game_list_grid_item_title_label {
|
||||
background-color: #0f1d36;
|
||||
color: #2397ff;
|
||||
}
|
||||
#game_list_grid_item[hover="true"] #game_list_grid_item_title_label {
|
||||
color: #2397ff;
|
||||
}
|
||||
#game_list_grid_item[focus="true"] #game_list_grid_item_title_label {
|
||||
background-color: #0f1d36;
|
||||
color: #2397ff;
|
||||
}
|
||||
|
||||
/* Richtext link color */
|
||||
QLabel#richtext_link_color { color: #0074e7; }
|
||||
|
||||
@@ -105,7 +105,7 @@ QToolButton:hover {
|
||||
}
|
||||
|
||||
/* Search bar in Main Toolbar */
|
||||
QLineEdit#mw_searchbar {
|
||||
QLineEdit#mw_searchbar {
|
||||
color: #455971;
|
||||
background-color: #FFFFFF;
|
||||
border: 1px solid #999999;
|
||||
@@ -113,15 +113,15 @@ QLineEdit#mw_searchbar {
|
||||
padding-left: 5px;
|
||||
}
|
||||
|
||||
QLineEdit#mw_searchbar:hover {
|
||||
margin-left: 0.7em;
|
||||
QLineEdit#mw_searchbar:hover {
|
||||
margin-left: 0.7em;
|
||||
color: #455971;
|
||||
background-color: #FFFFFF;
|
||||
border: 1px solid #0071ec;
|
||||
margin: 15px;
|
||||
}
|
||||
|
||||
QLineEdit#mw_searchbar:focus {
|
||||
QLineEdit#mw_searchbar:focus {
|
||||
border: 1px solid #0071ec;
|
||||
}
|
||||
|
||||
@@ -148,7 +148,7 @@ QSlider::handle:horizontal {
|
||||
border: 1px solid #5c5c5c;
|
||||
border-radius: 0.1em;
|
||||
width: 18px;
|
||||
margin: -2px 2;
|
||||
margin: -2px 2;
|
||||
}
|
||||
|
||||
QSlider::handle:horizontal:disabled {
|
||||
@@ -254,7 +254,7 @@ QRadioButton::indicator:unchecked {
|
||||
}
|
||||
|
||||
QRadioButton::indicator:disabled {
|
||||
background-color: #455971;
|
||||
background-color: #455971;
|
||||
}
|
||||
|
||||
/* Checkboxes */
|
||||
@@ -552,7 +552,7 @@ QProgressBar::chunk {
|
||||
}
|
||||
|
||||
/* Pad Settings: Controller Image */
|
||||
QLabel#l_controller {
|
||||
QLabel#l_controller {
|
||||
color: #4343c1;
|
||||
}
|
||||
|
||||
@@ -573,7 +573,7 @@ QHeaderView::section {
|
||||
background-color: #FFFFFF;
|
||||
color: #455971;
|
||||
padding-top: 3px;
|
||||
padding-left: 3px;
|
||||
padding-left: 3px;
|
||||
height: 20px;
|
||||
border: none;
|
||||
}
|
||||
@@ -619,7 +619,7 @@ QLineEdit:focus {
|
||||
}
|
||||
|
||||
/* Log colors */
|
||||
QTextEdit#log_frame {
|
||||
QPlainTextEdit#log_frame {
|
||||
background-color: #FFFFFF;
|
||||
}
|
||||
|
||||
@@ -678,3 +678,24 @@ QLabel#debugger_frame_pc {
|
||||
color: #000; /* Font Color: Black */
|
||||
background-color: #00ff00; /* Green */
|
||||
}
|
||||
|
||||
/* Game Grid */
|
||||
#game_list_grid_item[selected="true"] {
|
||||
background: #4343c1;
|
||||
}
|
||||
#game_list_grid_item:focus {
|
||||
background: #4343c1;
|
||||
}
|
||||
|
||||
/* Game Grid hover and focus: we need to handle properties differently when using descendants */
|
||||
#game_list_grid_item[selected="true"] #game_list_grid_item_title_label {
|
||||
background-color: #4343c1;
|
||||
color: #FFF;
|
||||
}
|
||||
#game_list_grid_item[hover="true"] #game_list_grid_item_title_label {
|
||||
color: #4343c1;
|
||||
}
|
||||
#game_list_grid_item[focus="true"] #game_list_grid_item_title_label {
|
||||
background-color: #4343c1;
|
||||
color: #FFF;
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user