mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-05 22:41:25 +12:00
Compare commits
537 commits
Author | SHA1 | Date | |
---|---|---|---|
|
46150322a3 | ||
|
2bb2c748bd | ||
|
a5c4951914 | ||
|
dfd80d2165 | ||
|
4dbaaafbf1 | ||
|
25c2c601c9 | ||
|
9403d87d84 | ||
|
f50d374393 | ||
|
eeeb7fb4ab | ||
|
20c9dcd2d6 | ||
|
38ff48595d | ||
|
c7c206ecdc | ||
|
bfd2adab5e | ||
|
786ac95dc0 | ||
|
1660dc24b3 | ||
|
aa50b0fbb9 | ||
|
3df93dcc19 | ||
|
1f0328c5d5 | ||
|
3f635033cc | ||
|
8130babad3 | ||
|
37c4406b23 | ||
|
5d6b8b20c4 | ||
|
396c4bbdd7 | ||
|
16a0ae6a7b | ||
|
dd28d100d6 | ||
|
91e22aa4e4 | ||
|
cdc78f81f7 | ||
|
91491c7cf3 | ||
|
b3492b73ad | ||
|
15791cf94e | ||
|
5417d4854d | ||
|
bb1c0a5eee | ||
|
3a65359d59 | ||
|
ffa835efac | ||
|
f241825c73 | ||
|
2c8c788d81 | ||
|
2ae9753d79 | ||
|
93e6aa6310 | ||
|
ae74aa336f | ||
|
64866098e7 | ||
|
20b54f3086 | ||
|
aac4fbe941 | ||
|
356b2f5910 | ||
|
4d493bbb80 | ||
|
49729086ac | ||
|
329655a1bf | ||
|
b0067e8934 | ||
|
22d9343f2c | ||
|
9c93ec0bc3 | ||
|
c6c72d3721 | ||
|
424f9306c4 | ||
|
5d552ca236 | ||
|
28896acb83 | ||
|
6f37be1afd | ||
|
4fd581b812 | ||
|
bad6e99258 | ||
|
27359d3d32 | ||
|
f8f34787b3 | ||
|
d61c2496b6 | ||
|
5569c5c803 | ||
|
d0812ee5a8 | ||
|
9634e58f0a | ||
|
9610d45ebf | ||
|
85c813d84c | ||
|
ab55500f01 | ||
|
af0432a44b | ||
|
2b7161208e | ||
|
5514d7c3d8 | ||
|
823e17288c | ||
|
866daf2059 | ||
|
ae38cef7b1 | ||
|
e36f55ea41 | ||
|
819d3dc7a6 | ||
|
ac99b2036d | ||
|
46cce45b13 | ||
|
d685348644 | ||
|
d15b7a9955 | ||
|
99db73a34f | ||
|
85e4eff571 | ||
|
d8bc2d5c75 | ||
|
4704c03209 | ||
|
70faef3fdb | ||
|
663ff55af9 | ||
|
229c1c38a3 | ||
|
68d2573344 | ||
|
c437fe9ff0 | ||
|
c93ee3dc1a | ||
|
0f45c08188 | ||
|
55aaffb7b3 | ||
|
aeafbfa2e1 | ||
|
cd7c9a8da4 | ||
|
382e62c7d8 | ||
|
ae35430c96 | ||
|
c0bfc34a75 | ||
|
bda335a505 | ||
|
38289f3bc1 | ||
|
3d0a68c9e8 | ||
|
a9df046f21 | ||
|
2d9a24d1d6 | ||
|
45718d7679 | ||
|
2ea7ff6b14 | ||
|
4f7c82ba8a | ||
|
79bcb7790c | ||
|
1ff6bdd777 | ||
|
3e674a896f | ||
|
3aba805bc9 | ||
|
09ab5477e8 | ||
|
da273761d1 | ||
|
4f2324cae7 | ||
|
57207bbe96 | ||
|
b8a5986504 | ||
|
b54c2124cf | ||
|
9a150b677e | ||
|
01ec2671b3 | ||
|
dd0004f80d | ||
|
e59c6c3c18 | ||
|
c27d7db0a7 | ||
|
7e7943f962 | ||
|
cb5fd17635 | ||
|
c5e40dde74 | ||
|
5deb0fcbc6 | ||
|
62055bed3f | ||
|
182acfcf3e | ||
|
52aa475581 | ||
|
64a3e50d6c | ||
|
0750574a03 | ||
|
3dca4dd4bb | ||
|
410710b02c | ||
|
48be05e8f1 | ||
|
36e680c603 | ||
|
5da1b44371 | ||
|
9b3ee1ed17 | ||
|
3f2075070a | ||
|
208c4e2af2 | ||
|
a9b911750f | ||
|
8d9ba4329d | ||
|
bc18b3592c | ||
|
fa744121fc | ||
|
f4dc18c872 | ||
|
d02dea5df2 | ||
|
b1b02e0425 | ||
|
6854e9b974 | ||
|
3894c903bc | ||
|
d21358e91f | ||
|
21cdbd90e9 | ||
|
12f4e4fd8c | ||
|
3ea3ed6672 | ||
|
4840e3575b | ||
|
f0672bdbc9 | ||
|
2963d10325 | ||
|
501643c10a | ||
|
73a6141f3f | ||
|
738d1ef682 | ||
|
30a4b26306 | ||
|
fdc1a51cba | ||
|
9c7d8da298 | ||
|
0146b845d9 | ||
|
fc3a905c90 | ||
|
aa79afd7ae | ||
|
f17400092d | ||
|
e1d3cf57c8 | ||
|
2a50ac1891 | ||
|
0724fa3aa9 | ||
|
ba46c62500 | ||
|
1276867860 | ||
|
5249f6cba7 | ||
|
353e0a8400 | ||
|
ec4e65bdd9 | ||
|
e5d3944726 | ||
|
e67beb27dd | ||
|
5cfa9fd83e | ||
|
84a4cc01e1 | ||
|
32ad9988a3 | ||
|
fcdf542c47 | ||
|
3cebfaa648 | ||
|
74fa59590a | ||
|
4958d7a88f | ||
|
487c58558e | ||
|
cf1e53f9c8 | ||
|
75b728be7e | ||
|
6428088e46 | ||
|
c0a1e8d5a5 | ||
|
7a9733dcca | ||
|
9146076e28 | ||
|
b25276deec | ||
|
947c6ec3e1 | ||
|
ea94f44f66 | ||
|
e48797db1a | ||
|
0439ca67d9 | ||
|
399c871d79 | ||
|
6abe18a4f8 | ||
|
77f45954d0 | ||
|
982dac9446 | ||
|
486e93f418 | ||
|
259768e896 | ||
|
c792db2c60 | ||
|
b6a3754ee5 | ||
|
e4cc55dc19 | ||
|
eb4c6df609 | ||
|
05b5f9aa97 | ||
|
a9d2150b0f | ||
|
b17078fe1a | ||
|
9a5c4aba58 | ||
|
9897a80216 | ||
|
19cc93437e | ||
|
39247fcbc1 | ||
|
3b61613d1b | ||
|
81b1e5636d | ||
|
e066735fe9 | ||
|
63b7134dce | ||
|
e110334c2c | ||
|
77eef4d783 | ||
|
e2df71d87c | ||
|
68e7f4e820 | ||
|
376ac85029 | ||
|
b1b9310a50 | ||
|
024949f17e | ||
|
74d995aae0 | ||
|
5b60f0cc11 | ||
|
a72f4f0606 | ||
|
752df0dae7 | ||
|
2d4ff404bd | ||
|
62fa074f9f | ||
|
c8f5659090 | ||
|
79b63556bb | ||
|
1f81d42416 | ||
|
75bfc336fc | ||
|
1af67f39ca | ||
|
2aca213ba1 | ||
|
730249a887 | ||
|
0e1cad4ca9 | ||
|
2afd7707fe | ||
|
01cf71e49a | ||
|
2f677ecebd | ||
|
d958f8291a | ||
|
f435225940 | ||
|
e321af4a29 | ||
|
929a92f6c5 | ||
|
39d3754b18 | ||
|
d7ef5a85dc | ||
|
519a3b5b79 | ||
|
89dea9bd92 | ||
|
ab269f6155 | ||
|
dcc263ca5d | ||
|
c2a5ac96cd | ||
|
85a4c5eb93 | ||
|
cd2098fad7 | ||
|
7c538873b6 | ||
|
ebcf403f4a | ||
|
417cefa059 | ||
|
1960b5a605 | ||
|
c401c0f9db | ||
|
a152bb1123 | ||
|
7c27b7b727 | ||
|
f3f1a2bb5d | ||
|
b2feff7d38 | ||
|
22c184bf75 | ||
|
5ca5b54bf6 | ||
|
a928e8a3db | ||
|
2e624789ff | ||
|
ef95fa9f5f | ||
|
cecf92e5b8 | ||
|
8437a5f5ac | ||
|
564c903fbd | ||
|
268de3cd24 | ||
|
d20f48f876 | ||
|
88e2a3761c | ||
|
e136c2eadf | ||
|
b2b50f5e82 | ||
|
26a7e9653f | ||
|
76948b6364 | ||
|
0f57624a61 | ||
|
8aaf2f8577 | ||
|
8ce8410a5b | ||
|
a0ce9e52fa | ||
|
53288309a5 | ||
|
275f7e15c0 | ||
|
7de2869a53 | ||
|
ab7a1a6ec4 | ||
|
b8d1d7cdf1 | ||
|
8b2b74c34b | ||
|
a004ebfffb | ||
|
b51d6e9d92 | ||
|
b96e41285c | ||
|
9295e6f5c8 | ||
|
e80809f629 | ||
|
5ac4db752d | ||
|
746b438500 | ||
|
0964c0356b | ||
|
7500d16524 | ||
|
b3bdff741c | ||
|
fcb6bc70f8 | ||
|
9c5b3a2300 | ||
|
2d7ffaf07f | ||
|
9b7d5cd1a9 | ||
|
bcb5041df2 | ||
|
235707278f | ||
|
db85595124 | ||
|
15758171f0 | ||
|
d08610882a | ||
|
21434c471b | ||
|
87d8bebd0d | ||
|
e4d84e2c1c | ||
|
16036e0419 | ||
|
58714d8c68 | ||
|
ddf684c4d2 | ||
|
daa76be77e | ||
|
600e460416 | ||
|
e095904e1b | ||
|
599d5c17a0 | ||
|
6f98b8c5ae | ||
|
eb2eb9ccf5 | ||
|
19d01835d3 | ||
|
f38a61bdb3 | ||
|
ed280cdbfe | ||
|
66909168ac | ||
|
38a1c8becb | ||
|
1816a1eb34 | ||
|
dad9a2b916 | ||
|
b3bbd939e3 | ||
|
cc84ebf8c2 | ||
|
2438e975e7 | ||
|
04d833d3e6 | ||
|
2f872b3755 | ||
|
bd1f5ff194 | ||
|
613212f9e1 | ||
|
4aff4a9c82 | ||
|
264af550d5 | ||
|
822546bf7d | ||
|
2ac2439c33 | ||
|
37dbd77628 | ||
|
733ceada5e | ||
|
847f92956f | ||
|
73f2aaf9d8 | ||
|
c86a250795 | ||
|
c6170aa4c7 | ||
|
89ae495c36 | ||
|
5526c33d69 | ||
|
e816636676 | ||
|
40e8bc530c | ||
|
9684467dc0 | ||
|
8e83fd7d50 | ||
|
fac1cc57d7 | ||
|
6511e0f3e6 | ||
|
9c1c932e68 | ||
|
82c85c1a9c | ||
|
7cec2d0e18 | ||
|
2f8ed1a6bd | ||
|
781da9dc59 | ||
|
1e6a4dc5c8 | ||
|
282fbcc3e5 | ||
|
cd9c156937 | ||
|
cd840ef70a | ||
|
55190c2125 | ||
|
01cdc83aeb | ||
|
b9e0a36816 | ||
|
fccb761ef2 | ||
|
0ffb4e62e6 | ||
|
bd1102d3b7 | ||
|
91427646f5 | ||
|
596e6cc2c3 | ||
|
9c99e75939 | ||
|
047f71b434 | ||
|
91b1ec6d5c | ||
|
a7df3cfb40 | ||
|
949a80dc0a | ||
|
095c884331 | ||
|
32a8bcf525 | ||
|
a469bfd4da | ||
|
6921684cd9 | ||
|
76c069e8bf | ||
|
b571978f24 | ||
|
b8236e183c | ||
|
2a7e957c61 | ||
|
467c4ba2cf | ||
|
324af04426 | ||
|
1b5d9a34df | ||
|
c52920755a | ||
|
faef63e8a7 | ||
|
ff135384ef | ||
|
a51602018e | ||
|
1616942943 | ||
|
ba7b7b65a1 | ||
|
40ff182c31 | ||
|
d9071abd8b | ||
|
b4f453f687 | ||
|
4c742f7742 | ||
|
fda51920b7 | ||
|
4905fda371 | ||
|
1ae1288a88 | ||
|
6fb0e991ea | ||
|
650176fac7 | ||
|
95aad6ceb5 | ||
|
7cd5d812d2 | ||
|
b2ff24453c | ||
|
12eacfa67b | ||
|
cd25e91321 | ||
|
518bfeca3f | ||
|
76495f07b8 | ||
|
ccecd1a627 | ||
|
8f3eff293d | ||
|
806c9230cd | ||
|
24b6b6cad5 | ||
|
971fd40353 | ||
|
2aba8c639e | ||
|
1a51ce1e66 | ||
|
1398e7702b | ||
|
a45f604cd8 | ||
|
ec29650029 | ||
|
4b31e34ea4 | ||
|
ae83c28bc8 | ||
|
58327ca23c | ||
|
5b540aed73 | ||
|
6e080044a0 | ||
|
42ba0b6271 | ||
|
a1fa8dd701 | ||
|
aea1efd5f2 | ||
|
5ae05e26c4 | ||
|
023221bd3b | ||
|
14575f3efd | ||
|
9f3eb33d80 | ||
|
225d0b9482 | ||
|
65c0d3d425 | ||
|
3d3fc2f3cd | ||
|
f9a72e8d75 | ||
|
7b212e0e57 | ||
|
a108ce8015 | ||
|
ff21a05c96 | ||
|
25eb869d5f | ||
|
ff40128df6 | ||
|
b2ed787c3a | ||
|
ec5b2bc8d2 | ||
|
3a71da35a9 | ||
|
4c788abad1 | ||
|
3737cc37f6 | ||
|
d0c2cb7ae1 | ||
|
db945f6aed | ||
|
b3f5ed55a1 | ||
|
fa5a16e9fc | ||
|
0c233c6578 | ||
|
8100779512 | ||
|
d766baef12 | ||
|
95d0cb18e4 | ||
|
976b0a8f1d | ||
|
919cb8e05c | ||
|
cac068dad9 | ||
|
7520c09087 | ||
|
edf096fc13 | ||
|
2ebf257f84 | ||
|
57e7cee84e | ||
|
adaf24310d | ||
|
94f52d6dc0 | ||
|
3080b55d02 | ||
|
bbb682a440 | ||
|
f3d988d8ab | ||
|
2c122a4401 | ||
|
26ce38a4ac | ||
|
5084fb82b8 | ||
|
798c194025 | ||
|
11e214f332 | ||
|
ddd3ac3663 | ||
|
bacce9bb37 | ||
|
aa819c8b97 | ||
|
af768d5c22 | ||
|
2bf5ae3272 | ||
|
a074b14631 | ||
|
ac7d53cc37 | ||
|
6d46d45983 | ||
|
eea2f19d82 | ||
|
2dfbab457a | ||
|
5e5f82d1a2 | ||
|
5e4637e15c | ||
|
a3d2e93b14 | ||
|
100454398c | ||
|
cce43beeae | ||
|
ebcb61b34b | ||
|
47b880fa8d | ||
|
cd76f05a86 | ||
|
9173fc9815 | ||
|
7df5cb84b5 | ||
|
e6b3c2061e | ||
|
563a3d3587 | ||
|
3be1e0b6ff | ||
|
93899bf5a9 | ||
|
ec120d1cbb | ||
|
df7a2ab467 | ||
|
a39a743abe | ||
|
eca86ad449 | ||
|
a1c8f3a528 | ||
|
26495a8455 | ||
|
32df7315be | ||
|
7995181235 | ||
|
75dc2a12e2 | ||
|
ae39c5b8cb | ||
|
eb43fbbb2a | ||
|
e4ed5c47a3 | ||
|
e4b9a21acc | ||
|
bfb9dfea7e | ||
|
8ed2089070 | ||
|
583ec5d819 | ||
|
59280a133c | ||
|
ba12de867e | ||
|
ca3d02fc61 | ||
|
a49c4c7682 | ||
|
4f52c67566 | ||
|
7a6a96254c | ||
|
6abb863a54 | ||
|
e8463403f5 | ||
|
815a4e7dc1 | ||
|
df2f68da44 | ||
|
a8fc3f5f74 | ||
|
d3c5cc7b13 | ||
|
760e43ad2c | ||
|
229734e45f | ||
|
66952fe301 | ||
|
cb659474d9 | ||
|
d429776418 | ||
|
d034f6a77f | ||
|
1920aee415 | ||
|
783079266e | ||
|
bd41774960 | ||
|
4aa25285a3 | ||
|
7fd1f5b5d3 | ||
|
72ee5ed10d | ||
|
048a44cbe5 | ||
|
6f5f7ece06 | ||
|
b3d28e2309 | ||
|
1dc3ebf891 | ||
|
6bd1ab576c | ||
|
8e6272bfee | ||
|
0aca5e222f | ||
|
b8411a90cd | ||
|
4e9365f76b | ||
|
602fe15641 | ||
|
8b2e792d31 | ||
|
aca1cdf0b6 | ||
|
af23df842d |
620 changed files with 25828 additions and 47052 deletions
|
@ -1,9 +1,10 @@
|
||||||
#!/bin/sh -ex
|
#!/bin/sh -ex
|
||||||
|
|
||||||
# Pull all the submodules except llvm and opencv
|
# Pull all the submodules except some
|
||||||
# Note: Tried to use git submodule status, but it takes over 20 seconds
|
# Note: Tried to use git submodule status, but it takes over 20 seconds
|
||||||
# shellcheck disable=SC2046
|
# shellcheck disable=SC2046
|
||||||
git submodule -q update --init --depth 1 $(awk '/path/ && !/llvm/ && !/opencv/ { print $3 }' .gitmodules)
|
git config --global --add safe.directory .
|
||||||
|
git submodule -q update --init --depth 1 $(awk '/path/ && !/llvm/ && !/opencv/ && !/libpng/ && !/libsdl-org/ && !/curl/ && !/zlib/ && !/libusb/ { print $3 }' .gitmodules)
|
||||||
|
|
||||||
CONFIGURE_ARGS="
|
CONFIGURE_ARGS="
|
||||||
-DWITH_LLVM=ON
|
-DWITH_LLVM=ON
|
||||||
|
@ -13,6 +14,7 @@ CONFIGURE_ARGS="
|
||||||
-DUSE_SYSTEM_FFMPEG=ON
|
-DUSE_SYSTEM_FFMPEG=ON
|
||||||
-DUSE_SYSTEM_CURL=ON
|
-DUSE_SYSTEM_CURL=ON
|
||||||
-DUSE_SYSTEM_LIBPNG=ON
|
-DUSE_SYSTEM_LIBPNG=ON
|
||||||
|
-DUSE_SYSTEM_LIBUSB=ON
|
||||||
-DUSE_SYSTEM_OPENCV=ON
|
-DUSE_SYSTEM_OPENCV=ON
|
||||||
"
|
"
|
||||||
|
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
#!/bin/sh -ex
|
#!/bin/sh -ex
|
||||||
|
|
||||||
if [ -z "$CIRRUS_CI" ]; then
|
|
||||||
cd rpcs3 || exit 1
|
cd rpcs3 || exit 1
|
||||||
fi
|
|
||||||
|
shellcheck .ci/*.sh
|
||||||
|
|
||||||
git config --global --add safe.directory '*'
|
git config --global --add safe.directory '*'
|
||||||
|
|
||||||
# Pull all the submodules except llvm and opencv
|
# Pull all the submodules except some
|
||||||
# shellcheck disable=SC2046
|
# shellcheck disable=SC2046
|
||||||
git submodule -q update --init $(awk '/path/ && !/llvm/ && !/opencv/ { print $3 }' .gitmodules)
|
git submodule -q update --init $(awk '/path/ && !/llvm/ && !/opencv/ && !/libsdl-org/ && !/curl/ && !/zlib/ { print $3 }' .gitmodules)
|
||||||
|
|
||||||
mkdir build && cd build || exit 1
|
mkdir build && cd build || exit 1
|
||||||
|
|
||||||
|
@ -22,15 +22,16 @@ else
|
||||||
export CXX="${CLANGXX_BINARY}"
|
export CXX="${CLANGXX_BINARY}"
|
||||||
export LINKER="${LLD_BINARY}"
|
export LINKER="${LLD_BINARY}"
|
||||||
fi
|
fi
|
||||||
export CFLAGS="$CFLAGS -fuse-ld=${LINKER}"
|
|
||||||
export CXXFLAGS="$CXXFLAGS -fuse-ld=${LINKER}"
|
export LINKER_FLAG="-fuse-ld=${LINKER}"
|
||||||
|
|
||||||
cmake .. \
|
cmake .. \
|
||||||
-DCMAKE_INSTALL_PREFIX=/usr \
|
-DCMAKE_INSTALL_PREFIX=/usr \
|
||||||
-DUSE_NATIVE_INSTRUCTIONS=OFF \
|
-DUSE_NATIVE_INSTRUCTIONS=OFF \
|
||||||
-DUSE_PRECOMPILED_HEADERS=OFF \
|
-DUSE_PRECOMPILED_HEADERS=OFF \
|
||||||
-DCMAKE_C_FLAGS="$CFLAGS" \
|
-DCMAKE_EXE_LINKER_FLAGS="${LINKER_FLAG}" \
|
||||||
-DCMAKE_CXX_FLAGS="$CFLAGS" \
|
-DCMAKE_MODULE_LINKER_FLAGS="${LINKER_FLAG}" \
|
||||||
|
-DCMAKE_SHARED_LINKER_FLAGS="${LINKER_FLAG}" \
|
||||||
-DUSE_SYSTEM_CURL=ON \
|
-DUSE_SYSTEM_CURL=ON \
|
||||||
-DUSE_SDL=ON \
|
-DUSE_SDL=ON \
|
||||||
-DUSE_SYSTEM_SDL=ON \
|
-DUSE_SYSTEM_SDL=ON \
|
||||||
|
@ -40,19 +41,15 @@ cmake .. \
|
||||||
-DOpenGL_GL_PREFERENCE=LEGACY \
|
-DOpenGL_GL_PREFERENCE=LEGACY \
|
||||||
-DLLVM_DIR=/opt/llvm/lib/cmake/llvm \
|
-DLLVM_DIR=/opt/llvm/lib/cmake/llvm \
|
||||||
-DSTATIC_LINK_LLVM=ON \
|
-DSTATIC_LINK_LLVM=ON \
|
||||||
|
-DBUILD_RPCS3_TESTS="${RUN_UNIT_TESTS}" \
|
||||||
|
-DRUN_RPCS3_TESTS="${RUN_UNIT_TESTS}" \
|
||||||
-G Ninja
|
-G Ninja
|
||||||
|
|
||||||
ninja; build_status=$?;
|
ninja; build_status=$?;
|
||||||
|
|
||||||
cd ..
|
cd ..
|
||||||
|
|
||||||
shellcheck .ci/*.sh
|
|
||||||
|
|
||||||
# If it compiled succesfully let's deploy.
|
# If it compiled succesfully let's deploy.
|
||||||
# Azure and Cirrus publish PRs as artifacts only.
|
if [ "$build_status" -eq 0 ]; then
|
||||||
{ [ "$CI_HAS_ARTIFACTS" = "true" ];
|
|
||||||
} && SHOULD_DEPLOY="true" || SHOULD_DEPLOY="false"
|
|
||||||
|
|
||||||
if [ "$build_status" -eq 0 ] && [ "$SHOULD_DEPLOY" = "true" ]; then
|
|
||||||
.ci/deploy-linux.sh "aarch64"
|
.ci/deploy-linux.sh "aarch64"
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
#!/bin/sh -ex
|
#!/bin/sh -ex
|
||||||
|
|
||||||
if [ -z "$CIRRUS_CI" ]; then
|
|
||||||
cd rpcs3 || exit 1
|
cd rpcs3 || exit 1
|
||||||
fi
|
|
||||||
|
shellcheck .ci/*.sh
|
||||||
|
|
||||||
git config --global --add safe.directory '*'
|
git config --global --add safe.directory '*'
|
||||||
|
|
||||||
# Pull all the submodules except llvm and opencv
|
# Pull all the submodules except some
|
||||||
# Note: Tried to use git submodule status, but it takes over 20 seconds
|
# Note: Tried to use git submodule status, but it takes over 20 seconds
|
||||||
# shellcheck disable=SC2046
|
# shellcheck disable=SC2046
|
||||||
git submodule -q update --init $(awk '/path/ && !/llvm/ && !/opencv/ { print $3 }' .gitmodules)
|
git submodule -q update --init $(awk '/path/ && !/llvm/ && !/opencv/ && !/libsdl-org/ && !/curl/ && !/zlib/ { print $3 }' .gitmodules)
|
||||||
|
|
||||||
mkdir build && cd build || exit 1
|
mkdir build && cd build || exit 1
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ else
|
||||||
export RANLIB=/usr/bin/llvm-ranlib-"$LLVMVER"
|
export RANLIB=/usr/bin/llvm-ranlib-"$LLVMVER"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
export CFLAGS="$CFLAGS -fuse-ld=${LINKER}"
|
export LINKER_FLAG="-fuse-ld=${LINKER}"
|
||||||
|
|
||||||
cmake .. \
|
cmake .. \
|
||||||
-DCMAKE_INSTALL_PREFIX=/usr \
|
-DCMAKE_INSTALL_PREFIX=/usr \
|
||||||
|
@ -38,6 +38,9 @@ cmake .. \
|
||||||
-DUSE_PRECOMPILED_HEADERS=OFF \
|
-DUSE_PRECOMPILED_HEADERS=OFF \
|
||||||
-DCMAKE_C_FLAGS="$CFLAGS" \
|
-DCMAKE_C_FLAGS="$CFLAGS" \
|
||||||
-DCMAKE_CXX_FLAGS="$CFLAGS" \
|
-DCMAKE_CXX_FLAGS="$CFLAGS" \
|
||||||
|
-DCMAKE_EXE_LINKER_FLAGS="${LINKER_FLAG}" \
|
||||||
|
-DCMAKE_MODULE_LINKER_FLAGS="${LINKER_FLAG}" \
|
||||||
|
-DCMAKE_SHARED_LINKER_FLAGS="${LINKER_FLAG}" \
|
||||||
-DCMAKE_AR="$AR" \
|
-DCMAKE_AR="$AR" \
|
||||||
-DCMAKE_RANLIB="$RANLIB" \
|
-DCMAKE_RANLIB="$RANLIB" \
|
||||||
-DUSE_SYSTEM_CURL=ON \
|
-DUSE_SYSTEM_CURL=ON \
|
||||||
|
@ -49,19 +52,15 @@ cmake .. \
|
||||||
-DOpenGL_GL_PREFERENCE=LEGACY \
|
-DOpenGL_GL_PREFERENCE=LEGACY \
|
||||||
-DLLVM_DIR=/opt/llvm/lib/cmake/llvm \
|
-DLLVM_DIR=/opt/llvm/lib/cmake/llvm \
|
||||||
-DSTATIC_LINK_LLVM=ON \
|
-DSTATIC_LINK_LLVM=ON \
|
||||||
|
-DBUILD_RPCS3_TESTS="${RUN_UNIT_TESTS}" \
|
||||||
|
-DRUN_RPCS3_TESTS="${RUN_UNIT_TESTS}" \
|
||||||
-G Ninja
|
-G Ninja
|
||||||
|
|
||||||
ninja; build_status=$?;
|
ninja; build_status=$?;
|
||||||
|
|
||||||
cd ..
|
cd ..
|
||||||
|
|
||||||
shellcheck .ci/*.sh
|
|
||||||
|
|
||||||
# If it compiled succesfully let's deploy.
|
# If it compiled succesfully let's deploy.
|
||||||
# Azure and Cirrus publish PRs as artifacts only.
|
if [ "$build_status" -eq 0 ]; then
|
||||||
{ [ "$CI_HAS_ARTIFACTS" = "true" ];
|
|
||||||
} && SHOULD_DEPLOY="true" || SHOULD_DEPLOY="false"
|
|
||||||
|
|
||||||
if [ "$build_status" -eq 0 ] && [ "$SHOULD_DEPLOY" = "true" ]; then
|
|
||||||
.ci/deploy-linux.sh "x86_64"
|
.ci/deploy-linux.sh "x86_64"
|
||||||
fi
|
fi
|
||||||
|
|
120
.ci/build-mac-arm64.sh
Normal file → Executable file
120
.ci/build-mac-arm64.sh
Normal file → Executable file
|
@ -1,66 +1,26 @@
|
||||||
#!/bin/sh -ex
|
#!/bin/sh -ex
|
||||||
|
|
||||||
# shellcheck disable=SC2086
|
# shellcheck disable=SC2086
|
||||||
brew_arm64_install_packages() {
|
|
||||||
for pkg in "$@"; do
|
|
||||||
echo "Fetching bottle for $pkg (arm64)..."
|
|
||||||
bottle_path="$("$BREW_ARM64_PATH/bin/brew" --cache --bottle-tag=arm64_ventura "$pkg")"
|
|
||||||
if [ ! -f "$bottle_path" ]; then
|
|
||||||
if ! "$BREW_ARM64_PATH/bin/brew" fetch --force --verbose --debug --bottle-tag=arm64_ventura "$pkg"; then
|
|
||||||
echo "Failed to fetch bottle for $pkg"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
bottle_path="$("$BREW_ARM64_PATH/bin/brew" --cache --bottle-tag=arm64_ventura "$pkg")"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Installing $pkg (arm64)..."
|
|
||||||
"$BREW_ARM64_PATH/bin/brew" install --force --force-bottle --ignore-dependencies "$bottle_path" || true
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
export HOMEBREW_NO_AUTO_UPDATE=1
|
export HOMEBREW_NO_AUTO_UPDATE=1
|
||||||
export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1
|
export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1
|
||||||
|
export HOMEBREW_NO_ENV_HINTS=1
|
||||||
export HOMEBREW_NO_INSTALL_CLEANUP=1
|
export HOMEBREW_NO_INSTALL_CLEANUP=1
|
||||||
|
|
||||||
/usr/local/bin/brew update
|
/opt/homebrew/bin/brew install -f --overwrite --quiet nasm ninja p7zip ccache pipenv gnutls freetype googletest #create-dmg
|
||||||
sudo rm -rf /usr/local/Cellar/curl /usr/local/opt/curl
|
/opt/homebrew/bin/brew install -f --quiet ffmpeg@5
|
||||||
/usr/local/bin/brew install -f --overwrite curl
|
/opt/homebrew/bin/brew install --quiet "llvm@$LLVM_COMPILER_VER" glew cmake sdl3 vulkan-headers coreutils
|
||||||
/usr/local/bin/brew uninstall -f --ignore-dependencies ffmpeg
|
/opt/homebrew/bin/brew link -f --quiet "llvm@$LLVM_COMPILER_VER" ffmpeg@5
|
||||||
/usr/local/bin/brew install -f --build-from-source ffmpeg@5 || true
|
|
||||||
/usr/local/bin/brew install -f --overwrite python || true
|
|
||||||
/usr/local/bin/brew link --overwrite python || true
|
|
||||||
/usr/local/bin/brew install -f --overwrite nasm ninja p7zip ccache pipenv #create-dmg
|
|
||||||
/usr/local/bin/brew link -f curl || true
|
|
||||||
/usr/local/bin/brew install llvm@$LLVM_COMPILER_VER glew cmake sdl2 vulkan-headers coreutils
|
|
||||||
/usr/local/bin/brew link -f llvm@$LLVM_COMPILER_VER ffmpeg@5 || true
|
|
||||||
|
|
||||||
export BREW_ARM64_PATH="/opt/homebrew1"
|
# moltenvk based on commit for 1.3.0 release
|
||||||
sudo mkdir -p "$BREW_ARM64_PATH"
|
wget https://raw.githubusercontent.com/Homebrew/homebrew-core/7255441cbcafabaa8950f67c7ec55ff499dbb2d3/Formula/m/molten-vk.rb
|
||||||
sudo chmod 777 "$BREW_ARM64_PATH"
|
/opt/homebrew/bin/brew install -f --overwrite --formula --quiet ./molten-vk.rb
|
||||||
curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C "$BREW_ARM64_PATH"
|
|
||||||
|
|
||||||
#"$BREW_ARM64_PATH/bin/brew" update
|
|
||||||
# libvorbis requires Homebrew-installed curl, but we can't run it on x64, and we also need the aarch64 libs, so we swap the binary
|
|
||||||
brew_arm64_install_packages curl
|
|
||||||
mv /opt/homebrew1/opt/curl/bin/curl /opt/homebrew1/opt/curl/bin/curl.bak
|
|
||||||
ln -s /usr/local/opt/curl/bin/curl /opt/homebrew1/opt/curl/bin/curl
|
|
||||||
|
|
||||||
brew_arm64_install_packages 0mq aom aribb24 ca-certificates cjson dav1d ffmpeg@5 fontconfig freetype freetype2 gettext glew gmp gnutls lame libbluray libidn2 libnettle libogg libpng librist libsodium libsoxr libtasn libtasn1 libunistring libvmaf libvorbis libvpx libx11 libxau libxcb libxdmcp llvm@$LLVM_COMPILER_VER mbedtls molten-vk nettle opencore-amr openjpeg openssl opus p11-kit pkg-config pkgconfig pzstd rav1e sdl2 snappy speex srt svt-av1 theora vulkan-headers webp x264 x265 xz z3 zeromq zmq zstd
|
|
||||||
"$BREW_ARM64_PATH/bin/brew" link -f ffmpeg@5
|
|
||||||
ln -s /opt/homebrew1/opt/llvm@19/lib/unwind/libunwind.1.dylib /opt/homebrew1/opt/llvm@19/lib/libunwind.1.dylib
|
|
||||||
|
|
||||||
# moltenvk based on commit for 1.2.11 release
|
|
||||||
wget https://raw.githubusercontent.com/Homebrew/homebrew-core/6bfc8950c696d1f952425e8af2a6248603dc0df9/Formula/m/molten-vk.rb
|
|
||||||
/usr/local/bin/brew install -f --overwrite ./molten-vk.rb
|
|
||||||
export CXX=clang++
|
export CXX=clang++
|
||||||
export CC=clang
|
export CC=clang
|
||||||
|
|
||||||
export BREW_PATH;
|
export BREW_PATH;
|
||||||
BREW_PATH="$(brew --prefix)"
|
BREW_PATH="$(brew --prefix)"
|
||||||
export BREW_X64_PATH;
|
export BREW_BIN="/opt/homebrew/bin"
|
||||||
BREW_X64_PATH="$("/usr/local/bin/brew" --prefix)"
|
export BREW_SBIN="/opt/homebrew/sbin"
|
||||||
export BREW_BIN="/usr/local/bin"
|
|
||||||
export BREW_SBIN="/usr/local/sbin"
|
|
||||||
export CMAKE_EXTRA_OPTS='-DLLVM_TARGETS_TO_BUILD=arm64'
|
export CMAKE_EXTRA_OPTS='-DLLVM_TARGETS_TO_BUILD=arm64'
|
||||||
|
|
||||||
export WORKDIR;
|
export WORKDIR;
|
||||||
|
@ -72,51 +32,55 @@ if [ ! -d "/tmp/Qt/$QT_VER" ]; then
|
||||||
git clone https://github.com/engnr/qt-downloader.git
|
git clone https://github.com/engnr/qt-downloader.git
|
||||||
cd qt-downloader
|
cd qt-downloader
|
||||||
git checkout f52efee0f18668c6d6de2dec0234b8c4bc54c597
|
git checkout f52efee0f18668c6d6de2dec0234b8c4bc54c597
|
||||||
# nested Qt 6.8.2 URL workaround
|
# nested Qt 6.9.1 URL workaround
|
||||||
# sed -i '' "s/'qt{0}_{0}{1}{2}'.format(major, minor, patch)]))/'qt{0}_{0}{1}{2}'.format(major, minor, patch), 'qt{0}_{0}{1}{2}'.format(major, minor, patch)]))/g" qt-downloader
|
# sed -i '' "s/'qt{0}_{0}{1}{2}'.format(major, minor, patch)]))/'qt{0}_{0}{1}{2}'.format(major, minor, patch), 'qt{0}_{0}{1}{2}'.format(major, minor, patch)]))/g" qt-downloader
|
||||||
# sed -i '' "s/'{}\/{}\/qt{}_{}\/'/'{0}\/{1}\/qt{2}_{3}\/qt{2}_{3}\/'/g" qt-downloader
|
# sed -i '' "s/'{}\/{}\/qt{}_{}\/'/'{0}\/{1}\/qt{2}_{3}\/qt{2}_{3}\/'/g" qt-downloader
|
||||||
|
# archived Qt 6.7.3 URL workaround
|
||||||
|
sed -i '' "s/official_releases/archive/g" qt-downloader
|
||||||
cd "/tmp/Qt"
|
cd "/tmp/Qt"
|
||||||
"$BREW_X64_PATH/bin/pipenv" run pip3 install py7zr requests semantic_version lxml
|
arch -arm64 "$BREW_PATH/bin/pipenv" run pip3 uninstall py7zr requests semantic_version lxml
|
||||||
|
arch -arm64 "$BREW_PATH/bin/pipenv" run pip3 install py7zr requests semantic_version lxml --no-cache
|
||||||
mkdir -p "$QT_VER/macos" ; ln -s "macos" "$QT_VER/clang_64"
|
mkdir -p "$QT_VER/macos" ; ln -s "macos" "$QT_VER/clang_64"
|
||||||
# sed -i '' 's/args\.version \/ derive_toolchain_dir(args) \/ //g' "$WORKDIR/qt-downloader/qt-downloader" # Qt 6.8.2 workaround
|
# sed -i '' 's/args\.version \/ derive_toolchain_dir(args) \/ //g' "$WORKDIR/qt-downloader/qt-downloader" # Qt 6.9.1 workaround
|
||||||
"$BREW_X64_PATH/bin/pipenv" run "$WORKDIR/qt-downloader/qt-downloader" macos desktop "$QT_VER" clang_64 --opensource --addons qtmultimedia qtimageformats # -o "$QT_VER/clang_64"
|
arch -arm64 "$BREW_PATH/bin/pipenv" run "$WORKDIR/qt-downloader/qt-downloader" macos desktop "$QT_VER" clang_64 --opensource --addons qtmultimedia qtimageformats # -o "$QT_VER/clang_64"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cd "$WORKDIR"
|
cd "$WORKDIR"
|
||||||
ditto "/tmp/Qt/$QT_VER" "qt-downloader/$QT_VER"
|
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 Qt6_DIR="$WORKDIR/qt-downloader/$QT_VER/clang_64/lib/cmake/Qt$QT_VER_MAIN"
|
||||||
export SDL2_DIR="$BREW_ARM64_PATH/opt/sdl2/lib/cmake/SDL2"
|
export SDL3_DIR="$BREW_PATH/opt/sdl3/lib/cmake/SDL3"
|
||||||
|
|
||||||
export PATH="$BREW_X64_PATH/opt/llvm@$LLVM_COMPILER_VER/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 PATH="$BREW_PATH/opt/llvm@$LLVM_COMPILER_VER/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_ARM64_PATH/lib $BREW_ARM64_PATH/opt/ffmpeg@5/lib/libavcodec.dylib $BREW_ARM64_PATH/opt/ffmpeg@5/lib/libavformat.dylib $BREW_ARM64_PATH/opt/ffmpeg@5/lib/libavutil.dylib $BREW_ARM64_PATH/opt/ffmpeg@5/lib/libswscale.dylib $BREW_ARM64_PATH/opt/ffmpeg@5/lib/libswresample.dylib $BREW_ARM64_PATH/opt/llvm@$LLVM_COMPILER_VER/lib/c++/libc++.1.dylib $BREW_ARM64_PATH/lib/libSDL2.dylib $BREW_ARM64_PATH/lib/libGLEW.dylib $BREW_ARM64_PATH/opt/llvm@$LLVM_COMPILER_VER/lib/libunwind.1.dylib -Wl,-rpath,$BREW_ARM64_PATH/lib"
|
export LDFLAGS="-L$BREW_PATH/lib $BREW_PATH/opt/ffmpeg@5/lib/libavcodec.dylib $BREW_PATH/opt/ffmpeg@5/lib/libavformat.dylib $BREW_PATH/opt/ffmpeg@5/lib/libavutil.dylib $BREW_PATH/opt/ffmpeg@5/lib/libswscale.dylib $BREW_PATH/opt/ffmpeg@5/lib/libswresample.dylib $BREW_PATH/opt/llvm@$LLVM_COMPILER_VER/lib/c++/libc++.1.dylib $BREW_PATH/lib/libSDL3.dylib $BREW_PATH/lib/libGLEW.dylib $BREW_PATH/opt/llvm@$LLVM_COMPILER_VER/lib/unwind/libunwind.1.dylib -Wl,-rpath,$BREW_PATH/lib"
|
||||||
export CPPFLAGS="-I$BREW_ARM64_PATH/include -I$BREW_X64_PATH/include -no-pie -D__MAC_OS_X_VERSION_MIN_REQUIRED=130000"
|
export CPPFLAGS="-I$BREW_PATH/include -I$BREW_PATH/include -no-pie -D__MAC_OS_X_VERSION_MIN_REQUIRED=140000"
|
||||||
export CFLAGS="-D__MAC_OS_X_VERSION_MIN_REQUIRED=130000"
|
export CFLAGS="-D__MAC_OS_X_VERSION_MIN_REQUIRED=140000"
|
||||||
export LIBRARY_PATH="$BREW_ARM64_PATH/lib"
|
export LIBRARY_PATH="$BREW_PATH/lib"
|
||||||
export LD_LIBRARY_PATH="$BREW_ARM64_PATH/lib"
|
export LD_LIBRARY_PATH="$BREW_PATH/lib"
|
||||||
|
|
||||||
export VULKAN_SDK
|
export VULKAN_SDK
|
||||||
VULKAN_SDK="$BREW_ARM64_PATH/opt/molten-vk"
|
VULKAN_SDK="$BREW_PATH/opt/molten-vk"
|
||||||
ln -s "$VULKAN_SDK/lib/libMoltenVK.dylib" "$VULKAN_SDK/lib/libvulkan.dylib" || true
|
ln -s "$VULKAN_SDK/lib/libMoltenVK.dylib" "$VULKAN_SDK/lib/libvulkan.dylib" || true
|
||||||
export VK_ICD_FILENAMES="$VULKAN_SDK/share/vulkan/icd.d/MoltenVK_icd.json"
|
export VK_ICD_FILENAMES="$VULKAN_SDK/share/vulkan/icd.d/MoltenVK_icd.json"
|
||||||
|
|
||||||
export LLVM_DIR
|
export LLVM_DIR
|
||||||
LLVM_DIR="$BREW_ARM64_PATH/opt/llvm@$LLVM_COMPILER_VER"
|
LLVM_DIR="$BREW_PATH/opt/llvm@$LLVM_COMPILER_VER"
|
||||||
# exclude ffmpeg, LLVM, and sdl from submodule update
|
# exclude ffmpeg, LLVM, opencv, and sdl from submodule update
|
||||||
# shellcheck disable=SC2046
|
# shellcheck disable=SC2046
|
||||||
git submodule -q update --init --depth=1 --jobs=8 $(awk '/path/ && !/ffmpeg/ && !/llvm/ && !/SDL/ { print $3 }' .gitmodules)
|
git submodule -q update --init --depth=1 --jobs=8 $(awk '/path/ && !/ffmpeg/ && !/llvm/ && !/opencv/ && !/SDL/ { print $3 }' .gitmodules)
|
||||||
|
|
||||||
# 3rdparty fixes
|
# 3rdparty fixes
|
||||||
sed -i '' "s/extern const double NSAppKitVersionNumber;/const double NSAppKitVersionNumber = 1343;/g" 3rdparty/hidapi/hidapi/mac/hid.c
|
sed -i '' "s/extern const double NSAppKitVersionNumber;/const double NSAppKitVersionNumber = 1343;/g" 3rdparty/hidapi/hidapi/mac/hid.c
|
||||||
|
|
||||||
rm -rf build
|
|
||||||
mkdir build && cd build || exit 1
|
mkdir build && cd build || exit 1
|
||||||
|
|
||||||
export MACOSX_DEPLOYMENT_TARGET=13.0
|
export MACOSX_DEPLOYMENT_TARGET=14.0
|
||||||
|
|
||||||
"$BREW_X64_PATH/bin/cmake" .. \
|
"$BREW_PATH/bin/cmake" .. \
|
||||||
|
-DBUILD_RPCS3_TESTS="${RUN_UNIT_TESTS}" \
|
||||||
|
-DRUN_RPCS3_TESTS="${RUN_UNIT_TESTS}" \
|
||||||
-DUSE_SDL=ON \
|
-DUSE_SDL=ON \
|
||||||
-DUSE_DISCORD_RPC=OFF \
|
-DUSE_DISCORD_RPC=ON \
|
||||||
-DUSE_VULKAN=ON \
|
-DUSE_VULKAN=ON \
|
||||||
-DUSE_ALSA=OFF \
|
-DUSE_ALSA=OFF \
|
||||||
-DUSE_PULSE=OFF \
|
-DUSE_PULSE=OFF \
|
||||||
|
@ -137,23 +101,21 @@ export MACOSX_DEPLOYMENT_TARGET=13.0
|
||||||
-DUSE_SYSTEM_FAUDIO=OFF \
|
-DUSE_SYSTEM_FAUDIO=OFF \
|
||||||
-DUSE_SYSTEM_SDL=ON \
|
-DUSE_SYSTEM_SDL=ON \
|
||||||
-DUSE_SYSTEM_OPENCV=ON \
|
-DUSE_SYSTEM_OPENCV=ON \
|
||||||
$CMAKE_EXTRA_OPTS \
|
"$CMAKE_EXTRA_OPTS" \
|
||||||
-DLLVM_TARGET_ARCH=arm64 \
|
-DLLVM_TARGET_ARCH=arm64 \
|
||||||
-DCMAKE_OSX_ARCHITECTURES=arm64 \
|
-DCMAKE_OSX_ARCHITECTURES=arm64 \
|
||||||
-DCMAKE_IGNORE_PATH="$BREW_X64_PATH/lib" \
|
-DCMAKE_IGNORE_PATH="$BREW_PATH/lib" \
|
||||||
-DCMAKE_IGNORE_PREFIX_PATH=/usr/local/opt \
|
-DCMAKE_IGNORE_PREFIX_PATH=/opt/homebrew/opt \
|
||||||
-DCMAKE_SYSTEM_PROCESSOR=arm64 \
|
-DCMAKE_CXX_FLAGS="-D__MAC_OS_X_VERSION_MIN_REQUIRED=140000" \
|
||||||
-DCMAKE_TOOLCHAIN_FILE=buildfiles/cmake/TCDarwinARM64.cmake \
|
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
|
||||||
-DCMAKE_CXX_FLAGS="-D__MAC_OS_X_VERSION_MIN_REQUIRED=130000" \
|
-DCMAKE_OSX_SYSROOT="$(xcrun --sdk macosx --show-sdk-path)" \
|
||||||
-G Ninja
|
-G Ninja
|
||||||
|
|
||||||
"$BREW_PATH/bin/ninja"; build_status=$?;
|
"$BREW_PATH/bin/ninja"; build_status=$?;
|
||||||
|
|
||||||
cd ..
|
cd ..
|
||||||
|
|
||||||
{ [ "$CI_HAS_ARTIFACTS" = "true" ];
|
# If it compiled succesfully let's deploy.
|
||||||
} && SHOULD_DEPLOY="true" || SHOULD_DEPLOY="false"
|
if [ "$build_status" -eq 0 ]; then
|
||||||
|
|
||||||
if [ "$build_status" -eq 0 ] && [ "$SHOULD_DEPLOY" = "true" ]; then
|
|
||||||
.ci/deploy-mac-arm64.sh
|
.ci/deploy-mac-arm64.sh
|
||||||
fi
|
fi
|
||||||
|
|
60
.ci/build-mac.sh
Normal file → Executable file
60
.ci/build-mac.sh
Normal file → Executable file
|
@ -3,27 +3,24 @@
|
||||||
# shellcheck disable=SC2086
|
# shellcheck disable=SC2086
|
||||||
export HOMEBREW_NO_AUTO_UPDATE=1
|
export HOMEBREW_NO_AUTO_UPDATE=1
|
||||||
export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1
|
export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1
|
||||||
brew unlink certifi
|
export HOMEBREW_NO_ENV_HINTS=1
|
||||||
brew install -f --overwrite nasm ninja p7zip ccache pipenv #create-dmg
|
export HOMEBREW_NO_INSTALL_CLEANUP=1
|
||||||
|
|
||||||
#/usr/sbin/softwareupdate --install-rosetta --agree-to-license
|
#/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 /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 update
|
||||||
arch -x86_64 /usr/local/bin/brew install -f --overwrite python || arch -x86_64 /usr/local/bin/brew link --overwrite python
|
arch -x86_64 /usr/local/bin/brew install -f --overwrite --quiet python || arch -x86_64 /usr/local/bin/brew link --overwrite python
|
||||||
arch -x86_64 /usr/local/bin/brew uninstall -f --ignore-dependencies ffmpeg
|
arch -x86_64 /usr/local/bin/brew install -f --overwrite --quiet nasm ninja p7zip ccache pipenv gnutls freetype #create-dmg
|
||||||
arch -x86_64 /usr/local/bin/brew install -f --build-from-source ffmpeg@5
|
arch -x86_64 /usr/local/bin/brew install -f --quiet ffmpeg@5
|
||||||
arch -x86_64 /usr/local/bin/brew reinstall -f --build-from-source gnutls freetype
|
arch -x86_64 /usr/local/bin/brew install --quiet "llvm@$LLVM_COMPILER_VER" glew cmake sdl3 vulkan-headers coreutils
|
||||||
arch -x86_64 /usr/local/bin/brew install llvm@$LLVM_COMPILER_VER glew cmake sdl2 vulkan-headers coreutils
|
arch -x86_64 /usr/local/bin/brew link -f --quiet "llvm@$LLVM_COMPILER_VER" ffmpeg@5
|
||||||
arch -x86_64 /usr/local/bin/brew link -f llvm@$LLVM_COMPILER_VER ffmpeg@5
|
|
||||||
|
|
||||||
# moltenvk based on commit for 1.2.11 release
|
# moltenvk based on commit for 1.3.0 release
|
||||||
wget https://raw.githubusercontent.com/Homebrew/homebrew-core/6bfc8950c696d1f952425e8af2a6248603dc0df9/Formula/m/molten-vk.rb
|
wget https://raw.githubusercontent.com/Homebrew/homebrew-core/7255441cbcafabaa8950f67c7ec55ff499dbb2d3/Formula/m/molten-vk.rb
|
||||||
arch -x86_64 /usr/local/bin/brew install -f --overwrite ./molten-vk.rb
|
arch -x86_64 /usr/local/bin/brew install -f --overwrite --formula --quiet ./molten-vk.rb
|
||||||
export CXX=clang++
|
export CXX=clang++
|
||||||
export CC=clang
|
export CC=clang
|
||||||
|
|
||||||
export BREW_PATH;
|
|
||||||
BREW_PATH="$(brew --prefix)"
|
|
||||||
export BREW_X64_PATH;
|
export BREW_X64_PATH;
|
||||||
BREW_X64_PATH="$("/usr/local/bin/brew" --prefix)"
|
BREW_X64_PATH="$("/usr/local/bin/brew" --prefix)"
|
||||||
export BREW_BIN="/usr/local/bin"
|
export BREW_BIN="/usr/local/bin"
|
||||||
|
@ -39,26 +36,28 @@ if [ ! -d "/tmp/Qt/$QT_VER" ]; then
|
||||||
git clone https://github.com/engnr/qt-downloader.git
|
git clone https://github.com/engnr/qt-downloader.git
|
||||||
cd qt-downloader
|
cd qt-downloader
|
||||||
git checkout f52efee0f18668c6d6de2dec0234b8c4bc54c597
|
git checkout f52efee0f18668c6d6de2dec0234b8c4bc54c597
|
||||||
# nested Qt 6.8.2 URL workaround
|
# nested Qt 6.9.1 URL workaround
|
||||||
# sed -i '' "s/'qt{0}_{0}{1}{2}'.format(major, minor, patch)]))/'qt{0}_{0}{1}{2}'.format(major, minor, patch), 'qt{0}_{0}{1}{2}'.format(major, minor, patch)]))/g" qt-downloader
|
# sed -i '' "s/'qt{0}_{0}{1}{2}'.format(major, minor, patch)]))/'qt{0}_{0}{1}{2}'.format(major, minor, patch), 'qt{0}_{0}{1}{2}'.format(major, minor, patch)]))/g" qt-downloader
|
||||||
# sed -i '' "s/'{}\/{}\/qt{}_{}\/'/'{0}\/{1}\/qt{2}_{3}\/qt{2}_{3}\/'/g" qt-downloader
|
# sed -i '' "s/'{}\/{}\/qt{}_{}\/'/'{0}\/{1}\/qt{2}_{3}\/qt{2}_{3}\/'/g" qt-downloader
|
||||||
|
# archived Qt 6.7.3 URL workaround
|
||||||
|
sed -i '' "s/official_releases/archive/g" qt-downloader
|
||||||
cd "/tmp/Qt"
|
cd "/tmp/Qt"
|
||||||
"$BREW_X64_PATH/bin/pipenv" run pip3 install py7zr requests semantic_version lxml
|
arch -x86_64 "$BREW_X64_PATH/bin/pipenv" --python "$BREW_X64_PATH/bin/python3" run pip3 install py7zr requests semantic_version lxml
|
||||||
mkdir -p "$QT_VER/macos" ; ln -s "macos" "$QT_VER/clang_64"
|
mkdir -p "$QT_VER/macos" ; ln -s "macos" "$QT_VER/clang_64"
|
||||||
# sed -i '' 's/args\.version \/ derive_toolchain_dir(args) \/ //g' "$WORKDIR/qt-downloader/qt-downloader" # Qt 6.8.2 workaround
|
# sed -i '' 's/args\.version \/ derive_toolchain_dir(args) \/ //g' "$WORKDIR/qt-downloader/qt-downloader" # Qt 6.9.1 workaround
|
||||||
"$BREW_X64_PATH/bin/pipenv" run "$WORKDIR/qt-downloader/qt-downloader" macos desktop "$QT_VER" clang_64 --opensource --addons qtmultimedia qtimageformats # -o "$QT_VER/clang_64"
|
arch -x86_64 "$BREW_X64_PATH/bin/pipenv" --python "$BREW_X64_PATH/bin/python3" run "$WORKDIR/qt-downloader/qt-downloader" macos desktop "$QT_VER" clang_64 --opensource --addons qtmultimedia qtimageformats # -o "$QT_VER/clang_64"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cd "$WORKDIR"
|
cd "$WORKDIR"
|
||||||
ditto "/tmp/Qt/$QT_VER" "qt-downloader/$QT_VER"
|
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 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 SDL3_DIR="$BREW_X64_PATH/opt/sdl3/lib/cmake/SDL3"
|
||||||
|
|
||||||
export PATH="$BREW_X64_PATH/opt/llvm@$LLVM_COMPILER_VER/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 PATH="$BREW_X64_PATH/opt/llvm@$LLVM_COMPILER_VER/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 LDFLAGS="-L$BREW_X64_PATH/lib -Wl,-rpath,$BREW_X64_PATH/lib"
|
||||||
export CPPFLAGS="-I$BREW_X64_PATH/include -msse -msse2 -mcx16 -no-pie -D__MAC_OS_X_VERSION_MIN_REQUIRED=130000"
|
export CPPFLAGS="-I$BREW_X64_PATH/include -msse -msse2 -mcx16 -no-pie -D__MAC_OS_X_VERSION_MIN_REQUIRED=140000"
|
||||||
export CFLAGS="-D__MAC_OS_X_VERSION_MIN_REQUIRED=130000"
|
export CFLAGS="-D__MAC_OS_X_VERSION_MIN_REQUIRED=140000"
|
||||||
export LIBRARY_PATH="$BREW_X64_PATH/lib"
|
export LIBRARY_PATH="$BREW_X64_PATH/lib"
|
||||||
export LD_LIBRARY_PATH="$BREW_X64_PATH/lib"
|
export LD_LIBRARY_PATH="$BREW_X64_PATH/lib"
|
||||||
|
|
||||||
|
@ -78,9 +77,11 @@ sed -i '' "s/extern const double NSAppKitVersionNumber;/const double NSAppKitVer
|
||||||
|
|
||||||
mkdir build && cd build || exit 1
|
mkdir build && cd build || exit 1
|
||||||
|
|
||||||
export MACOSX_DEPLOYMENT_TARGET=13.0
|
export MACOSX_DEPLOYMENT_TARGET=14.0
|
||||||
|
|
||||||
"$BREW_X64_PATH/bin/cmake" .. \
|
"$BREW_X64_PATH/bin/cmake" .. \
|
||||||
|
-DBUILD_RPCS3_TESTS=OFF \
|
||||||
|
-DRUN_RPCS3_TESTS=OFF \
|
||||||
-DUSE_SDL=ON \
|
-DUSE_SDL=ON \
|
||||||
-DUSE_DISCORD_RPC=ON \
|
-DUSE_DISCORD_RPC=ON \
|
||||||
-DUSE_VULKAN=ON \
|
-DUSE_VULKAN=ON \
|
||||||
|
@ -103,20 +104,21 @@ export MACOSX_DEPLOYMENT_TARGET=13.0
|
||||||
-DUSE_SYSTEM_FAUDIO=OFF \
|
-DUSE_SYSTEM_FAUDIO=OFF \
|
||||||
-DUSE_SYSTEM_SDL=ON \
|
-DUSE_SYSTEM_SDL=ON \
|
||||||
-DUSE_SYSTEM_OPENCV=ON \
|
-DUSE_SYSTEM_OPENCV=ON \
|
||||||
$CMAKE_EXTRA_OPTS \
|
"$CMAKE_EXTRA_OPTS" \
|
||||||
-DLLVM_TARGET_ARCH=X86_64 \
|
-DLLVM_TARGET_ARCH=X86_64 \
|
||||||
-DCMAKE_OSX_ARCHITECTURES=x86_64 \
|
-DCMAKE_OSX_ARCHITECTURES=x86_64 \
|
||||||
-DCMAKE_IGNORE_PATH="$BREW_PATH/lib" \
|
-DCMAKE_IGNORE_PATH="$BREW_X64_PATH/lib" \
|
||||||
-DCMAKE_CXX_FLAGS="-D__MAC_OS_X_VERSION_MIN_REQUIRED=130000" \
|
-DCMAKE_IGNORE_PREFIX_PATH=/usr/local/opt \
|
||||||
|
-DCMAKE_CXX_FLAGS="-D__MAC_OS_X_VERSION_MIN_REQUIRED=140000" \
|
||||||
|
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
|
||||||
|
-DCMAKE_OSX_SYSROOT="$(xcrun --sdk macosx --show-sdk-path)" \
|
||||||
-G Ninja
|
-G Ninja
|
||||||
|
|
||||||
"$BREW_PATH/bin/ninja"; build_status=$?;
|
"$BREW_X64_PATH/bin/ninja"; build_status=$?;
|
||||||
|
|
||||||
cd ..
|
cd ..
|
||||||
|
|
||||||
{ [ "$CI_HAS_ARTIFACTS" = "true" ];
|
# If it compiled succesfully let's deploy.
|
||||||
} && SHOULD_DEPLOY="true" || SHOULD_DEPLOY="false"
|
if [ "$build_status" -eq 0 ]; then
|
||||||
|
|
||||||
if [ "$build_status" -eq 0 ] && [ "$SHOULD_DEPLOY" = "true" ]; then
|
|
||||||
.ci/deploy-mac.sh
|
.ci/deploy-mac.sh
|
||||||
fi
|
fi
|
||||||
|
|
61
.ci/build-windows-clang.sh
Normal file
61
.ci/build-windows-clang.sh
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
#!/bin/sh -ex
|
||||||
|
|
||||||
|
git config --global --add safe.directory '*'
|
||||||
|
|
||||||
|
# Pull all the submodules except some
|
||||||
|
# Note: Tried to use git submodule status, but it takes over 20 seconds
|
||||||
|
# shellcheck disable=SC2046
|
||||||
|
git submodule -q update --init $(awk '/path/ && !/llvm/ && !/opencv/ && !/ffmpeg/ && !/curl/ && !/FAudio/ && !/zlib/ { print $3 }' .gitmodules)
|
||||||
|
|
||||||
|
mkdir build && cd build || exit 1
|
||||||
|
|
||||||
|
export CC="clang"
|
||||||
|
export CXX="clang++"
|
||||||
|
export LINKER=lld
|
||||||
|
export LINKER_FLAG="-fuse-ld=${LINKER}"
|
||||||
|
|
||||||
|
if [ -n "$LLVMVER" ]; then
|
||||||
|
export AR="llvm-ar-$LLVMVER"
|
||||||
|
export RANLIB="llvm-ranlib-$LLVMVER"
|
||||||
|
else
|
||||||
|
export AR="llvm-ar"
|
||||||
|
export RANLIB="llvm-ranlib"
|
||||||
|
fi
|
||||||
|
|
||||||
|
cmake .. \
|
||||||
|
-DCMAKE_PREFIX_PATH=/clang64 \
|
||||||
|
-DCMAKE_INSTALL_PREFIX=/usr \
|
||||||
|
-DUSE_NATIVE_INSTRUCTIONS=OFF \
|
||||||
|
-DUSE_PRECOMPILED_HEADERS=OFF \
|
||||||
|
-DCMAKE_C_FLAGS="$CFLAGS" \
|
||||||
|
-DCMAKE_CXX_FLAGS="$CFLAGS" \
|
||||||
|
-DCMAKE_EXE_LINKER_FLAGS="${LINKER_FLAG}" \
|
||||||
|
-DCMAKE_MODULE_LINKER_FLAGS="${LINKER_FLAG}" \
|
||||||
|
-DCMAKE_SHARED_LINKER_FLAGS="${LINKER_FLAG}" \
|
||||||
|
-DCMAKE_AR="$AR" \
|
||||||
|
-DCMAKE_RANLIB="$RANLIB" \
|
||||||
|
-DUSE_SYSTEM_CURL=ON \
|
||||||
|
-DUSE_FAUDIO=OFF \
|
||||||
|
-DUSE_SDL=ON \
|
||||||
|
-DUSE_SYSTEM_SDL=OFF \
|
||||||
|
-DUSE_SYSTEM_FFMPEG=ON \
|
||||||
|
-DUSE_SYSTEM_OPENCV=ON \
|
||||||
|
-DUSE_SYSTEM_OPENAL=OFF \
|
||||||
|
-DUSE_DISCORD_RPC=ON \
|
||||||
|
-DOpenGL_GL_PREFERENCE=LEGACY \
|
||||||
|
-DWITH_LLVM=ON \
|
||||||
|
-DLLVM_DIR=/clang64/lib/cmake/llvm \
|
||||||
|
-DVulkan_LIBRARY=/clang64/lib/libvulkan-1.dll.a \
|
||||||
|
-DSTATIC_LINK_LLVM=ON \
|
||||||
|
-DBUILD_RPCS3_TESTS=OFF \
|
||||||
|
-DRUN_RPCS3_TESTS=OFF \
|
||||||
|
-G Ninja
|
||||||
|
|
||||||
|
ninja; build_status=$?;
|
||||||
|
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
# If it compiled succesfully let's deploy.
|
||||||
|
if [ "$build_status" -eq 0 ]; then
|
||||||
|
.ci/deploy-windows-clang.sh "x86_64"
|
||||||
|
fi
|
|
@ -25,11 +25,17 @@ if [ "$DEPLOY_APPIMAGE" = "true" ]; then
|
||||||
# Remove libvulkan because it causes issues with gamescope
|
# Remove libvulkan because it causes issues with gamescope
|
||||||
rm -f ./AppDir/usr/lib/libvulkan.so*
|
rm -f ./AppDir/usr/lib/libvulkan.so*
|
||||||
|
|
||||||
|
# Remove unused Qt6 libraries
|
||||||
|
rm -f ./AppDir/usr/lib/libQt6VirtualKeyboard.so*
|
||||||
|
rm -f ./AppDir/usr/plugins/platforminputcontexts/libqtvirtualkeyboardplugin.so*
|
||||||
|
|
||||||
# Remove git directory containing local commit history file
|
# Remove git directory containing local commit history file
|
||||||
rm -rf ./AppDir/usr/share/rpcs3/git
|
rm -rf ./AppDir/usr/share/rpcs3/git
|
||||||
|
|
||||||
linuxdeploy --appimage-extract
|
curl -fsSLo /uruntime "https://github.com/VHSgunzo/uruntime/releases/download/v0.3.4/uruntime-appimage-dwarfs-$CPU_ARCH"
|
||||||
./squashfs-root/plugins/linuxdeploy-plugin-appimage/usr/bin/appimagetool AppDir -g
|
chmod +x /uruntime
|
||||||
|
/uruntime --appimage-mkdwarfs -f --set-owner 0 --set-group 0 --no-history --no-create-timestamp \
|
||||||
|
--compression zstd:level=22 -S26 -B32 --header /uruntime -i AppDir -o RPCS3.AppImage
|
||||||
|
|
||||||
APPIMAGE_SUFFIX="linux_${CPU_ARCH}"
|
APPIMAGE_SUFFIX="linux_${CPU_ARCH}"
|
||||||
if [ "$CPU_ARCH" = "x86_64" ]; then
|
if [ "$CPU_ARCH" = "x86_64" ]; then
|
||||||
|
|
20
.ci/deploy-llvm.sh
Normal file
20
.ci/deploy-llvm.sh
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
#!/bin/sh -ex
|
||||||
|
|
||||||
|
# First let's print some info about our caches
|
||||||
|
"$(cygpath -u "$CCACHE_BIN_DIR")"/ccache.exe --show-stats -v
|
||||||
|
|
||||||
|
# BUILD_blablabla is Azure specific, so we wrap it for portability
|
||||||
|
ARTIFACT_DIR="$BUILD_ARTIFACTSTAGINGDIRECTORY"
|
||||||
|
BUILD="llvmlibs_mt.7z"
|
||||||
|
|
||||||
|
# Package artifacts
|
||||||
|
7z a -m0=LZMA2 -mx9 "$BUILD" ./build/lib/Release-x64/llvm_build
|
||||||
|
|
||||||
|
# Generate sha256 hashes
|
||||||
|
# Write to file for GitHub releases
|
||||||
|
sha256sum "$BUILD" | awk '{ print $1 }' | tee "$BUILD.sha256"
|
||||||
|
echo "$(cat "$BUILD.sha256");$(stat -c %s "$BUILD")B" > GitHubReleaseMessage.txt
|
||||||
|
|
||||||
|
# Move files to publishing directory
|
||||||
|
cp -- "$BUILD" "$ARTIFACT_DIR"
|
||||||
|
cp -- "$BUILD.sha256" "$ARTIFACT_DIR"
|
14
.ci/deploy-mac-arm64.sh
Normal file → Executable file
14
.ci/deploy-mac-arm64.sh
Normal file → Executable file
|
@ -16,9 +16,9 @@ echo "AVVER=$AVVER" >> ../.ci/ci-vars.env
|
||||||
cd bin
|
cd bin
|
||||||
mkdir "rpcs3.app/Contents/lib/" || true
|
mkdir "rpcs3.app/Contents/lib/" || true
|
||||||
|
|
||||||
cp "$(realpath /opt/homebrew1/opt/llvm@$LLVM_COMPILER_VER/lib/c++/libc++abi.1.0.dylib)" "rpcs3.app/Contents/Frameworks/libc++abi.1.dylib"
|
cp "$(realpath /opt/homebrew/opt/llvm@$LLVM_COMPILER_VER/lib/c++/libc++abi.1.0.dylib)" "rpcs3.app/Contents/Frameworks/libc++abi.1.dylib"
|
||||||
cp "$(realpath /opt/homebrew1/lib/libsharpyuv.0.dylib)" "rpcs3.app/Contents/lib/libsharpyuv.0.dylib"
|
cp "$(realpath /opt/homebrew/lib/libsharpyuv.0.dylib)" "rpcs3.app/Contents/lib/libsharpyuv.0.dylib"
|
||||||
cp "$(realpath /opt/homebrew1/lib/libintl.8.dylib)" "rpcs3.app/Contents/lib/libintl.8.dylib"
|
cp "$(realpath /opt/homebrew/lib/libintl.8.dylib)" "rpcs3.app/Contents/lib/libintl.8.dylib"
|
||||||
|
|
||||||
rm -rf "rpcs3.app/Contents/Frameworks/QtPdf.framework" \
|
rm -rf "rpcs3.app/Contents/Frameworks/QtPdf.framework" \
|
||||||
"rpcs3.app/Contents/Frameworks/QtQml.framework" \
|
"rpcs3.app/Contents/Frameworks/QtQml.framework" \
|
||||||
|
@ -33,11 +33,9 @@ rm -rf "rpcs3.app/Contents/Frameworks/QtPdf.framework" \
|
||||||
|
|
||||||
# Hack
|
# Hack
|
||||||
install_name_tool \
|
install_name_tool \
|
||||||
-delete_rpath /opt/homebrew1/lib \
|
|
||||||
-delete_rpath /opt/homebrew/lib \
|
-delete_rpath /opt/homebrew/lib \
|
||||||
-delete_rpath /opt/homebrew1/opt/llvm@$LLVM_COMPILER_VER/lib \
|
-delete_rpath /opt/homebrew/opt/llvm@$LLVM_COMPILER_VER/lib RPCS3.app/Contents/MacOS/rpcs3
|
||||||
-delete_rpath /usr/local/lib RPCS3.app/Contents/MacOS/rpcs3
|
#-delete_rpath /opt/homebrew1/Cellar/sdl3/3.2.8/lib
|
||||||
#-delete_rpath /opt/homebrew1/Cellar/sdl2/2.30.7/lib
|
|
||||||
|
|
||||||
# Need to do this rename hack due to case insensitive filesystem
|
# Need to do this rename hack due to case insensitive filesystem
|
||||||
mv rpcs3.app RPCS3_.app
|
mv rpcs3.app RPCS3_.app
|
||||||
|
@ -67,7 +65,7 @@ echo "IconIndex=0" >> Quickstart.url
|
||||||
#SHA256SUM=$(shasum -a 256 "$DMG_FILEPATH" | awk '{ print $1 }')
|
#SHA256SUM=$(shasum -a 256 "$DMG_FILEPATH" | awk '{ print $1 }')
|
||||||
|
|
||||||
ARCHIVE_FILEPATH="$BUILD_ARTIFACTSTAGINGDIRECTORY/rpcs3-v${COMM_TAG}-${COMM_COUNT}-${COMM_HASH}_macos_arm64.7z"
|
ARCHIVE_FILEPATH="$BUILD_ARTIFACTSTAGINGDIRECTORY/rpcs3-v${COMM_TAG}-${COMM_COUNT}-${COMM_HASH}_macos_arm64.7z"
|
||||||
"$BREW_X64_PATH/bin/7z" a -mx9 "$ARCHIVE_FILEPATH" RPCS3.app Quickstart.url
|
"$BREW_PATH/bin/7z" a -mx9 "$ARCHIVE_FILEPATH" RPCS3.app Quickstart.url
|
||||||
FILESIZE=$(stat -f %z "$ARCHIVE_FILEPATH")
|
FILESIZE=$(stat -f %z "$ARCHIVE_FILEPATH")
|
||||||
SHA256SUM=$(shasum -a 256 "$ARCHIVE_FILEPATH" | awk '{ print $1 }')
|
SHA256SUM=$(shasum -a 256 "$ARCHIVE_FILEPATH" | awk '{ print $1 }')
|
||||||
|
|
||||||
|
|
2
.ci/deploy-mac.sh
Normal file → Executable file
2
.ci/deploy-mac.sh
Normal file → Executable file
|
@ -39,7 +39,7 @@ mv RPCS3_.app RPCS3.app
|
||||||
install_name_tool \
|
install_name_tool \
|
||||||
-delete_rpath /usr/local/lib \
|
-delete_rpath /usr/local/lib \
|
||||||
-delete_rpath /usr/local/opt/llvm@$LLVM_COMPILER_VER/lib RPCS3.app/Contents/MacOS/rpcs3
|
-delete_rpath /usr/local/opt/llvm@$LLVM_COMPILER_VER/lib RPCS3.app/Contents/MacOS/rpcs3
|
||||||
#-delete_rpath /usr/local/Cellar/sdl2/2.30.3/lib
|
#-delete_rpath /usr/local/Cellar/sdl3/3.2.8/lib
|
||||||
|
|
||||||
# NOTE: "--deep" is deprecated
|
# NOTE: "--deep" is deprecated
|
||||||
codesign --deep -fs - RPCS3.app
|
codesign --deep -fs - RPCS3.app
|
||||||
|
|
38
.ci/deploy-windows-clang.sh
Normal file
38
.ci/deploy-windows-clang.sh
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
#!/bin/sh -ex
|
||||||
|
|
||||||
|
# source ci-vars.env
|
||||||
|
# shellcheck disable=SC1091
|
||||||
|
. .ci/ci-vars.env
|
||||||
|
|
||||||
|
cd build || exit 1
|
||||||
|
|
||||||
|
CPU_ARCH="${1:-x86_64}"
|
||||||
|
|
||||||
|
echo "Deploying rpcs3 windows clang $CPU_ARCH"
|
||||||
|
|
||||||
|
# BUILD_blablabla is CI specific, so we wrap it for portability
|
||||||
|
ARTIFACT_DIR=$(cygpath -u "$BUILD_ARTIFACTSTAGINGDIRECTORY")
|
||||||
|
MSYS2_CLANG_BIN=$(cygpath -w /clang64/bin)
|
||||||
|
MSYS2_USR_BIN=$(cygpath -w /usr/bin)
|
||||||
|
|
||||||
|
echo "Installing dependencies of: ./bin/rpcs3.exe (MSYS2 dir is '$MSYS2_CLANG_BIN', usr dir is '$MSYS2_USR_BIN')"
|
||||||
|
cmake -DMSYS2_CLANG_BIN="$MSYS2_CLANG_BIN" -DMSYS2_USR_BIN="$MSYS2_USR_BIN" -Dexe=./bin/rpcs3.exe -P ../buildfiles/cmake/CopyRuntimeDependencies.cmake
|
||||||
|
|
||||||
|
# Prepare compatibility and SDL database for packaging
|
||||||
|
mkdir ./bin/config
|
||||||
|
mkdir ./bin/config/input_configs
|
||||||
|
curl -fsSL 'https://raw.githubusercontent.com/gabomdq/SDL_GameControllerDB/master/gamecontrollerdb.txt' 1> ./bin/config/input_configs/gamecontrollerdb.txt
|
||||||
|
curl -fsSL 'https://rpcs3.net/compatibility?api=v1&export' | iconv -t UTF-8 1> ./bin/GuiConfigs/compat_database.dat
|
||||||
|
|
||||||
|
# Package artifacts
|
||||||
|
7z a -m0=LZMA2 -mx9 "$BUILD" ./bin/*
|
||||||
|
|
||||||
|
# Generate sha256 hashes
|
||||||
|
# Write to file for GitHub releases
|
||||||
|
sha256sum "$BUILD" | awk '{ print $1 }' | tee "$BUILD.sha256"
|
||||||
|
echo "$(cat "$BUILD.sha256");$(stat -c %s "$BUILD")B" > GitHubReleaseMessage.txt
|
||||||
|
|
||||||
|
# Move files to publishing directory
|
||||||
|
mkdir -p "$ARTIFACT_DIR"
|
||||||
|
cp -- "$BUILD" "$ARTIFACT_DIR"
|
||||||
|
cp -- "$BUILD.sha256" "$ARTIFACT_DIR"
|
|
@ -1,14 +1,13 @@
|
||||||
#!/bin/sh -ex
|
#!/bin/sh -ex
|
||||||
|
|
||||||
# First let's see print some info about our caches
|
# First let's print some info about our caches
|
||||||
"$(cygpath -u "$CCACHE_BIN_DIR")"/ccache.exe --show-stats -v
|
"$(cygpath -u "$CCACHE_BIN_DIR")"/ccache.exe --show-stats -v
|
||||||
|
|
||||||
# BUILD_blablabla is Azure specific, so we wrap it for portability
|
# BUILD_blablabla is CI specific, so we wrap it for portability
|
||||||
ARTIFACT_DIR="$BUILD_ARTIFACTSTAGINGDIRECTORY"
|
ARTIFACT_DIR="$BUILD_ARTIFACTSTAGINGDIRECTORY"
|
||||||
|
|
||||||
# Remove unecessary files
|
# Remove unecessary files
|
||||||
rm -f ./bin/rpcs3.exp ./bin/rpcs3.lib ./bin/rpcs3.pdb ./bin/vc_redist.x64.exe
|
rm -f ./bin/rpcs3.exp ./bin/rpcs3.lib ./bin/rpcs3.pdb ./bin/vc_redist.x64.exe
|
||||||
rm -rf ./bin/git
|
|
||||||
|
|
||||||
# Prepare compatibility and SDL database for packaging
|
# Prepare compatibility and SDL database for packaging
|
||||||
mkdir ./bin/config
|
mkdir ./bin/config
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
# Variables set by Azure Pipelines
|
# Variables set by CI
|
||||||
CI_HAS_ARTIFACTS
|
|
||||||
BUILD_REASON
|
BUILD_REASON
|
||||||
BUILD_SOURCEVERSION
|
BUILD_SOURCEVERSION
|
||||||
BUILD_ARTIFACTSTAGINGDIRECTORY
|
BUILD_ARTIFACTSTAGINGDIRECTORY
|
||||||
|
@ -8,6 +7,7 @@ BUILD_SOURCEBRANCHNAME
|
||||||
APPDIR
|
APPDIR
|
||||||
ARTDIR
|
ARTDIR
|
||||||
RELEASE_MESSAGE
|
RELEASE_MESSAGE
|
||||||
|
RUN_UNIT_TESTS
|
||||||
# Variables for build matrix
|
# Variables for build matrix
|
||||||
COMPILER
|
COMPILER
|
||||||
DEPLOY_APPIMAGE
|
DEPLOY_APPIMAGE
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
#!/bin/sh -e
|
|
||||||
|
|
||||||
# Export variables for later stages of the Azure pipeline
|
|
||||||
# Values done in this manner will appear as environment variables
|
|
||||||
# in later stages.
|
|
||||||
|
|
||||||
# From pure-sh-bible
|
|
||||||
# Setting 'IFS' tells 'read' where to split the string.
|
|
||||||
while IFS='=' read -r key val; do
|
|
||||||
# Skip over lines containing comments.
|
|
||||||
[ "${key##\#*}" ] || continue
|
|
||||||
echo "##vso[task.setvariable variable=$key]$val"
|
|
||||||
done < ".ci/ci-vars.env"
|
|
|
@ -1,13 +0,0 @@
|
||||||
#!/bin/sh -e
|
|
||||||
|
|
||||||
# Export variables for later stages of the Cirrus pipeline
|
|
||||||
# Values done in this manner will appear as environment variables
|
|
||||||
# in later stages.
|
|
||||||
|
|
||||||
# From pure-sh-bible
|
|
||||||
# Setting 'IFS' tells 'read' where to split the string.
|
|
||||||
while IFS='=' read -r key val; do
|
|
||||||
# Skip over lines containing comments.
|
|
||||||
[ "${key##\#*}" ] || continue
|
|
||||||
export "$key"="$val"
|
|
||||||
done < ".ci/ci-vars.env"
|
|
13
.ci/generate-qt-ts.sh
Executable file
13
.ci/generate-qt-ts.sh
Executable file
|
@ -0,0 +1,13 @@
|
||||||
|
#!/bin/sh -ex
|
||||||
|
|
||||||
|
mkdir -p ../translations
|
||||||
|
|
||||||
|
LUPDATE_PATH=$(find /usr -name lupdate -type f 2>/dev/null | head -n 1)
|
||||||
|
if [ -z "$LUPDATE_PATH" ]; then
|
||||||
|
echo "Error: lupdate not found!"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "lupdate found at: $LUPDATE_PATH"
|
||||||
|
$LUPDATE_PATH -recursive . -ts ../translations/rpcs3_template.ts
|
||||||
|
sed -i 's|filename="\.\./|filename="./|g' ../translations/rpcs3_template.ts
|
||||||
|
fi
|
3
.ci/get_keys-windows.sh
Normal file → Executable file
3
.ci/get_keys-windows.sh
Normal file → Executable file
|
@ -1,4 +1,3 @@
|
||||||
#!/bin/sh -ex
|
#!/bin/sh -ex
|
||||||
|
|
||||||
curl -fLo "./llvm.lock" "https://github.com/RPCS3/llvm-mirror/releases/download/custom-build-win-19.1.7/llvmlibs_mt.7z.sha256"
|
curl -fLo "./llvm.lock" "https://github.com/RPCS3/llvm-mirror/releases/download/custom-build-win-${LLVM_VER}/llvmlibs_mt.7z.sha256"
|
||||||
curl -fLo "./glslang.lock" "https://github.com/RPCS3/glslang/releases/download/custom-build-win/glslanglibs_mt.7z.sha256"
|
|
||||||
|
|
|
@ -9,10 +9,10 @@ export ASSUME_ALWAYS_YES=true
|
||||||
pkg info # debug
|
pkg info # debug
|
||||||
|
|
||||||
# WITH_LLVM
|
# WITH_LLVM
|
||||||
pkg install llvm19
|
pkg install "llvm$LLVM_COMPILER_VER"
|
||||||
|
|
||||||
# Mandatory dependencies (qt6-base is pulled via qt6-multimedia)
|
# Mandatory dependencies (qtX-base is pulled via qtX-multimedia)
|
||||||
pkg install git ccache cmake ninja qt6-multimedia qt6-svg glew openal-soft ffmpeg
|
pkg install git ccache cmake ninja "qt$QT_VER_MAIN-multimedia" "qt$QT_VER_MAIN-svg" glew openal-soft ffmpeg
|
||||||
|
|
||||||
# Optional dependencies (libevdev is pulled by qt6-base)
|
# Optional dependencies (libevdev is pulled by qtX-base)
|
||||||
pkg install pkgconf alsa-lib pulseaudio sdl2 evdev-proto vulkan-headers vulkan-loader
|
pkg install pkgconf alsa-lib pulseaudio sdl3 evdev-proto vulkan-headers vulkan-loader opencv
|
||||||
|
|
0
.ci/optimize-mac.sh
Normal file → Executable file
0
.ci/optimize-mac.sh
Normal file → Executable file
63
.ci/setup-llvm.sh
Normal file
63
.ci/setup-llvm.sh
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
#!/bin/sh -ex
|
||||||
|
|
||||||
|
# Resource/dependency URLs
|
||||||
|
CCACHE_URL="https://github.com/ccache/ccache/releases/download/v4.11.2/ccache-4.11.2-windows-x86_64.zip"
|
||||||
|
|
||||||
|
DEP_URLS=" \
|
||||||
|
$CCACHE_URL"
|
||||||
|
|
||||||
|
# CI doesn't make a cache dir if it doesn't exist, so we do it manually
|
||||||
|
[ -d "$DEPS_CACHE_DIR" ] || mkdir "$DEPS_CACHE_DIR"
|
||||||
|
|
||||||
|
# Pull the llvm submodule
|
||||||
|
# shellcheck disable=SC2046
|
||||||
|
git submodule -q update --init --depth=1 -- 3rdparty/llvm
|
||||||
|
|
||||||
|
# Git bash doesn't have rev, so here it is
|
||||||
|
rev()
|
||||||
|
{
|
||||||
|
echo "$1" | awk '{ for(i = length($0); i != 0; --i) { a = a substr($0, i, 1); } } END { print a }'
|
||||||
|
}
|
||||||
|
|
||||||
|
# Usage: download_and_verify url checksum algo file
|
||||||
|
# Check to see if a file is already cached, and the checksum matches. If not, download it.
|
||||||
|
# Tries up to 3 times
|
||||||
|
download_and_verify()
|
||||||
|
{
|
||||||
|
url="$1"
|
||||||
|
correctChecksum="$2"
|
||||||
|
algo="$3"
|
||||||
|
fileName="$4"
|
||||||
|
|
||||||
|
for _ in 1 2 3; do
|
||||||
|
[ -e "$DEPS_CACHE_DIR/$fileName" ] || curl -fLo "$DEPS_CACHE_DIR/$fileName" "$url"
|
||||||
|
fileChecksum=$("${algo}sum" "$DEPS_CACHE_DIR/$fileName" | awk '{ print $1 }')
|
||||||
|
[ "$fileChecksum" = "$correctChecksum" ] && return 0
|
||||||
|
done
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Some dependencies install here
|
||||||
|
[ -d "./build/lib_ext/Release-x64" ] || mkdir -p "./build/lib_ext/Release-x64"
|
||||||
|
|
||||||
|
for url in $DEP_URLS; do
|
||||||
|
# Get the filename from the URL and remove query strings (?arg=something).
|
||||||
|
fileName="$(rev "$(rev "$url" | cut -d'/' -f1)" | cut -d'?' -f1)"
|
||||||
|
[ -z "$fileName" ] && echo "Unable to parse url: $url" && exit 1
|
||||||
|
|
||||||
|
# shellcheck disable=SC1003
|
||||||
|
case "$url" in
|
||||||
|
*ccache*) checksum=$CCACHE_SHA; algo="sha256"; outDir="$CCACHE_BIN_DIR" ;;
|
||||||
|
*) echo "Unknown url resource: $url"; exit 1 ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
download_and_verify "$url" "$checksum" "$algo" "$fileName"
|
||||||
|
7z x -y "$DEPS_CACHE_DIR/$fileName" -aos -o"$outDir"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Setup ccache tool
|
||||||
|
[ -d "$CCACHE_DIR" ] || mkdir -p "$(cygpath -u "$CCACHE_DIR")"
|
||||||
|
CCACHE_SH_DIR=$(cygpath -u "$CCACHE_BIN_DIR")
|
||||||
|
mv "$CCACHE_SH_DIR"/ccache-*/* "$CCACHE_SH_DIR"
|
||||||
|
cp "$CCACHE_SH_DIR"/ccache.exe "$CCACHE_SH_DIR"/cl.exe
|
39
.ci/setup-windows-ci-vars.sh
Normal file
39
.ci/setup-windows-ci-vars.sh
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
#!/bin/sh -ex
|
||||||
|
|
||||||
|
CPU_ARCH="${1:-win64}"
|
||||||
|
COMPILER="${2:-msvc}"
|
||||||
|
|
||||||
|
# These are CI specific, so we wrap them for portability
|
||||||
|
REPO_NAME="$BUILD_REPOSITORY_NAME"
|
||||||
|
REPO_BRANCH="$BUILD_SOURCEBRANCHNAME"
|
||||||
|
PR_NUMBER="$BUILD_PR_NUMBER"
|
||||||
|
|
||||||
|
# Gather explicit version number and number of commits
|
||||||
|
COMM_TAG=$(awk '/version{.*}/ { printf("%d.%d.%d", $5, $6, $7) }' ./rpcs3/rpcs3_version.cpp)
|
||||||
|
COMM_COUNT=$(git rev-list --count HEAD)
|
||||||
|
COMM_HASH=$(git rev-parse --short=8 HEAD)
|
||||||
|
|
||||||
|
# Format the above into filenames
|
||||||
|
if [ -n "$PR_NUMBER" ]; then
|
||||||
|
AVVER="${COMM_TAG}-${COMM_HASH}"
|
||||||
|
BUILD_RAW="rpcs3-v${AVVER}_${CPU_ARCH}_${COMPILER}"
|
||||||
|
BUILD="${BUILD_RAW}.7z"
|
||||||
|
else
|
||||||
|
AVVER="${COMM_TAG}-${COMM_COUNT}"
|
||||||
|
BUILD_RAW="rpcs3-v${AVVER}-${COMM_HASH}_${CPU_ARCH}_${COMPILER}"
|
||||||
|
BUILD="${BUILD_RAW}.7z"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# BRANCH is used for experimental build warnings for pr builds, used in main_window.cpp.
|
||||||
|
# BUILD is the name of the release artifact
|
||||||
|
# BUILD_RAW is just filename
|
||||||
|
# AVVER is used for GitHub releases, it is the version number.
|
||||||
|
BRANCH="${REPO_NAME}/${REPO_BRANCH}"
|
||||||
|
|
||||||
|
# SC2129
|
||||||
|
{
|
||||||
|
echo "BRANCH=$BRANCH"
|
||||||
|
echo "BUILD=$BUILD"
|
||||||
|
echo "BUILD_RAW=$BUILD_RAW"
|
||||||
|
echo "AVVER=$AVVER"
|
||||||
|
} >> .ci/ci-vars.env
|
|
@ -1,10 +1,5 @@
|
||||||
#!/bin/sh -ex
|
#!/bin/sh -ex
|
||||||
|
|
||||||
# These are Azure specific, so we wrap them for portability
|
|
||||||
REPO_NAME="$BUILD_REPOSITORY_NAME"
|
|
||||||
REPO_BRANCH="$SYSTEM_PULLREQUEST_SOURCEBRANCH"
|
|
||||||
PR_NUMBER="$SYSTEM_PULLREQUEST_PULLREQUESTID"
|
|
||||||
|
|
||||||
# Resource/dependency URLs
|
# Resource/dependency URLs
|
||||||
# Qt mirrors can be volatile and slow, so we list 2
|
# Qt mirrors can be volatile and slow, so we list 2
|
||||||
#QT_HOST="http://mirrors.ocf.berkeley.edu/qt/"
|
#QT_HOST="http://mirrors.ocf.berkeley.edu/qt/"
|
||||||
|
@ -19,10 +14,9 @@ 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_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_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_SVG_URL="${QT_HOST}${QT_PREFIX}${QT_PREFIX_2}qtsvg${QT_SUFFIX}"
|
||||||
LLVMLIBS_URL='https://github.com/RPCS3/llvm-mirror/releases/download/custom-build-win-19.1.7/llvmlibs_mt.7z'
|
LLVMLIBS_URL="https://github.com/RPCS3/llvm-mirror/releases/download/custom-build-win-${LLVM_VER}/llvmlibs_mt.7z"
|
||||||
GLSLANG_URL='https://github.com/RPCS3/glslang/releases/latest/download/glslanglibs_mt.7z'
|
VULKAN_SDK_URL="https://www.dropbox.com/scl/fi/sjjh0fc4ld281pjbl2xzu/VulkanSDK-${VULKAN_VER}-Installer.exe?rlkey=f6wzc0lvms5vwkt2z3qabfv9d&dl=1"
|
||||||
VULKAN_SDK_URL="https://www.dropbox.com/scl/fi/sjjh0fc4ld281pjbl2xzu/VulkanSDK-1.3.268.0-Installer.exe?rlkey=f6wzc0lvms5vwkt2z3qabfv9d&dl=1"
|
CCACHE_URL="https://github.com/ccache/ccache/releases/download/v4.11.2/ccache-4.11.2-windows-x86_64.zip"
|
||||||
CCACHE_URL="https://github.com/ccache/ccache/releases/download/v4.10.2/ccache-4.10.2-windows-x86_64.zip"
|
|
||||||
|
|
||||||
DEP_URLS=" \
|
DEP_URLS=" \
|
||||||
$QT_BASE_URL \
|
$QT_BASE_URL \
|
||||||
|
@ -31,11 +25,10 @@ DEP_URLS=" \
|
||||||
$QT_MM_URL \
|
$QT_MM_URL \
|
||||||
$QT_SVG_URL \
|
$QT_SVG_URL \
|
||||||
$LLVMLIBS_URL \
|
$LLVMLIBS_URL \
|
||||||
$GLSLANG_URL \
|
|
||||||
$VULKAN_SDK_URL\
|
$VULKAN_SDK_URL\
|
||||||
$CCACHE_URL"
|
$CCACHE_URL"
|
||||||
|
|
||||||
# Azure pipelines doesn't make a cache dir if it doesn't exist, so we do it manually
|
# CI doesn't make a cache dir if it doesn't exist, so we do it manually
|
||||||
[ -d "$DEPS_CACHE_DIR" ] || mkdir "$DEPS_CACHE_DIR"
|
[ -d "$DEPS_CACHE_DIR" ] || mkdir "$DEPS_CACHE_DIR"
|
||||||
|
|
||||||
# Pull all the submodules except llvm, since it is built separately and we just download that build
|
# Pull all the submodules except llvm, since it is built separately and we just download that build
|
||||||
|
@ -80,7 +73,6 @@ for url in $DEP_URLS; do
|
||||||
case "$url" in
|
case "$url" in
|
||||||
*qt*) checksum=$(curl -fL "${url}.sha1"); algo="sha1"; outDir="$QTDIR/" ;;
|
*qt*) checksum=$(curl -fL "${url}.sha1"); algo="sha1"; outDir="$QTDIR/" ;;
|
||||||
*llvm*) checksum=$(curl -fL "${url}.sha256"); algo="sha256"; outDir="./build/lib_ext/Release-x64" ;;
|
*llvm*) checksum=$(curl -fL "${url}.sha256"); algo="sha256"; outDir="./build/lib_ext/Release-x64" ;;
|
||||||
*glslang*) checksum=$(curl -fL "${url}.sha256"); algo="sha256"; outDir="./build/lib_ext/Release-x64" ;;
|
|
||||||
*ccache*) checksum=$CCACHE_SHA; algo="sha256"; outDir="$CCACHE_BIN_DIR" ;;
|
*ccache*) checksum=$CCACHE_SHA; algo="sha256"; outDir="$CCACHE_BIN_DIR" ;;
|
||||||
*Vulkan*)
|
*Vulkan*)
|
||||||
# Vulkan setup needs to be run in batch environment
|
# Vulkan setup needs to be run in batch environment
|
||||||
|
@ -102,33 +94,3 @@ done
|
||||||
CCACHE_SH_DIR=$(cygpath -u "$CCACHE_BIN_DIR")
|
CCACHE_SH_DIR=$(cygpath -u "$CCACHE_BIN_DIR")
|
||||||
mv "$CCACHE_SH_DIR"/ccache-*/* "$CCACHE_SH_DIR"
|
mv "$CCACHE_SH_DIR"/ccache-*/* "$CCACHE_SH_DIR"
|
||||||
cp "$CCACHE_SH_DIR"/ccache.exe "$CCACHE_SH_DIR"/cl.exe
|
cp "$CCACHE_SH_DIR"/ccache.exe "$CCACHE_SH_DIR"/cl.exe
|
||||||
|
|
||||||
# Gather explicit version number and number of commits
|
|
||||||
COMM_TAG=$(awk '/version{.*}/ { printf("%d.%d.%d", $5, $6, $7) }' ./rpcs3/rpcs3_version.cpp)
|
|
||||||
COMM_COUNT=$(git rev-list --count HEAD)
|
|
||||||
COMM_HASH=$(git rev-parse --short=8 HEAD)
|
|
||||||
|
|
||||||
# Format the above into filenames
|
|
||||||
if [ -n "$PR_NUMBER" ]; then
|
|
||||||
AVVER="${COMM_TAG}-${COMM_HASH}"
|
|
||||||
BUILD_RAW="rpcs3-v${AVVER}_win64"
|
|
||||||
BUILD="${BUILD_RAW}.7z"
|
|
||||||
else
|
|
||||||
AVVER="${COMM_TAG}-${COMM_COUNT}"
|
|
||||||
BUILD_RAW="rpcs3-v${AVVER}-${COMM_HASH}_win64"
|
|
||||||
BUILD="${BUILD_RAW}.7z"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# BRANCH is used for experimental build warnings for pr builds, used in main_window.cpp.
|
|
||||||
# BUILD is the name of the release artifact
|
|
||||||
# BUILD_RAW is just filename
|
|
||||||
# AVVER is used for GitHub releases, it is the version number.
|
|
||||||
BRANCH="${REPO_NAME}/${REPO_BRANCH}"
|
|
||||||
|
|
||||||
# SC2129
|
|
||||||
{
|
|
||||||
echo "BRANCH=$BRANCH"
|
|
||||||
echo "BUILD=$BUILD"
|
|
||||||
echo "BUILD_RAW=$BUILD_RAW"
|
|
||||||
echo "AVVER=$AVVER"
|
|
||||||
} >> .ci/ci-vars.env
|
|
||||||
|
|
151
.cirrus.yml
151
.cirrus.yml
|
@ -1,151 +0,0 @@
|
||||||
env:
|
|
||||||
CIRRUS_CLONE_DEPTH: 0 # Unshallow clone to obtain proper GIT_VERSION
|
|
||||||
BUILD_REPOSITORY_NAME: $CIRRUS_REPO_FULL_NAME
|
|
||||||
SYSTEM_PULLREQUEST_SOURCEBRANCH: $CIRRUS_BRANCH
|
|
||||||
SYSTEM_PULLREQUEST_PULLREQUESTID: $CIRRUS_PR
|
|
||||||
BUILD_SOURCEVERSION: $CIRRUS_CHANGE_IN_REPO
|
|
||||||
BUILD_SOURCEBRANCHNAME: $CIRRUS_BRANCH
|
|
||||||
RPCS3_TOKEN: ENCRYPTED[100ebb8e3552bf2021d0ef55dccda3e58d27be5b6cab0b0b92843ef490195d3c4edaefa087e4a3b425caa6392300b9b1]
|
|
||||||
QT_VER_MAIN: '6'
|
|
||||||
QT_VER: '6.8.2'
|
|
||||||
|
|
||||||
# windows_task:
|
|
||||||
# matrix:
|
|
||||||
# - name: Cirrus Windows
|
|
||||||
# windows_container:
|
|
||||||
# image: cirrusci/windowsservercore:visualstudio2019
|
|
||||||
# cpu: 8
|
|
||||||
# memory: 16G
|
|
||||||
# env:
|
|
||||||
# CIRRUS_SHELL: "bash"
|
|
||||||
# COMPILER: msvc
|
|
||||||
# BUILD_ARTIFACTSTAGINGDIRECTORY: ${CIRRUS_WORKING_DIR}\artifacts\
|
|
||||||
# QT_VER_MSVC: 'msvc2022'
|
|
||||||
# QT_DATE: '202501260838'
|
|
||||||
# QTDIR: C:\Qt\${QT_VER}\${QT_VER_MSVC}_64
|
|
||||||
# VULKAN_VER: '1.3.268.0'
|
|
||||||
# VULKAN_SDK_SHA: '8459ef49bd06b697115ddd3d97c9aec729e849cd775f5be70897718a9b3b9db5'
|
|
||||||
# VULKAN_SDK: C:\VulkanSDK\${VULKAN_VER}
|
|
||||||
# CACHE_DIR: "./cache"
|
|
||||||
# UPLOAD_COMMIT_HASH: 7d09e3be30805911226241afbb14f8cdc2eb054e
|
|
||||||
# UPLOAD_REPO_FULL_NAME: "rpcs3/rpcs3-binaries-win"
|
|
||||||
# deps_cache:
|
|
||||||
# folder: "./cache"
|
|
||||||
# #obj_cache:
|
|
||||||
# # folder: "./tmp"
|
|
||||||
# #obj2_cache:
|
|
||||||
# # folder: "./rpcs3/x64"
|
|
||||||
# setup_script:
|
|
||||||
# - './.ci/get_keys-windows.sh'
|
|
||||||
# - './.ci/setup-windows.sh'
|
|
||||||
# rpcs3_script:
|
|
||||||
# - export PATH=${PATH}:"C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin"
|
|
||||||
# - msbuild.exe rpcs3.sln //p:Configuration=Release //m
|
|
||||||
# deploy_script:
|
|
||||||
# - mkdir artifacts
|
|
||||||
# - source './.ci/export-cirrus-vars.sh'
|
|
||||||
# - './.ci/deploy-windows.sh'
|
|
||||||
# artifacts:
|
|
||||||
# name: Artifact
|
|
||||||
# path: "*.7z*"
|
|
||||||
# push_script: |
|
|
||||||
# if [ "$CIRRUS_REPO_OWNER" = "RPCS3" ] && [ -z "$CIRRUS_PR" ] && [ "$CIRRUS_BRANCH" = "master" ]; then
|
|
||||||
# source './.ci/export-cirrus-vars.sh'
|
|
||||||
# './.ci/github-upload.sh'
|
|
||||||
# fi;
|
|
||||||
|
|
||||||
# linux_task:
|
|
||||||
# container:
|
|
||||||
# image: rpcs3/rpcs3-ci-jammy:1.1
|
|
||||||
# cpu: 4
|
|
||||||
# memory: 16G
|
|
||||||
# env:
|
|
||||||
# BUILD_ARTIFACTSTAGINGDIRECTORY: ${CIRRUS_WORKING_DIR}/artifacts
|
|
||||||
# ARTDIR: ${CIRRUS_WORKING_DIR}/artifacts/
|
|
||||||
# CCACHE_DIR: "/tmp/ccache_dir"
|
|
||||||
# CCACHE_MAXSIZE: 300M
|
|
||||||
# CI_HAS_ARTIFACTS: true
|
|
||||||
# UPLOAD_COMMIT_HASH: d812f1254a1157c80fd402f94446310560f54e5f
|
|
||||||
# UPLOAD_REPO_FULL_NAME: "rpcs3/rpcs3-binaries-linux"
|
|
||||||
# DEPLOY_APPIMAGE: true
|
|
||||||
# APPDIR: "./appdir"
|
|
||||||
# RELEASE_MESSAGE: "../GitHubReleaseMessage.txt"
|
|
||||||
# ccache_cache:
|
|
||||||
# folder: "/tmp/ccache_dir"
|
|
||||||
# matrix:
|
|
||||||
# - name: Cirrus Linux GCC
|
|
||||||
# env:
|
|
||||||
# COMPILER: gcc
|
|
||||||
# gcc_script:
|
|
||||||
# - mkdir artifacts
|
|
||||||
# - ".ci/build-linux.sh"
|
|
||||||
# - name: Cirrus Linux Clang
|
|
||||||
# env:
|
|
||||||
# COMPILER: clang
|
|
||||||
# clang_script:
|
|
||||||
# - mkdir artifacts
|
|
||||||
# - ".ci/build-linux.sh"
|
|
||||||
# artifacts:
|
|
||||||
# name: Artifact
|
|
||||||
# path: "artifacts/*"
|
|
||||||
# push_script: |
|
|
||||||
# if [ "$CIRRUS_REPO_OWNER" = "RPCS3" ] && [ -z "$CIRRUS_PR" ] && [ "$CIRRUS_BRANCH" = "master" ] && [ "$COMPILER" = "gcc" ]; then
|
|
||||||
# COMM_TAG=$(awk '/version{.*}/ { printf("%d.%d.%d", $5, $6, $7) }' ./rpcs3/rpcs3_version.cpp)
|
|
||||||
# COMM_COUNT=$(git rev-list --count HEAD)
|
|
||||||
# COMM_HASH=$(git rev-parse --short=8 HEAD)
|
|
||||||
|
|
||||||
# export AVVER="${COMM_TAG}-${COMM_COUNT}"
|
|
||||||
|
|
||||||
# .ci/github-upload.sh
|
|
||||||
# fi;
|
|
||||||
|
|
||||||
freebsd_task:
|
|
||||||
matrix:
|
|
||||||
- name: Cirrus FreeBSD
|
|
||||||
freebsd_instance:
|
|
||||||
image_family: freebsd-13-4
|
|
||||||
cpu: 8
|
|
||||||
memory: 8G
|
|
||||||
env:
|
|
||||||
CCACHE_MAXSIZE: 300M # 3x clean build, rounded
|
|
||||||
CCACHE_DIR: /tmp/ccache_dir
|
|
||||||
ccache_cache:
|
|
||||||
folder: /tmp/ccache_dir
|
|
||||||
install_script: "sh -ex ./.ci/install-freebsd.sh"
|
|
||||||
script: "./.ci/build-freebsd.sh"
|
|
||||||
|
|
||||||
# linux_aarch64_task:
|
|
||||||
# env:
|
|
||||||
# BUILD_ARTIFACTSTAGINGDIRECTORY: ${CIRRUS_WORKING_DIR}/artifacts
|
|
||||||
# ARTDIR: ${CIRRUS_WORKING_DIR}/artifacts/
|
|
||||||
# CCACHE_DIR: "/tmp/ccache_dir"
|
|
||||||
# CCACHE_MAXSIZE: 300M
|
|
||||||
# CI_HAS_ARTIFACTS: true
|
|
||||||
# UPLOAD_COMMIT_HASH: a1d35836e8d45bfc6f63c26f0a3e5d46ef622fe1
|
|
||||||
# UPLOAD_REPO_FULL_NAME: "rpcs3/rpcs3-binaries-linux-arm64"
|
|
||||||
# DEPLOY_APPIMAGE: true
|
|
||||||
# APPDIR: "./appdir"
|
|
||||||
# RELEASE_MESSAGE: "../GitHubReleaseMessage.txt"
|
|
||||||
# COMPILER: clang
|
|
||||||
# ccache_cache:
|
|
||||||
# folder: "/tmp/ccache_dir"
|
|
||||||
# matrix:
|
|
||||||
# - name: Cirrus Linux AArch64 Clang
|
|
||||||
# arm_container:
|
|
||||||
# image: 'docker.io/rpcs3/rpcs3-ci-jammy-aarch64:1.1'
|
|
||||||
# cpu: 8
|
|
||||||
# memory: 8G
|
|
||||||
# clang_script:
|
|
||||||
# - mkdir artifacts
|
|
||||||
# - "sh -ex ./.ci/build-linux-aarch64.sh"
|
|
||||||
# artifacts:
|
|
||||||
# name: Artifact
|
|
||||||
# path: "artifacts/*"
|
|
||||||
# push_script: |
|
|
||||||
# if [ "$CIRRUS_REPO_OWNER" = "RPCS3" ] && [ -z "$CIRRUS_PR" ] && [ "$CIRRUS_BRANCH" = "master" ]; then
|
|
||||||
# COMM_TAG=$(awk '/version{.*}/ { printf("%d.%d.%d", $5, $6, $7) }' ./rpcs3/rpcs3_version.cpp)
|
|
||||||
# COMM_COUNT=$(git rev-list --count HEAD)
|
|
||||||
# COMM_HASH=$(git rev-parse --short=8 HEAD)
|
|
||||||
# export AVVER="${COMM_TAG}-${COMM_COUNT}"
|
|
||||||
# .ci/github-upload.sh
|
|
||||||
# fi;
|
|
2
.github/CONTRIBUTING.md
vendored
2
.github/CONTRIBUTING.md
vendored
|
@ -16,4 +16,4 @@ Submitting your test results for Commercial Games must be done on our forums. Pl
|
||||||
|
|
||||||
# Contributing
|
# Contributing
|
||||||
|
|
||||||
Check the [Coding Style Guidelines](https://github.com/RPCS3/rpcs3/wiki/Coding-Style) and [Developer Information](https://github.com/RPCS3/rpcs3/wiki/Developer-Information). If you have any questions, hit us up on our [Discord Server](https://discord.me/RPCS3) in the **#development** channel.
|
Check the [Coding Style Guidelines](https://github.com/RPCS3/rpcs3/wiki/Coding-Style) and [Developer Information](https://github.com/RPCS3/rpcs3/wiki/Developer-Information). If you have any questions, hit us up on our [Discord Server](https://discord.gg/rpcs3) in the **#development** channel.
|
||||||
|
|
|
@ -7,7 +7,7 @@ body:
|
||||||
attributes:
|
attributes:
|
||||||
value: |
|
value: |
|
||||||
# Summary
|
# Summary
|
||||||
Please do not ask for help or report compatibility regressions here, use [RPCS3 Discord server](https://discord.me/RPCS3) or [forums](https://forums.rpcs3.net/) instead.
|
Please do not ask for help or report compatibility regressions here, use [RPCS3 Discord server](https://discord.gg/rpcs3) or [forums](https://forums.rpcs3.net/) instead.
|
||||||
- type: textarea
|
- type: textarea
|
||||||
id: quick-summary
|
id: quick-summary
|
||||||
attributes:
|
attributes:
|
||||||
|
@ -50,7 +50,7 @@ body:
|
||||||
* Completely close RPCS3 and locate the log file.
|
* 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).
|
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 Windows it will be in the ```log``` folder inside your RPCS3 folder.
|
||||||
* On Linux it will be in ```~/.cache/rpcs3/```
|
* On Linux it will be in ```~/.cache/rpcs3/```
|
||||||
* On MacOS it will be in ```~/Library/Caches/rpcs3```. If you're unable to locate it copy paste the path in Spotlight and hit enter.
|
* On MacOS it will be in ```~/Library/Caches/rpcs3```. If you're unable to locate it copy paste the path in Spotlight and hit enter.
|
||||||
- type: textarea
|
- type: textarea
|
||||||
|
|
4
.github/ISSUE_TEMPLATE/2-bug-report.yml
vendored
4
.github/ISSUE_TEMPLATE/2-bug-report.yml
vendored
|
@ -7,7 +7,7 @@ body:
|
||||||
attributes:
|
attributes:
|
||||||
value: |
|
value: |
|
||||||
# Summary
|
# Summary
|
||||||
Please do not ask for help or report compatibility regressions here, use [RPCS3 Discord server](https://discord.me/RPCS3) or [forums](https://forums.rpcs3.net/) instead.
|
Please do not ask for help or report compatibility regressions here, use [RPCS3 Discord server](https://discord.gg/rpcs3) or [forums](https://forums.rpcs3.net/) instead.
|
||||||
- type: textarea
|
- type: textarea
|
||||||
id: quick-summary
|
id: quick-summary
|
||||||
attributes:
|
attributes:
|
||||||
|
@ -36,7 +36,7 @@ body:
|
||||||
* Completely close RPCS3 and locate the log file.
|
* 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).
|
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 Windows it will be in the ```log``` folder inside your RPCS3 folder.
|
||||||
* On Linux it will be in ```~/.cache/rpcs3/```
|
* On Linux it will be in ```~/.cache/rpcs3/```
|
||||||
* On MacOS it will be in ```~/Library/Caches/rpcs3```. If you're unable to locate it copy paste the path in Spotlight and hit enter.
|
* On MacOS it will be in ```~/Library/Caches/rpcs3```. If you're unable to locate it copy paste the path in Spotlight and hit enter.
|
||||||
- type: textarea
|
- type: textarea
|
||||||
|
|
4
.github/ISSUE_TEMPLATE/3-feature-request.yml
vendored
4
.github/ISSUE_TEMPLATE/3-feature-request.yml
vendored
|
@ -6,7 +6,7 @@ body:
|
||||||
- type: markdown
|
- type: markdown
|
||||||
attributes:
|
attributes:
|
||||||
value: |
|
value: |
|
||||||
Please do not ask for help or report compatibility regressions here, use [RPCS3 Discord server](https://discord.me/RPCS3) or [forums](https://forums.rpcs3.net/) instead.
|
Please do not ask for help or report compatibility regressions here, use [RPCS3 Discord server](https://discord.gg/rpcs3) or [forums](https://forums.rpcs3.net/) instead.
|
||||||
- type: textarea
|
- type: textarea
|
||||||
id: quick-summary
|
id: quick-summary
|
||||||
attributes:
|
attributes:
|
||||||
|
@ -31,6 +31,6 @@ body:
|
||||||
* If this feature is something that a game is trying to use, upload a log file for it.
|
* 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).
|
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 Windows it will be in the ```log``` folder inside your RPCS3 folder.
|
||||||
* On Linux it will be in ```~/.cache/rpcs3/```
|
* On Linux it will be in ```~/.cache/rpcs3/```
|
||||||
* On MacOS it will be in ```~/Library/Caches/rpcs3```. If you're unable to locate it copy paste the path in Spotlight and hit enter.
|
* On MacOS it will be in ```~/Library/Caches/rpcs3```. If you're unable to locate it copy paste the path in Spotlight and hit enter.
|
||||||
|
|
2
.github/ISSUE_TEMPLATE/4-advanced.md
vendored
2
.github/ISSUE_TEMPLATE/4-advanced.md
vendored
|
@ -7,7 +7,7 @@ assignees: ''
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Please do not ask for help or report compatibility regressions here, use [RPCS3 Discord server](https://discord.me/RPCS3) or [forums](https://forums.rpcs3.net/) instead.
|
## Please do not ask for help or report compatibility regressions here, use [RPCS3 Discord server](https://discord.gg/rpcs3) or [forums](https://forums.rpcs3.net/) instead.
|
||||||
|
|
||||||
You're using the advanced template. You're expected to know what to write in order to fill in all the required information for proper report.
|
You're using the advanced template. You're expected to know what to write in order to fill in all the required information for proper report.
|
||||||
|
|
||||||
|
|
2
.github/ISSUE_TEMPLATE/config.yml
vendored
2
.github/ISSUE_TEMPLATE/config.yml
vendored
|
@ -4,7 +4,7 @@ contact_links:
|
||||||
url: https://rpcs3.net/quickstart
|
url: https://rpcs3.net/quickstart
|
||||||
about: Everything you need to know to install and configure emulator, and add games
|
about: Everything you need to know to install and configure emulator, and add games
|
||||||
- name: Ask for help
|
- name: Ask for help
|
||||||
url: https://discord.me/RPCS3
|
url: https://discord.gg/rpcs3
|
||||||
about: If you have some questions or need help, please use our Discord server instead of GitHub
|
about: If you have some questions or need help, please use our Discord server instead of GitHub
|
||||||
- name: Report game compatibility
|
- name: Report game compatibility
|
||||||
url: https://forums.rpcs3.net/thread-196671.html
|
url: https://forums.rpcs3.net/thread-196671.html
|
||||||
|
|
18
.github/PR-BUILD.md
vendored
18
.github/PR-BUILD.md
vendored
|
@ -1,18 +0,0 @@
|
||||||
## How to test a PR build
|
|
||||||
|
|
||||||
Please take into account, that RPCS3 build usually takes some time (about 15 mins), so you can't access a build if a PR was just submitted.
|
|
||||||
|
|
||||||
- Open a PR you want to test
|
|
||||||
- Scroll to the very bottom and locate the **Checks** section
|
|
||||||
- Click on **Show all checks**
|
|
||||||
You are supposed to see something like this
|
|
||||||

|
|
||||||
- Click on __Details__ on either **Cirrus Linux GCC** or **Cirrus Windows**
|
|
||||||
- Click **View more details on Cirrus CI** at the very bottom
|
|
||||||

|
|
||||||
- Click on the download button for **Artifact** on the **Artifacts** block
|
|
||||||

|
|
||||||
|
|
||||||
- Congratulations! You are now downloading an RPCS3 build for that specific PR.
|
|
||||||
|
|
||||||
__Please note that PR builds are not supposed to be stable because they contain new changesets.__
|
|
3
.github/PULL_REQUEST_TEMPLATE/1-default.md
vendored
3
.github/PULL_REQUEST_TEMPLATE/1-default.md
vendored
|
@ -1,3 +0,0 @@
|
||||||
<!-- Please include a summary of the change and which issue is fixed. -->
|
|
||||||
|
|
||||||
[How to test this PR](.github/PR-BUILD.md)
|
|
72
.github/workflows/llvm.yml
vendored
Normal file
72
.github/workflows/llvm.yml
vendored
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
name: Build LLVM
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: bash
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}-${{ github.event_name }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
env:
|
||||||
|
BUILD_ARTIFACTSTAGINGDIRECTORY: ${{ github.workspace }}/artifacts/
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
Windows_Build:
|
||||||
|
if: github.event_name == 'workflow_dispatch'
|
||||||
|
name: LLVM Windows (MSVC)
|
||||||
|
runs-on: windows-2025
|
||||||
|
env:
|
||||||
|
COMPILER: msvc
|
||||||
|
CCACHE_SHA: '1f39f3ad5aae3fe915e99ad1302633bc8f6718e58fa7c0de2b0ba7e080f0f08c'
|
||||||
|
CCACHE_BIN_DIR: 'C:\ccache_bin'
|
||||||
|
CCACHE_DIR: 'C:\ccache'
|
||||||
|
CCACHE_INODECACHE: 'true'
|
||||||
|
CCACHE_SLOPPINESS: 'time_macros'
|
||||||
|
DEPS_CACHE_DIR: ./dependency_cache
|
||||||
|
steps:
|
||||||
|
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@main
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Restore Dependencies Cache
|
||||||
|
uses: actions/cache/restore@main
|
||||||
|
id: restore-dependencies-cache
|
||||||
|
with:
|
||||||
|
path: ${{ env.DEPS_CACHE_DIR }}
|
||||||
|
key: "${{ runner.os }}-${{ env.COMPILER }}-llvm-${{ env.CCACHE_SHA }}"
|
||||||
|
restore-keys: ${{ runner.os }}-${{ env.COMPILER }}-llvm
|
||||||
|
|
||||||
|
- name: Download and unpack dependencies
|
||||||
|
run: .ci/setup-llvm.sh
|
||||||
|
|
||||||
|
- name: Add msbuild to PATH
|
||||||
|
uses: microsoft/setup-msbuild@main
|
||||||
|
|
||||||
|
- name: Compile LLVM
|
||||||
|
shell: pwsh
|
||||||
|
run: msbuild 3rdparty\llvm\llvm_build.vcxproj /p:SolutionDir="$(pwd)/" /p:Configuration=Release /v:minimal /p:Platform=x64 /p:PreferredToolArchitecture=x64 /p:CLToolPath=${{ env.CCACHE_BIN_DIR }} /p:UseMultiToolTask=true /p:CustomAfterMicrosoftCommonTargets="${{ github.workspace }}\buildfiles\msvc\ci_only.targets"
|
||||||
|
|
||||||
|
- name: Pack up build artifacts
|
||||||
|
run: |
|
||||||
|
mkdir -p "${{ env.BUILD_ARTIFACTSTAGINGDIRECTORY }}"
|
||||||
|
.ci/deploy-llvm.sh
|
||||||
|
|
||||||
|
- name: Upload artifacts (7z)
|
||||||
|
uses: actions/upload-artifact@main
|
||||||
|
with:
|
||||||
|
name: LLVM for Windows (MSVC)
|
||||||
|
path: ${{ env.BUILD_ARTIFACTSTAGINGDIRECTORY }}
|
||||||
|
compression-level: 0
|
||||||
|
if-no-files-found: error
|
||||||
|
|
||||||
|
- name: Save Dependencies Cache
|
||||||
|
if: github.ref == 'refs/heads/master'
|
||||||
|
uses: actions/cache/save@main
|
||||||
|
with:
|
||||||
|
path: ${{ env.DEPS_CACHE_DIR }}
|
||||||
|
key: ${{ steps.restore-dependencies-cache.outputs.cache-primary-key }}
|
34
.github/workflows/qt-ts.yml
vendored
Normal file
34
.github/workflows/qt-ts.yml
vendored
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
name: Generate Translation Template
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
paths:
|
||||||
|
- 'rpcs3/**'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
Generate_Translation_Template:
|
||||||
|
name: Generate Translation Template
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@main
|
||||||
|
|
||||||
|
- name: Install Qt Tools
|
||||||
|
run: |
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install -y qt6-l10n-tools
|
||||||
|
|
||||||
|
- name: Generate .ts file using lupdate (Qt)
|
||||||
|
working-directory: rpcs3
|
||||||
|
run: |
|
||||||
|
../.ci/generate-qt-ts.sh
|
||||||
|
|
||||||
|
- name: Upload translation template
|
||||||
|
uses: actions/upload-artifact@main
|
||||||
|
with:
|
||||||
|
name: RPCS3_Translation_Template
|
||||||
|
path: translations/rpcs3_template.ts
|
||||||
|
compression-level: 0
|
332
.github/workflows/rpcs3.yml
vendored
332
.github/workflows/rpcs3.yml
vendored
|
@ -1,16 +1,13 @@
|
||||||
name: Build RPCS3
|
name: Build RPCS3
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: bash
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
paths-ignore:
|
branches:
|
||||||
- '.cirrus.yml'
|
- master # Only trigger push event on 'master' branch
|
||||||
- '.azure-pipelines.yml'
|
|
||||||
- 'README.md'
|
|
||||||
pull_request:
|
pull_request:
|
||||||
paths-ignore:
|
|
||||||
- '.cirrus.yml'
|
|
||||||
- '.azure-pipelines.yml'
|
|
||||||
- 'README.md'
|
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
|
@ -20,34 +17,42 @@ concurrency:
|
||||||
env:
|
env:
|
||||||
BUILD_REPOSITORY_NAME: ${{ github.repository }}
|
BUILD_REPOSITORY_NAME: ${{ github.repository }}
|
||||||
BUILD_SOURCEBRANCHNAME: ${{ github.ref_name }}
|
BUILD_SOURCEBRANCHNAME: ${{ github.ref_name }}
|
||||||
|
BUILD_PR_NUMBER: ${{ github.event.pull_request.number }}
|
||||||
BUILD_SOURCEVERSION: ${{ github.sha }}
|
BUILD_SOURCEVERSION: ${{ github.sha }}
|
||||||
BUILD_ARTIFACTSTAGINGDIRECTORY: ${{ github.workspace }}/artifacts/
|
BUILD_ARTIFACTSTAGINGDIRECTORY: ${{ github.workspace }}/artifacts/
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
Linux_Build:
|
Linux_Build:
|
||||||
|
# Only run push event on master branch of main repo, but run all PRs
|
||||||
|
if: github.event_name != 'push' || (github.repository == 'RPCS3/rpcs3' && github.ref_name == 'master')
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- os: ubuntu-24.04
|
- os: ubuntu-24.04
|
||||||
docker_img: "rpcs3/rpcs3-ci-jammy:1.1"
|
docker_img: "rpcs3/rpcs3-ci-jammy:1.6"
|
||||||
build_sh: "/rpcs3/.ci/build-linux.sh"
|
build_sh: "/rpcs3/.ci/build-linux.sh"
|
||||||
compiler: clang
|
compiler: clang
|
||||||
|
UPLOAD_COMMIT_HASH: d812f1254a1157c80fd402f94446310560f54e5f
|
||||||
|
UPLOAD_REPO_FULL_NAME: "rpcs3/rpcs3-binaries-linux"
|
||||||
- os: ubuntu-24.04
|
- os: ubuntu-24.04
|
||||||
docker_img: "rpcs3/rpcs3-ci-jammy:1.1"
|
docker_img: "rpcs3/rpcs3-ci-jammy:1.6"
|
||||||
build_sh: "/rpcs3/.ci/build-linux.sh"
|
build_sh: "/rpcs3/.ci/build-linux.sh"
|
||||||
compiler: gcc
|
compiler: gcc
|
||||||
- os: ubuntu-24.04-arm
|
- os: ubuntu-24.04-arm
|
||||||
docker_img: "rpcs3/rpcs3-ci-jammy-aarch64:1.1"
|
docker_img: "rpcs3/rpcs3-ci-jammy-aarch64:1.6"
|
||||||
build_sh: "/rpcs3/.ci/build-linux-aarch64.sh"
|
build_sh: "/rpcs3/.ci/build-linux-aarch64.sh"
|
||||||
compiler: clang
|
compiler: clang
|
||||||
UPLOAD_COMMIT_HASH: a1d35836e8d45bfc6f63c26f0a3e5d46ef622fe1
|
UPLOAD_COMMIT_HASH: a1d35836e8d45bfc6f63c26f0a3e5d46ef622fe1
|
||||||
UPLOAD_REPO_FULL_NAME: "rpcs3/rpcs3-binaries-linux-arm64"
|
UPLOAD_REPO_FULL_NAME: "rpcs3/rpcs3-binaries-linux-arm64"
|
||||||
|
- os: ubuntu-24.04-arm
|
||||||
|
docker_img: "rpcs3/rpcs3-ci-jammy-aarch64:1.6"
|
||||||
|
build_sh: "/rpcs3/.ci/build-linux-aarch64.sh"
|
||||||
|
compiler: gcc
|
||||||
name: RPCS3 Linux ${{ matrix.os }} ${{ matrix.compiler }}
|
name: RPCS3 Linux ${{ matrix.os }} ${{ matrix.compiler }}
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
env:
|
env:
|
||||||
CCACHE_DIR: ${{ github.workspace }}/ccache
|
CCACHE_DIR: ${{ github.workspace }}/ccache
|
||||||
CI_HAS_ARTIFACTS: true
|
|
||||||
DEPLOY_APPIMAGE: true
|
DEPLOY_APPIMAGE: true
|
||||||
APPDIR: "/rpcs3/build/appdir"
|
APPDIR: "/rpcs3/build/appdir"
|
||||||
ARTDIR: "/root/artifacts"
|
ARTDIR: "/root/artifacts"
|
||||||
|
@ -55,19 +60,20 @@ jobs:
|
||||||
COMPILER: ${{ matrix.compiler }}
|
COMPILER: ${{ matrix.compiler }}
|
||||||
UPLOAD_COMMIT_HASH: ${{ matrix.UPLOAD_COMMIT_HASH }}
|
UPLOAD_COMMIT_HASH: ${{ matrix.UPLOAD_COMMIT_HASH }}
|
||||||
UPLOAD_REPO_FULL_NAME: ${{ matrix.UPLOAD_REPO_FULL_NAME }}
|
UPLOAD_REPO_FULL_NAME: ${{ matrix.UPLOAD_REPO_FULL_NAME }}
|
||||||
|
RUN_UNIT_TESTS: github.event_name == 'pull_request' && 'ON' || 'OFF'
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@main
|
uses: actions/checkout@main
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Setup Cache
|
- name: Restore build Ccache
|
||||||
uses: actions/cache@main
|
uses: actions/cache/restore@main
|
||||||
|
id: restore-build-ccache
|
||||||
with:
|
with:
|
||||||
path: ${{ env.CCACHE_DIR }}
|
path: ${{ env.CCACHE_DIR }}
|
||||||
key: ${{ runner.os }}-ccache-${{ matrix.compiler }}-${{ runner.arch }}-${{github.run_id}}
|
key: ${{ runner.os }}-ccache-${{ matrix.compiler }}-${{ runner.arch }}-${{github.run_id}}
|
||||||
restore-keys: |
|
restore-keys: ${{ runner.os }}-ccache-${{ matrix.compiler }}-${{ runner.arch }}-
|
||||||
${{ runner.os }}-ccache-${{ matrix.compiler }}-${{ runner.arch }}-
|
|
||||||
|
|
||||||
- name: Docker setup and build
|
- name: Docker setup and build
|
||||||
run: |
|
run: |
|
||||||
|
@ -76,7 +82,7 @@ jobs:
|
||||||
-v $PWD:/rpcs3 \
|
-v $PWD:/rpcs3 \
|
||||||
--env-file .ci/docker.env \
|
--env-file .ci/docker.env \
|
||||||
-v ${{ env.CCACHE_DIR }}:/root/.ccache \
|
-v ${{ env.CCACHE_DIR }}:/root/.ccache \
|
||||||
-v ${{ github.workspace }}/artifacts:/root/artifacts \
|
-v ${{ env.BUILD_ARTIFACTSTAGINGDIRECTORY }}:${{ env.ARTDIR }} \
|
||||||
${{ matrix.docker_img }} \
|
${{ matrix.docker_img }} \
|
||||||
${{ matrix.build_sh }}
|
${{ matrix.build_sh }}
|
||||||
|
|
||||||
|
@ -92,8 +98,7 @@ jobs:
|
||||||
github.event_name != 'pull_request' &&
|
github.event_name != 'pull_request' &&
|
||||||
github.repository == 'RPCS3/rpcs3' &&
|
github.repository == 'RPCS3/rpcs3' &&
|
||||||
github.ref == 'refs/heads/master' &&
|
github.ref == 'refs/heads/master' &&
|
||||||
matrix.compiler == 'clang' &&
|
matrix.compiler == 'clang'
|
||||||
runner.arch == 'ARM64'
|
|
||||||
env:
|
env:
|
||||||
RPCS3_TOKEN: ${{ secrets.RPCS3_TOKEN }}
|
RPCS3_TOKEN: ${{ secrets.RPCS3_TOKEN }}
|
||||||
run: |
|
run: |
|
||||||
|
@ -103,23 +108,124 @@ jobs:
|
||||||
export AVVER="${COMM_TAG}-${COMM_COUNT}"
|
export AVVER="${COMM_TAG}-${COMM_COUNT}"
|
||||||
.ci/github-upload.sh
|
.ci/github-upload.sh
|
||||||
|
|
||||||
|
- name: Save build Ccache
|
||||||
|
if: github.ref == 'refs/heads/master'
|
||||||
|
uses: actions/cache/save@main
|
||||||
|
with:
|
||||||
|
path: ${{ env.CCACHE_DIR }}
|
||||||
|
key: ${{ steps.restore-build-ccache.outputs.cache-primary-key }}
|
||||||
|
|
||||||
|
Mac_Build:
|
||||||
|
# Only run push event on master branch of main repo, but run all PRs
|
||||||
|
if: github.event_name != 'push' || (github.repository == 'RPCS3/rpcs3' && github.ref_name == 'master')
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- name: Intel
|
||||||
|
build_sh: "arch -X86_64 .ci/build-mac.sh"
|
||||||
|
UPLOAD_COMMIT_HASH: 51ae32f468089a8169aaf1567de355ff4a3e0842
|
||||||
|
UPLOAD_REPO_FULL_NAME: rpcs3/rpcs3-binaries-mac
|
||||||
|
- name: Apple Silicon
|
||||||
|
build_sh: .ci/build-mac-arm64.sh
|
||||||
|
UPLOAD_COMMIT_HASH: 8e21bdbc40711a3fccd18fbf17b742348b0f4281
|
||||||
|
UPLOAD_REPO_FULL_NAME: rpcs3/rpcs3-binaries-mac-arm64
|
||||||
|
name: RPCS3 Mac ${{ matrix.name }}
|
||||||
|
runs-on: macos-14
|
||||||
|
env:
|
||||||
|
CCACHE_DIR: /tmp/ccache_dir
|
||||||
|
QT_VER: '6.7.3'
|
||||||
|
QT_VER_MAIN: '6'
|
||||||
|
LLVM_COMPILER_VER: '19'
|
||||||
|
RELEASE_MESSAGE: ../GitHubReleaseMessage.txt
|
||||||
|
UPLOAD_COMMIT_HASH: ${{ matrix.UPLOAD_COMMIT_HASH }}
|
||||||
|
UPLOAD_REPO_FULL_NAME: ${{ matrix.UPLOAD_REPO_FULL_NAME }}
|
||||||
|
RUN_UNIT_TESTS: github.event_name == 'pull_request' && 'ON' || 'OFF'
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@main
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Restore Build Ccache
|
||||||
|
uses: actions/cache/restore@main
|
||||||
|
id: restore-build-ccache
|
||||||
|
with:
|
||||||
|
path: ${{ env.CCACHE_DIR }}
|
||||||
|
key: ${{ runner.os }}-ccache-${{ matrix.name }}-${{github.run_id}}
|
||||||
|
restore-keys: ${{ runner.os }}-ccache-${{ matrix.name }}-
|
||||||
|
|
||||||
|
- name: Restore Qt Cache
|
||||||
|
uses: actions/cache/restore@main
|
||||||
|
id: restore-qt-cache
|
||||||
|
with:
|
||||||
|
path: /tmp/Qt
|
||||||
|
key: ${{ runner.os }}-qt-${{ matrix.name }}-${{ env.QT_VER }}
|
||||||
|
restore-keys: ${{ runner.os }}-qt-${{ matrix.name }}-${{ env.QT_VER }}
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: ${{ matrix.build_sh }}
|
||||||
|
|
||||||
|
- name: Upload artifacts
|
||||||
|
uses: actions/upload-artifact@main
|
||||||
|
with:
|
||||||
|
name: RPCS3 for Mac (${{ matrix.name }})
|
||||||
|
path: ${{ env.BUILD_ARTIFACTSTAGINGDIRECTORY }}
|
||||||
|
compression-level: 0
|
||||||
|
|
||||||
|
- name: Export Variables
|
||||||
|
run: |
|
||||||
|
while IFS='=' read -r key val; do
|
||||||
|
# Skip lines that are empty or start with '#'
|
||||||
|
[[ -z "$key" || "$key" =~ ^# ]] && continue
|
||||||
|
echo "$key=$val" >> "${{ github.env }}"
|
||||||
|
done < .ci/ci-vars.env
|
||||||
|
|
||||||
|
- name: Deploy master build to GitHub Releases
|
||||||
|
if: |
|
||||||
|
github.event_name != 'pull_request' &&
|
||||||
|
github.repository == 'RPCS3/rpcs3' &&
|
||||||
|
github.ref == 'refs/heads/master'
|
||||||
|
env:
|
||||||
|
RPCS3_TOKEN: ${{ secrets.RPCS3_TOKEN }}
|
||||||
|
run: .ci/github-upload.sh
|
||||||
|
|
||||||
|
- name: Save Build Ccache
|
||||||
|
if: github.ref == 'refs/heads/master'
|
||||||
|
uses: actions/cache/save@main
|
||||||
|
with:
|
||||||
|
path: ${{ env.CCACHE_DIR }}
|
||||||
|
key: ${{ steps.restore-build-ccache.outputs.cache-primary-key }}
|
||||||
|
|
||||||
|
- name: Save Qt Cache
|
||||||
|
if: github.ref == 'refs/heads/master'
|
||||||
|
uses: actions/cache/save@main
|
||||||
|
with:
|
||||||
|
path: /tmp/Qt
|
||||||
|
key: ${{ steps.restore-qt-cache.outputs.cache-primary-key }}
|
||||||
|
|
||||||
Windows_Build:
|
Windows_Build:
|
||||||
|
# Only run push event on master branch of main repo, but run all PRs
|
||||||
|
if: github.event_name != 'push' || (github.repository == 'RPCS3/rpcs3' && github.ref_name == 'master')
|
||||||
name: RPCS3 Windows
|
name: RPCS3 Windows
|
||||||
runs-on: windows-2025
|
runs-on: windows-2025
|
||||||
env:
|
env:
|
||||||
COMPILER: msvc
|
COMPILER: msvc
|
||||||
QT_VER_MAIN: '6'
|
QT_VER_MAIN: '6'
|
||||||
QT_VER: '6.8.2'
|
QT_VER: '6.9.1'
|
||||||
QT_VER_MSVC: 'msvc2022'
|
QT_VER_MSVC: 'msvc2022'
|
||||||
QT_DATE: '202501260838'
|
QT_DATE: '202505291653'
|
||||||
|
LLVM_VER: '19.1.7'
|
||||||
VULKAN_VER: '1.3.268.0'
|
VULKAN_VER: '1.3.268.0'
|
||||||
VULKAN_SDK_SHA: '8459ef49bd06b697115ddd3d97c9aec729e849cd775f5be70897718a9b3b9db5'
|
VULKAN_SDK_SHA: '8459ef49bd06b697115ddd3d97c9aec729e849cd775f5be70897718a9b3b9db5'
|
||||||
CCACHE_SHA: '6252f081876a9a9f700fae13a5aec5d0d486b28261d7f1f72ac11c7ad9df4da9'
|
CCACHE_SHA: '1f39f3ad5aae3fe915e99ad1302633bc8f6718e58fa7c0de2b0ba7e080f0f08c'
|
||||||
CCACHE_BIN_DIR: 'C:\ccache_bin'
|
CCACHE_BIN_DIR: 'C:\ccache_bin'
|
||||||
CCACHE_DIR: 'C:\ccache'
|
CCACHE_DIR: 'C:\ccache'
|
||||||
CCACHE_INODECACHE: 'true'
|
CCACHE_INODECACHE: 'true'
|
||||||
CCACHE_SLOPPINESS: 'time_macros'
|
CCACHE_SLOPPINESS: 'time_macros'
|
||||||
DEPS_CACHE_DIR: ./dependency_cache
|
DEPS_CACHE_DIR: ./dependency_cache
|
||||||
|
UPLOAD_COMMIT_HASH: 7d09e3be30805911226241afbb14f8cdc2eb054e
|
||||||
|
UPLOAD_REPO_FULL_NAME: "RPCS3/rpcs3-binaries-win"
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
|
@ -127,35 +233,43 @@ jobs:
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Setup NuGet
|
||||||
|
uses: nuget/setup-nuget@v2
|
||||||
|
|
||||||
|
- name: Restore NuGet packages
|
||||||
|
run: nuget restore rpcs3.sln
|
||||||
|
|
||||||
- name: Setup env
|
- name: Setup env
|
||||||
|
shell: pwsh
|
||||||
run: |
|
run: |
|
||||||
echo "QTDIR=C:\Qt\${{ env.QT_VER }}\${{ env.QT_VER_MSVC }}_64" >> ${{ github.env }}
|
echo "QTDIR=C:\Qt\${{ env.QT_VER }}\${{ env.QT_VER_MSVC }}_64" >> ${{ github.env }}
|
||||||
echo "VULKAN_SDK=C:\VulkanSDK\${{ env.VULKAN_VER }}" >> ${{ github.env }}
|
echo "VULKAN_SDK=C:\VulkanSDK\${{ env.VULKAN_VER }}" >> ${{ github.env }}
|
||||||
|
|
||||||
- name: Get Cache Keys
|
- name: Get Cache Keys
|
||||||
shell: bash
|
|
||||||
run: .ci/get_keys-windows.sh
|
run: .ci/get_keys-windows.sh
|
||||||
|
|
||||||
- name: Setup Build Ccache
|
- name: Restore Build Ccache
|
||||||
uses: actions/cache@main
|
uses: actions/cache/restore@main
|
||||||
|
id: restore-build-ccache
|
||||||
with:
|
with:
|
||||||
path: ${{ env.CCACHE_DIR }}
|
path: ${{ env.CCACHE_DIR }}
|
||||||
key: "${{ runner.os }}-ccache-${{ env.COMPILER }}-${{github.run_id}}"
|
key: "${{ runner.os }}-ccache-${{ env.COMPILER }}-${{github.run_id}}"
|
||||||
restore-keys: ${{ runner.os }}-ccache-${{ env.COMPILER }}-
|
restore-keys: ${{ runner.os }}-ccache-${{ env.COMPILER }}-
|
||||||
|
|
||||||
- name: Setup Dependencies Cache
|
- name: Restore Dependencies Cache
|
||||||
uses: actions/cache@main
|
uses: actions/cache/restore@main
|
||||||
|
id: restore-dependencies-cache
|
||||||
with:
|
with:
|
||||||
path: ${{ env.DEPS_CACHE_DIR }}
|
path: ${{ env.DEPS_CACHE_DIR }}
|
||||||
key: "${{ runner.os }}-${{ env.COMPILER }}-${{ env.QT_VER }}-${{ env.VULKAN_SDK_SHA }}-${{ env.CCACHE_SHA }}-${{ hashFiles('llvm.lock') }}-${{ hashFiles('glslang.lock') }}"
|
key: "${{ runner.os }}-${{ env.COMPILER }}-${{ env.QT_VER }}-${{ env.VULKAN_SDK_SHA }}-${{ env.CCACHE_SHA }}-${{ hashFiles('llvm.lock') }}"
|
||||||
restore-keys: ${{ runner.os }}-${{ env.COMPILER }}-
|
restore-keys: ${{ runner.os }}-${{ env.COMPILER }}-
|
||||||
|
|
||||||
- name: Download and unpack dependencies
|
- name: Download and unpack dependencies
|
||||||
shell: bash
|
run: |
|
||||||
run: .ci/setup-windows.sh
|
.ci/setup-windows.sh
|
||||||
|
.ci/setup-windows-ci-vars.sh win64 msvc
|
||||||
|
|
||||||
- name: Export Variables
|
- name: Export Variables
|
||||||
shell: bash
|
|
||||||
run: |
|
run: |
|
||||||
while IFS='=' read -r key val; do
|
while IFS='=' read -r key val; do
|
||||||
# Skip lines that are empty or start with '#'
|
# Skip lines that are empty or start with '#'
|
||||||
|
@ -167,24 +281,164 @@ jobs:
|
||||||
uses: microsoft/setup-msbuild@main
|
uses: microsoft/setup-msbuild@main
|
||||||
|
|
||||||
- name: Compile RPCS3
|
- name: Compile RPCS3
|
||||||
run: msbuild rpcs3.sln /p:Configuration=Release /p:Platform=x64 /p:CLToolPath=${{ env.CCACHE_BIN_DIR }} /p:UseMultiToolTask=true /p:CustomAfterMicrosoftCommonTargets="${{ github.workspace }}\buildfiles\msvc\ci_no_debug_info.targets"
|
shell: pwsh
|
||||||
|
run: msbuild rpcs3.sln /p:Configuration=Release /v:minimal /p:Platform=x64 /p:PreferredToolArchitecture=x64 /p:CLToolPath=${{ env.CCACHE_BIN_DIR }} /p:UseMultiToolTask=true /p:CustomAfterMicrosoftCommonTargets="${{ github.workspace }}\buildfiles\msvc\ci_only.targets"
|
||||||
|
|
||||||
|
- name: Run Unit Tests
|
||||||
|
if: github.event_name == 'pull_request'
|
||||||
|
shell: pwsh
|
||||||
|
run: build\lib\Release-x64\rpcs3_test.exe
|
||||||
|
|
||||||
- name: Pack up build artifacts
|
- name: Pack up build artifacts
|
||||||
shell: bash
|
|
||||||
run: |
|
run: |
|
||||||
mkdir -p "${{ env.BUILD_ARTIFACTSTAGINGDIRECTORY }}"
|
mkdir -p "${{ env.BUILD_ARTIFACTSTAGINGDIRECTORY }}"
|
||||||
.ci/deploy-windows.sh
|
.ci/deploy-windows.sh
|
||||||
|
|
||||||
- name: Upload artifacts (7z)
|
- name: Upload artifacts (7z)
|
||||||
#TODO: Upload artifact to release repository
|
|
||||||
#condition for release
|
|
||||||
#if: |
|
|
||||||
# github.event_name != 'pull_request' &&
|
|
||||||
# github.repository == 'RPCS3/rpcs3' &&
|
|
||||||
# github.ref == 'refs/heads/master'
|
|
||||||
uses: actions/upload-artifact@main
|
uses: actions/upload-artifact@main
|
||||||
with:
|
with:
|
||||||
name: RPCS3 for Windows (MSVC)
|
name: RPCS3 for Windows (MSVC)
|
||||||
path: ${{ env.BUILD_ARTIFACTSTAGINGDIRECTORY }}
|
path: ${{ env.BUILD_ARTIFACTSTAGINGDIRECTORY }}
|
||||||
compression-level: 0
|
compression-level: 0
|
||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
|
|
||||||
|
- name: Deploy master build to GitHub Releases
|
||||||
|
if: |
|
||||||
|
github.event_name != 'pull_request' &&
|
||||||
|
github.repository == 'RPCS3/rpcs3' &&
|
||||||
|
github.ref == 'refs/heads/master'
|
||||||
|
env:
|
||||||
|
RPCS3_TOKEN: ${{ secrets.RPCS3_TOKEN }}
|
||||||
|
run: .ci/github-upload.sh
|
||||||
|
|
||||||
|
- name: Save Build Ccache
|
||||||
|
if: github.ref == 'refs/heads/master'
|
||||||
|
uses: actions/cache/save@main
|
||||||
|
with:
|
||||||
|
path: ${{ env.CCACHE_DIR }}
|
||||||
|
key: ${{ steps.restore-build-ccache.outputs.cache-primary-key }}
|
||||||
|
|
||||||
|
- name: Save Dependencies Cache
|
||||||
|
if: github.ref == 'refs/heads/master'
|
||||||
|
uses: actions/cache/save@main
|
||||||
|
with:
|
||||||
|
path: ${{ env.DEPS_CACHE_DIR }}
|
||||||
|
key: ${{ steps.restore-dependencies-cache.outputs.cache-primary-key }}
|
||||||
|
|
||||||
|
Windows_Build_Clang:
|
||||||
|
# Only run push event on master branch of main repo, but run all PRs
|
||||||
|
if: github.event_name != 'push' || (github.repository == 'RPCS3/rpcs3' && github.ref_name == 'master')
|
||||||
|
name: RPCS3 Windows Clang
|
||||||
|
runs-on: windows-2025
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- msys2: clang64
|
||||||
|
compiler: clang
|
||||||
|
arch: win64
|
||||||
|
env:
|
||||||
|
CCACHE_DIR: 'C:\ccache'
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@main
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Setup msys2
|
||||||
|
uses: msys2/setup-msys2@v2
|
||||||
|
with:
|
||||||
|
msystem: ${{ matrix.msys2 }}
|
||||||
|
update: true
|
||||||
|
cache: true
|
||||||
|
install: |
|
||||||
|
mingw-w64-clang-x86_64-clang
|
||||||
|
mingw-w64-clang-x86_64-ccache
|
||||||
|
mingw-w64-clang-x86_64-cmake
|
||||||
|
mingw-w64-clang-x86_64-lld
|
||||||
|
mingw-w64-clang-x86_64-ninja
|
||||||
|
mingw-w64-clang-x86_64-llvm
|
||||||
|
mingw-w64-clang-x86_64-ffmpeg
|
||||||
|
mingw-w64-clang-x86_64-opencv
|
||||||
|
mingw-w64-clang-x86_64-glew
|
||||||
|
mingw-w64-clang-x86_64-vulkan
|
||||||
|
mingw-w64-clang-x86_64-vulkan-headers
|
||||||
|
mingw-w64-clang-x86_64-vulkan-loader
|
||||||
|
mingw-w64-clang-x86_64-gtest
|
||||||
|
mingw-w64-clang-x86_64-qt6-base
|
||||||
|
mingw-w64-clang-x86_64-qt6-declarative
|
||||||
|
mingw-w64-clang-x86_64-qt6-multimedia
|
||||||
|
mingw-w64-clang-x86_64-qt6-svg
|
||||||
|
base-devel
|
||||||
|
curl
|
||||||
|
git
|
||||||
|
p7zip
|
||||||
|
|
||||||
|
- name: Restore build Ccache
|
||||||
|
uses: actions/cache/restore@main
|
||||||
|
id: restore-build-ccache
|
||||||
|
with:
|
||||||
|
path: ${{ env.CCACHE_DIR }}
|
||||||
|
key: ${{ runner.os }}-ccache-${{ matrix.compiler }}-${{ runner.arch }}-${{ github.run_id }}
|
||||||
|
restore-keys: ${{ runner.os }}-ccache-${{ matrix.compiler }}-${{ runner.arch }}-
|
||||||
|
|
||||||
|
- name: Build RPCS3
|
||||||
|
shell: msys2 {0}
|
||||||
|
run: |
|
||||||
|
export CCACHE_DIR=$(cygpath -u "$CCACHE_DIR")
|
||||||
|
echo "CCACHE_DIR=$CCACHE_DIR"
|
||||||
|
.ci/setup-windows-ci-vars.sh ${{ matrix.arch }} ${{ matrix.compiler }}
|
||||||
|
.ci/build-windows-clang.sh
|
||||||
|
|
||||||
|
- name: Save build Ccache
|
||||||
|
if: github.ref == 'refs/heads/master'
|
||||||
|
uses: actions/cache/save@main
|
||||||
|
with:
|
||||||
|
path: ${{ env.CCACHE_DIR }}
|
||||||
|
key: ${{ steps.restore-build-ccache.outputs.cache-primary-key }}
|
||||||
|
|
||||||
|
- name: Upload artifacts
|
||||||
|
uses: actions/upload-artifact@main
|
||||||
|
with:
|
||||||
|
name: RPCS3 for Windows (${{ runner.arch }}, ${{ matrix.compiler }})
|
||||||
|
path: ${{ env.BUILD_ARTIFACTSTAGINGDIRECTORY }}
|
||||||
|
compression-level: 0
|
||||||
|
if-no-files-found: error
|
||||||
|
|
||||||
|
FreeBSD_Build:
|
||||||
|
# Only run push event on master branch of main repo, but run all PRs
|
||||||
|
if: github.event_name != 'push' || (github.repository == 'RPCS3/rpcs3' && github.ref_name == 'master')
|
||||||
|
name: RPCS3 FreeBSD
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
timeout-minutes: 60
|
||||||
|
env:
|
||||||
|
CCACHE_DIR: ${{ github.workspace }}/ccache
|
||||||
|
QT_VER_MAIN: '6'
|
||||||
|
LLVM_COMPILER_VER: '19'
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@main
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Restore Build Ccache
|
||||||
|
uses: actions/cache/restore@main
|
||||||
|
id: restore-build-ccache
|
||||||
|
with:
|
||||||
|
path: ${{ env.CCACHE_DIR }}
|
||||||
|
key: FreeBSD-ccache-${{github.run_id}}
|
||||||
|
restore-keys: FreeBSD-ccache-
|
||||||
|
|
||||||
|
- name: FreeBSD build
|
||||||
|
id: root
|
||||||
|
uses: vmactions/freebsd-vm@v1
|
||||||
|
with:
|
||||||
|
envs: 'QT_VER_MAIN LLVM_COMPILER_VER CCACHE_DIR'
|
||||||
|
usesh: true
|
||||||
|
run: .ci/install-freebsd.sh && .ci/build-freebsd.sh
|
||||||
|
|
||||||
|
- name: Save Build Ccache
|
||||||
|
if: github.ref == 'refs/heads/master'
|
||||||
|
uses: actions/cache/save@main
|
||||||
|
with:
|
||||||
|
path: ${{ env.CCACHE_DIR }}
|
||||||
|
key: ${{ steps.restore-build-ccache.outputs.cache-primary-key }}
|
||||||
|
|
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -35,6 +35,7 @@
|
||||||
/lib
|
/lib
|
||||||
/tmp
|
/tmp
|
||||||
/ipch
|
/ipch
|
||||||
|
/packages
|
||||||
/rpcs3/Debug
|
/rpcs3/Debug
|
||||||
/rpcs3/Release
|
/rpcs3/Release
|
||||||
|
|
||||||
|
@ -55,9 +56,6 @@
|
||||||
/bin/GuiConfigs/*.dat
|
/bin/GuiConfigs/*.dat
|
||||||
/bin/GuiConfigs/*.dat.*
|
/bin/GuiConfigs/*.dat.*
|
||||||
|
|
||||||
# Some data from git
|
|
||||||
!/bin/git/
|
|
||||||
|
|
||||||
# Visual Studio Files
|
# Visual Studio Files
|
||||||
.vs/*
|
.vs/*
|
||||||
.vscode/*
|
.vscode/*
|
||||||
|
|
8
.gitmodules
vendored
8
.gitmodules
vendored
|
@ -100,3 +100,11 @@
|
||||||
path = 3rdparty/fusion/fusion
|
path = 3rdparty/fusion/fusion
|
||||||
url = ../../xioTechnologies/Fusion.git
|
url = ../../xioTechnologies/Fusion.git
|
||||||
ignore = dirty
|
ignore = dirty
|
||||||
|
[submodule "3rdparty/discord-rpc/discord-rpc"]
|
||||||
|
path = 3rdparty/discord-rpc/discord-rpc
|
||||||
|
url = ../../Vestrel/discord-rpc
|
||||||
|
ignore = dirty
|
||||||
|
[submodule "3rdparty/GPUOpen/VulkanMemoryAllocator"]
|
||||||
|
path = 3rdparty/GPUOpen/VulkanMemoryAllocator
|
||||||
|
url = ../../GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git
|
||||||
|
ignore = dirty
|
||||||
|
|
115
3rdparty/CMakeLists.txt
vendored
115
3rdparty/CMakeLists.txt
vendored
|
@ -79,6 +79,10 @@ else()
|
||||||
# we don't have the system libusb, so we compile from submodule
|
# we don't have the system libusb, so we compile from submodule
|
||||||
unset(LIBUSB_LIBRARIES CACHE)
|
unset(LIBUSB_LIBRARIES CACHE)
|
||||||
add_subdirectory(libusb EXCLUDE_FROM_ALL)
|
add_subdirectory(libusb EXCLUDE_FROM_ALL)
|
||||||
|
|
||||||
|
if (NOT TARGET usb-1.0 AND TARGET usb-1.0-static)
|
||||||
|
add_library(usb-1.0 ALIAS usb-1.0-static)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@ -86,7 +90,6 @@ endif()
|
||||||
# hidapi
|
# hidapi
|
||||||
add_subdirectory(hidapi)
|
add_subdirectory(hidapi)
|
||||||
|
|
||||||
|
|
||||||
# glslang
|
# glslang
|
||||||
add_subdirectory(glslang EXCLUDE_FROM_ALL)
|
add_subdirectory(glslang EXCLUDE_FROM_ALL)
|
||||||
add_library(3rdparty_glslang INTERFACE)
|
add_library(3rdparty_glslang INTERFACE)
|
||||||
|
@ -99,6 +102,7 @@ add_subdirectory(yaml-cpp)
|
||||||
|
|
||||||
# OpenGL
|
# OpenGL
|
||||||
|
|
||||||
|
if (NOT ANDROID)
|
||||||
find_package(OpenGL REQUIRED OPTIONAL_COMPONENTS EGL)
|
find_package(OpenGL REQUIRED OPTIONAL_COMPONENTS EGL)
|
||||||
|
|
||||||
add_library(3rdparty_opengl INTERFACE)
|
add_library(3rdparty_opengl INTERFACE)
|
||||||
|
@ -115,7 +119,10 @@ elseif(APPLE)
|
||||||
else()
|
else()
|
||||||
target_link_libraries(3rdparty_opengl INTERFACE OpenGL::GL OpenGL::GLU OpenGL::GLX)
|
target_link_libraries(3rdparty_opengl INTERFACE OpenGL::GL OpenGL::GLU OpenGL::GLX)
|
||||||
endif()
|
endif()
|
||||||
|
else()
|
||||||
|
add_library(3rdparty_opengl INTERFACE)
|
||||||
|
target_compile_definitions(3rdparty_opengl INTERFACE WITHOUT_OPENGL=1)
|
||||||
|
endif()
|
||||||
|
|
||||||
# stblib
|
# stblib
|
||||||
add_subdirectory(stblib)
|
add_subdirectory(stblib)
|
||||||
|
@ -124,7 +131,14 @@ add_subdirectory(stblib)
|
||||||
add_subdirectory(discord-rpc)
|
add_subdirectory(discord-rpc)
|
||||||
|
|
||||||
# Cubeb
|
# Cubeb
|
||||||
|
if(USE_SYSTEM_CUBEB)
|
||||||
|
find_package(cubeb REQUIRED GLOBAL)
|
||||||
|
message(STATUS "Using system cubeb version '${cubeb_VERSION}'")
|
||||||
|
add_library(3rdparty::cubeb ALIAS cubeb::cubeb)
|
||||||
|
else()
|
||||||
|
message(STATUS "Using static cubeb from 3rdparty")
|
||||||
add_subdirectory(cubeb EXCLUDE_FROM_ALL)
|
add_subdirectory(cubeb EXCLUDE_FROM_ALL)
|
||||||
|
endif()
|
||||||
|
|
||||||
# SoundTouch
|
# SoundTouch
|
||||||
add_subdirectory(SoundTouch EXCLUDE_FROM_ALL)
|
add_subdirectory(SoundTouch EXCLUDE_FROM_ALL)
|
||||||
|
@ -181,14 +195,11 @@ if(USE_VULKAN)
|
||||||
target_compile_definitions(3rdparty_vulkan INTERFACE -DHAVE_VULKAN)
|
target_compile_definitions(3rdparty_vulkan INTERFACE -DHAVE_VULKAN)
|
||||||
target_link_libraries(3rdparty_vulkan INTERFACE Vulkan::Vulkan)
|
target_link_libraries(3rdparty_vulkan INTERFACE Vulkan::Vulkan)
|
||||||
|
|
||||||
if(UNIX AND NOT APPLE)
|
if(UNIX AND NOT APPLE AND NOT ANDROID)
|
||||||
find_package(Wayland)
|
find_package(Wayland)
|
||||||
if (WAYLAND_FOUND)
|
if (WAYLAND_FOUND)
|
||||||
target_include_directories(3rdparty_vulkan
|
target_include_directories(3rdparty_vulkan
|
||||||
INTERFACE ${WAYLAND_INCLUDE_DIR})
|
INTERFACE ${WAYLAND_INCLUDE_DIR})
|
||||||
|
|
||||||
target_compile_definitions(3rdparty_vulkan
|
|
||||||
INTERFACE -DVK_USE_PLATFORM_WAYLAND_KHR)
|
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@ -204,42 +215,68 @@ endif()
|
||||||
# AsmJit
|
# AsmJit
|
||||||
add_subdirectory(asmjit EXCLUDE_FROM_ALL)
|
add_subdirectory(asmjit EXCLUDE_FROM_ALL)
|
||||||
|
|
||||||
|
# SDL3
|
||||||
|
set(SDL3_TARGET 3rdparty_dummy_lib)
|
||||||
|
if(USE_SDL)
|
||||||
|
if(USE_SYSTEM_SDL)
|
||||||
|
find_package(SDL3)
|
||||||
|
if(SDL3_FOUND AND SDL3_VERSION VERSION_GREATER_EQUAL 3.2.0)
|
||||||
|
message(STATUS "Using system SDL3 version '${SDL3_VERSION}'")
|
||||||
|
add_library(3rdparty_sdl3 INTERFACE)
|
||||||
|
target_compile_definitions(3rdparty_sdl3 INTERFACE -DHAVE_SDL3=1)
|
||||||
|
target_link_libraries(3rdparty_sdl3 INTERFACE SDL3::SDL3)
|
||||||
|
set(SDL3_TARGET 3rdparty_sdl3)
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "SDL3 is not available on this system")
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
message(STATUS "Using static SDL3 from 3rdparty")
|
||||||
|
add_subdirectory(libsdl-org EXCLUDE_FROM_ALL)
|
||||||
|
target_compile_definitions(SDL3-static INTERFACE -DHAVE_SDL3=1)
|
||||||
|
set(SDL3_TARGET SDL3-static)
|
||||||
|
set(SDL3_DIR "${CMAKE_CURRENT_BINARY_DIR}/libsdl-org/SDL" CACHE STRING "")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
# OpenAL
|
# OpenAL
|
||||||
|
if (NOT ANDROID)
|
||||||
add_subdirectory(OpenAL EXCLUDE_FROM_ALL)
|
add_subdirectory(OpenAL EXCLUDE_FROM_ALL)
|
||||||
|
else()
|
||||||
|
add_library(3rdparty_openal INTERFACE)
|
||||||
|
target_compile_definitions(3rdparty_openal INTERFACE WITHOUT_OPENAL=1)
|
||||||
|
endif()
|
||||||
|
|
||||||
# FAudio
|
# FAudio
|
||||||
set(FAUDIO_TARGET 3rdparty_dummy_lib)
|
set(FAUDIO_TARGET 3rdparty_dummy_lib)
|
||||||
if(USE_FAUDIO)
|
if(USE_FAUDIO)
|
||||||
# FAudio depends on SDL2
|
# FAudio depends on SDL3
|
||||||
find_package(SDL2)
|
find_package(SDL3)
|
||||||
if (USE_SYSTEM_FAUDIO)
|
if (USE_SYSTEM_FAUDIO)
|
||||||
if (NOT SDL2_FOUND OR SDL2_VERSION VERSION_LESS 2.0.12)
|
if (SDL3_FOUND AND SDL3_VERSION VERSION_GREATER_EQUAL 3.2.0)
|
||||||
message(WARNING
|
|
||||||
"RPCS3: System 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")
|
message(STATUS "RPCS3: Using system FAudio")
|
||||||
find_package(FAudio REQUIRED CONFIGS FAudioConfig.cmake FAudio-config.cmake)
|
find_package(FAudio REQUIRED CONFIGS FAudioConfig.cmake FAudio-config.cmake)
|
||||||
add_library(3rdparty_FAudio INTERFACE)
|
add_library(3rdparty_FAudio INTERFACE)
|
||||||
target_link_libraries(3rdparty_FAudio INTERFACE FAudio)
|
target_link_libraries(3rdparty_FAudio INTERFACE FAudio)
|
||||||
target_compile_definitions(3rdparty_FAudio INTERFACE -DHAVE_FAUDIO)
|
target_compile_definitions(3rdparty_FAudio INTERFACE -DHAVE_FAUDIO)
|
||||||
set(FAUDIO_TARGET 3rdparty_FAudio)
|
set(FAUDIO_TARGET 3rdparty_FAudio)
|
||||||
|
else()
|
||||||
|
message(WARNING
|
||||||
|
"RPCS3: System FAudio requires SDL 3.2.0 or newer. Since a valid SDL3"
|
||||||
|
">=3.2.0 version cannot be found, building with FAudio will be skipped.")
|
||||||
|
set(USE_FAUDIO OFF CACHE BOOL "Disabled using system FAudio with SDL < 3.2.0" FORCE)
|
||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
if (NOT SDL2_FOUND OR SDL2_VERSION VERSION_LESS 2.24.0)
|
if (SDL3_FOUND AND SDL3_VERSION VERSION_GREATER_EQUAL 3.2.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")
|
message(STATUS "RPCS3: Using builtin FAudio")
|
||||||
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build shared library")
|
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build shared library")
|
||||||
add_subdirectory(FAudio EXCLUDE_FROM_ALL)
|
add_subdirectory(FAudio EXCLUDE_FROM_ALL)
|
||||||
target_compile_definitions(FAudio-static INTERFACE -DHAVE_FAUDIO)
|
target_compile_definitions(FAudio-static INTERFACE -DHAVE_FAUDIO)
|
||||||
set(FAUDIO_TARGET FAudio-static)
|
set(FAUDIO_TARGET FAudio-static)
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR
|
||||||
|
"-- RPCS3: 3rdparty FAudio requires SDL 3.2.0 or newer. Since a valid SDL3"
|
||||||
|
">=3.2.0 version cannot be found, building with FAudio will be skipped.")
|
||||||
|
set(USE_FAUDIO OFF CACHE BOOL "Disabled FAudio with SDL < 3.2.0" FORCE)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
@ -248,6 +285,7 @@ set_property(TARGET ${FAUDIO_TARGET} PROPERTY FOLDER "3rdparty/")
|
||||||
|
|
||||||
|
|
||||||
# FFMPEG
|
# FFMPEG
|
||||||
|
if(NOT ANDROID)
|
||||||
add_library(3rdparty_ffmpeg INTERFACE)
|
add_library(3rdparty_ffmpeg INTERFACE)
|
||||||
|
|
||||||
# Select the version of ffmpeg to use, default is builtin
|
# Select the version of ffmpeg to use, default is builtin
|
||||||
|
@ -273,6 +311,10 @@ else()
|
||||||
find_library(FFMPEG_LIB_SWSCALE swscale 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)
|
find_library(FFMPEG_LIB_SWRESAMPLE swresample PATHS ${FFMPEG_LIB_DIR} NO_DEFAULT_PATH)
|
||||||
|
|
||||||
|
if (FFMPEG_LIB_AVFORMAT MATCHES "FFMPEG_LIB_AVFORMAT-NOTFOUND")
|
||||||
|
message(FATAL_ERROR "@#$%! FFMPEG NOT FOUND! ${FFMPEG_LIB_DIR}")
|
||||||
|
endif()
|
||||||
|
|
||||||
target_link_libraries(3rdparty_ffmpeg
|
target_link_libraries(3rdparty_ffmpeg
|
||||||
INTERFACE
|
INTERFACE
|
||||||
${FFMPEG_LIB_AVFORMAT}
|
${FFMPEG_LIB_AVFORMAT}
|
||||||
|
@ -281,14 +323,14 @@ else()
|
||||||
${FFMPEG_LIB_SWSCALE}
|
${FFMPEG_LIB_SWSCALE}
|
||||||
${FFMPEG_LIB_SWRESAMPLE}
|
${FFMPEG_LIB_SWRESAMPLE}
|
||||||
)
|
)
|
||||||
|
|
||||||
target_include_directories(3rdparty_ffmpeg INTERFACE "ffmpeg/include")
|
target_include_directories(3rdparty_ffmpeg INTERFACE "ffmpeg/include")
|
||||||
endif()
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
# GLEW
|
# GLEW
|
||||||
add_library(3rdparty_glew INTERFACE)
|
add_library(3rdparty_glew INTERFACE)
|
||||||
if(NOT MSVC)
|
if(NOT MSVC AND NOT ANDROID)
|
||||||
find_package(GLEW REQUIRED)
|
find_package(GLEW REQUIRED)
|
||||||
target_link_libraries(3rdparty_glew INTERFACE GLEW::GLEW)
|
target_link_libraries(3rdparty_glew INTERFACE GLEW::GLEW)
|
||||||
endif()
|
endif()
|
||||||
|
@ -303,29 +345,6 @@ add_subdirectory(wolfssl EXCLUDE_FROM_ALL)
|
||||||
# CURL
|
# CURL
|
||||||
add_subdirectory(curl EXCLUDE_FROM_ALL)
|
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_link_libraries(3rdparty_sdl2 INTERFACE SDL2::SDL2)
|
|
||||||
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
|
# MINIUPNP
|
||||||
add_subdirectory(miniupnp EXCLUDE_FROM_ALL)
|
add_subdirectory(miniupnp EXCLUDE_FROM_ALL)
|
||||||
|
|
||||||
|
@ -365,7 +384,7 @@ add_library(3rdparty::glew ALIAS 3rdparty_glew)
|
||||||
add_library(3rdparty::wolfssl ALIAS wolfssl)
|
add_library(3rdparty::wolfssl ALIAS wolfssl)
|
||||||
add_library(3rdparty::libcurl ALIAS 3rdparty_libcurl)
|
add_library(3rdparty::libcurl ALIAS 3rdparty_libcurl)
|
||||||
add_library(3rdparty::soundtouch ALIAS soundtouch)
|
add_library(3rdparty::soundtouch ALIAS soundtouch)
|
||||||
add_library(3rdparty::sdl2 ALIAS ${SDL2_TARGET})
|
add_library(3rdparty::sdl3 ALIAS ${SDL3_TARGET})
|
||||||
add_library(3rdparty::miniupnpc ALIAS libminiupnpc-static)
|
add_library(3rdparty::miniupnpc ALIAS libminiupnpc-static)
|
||||||
add_library(3rdparty::rtmidi ALIAS rtmidi)
|
add_library(3rdparty::rtmidi ALIAS rtmidi)
|
||||||
add_library(3rdparty::opencv ALIAS ${OPENCV_TARGET})
|
add_library(3rdparty::opencv ALIAS ${OPENCV_TARGET})
|
||||||
|
|
2
3rdparty/FAudio
vendored
2
3rdparty/FAudio
vendored
|
@ -1 +1 @@
|
||||||
Subproject commit af74e661c1bd8b105840d14485cc01d9c782b513
|
Subproject commit e6ddfabab2efbc8765750039634fe5e24ac31205
|
51
3rdparty/GL/glext.h
vendored
51
3rdparty/GL/glext.h
vendored
|
@ -32,7 +32,7 @@ extern "C" {
|
||||||
#define GLAPI extern
|
#define GLAPI extern
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define GL_GLEXT_VERSION 20220530
|
#define GL_GLEXT_VERSION 20250203
|
||||||
|
|
||||||
#include <KHR/khrplatform.h>
|
#include <KHR/khrplatform.h>
|
||||||
|
|
||||||
|
@ -5397,12 +5397,12 @@ typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severi
|
||||||
typedef void (APIENTRYP PFNGLDEBUGMESSAGEENABLEAMDPROC) (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
|
typedef void (APIENTRYP PFNGLDEBUGMESSAGEENABLEAMDPROC) (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
|
||||||
typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTAMDPROC) (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf);
|
typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTAMDPROC) (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf);
|
||||||
typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKAMDPROC) (GLDEBUGPROCAMD callback, void *userParam);
|
typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKAMDPROC) (GLDEBUGPROCAMD callback, void *userParam);
|
||||||
typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGAMDPROC) (GLuint count, GLsizei bufSize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message);
|
typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGAMDPROC) (GLuint count, GLsizei bufSize, GLenum *categories, GLenum *severities, GLuint *ids, GLsizei *lengths, GLchar *message);
|
||||||
#ifdef GL_GLEXT_PROTOTYPES
|
#ifdef GL_GLEXT_PROTOTYPES
|
||||||
GLAPI void APIENTRY glDebugMessageEnableAMD (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
|
GLAPI void APIENTRY glDebugMessageEnableAMD (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
|
||||||
GLAPI void APIENTRY glDebugMessageInsertAMD (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf);
|
GLAPI void APIENTRY glDebugMessageInsertAMD (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf);
|
||||||
GLAPI void APIENTRY glDebugMessageCallbackAMD (GLDEBUGPROCAMD callback, void *userParam);
|
GLAPI void APIENTRY glDebugMessageCallbackAMD (GLDEBUGPROCAMD callback, void *userParam);
|
||||||
GLAPI GLuint APIENTRY glGetDebugMessageLogAMD (GLuint count, GLsizei bufSize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message);
|
GLAPI GLuint APIENTRY glGetDebugMessageLogAMD (GLuint count, GLsizei bufSize, GLenum *categories, GLenum *severities, GLuint *ids, GLsizei *lengths, GLchar *message);
|
||||||
#endif
|
#endif
|
||||||
#endif /* GL_AMD_debug_output */
|
#endif /* GL_AMD_debug_output */
|
||||||
|
|
||||||
|
@ -7370,6 +7370,16 @@ GLAPI void APIENTRY glBlitFramebufferEXT (GLint srcX0, GLint srcY0, GLint srcX1,
|
||||||
#endif
|
#endif
|
||||||
#endif /* GL_EXT_framebuffer_blit */
|
#endif /* GL_EXT_framebuffer_blit */
|
||||||
|
|
||||||
|
#ifndef GL_EXT_framebuffer_blit_layers
|
||||||
|
#define GL_EXT_framebuffer_blit_layers 1
|
||||||
|
typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERLAYERSEXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
|
||||||
|
typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERLAYEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint srcLayer, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLint dstLayer, GLbitfield mask, GLenum filter);
|
||||||
|
#ifdef GL_GLEXT_PROTOTYPES
|
||||||
|
GLAPI void APIENTRY glBlitFramebufferLayersEXT (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
|
||||||
|
GLAPI void APIENTRY glBlitFramebufferLayerEXT (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint srcLayer, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLint dstLayer, GLbitfield mask, GLenum filter);
|
||||||
|
#endif
|
||||||
|
#endif /* GL_EXT_framebuffer_blit_layers */
|
||||||
|
|
||||||
#ifndef GL_EXT_framebuffer_multisample
|
#ifndef GL_EXT_framebuffer_multisample
|
||||||
#define GL_EXT_framebuffer_multisample 1
|
#define GL_EXT_framebuffer_multisample 1
|
||||||
#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB
|
#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB
|
||||||
|
@ -9394,6 +9404,11 @@ GLAPI void APIENTRY glResizeBuffersMESA (void);
|
||||||
#define GL_MESA_shader_integer_functions 1
|
#define GL_MESA_shader_integer_functions 1
|
||||||
#endif /* GL_MESA_shader_integer_functions */
|
#endif /* GL_MESA_shader_integer_functions */
|
||||||
|
|
||||||
|
#ifndef GL_MESA_texture_const_bandwidth
|
||||||
|
#define GL_MESA_texture_const_bandwidth 1
|
||||||
|
#define GL_CONST_BW_TILING_MESA 0x8BBE
|
||||||
|
#endif /* GL_MESA_texture_const_bandwidth */
|
||||||
|
|
||||||
#ifndef GL_MESA_tile_raster_order
|
#ifndef GL_MESA_tile_raster_order
|
||||||
#define GL_MESA_tile_raster_order 1
|
#define GL_MESA_tile_raster_order 1
|
||||||
#define GL_TILE_RASTER_ORDER_FIXED_MESA 0x8BB8
|
#define GL_TILE_RASTER_ORDER_FIXED_MESA 0x8BB8
|
||||||
|
@ -10248,12 +10263,6 @@ typedef void (APIENTRYP PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalfNV s,
|
||||||
typedef void (APIENTRYP PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalfNV *v);
|
typedef void (APIENTRYP PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalfNV *v);
|
||||||
typedef void (APIENTRYP PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);
|
typedef void (APIENTRYP PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);
|
||||||
typedef void (APIENTRYP PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalfNV *v);
|
typedef void (APIENTRYP PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalfNV *v);
|
||||||
typedef void (APIENTRYP PFNGLFOGCOORDHNVPROC) (GLhalfNV fog);
|
|
||||||
typedef void (APIENTRYP PFNGLFOGCOORDHVNVPROC) (const GLhalfNV *fog);
|
|
||||||
typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue);
|
|
||||||
typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalfNV *v);
|
|
||||||
typedef void (APIENTRYP PFNGLVERTEXWEIGHTHNVPROC) (GLhalfNV weight);
|
|
||||||
typedef void (APIENTRYP PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalfNV *weight);
|
|
||||||
typedef void (APIENTRYP PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalfNV x);
|
typedef void (APIENTRYP PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalfNV x);
|
||||||
typedef void (APIENTRYP PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalfNV *v);
|
typedef void (APIENTRYP PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalfNV *v);
|
||||||
typedef void (APIENTRYP PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y);
|
typedef void (APIENTRYP PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y);
|
||||||
|
@ -10266,6 +10275,12 @@ typedef void (APIENTRYP PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, c
|
||||||
typedef void (APIENTRYP PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);
|
typedef void (APIENTRYP PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);
|
||||||
typedef void (APIENTRYP PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);
|
typedef void (APIENTRYP PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);
|
||||||
typedef void (APIENTRYP PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);
|
typedef void (APIENTRYP PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);
|
||||||
|
typedef void (APIENTRYP PFNGLFOGCOORDHNVPROC) (GLhalfNV fog);
|
||||||
|
typedef void (APIENTRYP PFNGLFOGCOORDHVNVPROC) (const GLhalfNV *fog);
|
||||||
|
typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue);
|
||||||
|
typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalfNV *v);
|
||||||
|
typedef void (APIENTRYP PFNGLVERTEXWEIGHTHNVPROC) (GLhalfNV weight);
|
||||||
|
typedef void (APIENTRYP PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalfNV *weight);
|
||||||
#ifdef GL_GLEXT_PROTOTYPES
|
#ifdef GL_GLEXT_PROTOTYPES
|
||||||
GLAPI void APIENTRY glVertex2hNV (GLhalfNV x, GLhalfNV y);
|
GLAPI void APIENTRY glVertex2hNV (GLhalfNV x, GLhalfNV y);
|
||||||
GLAPI void APIENTRY glVertex2hvNV (const GLhalfNV *v);
|
GLAPI void APIENTRY glVertex2hvNV (const GLhalfNV *v);
|
||||||
|
@ -10295,12 +10310,6 @@ GLAPI void APIENTRY glMultiTexCoord3hNV (GLenum target, GLhalfNV s, GLhalfNV t,
|
||||||
GLAPI void APIENTRY glMultiTexCoord3hvNV (GLenum target, const GLhalfNV *v);
|
GLAPI void APIENTRY glMultiTexCoord3hvNV (GLenum target, const GLhalfNV *v);
|
||||||
GLAPI void APIENTRY glMultiTexCoord4hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);
|
GLAPI void APIENTRY glMultiTexCoord4hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);
|
||||||
GLAPI void APIENTRY glMultiTexCoord4hvNV (GLenum target, const GLhalfNV *v);
|
GLAPI void APIENTRY glMultiTexCoord4hvNV (GLenum target, const GLhalfNV *v);
|
||||||
GLAPI void APIENTRY glFogCoordhNV (GLhalfNV fog);
|
|
||||||
GLAPI void APIENTRY glFogCoordhvNV (const GLhalfNV *fog);
|
|
||||||
GLAPI void APIENTRY glSecondaryColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue);
|
|
||||||
GLAPI void APIENTRY glSecondaryColor3hvNV (const GLhalfNV *v);
|
|
||||||
GLAPI void APIENTRY glVertexWeighthNV (GLhalfNV weight);
|
|
||||||
GLAPI void APIENTRY glVertexWeighthvNV (const GLhalfNV *weight);
|
|
||||||
GLAPI void APIENTRY glVertexAttrib1hNV (GLuint index, GLhalfNV x);
|
GLAPI void APIENTRY glVertexAttrib1hNV (GLuint index, GLhalfNV x);
|
||||||
GLAPI void APIENTRY glVertexAttrib1hvNV (GLuint index, const GLhalfNV *v);
|
GLAPI void APIENTRY glVertexAttrib1hvNV (GLuint index, const GLhalfNV *v);
|
||||||
GLAPI void APIENTRY glVertexAttrib2hNV (GLuint index, GLhalfNV x, GLhalfNV y);
|
GLAPI void APIENTRY glVertexAttrib2hNV (GLuint index, GLhalfNV x, GLhalfNV y);
|
||||||
|
@ -10313,6 +10322,12 @@ GLAPI void APIENTRY glVertexAttribs1hvNV (GLuint index, GLsizei n, const GLhalfN
|
||||||
GLAPI void APIENTRY glVertexAttribs2hvNV (GLuint index, GLsizei n, const GLhalfNV *v);
|
GLAPI void APIENTRY glVertexAttribs2hvNV (GLuint index, GLsizei n, const GLhalfNV *v);
|
||||||
GLAPI void APIENTRY glVertexAttribs3hvNV (GLuint index, GLsizei n, const GLhalfNV *v);
|
GLAPI void APIENTRY glVertexAttribs3hvNV (GLuint index, GLsizei n, const GLhalfNV *v);
|
||||||
GLAPI void APIENTRY glVertexAttribs4hvNV (GLuint index, GLsizei n, const GLhalfNV *v);
|
GLAPI void APIENTRY glVertexAttribs4hvNV (GLuint index, GLsizei n, const GLhalfNV *v);
|
||||||
|
GLAPI void APIENTRY glFogCoordhNV (GLhalfNV fog);
|
||||||
|
GLAPI void APIENTRY glFogCoordhvNV (const GLhalfNV *fog);
|
||||||
|
GLAPI void APIENTRY glSecondaryColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue);
|
||||||
|
GLAPI void APIENTRY glSecondaryColor3hvNV (const GLhalfNV *v);
|
||||||
|
GLAPI void APIENTRY glVertexWeighthNV (GLhalfNV weight);
|
||||||
|
GLAPI void APIENTRY glVertexWeighthvNV (const GLhalfNV *weight);
|
||||||
#endif
|
#endif
|
||||||
#endif /* GL_NV_half_float */
|
#endif /* GL_NV_half_float */
|
||||||
|
|
||||||
|
@ -11449,6 +11464,10 @@ GLAPI void APIENTRY glDrawTransformFeedbackNV (GLenum mode, GLuint id);
|
||||||
#endif
|
#endif
|
||||||
#endif /* GL_NV_transform_feedback2 */
|
#endif /* GL_NV_transform_feedback2 */
|
||||||
|
|
||||||
|
#ifndef GL_NV_uniform_buffer_std430_layout
|
||||||
|
#define GL_NV_uniform_buffer_std430_layout 1
|
||||||
|
#endif /* GL_NV_uniform_buffer_std430_layout */
|
||||||
|
|
||||||
#ifndef GL_NV_uniform_buffer_unified_memory
|
#ifndef GL_NV_uniform_buffer_unified_memory
|
||||||
#define GL_NV_uniform_buffer_unified_memory 1
|
#define GL_NV_uniform_buffer_unified_memory 1
|
||||||
#define GL_UNIFORM_BUFFER_UNIFIED_NV 0x936E
|
#define GL_UNIFORM_BUFFER_UNIFIED_NV 0x936E
|
||||||
|
@ -11964,8 +11983,10 @@ GLAPI void APIENTRY glViewportSwizzleNV (GLuint index, GLenum swizzlex, GLenum s
|
||||||
#define GL_MAX_VIEWS_OVR 0x9631
|
#define GL_MAX_VIEWS_OVR 0x9631
|
||||||
#define GL_FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR 0x9633
|
#define GL_FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR 0x9633
|
||||||
typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews);
|
typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews);
|
||||||
|
typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews);
|
||||||
#ifdef GL_GLEXT_PROTOTYPES
|
#ifdef GL_GLEXT_PROTOTYPES
|
||||||
GLAPI void APIENTRY glFramebufferTextureMultiviewOVR (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews);
|
GLAPI void APIENTRY glFramebufferTextureMultiviewOVR (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews);
|
||||||
|
GLAPI void APIENTRY glNamedFramebufferTextureMultiviewOVR (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews);
|
||||||
#endif
|
#endif
|
||||||
#endif /* GL_OVR_multiview */
|
#endif /* GL_OVR_multiview */
|
||||||
|
|
||||||
|
|
1
3rdparty/GPUOpen/VulkanMemoryAllocator
vendored
Submodule
1
3rdparty/GPUOpen/VulkanMemoryAllocator
vendored
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 1d8f600fd424278486eade7ed3e877c99f0846b1
|
18120
3rdparty/GPUOpen/include/vk_mem_alloc.h
vendored
18120
3rdparty/GPUOpen/include/vk_mem_alloc.h
vendored
File diff suppressed because it is too large
Load diff
3
3rdparty/MoltenVK/CMakeLists.txt
vendored
3
3rdparty/MoltenVK/CMakeLists.txt
vendored
|
@ -1,10 +1,9 @@
|
||||||
cmake_minimum_required(VERSION 2.8.12)
|
|
||||||
project(moltenvk NONE)
|
project(moltenvk NONE)
|
||||||
include(ExternalProject)
|
include(ExternalProject)
|
||||||
|
|
||||||
ExternalProject_Add(moltenvk
|
ExternalProject_Add(moltenvk
|
||||||
GIT_REPOSITORY https://github.com/KhronosGroup/MoltenVK.git
|
GIT_REPOSITORY https://github.com/KhronosGroup/MoltenVK.git
|
||||||
GIT_TAG 81541f6
|
GIT_TAG 49b97f2
|
||||||
BUILD_IN_SOURCE 1
|
BUILD_IN_SOURCE 1
|
||||||
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK
|
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK
|
||||||
CONFIGURE_COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK/fetchDependencies" --macos
|
CONFIGURE_COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK/fetchDependencies" --macos
|
||||||
|
|
1
3rdparty/OpenAL/CMakeLists.txt
vendored
1
3rdparty/OpenAL/CMakeLists.txt
vendored
|
@ -11,6 +11,7 @@ if(USE_SYSTEM_OPENAL)
|
||||||
else()
|
else()
|
||||||
option(ALSOFT_UTILS "Build utility programs" OFF)
|
option(ALSOFT_UTILS "Build utility programs" OFF)
|
||||||
option(ALSOFT_EXAMPLES "Build example programs" OFF)
|
option(ALSOFT_EXAMPLES "Build example programs" OFF)
|
||||||
|
set(LIBTYPE "STATIC")
|
||||||
add_subdirectory(openal-soft EXCLUDE_FROM_ALL)
|
add_subdirectory(openal-soft EXCLUDE_FROM_ALL)
|
||||||
add_library(3rdparty_openal INTERFACE)
|
add_library(3rdparty_openal INTERFACE)
|
||||||
target_link_libraries(3rdparty_openal INTERFACE OpenAL::OpenAL)
|
target_link_libraries(3rdparty_openal INTERFACE OpenAL::OpenAL)
|
||||||
|
|
2
3rdparty/OpenAL/openal-soft
vendored
2
3rdparty/OpenAL/openal-soft
vendored
|
@ -1 +1 @@
|
||||||
Subproject commit 90191edd20bb877c5cbddfdac7ec0fe49ad93727
|
Subproject commit dc7d7054a5b4f3bec1dc23a42fd616a0847af948
|
2
3rdparty/SoundTouch/soundtouch
vendored
2
3rdparty/SoundTouch/soundtouch
vendored
|
@ -1 +1 @@
|
||||||
Subproject commit 394e1f58b23dc80599214d2e9b6a5e0dfd0bbe07
|
Subproject commit 3982730833b6daefe77dcfb32b5c282851640c17
|
4
3rdparty/curl/CMakeLists.txt
vendored
4
3rdparty/curl/CMakeLists.txt
vendored
|
@ -26,8 +26,8 @@ else()
|
||||||
endif()
|
endif()
|
||||||
set(CURL_USE_LIBSSH2 OFF CACHE BOOL "Use libSSH2")
|
set(CURL_USE_LIBSSH2 OFF CACHE BOOL "Use libSSH2")
|
||||||
set(CURL_USE_LIBPSL OFF CACHE BOOL "Use libPSL")
|
set(CURL_USE_LIBPSL OFF CACHE BOOL "Use libPSL")
|
||||||
|
option(BUILD_TESTING "Build tests" OFF)
|
||||||
set(CURL_DISABLE_TESTS ON)
|
option(BUILD_EXAMPLES "Build libcurl examples" OFF)
|
||||||
|
|
||||||
add_subdirectory(curl EXCLUDE_FROM_ALL)
|
add_subdirectory(curl EXCLUDE_FROM_ALL)
|
||||||
|
|
||||||
|
|
2
3rdparty/curl/curl
vendored
2
3rdparty/curl/curl
vendored
|
@ -1 +1 @@
|
||||||
Subproject commit 57495c64871d18905a0941db9196ef90bafe9a29
|
Subproject commit fdb8a789d2b446b77bd7cdd2eff95f6cbc814cf4
|
71
3rdparty/curl/libcurl.vcxproj
vendored
71
3rdparty/curl/libcurl.vcxproj
vendored
|
@ -62,8 +62,8 @@
|
||||||
<ClCompile Include="curl\lib\altsvc.c" />
|
<ClCompile Include="curl\lib\altsvc.c" />
|
||||||
<ClCompile Include="curl\lib\amigaos.c" />
|
<ClCompile Include="curl\lib\amigaos.c" />
|
||||||
<ClCompile Include="curl\lib\asyn-ares.c" />
|
<ClCompile Include="curl\lib\asyn-ares.c" />
|
||||||
<ClCompile Include="curl\lib\asyn-thread.c" />
|
<ClCompile Include="curl\lib\asyn-base.c" />
|
||||||
<ClCompile Include="curl\lib\base64.c" />
|
<ClCompile Include="curl\lib\asyn-thrdd.c" />
|
||||||
<ClCompile Include="curl\lib\bufq.c" />
|
<ClCompile Include="curl\lib\bufq.c" />
|
||||||
<ClCompile Include="curl\lib\bufref.c" />
|
<ClCompile Include="curl\lib\bufref.c" />
|
||||||
<ClCompile Include="curl\lib\cf-h1-proxy.c" />
|
<ClCompile Include="curl\lib\cf-h1-proxy.c" />
|
||||||
|
@ -76,6 +76,18 @@
|
||||||
<ClCompile Include="curl\lib\connect.c" />
|
<ClCompile Include="curl\lib\connect.c" />
|
||||||
<ClCompile Include="curl\lib\content_encoding.c" />
|
<ClCompile Include="curl\lib\content_encoding.c" />
|
||||||
<ClCompile Include="curl\lib\cookie.c" />
|
<ClCompile Include="curl\lib\cookie.c" />
|
||||||
|
<ClCompile Include="curl\lib\cshutdn.c" />
|
||||||
|
<ClCompile Include="curl\lib\curlx\base64.c" />
|
||||||
|
<ClCompile Include="curl\lib\curlx\dynbuf.c" />
|
||||||
|
<ClCompile Include="curl\lib\curlx\inet_pton.c" />
|
||||||
|
<ClCompile Include="curl\lib\curlx\multibyte.c" />
|
||||||
|
<ClCompile Include="curl\lib\curlx\nonblock.c" />
|
||||||
|
<ClCompile Include="curl\lib\curlx\strparse.c" />
|
||||||
|
<ClCompile Include="curl\lib\curlx\timediff.c" />
|
||||||
|
<ClCompile Include="curl\lib\curlx\timeval.c" />
|
||||||
|
<ClCompile Include="curl\lib\curlx\version_win32.c" />
|
||||||
|
<ClCompile Include="curl\lib\curlx\warnless.c" />
|
||||||
|
<ClCompile Include="curl\lib\curlx\winapi.c" />
|
||||||
<ClCompile Include="curl\lib\curl_addrinfo.c" />
|
<ClCompile Include="curl\lib\curl_addrinfo.c" />
|
||||||
<ClCompile Include="curl\lib\curl_des.c" />
|
<ClCompile Include="curl\lib\curl_des.c" />
|
||||||
<ClCompile Include="curl\lib\curl_endian.c" />
|
<ClCompile Include="curl\lib\curl_endian.c" />
|
||||||
|
@ -84,7 +96,6 @@
|
||||||
<ClCompile Include="curl\lib\curl_get_line.c" />
|
<ClCompile Include="curl\lib\curl_get_line.c" />
|
||||||
<ClCompile Include="curl\lib\curl_gssapi.c" />
|
<ClCompile Include="curl\lib\curl_gssapi.c" />
|
||||||
<ClCompile Include="curl\lib\curl_memrchr.c" />
|
<ClCompile Include="curl\lib\curl_memrchr.c" />
|
||||||
<ClCompile Include="curl\lib\curl_multibyte.c" />
|
|
||||||
<ClCompile Include="curl\lib\curl_ntlm_core.c" />
|
<ClCompile Include="curl\lib\curl_ntlm_core.c" />
|
||||||
<ClCompile Include="curl\lib\curl_range.c" />
|
<ClCompile Include="curl\lib\curl_range.c" />
|
||||||
<ClCompile Include="curl\lib\curl_rtmp.c" />
|
<ClCompile Include="curl\lib\curl_rtmp.c" />
|
||||||
|
@ -94,14 +105,16 @@
|
||||||
<ClCompile Include="curl\lib\curl_threads.c" />
|
<ClCompile Include="curl\lib\curl_threads.c" />
|
||||||
<ClCompile Include="curl\lib\curl_trc.c" />
|
<ClCompile Include="curl\lib\curl_trc.c" />
|
||||||
<ClCompile Include="curl\lib\cw-out.c" />
|
<ClCompile Include="curl\lib\cw-out.c" />
|
||||||
|
<ClCompile Include="curl\lib\cw-pause.c" />
|
||||||
<ClCompile Include="curl\lib\dict.c" />
|
<ClCompile Include="curl\lib\dict.c" />
|
||||||
|
<ClCompile Include="curl\lib\dllmain.c" />
|
||||||
<ClCompile Include="curl\lib\doh.c" />
|
<ClCompile Include="curl\lib\doh.c" />
|
||||||
<ClCompile Include="curl\lib\dynbuf.c" />
|
|
||||||
<ClCompile Include="curl\lib\dynhds.c" />
|
<ClCompile Include="curl\lib\dynhds.c" />
|
||||||
<ClCompile Include="curl\lib\easy.c" />
|
<ClCompile Include="curl\lib\easy.c" />
|
||||||
<ClCompile Include="curl\lib\easygetopt.c" />
|
<ClCompile Include="curl\lib\easygetopt.c" />
|
||||||
<ClCompile Include="curl\lib\easyoptions.c" />
|
<ClCompile Include="curl\lib\easyoptions.c" />
|
||||||
<ClCompile Include="curl\lib\escape.c" />
|
<ClCompile Include="curl\lib\escape.c" />
|
||||||
|
<ClCompile Include="curl\lib\fake_addrinfo.c" />
|
||||||
<ClCompile Include="curl\lib\file.c" />
|
<ClCompile Include="curl\lib\file.c" />
|
||||||
<ClCompile Include="curl\lib\fileinfo.c" />
|
<ClCompile Include="curl\lib\fileinfo.c" />
|
||||||
<ClCompile Include="curl\lib\fopen.c" />
|
<ClCompile Include="curl\lib\fopen.c" />
|
||||||
|
@ -114,11 +127,9 @@
|
||||||
<ClCompile Include="curl\lib\hash.c" />
|
<ClCompile Include="curl\lib\hash.c" />
|
||||||
<ClCompile Include="curl\lib\headers.c" />
|
<ClCompile Include="curl\lib\headers.c" />
|
||||||
<ClCompile Include="curl\lib\hmac.c" />
|
<ClCompile Include="curl\lib\hmac.c" />
|
||||||
<ClCompile Include="curl\lib\hostasyn.c" />
|
|
||||||
<ClCompile Include="curl\lib\hostip.c" />
|
<ClCompile Include="curl\lib\hostip.c" />
|
||||||
<ClCompile Include="curl\lib\hostip4.c" />
|
<ClCompile Include="curl\lib\hostip4.c" />
|
||||||
<ClCompile Include="curl\lib\hostip6.c" />
|
<ClCompile Include="curl\lib\hostip6.c" />
|
||||||
<ClCompile Include="curl\lib\hostsyn.c" />
|
|
||||||
<ClCompile Include="curl\lib\hsts.c" />
|
<ClCompile Include="curl\lib\hsts.c" />
|
||||||
<ClCompile Include="curl\lib\http.c" />
|
<ClCompile Include="curl\lib\http.c" />
|
||||||
<ClCompile Include="curl\lib\http1.c" />
|
<ClCompile Include="curl\lib\http1.c" />
|
||||||
|
@ -134,10 +145,10 @@
|
||||||
<ClCompile Include="curl\lib\if2ip.c" />
|
<ClCompile Include="curl\lib\if2ip.c" />
|
||||||
<ClCompile Include="curl\lib\imap.c" />
|
<ClCompile Include="curl\lib\imap.c" />
|
||||||
<ClCompile Include="curl\lib\inet_ntop.c" />
|
<ClCompile Include="curl\lib\inet_ntop.c" />
|
||||||
<ClCompile Include="curl\lib\inet_pton.c" />
|
|
||||||
<ClCompile Include="curl\lib\krb5.c" />
|
<ClCompile Include="curl\lib\krb5.c" />
|
||||||
<ClCompile Include="curl\lib\ldap.c" />
|
<ClCompile Include="curl\lib\ldap.c" />
|
||||||
<ClCompile Include="curl\lib\llist.c" />
|
<ClCompile Include="curl\lib\llist.c" />
|
||||||
|
<ClCompile Include="curl\lib\macos.c" />
|
||||||
<ClCompile Include="curl\lib\md4.c" />
|
<ClCompile Include="curl\lib\md4.c" />
|
||||||
<ClCompile Include="curl\lib\md5.c" />
|
<ClCompile Include="curl\lib\md5.c" />
|
||||||
<ClCompile Include="curl\lib\memdebug.c" />
|
<ClCompile Include="curl\lib\memdebug.c" />
|
||||||
|
@ -145,8 +156,8 @@
|
||||||
<ClCompile Include="curl\lib\mprintf.c" />
|
<ClCompile Include="curl\lib\mprintf.c" />
|
||||||
<ClCompile Include="curl\lib\mqtt.c" />
|
<ClCompile Include="curl\lib\mqtt.c" />
|
||||||
<ClCompile Include="curl\lib\multi.c" />
|
<ClCompile Include="curl\lib\multi.c" />
|
||||||
|
<ClCompile Include="curl\lib\multi_ev.c" />
|
||||||
<ClCompile Include="curl\lib\netrc.c" />
|
<ClCompile Include="curl\lib\netrc.c" />
|
||||||
<ClCompile Include="curl\lib\nonblock.c" />
|
|
||||||
<ClCompile Include="curl\lib\noproxy.c" />
|
<ClCompile Include="curl\lib\noproxy.c" />
|
||||||
<ClCompile Include="curl\lib\openldap.c" />
|
<ClCompile Include="curl\lib\openldap.c" />
|
||||||
<ClCompile Include="curl\lib\parsedate.c" />
|
<ClCompile Include="curl\lib\parsedate.c" />
|
||||||
|
@ -174,21 +185,20 @@
|
||||||
<ClCompile Include="curl\lib\splay.c" />
|
<ClCompile Include="curl\lib\splay.c" />
|
||||||
<ClCompile Include="curl\lib\strcase.c" />
|
<ClCompile Include="curl\lib\strcase.c" />
|
||||||
<ClCompile Include="curl\lib\strdup.c" />
|
<ClCompile Include="curl\lib\strdup.c" />
|
||||||
|
<ClCompile Include="curl\lib\strequal.c" />
|
||||||
<ClCompile Include="curl\lib\strerror.c" />
|
<ClCompile Include="curl\lib\strerror.c" />
|
||||||
<ClCompile Include="curl\lib\strparse.c" />
|
|
||||||
<ClCompile Include="curl\lib\strtok.c" />
|
|
||||||
<ClCompile Include="curl\lib\strtoofft.c" />
|
|
||||||
<ClCompile Include="curl\lib\system_win32.c" />
|
<ClCompile Include="curl\lib\system_win32.c" />
|
||||||
<ClCompile Include="curl\lib\telnet.c" />
|
<ClCompile Include="curl\lib\telnet.c" />
|
||||||
<ClCompile Include="curl\lib\tftp.c" />
|
<ClCompile Include="curl\lib\tftp.c" />
|
||||||
<ClCompile Include="curl\lib\timediff.c" />
|
|
||||||
<ClCompile Include="curl\lib\timeval.c" />
|
|
||||||
<ClCompile Include="curl\lib\transfer.c" />
|
<ClCompile Include="curl\lib\transfer.c" />
|
||||||
|
<ClCompile Include="curl\lib\uint-bset.c" />
|
||||||
|
<ClCompile Include="curl\lib\uint-hash.c" />
|
||||||
|
<ClCompile Include="curl\lib\uint-spbset.c" />
|
||||||
|
<ClCompile Include="curl\lib\uint-table.c" />
|
||||||
<ClCompile Include="curl\lib\url.c" />
|
<ClCompile Include="curl\lib\url.c" />
|
||||||
<ClCompile Include="curl\lib\urlapi.c" />
|
<ClCompile Include="curl\lib\urlapi.c" />
|
||||||
<ClCompile Include="curl\lib\vauth\gsasl.c" />
|
<ClCompile Include="curl\lib\vauth\gsasl.c" />
|
||||||
<ClCompile Include="curl\lib\version.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_msh3.c" />
|
||||||
<ClCompile Include="curl\lib\vquic\curl_ngtcp2.c" />
|
<ClCompile Include="curl\lib\vquic\curl_ngtcp2.c" />
|
||||||
<ClCompile Include="curl\lib\vquic\curl_quiche.c" />
|
<ClCompile Include="curl\lib\vquic\curl_quiche.c" />
|
||||||
|
@ -198,7 +208,6 @@
|
||||||
<ClCompile Include="curl\lib\vtls\vtls_scache.c" />
|
<ClCompile Include="curl\lib\vtls\vtls_scache.c" />
|
||||||
<ClCompile Include="curl\lib\vtls\vtls_spack.c" />
|
<ClCompile Include="curl\lib\vtls\vtls_spack.c" />
|
||||||
<ClCompile Include="curl\lib\vtls\x509asn1.c" />
|
<ClCompile Include="curl\lib\vtls\x509asn1.c" />
|
||||||
<ClCompile Include="curl\lib\warnless.c" />
|
|
||||||
<ClCompile Include="curl\lib\vauth\cleartext.c" />
|
<ClCompile Include="curl\lib\vauth\cleartext.c" />
|
||||||
<ClCompile Include="curl\lib\vauth\cram.c" />
|
<ClCompile Include="curl\lib\vauth\cram.c" />
|
||||||
<ClCompile Include="curl\lib\vauth\digest.c" />
|
<ClCompile Include="curl\lib\vauth\digest.c" />
|
||||||
|
@ -260,9 +269,20 @@
|
||||||
<ClInclude Include="curl\lib\connect.h" />
|
<ClInclude Include="curl\lib\connect.h" />
|
||||||
<ClInclude Include="curl\lib\content_encoding.h" />
|
<ClInclude Include="curl\lib\content_encoding.h" />
|
||||||
<ClInclude Include="curl\lib\cookie.h" />
|
<ClInclude Include="curl\lib\cookie.h" />
|
||||||
<ClInclude Include="curl\lib\curlx.h" />
|
<ClInclude Include="curl\lib\cshutdn.h" />
|
||||||
|
<ClInclude Include="curl\lib\curlx\base64.h" />
|
||||||
|
<ClInclude Include="curl\lib\curlx\curlx.h" />
|
||||||
|
<ClInclude Include="curl\lib\curlx\dynbuf.h" />
|
||||||
|
<ClInclude Include="curl\lib\curlx\inet_pton.h" />
|
||||||
|
<ClInclude Include="curl\lib\curlx\multibyte.h" />
|
||||||
|
<ClInclude Include="curl\lib\curlx\nonblock.h" />
|
||||||
|
<ClInclude Include="curl\lib\curlx\strparse.h" />
|
||||||
|
<ClInclude Include="curl\lib\curlx\timediff.h" />
|
||||||
|
<ClInclude Include="curl\lib\curlx\timeval.h" />
|
||||||
|
<ClInclude Include="curl\lib\curlx\version_win32.h" />
|
||||||
|
<ClInclude Include="curl\lib\curlx\warnless.h" />
|
||||||
|
<ClInclude Include="curl\lib\curlx\winapi.h" />
|
||||||
<ClInclude Include="curl\lib\curl_addrinfo.h" />
|
<ClInclude Include="curl\lib\curl_addrinfo.h" />
|
||||||
<ClInclude Include="curl\lib\curl_base64.h" />
|
|
||||||
<ClInclude Include="curl\lib\curl_ctype.h" />
|
<ClInclude Include="curl\lib\curl_ctype.h" />
|
||||||
<ClInclude Include="curl\lib\curl_des.h" />
|
<ClInclude Include="curl\lib\curl_des.h" />
|
||||||
<ClInclude Include="curl\lib\curl_endian.h" />
|
<ClInclude Include="curl\lib\curl_endian.h" />
|
||||||
|
@ -277,7 +297,6 @@
|
||||||
<ClInclude Include="curl\lib\curl_md5.h" />
|
<ClInclude Include="curl\lib\curl_md5.h" />
|
||||||
<ClInclude Include="curl\lib\curl_memory.h" />
|
<ClInclude Include="curl\lib\curl_memory.h" />
|
||||||
<ClInclude Include="curl\lib\curl_memrchr.h" />
|
<ClInclude Include="curl\lib\curl_memrchr.h" />
|
||||||
<ClInclude Include="curl\lib\curl_multibyte.h" />
|
|
||||||
<ClInclude Include="curl\lib\curl_ntlm_core.h" />
|
<ClInclude Include="curl\lib\curl_ntlm_core.h" />
|
||||||
<ClInclude Include="curl\lib\curl_printf.h" />
|
<ClInclude Include="curl\lib\curl_printf.h" />
|
||||||
<ClInclude Include="curl\lib\curl_range.h" />
|
<ClInclude Include="curl\lib\curl_range.h" />
|
||||||
|
@ -291,14 +310,15 @@
|
||||||
<ClInclude Include="curl\lib\curl_threads.h" />
|
<ClInclude Include="curl\lib\curl_threads.h" />
|
||||||
<ClInclude Include="curl\lib\curl_trc.h" />
|
<ClInclude Include="curl\lib\curl_trc.h" />
|
||||||
<ClInclude Include="curl\lib\cw-out.h" />
|
<ClInclude Include="curl\lib\cw-out.h" />
|
||||||
|
<ClInclude Include="curl\lib\cw-pause.h" />
|
||||||
<ClInclude Include="curl\lib\dict.h" />
|
<ClInclude Include="curl\lib\dict.h" />
|
||||||
<ClInclude Include="curl\lib\doh.h" />
|
<ClInclude Include="curl\lib\doh.h" />
|
||||||
<ClInclude Include="curl\lib\dynbuf.h" />
|
|
||||||
<ClInclude Include="curl\lib\dynhds.h" />
|
<ClInclude Include="curl\lib\dynhds.h" />
|
||||||
<ClInclude Include="curl\lib\easyif.h" />
|
<ClInclude Include="curl\lib\easyif.h" />
|
||||||
<ClInclude Include="curl\lib\easyoptions.h" />
|
<ClInclude Include="curl\lib\easyoptions.h" />
|
||||||
<ClInclude Include="curl\lib\easy_lock.h" />
|
<ClInclude Include="curl\lib\easy_lock.h" />
|
||||||
<ClInclude Include="curl\lib\escape.h" />
|
<ClInclude Include="curl\lib\escape.h" />
|
||||||
|
<ClInclude Include="curl\lib\fake_addrinfo.h" />
|
||||||
<ClInclude Include="curl\lib\file.h" />
|
<ClInclude Include="curl\lib\file.h" />
|
||||||
<ClInclude Include="curl\lib\fileinfo.h" />
|
<ClInclude Include="curl\lib\fileinfo.h" />
|
||||||
<ClInclude Include="curl\lib\fopen.h" />
|
<ClInclude Include="curl\lib\fopen.h" />
|
||||||
|
@ -326,15 +346,15 @@
|
||||||
<ClInclude Include="curl\lib\if2ip.h" />
|
<ClInclude Include="curl\lib\if2ip.h" />
|
||||||
<ClInclude Include="curl\lib\imap.h" />
|
<ClInclude Include="curl\lib\imap.h" />
|
||||||
<ClInclude Include="curl\lib\inet_ntop.h" />
|
<ClInclude Include="curl\lib\inet_ntop.h" />
|
||||||
<ClInclude Include="curl\lib\inet_pton.h" />
|
|
||||||
<ClInclude Include="curl\lib\llist.h" />
|
<ClInclude Include="curl\lib\llist.h" />
|
||||||
|
<ClInclude Include="curl\lib\macos.h" />
|
||||||
<ClInclude Include="curl\lib\memdebug.h" />
|
<ClInclude Include="curl\lib\memdebug.h" />
|
||||||
<ClInclude Include="curl\lib\mime.h" />
|
<ClInclude Include="curl\lib\mime.h" />
|
||||||
<ClInclude Include="curl\lib\mqtt.h" />
|
<ClInclude Include="curl\lib\mqtt.h" />
|
||||||
<ClInclude Include="curl\lib\multihandle.h" />
|
<ClInclude Include="curl\lib\multihandle.h" />
|
||||||
<ClInclude Include="curl\lib\multiif.h" />
|
<ClInclude Include="curl\lib\multiif.h" />
|
||||||
|
<ClInclude Include="curl\lib\multi_ev.h" />
|
||||||
<ClInclude Include="curl\lib\netrc.h" />
|
<ClInclude Include="curl\lib\netrc.h" />
|
||||||
<ClInclude Include="curl\lib\nonblock.h" />
|
|
||||||
<ClInclude Include="curl\lib\noproxy.h" />
|
<ClInclude Include="curl\lib\noproxy.h" />
|
||||||
<ClInclude Include="curl\lib\parsedate.h" />
|
<ClInclude Include="curl\lib\parsedate.h" />
|
||||||
<ClInclude Include="curl\lib\pingpong.h" />
|
<ClInclude Include="curl\lib\pingpong.h" />
|
||||||
|
@ -364,19 +384,19 @@
|
||||||
<ClInclude Include="curl\lib\strcase.h" />
|
<ClInclude Include="curl\lib\strcase.h" />
|
||||||
<ClInclude Include="curl\lib\strdup.h" />
|
<ClInclude Include="curl\lib\strdup.h" />
|
||||||
<ClInclude Include="curl\lib\strerror.h" />
|
<ClInclude Include="curl\lib\strerror.h" />
|
||||||
<ClInclude Include="curl\lib\strparse.h" />
|
|
||||||
<ClInclude Include="curl\lib\strtok.h" />
|
<ClInclude Include="curl\lib\strtok.h" />
|
||||||
<ClInclude Include="curl\lib\strtoofft.h" />
|
<ClInclude Include="curl\lib\strtoofft.h" />
|
||||||
<ClInclude Include="curl\lib\system_win32.h" />
|
<ClInclude Include="curl\lib\system_win32.h" />
|
||||||
<ClInclude Include="curl\lib\telnet.h" />
|
<ClInclude Include="curl\lib\telnet.h" />
|
||||||
<ClInclude Include="curl\lib\tftp.h" />
|
<ClInclude Include="curl\lib\tftp.h" />
|
||||||
<ClInclude Include="curl\lib\timediff.h" />
|
|
||||||
<ClInclude Include="curl\lib\timeval.h" />
|
|
||||||
<ClInclude Include="curl\lib\transfer.h" />
|
<ClInclude Include="curl\lib\transfer.h" />
|
||||||
|
<ClInclude Include="curl\lib\uint-bset.h" />
|
||||||
|
<ClInclude Include="curl\lib\uint-hash.h" />
|
||||||
|
<ClInclude Include="curl\lib\uint-spbset.h" />
|
||||||
|
<ClInclude Include="curl\lib\uint-table.h" />
|
||||||
<ClInclude Include="curl\lib\url.h" />
|
<ClInclude Include="curl\lib\url.h" />
|
||||||
<ClInclude Include="curl\lib\urlapi-int.h" />
|
<ClInclude Include="curl\lib\urlapi-int.h" />
|
||||||
<ClInclude Include="curl\lib\urldata.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_msh3.h" />
|
||||||
<ClInclude Include="curl\lib\vquic\curl_ngtcp2.h" />
|
<ClInclude Include="curl\lib\vquic\curl_ngtcp2.h" />
|
||||||
<ClInclude Include="curl\lib\vquic\curl_quiche.h" />
|
<ClInclude Include="curl\lib\vquic\curl_quiche.h" />
|
||||||
|
@ -389,7 +409,6 @@
|
||||||
<ClInclude Include="curl\lib\vtls\vtls_scache.h" />
|
<ClInclude Include="curl\lib\vtls\vtls_scache.h" />
|
||||||
<ClInclude Include="curl\lib\vtls\vtls_spack.h" />
|
<ClInclude Include="curl\lib\vtls\vtls_spack.h" />
|
||||||
<ClInclude Include="curl\lib\vtls\x509asn1.h" />
|
<ClInclude Include="curl\lib\vtls\x509asn1.h" />
|
||||||
<ClInclude Include="curl\lib\warnless.h" />
|
|
||||||
<ClInclude Include="curl\lib\vauth\digest.h" />
|
<ClInclude Include="curl\lib\vauth\digest.h" />
|
||||||
<ClInclude Include="curl\lib\vauth\ntlm.h" />
|
<ClInclude Include="curl\lib\vauth\ntlm.h" />
|
||||||
<ClInclude Include="curl\lib\vauth\vauth.h" />
|
<ClInclude Include="curl\lib\vauth\vauth.h" />
|
||||||
|
|
213
3rdparty/curl/libcurl.vcxproj.filters
vendored
213
3rdparty/curl/libcurl.vcxproj.filters
vendored
|
@ -24,12 +24,6 @@
|
||||||
<ClCompile Include="curl\lib\asyn-ares.c">
|
<ClCompile Include="curl\lib\asyn-ares.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="curl\lib\asyn-thread.c">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="curl\lib\base64.c">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="curl\lib\bufref.c">
|
<ClCompile Include="curl\lib\bufref.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -69,9 +63,6 @@
|
||||||
<ClCompile Include="curl\lib\curl_memrchr.c">
|
<ClCompile Include="curl\lib\curl_memrchr.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="curl\lib\curl_multibyte.c">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="curl\lib\curl_ntlm_core.c">
|
<ClCompile Include="curl\lib\curl_ntlm_core.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -132,9 +123,6 @@
|
||||||
<ClCompile Include="curl\lib\hmac.c">
|
<ClCompile Include="curl\lib\hmac.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="curl\lib\hostasyn.c">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="curl\lib\hostip.c">
|
<ClCompile Include="curl\lib\hostip.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -144,9 +132,6 @@
|
||||||
<ClCompile Include="curl\lib\hostip6.c">
|
<ClCompile Include="curl\lib\hostip6.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="curl\lib\hostsyn.c">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="curl\lib\http.c">
|
<ClCompile Include="curl\lib\http.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -177,9 +162,6 @@
|
||||||
<ClCompile Include="curl\lib\inet_ntop.c">
|
<ClCompile Include="curl\lib\inet_ntop.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="curl\lib\inet_pton.c">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="curl\lib\krb5.c">
|
<ClCompile Include="curl\lib\krb5.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -210,9 +192,6 @@
|
||||||
<ClCompile Include="curl\lib\netrc.c">
|
<ClCompile Include="curl\lib\netrc.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="curl\lib\nonblock.c">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="curl\lib\openldap.c">
|
<ClCompile Include="curl\lib\openldap.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -291,12 +270,6 @@
|
||||||
<ClCompile Include="curl\lib\strerror.c">
|
<ClCompile Include="curl\lib\strerror.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="curl\lib\strtok.c">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="curl\lib\strtoofft.c">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="curl\lib\system_win32.c">
|
<ClCompile Include="curl\lib\system_win32.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -306,9 +279,6 @@
|
||||||
<ClCompile Include="curl\lib\tftp.c">
|
<ClCompile Include="curl\lib\tftp.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="curl\lib\timeval.c">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="curl\lib\transfer.c">
|
<ClCompile Include="curl\lib\transfer.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -321,9 +291,6 @@
|
||||||
<ClCompile Include="curl\lib\version.c">
|
<ClCompile Include="curl\lib\version.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="curl\lib\warnless.c">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="curl\lib\vauth\cleartext.c">
|
<ClCompile Include="curl\lib\vauth\cleartext.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -402,15 +369,9 @@
|
||||||
<ClCompile Include="curl\lib\vtls\wolfssl.c">
|
<ClCompile Include="curl\lib\vtls\wolfssl.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="curl\lib\dynbuf.c">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="curl\lib\mqtt.c">
|
<ClCompile Include="curl\lib\mqtt.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="curl\lib\version_win32.c">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="curl\lib\vquic\vquic.c">
|
<ClCompile Include="curl\lib\vquic\vquic.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -444,9 +405,6 @@
|
||||||
<ClCompile Include="curl\lib\headers.c">
|
<ClCompile Include="curl\lib\headers.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="curl\lib\timediff.c">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="curl\lib\fopen.c">
|
<ClCompile Include="curl\lib\fopen.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -510,9 +468,6 @@
|
||||||
<ClCompile Include="curl\lib\httpsrr.c">
|
<ClCompile Include="curl\lib\httpsrr.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="curl\lib\strparse.c">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="curl\lib\vtls\cipher_suite.c">
|
<ClCompile Include="curl\lib\vtls\cipher_suite.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -522,6 +477,78 @@
|
||||||
<ClCompile Include="curl\lib\vtls\vtls_spack.c">
|
<ClCompile Include="curl\lib\vtls\vtls_spack.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="curl\lib\cshutdn.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="curl\lib\cw-pause.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="curl\lib\dllmain.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="curl\lib\macos.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="curl\lib\multi_ev.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="curl\lib\strequal.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="curl\lib\asyn-base.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="curl\lib\asyn-thrdd.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="curl\lib\fake_addrinfo.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="curl\lib\uint-bset.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="curl\lib\uint-hash.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="curl\lib\uint-spbset.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="curl\lib\uint-table.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="curl\lib\curlx\base64.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="curl\lib\curlx\dynbuf.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="curl\lib\curlx\inet_pton.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="curl\lib\curlx\multibyte.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="curl\lib\curlx\nonblock.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="curl\lib\curlx\strparse.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="curl\lib\curlx\timediff.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="curl\lib\curlx\timeval.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="curl\lib\curlx\version_win32.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="curl\lib\curlx\warnless.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="curl\lib\curlx\winapi.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="curl\include\curl\curl.h">
|
<ClInclude Include="curl\include\curl\curl.h">
|
||||||
|
@ -593,15 +620,9 @@
|
||||||
<ClInclude Include="curl\lib\cookie.h">
|
<ClInclude Include="curl\lib\cookie.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="curl\lib\curlx.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="curl\lib\curl_addrinfo.h">
|
<ClInclude Include="curl\lib\curl_addrinfo.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="curl\lib\curl_base64.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="curl\lib\curl_ctype.h">
|
<ClInclude Include="curl\lib\curl_ctype.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
@ -641,9 +662,6 @@
|
||||||
<ClInclude Include="curl\lib\curl_memrchr.h">
|
<ClInclude Include="curl\lib\curl_memrchr.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="curl\lib\curl_multibyte.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="curl\lib\curl_ntlm_core.h">
|
<ClInclude Include="curl\lib\curl_ntlm_core.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
@ -743,9 +761,6 @@
|
||||||
<ClInclude Include="curl\lib\inet_ntop.h">
|
<ClInclude Include="curl\lib\inet_ntop.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="curl\lib\inet_pton.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="curl\lib\llist.h">
|
<ClInclude Include="curl\lib\llist.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
@ -764,9 +779,6 @@
|
||||||
<ClInclude Include="curl\lib\netrc.h">
|
<ClInclude Include="curl\lib\netrc.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="curl\lib\nonblock.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="curl\lib\parsedate.h">
|
<ClInclude Include="curl\lib\parsedate.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
@ -860,9 +872,6 @@
|
||||||
<ClInclude Include="curl\lib\tftp.h">
|
<ClInclude Include="curl\lib\tftp.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="curl\lib\timeval.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="curl\lib\transfer.h">
|
<ClInclude Include="curl\lib\transfer.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
@ -875,9 +884,6 @@
|
||||||
<ClInclude Include="curl\lib\urldata.h">
|
<ClInclude Include="curl\lib\urldata.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="curl\lib\warnless.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="curl\lib\vauth\digest.h">
|
<ClInclude Include="curl\lib\vauth\digest.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
@ -920,18 +926,12 @@
|
||||||
<ClInclude Include="curl\lib\vtls\wolfssl.h">
|
<ClInclude Include="curl\lib\vtls\wolfssl.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="curl\lib\dynbuf.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="curl\lib\mqtt.h">
|
<ClInclude Include="curl\lib\mqtt.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="curl\lib\setup-win32.h">
|
<ClInclude Include="curl\lib\setup-win32.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="curl\lib\version_win32.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="curl\lib\vquic\vquic.h">
|
<ClInclude Include="curl\lib\vquic\vquic.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
@ -962,9 +962,6 @@
|
||||||
<ClInclude Include="curl\lib\headers.h">
|
<ClInclude Include="curl\lib\headers.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="curl\lib\timediff.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="curl\lib\easy_lock.h">
|
<ClInclude Include="curl\lib\easy_lock.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
@ -1037,9 +1034,6 @@
|
||||||
<ClInclude Include="curl\lib\httpsrr.h">
|
<ClInclude Include="curl\lib\httpsrr.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="curl\lib\strparse.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="curl\lib\vtls\cipher_suite.h">
|
<ClInclude Include="curl\lib\vtls\cipher_suite.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
@ -1055,6 +1049,69 @@
|
||||||
<ClInclude Include="curl\lib\vtls\vtls_spack.h">
|
<ClInclude Include="curl\lib\vtls\vtls_spack.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="curl\lib\cshutdn.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="curl\lib\cw-pause.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="curl\lib\macos.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="curl\lib\multi_ev.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="curl\lib\fake_addrinfo.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="curl\lib\uint-bset.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="curl\lib\uint-hash.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="curl\lib\uint-spbset.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="curl\lib\uint-table.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="curl\lib\curlx\base64.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="curl\lib\curlx\curlx.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="curl\lib\curlx\dynbuf.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="curl\lib\curlx\inet_pton.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="curl\lib\curlx\multibyte.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="curl\lib\curlx\nonblock.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="curl\lib\curlx\strparse.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="curl\lib\curlx\timediff.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="curl\lib\curlx\timeval.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="curl\lib\curlx\version_win32.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="curl\lib\curlx\warnless.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="curl\lib\curlx\winapi.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ResourceCompile Include="curl\lib\libcurl.rc">
|
<ResourceCompile Include="curl\lib\libcurl.rc">
|
||||||
|
|
39
3rdparty/discord-rpc/CMakeLists.txt
vendored
39
3rdparty/discord-rpc/CMakeLists.txt
vendored
|
@ -1,36 +1,15 @@
|
||||||
# DiscordRPC
|
# DiscordRPC
|
||||||
|
|
||||||
add_library(3rdparty_discordRPC INTERFACE)
|
add_library(3rdparty_discordRPC INTERFACE)
|
||||||
|
|
||||||
check_cxx_compiler_flag("-msse -msse2 -mcx16" COMPILER_X86)
|
if (USE_DISCORD_RPC AND (WIN32 OR CMAKE_SYSTEM MATCHES "Linux" OR APPLE))
|
||||||
|
set(BUILD_EXAMPLES FALSE CACHE BOOL "Build example apps")
|
||||||
|
set(ENABLE_IO_THREAD TRUE CACHE BOOL "Start up a separate I/O thread, otherwise I'd need to call an update function")
|
||||||
|
set(USE_STATIC_CRT FALSE CACHE BOOL "Use /MT[d] for dynamic library")
|
||||||
|
set(WARNINGS_AS_ERRORS FALSE CACHE BOOL "When enabled, compiles with `-Werror` (on *nix platforms).")
|
||||||
|
|
||||||
# We don't want Discord Rich Presence on the BSDs and other OSes
|
add_subdirectory(discord-rpc EXCLUDE_FROM_ALL)
|
||||||
if (USE_DISCORD_RPC AND (WIN32 OR CMAKE_SYSTEM MATCHES "Linux" OR APPLE) AND COMPILER_X86)
|
target_include_directories(3rdparty_discordRPC INTERFACE discord-rpc/include)
|
||||||
if (WIN32 AND NOT MSVC)
|
|
||||||
ExternalProject_Add(discordRPC
|
|
||||||
GIT_REPOSITORY https://github.com/discordapp/discord-rpc
|
|
||||||
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}
|
|
||||||
INSTALL_COMMAND ""
|
|
||||||
)
|
|
||||||
|
|
||||||
endif()
|
|
||||||
|
|
||||||
target_include_directories(3rdparty_discordRPC INTERFACE include)
|
|
||||||
target_compile_definitions(3rdparty_discordRPC INTERFACE -DWITH_DISCORD_RPC)
|
target_compile_definitions(3rdparty_discordRPC INTERFACE -DWITH_DISCORD_RPC)
|
||||||
|
target_link_libraries(3rdparty_discordRPC INTERFACE discord-rpc)
|
||||||
set(DISCORD_RPC_LIB NOTFOUND)
|
|
||||||
if (WIN32)
|
|
||||||
if (NOT MSVC)
|
|
||||||
set(DISCORD_RPC_LIB ${CMAKE_CURRENT_BINARY_DIR}/src/libdiscord-rpc.a)
|
|
||||||
else()
|
|
||||||
find_library(DISCORD_RPC_LIB discord-rpc PATHS lib/ NO_DEFAULT_PATH)
|
|
||||||
endif()
|
|
||||||
elseif(CMAKE_SYSTEM MATCHES "Linux")
|
|
||||||
find_library(DISCORD_RPC_LIB discord-rpc-linux PATHS lib/ NO_DEFAULT_PATH)
|
|
||||||
elseif(APPLE)
|
|
||||||
find_library(DISCORD_RPC_LIB discord-rpc-mac PATHS lib/ NO_DEFAULT_PATH)
|
|
||||||
endif()
|
|
||||||
target_link_libraries(3rdparty_discordRPC INTERFACE ${DISCORD_RPC_LIB})
|
|
||||||
if(APPLE)
|
|
||||||
target_link_libraries(3rdparty_discordRPC INTERFACE "objc" "-framework Foundation" "-framework CoreServices")
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
|
|
1
3rdparty/discord-rpc/discord-rpc
vendored
Submodule
1
3rdparty/discord-rpc/discord-rpc
vendored
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 3dc2c326cb4dc5815c6069970c13154898f58d48
|
78
3rdparty/discord-rpc/discord-rpc.vcxproj
vendored
Normal file
78
3rdparty/discord-rpc/discord-rpc.vcxproj
vendored
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
<?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="discord-rpc\include\discord_register.h" />
|
||||||
|
<ClInclude Include="discord-rpc\include\discord_rpc.h" />
|
||||||
|
<ClInclude Include="discord-rpc\src\backoff.h" />
|
||||||
|
<ClInclude Include="discord-rpc\src\connection.h" />
|
||||||
|
<ClInclude Include="discord-rpc\src\msg_queue.h" />
|
||||||
|
<ClInclude Include="discord-rpc\src\rpc_connection.h" />
|
||||||
|
<ClInclude Include="discord-rpc\src\serialization.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="discord-rpc\src\connection_win.cpp" />
|
||||||
|
<ClCompile Include="discord-rpc\src\discord_register_win.cpp" />
|
||||||
|
<ClCompile Include="discord-rpc\src\discord_rpc.cpp" />
|
||||||
|
<ClCompile Include="discord-rpc\src\dllmain.cpp" />
|
||||||
|
<ClCompile Include="discord-rpc\src\rpc_connection.cpp" />
|
||||||
|
<ClCompile Include="discord-rpc\src\serialization.cpp" />
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{81b0d6d6-84e6-40c1-8dbd-47cbcb3051ad}</ProjectGuid>
|
||||||
|
<RootNamespace>discord-rpc</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>false</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" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<OutDir>$(SolutionDir)build\lib\$(Configuration)-$(Platform)\</OutDir>
|
||||||
|
<IntDir>$(SolutionDir)build\tmp\$(ProjectName)-$(Configuration)-$(Platform)\</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<OutDir>$(SolutionDir)build\lib\$(Configuration)-$(Platform)\</OutDir>
|
||||||
|
<IntDir>$(SolutionDir)build\tmp\$(ProjectName)-$(Configuration)-$(Platform)\</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup>
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>TurnOffAllWarnings</WarningLevel>
|
||||||
|
<SDLCheck>false</SDLCheck>
|
||||||
|
<PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>./discord-rpc/include;./discord-rpc/thirdparty/rapidjson-1.1.0/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
54
3rdparty/discord-rpc/discord-rpc.vcxproj.filters
vendored
Normal file
54
3rdparty/discord-rpc/discord-rpc.vcxproj.filters
vendored
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Header files">
|
||||||
|
<UniqueIdentifier>{719448a4-8eab-4e75-b6b7-687e2b217490}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Source files">
|
||||||
|
<UniqueIdentifier>{7c0d57b3-e2ef-45c2-aa2d-2765e5c73279}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="discord-rpc\src\backoff.h">
|
||||||
|
<Filter>Header files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="discord-rpc\src\connection.h">
|
||||||
|
<Filter>Header files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="discord-rpc\src\msg_queue.h">
|
||||||
|
<Filter>Header files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="discord-rpc\src\rpc_connection.h">
|
||||||
|
<Filter>Header files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="discord-rpc\src\serialization.h">
|
||||||
|
<Filter>Header files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="discord-rpc\include\discord_register.h">
|
||||||
|
<Filter>Header files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="discord-rpc\include\discord_rpc.h">
|
||||||
|
<Filter>Header files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="discord-rpc\src\connection_win.cpp">
|
||||||
|
<Filter>Source files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="discord-rpc\src\discord_register_win.cpp">
|
||||||
|
<Filter>Source files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="discord-rpc\src\discord_rpc.cpp">
|
||||||
|
<Filter>Source files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="discord-rpc\src\dllmain.cpp">
|
||||||
|
<Filter>Source files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="discord-rpc\src\rpc_connection.cpp">
|
||||||
|
<Filter>Source files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="discord-rpc\src\serialization.cpp">
|
||||||
|
<Filter>Source files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
26
3rdparty/discord-rpc/include/discord_register.h
vendored
26
3rdparty/discord-rpc/include/discord_register.h
vendored
|
@ -1,26 +0,0 @@
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#if defined(DISCORD_DYNAMIC_LIB)
|
|
||||||
#if defined(_WIN32)
|
|
||||||
#if defined(DISCORD_BUILDING_SDK)
|
|
||||||
#define DISCORD_EXPORT __declspec(dllexport)
|
|
||||||
#else
|
|
||||||
#define DISCORD_EXPORT __declspec(dllimport)
|
|
||||||
#endif
|
|
||||||
#else
|
|
||||||
#define DISCORD_EXPORT __attribute__((visibility("default")))
|
|
||||||
#endif
|
|
||||||
#else
|
|
||||||
#define DISCORD_EXPORT
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
DISCORD_EXPORT void Discord_Register(const char* applicationId, const char* command);
|
|
||||||
DISCORD_EXPORT void Discord_RegisterSteamGame(const char* applicationId, const char* steamId);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
87
3rdparty/discord-rpc/include/discord_rpc.h
vendored
87
3rdparty/discord-rpc/include/discord_rpc.h
vendored
|
@ -1,87 +0,0 @@
|
||||||
#pragma once
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
// clang-format off
|
|
||||||
|
|
||||||
#if defined(DISCORD_DYNAMIC_LIB)
|
|
||||||
# if defined(_WIN32)
|
|
||||||
# if defined(DISCORD_BUILDING_SDK)
|
|
||||||
# define DISCORD_EXPORT __declspec(dllexport)
|
|
||||||
# else
|
|
||||||
# define DISCORD_EXPORT __declspec(dllimport)
|
|
||||||
# endif
|
|
||||||
# else
|
|
||||||
# define DISCORD_EXPORT __attribute__((visibility("default")))
|
|
||||||
# endif
|
|
||||||
#else
|
|
||||||
# define DISCORD_EXPORT
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// clang-format on
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef struct DiscordRichPresence {
|
|
||||||
const char* state; /* max 128 bytes */
|
|
||||||
const char* details; /* max 128 bytes */
|
|
||||||
int64_t startTimestamp;
|
|
||||||
int64_t endTimestamp;
|
|
||||||
const char* largeImageKey; /* max 32 bytes */
|
|
||||||
const char* largeImageText; /* max 128 bytes */
|
|
||||||
const char* smallImageKey; /* max 32 bytes */
|
|
||||||
const char* smallImageText; /* max 128 bytes */
|
|
||||||
const char* partyId; /* max 128 bytes */
|
|
||||||
int partySize;
|
|
||||||
int partyMax;
|
|
||||||
const char* matchSecret; /* max 128 bytes */
|
|
||||||
const char* joinSecret; /* max 128 bytes */
|
|
||||||
const char* spectateSecret; /* max 128 bytes */
|
|
||||||
int8_t instance;
|
|
||||||
} DiscordRichPresence;
|
|
||||||
|
|
||||||
typedef struct DiscordUser {
|
|
||||||
const char* userId;
|
|
||||||
const char* username;
|
|
||||||
const char* discriminator;
|
|
||||||
const char* avatar;
|
|
||||||
} DiscordUser;
|
|
||||||
|
|
||||||
typedef struct DiscordEventHandlers {
|
|
||||||
void (*ready)(const DiscordUser* request);
|
|
||||||
void (*disconnected)(int errorCode, const char* message);
|
|
||||||
void (*errored)(int errorCode, const char* message);
|
|
||||||
void (*joinGame)(const char* joinSecret);
|
|
||||||
void (*spectateGame)(const char* spectateSecret);
|
|
||||||
void (*joinRequest)(const DiscordUser* request);
|
|
||||||
} DiscordEventHandlers;
|
|
||||||
|
|
||||||
#define DISCORD_REPLY_NO 0
|
|
||||||
#define DISCORD_REPLY_YES 1
|
|
||||||
#define DISCORD_REPLY_IGNORE 2
|
|
||||||
|
|
||||||
DISCORD_EXPORT void Discord_Initialize(const char* applicationId,
|
|
||||||
DiscordEventHandlers* handlers,
|
|
||||||
int autoRegister,
|
|
||||||
const char* optionalSteamId);
|
|
||||||
DISCORD_EXPORT void Discord_Shutdown(void);
|
|
||||||
|
|
||||||
/* checks for incoming messages, dispatches callbacks */
|
|
||||||
DISCORD_EXPORT void Discord_RunCallbacks(void);
|
|
||||||
|
|
||||||
/* If you disable the lib starting its own io thread, you'll need to call this from your own */
|
|
||||||
#ifdef DISCORD_DISABLE_IO_THREAD
|
|
||||||
DISCORD_EXPORT void Discord_UpdateConnection(void);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
DISCORD_EXPORT void Discord_UpdatePresence(const DiscordRichPresence* presence);
|
|
||||||
DISCORD_EXPORT void Discord_ClearPresence(void);
|
|
||||||
|
|
||||||
DISCORD_EXPORT void Discord_Respond(const char* userid, /* DISCORD_REPLY_ */ int reply);
|
|
||||||
|
|
||||||
DISCORD_EXPORT void Discord_UpdateHandlers(DiscordEventHandlers* handlers);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
} /* extern "C" */
|
|
||||||
#endif
|
|
BIN
3rdparty/discord-rpc/lib/discord-rpc.lib
vendored
BIN
3rdparty/discord-rpc/lib/discord-rpc.lib
vendored
Binary file not shown.
BIN
3rdparty/discord-rpc/lib/libdiscord-rpc-linux.a
vendored
BIN
3rdparty/discord-rpc/lib/libdiscord-rpc-linux.a
vendored
Binary file not shown.
BIN
3rdparty/discord-rpc/lib/libdiscord-rpc-mac.a
vendored
BIN
3rdparty/discord-rpc/lib/libdiscord-rpc-mac.a
vendored
Binary file not shown.
4
3rdparty/fusion/CMakeLists.txt
vendored
4
3rdparty/fusion/CMakeLists.txt
vendored
|
@ -1 +1,5 @@
|
||||||
|
# To avoid python numpy dependency in debug build, force release build of this library
|
||||||
|
set(ORIG_BUILD_TYPE ${CMAKE_BUILD_TYPE})
|
||||||
|
set(CMAKE_BUILD_TYPE Release)
|
||||||
add_subdirectory(fusion EXCLUDE_FROM_ALL)
|
add_subdirectory(fusion EXCLUDE_FROM_ALL)
|
||||||
|
set(CMAKE_BUILD_TYPE ${ORIG_BUILD_TYPE})
|
||||||
|
|
2
3rdparty/glslang/glslang
vendored
2
3rdparty/glslang/glslang
vendored
|
@ -1 +1 @@
|
||||||
Subproject commit 36d08c0d940cf307a23928299ef52c7970d8cee6
|
Subproject commit fc9889c889561c5882e83819dcaffef5ed45529b
|
6
3rdparty/glslang/glslang.vcxproj
vendored
6
3rdparty/glslang/glslang.vcxproj
vendored
|
@ -39,17 +39,15 @@
|
||||||
<PropertyGroup Label="UserMacros">
|
<PropertyGroup Label="UserMacros">
|
||||||
<CmakeGenerator>"Visual Studio $(VisualStudioVersion.Substring(0,2))"</CmakeGenerator>
|
<CmakeGenerator>"Visual Studio $(VisualStudioVersion.Substring(0,2))"</CmakeGenerator>
|
||||||
<CmakeReleaseCLI>call vsdevcmd.bat -arch=amd64
|
<CmakeReleaseCLI>call vsdevcmd.bat -arch=amd64
|
||||||
cmake -G $(CmakeGenerator) -A x64 -DCMAKE_BUILD_TYPE="Release" -DLLVM_USE_CRT_DEBUG=MDd -DLLVM_USE_CRT_RELEASE=MT -DENABLE_OPT=OFF -S glslang -B "$(SolutionDir)build\tmp\$(ProjectName)-$(Configuration)-$(Platform)"
|
cmake -G $(CmakeGenerator) -A x64 -DCMAKE_BUILD_TYPE="Release" -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded -DGLSLANG_TESTS=OFF -DENABLE_GLSLANG_BINARIES=OFF -DBUILD_EXTERNAL=OFF -DENABLE_SPVREMAPPER=OFF -DENABLE_HLSL=OFF -DENABLE_OPT=OFF -S glslang -B "$(SolutionDir)build\tmp\$(ProjectName)-$(Configuration)-$(Platform)"
|
||||||
</CmakeReleaseCLI>
|
</CmakeReleaseCLI>
|
||||||
<CmakeDebugCLI>call vsdevcmd.bat -arch=amd64
|
<CmakeDebugCLI>call vsdevcmd.bat -arch=amd64
|
||||||
cmake -G $(CmakeGenerator) -A x64 -DCMAKE_BUILD_TYPE="Debug" -DLLVM_USE_CRT_DEBUG=MDd -DLLVM_USE_CRT_RELEASE=MT -DENABLE_OPT=OFF -S glslang -B "$(SolutionDir)build\tmp\$(ProjectName)-$(Configuration)-$(Platform)"
|
cmake -G $(CmakeGenerator) -A x64 -DCMAKE_BUILD_TYPE="Debug" -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreadedDebug -DGLSLANG_TESTS=OFF -DENABLE_GLSLANG_BINARIES=OFF -DBUILD_EXTERNAL=OFF -DENABLE_SPVREMAPPER=OFF -DENABLE_HLSL=OFF -DENABLE_OPT=OFF -S glslang -B "$(SolutionDir)build\tmp\$(ProjectName)-$(Configuration)-$(Platform)"
|
||||||
</CmakeDebugCLI>
|
</CmakeDebugCLI>
|
||||||
<CmakeCopyCLI>
|
<CmakeCopyCLI>
|
||||||
echo Copying..
|
echo Copying..
|
||||||
mkdir "$(SolutionDir)build\lib\$(Configuration)-$(Platform)\$(ProjectName)"
|
mkdir "$(SolutionDir)build\lib\$(Configuration)-$(Platform)\$(ProjectName)"
|
||||||
copy "$(SolutionDir)build\tmp\$(ProjectName)-$(Configuration)-$(Platform)\hlsl\$(CONFIGURATION)\*.lib" "$(SolutionDir)build\lib\$(Configuration)-$(Platform)\$(ProjectName)"
|
|
||||||
copy "$(SolutionDir)build\tmp\$(ProjectName)-$(Configuration)-$(Platform)\SPIRV\$(CONFIGURATION)\*.lib" "$(SolutionDir)build\lib\$(Configuration)-$(Platform)\$(ProjectName)"
|
copy "$(SolutionDir)build\tmp\$(ProjectName)-$(Configuration)-$(Platform)\SPIRV\$(CONFIGURATION)\*.lib" "$(SolutionDir)build\lib\$(Configuration)-$(Platform)\$(ProjectName)"
|
||||||
copy "$(SolutionDir)build\tmp\$(ProjectName)-$(Configuration)-$(Platform)\OGLCompilersDLL\$(CONFIGURATION)\*.lib" "$(SolutionDir)build\lib\$(Configuration)-$(Platform)\$(ProjectName)"
|
|
||||||
copy "$(SolutionDir)build\tmp\$(ProjectName)-$(Configuration)-$(Platform)\glslang\OSDependent\Windows\$(CONFIGURATION)\*.lib" "$(SolutionDir)build\lib\$(Configuration)-$(Platform)\$(ProjectName)"
|
copy "$(SolutionDir)build\tmp\$(ProjectName)-$(Configuration)-$(Platform)\glslang\OSDependent\Windows\$(CONFIGURATION)\*.lib" "$(SolutionDir)build\lib\$(Configuration)-$(Platform)\$(ProjectName)"
|
||||||
copy "$(SolutionDir)build\tmp\$(ProjectName)-$(Configuration)-$(Platform)\glslang\$(CONFIGURATION)\*.lib" "$(SolutionDir)build\lib\$(Configuration)-$(Platform)\$(ProjectName)"
|
copy "$(SolutionDir)build\tmp\$(ProjectName)-$(Configuration)-$(Platform)\glslang\$(CONFIGURATION)\*.lib" "$(SolutionDir)build\lib\$(Configuration)-$(Platform)\$(ProjectName)"
|
||||||
</CmakeCopyCLI>
|
</CmakeCopyCLI>
|
||||||
|
|
2
3rdparty/hidapi/CMakeLists.txt
vendored
2
3rdparty/hidapi/CMakeLists.txt
vendored
|
@ -15,6 +15,8 @@ elseif(CMAKE_SYSTEM MATCHES "Linux")
|
||||||
target_link_libraries(3rdparty_hidapi INTERFACE hidapi-hidraw udev)
|
target_link_libraries(3rdparty_hidapi INTERFACE hidapi-hidraw udev)
|
||||||
elseif(WIN32)
|
elseif(WIN32)
|
||||||
target_link_libraries(3rdparty_hidapi INTERFACE hidapi::hidapi hidapi::include Shlwapi.lib)
|
target_link_libraries(3rdparty_hidapi INTERFACE hidapi::hidapi hidapi::include Shlwapi.lib)
|
||||||
|
elseif(ANDROID)
|
||||||
|
target_link_libraries(3rdparty_hidapi INTERFACE hidapi::libusb)
|
||||||
else()
|
else()
|
||||||
target_link_libraries(3rdparty_hidapi INTERFACE hidapi-libusb usb)
|
target_link_libraries(3rdparty_hidapi INTERFACE hidapi-libusb usb)
|
||||||
endif()
|
endif()
|
||||||
|
|
2
3rdparty/hidapi/hidapi
vendored
2
3rdparty/hidapi/hidapi
vendored
|
@ -1 +1 @@
|
||||||
Subproject commit 6bfdcf7368169efe1b745cd4468d45cda05ef8de
|
Subproject commit f42423643ec9011c98cccc0bb790722bbbd3f30b
|
2
3rdparty/libpng/libpng
vendored
2
3rdparty/libpng/libpng
vendored
|
@ -1 +1 @@
|
||||||
Subproject commit 872555f4ba910252783af1507f9e7fe1653be252
|
Subproject commit 2b978915d82377df13fcbb1fb56660195ded868a
|
13
3rdparty/libsdl-org/CMakeLists.txt
vendored
13
3rdparty/libsdl-org/CMakeLists.txt
vendored
|
@ -1,11 +1,4 @@
|
||||||
option(SDL2_DISABLE_SDL2MAIN "" ON)
|
option(SDL_SHARED "Build a shared version of the library" OFF)
|
||||||
option(SDL2_DISABLE_INSTALL "" ON)
|
option(SDL_STATIC "Build a static version of the library" ON)
|
||||||
option(SDL2_DISABLE_UNINSTALL "" ON)
|
option(SDL_TEST_LIBRARY "Build the SDL3_test library" OFF)
|
||||||
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)
|
add_subdirectory(SDL EXCLUDE_FROM_ALL)
|
||||||
|
|
2
3rdparty/libsdl-org/SDL
vendored
2
3rdparty/libsdl-org/SDL
vendored
|
@ -1 +1 @@
|
||||||
Subproject commit 7a44b1ab002cee6efa56d3b4c0e146b7fbaed80b
|
Subproject commit c9a6709bd21750f1ad9597be21abace78c6378c9
|
334
3rdparty/libsdl-org/SDL.vcxproj
vendored
334
3rdparty/libsdl-org/SDL.vcxproj
vendored
|
@ -11,137 +11,141 @@
|
||||||
</ProjectConfiguration>
|
</ProjectConfiguration>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_steamdeck.c" />
|
<ClInclude Include="SDL\include\SDL3\SDL_begin_code.h" />
|
||||||
<ClCompile Include="SDL\src\joystick\SDL_steam_virtual_gamepad.c" />
|
<ClInclude Include="SDL\include\SDL3\SDL_camera.h" />
|
||||||
<ClCompile Include="SDL\src\joystick\steam\SDL_steamcontroller.c" />
|
<ClInclude Include="SDL\include\SDL3\SDL_close_code.h" />
|
||||||
<ClCompile Include="SDL\src\video\yuv2rgb\yuv_rgb_lsx.c" />
|
<ClInclude Include="SDL\include\SDL3\SDL.h" />
|
||||||
<ClCompile Include="SDL\src\video\yuv2rgb\yuv_rgb_sse.c" />
|
<ClInclude Include="SDL\include\SDL3\SDL_assert.h" />
|
||||||
<ClCompile Include="SDL\src\video\yuv2rgb\yuv_rgb_std.c" />
|
<ClInclude Include="SDL\include\SDL3\SDL_atomic.h" />
|
||||||
<ClInclude Include="SDL\include\begin_code.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_audio.h" />
|
||||||
<ClInclude Include="SDL\include\close_code.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_bits.h" />
|
||||||
<ClInclude Include="SDL\include\SDL.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_blendmode.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_assert.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_clipboard.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_atomic.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_copying.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_audio.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_cpuinfo.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_bits.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_egl.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_blendmode.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_endian.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_clipboard.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_error.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_config.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_events.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_config_windows.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_filesystem.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_copying.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_gamepad.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_cpuinfo.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_gpu.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_egl.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_guid.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_endian.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_haptic.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_error.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_hints.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_events.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_hidapi.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_filesystem.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_asyncio.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_gamecontroller.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_joystick.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_gesture.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_keyboard.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_guid.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_keycode.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_haptic.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_loadso.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_hints.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_locale.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_hidapi.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_log.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_joystick.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_main.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_keyboard.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_messagebox.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_keycode.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_metal.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_loadso.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_misc.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_locale.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_mouse.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_log.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_mutex.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_main.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_opengl.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_messagebox.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_opengl_glext.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_metal.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_opengles.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_misc.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_opengles2.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_mouse.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_opengles2_gl2.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_mutex.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_opengles2_gl2ext.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_name.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_opengles2_gl2platform.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_opengl.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_opengles2_khrplatform.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_opengl_glext.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_pen.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_opengles.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_pixels.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_opengles2.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_platform.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_opengles2_gl2.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_platform_defines.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_opengles2_gl2ext.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_power.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_opengles2_gl2platform.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_process.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_opengles2_khrplatform.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_properties.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_pixels.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_rect.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_platform.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_render.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_power.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_revision.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_quit.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_iostream.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_rect.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_scancode.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_render.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_sensor.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_revision.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_stdinc.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_rwops.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_storage.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_scancode.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_surface.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_sensor.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_system.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_shape.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_test.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_stdinc.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_test_assert.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_surface.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_test_common.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_system.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_test_compare.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_syswm.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_test_crc32.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_test.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_test_font.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_test_assert.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_test_fuzzer.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_test_common.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_test_harness.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_test_compare.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_test_log.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_test_crc32.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_test_md5.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_test_font.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_test_memory.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_test_fuzzer.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_thread.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_test_harness.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_time.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_test_images.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_timer.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_test_log.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_touch.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_test_md5.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_version.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_test_memory.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_video.h" />
|
||||||
<ClInclude Include="SDL\include\SDL_test_random.h" />
|
<ClInclude Include="SDL\include\SDL3\SDL_vulkan.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\directsound\SDL_directsound.h" />
|
||||||
<ClInclude Include="SDL\src\audio\disk\SDL_diskaudio.h" />
|
<ClInclude Include="SDL\src\audio\disk\SDL_diskaudio.h" />
|
||||||
<ClInclude Include="SDL\src\audio\dummy\SDL_dummyaudio.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_audio_c.h" />
|
||||||
<ClInclude Include="SDL\src\audio\SDL_audiodev_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_sysaudio.h" />
|
||||||
|
<ClInclude Include="SDL\src\audio\SDL_audioqueue.h" />
|
||||||
|
<ClInclude Include="SDL\src\audio\SDL_audioresample.h" />
|
||||||
<ClInclude Include="SDL\src\audio\SDL_wave.h" />
|
<ClInclude Include="SDL\src\audio\SDL_wave.h" />
|
||||||
<ClInclude Include="SDL\src\audio\wasapi\SDL_wasapi.h" />
|
<ClInclude Include="SDL\src\audio\wasapi\SDL_wasapi.h" />
|
||||||
<ClInclude Include="SDL\src\audio\winmm\SDL_winmm.h" />
|
<ClInclude Include="SDL\src\camera\SDL_camera_c.h" />
|
||||||
|
<ClInclude Include="SDL\src\camera\SDL_syscamera.h" />
|
||||||
<ClInclude Include="SDL\src\core\windows\SDL_directx.h" />
|
<ClInclude Include="SDL\src\core\windows\SDL_directx.h" />
|
||||||
|
<ClInclude Include="SDL\src\core\windows\SDL_gameinput.h" />
|
||||||
<ClInclude Include="SDL\src\core\windows\SDL_hid.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_immdevice.h" />
|
||||||
<ClInclude Include="SDL\src\core\windows\SDL_windows.h" />
|
<ClInclude Include="SDL\src\core\windows\SDL_windows.h" />
|
||||||
<ClInclude Include="SDL\src\core\windows\SDL_xinput.h" />
|
<ClInclude Include="SDL\src\core\windows\SDL_xinput.h" />
|
||||||
|
<ClInclude Include="SDL\src\cpuinfo\SDL_cpuinfo_c.h" />
|
||||||
<ClInclude Include="SDL\src\dynapi\SDL_dynapi.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_overrides.h" />
|
||||||
<ClInclude Include="SDL\src\dynapi\SDL_dynapi_procs.h" />
|
<ClInclude Include="SDL\src\dynapi\SDL_dynapi_procs.h" />
|
||||||
|
<ClInclude Include="SDL\src\dynapi\SDL_dynapi_unsupported.h" />
|
||||||
<ClInclude Include="SDL\src\events\blank_cursor.h" />
|
<ClInclude Include="SDL\src\events\blank_cursor.h" />
|
||||||
<ClInclude Include="SDL\src\events\default_cursor.h" />
|
<ClInclude Include="SDL\src\events\default_cursor.h" />
|
||||||
<ClInclude Include="SDL\src\events\scancodes_windows.h" />
|
<ClInclude Include="SDL\src\events\scancodes_windows.h" />
|
||||||
|
<ClInclude Include="SDL\src\events\SDL_categories_c.h" />
|
||||||
<ClInclude Include="SDL\src\events\SDL_clipboardevents_c.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_displayevents_c.h" />
|
||||||
<ClInclude Include="SDL\src\events\SDL_dropevents_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_events_c.h" />
|
||||||
<ClInclude Include="SDL\src\events\SDL_gesture_c.h" />
|
<ClInclude Include="SDL\src\events\SDL_eventwatch_c.h" />
|
||||||
<ClInclude Include="SDL\src\events\SDL_keyboard_c.h" />
|
<ClInclude Include="SDL\src\events\SDL_keyboard_c.h" />
|
||||||
|
<ClInclude Include="SDL\src\events\SDL_keymap_c.h" />
|
||||||
<ClInclude Include="SDL\src\events\SDL_mouse_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_touch_c.h" />
|
||||||
<ClInclude Include="SDL\src\events\SDL_windowevents_c.h" />
|
<ClInclude Include="SDL\src\events\SDL_windowevents_c.h" />
|
||||||
|
<ClInclude Include="SDL\src\filesystem\SDL_sysfilesystem.h" />
|
||||||
|
<ClInclude Include="SDL\src\gpu\SDL_sysgpu.h" />
|
||||||
|
<ClInclude Include="SDL\src\gpu\vulkan\SDL_gpu_vulkan_vkfuncs.h" />
|
||||||
|
<ClInclude Include="SDL\src\io\SDL_asyncio_c.h" />
|
||||||
|
<ClInclude Include="SDL\src\io\SDL_sysasyncio.h" />
|
||||||
<ClInclude Include="SDL\src\haptic\SDL_haptic_c.h" />
|
<ClInclude Include="SDL\src\haptic\SDL_haptic_c.h" />
|
||||||
<ClInclude Include="SDL\src\haptic\SDL_syshaptic.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_dinputhaptic_c.h" />
|
||||||
<ClInclude Include="SDL\src\haptic\windows\SDL_windowshaptic_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\hidapi\hidapi.h" />
|
||||||
<ClInclude Include="SDL\src\hidapi\SDL_hidapi_c.h" />
|
<ClInclude Include="SDL\src\hidapi\SDL_hidapi_c.h" />
|
||||||
<ClInclude Include="SDL\src\joystick\controller_type.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_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\hidapi\SDL_hidapi_rumble.h" />
|
||||||
<ClInclude Include="SDL\src\joystick\SDL_gamecontrollerdb.h" />
|
<ClInclude Include="SDL\src\joystick\SDL_gamepad_c.h" />
|
||||||
|
<ClInclude Include="SDL\src\joystick\SDL_gamepad_db.h" />
|
||||||
<ClInclude Include="SDL\src\joystick\SDL_joystick_c.h" />
|
<ClInclude Include="SDL\src\joystick\SDL_joystick_c.h" />
|
||||||
<ClInclude Include="SDL\src\joystick\SDL_steam_virtual_gamepad.h" />
|
<ClInclude Include="SDL\src\joystick\SDL_steam_virtual_gamepad.h" />
|
||||||
<ClInclude Include="SDL\src\joystick\SDL_sysjoystick.h" />
|
<ClInclude Include="SDL\src\joystick\SDL_sysjoystick.h" />
|
||||||
<ClInclude Include="SDL\src\joystick\steam\SDL_steamcontroller.h" />
|
|
||||||
<ClInclude Include="SDL\src\joystick\usb_ids.h" />
|
<ClInclude Include="SDL\src\joystick\usb_ids.h" />
|
||||||
<ClInclude Include="SDL\src\joystick\virtual\SDL_virtualjoystick_c.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_dinputjoystick_c.h" />
|
||||||
|
@ -151,6 +155,7 @@
|
||||||
<ClInclude Include="SDL\src\libm\math_libm.h" />
|
<ClInclude Include="SDL\src\libm\math_libm.h" />
|
||||||
<ClInclude Include="SDL\src\libm\math_private.h" />
|
<ClInclude Include="SDL\src\libm\math_private.h" />
|
||||||
<ClInclude Include="SDL\src\locale\SDL_syslocale.h" />
|
<ClInclude Include="SDL\src\locale\SDL_syslocale.h" />
|
||||||
|
<ClInclude Include="SDL\src\main\SDL_main_callbacks.h" />
|
||||||
<ClInclude Include="SDL\src\misc\SDL_sysurl.h" />
|
<ClInclude Include="SDL\src\misc\SDL_sysurl.h" />
|
||||||
<ClInclude Include="SDL\src\power\SDL_syspower.h" />
|
<ClInclude Include="SDL\src\power\SDL_syspower.h" />
|
||||||
<ClInclude Include="SDL\src\render\direct3d11\SDL_shaders_d3d11.h" />
|
<ClInclude Include="SDL\src\render\direct3d11\SDL_shaders_d3d11.h" />
|
||||||
|
@ -172,17 +177,36 @@
|
||||||
<ClInclude Include="SDL\src\render\software\SDL_render_sw_c.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_rotate.h" />
|
||||||
<ClInclude Include="SDL\src\render\software\SDL_triangle.h" />
|
<ClInclude Include="SDL\src\render\software\SDL_triangle.h" />
|
||||||
|
<ClInclude Include="SDL\src\render\vulkan\SDL_shaders_vulkan.h" />
|
||||||
<ClInclude Include="SDL\src\SDL_assert_c.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_error_c.h" />
|
||||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_ps3.c" />
|
<ClCompile Include="SDL\src\core\windows\pch.c" />
|
||||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_steam.c" />
|
<ClCompile Include="SDL\src\camera\dummy\SDL_camera_dummy.c" />
|
||||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_wii.c" />
|
<ClCompile Include="SDL\src\camera\mediafoundation\SDL_camera_mediafoundation.c" />
|
||||||
|
<ClCompile Include="SDL\src\camera\SDL_camera.c" />
|
||||||
|
<ClCompile Include="SDL\src\dialog\SDL_dialog.c" />
|
||||||
|
<ClCompile Include="SDL\src\dialog\SDL_dialog_utils.c" />
|
||||||
|
<ClCompile Include="SDL\src\filesystem\SDL_filesystem.c" />
|
||||||
|
<ClCompile Include="SDL\src\filesystem\windows\SDL_sysfsops.c" />
|
||||||
|
<ClCompile Include="SDL\src\io\windows\SDL_asyncio_windows_ioring.c" />
|
||||||
|
<ClCompile Include="SDL\src\gpu\SDL_gpu.c" />
|
||||||
|
<ClCompile Include="SDL\src\gpu\d3d12\SDL_gpu_d3d12.c" />
|
||||||
|
<ClCompile Include="SDL\src\gpu\vulkan\SDL_gpu_vulkan.c" />
|
||||||
|
<ClCompile Include="SDL\src\io\generic\SDL_asyncio_generic.c" />
|
||||||
|
<ClCompile Include="SDL\src\io\SDL_asyncio.c" />
|
||||||
|
<ClCompile Include="SDL\src\main\generic\SDL_sysmain_callbacks.c" />
|
||||||
|
<ClCompile Include="SDL\src\main\SDL_main_callbacks.c" />
|
||||||
|
<ClCompile Include="SDL\src\main\SDL_runapp.c" />
|
||||||
|
<ClCompile Include="SDL\src\main\windows\SDL_sysmain_runapp.c" />
|
||||||
|
<ClCompile Include="SDL\src\render\vulkan\SDL_render_vulkan.c" />
|
||||||
|
<ClCompile Include="SDL\src\render\vulkan\SDL_shaders_vulkan.c" />
|
||||||
<ClCompile Include="SDL\src\SDL_guid.c" />
|
<ClCompile Include="SDL\src\SDL_guid.c" />
|
||||||
|
<ClInclude Include="SDL\src\SDL_hashtable.h" />
|
||||||
<ClInclude Include="SDL\src\SDL_hints_c.h" />
|
<ClInclude Include="SDL\src\SDL_hints_c.h" />
|
||||||
<ClInclude Include="SDL\src\SDL_internal.h" />
|
<ClInclude Include="SDL\src\SDL_internal.h" />
|
||||||
<ClInclude Include="SDL\src\SDL_list.h" />
|
<ClInclude Include="SDL\src\SDL_list.h" />
|
||||||
<ClInclude Include="SDL\src\SDL_log_c.h" />
|
<ClInclude Include="SDL\src\SDL_log_c.h" />
|
||||||
|
<ClInclude Include="SDL\src\SDL_properties_c.h" />
|
||||||
<ClInclude Include="SDL\src\sensor\dummy\SDL_dummysensor.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_sensor_c.h" />
|
||||||
<ClInclude Include="SDL\src\sensor\SDL_syssensor.h" />
|
<ClInclude Include="SDL\src\sensor\SDL_syssensor.h" />
|
||||||
|
@ -191,24 +215,17 @@
|
||||||
<ClInclude Include="SDL\src\thread\SDL_thread_c.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\generic\SDL_syscond_c.h" />
|
||||||
<ClInclude Include="SDL\src\thread\windows\SDL_sysmutex_c.h" />
|
<ClInclude Include="SDL\src\thread\windows\SDL_sysmutex_c.h" />
|
||||||
|
<ClInclude Include="SDL\src\thread\generic\SDL_sysrwlock_c.h" />
|
||||||
<ClInclude Include="SDL\src\thread\windows\SDL_systhread_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\timer\SDL_timer_c.h" />
|
||||||
<ClInclude Include="SDL\src\video\dummy\SDL_nullevents_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_nullframebuffer_c.h" />
|
||||||
<ClInclude Include="SDL\src\video\dummy\SDL_nullvideo.h" />
|
<ClInclude Include="SDL\src\video\dummy\SDL_nullvideo.h" />
|
||||||
<ClInclude Include="SDL\src\video\khronos\vk_video\vulkan_video_codecs_common.h" />
|
|
||||||
<ClInclude Include="SDL\src\video\khronos\vk_video\vulkan_video_codec_h264std.h" />
|
|
||||||
<ClInclude Include="SDL\src\video\khronos\vk_video\vulkan_video_codec_h264std_decode.h" />
|
|
||||||
<ClInclude Include="SDL\src\video\khronos\vk_video\vulkan_video_codec_h264std_encode.h" />
|
|
||||||
<ClInclude Include="SDL\src\video\khronos\vk_video\vulkan_video_codec_h265std.h" />
|
|
||||||
<ClInclude Include="SDL\src\video\khronos\vk_video\vulkan_video_codec_h265std_decode.h" />
|
|
||||||
<ClInclude Include="SDL\src\video\khronos\vk_video\vulkan_video_codec_h265std_encode.h" />
|
|
||||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vk_icd.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_layer.h" />
|
||||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vk_platform.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\vk_sdk_platform.h" />
|
||||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan.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_android.h" />
|
||||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_beta.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_core.h" />
|
||||||
|
@ -224,29 +241,39 @@
|
||||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_xcb.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.h" />
|
||||||
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_xlib_xrandr.h" />
|
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_xlib_xrandr.h" />
|
||||||
|
<ClInclude Include="SDL\src\video\offscreen\SDL_offscreenevents_c.h" />
|
||||||
|
<ClInclude Include="SDL\src\video\offscreen\SDL_offscreenframebuffer_c.h" />
|
||||||
|
<ClInclude Include="SDL\src\video\offscreen\SDL_offscreenopengles.h" />
|
||||||
|
<ClInclude Include="SDL\src\video\offscreen\SDL_offscreenvideo.h" />
|
||||||
|
<ClInclude Include="SDL\src\video\offscreen\SDL_offscreenvulkan.h" />
|
||||||
|
<ClInclude Include="SDL\src\video\offscreen\SDL_offscreenwindow.h" />
|
||||||
<ClInclude Include="SDL\src\video\SDL_blit.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_auto.h" />
|
||||||
<ClInclude Include="SDL\src\video\SDL_blit_copy.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_blit_slow.h" />
|
||||||
|
<ClInclude Include="SDL\src\video\SDL_clipboard_c.h" />
|
||||||
<ClInclude Include="SDL\src\video\SDL_egl_c.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_pixels_c.h" />
|
||||||
<ClInclude Include="SDL\src\video\SDL_rect_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_RLEaccel_c.h" />
|
||||||
<ClInclude Include="SDL\src\video\SDL_shape_internals.h" />
|
<ClInclude Include="SDL\src\video\SDL_stb_c.h" />
|
||||||
|
<ClInclude Include="SDL\src\video\SDL_surface_c.h" />
|
||||||
<ClInclude Include="SDL\src\video\SDL_sysvideo.h" />
|
<ClInclude Include="SDL\src\video\SDL_sysvideo.h" />
|
||||||
<ClInclude Include="SDL\src\video\SDL_vulkan_internal.h" />
|
<ClInclude Include="SDL\src\video\SDL_vulkan_internal.h" />
|
||||||
<ClInclude Include="SDL\src\video\SDL_yuv_c.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_msctf.h" />
|
||||||
<ClInclude Include="SDL\src\video\windows\SDL_vkeys.h" />
|
<ClInclude Include="SDL\src\video\windows\SDL_surface_utils.h" />
|
||||||
<ClInclude Include="SDL\src\video\windows\SDL_windowsclipboard.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_windowsevents.h" />
|
||||||
<ClInclude Include="SDL\src\video\windows\SDL_windowsframebuffer.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_windowskeyboard.h" />
|
||||||
|
<ClInclude Include="SDL\src\video\windows\SDL_windowsgameinput.h" />
|
||||||
<ClInclude Include="SDL\src\video\windows\SDL_windowsmessagebox.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_windowsmodes.h" />
|
||||||
<ClInclude Include="SDL\src\video\windows\SDL_windowsmouse.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_windowsopengl.h" />
|
||||||
<ClInclude Include="SDL\src\video\windows\SDL_windowsopengles.h" />
|
<ClInclude Include="SDL\src\video\windows\SDL_windowsopengles.h" />
|
||||||
|
<ClInclude Include="SDL\src\video\windows\SDL_windowsrawinput.h" />
|
||||||
<ClInclude Include="SDL\src\video\windows\SDL_windowsshape.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_windowsvideo.h" />
|
||||||
<ClInclude Include="SDL\src\video\windows\SDL_windowsvulkan.h" />
|
<ClInclude Include="SDL\src\video\windows\SDL_windowsvulkan.h" />
|
||||||
|
@ -261,8 +288,6 @@
|
||||||
<ClInclude Include="SDL\src\video\yuv2rgb\yuv_rgb_sse_func.h" />
|
<ClInclude Include="SDL\src\video\yuv2rgb\yuv_rgb_sse_func.h" />
|
||||||
<ClInclude Include="SDL\src\video\yuv2rgb\yuv_rgb_std.h" />
|
<ClInclude Include="SDL\src\video\yuv2rgb\yuv_rgb_std.h" />
|
||||||
<ClInclude Include="SDL\src\video\yuv2rgb\yuv_rgb_std_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_atomic.c" />
|
||||||
<ClCompile Include="SDL\src\atomic\SDL_spinlock.c" />
|
<ClCompile Include="SDL\src\atomic\SDL_spinlock.c" />
|
||||||
<ClCompile Include="SDL\src\audio\directsound\SDL_directsound.c" />
|
<ClCompile Include="SDL\src\audio\directsound\SDL_directsound.c" />
|
||||||
|
@ -272,78 +297,71 @@
|
||||||
<ClCompile Include="SDL\src\audio\SDL_audiocvt.c" />
|
<ClCompile Include="SDL\src\audio\SDL_audiocvt.c" />
|
||||||
<ClCompile Include="SDL\src\audio\SDL_audiodev.c" />
|
<ClCompile Include="SDL\src\audio\SDL_audiodev.c" />
|
||||||
<ClCompile Include="SDL\src\audio\SDL_audiotypecvt.c" />
|
<ClCompile Include="SDL\src\audio\SDL_audiotypecvt.c" />
|
||||||
|
<ClCompile Include="SDL\src\audio\SDL_audioqueue.c" />
|
||||||
|
<ClCompile Include="SDL\src\audio\SDL_audioresample.c" />
|
||||||
<ClCompile Include="SDL\src\audio\SDL_mixer.c" />
|
<ClCompile Include="SDL\src\audio\SDL_mixer.c" />
|
||||||
<ClCompile Include="SDL\src\audio\SDL_wave.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.c" />
|
||||||
<ClCompile Include="SDL\src\audio\wasapi\SDL_wasapi_win32.c" />
|
<ClCompile Include="SDL\src\core\SDL_core_unsupported.c" />
|
||||||
|
<ClCompile Include="SDL\src\core\windows\SDL_gameinput.c" />
|
||||||
<ClCompile Include="SDL\src\core\windows\SDL_hid.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_immdevice.c" />
|
||||||
<ClCompile Include="SDL\src\core\windows\SDL_windows.c" />
|
<ClCompile Include="SDL\src\core\windows\SDL_windows.c" />
|
||||||
<ClCompile Include="SDL\src\core\windows\SDL_xinput.c" />
|
<ClCompile Include="SDL\src\core\windows\SDL_xinput.c" />
|
||||||
<ClCompile Include="SDL\src\cpuinfo\SDL_cpuinfo.c" />
|
<ClCompile Include="SDL\src\cpuinfo\SDL_cpuinfo.c" />
|
||||||
|
<ClCompile Include="SDL\src\dialog\windows\SDL_windowsdialog.c" />
|
||||||
<ClCompile Include="SDL\src\dynapi\SDL_dynapi.c" />
|
<ClCompile Include="SDL\src\dynapi\SDL_dynapi.c" />
|
||||||
|
<ClCompile Include="SDL\src\events\SDL_categories.c" />
|
||||||
<ClCompile Include="SDL\src\events\SDL_clipboardevents.c" />
|
<ClCompile Include="SDL\src\events\SDL_clipboardevents.c" />
|
||||||
<ClCompile Include="SDL\src\events\SDL_displayevents.c" />
|
<ClCompile Include="SDL\src\events\SDL_displayevents.c" />
|
||||||
<ClCompile Include="SDL\src\events\SDL_dropevents.c" />
|
<ClCompile Include="SDL\src\events\SDL_dropevents.c" />
|
||||||
<ClCompile Include="SDL\src\events\SDL_events.c" />
|
<ClCompile Include="SDL\src\events\SDL_events.c" />
|
||||||
<ClCompile Include="SDL\src\events\SDL_gesture.c" />
|
<ClCompile Include="SDL\src\events\SDL_eventwatch.c" />
|
||||||
<ClCompile Include="SDL\src\events\SDL_keyboard.c" />
|
<ClCompile Include="SDL\src\events\SDL_keyboard.c" />
|
||||||
|
<ClCompile Include="SDL\src\events\SDL_keymap.c" />
|
||||||
<ClCompile Include="SDL\src\events\SDL_mouse.c" />
|
<ClCompile Include="SDL\src\events\SDL_mouse.c" />
|
||||||
|
<ClCompile Include="SDL\src\events\SDL_pen.c" />
|
||||||
<ClCompile Include="SDL\src\events\SDL_quit.c" />
|
<ClCompile Include="SDL\src\events\SDL_quit.c" />
|
||||||
<ClCompile Include="SDL\src\events\SDL_touch.c" />
|
<ClCompile Include="SDL\src\events\SDL_touch.c" />
|
||||||
<ClCompile Include="SDL\src\events\SDL_windowevents.c" />
|
<ClCompile Include="SDL\src\events\SDL_windowevents.c" />
|
||||||
<ClCompile Include="SDL\src\file\SDL_rwops.c" />
|
<ClCompile Include="SDL\src\io\SDL_iostream.c" />
|
||||||
<ClCompile Include="SDL\src\filesystem\windows\SDL_sysfilesystem.c" />
|
<ClCompile Include="SDL\src\filesystem\windows\SDL_sysfilesystem.c" />
|
||||||
<ClCompile Include="SDL\src\haptic\dummy\SDL_syshaptic.c" />
|
<ClCompile Include="SDL\src\haptic\dummy\SDL_syshaptic.c" />
|
||||||
<ClCompile Include="SDL\src\haptic\SDL_haptic.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_dinputhaptic.c" />
|
||||||
<ClCompile Include="SDL\src\haptic\windows\SDL_windowshaptic.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\hidapi\SDL_hidapi.c" />
|
||||||
<ClCompile Include="SDL\src\joystick\controller_type.c" />
|
<ClCompile Include="SDL\src\joystick\controller_type.c" />
|
||||||
<ClCompile Include="SDL\src\joystick\dummy\SDL_sysjoystick.c" />
|
<ClCompile Include="SDL\src\joystick\dummy\SDL_sysjoystick.c" />
|
||||||
|
<ClCompile Include="SDL\src\joystick\gdk\SDL_gameinputjoystick.c" />
|
||||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapijoystick.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_combined.c" />
|
||||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_gamecube.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_luna.c" />
|
||||||
|
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_ps3.c" />
|
||||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_ps4.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_ps5.c" />
|
||||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_rumble.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_shield.c" />
|
||||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_stadia.c" />
|
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_stadia.c" />
|
||||||
|
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_steam.c" />
|
||||||
|
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_steam_hori.c" />
|
||||||
|
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_steamdeck.c" />
|
||||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_switch.c" />
|
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_switch.c" />
|
||||||
|
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_wii.c" />
|
||||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_xbox360.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_xbox360w.c" />
|
||||||
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_xboxone.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_gamepad.c" />
|
||||||
<ClCompile Include="SDL\src\joystick\SDL_joystick.c" />
|
<ClCompile Include="SDL\src\joystick\SDL_joystick.c" />
|
||||||
|
<ClCompile Include="SDL\src\joystick\SDL_steam_virtual_gamepad.c" />
|
||||||
<ClCompile Include="SDL\src\joystick\virtual\SDL_virtualjoystick.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_dinputjoystick.c" />
|
||||||
<ClCompile Include="SDL\src\joystick\windows\SDL_rawinputjoystick.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_windowsjoystick.c" />
|
||||||
<ClCompile Include="SDL\src\joystick\windows\SDL_windows_gaming_input.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\joystick\windows\SDL_xinputjoystick.c" />
|
||||||
<ClCompile Include="SDL\src\libm\e_atan2.c" />
|
<ClCompile Include="SDL\src\libm\s_modf.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\loadso\windows\SDL_sysloadso.c" />
|
||||||
<ClCompile Include="SDL\src\locale\SDL_locale.c" />
|
<ClCompile Include="SDL\src\locale\SDL_locale.c" />
|
||||||
<ClCompile Include="SDL\src\locale\windows\SDL_syslocale.c" />
|
<ClCompile Include="SDL\src\locale\windows\SDL_syslocale.c" />
|
||||||
|
@ -351,18 +369,24 @@
|
||||||
<ClCompile Include="SDL\src\misc\windows\SDL_sysurl.c" />
|
<ClCompile Include="SDL\src\misc\windows\SDL_sysurl.c" />
|
||||||
<ClCompile Include="SDL\src\power\SDL_power.c" />
|
<ClCompile Include="SDL\src\power\SDL_power.c" />
|
||||||
<ClCompile Include="SDL\src\power\windows\SDL_syspower.c" />
|
<ClCompile Include="SDL\src\power\windows\SDL_syspower.c" />
|
||||||
|
<ClCompile Include="SDL\src\process\SDL_process.c" />
|
||||||
|
<ClCompile Include="SDL\src\process\windows\SDL_windowsprocess.c" />
|
||||||
<ClCompile Include="SDL\src\render\direct3d11\SDL_shaders_d3d11.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_render_d3d12.c" />
|
||||||
<ClCompile Include="SDL\src\render\direct3d12\SDL_shaders_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\direct3d\SDL_render_d3d.c" />
|
||||||
<ClCompile Include="SDL\src\render\direct3d11\SDL_render_d3d11.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\direct3d\SDL_shaders_d3d.c" />
|
||||||
|
<ClCompile Include="SDL\src\render\gpu\SDL_pipeline_gpu.c" />
|
||||||
|
<ClCompile Include="SDL\src\render\gpu\SDL_render_gpu.c" />
|
||||||
|
<ClCompile Include="SDL\src\render\gpu\SDL_shaders_gpu.c" />
|
||||||
<ClCompile Include="SDL\src\render\opengl\SDL_render_gl.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\opengl\SDL_shaders_gl.c" />
|
||||||
<ClCompile Include="SDL\src\render\opengles2\SDL_render_gles2.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\opengles2\SDL_shaders_gles2.c" />
|
||||||
<ClCompile Include="SDL\src\render\SDL_d3dmath.c" />
|
<ClCompile Include="SDL\src\render\SDL_d3dmath.c" />
|
||||||
<ClCompile Include="SDL\src\render\SDL_render.c" />
|
<ClCompile Include="SDL\src\render\SDL_render.c" />
|
||||||
|
<ClCompile Include="SDL\src\render\SDL_render_unsupported.c" />
|
||||||
<ClCompile Include="SDL\src\render\SDL_yuv_sw.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_blendfillrect.c" />
|
||||||
<ClCompile Include="SDL\src\render\software\SDL_blendline.c" />
|
<ClCompile Include="SDL\src\render\software\SDL_blendline.c" />
|
||||||
|
@ -374,11 +398,12 @@
|
||||||
<ClCompile Include="SDL\src\render\software\SDL_triangle.c" />
|
<ClCompile Include="SDL\src\render\software\SDL_triangle.c" />
|
||||||
<ClCompile Include="SDL\src\SDL.c" />
|
<ClCompile Include="SDL\src\SDL.c" />
|
||||||
<ClCompile Include="SDL\src\SDL_assert.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_error.c" />
|
||||||
|
<ClCompile Include="SDL\src\SDL_hashtable.c" />
|
||||||
<ClCompile Include="SDL\src\SDL_hints.c" />
|
<ClCompile Include="SDL\src\SDL_hints.c" />
|
||||||
|
<ClCompile Include="SDL\src\SDL_list.c" />
|
||||||
<ClCompile Include="SDL\src\SDL_log.c" />
|
<ClCompile Include="SDL\src\SDL_log.c" />
|
||||||
|
<ClCompile Include="SDL\src\SDL_properties.c" />
|
||||||
<ClCompile Include="SDL\src\SDL_utils.c" />
|
<ClCompile Include="SDL\src\SDL_utils.c" />
|
||||||
<ClCompile Include="SDL\src\sensor\dummy\SDL_dummysensor.c" />
|
<ClCompile Include="SDL\src\sensor\dummy\SDL_dummysensor.c" />
|
||||||
<ClCompile Include="SDL\src\sensor\SDL_sensor.c" />
|
<ClCompile Include="SDL\src\sensor\SDL_sensor.c" />
|
||||||
|
@ -388,23 +413,43 @@
|
||||||
<ClCompile Include="SDL\src\stdlib\SDL_getenv.c" />
|
<ClCompile Include="SDL\src\stdlib\SDL_getenv.c" />
|
||||||
<ClCompile Include="SDL\src\stdlib\SDL_iconv.c" />
|
<ClCompile Include="SDL\src\stdlib\SDL_iconv.c" />
|
||||||
<ClCompile Include="SDL\src\stdlib\SDL_malloc.c" />
|
<ClCompile Include="SDL\src\stdlib\SDL_malloc.c" />
|
||||||
|
<ClCompile Include="SDL\src\stdlib\SDL_memcpy.c" />
|
||||||
|
<ClCompile Include="SDL\src\stdlib\SDL_memmove.c" />
|
||||||
|
<ClCompile Include="SDL\src\stdlib\SDL_memset.c" />
|
||||||
<ClCompile Include="SDL\src\stdlib\SDL_mslibc.c" />
|
<ClCompile Include="SDL\src\stdlib\SDL_mslibc.c" />
|
||||||
|
<ClCompile Include="SDL\src\stdlib\SDL_murmur3.c" />
|
||||||
<ClCompile Include="SDL\src\stdlib\SDL_qsort.c" />
|
<ClCompile Include="SDL\src\stdlib\SDL_qsort.c" />
|
||||||
|
<ClCompile Include="SDL\src\stdlib\SDL_random.c" />
|
||||||
<ClCompile Include="SDL\src\stdlib\SDL_stdlib.c" />
|
<ClCompile Include="SDL\src\stdlib\SDL_stdlib.c" />
|
||||||
<ClCompile Include="SDL\src\stdlib\SDL_string.c" />
|
<ClCompile Include="SDL\src\stdlib\SDL_string.c" />
|
||||||
<ClCompile Include="SDL\src\stdlib\SDL_strtokr.c" />
|
<ClCompile Include="SDL\src\stdlib\SDL_strtokr.c" />
|
||||||
|
<ClCompile Include="SDL\src\storage\generic\SDL_genericstorage.c" />
|
||||||
|
<ClCompile Include="SDL\src\storage\steam\SDL_steamstorage.c" />
|
||||||
|
<ClCompile Include="SDL\src\storage\SDL_storage.c" />
|
||||||
<ClCompile Include="SDL\src\thread\generic\SDL_syscond.c" />
|
<ClCompile Include="SDL\src\thread\generic\SDL_syscond.c" />
|
||||||
|
<ClCompile Include="SDL\src\thread\generic\SDL_sysrwlock.c" />
|
||||||
<ClCompile Include="SDL\src\thread\SDL_thread.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_syscond_cv.c" />
|
||||||
<ClCompile Include="SDL\src\thread\windows\SDL_sysmutex.c" />
|
<ClCompile Include="SDL\src\thread\windows\SDL_sysmutex.c" />
|
||||||
|
<ClCompile Include="SDL\src\thread\windows\SDL_sysrwlock_srw.c" />
|
||||||
<ClCompile Include="SDL\src\thread\windows\SDL_syssem.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_systhread.c" />
|
||||||
<ClCompile Include="SDL\src\thread\windows\SDL_systls.c" />
|
<ClCompile Include="SDL\src\thread\windows\SDL_systls.c" />
|
||||||
<ClCompile Include="SDL\src\timer\SDL_timer.c" />
|
<ClCompile Include="SDL\src\timer\SDL_timer.c" />
|
||||||
<ClCompile Include="SDL\src\timer\windows\SDL_systimer.c" />
|
<ClCompile Include="SDL\src\timer\windows\SDL_systimer.c" />
|
||||||
|
<ClCompile Include="SDL\src\time\SDL_time.c" />
|
||||||
|
<ClCompile Include="SDL\src\time\windows\SDL_systime.c" />
|
||||||
|
<ClCompile Include="SDL\src\tray\windows\SDL_tray.c" />
|
||||||
|
<ClCompile Include="SDL\src\tray\SDL_tray_utils.c" />
|
||||||
<ClCompile Include="SDL\src\video\dummy\SDL_nullevents.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_nullframebuffer.c" />
|
||||||
<ClCompile Include="SDL\src\video\dummy\SDL_nullvideo.c" />
|
<ClCompile Include="SDL\src\video\dummy\SDL_nullvideo.c" />
|
||||||
|
<ClCompile Include="SDL\src\video\offscreen\SDL_offscreenevents.c" />
|
||||||
|
<ClCompile Include="SDL\src\video\offscreen\SDL_offscreenframebuffer.c" />
|
||||||
|
<ClCompile Include="SDL\src\video\offscreen\SDL_offscreenopengles.c" />
|
||||||
|
<ClCompile Include="SDL\src\video\offscreen\SDL_offscreenvideo.c" />
|
||||||
|
<ClCompile Include="SDL\src\video\offscreen\SDL_offscreenvulkan.c" />
|
||||||
|
<ClCompile Include="SDL\src\video\offscreen\SDL_offscreenwindow.c" />
|
||||||
<ClCompile Include="SDL\src\video\SDL_blit.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_0.c" />
|
||||||
<ClCompile Include="SDL\src\video\SDL_blit_1.c" />
|
<ClCompile Include="SDL\src\video\SDL_blit_1.c" />
|
||||||
|
@ -420,25 +465,35 @@
|
||||||
<ClCompile Include="SDL\src\video\SDL_pixels.c" />
|
<ClCompile Include="SDL\src\video\SDL_pixels.c" />
|
||||||
<ClCompile Include="SDL\src\video\SDL_rect.c" />
|
<ClCompile Include="SDL\src\video\SDL_rect.c" />
|
||||||
<ClCompile Include="SDL\src\video\SDL_RLEaccel.c" />
|
<ClCompile Include="SDL\src\video\SDL_RLEaccel.c" />
|
||||||
<ClCompile Include="SDL\src\video\SDL_shape.c" />
|
<ClCompile Include="SDL\src\video\SDL_stb.c" />
|
||||||
<ClCompile Include="SDL\src\video\SDL_stretch.c" />
|
<ClCompile Include="SDL\src\video\SDL_stretch.c" />
|
||||||
<ClCompile Include="SDL\src\video\SDL_surface.c" />
|
<ClCompile Include="SDL\src\video\SDL_surface.c" />
|
||||||
<ClCompile Include="SDL\src\video\SDL_video.c" />
|
<ClCompile Include="SDL\src\video\SDL_video.c" />
|
||||||
|
<ClCompile Include="SDL\src\video\SDL_video_unsupported.c" />
|
||||||
<ClCompile Include="SDL\src\video\SDL_vulkan_utils.c" />
|
<ClCompile Include="SDL\src\video\SDL_vulkan_utils.c" />
|
||||||
<ClCompile Include="SDL\src\video\SDL_yuv.c" />
|
<ClCompile Include="SDL\src\video\SDL_yuv.c" />
|
||||||
|
<ClCompile Include="SDL\src\video\windows\SDL_surface_utils.c" />
|
||||||
<ClCompile Include="SDL\src\video\windows\SDL_windowsclipboard.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_windowsevents.c" />
|
||||||
<ClCompile Include="SDL\src\video\windows\SDL_windowsframebuffer.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_windowskeyboard.c" />
|
||||||
|
<ClCompile Include="SDL\src\video\windows\SDL_windowsgameinput.c" />
|
||||||
<ClCompile Include="SDL\src\video\windows\SDL_windowsmessagebox.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_windowsmodes.c" />
|
||||||
<ClCompile Include="SDL\src\video\windows\SDL_windowsmouse.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_windowsopengl.c" />
|
||||||
<ClCompile Include="SDL\src\video\windows\SDL_windowsopengles.c" />
|
<ClCompile Include="SDL\src\video\windows\SDL_windowsopengles.c" />
|
||||||
|
<ClCompile Include="SDL\src\video\windows\SDL_windowsrawinput.c" />
|
||||||
<ClCompile Include="SDL\src\video\windows\SDL_windowsshape.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_windowsvideo.c" />
|
||||||
<ClCompile Include="SDL\src\video\windows\SDL_windowsvulkan.c" />
|
<ClCompile Include="SDL\src\video\windows\SDL_windowsvulkan.c" />
|
||||||
<ClCompile Include="SDL\src\video\windows\SDL_windowswindow.c" />
|
<ClCompile Include="SDL\src\video\windows\SDL_windowswindow.c" />
|
||||||
|
<ClCompile Include="SDL\src\video\yuv2rgb\yuv_rgb_lsx.c" />
|
||||||
|
<ClCompile Include="SDL\src\video\yuv2rgb\yuv_rgb_sse.c" />
|
||||||
|
<ClCompile Include="SDL\src\video\yuv2rgb\yuv_rgb_std.c" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include="SDL\src\core\windows\version.rc" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<PropertyGroup Label="Globals">
|
<PropertyGroup Label="Globals">
|
||||||
<ProjectGuid>{8DC244EE-A0BD-4038-BAF7-CFAFA5EB2BAA}</ProjectGuid>
|
<ProjectGuid>{8DC244EE-A0BD-4038-BAF7-CFAFA5EB2BAA}</ProjectGuid>
|
||||||
|
@ -467,11 +522,14 @@
|
||||||
<Import Project="$(SolutionDir)\buildfiles\msvc\rpcs3_release.props" />
|
<Import Project="$(SolutionDir)\buildfiles\msvc\rpcs3_release.props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup Label="UserMacros" />
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<IncludePath>SDL\src;$(IncludePath)</IncludePath>
|
||||||
|
</PropertyGroup>
|
||||||
<ItemDefinitionGroup>
|
<ItemDefinitionGroup>
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>TurnOffAllWarnings</WarningLevel>
|
<WarningLevel>TurnOffAllWarnings</WarningLevel>
|
||||||
<SDLCheck>false</SDLCheck>
|
<SDLCheck>false</SDLCheck>
|
||||||
<AdditionalIncludeDirectories>SDL\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>SDL\include;SDL\include\build_config;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<DebugInformationFormat Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">ProgramDatabase</DebugInformationFormat>
|
||||||
<Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
|
<Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
|
1991
3rdparty/libsdl-org/SDL.vcxproj.filters
vendored
1991
3rdparty/libsdl-org/SDL.vcxproj.filters
vendored
File diff suppressed because it is too large
Load diff
2
3rdparty/libusb/CMakeLists.txt
vendored
2
3rdparty/libusb/CMakeLists.txt
vendored
|
@ -1,5 +1,3 @@
|
||||||
cmake_minimum_required(VERSION 3.0)
|
|
||||||
|
|
||||||
project(libusb)
|
project(libusb)
|
||||||
|
|
||||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules")
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules")
|
||||||
|
|
2
3rdparty/libusb/libusb
vendored
2
3rdparty/libusb/libusb
vendored
|
@ -1 +1 @@
|
||||||
Subproject commit d52e355daa09f17ce64819122cb067b8a2ee0d4b
|
Subproject commit 15a7ebb4d426c5ce196684347d2b7cafad862626
|
4
3rdparty/libusb/os.cmake
vendored
4
3rdparty/libusb/os.cmake
vendored
|
@ -77,7 +77,7 @@ int main()
|
||||||
elseif (UNIX)
|
elseif (UNIX)
|
||||||
# Unix is for all *NIX systems including OSX
|
# Unix is for all *NIX systems including OSX
|
||||||
add_compile_definitions(PLATFORM_POSIX=1 HAVE_CLOCK_GETTIME)
|
add_compile_definitions(PLATFORM_POSIX=1 HAVE_CLOCK_GETTIME)
|
||||||
if ("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
|
if ("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux" OR ANDROID)
|
||||||
set(OS_LINUX 1)
|
set(OS_LINUX 1)
|
||||||
|
|
||||||
set(PLATFORM_SRC
|
set(PLATFORM_SRC
|
||||||
|
@ -87,9 +87,11 @@ elseif (UNIX)
|
||||||
events_posix.c
|
events_posix.c
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if(NOT ANDROID)
|
||||||
list(APPEND LIBUSB_LIBRARIES rt)
|
list(APPEND LIBUSB_LIBRARIES rt)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
if (NOT PLATFORM_SRC)
|
if (NOT PLATFORM_SRC)
|
||||||
message(FATAL_ERROR "Unsupported platform ${CMAKE_SYSTEM_NAME}. Currently only support Windows, OSX, & Linux.")
|
message(FATAL_ERROR "Unsupported platform ${CMAKE_SYSTEM_NAME}. Currently only support Windows, OSX, & Linux.")
|
||||||
|
|
16
3rdparty/llvm/CMakeLists.txt
vendored
16
3rdparty/llvm/CMakeLists.txt
vendored
|
@ -5,7 +5,17 @@ if(WITH_LLVM)
|
||||||
if(BUILD_LLVM)
|
if(BUILD_LLVM)
|
||||||
message(STATUS "LLVM will be built from the submodule.")
|
message(STATUS "LLVM will be built from the submodule.")
|
||||||
|
|
||||||
|
if (ANDROID)
|
||||||
|
if (COMPILER_ARM)
|
||||||
|
set(LLVM_TARGETS_TO_BUILD "AArch64" CACHE STRING "Semicolon-separated list of targets to build, or \"all\".")
|
||||||
|
set(LLVM_TARGET_ARCH "${CMAKE_SYSTEM_PROCESSOR}-none-linux-android${ANDROID_NATIVE_API_LEVEL}" CACHE STRING "")
|
||||||
|
else()
|
||||||
|
set(LLVM_TARGETS_TO_BUILD "X86" CACHE STRING "Semicolon-separated list of targets to build, or \"all\".")
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
set(LLVM_TARGETS_TO_BUILD "AArch64;X86" CACHE STRING "Semicolon-separated list of targets to build, or \"all\".")
|
set(LLVM_TARGETS_TO_BUILD "AArch64;X86" CACHE STRING "Semicolon-separated list of targets to build, or \"all\".")
|
||||||
|
endif()
|
||||||
|
|
||||||
option(LLVM_BUILD_RUNTIME "Build the LLVM runtime libraries." OFF)
|
option(LLVM_BUILD_RUNTIME "Build the LLVM runtime libraries." OFF)
|
||||||
option(LLVM_BUILD_TOOLS "Build the LLVM tools. If OFF, just generate build targets." OFF)
|
option(LLVM_BUILD_TOOLS "Build the LLVM tools. If OFF, just generate build targets." OFF)
|
||||||
option(LLVM_INCLUDE_BENCHMARKS "Generate benchmark targets. If OFF, benchmarks can't be built." OFF)
|
option(LLVM_INCLUDE_BENCHMARKS "Generate benchmark targets. If OFF, benchmarks can't be built." OFF)
|
||||||
|
@ -56,12 +66,10 @@ if(WITH_LLVM)
|
||||||
find_package(LLVM CONFIG)
|
find_package(LLVM CONFIG)
|
||||||
|
|
||||||
if (NOT LLVM_FOUND)
|
if (NOT LLVM_FOUND)
|
||||||
message(FATAL_ERROR "Can't find LLVM libraries from the CMAKE_PREFIX_PATH path or LLVM_DIR. \
|
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.")
|
||||||
Enable BUILD_LLVM option to build LLVM from included as a git submodule.")
|
|
||||||
endif()
|
endif()
|
||||||
if (LLVM_VERSION VERSION_LESS 18)
|
if (LLVM_VERSION VERSION_LESS 18)
|
||||||
message(FATAL_ERROR "Found LLVM version ${LLVM_VERSION}. Required version 18 or above. \
|
message(FATAL_ERROR "Found LLVM version ${LLVM_VERSION}. Required version 18 or above. Enable BUILD_LLVM option to build LLVM from included as a git submodule.")
|
||||||
Enable BUILD_LLVM option to build LLVM from included as a git submodule.")
|
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
2
3rdparty/miniupnp/miniupnp
vendored
2
3rdparty/miniupnp/miniupnp
vendored
|
@ -1 +1 @@
|
||||||
Subproject commit 7f189988a0decca0ab7da89000051ab91751f70d
|
Subproject commit d66872e34d9ff83a07f8b71371b13419b2089953
|
2
3rdparty/opencv/opencv
vendored
2
3rdparty/opencv/opencv
vendored
|
@ -1 +1 @@
|
||||||
Subproject commit f76628fb5b25746fcb75a7ce85be0d8c6439fc57
|
Subproject commit 50fb5e701d8b0d3fe8262ed84668a94cc8cbf0b1
|
3
3rdparty/qt6.cmake
vendored
3
3rdparty/qt6.cmake
vendored
|
@ -32,8 +32,7 @@ Find the correct ppa at https://launchpad.net/~beineri and follow the instructio
|
||||||
else()
|
else()
|
||||||
message("CMake was unable to find Qt6!")
|
message("CMake was unable to find Qt6!")
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
message(FATAL_ERROR "Make sure the QTDIR env variable has been set properly. (for example C:\\Qt\\${QT_MIN_VER}\\msvc2019_64\\)
|
message(FATAL_ERROR "Make sure the Qt6_ROOT environment variable has been set properly. (for example C:\\Qt\\${QT_MIN_VER}\\msvc2022_64\\)")
|
||||||
You can also try setting the Qt6_DIR preprocessor definiton.")
|
|
||||||
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||||
message(FATAL_ERROR "Make sure to install your distro's qt6 package!")
|
message(FATAL_ERROR "Make sure to install your distro's qt6 package!")
|
||||||
else()
|
else()
|
||||||
|
|
2551
3rdparty/robin_hood/include/robin_hood.h
vendored
2551
3rdparty/robin_hood/include/robin_hood.h
vendored
File diff suppressed because it is too large
Load diff
2101
3rdparty/unordered_dense/include/unordered_dense.h
vendored
Normal file
2101
3rdparty/unordered_dense/include/unordered_dense.h
vendored
Normal file
File diff suppressed because it is too large
Load diff
137
3rdparty/version_check.sh
vendored
Normal file
137
3rdparty/version_check.sh
vendored
Normal file
|
@ -0,0 +1,137 @@
|
||||||
|
#!/bin/bash -ex
|
||||||
|
|
||||||
|
verbose=0
|
||||||
|
git_verbose=0
|
||||||
|
max_jobs=16
|
||||||
|
|
||||||
|
lockfile="$(pwd)/version_check.lock"
|
||||||
|
resultfile="$(pwd)/version_check_results.txt"
|
||||||
|
|
||||||
|
if [ "$1" = "-v" ]; then
|
||||||
|
verbose=1
|
||||||
|
elif [ "$1" = "-vv" ]; then
|
||||||
|
verbose=1
|
||||||
|
git_verbose=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Limit concurrent jobs
|
||||||
|
job_control()
|
||||||
|
{
|
||||||
|
while [ "$(jobs | wc -l)" -ge "$max_jobs" ]; do
|
||||||
|
sleep 0.1
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
git_call()
|
||||||
|
{
|
||||||
|
if [ "$git_verbose" -eq 1 ]; then
|
||||||
|
eval "git $@"
|
||||||
|
elif [[ "$1" == "fetch" ]]; then
|
||||||
|
eval "git $@ >/dev/null 2>&1"
|
||||||
|
else
|
||||||
|
eval "git $@ 2>/dev/null"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
check_tags()
|
||||||
|
{
|
||||||
|
local path=$(echo "$1" | sed 's:/*$::')
|
||||||
|
|
||||||
|
echo "Checking $path"
|
||||||
|
|
||||||
|
git_call fetch --prune --all
|
||||||
|
|
||||||
|
# Get the latest tag (by commit date, not tag name)
|
||||||
|
local tag_list=$(git_call rev-list --tags --max-count=1)
|
||||||
|
local latest_tag=$(git_call describe --tags "$tag_list")
|
||||||
|
local highest_tag=$(git_call tag -l | sort -V | tail -n1)
|
||||||
|
|
||||||
|
if [ -n "$latest_tag" ] || [ -n "$highest_tag" ]; then
|
||||||
|
|
||||||
|
# Get the current tag
|
||||||
|
local current_tag=$(git_call describe --tags --abbrev=0)
|
||||||
|
|
||||||
|
if [ -n "$current_tag" ]; then
|
||||||
|
|
||||||
|
if [ "$verbose" -eq 1 ]; then
|
||||||
|
echo "$path -> latest: $latest_tag, highest: $highest_tag, current: $current_tag"
|
||||||
|
fi
|
||||||
|
|
||||||
|
local ts0=$(git_call log -1 --format=%ct $highest_tag)
|
||||||
|
local ts1=$(git_call log -1 --format=%ct $latest_tag)
|
||||||
|
local ts2=$(git_call log -1 --format=%ct $current_tag)
|
||||||
|
|
||||||
|
if (( ts0 > ts2 )) || (( ts1 > ts2 )); then
|
||||||
|
if [ "$verbose" -eq 1 ]; then
|
||||||
|
echo -e "\t $path: latest is newer"
|
||||||
|
elif [ "$verbose" -eq 0 ]; then
|
||||||
|
echo "$path -> latest: $latest_tag, highest: $highest_tag, current: $current_tag"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Critical section guarded by flock
|
||||||
|
(
|
||||||
|
flock 200
|
||||||
|
echo "$path -> latest: $latest_tag, highest: $highest_tag, current: $current_tag" >> "$resultfile"
|
||||||
|
) 200>"$lockfile"
|
||||||
|
fi
|
||||||
|
|
||||||
|
elif [ "$verbose" -eq 1 ]; then
|
||||||
|
echo "$path -> latest: $latest_tag, highest: $highest_tag"
|
||||||
|
fi
|
||||||
|
elif [ "$verbose" -eq 1 ]; then
|
||||||
|
|
||||||
|
if [ -n "$current_tag" ]; then
|
||||||
|
echo "$path -> current: $current_tag"
|
||||||
|
else
|
||||||
|
echo "$path -> no tags found"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Fetch and check repositories multi threaded
|
||||||
|
for submoduledir in */ ;
|
||||||
|
do
|
||||||
|
cd "$submoduledir" || continue
|
||||||
|
|
||||||
|
if [ -e ".git" ]; then
|
||||||
|
job_control
|
||||||
|
check_tags "$submoduledir" &
|
||||||
|
else
|
||||||
|
for sub in */ ;
|
||||||
|
do
|
||||||
|
if [ -e "$sub/.git" ]; then
|
||||||
|
cd "$sub" || continue
|
||||||
|
job_control
|
||||||
|
check_tags "$submoduledir$sub" &
|
||||||
|
cd .. || exit
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd .. || exit
|
||||||
|
done
|
||||||
|
|
||||||
|
# Wait for all background jobs to finish
|
||||||
|
wait
|
||||||
|
|
||||||
|
# Print results
|
||||||
|
echo -e "\n\nResult:\n"
|
||||||
|
|
||||||
|
# Find the max length of the paths (before '->')
|
||||||
|
max_len=0
|
||||||
|
while IFS='->' read -r left _; do
|
||||||
|
len=$(echo -n "$left" | wc -c)
|
||||||
|
if (( len > max_len )); then
|
||||||
|
max_len=$len
|
||||||
|
fi
|
||||||
|
done < "$resultfile"
|
||||||
|
|
||||||
|
# Print with padding so '->' lines up
|
||||||
|
while IFS='->' read -r left right; do
|
||||||
|
right=$(echo "$right" | sed 's/^[[:space:]]*>*[[:space:]]*//')
|
||||||
|
printf "%-${max_len}s -> %s\n" "$left" "$right"
|
||||||
|
done < "$resultfile"
|
||||||
|
|
||||||
|
# Remove tmp files
|
||||||
|
rm -f "$resultfile"
|
||||||
|
rm -f "$lockfile"
|
2
3rdparty/wolfssl/wolfssl
vendored
2
3rdparty/wolfssl/wolfssl
vendored
|
@ -1 +1 @@
|
||||||
Subproject commit 239b85c80438bf60d9a5b9e0ebe9ff097a760d0d
|
Subproject commit b077c81eb635392e694ccedbab8b644297ec0285
|
44
BUILDING.md
44
BUILDING.md
|
@ -19,38 +19,38 @@ The following tools are required to build RPCS3 on Windows 10 or later:
|
||||||
with standalone **CMake** tool.
|
with standalone **CMake** tool.
|
||||||
|
|
||||||
- [Python 3.6+](https://www.python.org/downloads/) (add to PATH)
|
- [Python 3.6+](https://www.python.org/downloads/) (add to PATH)
|
||||||
- [Qt 6.8.2](https://www.qt.io/download-qt-installer) In case you can't download from the official installer, you can use [Another Qt installer](https://github.com/miurahr/aqtinstall) (In that case you will need to manually add the "qtmultimedia" module when installing Qt)
|
- [Qt 6.9.1](https://www.qt.io/download-qt-installer) In case you can't download from the official installer, you can use [Another Qt installer](https://github.com/miurahr/aqtinstall) (In that case you will need to manually add the "qtmultimedia" module when installing Qt)
|
||||||
- [Vulkan SDK 1.3.268.0](https://vulkan.lunarg.com/sdk/home) (see "Install the SDK" [here](https://vulkan.lunarg.com/doc/sdk/latest/windows/getting_started.html)) for now future SDKs don't work. You need precisely 1.3.268.0.
|
- [Vulkan SDK 1.3.268.0](https://vulkan.lunarg.com/sdk/home) (see "Install the SDK" [here](https://vulkan.lunarg.com/doc/sdk/latest/windows/getting_started.html)) for now future SDKs don't work. You need precisely 1.3.268.0.
|
||||||
|
|
||||||
The `sln` solution available only on **Visual Studio** is the preferred building solution. It easily allows to build the **RPCS3** application in `Release` and `Debug` mode.
|
The `sln` solution available only on **Visual Studio** is the preferred building solution. It easily allows to build the **RPCS3** application in `Release` and `Debug` mode.
|
||||||
|
|
||||||
In order to build **RPCS3** with the `sln` solution (with **Visual Studio**), **Qt** libs need to be detected. To detect the libs:
|
In order to build **RPCS3** with the `sln` solution (with **Visual Studio**), **Qt** libs need to be detected. To detect the libs:
|
||||||
- add and set the `QTDIR` environment variable, e.g. `<QtInstallFolder>\6.8.2\msvc2022_64\`
|
- add and set the `QTDIR` environment variable, e.g. `<QtInstallFolder>\6.9.1\msvc2022_64\`
|
||||||
- or use the [Visual Studio Qt Plugin](https://marketplace.visualstudio.com/items?itemName=TheQtCompany.QtVisualStudioTools2022)
|
- or use the [Visual Studio Qt Plugin](https://marketplace.visualstudio.com/items?itemName=TheQtCompany.QtVisualStudioTools2022)
|
||||||
|
|
||||||
**NOTE:** If you have issues with the **Visual Studio Qt Plugin**, you may want to uninstall it and install the [Legacy Qt Plugin](https://marketplace.visualstudio.com/items?itemName=TheQtCompany.LEGACYQtVisualStudioTools2022) instead.
|
**NOTE:** If you have issues with the **Visual Studio Qt Plugin**, you may want to uninstall it and install the [Legacy Qt Plugin](https://marketplace.visualstudio.com/items?itemName=TheQtCompany.LEGACYQtVisualStudioTools2022) instead.
|
||||||
|
|
||||||
In order to build **RPCS3** with the `CMake` solution (with both **Visual Studio** and standalone **CMake** tool):
|
In order to build **RPCS3** with the `CMake` solution (with both **Visual Studio** and standalone **CMake** tool):
|
||||||
- add and set the `Qt6_ROOT` environment variable to the **Qt** libs path, e.g. `<QtInstallFolder>\6.8.2\msvc2022_64\`
|
- add and set the `Qt6_ROOT` environment variable to the **Qt** libs path, e.g. `<QtInstallFolder>\6.9.1\msvc2022_64\`
|
||||||
|
|
||||||
### Linux
|
### Linux
|
||||||
|
|
||||||
These are the essentials tools to build RPCS3 on Linux. Some of them can be installed through your favorite package manager:
|
These are the essentials tools to build RPCS3 on Linux. Some of them can be installed through your favorite package manager:
|
||||||
- Clang 17+ or GCC 13+
|
- Clang 17+ or GCC 13+
|
||||||
- [CMake 3.28.0+](https://www.cmake.org/download/)
|
- [CMake 3.28.0+](https://www.cmake.org/download/)
|
||||||
- [Qt 6.8.2](https://www.qt.io/download-qt-installer)
|
- [Qt 6.9.1](https://www.qt.io/download-qt-installer)
|
||||||
- [Vulkan SDK 1.3.268.0](https://vulkan.lunarg.com/sdk/home) (See "Install the SDK" [here](https://vulkan.lunarg.com/doc/sdk/latest/linux/getting_started.html)) for now future SDKs don't work. You need precisely 1.3.268.0.
|
- [Vulkan SDK 1.3.268.0](https://vulkan.lunarg.com/sdk/home) (See "Install the SDK" [here](https://vulkan.lunarg.com/doc/sdk/latest/linux/getting_started.html)) for now future SDKs don't work. You need precisely 1.3.268.0.
|
||||||
- [SDL2](https://github.com/libsdl-org/SDL/releases) (for the FAudio backend)
|
- [SDL3](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.**
|
**If you have an NVIDIA GPU, you may need to install the libglvnd package.**
|
||||||
|
|
||||||
#### Arch Linux
|
#### Arch Linux
|
||||||
|
|
||||||
sudo pacman -S glew openal cmake vulkan-validation-layers qt6-base qt6-declarative qt6-multimedia qt6-svg sdl2 sndio jack2 base-devel
|
sudo pacman -S glew openal cmake ninja vulkan-validation-layers qt6-base qt6-declarative qt6-multimedia qt6-svg sdl3 sndio jack2 base-devel
|
||||||
|
|
||||||
#### Debian & Ubuntu
|
#### Debian & Ubuntu
|
||||||
|
|
||||||
sudo apt-get install build-essential libasound2-dev libpulse-dev libopenal-dev libglew-dev zlib1g-dev libedit-dev libvulkan-dev libudev-dev git libevdev-dev libsdl2-2.0 libsdl2-dev libjack-dev libsndio-dev
|
sudo apt-get install build-essential ninja-build libasound2-dev libpulse-dev libopenal-dev libglew-dev zlib1g-dev libedit-dev libvulkan-dev libudev-dev git libevdev-dev libsdl3-3.2 libsdl3-dev libjack-dev libsndio-dev
|
||||||
|
|
||||||
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
|
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
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ sudo apt-get update
|
||||||
sudo apt-get install gcc-13 g++-13
|
sudo apt-get install gcc-13 g++-13
|
||||||
```
|
```
|
||||||
|
|
||||||
You can either use `update-alternatives` to setup `gcc-13`/`g++-13` as your default compilers or prefix any `cmake` command by `CXX=g++-13 CC=gcc-13 ` to use it.
|
You can either use `update-alternatives` to setup `gcc-13`/`g++-13` as your default compilers or prefix the `cmake` build file generation command by `CXX=g++-13 CC=gcc-13` to use it.
|
||||||
|
|
||||||
##### Vulkan SDK
|
##### Vulkan SDK
|
||||||
|
|
||||||
|
@ -94,19 +94,21 @@ sudo apt-get install cmake
|
||||||
|
|
||||||
#### Fedora
|
#### Fedora
|
||||||
|
|
||||||
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
|
sudo dnf install alsa-lib-devel cmake ninja-build 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 llvm-devel
|
||||||
|
|
||||||
#### OpenSUSE
|
#### OpenSUSE
|
||||||
|
|
||||||
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
|
sudo zypper install git cmake ninja 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
|
## Setup the project
|
||||||
|
|
||||||
Clone and initialize the repository
|
Clone and initialize the repository
|
||||||
|
|
||||||
```
|
```bash
|
||||||
git clone https://github.com/RPCS3/rpcs3.git
|
git clone --recurse-submodules https://github.com/RPCS3/rpcs3.git
|
||||||
cd rpcs3
|
cd rpcs3
|
||||||
|
# This is automatically done by `git clone --recurse-submodules`,
|
||||||
|
# but in case you forgot it, you can manually fetch submodules this way:
|
||||||
git submodule update --init
|
git submodule update --init
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -119,7 +121,7 @@ Start **Visual Studio**, click on `Open a project or solution` and select the `r
|
||||||
##### Configuring the Qt Plugin (if used)
|
##### Configuring the Qt Plugin (if used)
|
||||||
|
|
||||||
1) go to `Extensions->Qt VS Tools->Qt Versions`
|
1) go to `Extensions->Qt VS Tools->Qt Versions`
|
||||||
2) add the path to your Qt installation with compiler e.g. `<QtInstallFolder>\6.8.2\msvc2022_64`, version will fill in automatically
|
2) add the path to your Qt installation with compiler e.g. `<QtInstallFolder>\6.9.1\msvc2022_64`, version will fill in automatically
|
||||||
3) go to `Extensions->Qt VS Tools->Options->Legacy Project Format`. (Only available in the **Legacy Qt Plugin**)
|
3) go to `Extensions->Qt VS Tools->Options->Legacy Project Format`. (Only available in the **Legacy Qt Plugin**)
|
||||||
4) set `Build: Run pre-build setup` to `true`. (Only available in the **Legacy Qt Plugin**)
|
4) set `Build: Run pre-build setup` to `true`. (Only available in the **Legacy Qt Plugin**)
|
||||||
|
|
||||||
|
@ -127,19 +129,17 @@ Start **Visual Studio**, click on `Open a project or solution` and select the `r
|
||||||
|
|
||||||
**NOTE:** The recommended build configuration is `Release`. (On older revisions: `Release - LLVM`)
|
**NOTE:** The recommended build configuration is `Release`. (On older revisions: `Release - LLVM`)
|
||||||
|
|
||||||
To speed up the compilation time, you may want to download and extract to `<rpcs3_root>\build\lib_ext\<$(Configuration)>-x64` (e.g. `c:\rpcs3\build\lib_ext\Release-x64`; the path needs to be created) some of the following precompiled libs:
|
To speed up the compilation time, you may want to download and extract to `<rpcs3_root>\build\lib_ext\<$(Configuration)>-x64` (e.g. `c:\rpcs3\build\lib_ext\Release-x64`; the path needs to be created) the following precompiled lib:
|
||||||
- [LLVM libs](https://github.com/RPCS3/llvm-mirror/releases/download/custom-build-win-19.1.7/llvmlibs_mt.7z)
|
- [LLVM libs](https://github.com/RPCS3/llvm-mirror/releases/download/custom-build-win-19.1.7/llvmlibs_mt.7z)
|
||||||
- [additional libs](https://github.com/RPCS3/glslang/releases/latest/download/glslanglibs_mt.7z)
|
|
||||||
|
|
||||||
**NOTES:**
|
**NOTES:**
|
||||||
- `<$(Configuration)>` can assume values `Release` or `Debug`.
|
- `<$(Configuration)>` can assume values `Release` or `Debug`.
|
||||||
- Unoptimised/debug libs are currently not available precompiled for both **LLVM** and **glslang**. Trying to use them when building the **RPCS3** application in `Debug` mode will provide a `cannot open file` error.
|
- Unoptimised/debug libs are currently not available precompiled for **LLVM**. Trying to use it when building the **RPCS3** application in `Debug` mode will provide a `cannot open file` error.
|
||||||
|
|
||||||
If you're not using the precompiled libs, those dependency libs need to be compiled first. From the `Solution Explorer` panel:
|
If you're not using the precompiled libs, those dependency libs need to be compiled first. From the `Solution Explorer` panel:
|
||||||
1) expand `__BUILD_BEFORE`
|
1) expand `__BUILD_BEFORE`
|
||||||
2) from the `Solution Configurations` drop-down menu, select `Release` (select `Debug` if you want to build in `Debug` mode)
|
2) from the `Solution Configurations` drop-down menu, select `Release` (select `Debug` if you want to build in `Debug` mode)
|
||||||
3) one after another, right-click on the following projects and then click on `Build` to build the selected lib:
|
3) right-click one of the following projects and then click on `Build` to build the selected lib:
|
||||||
- `glslang`
|
|
||||||
- `llvm_build`
|
- `llvm_build`
|
||||||
- or `llvm_build_clang_cl` (if you have also the **clang** compiler installed on VS)
|
- or `llvm_build_clang_cl` (if you have also the **clang** compiler installed on VS)
|
||||||
|
|
||||||
|
@ -181,11 +181,11 @@ In case you preferred to install and use the standalone **CMake** tool:
|
||||||
|
|
||||||
While still in the project root:
|
While still in the project root:
|
||||||
|
|
||||||
1) `cd .. && mkdir --parents rpcs3_build && cd rpcs3_build`
|
1) `cmake -B build -G Ninja` to generate build files with the default compiler (override the compiler by prepending e.g. `CC=clang CXX=clang++`)
|
||||||
2) `cmake ../rpcs3/ && make` or `CXX=g++-13 CC=gcc-13 cmake ../rpcs3/ && make` to force these compilers
|
2) `cmake --build build` to compile
|
||||||
3) run RPCS3 with `./bin/rpcs3`
|
3) run RPCS3 with `build/bin/rpcs3`
|
||||||
|
|
||||||
If compiling for ARM, pass the flag `-DUSE_NATIVE_INSTRUCTIONS=OFF` to the cmake command. This resolves some Neon errors when compiling our SIMD headers.
|
If compiling for ARM, pass the flag `-DUSE_NATIVE_INSTRUCTIONS=OFF` to the first `cmake` command. This resolves some NEON errors when compiling our SIMD headers.
|
||||||
|
|
||||||
When using GDB, configure it to ignore SIGSEGV signal (`handle SIGSEGV nostop noprint`).
|
When using GDB, configure it to ignore SIGSEGV signal (`handle SIGSEGV nostop noprint`).
|
||||||
If desired, use the various build options in [CMakeLists](https://github.com/RPCS3/rpcs3/blob/master/CMakeLists.txt).
|
If desired, use the various build options in [CMakeLists](https://github.com/RPCS3/rpcs3/blob/master/CMakeLists.txt).
|
||||||
|
|
|
@ -1,8 +1,16 @@
|
||||||
cmake_minimum_required(VERSION 3.16.9)
|
cmake_minimum_required(VERSION 3.28)
|
||||||
|
|
||||||
|
find_program(CCACHE_PATH ccache HINTS ENV PATH)
|
||||||
|
if(CCACHE_PATH)
|
||||||
|
message(STATUS "Using ccache: ${CCACHE_PATH}")
|
||||||
|
set(CMAKE_C_COMPILER_LAUNCHER "${CCACHE_PATH}")
|
||||||
|
set(CMAKE_CXX_COMPILER_LAUNCHER "${CCACHE_PATH}")
|
||||||
|
endif()
|
||||||
|
|
||||||
project(rpcs3 LANGUAGES C CXX)
|
project(rpcs3 LANGUAGES C CXX)
|
||||||
|
|
||||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||||
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||||
|
|
||||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||||
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 11)
|
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 11)
|
||||||
|
@ -21,16 +29,27 @@ option(STATIC_LINK_LLVM "Link against LLVM statically. This will get set to ON i
|
||||||
option(USE_FAUDIO "FAudio audio backend" ON)
|
option(USE_FAUDIO "FAudio audio backend" ON)
|
||||||
option(USE_LIBEVDEV "libevdev-based joystick support" ON)
|
option(USE_LIBEVDEV "libevdev-based joystick support" ON)
|
||||||
option(USE_DISCORD_RPC "Discord rich presence integration" OFF)
|
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_VULKAN "Vulkan render backend" ON)
|
||||||
option(USE_PRECOMPILED_HEADERS "Use precompiled headers" OFF)
|
option(USE_PRECOMPILED_HEADERS "Use precompiled headers" OFF)
|
||||||
option(USE_SDL "Enables SDL input handler" OFF)
|
option(USE_SDL "Enables SDL input handler" OFF)
|
||||||
option(USE_SYSTEM_SDL "Prefer system SDL instead of the builtin one" ON)
|
option(USE_SYSTEM_CUBEB "Prefer system cubeb instead of the builtin one" OFF)
|
||||||
option(USE_SYSTEM_FFMPEG "Prefer system ffmpeg instead of the prebuild one" OFF)
|
|
||||||
option(USE_SYSTEM_OPENAL "Prefer system OpenAL instead of the prebuild one" ON)
|
|
||||||
option(USE_SYSTEM_CURL "Prefer system Curl instead of the prebuild one" ON)
|
option(USE_SYSTEM_CURL "Prefer system Curl instead of the prebuild one" ON)
|
||||||
|
option(USE_SYSTEM_FAUDIO "Prefer system FAudio instead of the builtin one" OFF)
|
||||||
|
option(USE_SYSTEM_FFMPEG "Prefer system ffmpeg instead of the prebuild one" OFF)
|
||||||
|
option(USE_SYSTEM_FLATBUFFERS "Prefer system flatbuffers instead of the builtin one" OFF)
|
||||||
|
option(USE_SYSTEM_LIBPNG "Prefer system libpng instead of the builtin one" OFF)
|
||||||
|
option(USE_SYSTEM_LIBUSB "Prefer system libusb instead of the builtin one" OFF)
|
||||||
|
option(USE_SYSTEM_MVK "Prefer system MoltenVK instead of the builtin one" OFF)
|
||||||
|
option(USE_SYSTEM_OPENAL "Prefer system OpenAL instead of the prebuild one" ON)
|
||||||
option(USE_SYSTEM_OPENCV "Prefer system OpenCV instead of the builtin one" ON)
|
option(USE_SYSTEM_OPENCV "Prefer system OpenCV instead of the builtin one" ON)
|
||||||
|
option(USE_SYSTEM_PUGIXML "Prefer system pugixml instead of the builtin one" OFF)
|
||||||
|
option(USE_SYSTEM_SDL "Prefer system SDL instead of the builtin one" ON)
|
||||||
|
option(USE_SYSTEM_WOLFSSL "Prefer system MoltenVK instead of the builtin one" OFF)
|
||||||
|
option(USE_SYSTEM_ZLIB "Prefer system ZLIB instead of the builtin one" ON)
|
||||||
|
option(HAS_MEMORY_BREAKPOINTS "Add support for memory breakpoints to the interpreter" OFF)
|
||||||
option(USE_LTO "Use LTO for building" ON)
|
option(USE_LTO "Use LTO for building" ON)
|
||||||
|
option(BUILD_RPCS3_TESTS "Build RPCS3 unit tests." OFF)
|
||||||
|
option(RUN_RPCS3_TESTS "Run RPCS3 unit tests. Requires BUILD_RPCS3_TESTS" OFF)
|
||||||
|
|
||||||
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/buildfiles/cmake")
|
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/buildfiles/cmake")
|
||||||
|
|
||||||
|
@ -104,11 +123,6 @@ if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||||
message( FATAL_ERROR "RPCS3 can only be compiled on 64-bit platforms." )
|
message( FATAL_ERROR "RPCS3 can only be compiled on 64-bit platforms." )
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
find_program(CCACHE_FOUND ccache)
|
|
||||||
if(CCACHE_FOUND)
|
|
||||||
set(CMAKE_CXX_COMPILER_LAUNCHER ccache)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(APPLE AND CMAKE_OSX_ARCHITECTURES STREQUAL "arm64")
|
if(APPLE AND CMAKE_OSX_ARCHITECTURES STREQUAL "arm64")
|
||||||
include_directories(/opt/homebrew/include)
|
include_directories(/opt/homebrew/include)
|
||||||
link_directories(/opt/homebrew/lib)
|
link_directories(/opt/homebrew/lib)
|
||||||
|
@ -143,6 +157,9 @@ 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_DEBUG "${PROJECT_BINARY_DIR}/bin")
|
||||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${PROJECT_BINARY_DIR}/bin")
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${PROJECT_BINARY_DIR}/bin")
|
||||||
|
|
||||||
|
if(BUILD_RPCS3_TESTS)
|
||||||
|
enable_testing()
|
||||||
|
endif()
|
||||||
add_subdirectory(rpcs3)
|
add_subdirectory(rpcs3)
|
||||||
|
|
||||||
set_directory_properties(PROPERTIES VS_STARTUP_PROJECT rpcs3)
|
set_directory_properties(PROPERTIES VS_STARTUP_PROJECT rpcs3)
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
RPCS3
|
RPCS3
|
||||||
=====
|
=====
|
||||||
|
|
||||||
[](https://dev.azure.com/nekotekina/nekotekina/_build?definitionId=4&branchName=master)
|
[](https://github.com/RPCS3/rpcs3/actions/workflows/rpcs3.yml)
|
||||||
[](https://cirrus-ci.com/github/RPCS3/rpcs3)
|
[](https://discord.gg/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.
|
The world's first free and open-source PlayStation 3 emulator/debugger, written in C++ for Windows, Linux, macOS and FreeBSD.
|
||||||
|
|
||||||
|
@ -21,7 +20,6 @@ If you want to contribute as a developer, please take a look at the following pa
|
||||||
|
|
||||||
* [Coding Style](https://github.com/RPCS3/rpcs3/wiki/Coding-Style)
|
* [Coding Style](https://github.com/RPCS3/rpcs3/wiki/Coding-Style)
|
||||||
* [Developer Information](https://github.com/RPCS3/rpcs3/wiki/Developer-Information)
|
* [Developer Information](https://github.com/RPCS3/rpcs3/wiki/Developer-Information)
|
||||||
* [Roadmap](https://rpcs3.net/roadmap)
|
|
||||||
|
|
||||||
You should also contact any of the developers in the forums or in the Discord server to learn more about the current state of the emulator.
|
You should also contact any of the developers in the forums or in the Discord server to learn more about the current state of the emulator.
|
||||||
|
|
||||||
|
@ -33,7 +31,7 @@ See [BUILDING.md](BUILDING.md) for more information about how to setup an enviro
|
||||||
|
|
||||||
Check our friendly [quickstart](https://rpcs3.net/quickstart) guide to make sure your computer meets the minimum system requirements to run RPCS3.
|
Check our friendly [quickstart](https://rpcs3.net/quickstart) guide to make sure your computer meets the minimum system requirements to run RPCS3.
|
||||||
|
|
||||||
Don't forget to have your graphics driver up to date and to install the [Visual C++ Redistributable Packages for Visual Studio 2019](https://aka.ms/vs/16/release/VC_redist.x64.exe) if you are a Windows user.
|
Don't forget to have your graphics driver up to date and to install the [Visual C++ Redistributable Packages for Visual Studio 2022](https://aka.ms/vs/17/release/VC_redist.x64.exe) if you are a Windows user.
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|
|
@ -337,6 +337,18 @@ void cfg::encode(YAML::Emitter& out, const cfg::_base& rhs)
|
||||||
out << YAML::EndMap;
|
out << YAML::EndMap;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
case type::node_map:
|
||||||
|
{
|
||||||
|
//out << YAML::Block; // Does nothing, output is in Flow mode still (TODO)
|
||||||
|
out << YAML::BeginMap;
|
||||||
|
for (const auto& np : static_cast<const node_map_entry&>(rhs).get_map())
|
||||||
|
{
|
||||||
|
out << YAML::Key << np.first;
|
||||||
|
out << YAML::Value << fmt::format("%s", np.second);
|
||||||
|
}
|
||||||
|
out << YAML::EndMap;
|
||||||
|
return;
|
||||||
|
}
|
||||||
case type::log:
|
case type::log:
|
||||||
{
|
{
|
||||||
out << YAML::BeginMap;
|
out << YAML::BeginMap;
|
||||||
|
@ -417,6 +429,7 @@ void cfg::decode(const YAML::Node& data, cfg::_base& rhs, bool dynamic)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case type::map:
|
case type::map:
|
||||||
|
case type::node_map:
|
||||||
{
|
{
|
||||||
if (!data.IsMap())
|
if (!data.IsMap())
|
||||||
{
|
{
|
||||||
|
|
|
@ -41,6 +41,7 @@ namespace cfg
|
||||||
string, // cfg::string type
|
string, // cfg::string type
|
||||||
set, // cfg::set_entry type
|
set, // cfg::set_entry type
|
||||||
map, // cfg::map_entry type
|
map, // cfg::map_entry type
|
||||||
|
node_map, // cfg::node_map_entry type
|
||||||
log, // cfg::log_entry type
|
log, // cfg::log_entry type
|
||||||
device, // cfg::device_entry type
|
device, // cfg::device_entry type
|
||||||
};
|
};
|
||||||
|
@ -542,7 +543,7 @@ namespace cfg
|
||||||
std::string def;
|
std::string def;
|
||||||
|
|
||||||
string(node* owner, std::string name, std::string def = {}, bool dynamic = false)
|
string(node* owner, std::string name, std::string def = {}, bool dynamic = false)
|
||||||
: _base(type::string, owner, name, dynamic)
|
: _base(type::string, owner, std::move(name), dynamic)
|
||||||
, m_value(def)
|
, m_value(def)
|
||||||
, def(std::move(def))
|
, def(std::move(def))
|
||||||
{
|
{
|
||||||
|
@ -553,21 +554,6 @@ namespace cfg
|
||||||
return *m_value.load().get();
|
return *m_value.load().get();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<const std::string&, shared_ptr<std::string>> get() const
|
|
||||||
{
|
|
||||||
auto v = m_value.load();
|
|
||||||
|
|
||||||
if (auto s = v.get())
|
|
||||||
{
|
|
||||||
return {*s, std::move(v)};
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
static const std::string _empty;
|
|
||||||
return {_empty, {}};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void from_default() override;
|
void from_default() override;
|
||||||
|
|
||||||
std::string to_string() const override
|
std::string to_string() const override
|
||||||
|
@ -627,13 +613,13 @@ namespace cfg
|
||||||
template<typename T>
|
template<typename T>
|
||||||
using map_of_type = std::map<std::string, T, std::less<>>;
|
using map_of_type = std::map<std::string, T, std::less<>>;
|
||||||
|
|
||||||
class map_entry final : public _base
|
class map_entry : public _base
|
||||||
{
|
{
|
||||||
map_of_type<std::string> m_map{};
|
map_of_type<std::string> m_map{};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
map_entry(node* owner, const std::string& name)
|
map_entry(node* owner, const std::string& name, type _type = type::map)
|
||||||
: _base(type::map, owner, name, true)
|
: _base(_type, owner, name, true)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -652,6 +638,15 @@ namespace cfg
|
||||||
void from_default() override;
|
void from_default() override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class node_map_entry final : public map_entry
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
node_map_entry(node* owner, const std::string& name)
|
||||||
|
: map_entry(owner, name, type::node_map)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
class log_entry final : public _base
|
class log_entry final : public _base
|
||||||
{
|
{
|
||||||
map_of_type<logs::level> m_map{};
|
map_of_type<logs::level> m_map{};
|
||||||
|
|
|
@ -14,6 +14,12 @@
|
||||||
|
|
||||||
using namespace std::literals::string_literals;
|
using namespace std::literals::string_literals;
|
||||||
|
|
||||||
|
#ifdef ANDROID
|
||||||
|
std::string g_android_executable_dir;
|
||||||
|
std::string g_android_config_dir;
|
||||||
|
std::string g_android_cache_dir;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
|
||||||
#include "Utilities/StrUtil.h"
|
#include "Utilities/StrUtil.h"
|
||||||
|
@ -387,6 +393,399 @@ namespace fs
|
||||||
g_tls_error = error::readonly;
|
g_tls_error = error::readonly;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
class windows_file final : public file_base
|
||||||
|
{
|
||||||
|
HANDLE m_handle;
|
||||||
|
atomic_t<u64> m_pos;
|
||||||
|
|
||||||
|
public:
|
||||||
|
windows_file(HANDLE handle)
|
||||||
|
: m_handle(handle)
|
||||||
|
, m_pos(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
~windows_file() override
|
||||||
|
{
|
||||||
|
if (m_handle != nullptr)
|
||||||
|
{
|
||||||
|
CloseHandle(m_handle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stat_t get_stat() override
|
||||||
|
{
|
||||||
|
FILE_BASIC_INFO basic_info;
|
||||||
|
ensure(GetFileInformationByHandleEx(m_handle, FileBasicInfo, &basic_info, sizeof(FILE_BASIC_INFO))); // "file::stat"
|
||||||
|
|
||||||
|
stat_t info;
|
||||||
|
info.is_directory = (basic_info.FileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0;
|
||||||
|
info.is_writable = (basic_info.FileAttributes & FILE_ATTRIBUTE_READONLY) == 0;
|
||||||
|
info.size = this->size();
|
||||||
|
info.atime = to_time(basic_info.LastAccessTime);
|
||||||
|
info.mtime = to_time(basic_info.LastWriteTime);
|
||||||
|
info.ctime = info.mtime;
|
||||||
|
|
||||||
|
if (info.atime < info.mtime)
|
||||||
|
info.atime = info.mtime;
|
||||||
|
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sync() override
|
||||||
|
{
|
||||||
|
ensure(FlushFileBuffers(m_handle)); // "file::sync"
|
||||||
|
}
|
||||||
|
|
||||||
|
bool trunc(u64 length) override
|
||||||
|
{
|
||||||
|
FILE_END_OF_FILE_INFO _eof;
|
||||||
|
_eof.EndOfFile.QuadPart = length;
|
||||||
|
|
||||||
|
if (!SetFileInformationByHandle(m_handle, FileEndOfFileInfo, &_eof, sizeof(_eof)))
|
||||||
|
{
|
||||||
|
g_tls_error = to_error(GetLastError());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
u64 read(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{};
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
count -= size;
|
||||||
|
data += size;
|
||||||
|
offset += size;
|
||||||
|
}
|
||||||
|
|
||||||
|
return nread_sum;
|
||||||
|
}
|
||||||
|
|
||||||
|
u64 write(const void* buffer, u64 count) override
|
||||||
|
{
|
||||||
|
u64 nwritten_sum = 0;
|
||||||
|
|
||||||
|
for (const char* data = static_cast<const char*>(buffer); count;)
|
||||||
|
{
|
||||||
|
const DWORD size = static_cast<DWORD>(std::min<u64>(count, DWORD{umax} & -4096));
|
||||||
|
|
||||||
|
DWORD nwritten = 0;
|
||||||
|
OVERLAPPED ovl{};
|
||||||
|
const u64 pos = m_pos.fetch_add(size);
|
||||||
|
ovl.Offset = DWORD(pos);
|
||||||
|
ovl.OffsetHigh = DWORD(pos >> 32);
|
||||||
|
ensure(WriteFile(m_handle, data, size, &nwritten, &ovl)); // "file::write"
|
||||||
|
ensure(nwritten == size);
|
||||||
|
nwritten_sum += nwritten;
|
||||||
|
|
||||||
|
if (nwritten < size)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
count -= size;
|
||||||
|
data += size;
|
||||||
|
}
|
||||||
|
|
||||||
|
return nwritten_sum;
|
||||||
|
}
|
||||||
|
|
||||||
|
u64 seek(s64 offset, seek_mode whence) override
|
||||||
|
{
|
||||||
|
if (whence > seek_end)
|
||||||
|
{
|
||||||
|
fmt::throw_exception("Invalid whence (0x%x)", whence);
|
||||||
|
}
|
||||||
|
|
||||||
|
const s64 new_pos =
|
||||||
|
whence == fs::seek_set ? offset :
|
||||||
|
whence == fs::seek_cur ? offset + m_pos :
|
||||||
|
whence == fs::seek_end ? offset + size() : -1;
|
||||||
|
|
||||||
|
if (new_pos < 0)
|
||||||
|
{
|
||||||
|
fs::g_tls_error = fs::error::inval;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_pos = new_pos;
|
||||||
|
return m_pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
u64 size() override
|
||||||
|
{
|
||||||
|
LARGE_INTEGER size;
|
||||||
|
ensure(GetFileSizeEx(m_handle, &size)); // "file::size"
|
||||||
|
|
||||||
|
return size.QuadPart;
|
||||||
|
}
|
||||||
|
|
||||||
|
native_handle get_handle() override
|
||||||
|
{
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
void release() override
|
||||||
|
{
|
||||||
|
m_handle = nullptr;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
#else
|
||||||
|
class unix_file final : public file_base
|
||||||
|
{
|
||||||
|
int m_fd;
|
||||||
|
|
||||||
|
public:
|
||||||
|
unix_file(int fd)
|
||||||
|
: m_fd(fd)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
~unix_file() override
|
||||||
|
{
|
||||||
|
if (m_fd >= 0)
|
||||||
|
{
|
||||||
|
::close(m_fd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stat_t get_stat() override
|
||||||
|
{
|
||||||
|
struct ::stat file_info;
|
||||||
|
ensure(::fstat(m_fd, &file_info) == 0); // "file::stat"
|
||||||
|
|
||||||
|
stat_t info;
|
||||||
|
info.is_directory = S_ISDIR(file_info.st_mode);
|
||||||
|
info.is_writable = file_info.st_mode & 0200; // HACK: approximation
|
||||||
|
info.size = file_info.st_size;
|
||||||
|
info.atime = file_info.st_atime;
|
||||||
|
info.mtime = file_info.st_mtime;
|
||||||
|
info.ctime = info.mtime;
|
||||||
|
|
||||||
|
if (info.atime < info.mtime)
|
||||||
|
info.atime = info.mtime;
|
||||||
|
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sync() override
|
||||||
|
{
|
||||||
|
ensure(::fsync(m_fd) == 0); // "file::sync"
|
||||||
|
}
|
||||||
|
|
||||||
|
bool trunc(u64 length) override
|
||||||
|
{
|
||||||
|
if (::ftruncate(m_fd, length) != 0)
|
||||||
|
{
|
||||||
|
g_tls_error = to_error(errno);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
u64 read(void* buffer, u64 count) override
|
||||||
|
{
|
||||||
|
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
|
||||||
|
{
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
u64 seek(s64 offset, seek_mode whence) override
|
||||||
|
{
|
||||||
|
if (whence > seek_end)
|
||||||
|
{
|
||||||
|
fmt::throw_exception("Invalid whence (0x%x)", whence);
|
||||||
|
}
|
||||||
|
|
||||||
|
const int mode =
|
||||||
|
whence == seek_set ? SEEK_SET :
|
||||||
|
whence == seek_cur ? SEEK_CUR : SEEK_END;
|
||||||
|
|
||||||
|
const auto result = ::lseek(m_fd, offset, mode);
|
||||||
|
|
||||||
|
if (result == -1)
|
||||||
|
{
|
||||||
|
g_tls_error = to_error(errno);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
u64 size() override
|
||||||
|
{
|
||||||
|
struct ::stat file_info;
|
||||||
|
ensure(::fstat(m_fd, &file_info) == 0); // "file::size"
|
||||||
|
|
||||||
|
return file_info.st_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
native_handle get_handle() override
|
||||||
|
{
|
||||||
|
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");
|
||||||
|
static_assert(offsetof(iovec, iov_len) == offsetof(iovec_clone, iov_len), "Weird iovec::iov_len offset");
|
||||||
|
|
||||||
|
u64 result = 0;
|
||||||
|
|
||||||
|
while (buf_count)
|
||||||
|
{
|
||||||
|
iovec arg[256];
|
||||||
|
const auto count = std::min<u64>(buf_count, 256);
|
||||||
|
std::memcpy(&arg, buffers, sizeof(iovec) * count);
|
||||||
|
const auto added = ::writev(m_fd, arg, count);
|
||||||
|
ensure(added != -1); // "file::write_gather"
|
||||||
|
result += added;
|
||||||
|
buf_count -= count;
|
||||||
|
buffers += count;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
void release() override
|
||||||
|
{
|
||||||
|
m_fd = -1;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
shared_ptr<fs::device_base> fs::device_manager::get_device(const std::string& path)
|
shared_ptr<fs::device_base> fs::device_manager::get_device(const std::string& path)
|
||||||
|
@ -1241,205 +1640,6 @@ fs::file::file(const std::string& path, bs_t<open_mode> mode)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
~windows_file() override
|
|
||||||
{
|
|
||||||
CloseHandle(m_handle);
|
|
||||||
}
|
|
||||||
|
|
||||||
stat_t get_stat() override
|
|
||||||
{
|
|
||||||
FILE_BASIC_INFO basic_info;
|
|
||||||
ensure(GetFileInformationByHandleEx(m_handle, FileBasicInfo, &basic_info, sizeof(FILE_BASIC_INFO))); // "file::stat"
|
|
||||||
|
|
||||||
stat_t info;
|
|
||||||
info.is_directory = (basic_info.FileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0;
|
|
||||||
info.is_writable = (basic_info.FileAttributes & FILE_ATTRIBUTE_READONLY) == 0;
|
|
||||||
info.size = this->size();
|
|
||||||
info.atime = to_time(basic_info.LastAccessTime);
|
|
||||||
info.mtime = to_time(basic_info.LastWriteTime);
|
|
||||||
info.ctime = info.mtime;
|
|
||||||
|
|
||||||
if (info.atime < info.mtime)
|
|
||||||
info.atime = info.mtime;
|
|
||||||
|
|
||||||
return info;
|
|
||||||
}
|
|
||||||
|
|
||||||
void sync() override
|
|
||||||
{
|
|
||||||
ensure(FlushFileBuffers(m_handle)); // "file::sync"
|
|
||||||
}
|
|
||||||
|
|
||||||
bool trunc(u64 length) override
|
|
||||||
{
|
|
||||||
FILE_END_OF_FILE_INFO _eof;
|
|
||||||
_eof.EndOfFile.QuadPart = length;
|
|
||||||
|
|
||||||
if (!SetFileInformationByHandle(m_handle, FileEndOfFileInfo, &_eof, sizeof(_eof)))
|
|
||||||
{
|
|
||||||
g_tls_error = to_error(GetLastError());
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
u64 read(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{};
|
|
||||||
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)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
count -= size;
|
|
||||||
data += size;
|
|
||||||
offset += size;
|
|
||||||
}
|
|
||||||
|
|
||||||
return nread_sum;
|
|
||||||
}
|
|
||||||
|
|
||||||
u64 write(const void* buffer, u64 count) override
|
|
||||||
{
|
|
||||||
u64 nwritten_sum = 0;
|
|
||||||
|
|
||||||
for (const char* data = static_cast<const char*>(buffer); count;)
|
|
||||||
{
|
|
||||||
const DWORD size = static_cast<DWORD>(std::min<u64>(count, DWORD{umax} & -4096));
|
|
||||||
|
|
||||||
DWORD nwritten = 0;
|
|
||||||
OVERLAPPED ovl{};
|
|
||||||
const u64 pos = m_pos.fetch_add(size);
|
|
||||||
ovl.Offset = DWORD(pos);
|
|
||||||
ovl.OffsetHigh = DWORD(pos >> 32);
|
|
||||||
ensure(WriteFile(m_handle, data, size, &nwritten, &ovl)); // "file::write"
|
|
||||||
ensure(nwritten == size);
|
|
||||||
nwritten_sum += nwritten;
|
|
||||||
|
|
||||||
if (nwritten < size)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
count -= size;
|
|
||||||
data += size;
|
|
||||||
}
|
|
||||||
|
|
||||||
return nwritten_sum;
|
|
||||||
}
|
|
||||||
|
|
||||||
u64 seek(s64 offset, seek_mode whence) override
|
|
||||||
{
|
|
||||||
if (whence > seek_end)
|
|
||||||
{
|
|
||||||
fmt::throw_exception("Invalid whence (0x%x)", whence);
|
|
||||||
}
|
|
||||||
|
|
||||||
const s64 new_pos =
|
|
||||||
whence == fs::seek_set ? offset :
|
|
||||||
whence == fs::seek_cur ? offset + m_pos :
|
|
||||||
whence == fs::seek_end ? offset + size() : -1;
|
|
||||||
|
|
||||||
if (new_pos < 0)
|
|
||||||
{
|
|
||||||
fs::g_tls_error = fs::error::inval;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_pos = new_pos;
|
|
||||||
return m_pos;
|
|
||||||
}
|
|
||||||
|
|
||||||
u64 size() override
|
|
||||||
{
|
|
||||||
LARGE_INTEGER size;
|
|
||||||
ensure(GetFileSizeEx(m_handle, &size)); // "file::size"
|
|
||||||
|
|
||||||
return size.QuadPart;
|
|
||||||
}
|
|
||||||
|
|
||||||
native_handle get_handle() override
|
|
||||||
{
|
|
||||||
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);
|
m_file = std::make_unique<windows_file>(handle);
|
||||||
#else
|
#else
|
||||||
int flags = O_CLOEXEC; // Ensures all files are closed on execl for auto updater
|
int flags = O_CLOEXEC; // Ensures all files are closed on execl for auto updater
|
||||||
|
@ -1490,182 +1690,6 @@ fs::file::file(const std::string& path, bs_t<open_mode> mode)
|
||||||
ensure(::ftruncate(fd, 0) == 0);
|
ensure(::ftruncate(fd, 0) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
class unix_file final : public file_base
|
|
||||||
{
|
|
||||||
const int m_fd;
|
|
||||||
|
|
||||||
public:
|
|
||||||
unix_file(int fd)
|
|
||||||
: m_fd(fd)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
~unix_file() override
|
|
||||||
{
|
|
||||||
::close(m_fd);
|
|
||||||
}
|
|
||||||
|
|
||||||
stat_t get_stat() override
|
|
||||||
{
|
|
||||||
struct ::stat file_info;
|
|
||||||
ensure(::fstat(m_fd, &file_info) == 0); // "file::stat"
|
|
||||||
|
|
||||||
stat_t info;
|
|
||||||
info.is_directory = S_ISDIR(file_info.st_mode);
|
|
||||||
info.is_writable = file_info.st_mode & 0200; // HACK: approximation
|
|
||||||
info.size = file_info.st_size;
|
|
||||||
info.atime = file_info.st_atime;
|
|
||||||
info.mtime = file_info.st_mtime;
|
|
||||||
info.ctime = info.mtime;
|
|
||||||
|
|
||||||
if (info.atime < info.mtime)
|
|
||||||
info.atime = info.mtime;
|
|
||||||
|
|
||||||
return info;
|
|
||||||
}
|
|
||||||
|
|
||||||
void sync() override
|
|
||||||
{
|
|
||||||
ensure(::fsync(m_fd) == 0); // "file::sync"
|
|
||||||
}
|
|
||||||
|
|
||||||
bool trunc(u64 length) override
|
|
||||||
{
|
|
||||||
if (::ftruncate(m_fd, length) != 0)
|
|
||||||
{
|
|
||||||
g_tls_error = to_error(errno);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
u64 read(void* buffer, u64 count) override
|
|
||||||
{
|
|
||||||
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
|
|
||||||
{
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
u64 seek(s64 offset, seek_mode whence) override
|
|
||||||
{
|
|
||||||
if (whence > seek_end)
|
|
||||||
{
|
|
||||||
fmt::throw_exception("Invalid whence (0x%x)", whence);
|
|
||||||
}
|
|
||||||
|
|
||||||
const int mode =
|
|
||||||
whence == seek_set ? SEEK_SET :
|
|
||||||
whence == seek_cur ? SEEK_CUR : SEEK_END;
|
|
||||||
|
|
||||||
const auto result = ::lseek(m_fd, offset, mode);
|
|
||||||
|
|
||||||
if (result == -1)
|
|
||||||
{
|
|
||||||
g_tls_error = to_error(errno);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
u64 size() override
|
|
||||||
{
|
|
||||||
struct ::stat file_info;
|
|
||||||
ensure(::fstat(m_fd, &file_info) == 0); // "file::size"
|
|
||||||
|
|
||||||
return file_info.st_size;
|
|
||||||
}
|
|
||||||
|
|
||||||
native_handle get_handle() override
|
|
||||||
{
|
|
||||||
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");
|
|
||||||
static_assert(offsetof(iovec, iov_len) == offsetof(iovec_clone, iov_len), "Weird iovec::iov_len offset");
|
|
||||||
|
|
||||||
u64 result = 0;
|
|
||||||
|
|
||||||
while (buf_count)
|
|
||||||
{
|
|
||||||
iovec arg[256];
|
|
||||||
const auto count = std::min<u64>(buf_count, 256);
|
|
||||||
std::memcpy(&arg, buffers, sizeof(iovec) * count);
|
|
||||||
const auto added = ::writev(m_fd, arg, count);
|
|
||||||
ensure(added != -1); // "file::write_gather"
|
|
||||||
result += added;
|
|
||||||
buf_count -= count;
|
|
||||||
buffers += count;
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
m_file = std::make_unique<unix_file>(fd);
|
m_file = std::make_unique<unix_file>(fd);
|
||||||
|
|
||||||
if (mode & fs::isfile && !(mode & fs::write) && get_stat().is_directory)
|
if (mode & fs::isfile && !(mode & fs::write) && get_stat().is_directory)
|
||||||
|
@ -1676,6 +1700,21 @@ fs::file::file(const std::string& path, bs_t<open_mode> mode)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
fs::file fs::file::from_native_handle(native_handle handle)
|
||||||
|
{
|
||||||
|
fs::file result;
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
result.m_file = std::make_unique<windows_file>(static_cast<HANDLE>(handle));
|
||||||
|
#else
|
||||||
|
result.m_file = std::make_unique<unix_file>(handle);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
fs::file::file(const void* ptr, usz size)
|
fs::file::file(const void* ptr, usz size)
|
||||||
{
|
{
|
||||||
class memory_stream : public file_base
|
class memory_stream : public file_base
|
||||||
|
@ -1957,6 +1996,9 @@ bool fs::file::strict_read_check(u64 offset, u64 _size, u64 type_size) const
|
||||||
|
|
||||||
std::string fs::get_executable_path()
|
std::string fs::get_executable_path()
|
||||||
{
|
{
|
||||||
|
#ifdef ANDROID
|
||||||
|
return g_android_executable_dir + "/dummy-rpcs3.apk";
|
||||||
|
#else
|
||||||
// Use magic static
|
// Use magic static
|
||||||
static const std::string s_exe_path = []
|
static const std::string s_exe_path = []
|
||||||
{
|
{
|
||||||
|
@ -2002,10 +2044,14 @@ std::string fs::get_executable_path()
|
||||||
}();
|
}();
|
||||||
|
|
||||||
return s_exe_path;
|
return s_exe_path;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string fs::get_executable_dir()
|
std::string fs::get_executable_dir()
|
||||||
{
|
{
|
||||||
|
#ifdef ANDROID
|
||||||
|
return g_android_executable_dir;
|
||||||
|
#else
|
||||||
// Use magic static
|
// Use magic static
|
||||||
static const std::string s_exe_dir = []
|
static const std::string s_exe_dir = []
|
||||||
{
|
{
|
||||||
|
@ -2019,10 +2065,14 @@ std::string fs::get_executable_dir()
|
||||||
}();
|
}();
|
||||||
|
|
||||||
return s_exe_dir;
|
return s_exe_dir;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string& fs::get_config_dir([[maybe_unused]] bool get_config_subdirectory)
|
const std::string& fs::get_config_dir([[maybe_unused]] bool get_config_subdirectory)
|
||||||
{
|
{
|
||||||
|
#ifdef ANDROID
|
||||||
|
return g_android_config_dir;
|
||||||
|
#else
|
||||||
// Use magic static
|
// Use magic static
|
||||||
static const std::string s_dir = []
|
static const std::string s_dir = []
|
||||||
{
|
{
|
||||||
|
@ -2112,10 +2162,14 @@ const std::string& fs::get_config_dir([[maybe_unused]] bool get_config_subdirect
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return s_dir;
|
return s_dir;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string& fs::get_cache_dir()
|
const std::string& fs::get_cache_dir()
|
||||||
{
|
{
|
||||||
|
#ifdef ANDROID
|
||||||
|
return g_android_cache_dir;
|
||||||
|
#else
|
||||||
static const std::string s_dir = []
|
static const std::string s_dir = []
|
||||||
{
|
{
|
||||||
std::string dir;
|
std::string dir;
|
||||||
|
@ -2150,6 +2204,7 @@ const std::string& fs::get_cache_dir()
|
||||||
}();
|
}();
|
||||||
|
|
||||||
return s_dir;
|
return s_dir;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string& fs::get_log_dir()
|
const std::string& fs::get_log_dir()
|
||||||
|
|
|
@ -114,6 +114,9 @@ namespace fs
|
||||||
virtual native_handle get_handle();
|
virtual native_handle get_handle();
|
||||||
virtual file_id get_id();
|
virtual file_id get_id();
|
||||||
virtual u64 write_gather(const iovec_clone* buffers, u64 buf_count);
|
virtual u64 write_gather(const iovec_clone* buffers, u64 buf_count);
|
||||||
|
virtual void release()
|
||||||
|
{
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Directory entry (TODO)
|
// Directory entry (TODO)
|
||||||
|
@ -251,6 +254,8 @@ namespace fs
|
||||||
// Open file with specified mode
|
// Open file with specified mode
|
||||||
explicit file(const std::string& path, bs_t<open_mode> mode = ::fs::read);
|
explicit file(const std::string& path, bs_t<open_mode> mode = ::fs::read);
|
||||||
|
|
||||||
|
static file from_native_handle(native_handle handle);
|
||||||
|
|
||||||
// Open memory for read
|
// Open memory for read
|
||||||
explicit file(const void* ptr, usz size);
|
explicit file(const void* ptr, usz size);
|
||||||
|
|
||||||
|
@ -280,9 +285,17 @@ namespace fs
|
||||||
m_file = std::move(ptr);
|
m_file = std::move(ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void release_handle()
|
||||||
|
{
|
||||||
|
if (m_file)
|
||||||
|
{
|
||||||
|
release()->release();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
std::unique_ptr<file_base> release()
|
std::unique_ptr<file_base> release()
|
||||||
{
|
{
|
||||||
return std::move(m_file);
|
return std::exchange(m_file, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Change file size (possibly appending zero bytes)
|
// Change file size (possibly appending zero bytes)
|
||||||
|
|
|
@ -569,6 +569,6 @@ public:
|
||||||
bool add_sub_disk_space(ssz space);
|
bool add_sub_disk_space(ssz space);
|
||||||
};
|
};
|
||||||
|
|
||||||
llvm::StringRef fallback_cpu_detection();
|
const char *fallback_cpu_detection();
|
||||||
|
|
||||||
#endif // LLVM_AVAILABLE
|
#endif // LLVM_AVAILABLE
|
||||||
|
|
|
@ -344,15 +344,7 @@ jit_runtime_base& asmjit::get_global_runtime()
|
||||||
{
|
{
|
||||||
custom_runtime() noexcept
|
custom_runtime() noexcept
|
||||||
{
|
{
|
||||||
// Search starting in first 2 GiB of memory
|
ensure(m_pos.raw() = static_cast<uchar*>(utils::memory_reserve(size)));
|
||||||
for (u64 addr = size;; addr += size)
|
|
||||||
{
|
|
||||||
if (auto ptr = utils::memory_reserve(size, reinterpret_cast<void*>(addr)))
|
|
||||||
{
|
|
||||||
m_pos.raw() = static_cast<uchar*>(ptr);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Initialize "end" pointer
|
// Initialize "end" pointer
|
||||||
m_max = m_pos + size;
|
m_max = m_pos + size;
|
||||||
|
|
|
@ -46,6 +46,10 @@ LOG_CHANNEL(jit_log, "JIT");
|
||||||
#pragma GCC diagnostic pop
|
#pragma GCC diagnostic pop
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef ARCH_ARM64
|
||||||
|
#include "Emu/CPU/Backends/AArch64/AArch64Common.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
const bool jit_initialize = []() -> bool
|
const bool jit_initialize = []() -> bool
|
||||||
{
|
{
|
||||||
llvm::InitializeNativeTarget();
|
llvm::InitializeNativeTarget();
|
||||||
|
@ -409,7 +413,7 @@ public:
|
||||||
{
|
{
|
||||||
std::string name = m_path;
|
std::string name = m_path;
|
||||||
|
|
||||||
name.append(_module->getName().data());
|
name.append(_module->getName());
|
||||||
//fs::file(name, fs::rewrite).write(obj.getBufferStart(), obj.getBufferSize());
|
//fs::file(name, fs::rewrite).write(obj.getBufferStart(), obj.getBufferSize());
|
||||||
name.append(".gz");
|
name.append(".gz");
|
||||||
|
|
||||||
|
@ -421,9 +425,9 @@ public:
|
||||||
|
|
||||||
ensure(m_compiler);
|
ensure(m_compiler);
|
||||||
|
|
||||||
fs::file module_file(name, fs::rewrite);
|
fs::pending_file module_file;
|
||||||
|
|
||||||
if (!module_file)
|
if (!module_file.open((name)))
|
||||||
{
|
{
|
||||||
jit_log.error("LLVM: Failed to create module file: %s (%s)", name, fs::g_tls_error);
|
jit_log.error("LLVM: Failed to create module file: %s (%s)", name, fs::g_tls_error);
|
||||||
return;
|
return;
|
||||||
|
@ -438,18 +442,17 @@ public:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!zip(obj.getBufferStart(), obj.getBufferSize(), module_file))
|
if (!zip(obj.getBufferStart(), obj.getBufferSize(), module_file.file))
|
||||||
{
|
{
|
||||||
jit_log.error("LLVM: Failed to compress module: %s", _module->getName().data());
|
jit_log.error("LLVM: Failed to compress module: %s", std::string(_module->getName()));
|
||||||
module_file.close();
|
|
||||||
fs::remove_file(name);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
jit_log.trace("LLVM: Created module: %s", _module->getName().data());
|
jit_log.trace("LLVM: Created module: %s", std::string(_module->getName()));
|
||||||
|
|
||||||
// Restore space that was overestimated
|
// Restore space that was overestimated
|
||||||
ensure(m_compiler->add_sub_disk_space(max_size - module_file.size()));
|
ensure(m_compiler->add_sub_disk_space(max_size - module_file.file.size()));
|
||||||
|
module_file.commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
static std::unique_ptr<llvm::MemoryBuffer> load(const std::string& path)
|
static std::unique_ptr<llvm::MemoryBuffer> load(const std::string& path)
|
||||||
|
@ -590,8 +593,10 @@ std::string jit_compiler::triple1()
|
||||||
return llvm::Triple::normalize(llvm::sys::getProcessTriple());
|
return llvm::Triple::normalize(llvm::sys::getProcessTriple());
|
||||||
#elif defined(__APPLE__) && defined(ARCH_X64)
|
#elif defined(__APPLE__) && defined(ARCH_X64)
|
||||||
return llvm::Triple::normalize("x86_64-unknown-linux-gnu");
|
return llvm::Triple::normalize("x86_64-unknown-linux-gnu");
|
||||||
#elif defined(__APPLE__) && defined(ARCH_ARM64)
|
#elif (defined(__ANDROID__) || defined(__APPLE__)) && defined(ARCH_ARM64)
|
||||||
return llvm::Triple::normalize("aarch64-unknown-linux-android"); // Set environment to android to reserve x18
|
return llvm::Triple::normalize("aarch64-unknown-linux-android"); // Set environment to android to reserve x18
|
||||||
|
#elif defined(__ANDROID__) && defined(ARCH_X64)
|
||||||
|
return llvm::Triple::normalize("x86_64-unknown-linux-android");
|
||||||
#else
|
#else
|
||||||
return llvm::Triple::normalize(llvm::sys::getProcessTriple());
|
return llvm::Triple::normalize(llvm::sys::getProcessTriple());
|
||||||
#endif
|
#endif
|
||||||
|
@ -605,8 +610,10 @@ std::string jit_compiler::triple2()
|
||||||
return llvm::Triple::normalize("aarch64-unknown-linux-gnu");
|
return llvm::Triple::normalize("aarch64-unknown-linux-gnu");
|
||||||
#elif defined(__APPLE__) && defined(ARCH_X64)
|
#elif defined(__APPLE__) && defined(ARCH_X64)
|
||||||
return llvm::Triple::normalize("x86_64-unknown-linux-gnu");
|
return llvm::Triple::normalize("x86_64-unknown-linux-gnu");
|
||||||
#elif defined(__APPLE__) && defined(ARCH_ARM64)
|
#elif (defined(__ANDROID__) || defined(__APPLE__)) && defined(ARCH_ARM64)
|
||||||
return llvm::Triple::normalize("aarch64-unknown-linux-android"); // Set environment to android to reserve x18
|
return llvm::Triple::normalize("aarch64-unknown-linux-android"); // Set environment to android to reserve x18
|
||||||
|
#elif defined(__ANDROID__) && defined(ARCH_X64)
|
||||||
|
return llvm::Triple::normalize("x86_64-unknown-linux-android"); // Set environment to android to reserve x18
|
||||||
#else
|
#else
|
||||||
return llvm::Triple::normalize(llvm::sys::getProcessTriple());
|
return llvm::Triple::normalize(llvm::sys::getProcessTriple());
|
||||||
#endif
|
#endif
|
||||||
|
@ -817,7 +824,7 @@ u64 jit_compiler::get(const std::string& name)
|
||||||
return m_engine->getGlobalValueAddress(name);
|
return m_engine->getGlobalValueAddress(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
llvm::StringRef fallback_cpu_detection()
|
const char * fallback_cpu_detection()
|
||||||
{
|
{
|
||||||
#if defined(ARCH_X64)
|
#if defined(ARCH_X64)
|
||||||
// If we got here we either have a very old and outdated CPU or a new CPU that has not been seen by LLVM yet.
|
// If we got here we either have a very old and outdated CPU or a new CPU that has not been seen by LLVM yet.
|
||||||
|
@ -883,10 +890,26 @@ llvm::StringRef fallback_cpu_detection()
|
||||||
}
|
}
|
||||||
|
|
||||||
#elif defined(ARCH_ARM64)
|
#elif defined(ARCH_ARM64)
|
||||||
|
#ifdef ANDROID
|
||||||
|
static std::string s_result = []() -> std::string
|
||||||
|
{
|
||||||
|
std::string result = aarch64::get_cpu_name();
|
||||||
|
if (result.empty())
|
||||||
|
{
|
||||||
|
return "cortex-a78";
|
||||||
|
}
|
||||||
|
|
||||||
|
std::transform(result.begin(), result.end(), result.begin(), ::tolower);
|
||||||
|
return result;
|
||||||
|
}();
|
||||||
|
|
||||||
|
return s_result.c_str();
|
||||||
|
#else
|
||||||
// TODO: Read the data from /proc/cpuinfo. ARM CPU registers are not accessible from usermode.
|
// TODO: Read the data from /proc/cpuinfo. ARM CPU registers are not accessible from usermode.
|
||||||
// This will be a pain when supporting snapdragon on windows but we'll cross that bridge when we get there.
|
// This will be a pain when supporting snapdragon on windows but we'll cross that bridge when we get there.
|
||||||
// Require at least armv8-2a. Older chips are going to be useless anyway.
|
// Require at least armv8-2a. Older chips are going to be useless anyway.
|
||||||
return "cortex-a78";
|
return "cortex-a78";
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Failed to guess, use generic fallback
|
// Failed to guess, use generic fallback
|
||||||
|
|
|
@ -748,6 +748,12 @@ void fmt::raw_append(std::string& out, const char* fmt, const fmt_type_info* sup
|
||||||
|
|
||||||
std::string fmt::replace_all(std::string_view src, std::string_view from, std::string_view to, usz count)
|
std::string fmt::replace_all(std::string_view src, std::string_view from, std::string_view to, usz count)
|
||||||
{
|
{
|
||||||
|
if (src.empty())
|
||||||
|
return {};
|
||||||
|
|
||||||
|
if (from.empty() || count == 0)
|
||||||
|
return std::string(src);
|
||||||
|
|
||||||
std::string target;
|
std::string target;
|
||||||
target.reserve(src.size() + to.size());
|
target.reserve(src.size() + to.size());
|
||||||
|
|
||||||
|
@ -824,7 +830,12 @@ std::string fmt::trim(const std::string& source, std::string_view values)
|
||||||
if (begin == source.npos)
|
if (begin == source.npos)
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
return source.substr(begin, source.find_last_not_of(values) + 1);
|
const usz end = source.find_last_not_of(values);
|
||||||
|
|
||||||
|
if (end == source.npos)
|
||||||
|
return source.substr(begin);
|
||||||
|
|
||||||
|
return source.substr(begin, end + 1 - begin);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string fmt::trim_front(const std::string& source, std::string_view values)
|
std::string fmt::trim_front(const std::string& source, std::string_view values)
|
||||||
|
@ -864,45 +875,6 @@ std::string fmt::truncate(std::string_view src, usz length)
|
||||||
return std::string(src.begin(), src.begin() + std::min(src.size(), length));
|
return std::string(src.begin(), src.begin() + std::min(src.size(), length));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool fmt::match(const std::string& source, const std::string& mask)
|
|
||||||
{
|
|
||||||
usz source_position = 0, mask_position = 0;
|
|
||||||
|
|
||||||
for (; source_position < source.size() && mask_position < mask.size(); ++mask_position, ++source_position)
|
|
||||||
{
|
|
||||||
switch (mask[mask_position])
|
|
||||||
{
|
|
||||||
case '?': break;
|
|
||||||
|
|
||||||
case '*':
|
|
||||||
for (usz test_source_position = source_position; test_source_position < source.size(); ++test_source_position)
|
|
||||||
{
|
|
||||||
if (match(source.substr(test_source_position), mask.substr(mask_position + 1)))
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
|
|
||||||
default:
|
|
||||||
if (source[source_position] != mask[mask_position])
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (source_position != source.size())
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (mask_position != mask.size())
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string get_file_extension(const std::string& file_path)
|
std::string get_file_extension(const std::string& file_path)
|
||||||
{
|
{
|
||||||
if (usz dotpos = file_path.find_last_of('.'); dotpos != std::string::npos && dotpos + 1 < file_path.size())
|
if (usz dotpos = file_path.find_last_of('.'); dotpos != std::string::npos && dotpos + 1 < file_path.size())
|
||||||
|
|
|
@ -393,7 +393,7 @@ namespace fmt
|
||||||
raw_throw_exception(src_loc, reinterpret_cast<const char*>(fmt), type_info_v<Args...>, fmt_args_t<Args...>{fmt_unveil<Args>::get(args)...});
|
raw_throw_exception(src_loc, reinterpret_cast<const char*>(fmt), type_info_v<Args...>, fmt_args_t<Args...>{fmt_unveil<Args>::get(args)...});
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef _MSC_VER
|
#if !defined(_MSC_VER) || defined(__clang__)
|
||||||
[[noreturn]] ~throw_exception();
|
[[noreturn]] ~throw_exception();
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
|
@ -39,11 +39,15 @@ std::string get_file_extension(const std::string& file_path);
|
||||||
|
|
||||||
namespace fmt
|
namespace fmt
|
||||||
{
|
{
|
||||||
std::string replace_all(std::string_view src, std::string_view from, std::string_view to, usz count = -1);
|
// Replaces all occurrences of 'from' with 'to' until 'count' substrings were replaced.
|
||||||
|
std::string replace_all(std::string_view src, std::string_view from, std::string_view to, usz count = umax);
|
||||||
|
|
||||||
template <usz list_size>
|
template <usz list_size>
|
||||||
std::string replace_all(std::string src, const std::pair<std::string_view, std::string> (&list)[list_size])
|
std::string replace_all(std::string src, const std::pair<std::string_view, std::string> (&list)[list_size])
|
||||||
{
|
{
|
||||||
|
if constexpr (list_size == 0)
|
||||||
|
return src;
|
||||||
|
|
||||||
for (usz pos = 0; pos < src.length(); ++pos)
|
for (usz pos = 0; pos < src.length(); ++pos)
|
||||||
{
|
{
|
||||||
for (usz i = 0; i < list_size; ++i)
|
for (usz i = 0; i < list_size; ++i)
|
||||||
|
@ -71,6 +75,9 @@ namespace fmt
|
||||||
template <usz list_size>
|
template <usz list_size>
|
||||||
std::string replace_all(std::string src, const std::pair<std::string_view, std::function<std::string()>> (&list)[list_size])
|
std::string replace_all(std::string src, const std::pair<std::string_view, std::function<std::string()>> (&list)[list_size])
|
||||||
{
|
{
|
||||||
|
if constexpr (list_size == 0)
|
||||||
|
return src;
|
||||||
|
|
||||||
for (usz pos = 0; pos < src.length(); ++pos)
|
for (usz pos = 0; pos < src.length(); ++pos)
|
||||||
{
|
{
|
||||||
for (usz i = 0; i < list_size; ++i)
|
for (usz i = 0; i < list_size; ++i)
|
||||||
|
@ -99,6 +106,9 @@ namespace fmt
|
||||||
static inline
|
static inline
|
||||||
std::string replace_all(std::string src, const std::vector<std::pair<std::string, std::string>>& list)
|
std::string replace_all(std::string src, const std::vector<std::pair<std::string, std::string>>& list)
|
||||||
{
|
{
|
||||||
|
if (list.empty())
|
||||||
|
return src;
|
||||||
|
|
||||||
for (usz pos = 0; pos < src.length(); ++pos)
|
for (usz pos = 0; pos < src.length(); ++pos)
|
||||||
{
|
{
|
||||||
for (usz i = 0; i < list.size(); ++i)
|
for (usz i = 0; i < list.size(); ++i)
|
||||||
|
@ -123,9 +133,16 @@ namespace fmt
|
||||||
return src;
|
return src;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Splits the string into a vector of strings using the separators. The vector may contain empty strings unless is_skip_empty is true.
|
||||||
std::vector<std::string> split(std::string_view source, std::initializer_list<std::string_view> separators, bool is_skip_empty = true);
|
std::vector<std::string> split(std::string_view source, std::initializer_list<std::string_view> separators, bool is_skip_empty = true);
|
||||||
|
|
||||||
|
// Removes all preceding and trailing characters specified by 'values' from 'source'.
|
||||||
std::string trim(const std::string& source, std::string_view values = " \t");
|
std::string trim(const std::string& source, std::string_view values = " \t");
|
||||||
|
|
||||||
|
// Removes all preceding characters specified by 'values' from 'source'.
|
||||||
std::string trim_front(const std::string& source, std::string_view values = " \t");
|
std::string trim_front(const std::string& source, std::string_view values = " \t");
|
||||||
|
|
||||||
|
// Removes all trailing characters specified by 'values' from 'source'.
|
||||||
void trim_back(std::string& source, std::string_view values = " \t");
|
void trim_back(std::string& source, std::string_view values = " \t");
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
@ -159,7 +176,7 @@ namespace fmt
|
||||||
std::string result;
|
std::string result;
|
||||||
bool first = true;
|
bool first = true;
|
||||||
|
|
||||||
for (auto& v : sources)
|
for (const auto& v : sources)
|
||||||
{
|
{
|
||||||
if (first)
|
if (first)
|
||||||
{
|
{
|
||||||
|
@ -175,13 +192,15 @@ namespace fmt
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Returns the string transformed to uppercase
|
||||||
std::string to_upper(std::string_view string);
|
std::string to_upper(std::string_view string);
|
||||||
|
|
||||||
|
// Returns the string transformed to lowercase
|
||||||
std::string to_lower(std::string_view string);
|
std::string to_lower(std::string_view string);
|
||||||
|
|
||||||
|
// Returns the string shortened to length
|
||||||
std::string truncate(std::string_view src, usz length);
|
std::string truncate(std::string_view src, usz length);
|
||||||
|
|
||||||
bool match(const std::string& source, const std::string& mask);
|
|
||||||
|
|
||||||
struct buf_to_hexstring
|
struct buf_to_hexstring
|
||||||
{
|
{
|
||||||
buf_to_hexstring(const u8* buf, usz len, usz line_length = 16, bool with_prefix = false)
|
buf_to_hexstring(const u8* buf, usz len, usz line_length = 16, bool with_prefix = false)
|
||||||
|
|
|
@ -2172,7 +2172,11 @@ void thread_base::start()
|
||||||
void thread_base::initialize(void (*error_cb)())
|
void thread_base::initialize(void (*error_cb)())
|
||||||
{
|
{
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
|
#ifdef ANDROID
|
||||||
|
m_thread.release(pthread_self());
|
||||||
|
#else
|
||||||
m_thread.release(reinterpret_cast<u64>(pthread_self()));
|
m_thread.release(reinterpret_cast<u64>(pthread_self()));
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Initialize TLS variables
|
// Initialize TLS variables
|
||||||
|
@ -2486,7 +2490,7 @@ void thread_ctrl::wait_for(u64 usec, [[maybe_unused]] bool alert /* true */)
|
||||||
if (alert)
|
if (alert)
|
||||||
{
|
{
|
||||||
list.set<0>(_this->m_sync, 0);
|
list.set<0>(_this->m_sync, 0);
|
||||||
list.set<1>(utils::bless<atomic_t<u32>>(&_this->m_taskq)[1], 0);
|
list.template set<1>(_this->m_taskq);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -2617,6 +2621,8 @@ thread_base::~thread_base() noexcept
|
||||||
const HANDLE handle0 = reinterpret_cast<HANDLE>(m_thread.load());
|
const HANDLE handle0 = reinterpret_cast<HANDLE>(m_thread.load());
|
||||||
WaitForSingleObject(handle0, INFINITE);
|
WaitForSingleObject(handle0, INFINITE);
|
||||||
CloseHandle(handle0);
|
CloseHandle(handle0);
|
||||||
|
#elif defined(ANDROID)
|
||||||
|
pthread_join(m_thread.load(), nullptr);
|
||||||
#else
|
#else
|
||||||
pthread_join(reinterpret_cast<pthread_t>(m_thread.load()), nullptr);
|
pthread_join(reinterpret_cast<pthread_t>(m_thread.load()), nullptr);
|
||||||
#endif
|
#endif
|
||||||
|
@ -2691,7 +2697,12 @@ u64 thread_base::get_cycles()
|
||||||
#else
|
#else
|
||||||
clockid_t _clock;
|
clockid_t _clock;
|
||||||
struct timespec thread_time;
|
struct timespec thread_time;
|
||||||
if (!pthread_getcpuclockid(reinterpret_cast<pthread_t>(handle), &_clock) && !clock_gettime(_clock, &thread_time))
|
#ifdef ANDROID
|
||||||
|
pthread_t thread_id = handle;
|
||||||
|
#else
|
||||||
|
pthread_t thread_id = reinterpret_cast<pthread_t>(handle);
|
||||||
|
#endif
|
||||||
|
if (!pthread_getcpuclockid(thread_id, &_clock) && !clock_gettime(_clock, &thread_time))
|
||||||
{
|
{
|
||||||
cycles = static_cast<u64>(thread_time.tv_sec) * 1'000'000'000 + thread_time.tv_nsec;
|
cycles = static_cast<u64>(thread_time.tv_sec) * 1'000'000'000 + thread_time.tv_nsec;
|
||||||
#endif
|
#endif
|
||||||
|
@ -3194,7 +3205,7 @@ void thread_ctrl::set_thread_affinity_mask(u64 mask)
|
||||||
thread_affinity_policy_data_t policy = { static_cast<integer_t>(std::countr_zero(mask)) };
|
thread_affinity_policy_data_t policy = { static_cast<integer_t>(std::countr_zero(mask)) };
|
||||||
thread_port_t mach_thread = pthread_mach_thread_np(pthread_self());
|
thread_port_t mach_thread = pthread_mach_thread_np(pthread_self());
|
||||||
thread_policy_set(mach_thread, THREAD_AFFINITY_POLICY, reinterpret_cast<thread_policy_t>(&policy), !mask ? 0 : 1);
|
thread_policy_set(mach_thread, THREAD_AFFINITY_POLICY, reinterpret_cast<thread_policy_t>(&policy), !mask ? 0 : 1);
|
||||||
#elif defined(__linux__) || defined(__DragonFly__) || defined(__FreeBSD__)
|
#elif !defined(ANDROID) && (defined(__linux__) || defined(__DragonFly__) || defined(__FreeBSD__))
|
||||||
if (!mask)
|
if (!mask)
|
||||||
{
|
{
|
||||||
// Reset affinity mask
|
// Reset affinity mask
|
||||||
|
@ -3246,7 +3257,7 @@ u64 thread_ctrl::get_thread_affinity_mask()
|
||||||
|
|
||||||
sig_log.error("Failed to get thread affinity mask.");
|
sig_log.error("Failed to get thread affinity mask.");
|
||||||
return 0;
|
return 0;
|
||||||
#elif defined(__linux__) || defined(__DragonFly__) || defined(__FreeBSD__)
|
#elif !defined(ANDROID) && (defined(__linux__) || defined(__DragonFly__) || defined(__FreeBSD__))
|
||||||
cpu_set_t cs;
|
cpu_set_t cs;
|
||||||
CPU_ZERO(&cs);
|
CPU_ZERO(&cs);
|
||||||
|
|
||||||
|
@ -3313,6 +3324,8 @@ u64 thread_ctrl::get_tid()
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
return GetCurrentThreadId();
|
return GetCurrentThreadId();
|
||||||
|
#elif defined(ANDROID)
|
||||||
|
return static_cast<u64>(pthread_self());
|
||||||
#elif defined(__linux__)
|
#elif defined(__linux__)
|
||||||
return syscall(SYS_gettid);
|
return syscall(SYS_gettid);
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -96,7 +96,7 @@ class thread_future
|
||||||
thread_future* prev{};
|
thread_future* prev{};
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
atomic_t<void(*)(thread_base*, thread_future*)> exec{};
|
atomic_t<void(*)(const thread_base*, thread_future*)> exec{};
|
||||||
|
|
||||||
atomic_t<u32> done{0};
|
atomic_t<u32> done{0};
|
||||||
|
|
||||||
|
@ -374,13 +374,23 @@ private:
|
||||||
static const u64 process_affinity_mask;
|
static const u64 process_affinity_mask;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if defined(__has_cpp_attribute)
|
||||||
|
#if __has_cpp_attribute(no_unique_address)
|
||||||
|
#define NO_UNIQUE_ADDRESS [[no_unique_address]]
|
||||||
|
#else
|
||||||
|
#define NO_UNIQUE_ADDRESS
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#define NO_UNIQUE_ADDRESS
|
||||||
|
#endif
|
||||||
|
|
||||||
// Used internally
|
// Used internally
|
||||||
template <bool Discard, typename Ctx, typename... Args>
|
template <bool Discard, typename Ctx, typename... Args>
|
||||||
class thread_future_t : public thread_future, result_storage<Ctx, std::conditional_t<Discard, int, void>, Args...>
|
class thread_future_t : public thread_future, result_storage<Ctx, std::conditional_t<Discard, int, void>, Args...>
|
||||||
{
|
{
|
||||||
[[no_unique_address]] decltype(std::make_tuple(std::forward<Args>(std::declval<Args>())...)) m_args;
|
NO_UNIQUE_ADDRESS decltype(std::make_tuple(std::forward<Args>(std::declval<Args>())...)) m_args;
|
||||||
|
|
||||||
[[no_unique_address]] Ctx m_func;
|
NO_UNIQUE_ADDRESS Ctx m_func;
|
||||||
|
|
||||||
using future = thread_future_t;
|
using future = thread_future_t;
|
||||||
|
|
||||||
|
@ -389,7 +399,7 @@ public:
|
||||||
: m_args(std::forward<Args>(args)...)
|
: m_args(std::forward<Args>(args)...)
|
||||||
, m_func(std::forward<Ctx>(func))
|
, m_func(std::forward<Ctx>(func))
|
||||||
{
|
{
|
||||||
thread_future::exec.raw() = +[](thread_base* tb, thread_future* tf)
|
thread_future::exec.raw() = +[](const thread_base* tb, thread_future* tf)
|
||||||
{
|
{
|
||||||
const auto _this = static_cast<future*>(tf);
|
const auto _this = static_cast<future*>(tf);
|
||||||
|
|
||||||
|
|
|
@ -8,125 +8,134 @@
|
||||||
|
|
||||||
namespace utils
|
namespace utils
|
||||||
{
|
{
|
||||||
|
template <typename T>
|
||||||
class address_range_vector;
|
class address_range_vector;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helpers
|
* Helpers
|
||||||
*/
|
*/
|
||||||
static inline u32 page_start(u32 addr)
|
template <typename T>
|
||||||
|
T page_start(T addr)
|
||||||
{
|
{
|
||||||
return addr & ~(c_page_size - 1);
|
return addr & ~static_cast<T>(get_page_size() - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline u32 next_page(u32 addr)
|
template <typename T>
|
||||||
|
static inline T next_page(T addr)
|
||||||
{
|
{
|
||||||
return page_start(addr) + c_page_size;
|
return page_start(addr) + static_cast<T>(get_page_size());
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline u32 page_end(u32 addr)
|
template <typename T>
|
||||||
|
static inline T page_end(T addr)
|
||||||
{
|
{
|
||||||
return next_page(addr) - 1;
|
return next_page(addr) - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline u32 is_page_aligned(u32 val)
|
template <typename T>
|
||||||
|
static inline T is_page_aligned(T val)
|
||||||
{
|
{
|
||||||
return (val & (c_page_size - 1)) == 0;
|
return (val & static_cast<T>(get_page_size() - 1)) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Address Range utility class
|
* Address Range utility class
|
||||||
*/
|
*/
|
||||||
|
template <typename T>
|
||||||
class address_range
|
class address_range
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
u32 start = umax; // First address in range
|
T start = umax; // First address in range
|
||||||
u32 end = 0; // Last address
|
T end = 0; // Last address
|
||||||
|
|
||||||
|
using signed_type_t = std::make_signed<T>::type;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Helper constexprs
|
// Helper constexprs
|
||||||
static constexpr inline bool range_overlaps(u32 start1, u32 end1, u32 start2, u32 end2)
|
static constexpr inline bool range_overlaps(T start1, T end1, T start2, T end2)
|
||||||
{
|
{
|
||||||
return (start1 <= end2 && start2 <= end1);
|
return (start1 <= end2 && start2 <= end1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static constexpr inline bool address_overlaps(u32 address, u32 start, u32 end)
|
static constexpr inline bool address_overlaps(T address, T start, T end)
|
||||||
{
|
{
|
||||||
return (start <= address && address <= end);
|
return (start <= address && address <= end);
|
||||||
}
|
}
|
||||||
|
|
||||||
static constexpr inline bool range_inside_range(u32 start1, u32 end1, u32 start2, u32 end2)
|
static constexpr inline bool range_inside_range(T start1, T end1, T start2, T end2)
|
||||||
{
|
{
|
||||||
return (start1 >= start2 && end1 <= end2);
|
return (start1 >= start2 && end1 <= end2);
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr address_range(u32 _start, u32 _end) : start(_start), end(_end) {}
|
constexpr address_range(T _start, T _end) : start(_start), end(_end) {}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// Constructors
|
// Constructors
|
||||||
constexpr address_range() = default;
|
constexpr address_range() = default;
|
||||||
|
|
||||||
static constexpr address_range start_length(u32 _start, u32 _length)
|
static constexpr address_range start_length(T _start, T _length)
|
||||||
{
|
{
|
||||||
if (!_length)
|
if (!_length)
|
||||||
{
|
{
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
return {_start, _start + (_length - 1)};
|
const T _end = static_cast<T>(_start + _length - 1);
|
||||||
|
return {_start, _end};
|
||||||
}
|
}
|
||||||
|
|
||||||
static constexpr address_range start_end(u32 _start, u32 _end)
|
static constexpr address_range start_end(T _start, T _end)
|
||||||
{
|
{
|
||||||
return {_start, _end};
|
return {_start, _end};
|
||||||
}
|
}
|
||||||
|
|
||||||
// Length
|
// Length
|
||||||
u32 length() const
|
T length() const
|
||||||
{
|
{
|
||||||
AUDIT(valid());
|
AUDIT(valid());
|
||||||
return end - start + 1;
|
return end - start + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_length(const u32 new_length)
|
void set_length(const T new_length)
|
||||||
{
|
{
|
||||||
end = start + new_length - 1;
|
end = start + new_length - 1;
|
||||||
ensure(valid());
|
ensure(valid());
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 next_address() const
|
T next_address() const
|
||||||
{
|
{
|
||||||
return end + 1;
|
return end + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 prev_address() const
|
T prev_address() const
|
||||||
{
|
{
|
||||||
return start - 1;
|
return start - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Overlapping checks
|
// Overlapping checks
|
||||||
bool overlaps(const address_range &other) const
|
bool overlaps(const address_range<T>& other) const
|
||||||
{
|
{
|
||||||
AUDIT(valid() && other.valid());
|
AUDIT(valid() && other.valid());
|
||||||
return range_overlaps(start, end, other.start, other.end);
|
return range_overlaps(start, end, other.start, other.end);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool overlaps(const u32 addr) const
|
bool overlaps(const T addr) const
|
||||||
{
|
{
|
||||||
AUDIT(valid());
|
AUDIT(valid());
|
||||||
return address_overlaps(addr, start, end);
|
return address_overlaps(addr, start, end);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool inside(const address_range &other) const
|
bool inside(const address_range<T>& other) const
|
||||||
{
|
{
|
||||||
AUDIT(valid() && other.valid());
|
AUDIT(valid() && other.valid());
|
||||||
return range_inside_range(start, end, other.start, other.end);
|
return range_inside_range(start, end, other.start, other.end);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool inside(const address_range_vector &vec) const;
|
inline bool inside(const address_range_vector<T>& vec) const;
|
||||||
inline bool overlaps(const address_range_vector &vec) const;
|
inline bool overlaps(const address_range_vector<T>& vec) const;
|
||||||
|
|
||||||
bool touches(const address_range &other) const
|
bool touches(const address_range<T>& other) const
|
||||||
{
|
{
|
||||||
AUDIT(valid() && other.valid());
|
AUDIT(valid() && other.valid());
|
||||||
// returns true if there is overlap, or if sections are side-by-side
|
// returns true if there is overlap, or if sections are side-by-side
|
||||||
|
@ -134,7 +143,7 @@ namespace utils
|
||||||
}
|
}
|
||||||
|
|
||||||
// Utilities
|
// Utilities
|
||||||
s32 signed_distance(const address_range &other) const
|
signed_type_t signed_distance(const address_range<T>& other) const
|
||||||
{
|
{
|
||||||
if (touches(other))
|
if (touches(other))
|
||||||
{
|
{
|
||||||
|
@ -144,15 +153,15 @@ namespace utils
|
||||||
// other after this
|
// other after this
|
||||||
if (other.start > end)
|
if (other.start > end)
|
||||||
{
|
{
|
||||||
return static_cast<s32>(other.start - end - 1);
|
return static_cast<signed_type_t>(other.start - end - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// this after other
|
// this after other
|
||||||
AUDIT(start > other.end);
|
AUDIT(start > other.end);
|
||||||
return -static_cast<s32>(start - other.end - 1);
|
return -static_cast<signed_type_t>(start - other.end - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 distance(const address_range &other) const
|
T distance(const address_range<T>& other) const
|
||||||
{
|
{
|
||||||
if (touches(other))
|
if (touches(other))
|
||||||
{
|
{
|
||||||
|
@ -170,7 +179,7 @@ namespace utils
|
||||||
return (start - other.end - 1);
|
return (start - other.end - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
address_range get_min_max(const address_range &other) const
|
address_range<T> get_min_max(const address_range<T>& other) const
|
||||||
{
|
{
|
||||||
return {
|
return {
|
||||||
std::min(valid() ? start : umax, other.valid() ? other.start : umax),
|
std::min(valid() ? start : umax, other.valid() ? other.start : umax),
|
||||||
|
@ -178,7 +187,7 @@ namespace utils
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_min_max(const address_range &other)
|
void set_min_max(const address_range<T>& other)
|
||||||
{
|
{
|
||||||
*this = get_min_max(other);
|
*this = get_min_max(other);
|
||||||
}
|
}
|
||||||
|
@ -188,7 +197,7 @@ namespace utils
|
||||||
return (valid() && is_page_aligned(start) && is_page_aligned(length()));
|
return (valid() && is_page_aligned(start) && is_page_aligned(length()));
|
||||||
}
|
}
|
||||||
|
|
||||||
address_range to_page_range() const
|
address_range<T> to_page_range() const
|
||||||
{
|
{
|
||||||
AUDIT(valid());
|
AUDIT(valid());
|
||||||
return { page_start(start), page_end(end) };
|
return { page_start(start), page_end(end) };
|
||||||
|
@ -202,7 +211,7 @@ namespace utils
|
||||||
AUDIT(is_page_range());
|
AUDIT(is_page_range());
|
||||||
}
|
}
|
||||||
|
|
||||||
address_range get_intersect(const address_range &clamp) const
|
address_range<T> get_intersect(const address_range<T>& clamp) const
|
||||||
{
|
{
|
||||||
if (!valid() || !clamp.valid())
|
if (!valid() || !clamp.valid())
|
||||||
{
|
{
|
||||||
|
@ -212,7 +221,7 @@ namespace utils
|
||||||
return { std::max(start, clamp.start), std::min(end, clamp.end) };
|
return { std::max(start, clamp.start), std::min(end, clamp.end) };
|
||||||
}
|
}
|
||||||
|
|
||||||
void intersect(const address_range &clamp)
|
void intersect(const address_range<T>& clamp)
|
||||||
{
|
{
|
||||||
if (!clamp.valid())
|
if (!clamp.valid())
|
||||||
{
|
{
|
||||||
|
@ -238,7 +247,7 @@ namespace utils
|
||||||
}
|
}
|
||||||
|
|
||||||
// Comparison Operators
|
// Comparison Operators
|
||||||
bool operator ==(const address_range& other) const
|
bool operator ==(const address_range<T>& other) const
|
||||||
{
|
{
|
||||||
return (start == other.start && end == other.end);
|
return (start == other.start && end == other.end);
|
||||||
}
|
}
|
||||||
|
@ -252,21 +261,27 @@ namespace utils
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline address_range page_for(u32 addr)
|
using address_range16 = address_range<u16>;
|
||||||
|
using address_range32 = address_range<u32>;
|
||||||
|
using address_range64 = address_range<u64>;
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
static inline address_range<T> page_for(T addr)
|
||||||
{
|
{
|
||||||
return address_range::start_end(page_start(addr), page_end(addr));
|
return address_range<T>::start_end(page_start(addr), page_end(addr));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Address Range Vector utility class
|
* Address Range Vector utility class
|
||||||
*
|
*
|
||||||
* Collection of address_range objects. Allows for merging and removing ranges from the set.
|
* Collection of address_range<T> objects. Allows for merging and removing ranges from the set.
|
||||||
*/
|
*/
|
||||||
|
template <typename T>
|
||||||
class address_range_vector
|
class address_range_vector
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using vector_type = std::vector<address_range>;
|
using vector_type = std::vector<address_range<T>>;
|
||||||
using iterator = vector_type::iterator;
|
using iterator = vector_type::iterator;
|
||||||
using const_iterator = vector_type::const_iterator;
|
using const_iterator = vector_type::const_iterator;
|
||||||
using size_type = vector_type::size_type;
|
using size_type = vector_type::size_type;
|
||||||
|
@ -280,8 +295,8 @@ namespace utils
|
||||||
inline void clear() { data.clear(); }
|
inline void clear() { data.clear(); }
|
||||||
inline size_type size() const { return data.size(); }
|
inline size_type size() const { return data.size(); }
|
||||||
inline bool empty() const { return data.empty(); }
|
inline bool empty() const { return data.empty(); }
|
||||||
inline address_range& operator[](size_type n) { return data[n]; }
|
inline address_range<T>& operator[](size_type n) { return data[n]; }
|
||||||
inline const address_range& operator[](size_type n) const { return data[n]; }
|
inline const address_range<T>& operator[](size_type n) const { return data[n]; }
|
||||||
inline iterator begin() { return data.begin(); }
|
inline iterator begin() { return data.begin(); }
|
||||||
inline const_iterator begin() const { return data.begin(); }
|
inline const_iterator begin() const { return data.begin(); }
|
||||||
inline iterator end() { return data.end(); }
|
inline iterator end() { return data.end(); }
|
||||||
|
@ -289,7 +304,7 @@ namespace utils
|
||||||
|
|
||||||
// Search for ranges that touch new_range. If found, merge instead of adding new_range.
|
// Search for ranges that touch new_range. If found, merge instead of adding new_range.
|
||||||
// When adding a new range, re-use invalid ranges whenever possible
|
// When adding a new range, re-use invalid ranges whenever possible
|
||||||
void merge(const address_range &new_range)
|
void merge(const address_range<T>& new_range)
|
||||||
{
|
{
|
||||||
// Note the case where we have
|
// Note the case where we have
|
||||||
// AAAA BBBB
|
// AAAA BBBB
|
||||||
|
@ -301,8 +316,8 @@ namespace utils
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
address_range *found = nullptr;
|
address_range<T> *found = nullptr;
|
||||||
address_range *invalid = nullptr;
|
address_range<T> *invalid = nullptr;
|
||||||
|
|
||||||
for (auto &existing : data)
|
for (auto &existing : data)
|
||||||
{
|
{
|
||||||
|
@ -347,22 +362,22 @@ namespace utils
|
||||||
AUDIT(check_consistency());
|
AUDIT(check_consistency());
|
||||||
}
|
}
|
||||||
|
|
||||||
void merge(const address_range_vector &other)
|
void merge(const address_range_vector<T>& other)
|
||||||
{
|
{
|
||||||
for (const address_range &new_range : other)
|
for (const address_range<T>& new_range : other)
|
||||||
{
|
{
|
||||||
merge(new_range);
|
merge(new_range);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Exclude a given range from data
|
// Exclude a given range from data
|
||||||
void exclude(const address_range &exclusion)
|
void exclude(const address_range<T>& exclusion)
|
||||||
{
|
{
|
||||||
// Note the case where we have
|
// Note the case where we have
|
||||||
// AAAAAAA
|
// AAAAAAA
|
||||||
// EEE
|
// EEE
|
||||||
// where data={A} and exclusion=E.
|
// where data={A} and exclusion=E.
|
||||||
// In this case, we need to reduce A to the head (before E starts), and then create a new address_range B for the tail (after E ends), i.e.
|
// In this case, we need to reduce A to the head (before E starts), and then create a new address_range<T> B for the tail (after E ends), i.e.
|
||||||
// AA BB
|
// AA BB
|
||||||
// EEE
|
// EEE
|
||||||
|
|
||||||
|
@ -371,13 +386,13 @@ namespace utils
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
address_range *invalid = nullptr; // try to re-use an invalid range instead of calling push_back
|
address_range<T> *invalid = nullptr; // try to re-use an invalid range instead of calling push_back
|
||||||
|
|
||||||
// We use index access because we might have to push_back within the loop, which could invalidate the iterators
|
// We use index access because we might have to push_back within the loop, which could invalidate the iterators
|
||||||
size_type _size = data.size();
|
size_type _size = data.size();
|
||||||
for (size_type n = 0; n < _size; ++n)
|
for (size_type n = 0; n < _size; ++n)
|
||||||
{
|
{
|
||||||
address_range &existing = data[n];
|
address_range<T>& existing = data[n];
|
||||||
|
|
||||||
if (!existing.valid())
|
if (!existing.valid())
|
||||||
{
|
{
|
||||||
|
@ -430,7 +445,7 @@ namespace utils
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// IMPORTANT: adding to data invalidates "existing". This must be done last!
|
// IMPORTANT: adding to data invalidates "existing". This must be done last!
|
||||||
data.push_back(address_range::start_end(exclusion.next_address(), tail_end));
|
data.push_back(address_range<T>::start_end(exclusion.next_address(), tail_end));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -438,9 +453,9 @@ namespace utils
|
||||||
AUDIT(!overlaps(exclusion));
|
AUDIT(!overlaps(exclusion));
|
||||||
}
|
}
|
||||||
|
|
||||||
void exclude(const address_range_vector &other)
|
void exclude(const address_range_vector<T>& other)
|
||||||
{
|
{
|
||||||
for (const address_range &exclusion : other)
|
for (const address_range<T>& exclusion : other)
|
||||||
{
|
{
|
||||||
exclude(exclusion);
|
exclude(exclusion);
|
||||||
}
|
}
|
||||||
|
@ -478,25 +493,25 @@ namespace utils
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test for overlap with a given range
|
// Test for overlap with a given range
|
||||||
bool overlaps(const address_range &range) const
|
bool overlaps(const address_range<T>& range) const
|
||||||
{
|
{
|
||||||
return std::any_of(data.cbegin(), data.cend(), [&range](const address_range& cur)
|
return std::any_of(data.cbegin(), data.cend(), [&range](const address_range<T>& cur)
|
||||||
{
|
{
|
||||||
return cur.valid() && cur.overlaps(range);
|
return cur.valid() && cur.overlaps(range);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test for overlap with a given address_range vector
|
// Test for overlap with a given address_range<T> vector
|
||||||
bool overlaps(const address_range_vector &other) const
|
bool overlaps(const address_range_vector<T>& other) const
|
||||||
{
|
{
|
||||||
for (const address_range &rng1 : data)
|
for (const address_range<T>& rng1 : data)
|
||||||
{
|
{
|
||||||
if (!rng1.valid())
|
if (!rng1.valid())
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const address_range &rng2 : other.data)
|
for (const address_range<T>& rng2 : other.data)
|
||||||
{
|
{
|
||||||
if (!rng2.valid())
|
if (!rng2.valid())
|
||||||
{
|
{
|
||||||
|
@ -513,36 +528,56 @@ namespace utils
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test if a given range is fully contained inside this vector
|
// Test if a given range is fully contained inside this vector
|
||||||
bool contains(const address_range &range) const
|
bool contains(const address_range<T>& range) const
|
||||||
{
|
{
|
||||||
return std::any_of(this->begin(), this->end(), [&range](const address_range& cur)
|
return std::any_of(this->begin(), this->end(), [&range](const address_range<T>& cur)
|
||||||
{
|
{
|
||||||
return cur.valid() && cur.inside(range);
|
return cur.valid() && cur.inside(range);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test if all ranges in this vector are full contained inside a specific range
|
// Test if all ranges in this vector are full contained inside a specific range
|
||||||
bool inside(const address_range &range) const
|
bool inside(const address_range<T>& range) const
|
||||||
{
|
{
|
||||||
return std::all_of(this->begin(), this->end(), [&range](const address_range& cur)
|
return std::all_of(this->begin(), this->end(), [&range](const address_range<T>& cur)
|
||||||
{
|
{
|
||||||
return !cur.valid() || cur.inside(range);
|
return !cur.valid() || cur.inside(range);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Count valid entries
|
||||||
|
usz valid_count() const
|
||||||
|
{
|
||||||
|
usz count = 0;
|
||||||
|
for (const auto& e : data)
|
||||||
|
{
|
||||||
|
if (e.valid())
|
||||||
|
{
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// These declarations must be done after address_range_vector has been defined
|
// These declarations must be done after address_range_vector has been defined
|
||||||
bool address_range::inside(const address_range_vector &vec) const
|
template <typename T>
|
||||||
|
bool address_range<T>::inside(const address_range_vector<T>& vec) const
|
||||||
{
|
{
|
||||||
return vec.contains(*this);
|
return vec.contains(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool address_range::overlaps(const address_range_vector &vec) const
|
template <typename T>
|
||||||
|
bool address_range<T>::overlaps(const address_range_vector<T>& vec) const
|
||||||
{
|
{
|
||||||
return vec.overlaps(*this);
|
return vec.overlaps(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
using address_range_vector16 = address_range_vector<u16>;
|
||||||
|
using address_range_vector32 = address_range_vector<u32>;
|
||||||
|
using address_range_vector64 = address_range_vector<u64>;
|
||||||
|
|
||||||
} // namespace utils
|
} // namespace utils
|
||||||
|
|
||||||
|
|
||||||
|
@ -551,9 +586,9 @@ namespace std
|
||||||
static_assert(sizeof(usz) >= 2 * sizeof(u32), "usz must be at least twice the size of u32");
|
static_assert(sizeof(usz) >= 2 * sizeof(u32), "usz must be at least twice the size of u32");
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
struct hash<utils::address_range>
|
struct hash<utils::address_range32>
|
||||||
{
|
{
|
||||||
usz operator()(const utils::address_range& k) const
|
usz operator()(const utils::address_range32& k) const
|
||||||
{
|
{
|
||||||
// we can guarantee a unique hash since our type is 64 bits and usz as well
|
// we can guarantee a unique hash since our type is 64 bits and usz as well
|
||||||
return (usz{ k.start } << 32) | usz{ k.end };
|
return (usz{ k.start } << 32) | usz{ k.end };
|
||||||
|
|
|
@ -737,7 +737,7 @@ bool patch_engine::add_patch_data(YAML::Node node, patch_info& info, u32 modifie
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct patch_data p_data{};
|
patch_data p_data{};
|
||||||
p_data.type = type;
|
p_data.type = type;
|
||||||
p_data.offset = addr_node.as<u32>(0) + modifier;
|
p_data.offset = addr_node.as<u32>(0) + modifier;
|
||||||
p_data.original_offset = addr_node.Scalar();
|
p_data.original_offset = addr_node.Scalar();
|
||||||
|
@ -789,8 +789,14 @@ bool patch_engine::add_patch_data(YAML::Node node, patch_info& info, u32 modifie
|
||||||
|
|
||||||
switch (p_data.type)
|
switch (p_data.type)
|
||||||
{
|
{
|
||||||
|
case patch_type::invalid:
|
||||||
|
case patch_type::load:
|
||||||
|
{
|
||||||
|
fmt::throw_exception("Unreachable patch type: %s", p_data.type);
|
||||||
|
}
|
||||||
case patch_type::bp_exec:
|
case patch_type::bp_exec:
|
||||||
case patch_type::utf8:
|
case patch_type::utf8:
|
||||||
|
case patch_type::c_utf8:
|
||||||
case patch_type::jump_func:
|
case patch_type::jump_func:
|
||||||
case patch_type::move_file:
|
case patch_type::move_file:
|
||||||
case patch_type::hide_file:
|
case patch_type::hide_file:
|
||||||
|
@ -827,7 +833,13 @@ bool patch_engine::add_patch_data(YAML::Node node, patch_info& info, u32 modifie
|
||||||
get_node_value(u32{}, s32{});
|
get_node_value(u32{}, s32{});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
case patch_type::alloc:
|
||||||
|
case patch_type::code_alloc:
|
||||||
|
case patch_type::jump:
|
||||||
|
case patch_type::jump_link:
|
||||||
|
case patch_type::le64:
|
||||||
|
case patch_type::be64:
|
||||||
|
case patch_type::bd64:
|
||||||
{
|
{
|
||||||
get_node_value(u64{}, s64{});
|
get_node_value(u64{}, s64{});
|
||||||
break;
|
break;
|
||||||
|
@ -1720,7 +1732,7 @@ void patch_engine::save_config(const patch_map& patches_map)
|
||||||
|
|
||||||
fs::pending_file file(path);
|
fs::pending_file file(path);
|
||||||
|
|
||||||
if (!file.file || (file.file.write(out.c_str(), out.size()), !file.commit()))
|
if (!file.file || file.file.write(out.c_str(), out.size()) < out.size() || !file.commit())
|
||||||
{
|
{
|
||||||
patch_log.error("Failed to create patch config file %s (error=%s)", path, fs::g_tls_error);
|
patch_log.error("Failed to create patch config file %s (error=%s)", path, fs::g_tls_error);
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,8 +94,6 @@ if defined BUILD_SOURCEBRANCHNAME (
|
||||||
|
|
||||||
rem // This must be a CI build
|
rem // This must be a CI build
|
||||||
|
|
||||||
echo SYSTEM_PULLREQUEST_SOURCEBRANCH: %SYSTEM_PULLREQUEST_SOURCEBRANCH%
|
|
||||||
|
|
||||||
if defined BUILD_REPOSITORY_NAME (
|
if defined BUILD_REPOSITORY_NAME (
|
||||||
echo BUILD_REPOSITORY_NAME: %BUILD_REPOSITORY_NAME%
|
echo BUILD_REPOSITORY_NAME: %BUILD_REPOSITORY_NAME%
|
||||||
) else (
|
) else (
|
||||||
|
@ -110,9 +108,7 @@ if defined BUILD_SOURCEBRANCHNAME (
|
||||||
|
|
||||||
rem // These environment variables are defined by CI
|
rem // These environment variables are defined by CI
|
||||||
rem // BUILD_REPOSITORY_NAME will look like "RPCS3/rpcs3"
|
rem // BUILD_REPOSITORY_NAME will look like "RPCS3/rpcs3"
|
||||||
rem // SYSTEM_PULLREQUEST_SOURCEBRANCH will look like "master"
|
|
||||||
rem // BUILD_SOURCEBRANCHNAME will look like "master"
|
rem // BUILD_SOURCEBRANCHNAME will look like "master"
|
||||||
rem // See https://docs.microsoft.com/en-us/azure/devops/pipelines/build/variables
|
|
||||||
set GIT_FULL_BRANCH=%BUILD_REPOSITORY_NAME%/%BUILD_SOURCEBRANCHNAME%
|
set GIT_FULL_BRANCH=%BUILD_REPOSITORY_NAME%/%BUILD_SOURCEBRANCHNAME%
|
||||||
echo GIT_FULL_BRANCH: !GIT_FULL_BRANCH!
|
echo GIT_FULL_BRANCH: !GIT_FULL_BRANCH!
|
||||||
|
|
||||||
|
@ -129,12 +125,12 @@ if defined BUILD_SOURCEBRANCHNAME (
|
||||||
rem // This must be a pull request or a build from a fork.
|
rem // This must be a pull request or a build from a fork.
|
||||||
echo Assuming pull request build
|
echo Assuming pull request build
|
||||||
|
|
||||||
if "%SYSTEM_PULLREQUEST_SOURCEBRANCH%"=="master" (
|
if "%BUILD_SOURCEBRANCHNAME%"=="master" (
|
||||||
rem // If pull request comes from a master branch, GIT_BRANCH = username/branch in order to distinguish from upstream/master
|
rem // If pull request comes from a master branch, GIT_BRANCH = username/branch in order to distinguish from upstream/master
|
||||||
for /f "tokens=1* delims=/" %%a in ("%BUILD_REPOSITORY_NAME%") do set user=%%a
|
for /f "tokens=1* delims=/" %%a in ("%BUILD_REPOSITORY_NAME%") do set user=%%a
|
||||||
set "GIT_BRANCH=!user!/%SYSTEM_PULLREQUEST_SOURCEBRANCH%"
|
set "GIT_BRANCH=!user!/%BUILD_SOURCEBRANCHNAME%"
|
||||||
) else (
|
) else (
|
||||||
set GIT_BRANCH=%SYSTEM_PULLREQUEST_SOURCEBRANCH%
|
set GIT_BRANCH=%BUILD_SOURCEBRANCHNAME%
|
||||||
)
|
)
|
||||||
|
|
||||||
rem // Make GIT_VERSION the last commit (shortened); Don't include commit count on non-release builds
|
rem // Make GIT_VERSION the last commit (shortened); Don't include commit count on non-release builds
|
||||||
|
|
|
@ -384,17 +384,25 @@ public:
|
||||||
template <typename T>
|
template <typename T>
|
||||||
class lf_queue final
|
class lf_queue final
|
||||||
{
|
{
|
||||||
atomic_t<u64> m_head{0};
|
private:
|
||||||
|
struct fat_ptr
|
||||||
lf_queue_item<T>* load(u64 value) const noexcept
|
|
||||||
{
|
{
|
||||||
return reinterpret_cast<lf_queue_item<T>*>(value >> 16);
|
u64 ptr{};
|
||||||
|
u32 is_non_null{};
|
||||||
|
u32 reserved{};
|
||||||
|
};
|
||||||
|
|
||||||
|
atomic_t<fat_ptr> m_head{fat_ptr{}};
|
||||||
|
|
||||||
|
lf_queue_item<T>* load(fat_ptr value) const noexcept
|
||||||
|
{
|
||||||
|
return reinterpret_cast<lf_queue_item<T>*>(value.ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Extract all elements and reverse element order (FILO to FIFO)
|
// Extract all elements and reverse element order (FILO to FIFO)
|
||||||
lf_queue_item<T>* reverse() noexcept
|
lf_queue_item<T>* reverse() noexcept
|
||||||
{
|
{
|
||||||
if (auto* head = load(m_head) ? load(m_head.exchange(0)) : nullptr)
|
if (auto* head = load(m_head) ? load(m_head.exchange(fat_ptr{})) : nullptr)
|
||||||
{
|
{
|
||||||
if (auto* prev = head->m_link)
|
if (auto* prev = head->m_link)
|
||||||
{
|
{
|
||||||
|
@ -420,7 +428,7 @@ public:
|
||||||
|
|
||||||
lf_queue(lf_queue&& other) noexcept
|
lf_queue(lf_queue&& other) noexcept
|
||||||
{
|
{
|
||||||
m_head.release(other.m_head.exchange(0));
|
m_head.release(other.m_head.exchange(fat_ptr{}));
|
||||||
}
|
}
|
||||||
|
|
||||||
lf_queue& operator=(lf_queue&& other) noexcept
|
lf_queue& operator=(lf_queue&& other) noexcept
|
||||||
|
@ -430,8 +438,7 @@ public:
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
delete load(m_head);
|
delete load(m_head.exchange(other.m_head.exchange(fat_ptr{})));
|
||||||
m_head.release(other.m_head.exchange(0));
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -442,12 +449,17 @@ public:
|
||||||
|
|
||||||
void wait(std::nullptr_t /*null*/ = nullptr) noexcept
|
void wait(std::nullptr_t /*null*/ = nullptr) noexcept
|
||||||
{
|
{
|
||||||
if (m_head == 0)
|
if (!operator bool())
|
||||||
{
|
{
|
||||||
utils::bless<atomic_t<u32>>(&m_head)[1].wait(0);
|
get_wait_atomic().wait(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
atomic_t<u32> &get_wait_atomic()
|
||||||
|
{
|
||||||
|
return *utils::bless<atomic_t<u32>>(&m_head.raw().is_non_null);
|
||||||
|
}
|
||||||
|
|
||||||
const volatile void* observe() const noexcept
|
const volatile void* observe() const noexcept
|
||||||
{
|
{
|
||||||
return load(m_head);
|
return load(m_head);
|
||||||
|
@ -455,7 +467,7 @@ public:
|
||||||
|
|
||||||
explicit operator bool() const noexcept
|
explicit operator bool() const noexcept
|
||||||
{
|
{
|
||||||
return m_head != 0;
|
return observe() != nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <bool Notify = true, typename... Args>
|
template <bool Notify = true, typename... Args>
|
||||||
|
@ -464,25 +476,25 @@ public:
|
||||||
auto oldv = m_head.load();
|
auto oldv = m_head.load();
|
||||||
auto item = new lf_queue_item<T>(load(oldv), std::forward<Args>(args)...);
|
auto item = new lf_queue_item<T>(load(oldv), std::forward<Args>(args)...);
|
||||||
|
|
||||||
while (!m_head.compare_exchange(oldv, reinterpret_cast<u64>(item) << 16))
|
while (!m_head.compare_exchange(oldv, fat_ptr{reinterpret_cast<u64>(item), item != nullptr, 0}))
|
||||||
{
|
{
|
||||||
item->m_link = load(oldv);
|
item->m_link = load(oldv);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!oldv && Notify)
|
if (!oldv.ptr && Notify)
|
||||||
{
|
{
|
||||||
// Notify only if queue was empty
|
// Notify only if queue was empty
|
||||||
notify(true);
|
notify(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
return !oldv;
|
return !oldv.ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void notify(bool force = false)
|
void notify(bool force = false)
|
||||||
{
|
{
|
||||||
if (force || operator bool())
|
if (force || operator bool())
|
||||||
{
|
{
|
||||||
utils::bless<atomic_t<u32>>(&m_head)[1].notify_one();
|
get_wait_atomic().notify_one();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -498,7 +510,7 @@ public:
|
||||||
lf_queue_slice<T> pop_all_reversed()
|
lf_queue_slice<T> pop_all_reversed()
|
||||||
{
|
{
|
||||||
lf_queue_slice<T> result;
|
lf_queue_slice<T> result;
|
||||||
result.m_head = load(m_head.exchange(0));
|
result.m_head = load(m_head.exchange(fat_ptr{}));
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -126,15 +126,17 @@ namespace utils
|
||||||
std::vector<void*> get_backtrace(int max_depth)
|
std::vector<void*> get_backtrace(int max_depth)
|
||||||
{
|
{
|
||||||
std::vector<void*> result(max_depth);
|
std::vector<void*> result(max_depth);
|
||||||
|
#ifndef ANDROID
|
||||||
int depth = backtrace(result.data(), max_depth);
|
int depth = backtrace(result.data(), max_depth);
|
||||||
|
|
||||||
result.resize(depth);
|
result.resize(depth);
|
||||||
|
#endif
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> get_backtrace_symbols(const std::vector<void*>& stack)
|
std::vector<std::string> get_backtrace_symbols(const std::vector<void*>& stack)
|
||||||
{
|
{
|
||||||
std::vector<std::string> result;
|
std::vector<std::string> result;
|
||||||
|
#ifndef ANDROID
|
||||||
result.reserve(stack.size());
|
result.reserve(stack.size());
|
||||||
|
|
||||||
const auto symbols = backtrace_symbols(stack.data(), static_cast<int>(stack.size()));
|
const auto symbols = backtrace_symbols(stack.data(), static_cast<int>(stack.size()));
|
||||||
|
@ -144,6 +146,7 @@ namespace utils
|
||||||
}
|
}
|
||||||
|
|
||||||
free(symbols);
|
free(symbols);
|
||||||
|
#endif
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -84,9 +84,8 @@ public:
|
||||||
transactional_storage& operator=(const transactional_storage&) = delete;
|
transactional_storage& operator=(const transactional_storage&) = delete;
|
||||||
|
|
||||||
transactional_storage(transactional_storage&& other)
|
transactional_storage(transactional_storage&& other)
|
||||||
|
: pool(std::move(other.pool))
|
||||||
{
|
{
|
||||||
pool = std::move(other.pool);
|
|
||||||
|
|
||||||
std::unique_lock lock_other{other.current_mutex};
|
std::unique_lock lock_other{other.current_mutex};
|
||||||
const std::shared_ptr<T> other_current = other.current;
|
const std::shared_ptr<T> other_current = other.current;
|
||||||
other.current = nullptr;
|
other.current = nullptr;
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue