Compare commits
1835 Commits
tmp-libs-2
...
temp-geome
Author | SHA1 | Date | |
---|---|---|---|
2d190d0480 | |||
59eb71afa1 | |||
0e9c04a3ea | |||
cf8ea741f2 | |||
0733926a34 | |||
24aae7ed63 | |||
3021f9b48c | |||
468765d29e | |||
9aa88a6604 | |||
b35efa932e | |||
300fe84bf0 | |||
b848d5cdf5 | |||
0a0c2c0217 | |||
45b46e5de9 | |||
582c5530b6 | |||
ebe32e01e1 | |||
07a77816a1 | |||
bae1b64525 | |||
132522cba8 | |||
ceb612a79c | |||
62a2faa7ef | |||
101a493ab5 | |||
ff01070b5c | |||
51f6fa351d | |||
ee857cc266 | |||
ad7455cd14 | |||
db384d4df6 | |||
83883ae66a | |||
75ae328d62 | |||
76f0ef294a | |||
72d1ddfc9c | |||
4ed029fc02 | |||
![]() |
e7a800c52f | ||
24801e0a4a | |||
fc32567cda | |||
![]() |
9eafdb985d | ||
3c8d261557 | |||
![]() |
e82c5c6607 | ||
118803893e | |||
0793ced8ad | |||
e7b441a05c | |||
53743adc29 | |||
1dcf0f9cf1 | |||
feba1fe974 | |||
c4df8ac1a4 | |||
6025897cd6 | |||
802a59a58a | |||
1ab6d5c1dc | |||
a770faa811 | |||
15cfb375a3 | |||
e78e235cc5 | |||
3ec9681ac4 | |||
038345fa56 | |||
38131cc5e5 | |||
f61f4c89bb | |||
e26887598f | |||
42017b006e | |||
bf5b1fa726 | |||
09b89da349 | |||
d3c454d66c | |||
![]() |
98c4224ff0 | ||
20ddb64207 | |||
cc39200bfc | |||
![]() |
eccd03a826 | ||
7d618b4dde | |||
a566dc25aa | |||
9d9c879f4b | |||
0cc2a72f94 | |||
3af0e1f6fd | |||
34771cc9f5 | |||
72c34068cb | |||
f52e3aa210 | |||
8925d3b7bf | |||
6bd42baaeb | |||
26b098c04f | |||
bc4f99aa86 | |||
0c83ef567c | |||
89fd3afd1e | |||
87c1c8112f | |||
8edcb3af96 | |||
ae1dc8f5f9 | |||
00c7ea68a8 | |||
788d380460 | |||
6e01b52100 | |||
f3610a23d1 | |||
28dc07a153 | |||
9473c61b36 | |||
b40e05fcd1 | |||
637731dc61 | |||
55d48defc5 | |||
a26a059244 | |||
add6fa0924 | |||
35affaa971 | |||
3feb3ce32d | |||
7898089de3 | |||
![]() |
59f9a5e6ac | ||
60fee69682 | |||
![]() |
3df40cc343 | ||
36ea32a3f0 | |||
![]() |
468d59e496 | ||
709e443152 | |||
ddc7e5f1b6 | |||
e509f9c3a0 | |||
e7e5fd96c4 | |||
2e8641e45e | |||
ae30f72c80 | |||
49b798ca7e | |||
c614eadb47 | |||
757ec00f83 | |||
de913516dd | |||
c27ef1e9e8 | |||
d5e626b243 | |||
8e8a6b80cf | |||
a63a0ee24b | |||
d35b14449e | |||
41e0a5b5ed | |||
15cdcb4e90 | |||
5cd1aaf080 | |||
4be166b6b5 | |||
4e65b1ef6c | |||
ebf7673f83 | |||
dc0c71d3ae | |||
093074aefe | |||
2829caa9f8 | |||
c202d38659 | |||
37a5ff4a84 | |||
2acebcae24 | |||
3de3c3c23a | |||
c9e9a42215 | |||
f0ddbcb31d | |||
7cd91a06eb | |||
efe90944ee | |||
765406cb51 | |||
2761679180 | |||
5583d51773 | |||
192f0c9e17 | |||
271f34f77e | |||
3e125d12af | |||
6644e96f01 | |||
ae379714e4 | |||
96a4b54cfb | |||
538f452ea9 | |||
2ea47057d3 | |||
209aff0a35 | |||
3b6ee8cee7 | |||
52b94049f2 | |||
2373a2196e | |||
6a0fe79db5 | |||
10428ca472 | |||
d31abfef2c | |||
6a5e1bf9a1 | |||
488690c864 | |||
d374469f4c | |||
af42b35e53 | |||
71b4a1687e | |||
25c2875e0f | |||
8839b4c32a | |||
1b4d5c7a35 | |||
f9c9e000ca | |||
7a4fc9f59d | |||
22c4323b21 | |||
7a084c2eee | |||
b90b1af25c | |||
5098678308 | |||
dc679f6247 | |||
2e7e7a6fb6 | |||
d7a74a2ad6 | |||
d6b1d35bf8 | |||
![]() |
bfa3dc91b7 | ||
7b6c77aa84 | |||
7b954ba7a1 | |||
5e1702e7a5 | |||
![]() |
2a41ab5e6c | ||
a072e87e04 | |||
2ea565b0ec | |||
f709f12d93 | |||
45a47142fc | |||
5f3f5db95d | |||
8e69409eed | |||
280dac323c | |||
c4f9bfcf5e | |||
2289e26fa3 | |||
0f201049b4 | |||
49a363f0e0 | |||
77a28f34d5 | |||
62d9dabc7d | |||
d5e91ae883 | |||
53cf8e83b3 | |||
![]() |
d7f88982a8 | ||
4c716ced09 | |||
09082f6e85 | |||
c749c24682 | |||
![]() |
c04cceb40e | ||
b69ab42982 | |||
16099c00d0 | |||
8dd941cac0 | |||
249a7e2307 | |||
8225b610dd | |||
07faa3c5ac | |||
d0c5c67e94 | |||
0416aa767f | |||
7592a5097c | |||
ab70133db0 | |||
af8fb707da | |||
![]() |
4e5537d0ed | ||
80d0b68290 | |||
5d54f38949 | |||
c304807099 | |||
4c8a8950cf | |||
b6a35a8153 | |||
7489427e4d | |||
c3cb565250 | |||
8346417d09 | |||
![]() |
695e025c82 | ||
51019fbfce | |||
139c3f791e | |||
54fa5041e2 | |||
2b41b2f05b | |||
f4cb3ccd9c | |||
fb98f22ddd | |||
6b0869039a | |||
13672f8b32 | |||
cffbfe5568 | |||
ecbf838fee | |||
0153e99780 | |||
77834aff22 | |||
3fe0088cab | |||
8f94724f22 | |||
89831fae0c | |||
0b1050bf09 | |||
![]() |
eccdced972 | ||
5bbbc98471 | |||
![]() |
63a8b3b972 | ||
31e6f0dc7a | |||
f85ef3d442 | |||
cd38daeff4 | |||
0521272ab3 | |||
4e80573a76 | |||
c5b2381703 | |||
45d54ea67f | |||
6ac3a10619 | |||
1657fa039d | |||
f49f406f67 | |||
![]() |
4a24c6fe37 | ||
46a261e108 | |||
40de5742af | |||
586cf8b190 | |||
933eddc9a1 | |||
c26b46ddca | |||
257bfb65b2 | |||
a069fffcc4 | |||
9182c882fe | |||
1364f1e35c | |||
563ef943c7 | |||
e2c4a4c510 | |||
5780de2ae0 | |||
fc5be0b598 | |||
a070dd8bdd | |||
1af722b819 | |||
![]() |
b05ba2ef0e | ||
7af40ccf5f | |||
8f5a4a2453 | |||
834e87af7b | |||
ae8fa7062c | |||
3382b07ad6 | |||
432bfbf7a3 | |||
36584bbc2d | |||
4eeec6e9b5 | |||
ceff86aafe | |||
cf17f7e0cc | |||
3d9ecf1cf2 | |||
0c90aa097d | |||
bf75106ae9 | |||
c94877ae3d | |||
00c6cbb985 | |||
61afbf55f1 | |||
![]() |
f3ec0d8e58 | ||
b66c21f8b0 | |||
![]() |
29d6750134 | ||
de70bcbb36 | |||
![]() |
fd0370acc2 | ||
08241b313c | |||
![]() |
0ef794b553 | ||
![]() |
83e2f8c993 | ||
![]() |
ac1ed19eae | ||
673c254c7d | |||
cadda7aa5c | |||
b8115f0c5b | |||
dac81ad71b | |||
d27db03444 | |||
![]() |
2d0b9faaf6 | ||
![]() |
32124b940e | ||
bd0de99b52 | |||
4580340321 | |||
2ecc33d84b | |||
6eb8340ef4 | |||
416e006a2a | |||
92b775d319 | |||
ab6a011b3b | |||
aad8b8405c | |||
2eca9c7ed4 | |||
![]() |
2c6c1b6cc0 | ||
![]() |
c1ba68dd04 | ||
24a77745a4 | |||
fb46c047bd | |||
ded4dc7761 | |||
dc3f46d96b | |||
bb971bead9 | |||
e785569c95 | |||
c9eaf04afb | |||
a87593e62a | |||
9009ac2c3d | |||
04313f1bb5 | |||
afe7387be8 | |||
b29a8a5dfe | |||
9075f63e8f | |||
76f7b22989 | |||
dccadc9e78 | |||
5b2d2b2319 | |||
2929cfe5de | |||
f0f7282d9d | |||
a101f6d974 | |||
b73dc36859 | |||
9b89de2571 | |||
05f970847e | |||
2d146b61d8 | |||
3efc50dfde | |||
5f5cf21a83 | |||
55f27617cf | |||
00e30f122b | |||
82466ca2e5 | |||
0c84939117 | |||
8221d64844 | |||
5f8969bb4b | |||
a1609340b4 | |||
a96b52e37f | |||
88c855174d | |||
5a693ce9e3 | |||
bc8ae58727 | |||
01e1944cd4 | |||
29b65f5345 | |||
9f5c0ffb5e | |||
016a2707f5 | |||
841b2cea7b | |||
addb1a5c9a | |||
b39d66adde | |||
0ff1c38fcc | |||
7eecf77f0b | |||
fd1fec5600 | |||
b7b5c23b80 | |||
519c12da41 | |||
4a7951fede | |||
4617172740 | |||
a112adf16a | |||
19d19970e4 | |||
8c3855dc6e | |||
![]() |
229c0580e2 | ||
96d487b3ae | |||
aaa8ee1307 | |||
927456491a | |||
02df67875a | |||
f578e31a8e | |||
4546f176eb | |||
1e532eb37a | |||
aa112dc77c | |||
39188f3c99 | |||
930ecef9b5 | |||
753806c731 | |||
a689b5932d | |||
dba675fb65 | |||
924596abad | |||
![]() |
c1fc180861 | ||
5a64c687dd | |||
4f3ec01101 | |||
17a67bf778 | |||
ca12d70af0 | |||
5737193d81 | |||
8de8ab38f6 | |||
0e4245bc28 | |||
be451354c9 | |||
918d9291d6 | |||
c57b0cae28 | |||
4f9ef65dac | |||
2d4ec90497 | |||
501d2443d0 | |||
df9597cfba | |||
![]() |
8884d2d61b | ||
c36d2a9a7a | |||
77ac1f39c4 | |||
![]() |
d3788207aa | ||
![]() |
21ebee2580 | ||
![]() |
86c6769e20 | ||
2d35eed34d | |||
929d9ec0c7 | |||
dd14ea1819 | |||
fba9cd019f | |||
ea43ae4194 | |||
516a060bb3 | |||
999f1f7504 | |||
2ff714269e | |||
63aa6dd845 | |||
ae636994cd | |||
037035921b | |||
e7fc15e2ef | |||
d1e0059eac | |||
5d5cf53081 | |||
8f6a9c5176 | |||
5130bb116a | |||
df7db41e1b | |||
f2c52aa0e1 | |||
855f7fee63 | |||
203d405299 | |||
66d48b272e | |||
ee0c3081b0 | |||
2262d6c45a | |||
28135c06bb | |||
24c321cfe9 | |||
91b31173e9 | |||
34b213d604 | |||
c109a39995 | |||
f8d8f28e2c | |||
a3a7e19f07 | |||
3471ff1a5c | |||
d6480167ad | |||
60a2038fba | |||
515d9f9a35 | |||
e1a719c043 | |||
2271b9b584 | |||
d0e6b59cd1 | |||
d2e473a2dd | |||
a0c45a2d54 | |||
790cb28766 | |||
dc0c81337d | |||
![]() |
643720f8ab | ||
c0fb8375f6 | |||
578ccdf75b | |||
a5ed075110 | |||
afb17552e1 | |||
37458798fa | |||
e8d75b957f | |||
6c97c7f767 | |||
6ce4d39e6b | |||
0afe4e81cb | |||
222c39fe70 | |||
8de878e202 | |||
413bd71aaf | |||
cf21ba37ef | |||
![]() |
9c6a382f95 | ||
ce25b5812b | |||
7d281a4f7d | |||
f7e2559fd6 | |||
2dbb492268 | |||
1b942ef90c | |||
dbd4ff4163 | |||
c4d56199cc | |||
![]() |
98cd0fed36 | ||
![]() |
1c8c91384c | ||
![]() |
ab31c24322 | ||
addb2034a7 | |||
c297769d22 | |||
bb2648ebf0 | |||
2ff490f9e3 | |||
b2cd225623 | |||
f53bd31690 | |||
e94ec79341 | |||
7beb57f3bd | |||
6f42e69b58 | |||
7efc87dcd2 | |||
1d8648b13a | |||
23c4854f45 | |||
7223a0348f | |||
abc6200331 | |||
46a222afd7 | |||
624bce6b4d | |||
f1e4903854 | |||
fae5a907d4 | |||
b5542c1ea4 | |||
c1fe582446 | |||
a287c8d3c1 | |||
3826fcf035 | |||
5759bbe9f9 | |||
eae7090464 | |||
cb548329ea | |||
9586472b9a | |||
23042a3fb1 | |||
f863ef8a34 | |||
74450265d0 | |||
20e68d848e | |||
![]() |
5ec6c8d267 | ||
5f9677fe0c | |||
3558bb8eae | |||
ae085e301c | |||
841df831e8 | |||
3d7021b4ec | |||
b129a0b397 | |||
5f27a5fff7 | |||
b801db1181 | |||
b5840f9b5b | |||
![]() |
beb6399ae5 | ||
![]() |
15868b1ff4 | ||
7b524d9b71 | |||
a13314a03f | |||
cbdddc5648 | |||
51568030e9 | |||
27da305a40 | |||
67b352f9c5 | |||
8cdb99d51c | |||
3a8347f823 | |||
6570159929 | |||
1f778dbefc | |||
4b9ff3cd42 | |||
2e99a74df9 | |||
879b89e967 | |||
0469f2392f | |||
55bffa82da | |||
de6c6501f0 | |||
de05e261ec | |||
f7fbb518c8 | |||
d6212f67a9 | |||
ef7fcaf8e6 | |||
6e4b9f5836 | |||
c9f12b21e2 | |||
35db01325f | |||
8f4d991594 | |||
a50a51eef0 | |||
276790cbfa | |||
7dd7849ddd | |||
7561e3dad0 | |||
354ecc2f1e | |||
157081069d | |||
befb9d99f8 | |||
b964f73e7d | |||
eed9ac5b6e | |||
e291432f5f | |||
635b4db162 | |||
![]() |
a6f275cad3 | ||
82c17082ba | |||
071799d4fc | |||
61b22d27c8 | |||
5cc8e7ab53 | |||
2c916c97ac | |||
0f427f4eb1 | |||
58e58310b7 | |||
a8f37763ca | |||
dbc054bb88 | |||
abb07a38b8 | |||
c88c331384 | |||
![]() |
187e217b5a | ||
fa1868ae97 | |||
c3b641613c | |||
0732a9f1b2 | |||
87833f8f95 | |||
b35ba22d84 | |||
c6e6a9046e | |||
ee8b284d11 | |||
![]() |
c317f111c1 | ||
2fcd3f0296 | |||
1917d0345e | |||
ebfad93039 | |||
3a48147b8a | |||
0b15353baa | |||
f3eecfe386 | |||
026de343e3 | |||
f8d219dfd4 | |||
6ff0d59967 | |||
feaf309de7 | |||
f4e3b1e573 | |||
e3bdb189a7 | |||
ab063db34d | |||
3f1111b2a8 | |||
ad9fd47d7b | |||
01234b430b | |||
956c539e59 | |||
d3a792431e | |||
53ba9f01e2 | |||
1725bfc3cb | |||
6a3bd04e42 | |||
8af2c87f7e | |||
cd39e3dec1 | |||
338be95874 | |||
9ac56bad4c | |||
67ee87a6e9 | |||
53e1442ac2 | |||
e1d6219731 | |||
dc3b7602ee | |||
d086570c7a | |||
4947aa29db | |||
d443dcc733 | |||
6f158f834d | |||
445d506ac9 | |||
![]() |
b11a463e4f | ||
b665ad8621 | |||
41af27c582 | |||
47473bee34 | |||
b9ccfb89ce | |||
ce64cfd6ed | |||
3cf39c09bf | |||
4246898ad3 | |||
2851602052 | |||
4968a0bdf9 | |||
![]() |
f383cad329 | ||
002d563bbb | |||
4d91808710 | |||
4044c29069 | |||
54d651c344 | |||
19df0e3cfd | |||
b2510b9e20 | |||
feb6fd632f | |||
a1c3e45100 | |||
b45cee1aaf | |||
5df6b4004c | |||
5f71b1edd5 | |||
80083ac773 | |||
0cd34967c0 | |||
6afafc46f6 | |||
2d75b39b64 | |||
eee3529eaf | |||
859b3ff346 | |||
bce482f476 | |||
d9b1592c88 | |||
3462b4c7ae | |||
2d60c496a2 | |||
513f566b40 | |||
b5e5fbcfc8 | |||
3da25dc625 | |||
f3c5a84bb9 | |||
033641aa74 | |||
f9aea19d98 | |||
d52b7dbe26 | |||
3e6f2c7a99 | |||
f7022fc73f | |||
8a048593ca | |||
b6030711a2 | |||
638c16f410 | |||
682a74e090 | |||
aee04d4960 | |||
4c19fe4707 | |||
4998ceebfc | |||
408726000a | |||
![]() |
e0f2f07d1e | ||
![]() |
6d73d98fb6 | ||
03a83b4eb5 | |||
![]() |
ea4309925f | ||
a9d5c8f97f | |||
847b66e81d | |||
b8cf8e0bc2 | |||
80bc819d50 | |||
adefdbc9df | |||
7c68147709 | |||
060d668ae6 | |||
6c1fdd52c1 | |||
3caafd24a9 | |||
c4958bc540 | |||
2e8d7fa7ee | |||
253c5d25f7 | |||
c290ac2ab1 | |||
af4167441b | |||
50a4b9d502 | |||
5f0d4fef91 | |||
68b06208d2 | |||
f3c88f8ba5 | |||
![]() |
e178a273fa | ||
94c4a9995e | |||
4b673ebb99 | |||
577d6d3f87 | |||
ed4222258e | |||
7c1bb239be | |||
56db09e2fd | |||
1388e9de8a | |||
a971409d5a | |||
ccd5f80550 | |||
8ff6322152 | |||
6db290641e | |||
286bd87445 | |||
eb85de027c | |||
78693d524c | |||
e7003bc965 | |||
c73be23e17 | |||
845f4cebad | |||
d03b26edbd | |||
a1cc7042a7 | |||
247abdbf41 | |||
b37093de7b | |||
45d59e0df5 | |||
0cebe554d1 | |||
af3d7123c9 | |||
3953b82030 | |||
88aa056d1a | |||
b66600b9f3 | |||
b406b6717f | |||
94084b2d3c | |||
00fc110d3f | |||
1c0a490d0e | |||
c3fa7b7e4f | |||
4b36c5b1a7 | |||
3385c04598 | |||
9fed00341e | |||
![]() |
ed4b2ba75a | ||
2209321f78 | |||
be8a201a16 | |||
0b0c7ca017 | |||
c8e331f450 | |||
4891da8ae2 | |||
1a5fa2b319 | |||
143a81ccce | |||
c29afa5156 | |||
732e8c723e | |||
![]() |
6bb980b0f4 | ||
8e84938dd0 | |||
a4f840e15b | |||
fcc844f8fb | |||
![]() |
b3f0dc2907 | ||
71997921c4 | |||
0c75a98561 | |||
![]() |
174ed69c1b | ||
7c8b9c7a9a | |||
62906cdbea | |||
7f570a7174 | |||
9cd2e80d5d | |||
462bd81399 | |||
819152527f | |||
89e2b441ed | |||
ae34808114 | |||
fdad77d73d | |||
0a361eb5ec | |||
2ba804d7b7 | |||
5dc0fd08a7 | |||
2053e1f533 | |||
4ae06b6123 | |||
013fc69ea8 | |||
3bf98d1cec | |||
9ce49af32e | |||
1f251b7a27 | |||
61fdc45034 | |||
bf7f918a0e | |||
fe0fa7cec6 | |||
![]() |
4a540b9b48 | ||
fcbb20286a | |||
d08e925ef1 | |||
bcff0ef9ca | |||
2e5671a959 | |||
aadd355028 | |||
3de6fe0b3e | |||
e9b4de43d8 | |||
90b0fb135f | |||
8a1860bd9a | |||
6bef255904 | |||
8083527f90 | |||
1d2eb461b5 | |||
![]() |
b84707df17 | ||
ada47c4772 | |||
748475b943 | |||
b21db5e698 | |||
![]() |
5add6f2ed9 | ||
c9dc55301c | |||
a19c9e9351 | |||
![]() |
2db09f67a4 | ||
03544ed54f | |||
54a03d4247 | |||
84adc23941 | |||
0f68e5c30a | |||
5181bc46b3 | |||
452590571c | |||
ab38223047 | |||
f731bce6cd | |||
4c3bb60d0f | |||
9ff4e0068f | |||
84e98ba182 | |||
8e58f93215 | |||
aab4794512 | |||
952d6663e0 | |||
7b0c8097a7 | |||
b313525c1b | |||
d75e45d10c | |||
bd87ba90e6 | |||
![]() |
7bc5246156 | ||
f6c5af3d47 | |||
c8fcea0c33 | |||
20ece8736f | |||
![]() |
b4adb85933 | ||
605ce623be | |||
![]() |
7b30a3e98d | ||
![]() |
7b76a160a4 | ||
0eb9351296 | |||
![]() |
2330cec2c6 | ||
fe22635bf6 | |||
c0367b19e2 | |||
4adbe31e2f | |||
1fb2eaf1c5 | |||
2f280d4b92 | |||
e9c8ae767a | |||
![]() |
7fc220517f | ||
![]() |
28617bb167 | ||
84f025c6fd | |||
![]() |
066f5a4469 | ||
![]() |
d07cc5e680 | ||
![]() |
162cf8e81d | ||
![]() |
fd5c94c48a | ||
![]() |
2724d08cf5 | ||
![]() |
461ba4438f | ||
d581c1b304 | |||
e8a4bddef4 | |||
fbd889ec28 | |||
509e0c5b76 | |||
7b62a54230 | |||
![]() |
53c98e45cf | ||
bcefce33f2 | |||
9df1e0cad5 | |||
aa0bd29546 | |||
1a72ee4cbe | |||
e4ef8cbf7e | |||
5fa6cdb77a | |||
5304c6ed7d | |||
b669fd376a | |||
4d4608363c | |||
7141eb75ef | |||
b282a065f1 | |||
![]() |
4f81b4b4ce | ||
a3226bdf3e | |||
![]() |
d96e9de9de | ||
93fd07e19c | |||
5f19646d7e | |||
675677ec67 | |||
![]() |
df2a19eac7 | ||
2856f3b583 | |||
965bd53e02 | |||
05f15645ec | |||
cb0cab48ef | |||
029fb002dd | |||
4443c4082e | |||
bda8887e0c | |||
5575aba025 | |||
25d8ce16b5 | |||
59553d47c0 | |||
84af1eaa92 | |||
059f19d821 | |||
0f156a2436 | |||
f42a501c61 | |||
d8b8b4d7e2 | |||
14f3b2cdad | |||
f546b0800b | |||
92ae3ff84c | |||
5954b351f0 | |||
33c4eefabb | |||
![]() |
6e999e08ab | ||
ec98bb318b | |||
3a7ab62eac | |||
1f55e12206 | |||
ea3895558d | |||
![]() |
e4c6da29b2 | ||
4ced8900f5 | |||
f087a225dc | |||
dd98f6b55c | |||
b18a214ecb | |||
d7c812f15b | |||
3ba16afa1e | |||
8c3f4f7edf | |||
307f8c8e76 | |||
8bd09b1d77 | |||
f29a738e23 | |||
c18ff180e3 | |||
22ee056c3a | |||
f5a2d93224 | |||
a31bd2609f | |||
![]() |
2e19649bb9 | ||
7124c66340 | |||
![]() |
259b9c73d0 | ||
08b0de45f3 | |||
![]() |
2246d456aa | ||
9553ba1373 | |||
a2ebbeb836 | |||
5b014911a5 | |||
23fd576cf8 | |||
43464c94f4 | |||
322a614497 | |||
340c535dbf | |||
088ea59b7e | |||
cac9828ae3 | |||
9e9d45ae16 | |||
89d0cc3a0c | |||
e54a4b355e | |||
933c2cffd6 | |||
ed1fc9d96b | |||
496045fc30 | |||
f651cc6c4e | |||
0efb627bbd | |||
1b07b7a068 | |||
0abce91940 | |||
2e46a8c864 | |||
ef5a362a5b | |||
a6715213c3 | |||
482465e18a | |||
b0ec1d2747 | |||
1ef33be2d4 | |||
d2aee304e8 | |||
6e56b42faa | |||
1c6e338d59 | |||
7313b243f2 | |||
1182c26978 | |||
8cbff7093d | |||
0fcc063fd9 | |||
1949643ee5 | |||
7bf9d2c580 | |||
4a9c5c60b7 | |||
0e285fa23c | |||
214a78a46f | |||
f87f8532c3 | |||
3da0b52c97 | |||
785a518ebe | |||
2bf56f7fbb | |||
93a865dde7 | |||
72d2355af5 | |||
dfac5a63bd | |||
c87327ddeb | |||
7ca5ba14b5 | |||
51bf1680bd | |||
91d3a54869 | |||
ee0000b8bb | |||
7f1d1b03ad | |||
abee9a85d4 | |||
![]() |
223016a408 | ||
6e6a1838ea | |||
1d3ffc93ec | |||
e517aaa136 | |||
8b8c3c34dd | |||
4f6cab176a | |||
98876d46ef | |||
7ef2b760dc | |||
c27b7df563 | |||
a496af8680 | |||
54ce344bc7 | |||
dbfde0fe70 | |||
8e43ef5f31 | |||
edaaa2afdd | |||
d2dc452333 | |||
2cd1bc3aa7 | |||
1a912462f4 | |||
bcf9c73cbc | |||
3c9c557580 | |||
c7fee64dea | |||
ca3891e83b | |||
a5114bfb85 | |||
022f8b552d | |||
14508ef100 | |||
bfaf09b5bc | |||
c2fa36999f | |||
![]() |
00073651d4 | ||
eb030204f1 | |||
![]() |
56005ef499 | ||
b6d6d8a1aa | |||
0037e08b06 | |||
b6b20c4d92 | |||
![]() |
d486ee2dbd | ||
9ba6b64efa | |||
e4ca6b93ad | |||
77d7cae266 | |||
f4e0a19d4f | |||
053082e9d8 | |||
![]() |
ddd4b2b785 | ||
e5a1cadb2f | |||
c18675b12c | |||
dba3fb9e09 | |||
3e695a27cd | |||
a1063fc6c2 | |||
b414322f26 | |||
899eefd1bb | |||
72607feb91 | |||
870bcf6e1a | |||
8b78510fc4 | |||
e0bc5c4087 | |||
1fd653dd82 | |||
d9aae38bc8 | |||
efad9bcdda | |||
b5d7fb813f | |||
bb16f96973 | |||
7197017ea9 | |||
ed6fd01ba9 | |||
826bed4349 | |||
797f6e1483 | |||
e011e4ce76 | |||
92f8a6ac21 | |||
7b8d812277 | |||
2ae4e860f6 | |||
2ef192a55b | |||
a51f8f94d5 | |||
17f72be3cb | |||
2a868d277e | |||
b60a72eaab | |||
2dcb6782e0 | |||
4d64de2853 | |||
5af7225816 | |||
925df8ef26 | |||
2ee575fc1f | |||
1f55786791 | |||
a9dfde7b49 | |||
0ea0ccc4ff | |||
81366b7d2c | |||
dc960a81d1 | |||
4f8edc8e7f | |||
b8ae30e9e3 | |||
ae28ceb9d8 | |||
05b685989b | |||
7654203cc8 | |||
2489f72d79 | |||
730a46e87d | |||
f944121700 | |||
21de669141 | |||
5b176b66da | |||
a55b73417f | |||
ea6d099082 | |||
34f99bc6be | |||
6cd64f8caa | |||
f92f5d1ac6 | |||
69e15eb1e4 | |||
facc62d0d5 | |||
46447594de | |||
507c19c0f7 | |||
3b3742c75f | |||
b5a883fef9 | |||
711ddea60e | |||
6b5bbd22d9 | |||
![]() |
464797078d | ||
3400ba329e | |||
17b09b509c | |||
5b6e0bad1b | |||
404b946ac0 | |||
6583fb67c6 | |||
![]() |
8a63466ca3 | ||
6899dcab53 | |||
c078540512 | |||
6f1af44695 | |||
633b70905a | |||
f0d93a71df | |||
98c6626729 | |||
4b57bbac22 | |||
bf8659930f | |||
f25316e97a | |||
84e16c4992 | |||
db15c9d1bd | |||
27910ccce6 | |||
9adfd278f7 | |||
930ad9257d | |||
13deb5088a | |||
b8d0f28f70 | |||
3a18e304be | |||
5e7fb77dc4 | |||
f8ce744c83 | |||
f71cf99616 | |||
c145cb7998 | |||
e7b8a3cb0a | |||
c59d2c739d | |||
f253e59221 | |||
8180d478e1 | |||
73967e2047 | |||
09fb81f66d | |||
25316ef9d7 | |||
875a8a6c79 | |||
![]() |
ee54a8ace7 | ||
261a10edb0 | |||
d647e730fb | |||
b862916eaf | |||
![]() |
44d2479dc3 | ||
aebeb85fe0 | |||
d67c13ca76 | |||
d94ba979d8 | |||
e0a1c3da46 | |||
e9f2f17e85 | |||
83fe479c7f | |||
ce649c7344 | |||
2534609262 | |||
86eaddb3ca | |||
26fb7b9474 | |||
421c0b45e5 | |||
![]() |
5f749a03ca | ||
a1556fa05c | |||
e6a69f7653 | |||
7b5796dcaa | |||
f5d14e36e8 | |||
870aaf3fb6 | |||
6f86d50b92 | |||
30f7acfffa | |||
115547991a | |||
![]() |
ffe7a41540 | ||
![]() |
74c7e21f6c | ||
9225fe933a | |||
3311350670 | |||
5b8a41d387 | |||
653bbaa246 | |||
c0ce7fce89 | |||
![]() |
fc2b56e68c | ||
a4700549e0 | |||
c65f4b3d76 | |||
11e32332dd | |||
418888f1c9 | |||
bdac47f8d4 | |||
97ccd592ce | |||
![]() |
51bbdfbef3 | ||
63e50cf265 | |||
![]() |
5baf1dddd5 | ||
3ec57ce6c7 | |||
3bee77bb7c | |||
6b03621c01 | |||
4a1ba155d5 | |||
0a83f32d79 | |||
758c115103 | |||
311ffd967b | |||
530f2994e9 | |||
dfa3dcbab9 | |||
8590cb26a9 | |||
3025c34825 | |||
24b2482ad9 | |||
a3edf4a381 | |||
e8ca635e43 | |||
ac833108db | |||
5621a8ed7f | |||
a12fd5c3ad | |||
5721c89ba8 | |||
![]() |
9200e73136 | ||
6ad4b8b764 | |||
f45270b4fb | |||
42fba7f0d2 | |||
ac2266fe57 | |||
2414a5787d | |||
7b5f4c8837 | |||
616b071c4f | |||
15df83e9c9 | |||
8f43e31a71 | |||
4ea7742973 | |||
bf7a67c5c6 | |||
06d48367fa | |||
46e1ad711c | |||
ffa2a1771e | |||
fd0bb24e4a | |||
41f2ea4045 | |||
1276d0024f | |||
f0342065b1 | |||
2ad3a1c318 | |||
223c6e1ead | |||
7d20cf92dd | |||
deb71cef38 | |||
a10e41b02e | |||
b132dd042e | |||
c97b6215a3 | |||
f3944cf503 | |||
![]() |
6fc9ec9257 | ||
e5b51cb511 | |||
2c607ec2f6 | |||
7438f0c6c0 | |||
de3d54eb9a | |||
df32b50344 | |||
6b00df1105 | |||
72d660443b | |||
51ca9833d9 | |||
daf39af70a | |||
653d39cec3 | |||
6cbe5dd1c3 | |||
ee849ca0f8 | |||
![]() |
8f9599d17e | ||
![]() |
87055dc71b | ||
e459a25e6c | |||
a6f3bb36df | |||
3f27efd31e | |||
06f86dd4d9 | |||
b67423f806 | |||
afec66c024 | |||
12a06292af | |||
2a09634d41 | |||
534fcab994 | |||
a72a580948 | |||
e6c0e6c2a9 | |||
1e6b028580 | |||
09e77f904d | |||
03c0fa1cdb | |||
b813007a0f | |||
ff35332610 | |||
c0bb7d9cb7 | |||
95690dd362 | |||
490dd279cc | |||
45b28c0f88 | |||
9f60188cd8 | |||
![]() |
cb8a6814fd | ||
00955cd31e | |||
![]() |
fd94e03344 | ||
b046bc536b | |||
8cd506639a | |||
54ae7baa4c | |||
c3c576c8c4 | |||
a20ef4207d | |||
1bdd5becc7 | |||
5fddb5ab62 | |||
cccfcca33d | |||
067587e329 | |||
405534c756 | |||
768d4c6cfe | |||
0a7bd3b6d2 | |||
e3faef686d | |||
ad447705c0 | |||
8c7766dc03 | |||
![]() |
0606a37e1a | ||
9c53690b30 | |||
1318cb26fe | |||
![]() |
6c2c16b5f8 | ||
24004e74fa | |||
43153e2324 | |||
7e841c797f | |||
9dcbc195ad | |||
f7b22fc3d2 | |||
7adbe62a09 | |||
2175cbe2ce | |||
2521e17a58 | |||
![]() |
9c4ecef62f | ||
4fb052f08d | |||
24deeee09e | |||
adf2f146d8 | |||
305b08b521 | |||
5158d1b42d | |||
![]() |
865d1889da | ||
cf42586737 | |||
ff51c2e89a | |||
c154b078b5 | |||
aa6f0f3d1f | |||
12a91f7f5d | |||
2b640622ff | |||
b13953b1f2 | |||
6c6551c398 | |||
![]() |
a43c7538b8 | ||
b18d5dac53 | |||
ba9cf91736 | |||
695fa3a4a1 | |||
1400fdf558 | |||
ef04fd9571 | |||
677909cdc3 | |||
9fef934530 | |||
cd16123761 | |||
933999db75 | |||
0745afeddb | |||
3e3ecc329c | |||
f41a753e75 | |||
f3a0267016 | |||
b51bd859fd | |||
b084b57fbf | |||
44e7192745 | |||
a5ac062c51 | |||
7655cc45eb | |||
acba8f617b | |||
47e88345a1 | |||
d1c9a99c07 | |||
0b7744f4da | |||
97cf2a9fb1 | |||
58893eaef8 | |||
3d604ba867 | |||
627f357127 | |||
192a3f1a05 | |||
![]() |
330fecc9b7 | ||
857f39a3d7 | |||
23b642cbb4 | |||
ca74ebc96e | |||
3620dbbe97 | |||
c810672ea7 | |||
ee5ad46a0e | |||
0fa4286ade | |||
38450fc916 | |||
afb66b3c3a | |||
c5a898bcac | |||
81e3d904db | |||
7adb415070 | |||
5e6f3b8564 | |||
02b80276b3 | |||
1a81d268a1 | |||
d373b43f07 | |||
f7a14c116c | |||
748b5f025d | |||
5400be9ffe | |||
f9567f6c63 | |||
a881b5272b | |||
3826c161ad | |||
019ab774d4 | |||
7aa7cc4ca1 | |||
2b660e825b | |||
ea7b00c64f | |||
4402c3006b | |||
eaf3160f13 | |||
f4eae747f9 | |||
1f9eb7e2c6 | |||
97f1e4782a | |||
1c1fa15ce1 | |||
8a26fec6ea | |||
4dfbaa34c9 | |||
5e67dcf3d2 | |||
52e53d61f5 | |||
8057b98572 | |||
38fe8d8b38 | |||
73080ddf38 | |||
f96a0f384d | |||
c17433bb55 | |||
c9afea5bbf | |||
43046d82b7 | |||
542b8da831 | |||
1b0ecb2f89 | |||
![]() |
1a4e7b16b2 | ||
a86e815dd8 | |||
f09606cc68 | |||
6cfa8531cc | |||
50eceb2a37 | |||
![]() |
ba698f0812 | ||
7e552b356d | |||
![]() |
e95f71bf15 | ||
![]() |
0447aedb96 | ||
45863059f7 | |||
67c40cc51c | |||
27c0d29138 | |||
6a771175b6 | |||
0e581f6196 | |||
49cb30bb0c | |||
9dabb342ba | |||
4da16a0707 | |||
038c6e229c | |||
cb12fb78ca | |||
3e6609a0dc | |||
a56cc26b48 | |||
c2ee7ab2e3 | |||
6e8685e1fd | |||
65997a058f | |||
ccb22740c1 | |||
3458d09a74 | |||
e7e183aa2b | |||
3c978a73d1 | |||
782ccbde70 | |||
db59f0b943 | |||
7178e54122 | |||
7efe92f63b | |||
f6cb9433d4 | |||
8c80267352 | |||
![]() |
b11499939c | ||
![]() |
48fa029dd1 | ||
![]() |
3f4f109646 | ||
079f415deb | |||
265d97556a | |||
65f9550813 | |||
a4f0780acf | |||
bd5bab961e | |||
2871fadcad | |||
a939317862 | |||
26b4ef6823 | |||
![]() |
9797b95f61 | ||
a156843112 | |||
c1c0b661c0 | |||
20c3db6604 | |||
55b9b1ff50 | |||
bd76184966 | |||
01718ad952 | |||
![]() |
d70cfb90e0 | ||
01a614c699 | |||
c5d38a2be8 | |||
88aee2986f | |||
![]() |
2953732fc5 | ||
d889e9684a | |||
b90fec5d46 | |||
23a788b8bd | |||
64f1d5e7c1 | |||
d288eeb79a | |||
522868001c | |||
8b87fc1c77 | |||
2fb0eeb707 | |||
777ba780a6 | |||
d4bca00a47 | |||
6b33dafb64 | |||
250a5442cf | |||
df07188750 | |||
bddc987ba3 | |||
f1ecbf26b7 | |||
a5d2c19a5c | |||
06e62adfb8 | |||
fa472d46fc | |||
1a94ae9e47 | |||
50bf033d3f | |||
3ef01692c8 | |||
1892b131ed | |||
8dc95f61f3 | |||
ead084b6e1 | |||
44db4e50b2 | |||
aaa07a3a8f | |||
bf23083852 | |||
3836d10faf | |||
21bed44001 | |||
2074729308 | |||
a43a455fdd | |||
2e750a42a1 | |||
93b7c9595b | |||
0d21228dce | |||
193425ce1d | |||
9a6fd69993 | |||
cb385a117b | |||
![]() |
cbeeca8167 | ||
![]() |
65244ac1c3 | ||
2770d43da6 | |||
96bcd80c5a | |||
6796ff5880 | |||
![]() |
93933ee8bb | ||
![]() |
fc5bf09fd8 | ||
a02be602f9 | |||
1151adf62d | |||
091d7336e6 | |||
4226f19a03 | |||
5bae9d4e38 | |||
5950208f04 | |||
7d187e91bb | |||
4333991b7b | |||
a5761bbde2 | |||
6b1034d520 | |||
5613c61275 | |||
e19ee2e212 | |||
3a5f3fb7e4 | |||
0467979425 | |||
c3de3c2749 | |||
1ef5604e8c | |||
cacfa75e67 | |||
bc868f7b52 | |||
![]() |
273db9294a | ||
0aa05c7fbb | |||
f966f6ed55 | |||
eba9404cc7 | |||
0061150e4c | |||
f2370bb22d | |||
3b7df2e157 | |||
1d6425cb64 | |||
c63d40c165 | |||
2f61602497 | |||
d800470ac2 | |||
f694321db0 | |||
7029cc2f8a | |||
518c5ce4cd | |||
b7afb8ea70 | |||
9569a522f2 | |||
34439f05ab | |||
39044e68c2 | |||
e1e23595f0 | |||
9708215611 | |||
124572a6e5 | |||
57b473a10a | |||
e46b9de6ab | |||
3185084efb | |||
960535ddf3 | |||
c2b6dc7e53 | |||
9c509a7219 | |||
8f04ddbbc6 | |||
8d6264ea12 | |||
5bfd5e77b7 | |||
36ffa5b915 | |||
![]() |
7d90b0ab11 | ||
8e3a73bf81 | |||
bcfdbbf4b4 | |||
94838ba661 | |||
a932b9eab7 | |||
b78a1c05a3 | |||
c58bf31aed | |||
e7312effb1 | |||
a54253f335 | |||
aa8e058a59 | |||
23acca0c32 | |||
6b46e9e524 | |||
700fe73560 | |||
232b10f663 | |||
cfc644186a | |||
5d7de5745b | |||
eaffa83fec | |||
f81dca971d | |||
c8cbaeb329 | |||
![]() |
ba06bc16ae | ||
026a9cdc21 | |||
5a3307230e | |||
ff1b35af39 | |||
eb9762a159 | |||
4243ee7d19 | |||
78b2b5fc0e | |||
72cefdfd59 | |||
51b8032c70 | |||
20a878158f | |||
529de3d6f8 | |||
568d55d4bc | |||
ec30cf0b74 | |||
3e77f747c0 | |||
47d76e0903 | |||
42e350b9a5 | |||
59df16e2e4 | |||
11b50b2b77 | |||
f74b7e6ce9 | |||
c17792a709 | |||
0433bc7e4e | |||
efc6f4675d | |||
832f7170dc | |||
![]() |
6c8c30d865 | ||
ebd912ca8f | |||
ccb5caef08 | |||
c8293d6258 | |||
5f7f90d5a2 | |||
632c3304bc | |||
1f184066ba | |||
8e0995d006 | |||
515afeb11b | |||
89bc6b5508 | |||
08f4bab658 | |||
20aed341ee | |||
909506200a | |||
d08cc63e2f | |||
1f5710326f | |||
d18be66a54 | |||
7ab7ae80c5 | |||
441160930b | |||
5ea113a555 | |||
87ee8ddfe3 | |||
f8f6e0b256 | |||
![]() |
7904899d02 | ||
d2311de218 | |||
46d56bd956 | |||
191664acd2 | |||
ee51e73355 | |||
57b94cf34b | |||
d0b3f9c81b | |||
4599cea15d | |||
e6bf272abd | |||
![]() |
042df5fd6a | ||
8216b759e9 | |||
c9d81678d7 | |||
73a76608c8 | |||
888a697e24 | |||
12d8720b9b | |||
0ac6852a42 | |||
2f615ad3a9 | |||
9f1e20e74f | |||
e2c671e34c | |||
3e4863376e | |||
efe9928545 | |||
2e9dc2b999 | |||
2b78d3d7f3 | |||
1d7ee50fef | |||
2b46606af1 | |||
ee8593fe76 | |||
da9b1b9636 | |||
8884385afb | |||
3bc44233c0 | |||
5a964664d6 | |||
5ffab01930 | |||
d8fdb06a81 | |||
6b6ae92436 | |||
ecc7a83798 | |||
06af6a9efa | |||
![]() |
6fff2427d6 | ||
![]() |
6111ec8bd3 | ||
503dc97708 | |||
d540a858d8 | |||
f11a3c36e3 | |||
5e53504b3b | |||
436529d4f6 | |||
75536b5a61 | |||
405c3b59e4 | |||
313a1c072d | |||
e7274f9f2d | |||
2bd9a28ff8 | |||
a711aa5b3c | |||
a35d33d520 | |||
c3a980436d | |||
2510bd3a5f | |||
![]() |
04b6296e81 | ||
c96506d54a | |||
8f27ea40d6 | |||
![]() |
95d2d0d35a | ||
6cf28e98fb | |||
3182844914 | |||
a79b09e762 | |||
7f208be929 | |||
7041568ff9 | |||
2b723abea0 | |||
ea17a92cd7 | |||
67cd6beea0 | |||
4d7d1b5dae | |||
c51720a6ad | |||
af3eda8185 | |||
0dde73b4fc | |||
b316aaa0d2 | |||
5806d7ef54 | |||
d5ae0290e8 | |||
4a82df366f | |||
d286adc26e | |||
8a1d3bf2b1 | |||
a636909aa7 | |||
452f32dcb3 | |||
5a40c79520 | |||
a9a048c726 | |||
0959618c2e | |||
1597eb82d6 | |||
093ab05bcd | |||
d1cdbbc5fd | |||
3be50c849a | |||
![]() |
47aca2b4c4 | ||
ddaeaa4b98 | |||
45a14a20de | |||
8dd5fdca3b | |||
![]() |
41820e8a8e | ||
c9d1143b33 | |||
48b8b17da0 | |||
![]() |
9291128bff | ||
bcf524328f | |||
3e3363a6ed | |||
97923d9b98 | |||
![]() |
7134b9daca | ||
738a890025 | |||
9bdb2f5e0b | |||
734c8f9a77 | |||
7627e0980d | |||
933de8201e | |||
![]() |
6a2bc40e01 | ||
4225a18b35 | |||
41945454f7 | |||
88400f0c03 | |||
4e10b196ac | |||
![]() |
f903e3a3fd | ||
868c8e8617 | |||
b10649f27b | |||
816fc5a308 | |||
737a1a85b4 | |||
4338595a97 | |||
4a2c92ea9c | |||
27370aef8f | |||
14f59a0349 | |||
38ebac86cc | |||
5cb1e18f72 | |||
baa51666ed | |||
1012e9bbfa | |||
cb09d34fde | |||
4273ec04be | |||
![]() |
f8f7c0ca6d | ||
67a52c8a40 | |||
![]() |
11dc674c78 | ||
1b5b4b067e | |||
54c5835293 | |||
0b7bda808e | |||
85d4a733cf | |||
d71f96073f | |||
8a41a12c71 | |||
![]() |
3d902b4b04 | ||
1128258c03 | |||
![]() |
a5bb028e78 | ||
1b6f655abe | |||
581f79e734 | |||
6a664cc945 | |||
ac6f6d218c | |||
9cd9b35779 | |||
8a786fad01 | |||
eecaa59513 | |||
4ddff574d7 | |||
![]() |
e714b3a1c3 | ||
3c269f01c3 | |||
908bb03630 | |||
a022cffb72 | |||
e240d94191 | |||
542f022afd | |||
77aac42fbc | |||
2841d225a9 | |||
f5123b1fc9 | |||
676ef58a89 | |||
cb3ea6636e | |||
7e17dbfcf3 | |||
e032ca2e25 | |||
a7bda03516 | |||
607cd463b3 | |||
eb0d680851 | |||
c266632ff6 | |||
d89d53b453 | |||
bac9562f15 | |||
8f03c9b19a | |||
e12a8aedce | |||
94960250b5 | |||
d7c762d2f7 | |||
9b64927a8a | |||
c63142ca8f | |||
a200a8cf59 | |||
36c4b79c30 | |||
![]() |
5341482064 | ||
c76141e425 | |||
c204e0c385 | |||
16b2b33d01 | |||
20142b0823 | |||
ae58db91a2 | |||
87a70801c6 | |||
05dddb71b0 | |||
3a6f481d5a | |||
c96f9bd340 | |||
9cce18a585 | |||
82328797cf | |||
b6542f71e1 | |||
f8d5d03ebc | |||
b06d9069ad | |||
c2a0ca622b | |||
536a2fe7cc | |||
86ff35c7fc | |||
17fca62fff | |||
2e513afe80 | |||
e4cebec647 | |||
be68d00c36 | |||
17afa86336 | |||
8aa8537632 | |||
5e509f966f | |||
23185262ab | |||
877711e9e4 | |||
8adeac7c27 | |||
361579c86a | |||
4cb8438e08 | |||
f8e1526fa6 | |||
ffa8563429 | |||
![]() |
425e19bc1f | ||
cfa20ff03b | |||
8b049e4c2a | |||
5a33965627 | |||
76fcf58cdd | |||
47892d6695 | |||
6ebe0b8cf0 | |||
bbb52a462e | |||
d1ccc5b969 | |||
9fccbe2d13 | |||
b9a7b40924 | |||
f6efacfec7 | |||
c3701e2303 | |||
8c146d5efc | |||
1095d5964d | |||
7192ab614b | |||
91c652e39a | |||
33d9a0c951 | |||
a4bd0fcabf | |||
48c5129d1f | |||
932b23782a | |||
19360c2c1c | |||
ef9551afd1 | |||
3da74c1c18 | |||
1dd17726f2 | |||
d5309bf4cf | |||
b9cbf7fc80 | |||
9fa9854e2a | |||
7aa6444a65 | |||
e9e2805573 | |||
0b458e8322 | |||
2e3f072d5d | |||
183e3f6bb9 | |||
d17bff849d | |||
5fe3d2dc7d | |||
79d2f2c2f9 | |||
f9867c1f11 | |||
3003fbbecf | |||
c5cabb6eb7 | |||
557b3d2762 | |||
847579b422 | |||
f2626f1420 | |||
f1b61f5e7d | |||
e2af5030b9 | |||
2c1a2c9a99 | |||
eca5cf1460 | |||
26d778cd8a | |||
e1a9ba94c5 | |||
7834fcc67d | |||
b2c6eb8640 | |||
2efd3509ee | |||
8c0f7d1772 | |||
5d2ec2bc08 | |||
8c5c55b8c9 | |||
5e82e77112 | |||
b760481f8d | |||
7ccd19fc12 | |||
ebe04bd3ca | |||
985ccba77c | |||
795f024558 | |||
2d1d6fbb23 | |||
d1fbf1599f | |||
b42454be8b | |||
68cbf0a2be | |||
c13b3dd168 | |||
2dc5961874 | |||
458cbcbfea | |||
8032bd98d8 | |||
f99f884444 | |||
feedf28549 | |||
4402c2324b | |||
e1acefd45e | |||
46a13482cb | |||
33440760a6 | |||
eb06ccc324 | |||
![]() |
799f532f46 | ||
112fb77157 | |||
1d96493c2f | |||
969cc22a89 | |||
eae39a4973 | |||
0af28f007f | |||
950d8360f8 | |||
1825e67dea | |||
c8dd684b65 | |||
6879868814 | |||
9a69653b42 | |||
76eae59648 | |||
01448ee7ce | |||
8d30a7a1cf | |||
1544bcfc37 | |||
4e1507bd3b | |||
1fc446a908 | |||
aca9a1bac3 | |||
ebcf49fe1a | |||
3516ee5a14 | |||
1a010450bc | |||
eff2b89446 | |||
686452fb1b | |||
e4990a5658 | |||
d0d85742fc | |||
5cf6f570c6 | |||
4dca44086f | |||
3608891282 | |||
e524a6ecf7 | |||
fc37b265c8 | |||
7eda4cde71 | |||
cf6d10ef46 | |||
537460b86d | |||
c7a8bcfa37 | |||
bfc0f483c6 | |||
7aa38de085 | |||
0edfa5350e | |||
be34d14575 | |||
45eafd6562 | |||
073ef4d265 | |||
cb4646a6df | |||
0567f2b0bb | |||
62bff15377 | |||
ec241eb0d0 | |||
09eb04c0a8 | |||
ced26bacb7 | |||
27005f58c5 | |||
bd8fd78b40 | |||
6e39da7948 | |||
61c3d7aa2c |
@@ -255,6 +255,7 @@ ForEachMacros:
|
|||||||
- SCULPT_VERTEX_DUPLICATES_AND_NEIGHBORS_ITER_BEGIN
|
- SCULPT_VERTEX_DUPLICATES_AND_NEIGHBORS_ITER_BEGIN
|
||||||
- SCULPT_VERTEX_NEIGHBORS_ITER_BEGIN
|
- SCULPT_VERTEX_NEIGHBORS_ITER_BEGIN
|
||||||
- SEQ_ALL_BEGIN
|
- SEQ_ALL_BEGIN
|
||||||
|
- SEQ_ITERATOR_FOREACH
|
||||||
- SURFACE_QUAD_ITER_BEGIN
|
- SURFACE_QUAD_ITER_BEGIN
|
||||||
- foreach
|
- foreach
|
||||||
- ED_screen_areas_iter
|
- ED_screen_areas_iter
|
||||||
@@ -264,4 +265,5 @@ ForEachMacros:
|
|||||||
- VECTOR_SET_SLOT_PROBING_BEGIN
|
- VECTOR_SET_SLOT_PROBING_BEGIN
|
||||||
|
|
||||||
StatementMacros:
|
StatementMacros:
|
||||||
|
- PyObject_HEAD
|
||||||
- PyObject_VAR_HEAD
|
- PyObject_VAR_HEAD
|
||||||
|
@@ -349,7 +349,7 @@ mark_as_advanced(WITH_SYSTEM_GLOG)
|
|||||||
option(WITH_FREESTYLE "Enable Freestyle (advanced edges rendering)" ON)
|
option(WITH_FREESTYLE "Enable Freestyle (advanced edges rendering)" ON)
|
||||||
|
|
||||||
# Misc
|
# Misc
|
||||||
if(WIN32)
|
if(WIN32 OR APPLE)
|
||||||
option(WITH_INPUT_IME "Enable Input Method Editor (IME) for complex Asian character input" ON)
|
option(WITH_INPUT_IME "Enable Input Method Editor (IME) for complex Asian character input" ON)
|
||||||
endif()
|
endif()
|
||||||
option(WITH_INPUT_NDOF "Enable NDOF input devices (SpaceNavigator and friends)" ON)
|
option(WITH_INPUT_NDOF "Enable NDOF input devices (SpaceNavigator and friends)" ON)
|
||||||
@@ -836,7 +836,7 @@ if(WITH_PYTHON)
|
|||||||
# because UNIX will search for the old Python paths which may not exist.
|
# because UNIX will search for the old Python paths which may not exist.
|
||||||
# giving errors about missing paths before this case is met.
|
# giving errors about missing paths before this case is met.
|
||||||
if(DEFINED PYTHON_VERSION AND "${PYTHON_VERSION}" VERSION_LESS "3.9")
|
if(DEFINED PYTHON_VERSION AND "${PYTHON_VERSION}" VERSION_LESS "3.9")
|
||||||
message(FATAL_ERROR "At least Python 3.9 is required to build")
|
message(FATAL_ERROR "At least Python 3.9 is required to build, but found Python ${PYTHON_VERSION}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
file(GLOB RESULT "${CMAKE_SOURCE_DIR}/release/scripts/addons")
|
file(GLOB RESULT "${CMAKE_SOURCE_DIR}/release/scripts/addons")
|
||||||
@@ -1705,23 +1705,19 @@ if(WITH_PYTHON)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(MSVC)
|
# Select C++17 as the standard for C++ projects.
|
||||||
string(APPEND CMAKE_CXX_FLAGS " /std:c++17")
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
# If C++17 is not available, downgrading to an earlier standard is NOT OK.
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
# Do not enable compiler specific language extentions.
|
||||||
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
# Make MSVC properly report the value of the __cplusplus preprocessor macro
|
# Make MSVC properly report the value of the __cplusplus preprocessor macro
|
||||||
# Available MSVC 15.7 (1914) and up, without this it reports 199711L regardless
|
# Available MSVC 15.7 (1914) and up, without this it reports 199711L regardless
|
||||||
# of the C++ standard chosen above
|
# of the C++ standard chosen above.
|
||||||
if(MSVC_VERSION GREATER 1913)
|
if(MSVC AND MSVC_VERSION GREATER 1913)
|
||||||
string(APPEND CMAKE_CXX_FLAGS " /Zc:__cplusplus")
|
string(APPEND CMAKE_CXX_FLAGS " /Zc:__cplusplus")
|
||||||
endif()
|
endif()
|
||||||
elseif(
|
|
||||||
CMAKE_COMPILER_IS_GNUCC OR
|
|
||||||
CMAKE_C_COMPILER_ID MATCHES "Clang" OR
|
|
||||||
CMAKE_C_COMPILER_ID MATCHES "Intel"
|
|
||||||
)
|
|
||||||
string(APPEND CMAKE_CXX_FLAGS " -std=c++17")
|
|
||||||
else()
|
|
||||||
message(FATAL_ERROR "Unknown compiler ${CMAKE_C_COMPILER_ID}, can't enable C++17 build")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Visual Studio has all standards it supports available by default
|
# Visual Studio has all standards it supports available by default
|
||||||
# Clang on windows copies this behavior and does not support these switches
|
# Clang on windows copies this behavior and does not support these switches
|
||||||
@@ -1915,6 +1911,7 @@ if(FIRST_RUN)
|
|||||||
info_cfg_option(WITH_IK_ITASC)
|
info_cfg_option(WITH_IK_ITASC)
|
||||||
info_cfg_option(WITH_IK_SOLVER)
|
info_cfg_option(WITH_IK_SOLVER)
|
||||||
info_cfg_option(WITH_INPUT_NDOF)
|
info_cfg_option(WITH_INPUT_NDOF)
|
||||||
|
info_cfg_option(WITH_INPUT_IME)
|
||||||
info_cfg_option(WITH_INTERNATIONAL)
|
info_cfg_option(WITH_INTERNATIONAL)
|
||||||
info_cfg_option(WITH_OPENCOLLADA)
|
info_cfg_option(WITH_OPENCOLLADA)
|
||||||
info_cfg_option(WITH_OPENCOLORIO)
|
info_cfg_option(WITH_OPENCOLORIO)
|
||||||
|
@@ -56,6 +56,7 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
include(cmake/zlib.cmake)
|
include(cmake/zlib.cmake)
|
||||||
|
include(cmake/zstd.cmake)
|
||||||
include(cmake/openal.cmake)
|
include(cmake/openal.cmake)
|
||||||
include(cmake/png.cmake)
|
include(cmake/png.cmake)
|
||||||
include(cmake/jpeg.cmake)
|
include(cmake/jpeg.cmake)
|
||||||
@@ -104,8 +105,6 @@ include(cmake/pugixml.cmake)
|
|||||||
include(cmake/ispc.cmake)
|
include(cmake/ispc.cmake)
|
||||||
include(cmake/openimagedenoise.cmake)
|
include(cmake/openimagedenoise.cmake)
|
||||||
include(cmake/embree.cmake)
|
include(cmake/embree.cmake)
|
||||||
include(cmake/xml2.cmake)
|
|
||||||
|
|
||||||
if(NOT APPLE)
|
if(NOT APPLE)
|
||||||
include(cmake/xr_openxr.cmake)
|
include(cmake/xr_openxr.cmake)
|
||||||
endif()
|
endif()
|
||||||
@@ -115,7 +114,7 @@ include(cmake/expat.cmake)
|
|||||||
include(cmake/yamlcpp.cmake)
|
include(cmake/yamlcpp.cmake)
|
||||||
include(cmake/opencolorio.cmake)
|
include(cmake/opencolorio.cmake)
|
||||||
|
|
||||||
if(APPLE AND ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64"))
|
if(BLENDER_PLATFORM_ARM)
|
||||||
include(cmake/sse2neon.cmake)
|
include(cmake/sse2neon.cmake)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -146,6 +145,7 @@ if(NOT WIN32 OR ENABLE_MINGW64)
|
|||||||
endif()
|
endif()
|
||||||
if(UNIX)
|
if(UNIX)
|
||||||
include(cmake/flac.cmake)
|
include(cmake/flac.cmake)
|
||||||
|
include(cmake/xml2.cmake)
|
||||||
if(NOT APPLE)
|
if(NOT APPLE)
|
||||||
include(cmake/spnav.cmake)
|
include(cmake/spnav.cmake)
|
||||||
include(cmake/jemalloc.cmake)
|
include(cmake/jemalloc.cmake)
|
||||||
@@ -165,7 +165,7 @@ endif()
|
|||||||
if(UNIX AND NOT APPLE)
|
if(UNIX AND NOT APPLE)
|
||||||
include(cmake/libglu.cmake)
|
include(cmake/libglu.cmake)
|
||||||
include(cmake/mesa.cmake)
|
include(cmake/mesa.cmake)
|
||||||
|
include(cmake/wayland_protocols.cmake)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
include(cmake/harvest.cmake)
|
include(cmake/harvest.cmake)
|
||||||
include(cmake/cve_check.cmake)
|
|
||||||
|
@@ -29,7 +29,7 @@ set(BLOSC_EXTRA_ARGS
|
|||||||
-DCMAKE_POSITION_INDEPENDENT_CODE=ON
|
-DCMAKE_POSITION_INDEPENDENT_CODE=ON
|
||||||
)
|
)
|
||||||
|
|
||||||
# Prevent blosc from including it's own local copy of zlib in the object file
|
# Prevent blosc from including its own local copy of zlib in the object file
|
||||||
# and cause linker errors with everybody else.
|
# and cause linker errors with everybody else.
|
||||||
set(BLOSC_EXTRA_ARGS ${BLOSC_EXTRA_ARGS}
|
set(BLOSC_EXTRA_ARGS ${BLOSC_EXTRA_ARGS}
|
||||||
-DPREFER_EXTERNAL_ZLIB=ON
|
-DPREFER_EXTERNAL_ZLIB=ON
|
||||||
|
@@ -18,6 +18,12 @@
|
|||||||
|
|
||||||
set(BOOST_ADDRESS_MODEL 64)
|
set(BOOST_ADDRESS_MODEL 64)
|
||||||
|
|
||||||
|
if(BLENDER_PLATFORM_ARM)
|
||||||
|
set(BOOST_ARCHITECTURE arm)
|
||||||
|
else()
|
||||||
|
set(BOOST_ARCHITECTURE x86)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
set(BOOST_TOOLSET toolset=msvc-14.1)
|
set(BOOST_TOOLSET toolset=msvc-14.1)
|
||||||
set(BOOST_COMPILER_STRING -vc141)
|
set(BOOST_COMPILER_STRING -vc141)
|
||||||
@@ -29,7 +35,6 @@ if(WIN32)
|
|||||||
if(BUILD_MODE STREQUAL Release)
|
if(BUILD_MODE STREQUAL Release)
|
||||||
set(BOOST_HARVEST_CMD ${BOOST_HARVEST_CMD} && ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/boost/include/boost-${BOOST_VERSION_NODOTS_SHORT}/ ${HARVEST_TARGET}/boost/include/)
|
set(BOOST_HARVEST_CMD ${BOOST_HARVEST_CMD} && ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/boost/include/boost-${BOOST_VERSION_NODOTS_SHORT}/ ${HARVEST_TARGET}/boost/include/)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
elseif(APPLE)
|
elseif(APPLE)
|
||||||
set(BOOST_CONFIGURE_COMMAND ./bootstrap.sh)
|
set(BOOST_CONFIGURE_COMMAND ./bootstrap.sh)
|
||||||
set(BOOST_BUILD_COMMAND ./b2)
|
set(BOOST_BUILD_COMMAND ./b2)
|
||||||
@@ -93,7 +98,7 @@ ExternalProject_Add(external_boost
|
|||||||
UPDATE_COMMAND ""
|
UPDATE_COMMAND ""
|
||||||
PATCH_COMMAND ${BOOST_PATCH_COMMAND}
|
PATCH_COMMAND ${BOOST_PATCH_COMMAND}
|
||||||
CONFIGURE_COMMAND ${BOOST_CONFIGURE_COMMAND}
|
CONFIGURE_COMMAND ${BOOST_CONFIGURE_COMMAND}
|
||||||
BUILD_COMMAND ${BOOST_BUILD_COMMAND} ${BOOST_BUILD_OPTIONS} -j${MAKE_THREADS} architecture=x86 address-model=${BOOST_ADDRESS_MODEL} link=static threading=multi ${BOOST_OPTIONS} --prefix=${LIBDIR}/boost install
|
BUILD_COMMAND ${BOOST_BUILD_COMMAND} ${BOOST_BUILD_OPTIONS} -j${MAKE_THREADS} architecture=${BOOST_ARCHITECTURE} address-model=${BOOST_ADDRESS_MODEL} link=static threading=multi ${BOOST_OPTIONS} --prefix=${LIBDIR}/boost install
|
||||||
BUILD_IN_SOURCE 1
|
BUILD_IN_SOURCE 1
|
||||||
INSTALL_COMMAND "${BOOST_HARVEST_CMD}"
|
INSTALL_COMMAND "${BOOST_HARVEST_CMD}"
|
||||||
)
|
)
|
||||||
|
@@ -1,75 +0,0 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
||||||
|
|
||||||
# CVE Check requirements
|
|
||||||
#
|
|
||||||
# - A working installation of intels cve-bin-tool [1] has to be available in
|
|
||||||
# your path
|
|
||||||
#
|
|
||||||
# - Not strictly required, but highly recommended is obtaining a NVD key from
|
|
||||||
# nist since it significantly speeds up downloading/updating the required
|
|
||||||
# databases one can request a key on the following website:
|
|
||||||
# https://nvd.nist.gov/developers/request-an-api-key
|
|
||||||
|
|
||||||
# Bill of Materials construction
|
|
||||||
#
|
|
||||||
# This constructs a CSV cve-bin-tool [1] can read and process. Sadly
|
|
||||||
# cve-bin-tool at this point does not take a list of CPE's and output a check
|
|
||||||
# based on that list. so we need to pick apart the CPE retrieve the vendor,
|
|
||||||
# product and version tokens and generate a CSV.
|
|
||||||
#
|
|
||||||
# [1] https://github.com/intel/cve-bin-tool
|
|
||||||
|
|
||||||
# Because not all deps are downloaded (ie python packages) but can still have a
|
|
||||||
# xxx_CPE declared loop over all variables and look for variables ending in CPE.
|
|
||||||
|
|
||||||
set(SBOMCONTENTS)
|
|
||||||
get_cmake_property(_variableNames VARIABLES)
|
|
||||||
foreach (_variableName ${_variableNames})
|
|
||||||
if(_variableName MATCHES "CPE$")
|
|
||||||
string(REPLACE ":" ";" CPE_LIST ${${_variableName}})
|
|
||||||
string(REPLACE "_CPE" "_ID" CPE_DEPNAME ${_variableName})
|
|
||||||
list(GET CPE_LIST 3 CPE_VENDOR)
|
|
||||||
list(GET CPE_LIST 4 CPE_NAME)
|
|
||||||
list(GET CPE_LIST 5 CPE_VERSION)
|
|
||||||
set(${CPE_DEPNAME} "${CPE_VENDOR},${CPE_NAME},${CPE_VERSION}")
|
|
||||||
set(SBOMCONTENTS "${SBOMCONTENTS}${CPE_VENDOR},${CPE_NAME},${CPE_VERSION},,,\n")
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
configure_file(${CMAKE_SOURCE_DIR}/cmake/cve_check.csv.in ${CMAKE_CURRENT_BINARY_DIR}/cve_check.csv @ONLY)
|
|
||||||
|
|
||||||
# Custom Targets
|
|
||||||
#
|
|
||||||
# This defines two new custom targets one could run in the build folder
|
|
||||||
# `cve_check` which will output the report to the console, and `cve_check_html`
|
|
||||||
# which will write out blender_dependencies.html in the build folder that one
|
|
||||||
# could share with other people or be used to get more information on the
|
|
||||||
# reported CVE's.
|
|
||||||
#
|
|
||||||
# cve-bin-tool takes data from the nist nvd database which rate limits
|
|
||||||
# unauthenticated requests to 1 requests per 6 seconds making the database
|
|
||||||
# download take "quite a bit" of time.
|
|
||||||
#
|
|
||||||
# When adding -DCVE_CHECK_NVD_KEY=your_api_key_here to your cmake invocation
|
|
||||||
# this key will be passed on to cve-bin-tool speeding up the process.
|
|
||||||
#
|
|
||||||
if(DEFINED CVE_CHECK_NVD_KEY)
|
|
||||||
set(NVD_ARGS --nvd-api-key ${CVE_CHECK_NVD_KEY})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# This will just report to the console
|
|
||||||
add_custom_target(cve_check
|
|
||||||
COMMAND cve-bin-tool
|
|
||||||
${NVD_ARGS}
|
|
||||||
-i ${CMAKE_CURRENT_BINARY_DIR}/cve_check.csv
|
|
||||||
--affected-versions
|
|
||||||
SOURCES ${CMAKE_CURRENT_BINARY_DIR}/cve_check.csv
|
|
||||||
)
|
|
||||||
|
|
||||||
# This will write out blender_dependencies.html
|
|
||||||
add_custom_target(cve_check_html
|
|
||||||
COMMAND cve-bin-tool
|
|
||||||
${NVD_ARGS}
|
|
||||||
-i ${CMAKE_CURRENT_BINARY_DIR}/cve_check.csv
|
|
||||||
-f html
|
|
||||||
SOURCES ${CMAKE_CURRENT_BINARY_DIR}/cve_check.csv
|
|
||||||
)
|
|
@@ -1,29 +0,0 @@
|
|||||||
vendor,product,version,cve_number,remarks,comment
|
|
||||||
@OPENJPEG_ID@,CVE-2016-9675,Ignored,issue in convert command line tool not used by blender
|
|
||||||
@PYTHON_ID@,CVE-2009-2940,Ignored,issue in pygresql not used by blender
|
|
||||||
@PYTHON_ID@,CVE-2020-29396,Ignored,issue in odoo not used by blender
|
|
||||||
@PYTHON_ID@,CVE-2021-32052,Ignored,issue in django not used by blender
|
|
||||||
@PYTHON_ID@,CVE-2009-3720,Ignored,already fixed in libexpat version used
|
|
||||||
@SSL_ID@,CVE-2009-1390,Ignored,issue in mutt not used by blender
|
|
||||||
@SSL_ID@,CVE-2009-3765,Ignored,issue in mutt not used by blender
|
|
||||||
@SSL_ID@,CVE-2009-3766,Ignored,issue in mutt not used by blender
|
|
||||||
@SSL_ID@,CVE-2009-3767,Ignored,issue in ldap not used by blender
|
|
||||||
@SSL_ID@,CVE-2019-0190,Ignored,issue in apache not used by blender
|
|
||||||
@TIFF_ID@,CVE-2022-2056,Ignored,issue in tiff command line tool not used by blender
|
|
||||||
@TIFF_ID@,CVE-2022-2057,Ignored,issue in tiff command line tool not used by blender
|
|
||||||
@TIFF_ID@,CVE-2022-2058,Ignored,issue in tiff command line tool not used by blender
|
|
||||||
@TIFF_ID@,CVE-2022-2519,Ignored,issue in tiff command line tool not used by blender
|
|
||||||
@TIFF_ID@,CVE-2022-2520,Ignored,issue in tiff command line tool not used by blender
|
|
||||||
@TIFF_ID@,CVE-2022-2521,Ignored,issue in tiff command line tool not used by blender
|
|
||||||
@TIFF_ID@,CVE-2022-2953,Ignored,issue in tiff command line tool not used by blender
|
|
||||||
@TIFF_ID@,CVE-2022-34526,Ignored,issue in tiff command line tool not used by blender
|
|
||||||
@TIFF_ID@,CVE-2022-3570,Ignored,issue in tiff command line tool not used by blender
|
|
||||||
@TIFF_ID@,CVE-2022-3597,Ignored,issue in tiff command line tool not used by blender
|
|
||||||
@TIFF_ID@,CVE-2022-3598,Ignored,issue in tiff command line tool not used by blender
|
|
||||||
@TIFF_ID@,CVE-2022-3599,Ignored,issue in tiff command line tool not used by blender
|
|
||||||
@TIFF_ID@,CVE-2022-3626,Ignored,issue in tiff command line tool not used by blender
|
|
||||||
@TIFF_ID@,CVE-2022-3627,Ignored,issue in tiff command line tool not used by blender
|
|
||||||
@XML2_ID@,CVE-2016-3709,Ignored,not affecting blender and not considered a security issue upstream
|
|
||||||
@GMP_ID@,CVE-2021-43618,Mitigated,patched using upstream commit 561a9c25298e
|
|
||||||
@SQLITE_ID@,CVE-2022-35737,Ignored,only affects SQLITE_ENABLE_STAT4 compile option not used by blender or python
|
|
||||||
@SBOMCONTENTS@
|
|
@@ -7,20 +7,6 @@ function(download_source dep)
|
|||||||
else()
|
else()
|
||||||
set(TARGET_URI https://svn.blender.org/svnroot/bf-blender/trunk/lib/packages/${TARGET_FILE})
|
set(TARGET_URI https://svn.blender.org/svnroot/bf-blender/trunk/lib/packages/${TARGET_FILE})
|
||||||
endif()
|
endif()
|
||||||
# Validate all required variables are set and give an explicit error message
|
|
||||||
# rather than CMake erroring out later on with a more ambigious error.
|
|
||||||
if (NOT DEFINED TARGET_FILE)
|
|
||||||
message(FATAL_ERROR "${dep}_FILE variable not set")
|
|
||||||
endif()
|
|
||||||
if (NOT DEFINED TARGET_HASH)
|
|
||||||
message(FATAL_ERROR "${dep}_HASH variable not set")
|
|
||||||
endif()
|
|
||||||
if (NOT DEFINED TARGET_HASH_TYPE)
|
|
||||||
message(FATAL_ERROR "${dep}_HASH_TYPE variable not set")
|
|
||||||
endif()
|
|
||||||
if (NOT DEFINED TARGET_URI)
|
|
||||||
message(FATAL_ERROR "${dep}_URI variable not set")
|
|
||||||
endif()
|
|
||||||
set(TARGET_FILE ${PACKAGE_DIR}/${TARGET_FILE})
|
set(TARGET_FILE ${PACKAGE_DIR}/${TARGET_FILE})
|
||||||
message("Checking source : ${dep} (${TARGET_FILE})")
|
message("Checking source : ${dep} (${TARGET_FILE})")
|
||||||
if(NOT EXISTS ${TARGET_FILE})
|
if(NOT EXISTS ${TARGET_FILE})
|
||||||
@@ -32,36 +18,6 @@ function(download_source dep)
|
|||||||
SHOW_PROGRESS
|
SHOW_PROGRESS
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
if(EXISTS ${TARGET_FILE})
|
|
||||||
# Sometimes the download fails, but that is not a
|
|
||||||
# fail condition for "file(DOWNLOAD" it will warn about
|
|
||||||
# a crc mismatch and just carry on, we need to explicitly
|
|
||||||
# catch this and remove the bogus 0 byte file so we can
|
|
||||||
# retry without having to go find the file and manually
|
|
||||||
# delete it.
|
|
||||||
file (SIZE ${TARGET_FILE} TARGET_SIZE)
|
|
||||||
if(${TARGET_SIZE} EQUAL 0)
|
|
||||||
file(REMOVE ${TARGET_FILE})
|
|
||||||
message(FATAL_ERROR "for ${TARGET_FILE} file size 0, download likely failed, deleted...")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# If we are using sources from the blender repo also
|
|
||||||
# validate that the hashes match, this takes a
|
|
||||||
# little more time, but protects us when we are
|
|
||||||
# building a release package and one of the packages
|
|
||||||
# is missing or incorrect.
|
|
||||||
#
|
|
||||||
# For regular platform maintenaince this is not needed
|
|
||||||
# since the actual build of the dep will notify the
|
|
||||||
# platform maintainer if there is a problem with the
|
|
||||||
# source package and refuse to build.
|
|
||||||
if(NOT PACKAGE_USE_UPSTREAM_SOURCES OR FORCE_CHECK_HASH)
|
|
||||||
file(${TARGET_HASH_TYPE} ${TARGET_FILE} LOCAL_HASH)
|
|
||||||
if(NOT ${TARGET_HASH} STREQUAL ${LOCAL_HASH})
|
|
||||||
message(FATAL_ERROR "${TARGET_FILE} ${TARGET_HASH_TYPE} mismatch\nExpected\t: ${TARGET_HASH}\nActual\t: ${LOCAL_HASH}")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endfunction(download_source)
|
endfunction(download_source)
|
||||||
|
|
||||||
download_source(ZLIB)
|
download_source(ZLIB)
|
||||||
@@ -92,6 +48,7 @@ download_source(OSL)
|
|||||||
download_source(PYTHON)
|
download_source(PYTHON)
|
||||||
download_source(TBB)
|
download_source(TBB)
|
||||||
download_source(OPENVDB)
|
download_source(OPENVDB)
|
||||||
|
download_source(NANOVDB)
|
||||||
download_source(NUMPY)
|
download_source(NUMPY)
|
||||||
download_source(LAME)
|
download_source(LAME)
|
||||||
download_source(OGG)
|
download_source(OGG)
|
||||||
@@ -113,6 +70,7 @@ endif()
|
|||||||
download_source(SPNAV)
|
download_source(SPNAV)
|
||||||
download_source(JEMALLOC)
|
download_source(JEMALLOC)
|
||||||
download_source(XML2)
|
download_source(XML2)
|
||||||
|
download_source(TINYXML)
|
||||||
download_source(YAMLCPP)
|
download_source(YAMLCPP)
|
||||||
download_source(EXPAT)
|
download_source(EXPAT)
|
||||||
download_source(PUGIXML)
|
download_source(PUGIXML)
|
||||||
@@ -129,7 +87,9 @@ download_source(LIBGLU)
|
|||||||
download_source(MESA)
|
download_source(MESA)
|
||||||
download_source(NASM)
|
download_source(NASM)
|
||||||
download_source(XR_OPENXR_SDK)
|
download_source(XR_OPENXR_SDK)
|
||||||
|
download_source(WL_PROTOCOLS)
|
||||||
download_source(ISPC)
|
download_source(ISPC)
|
||||||
download_source(GMP)
|
download_source(GMP)
|
||||||
download_source(POTRACE)
|
download_source(POTRACE)
|
||||||
download_source(HARU)
|
download_source(HARU)
|
||||||
|
download_source(ZSTD)
|
||||||
|
@@ -43,11 +43,17 @@ endif()
|
|||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
set(EMBREE_BUILD_DIR ${BUILD_MODE}/)
|
set(EMBREE_BUILD_DIR ${BUILD_MODE}/)
|
||||||
|
if(BUILD_MODE STREQUAL Debug)
|
||||||
|
list(APPEND EMBREE_EXTRA_ARGS
|
||||||
|
-DEMBREE_TBBMALLOC_LIBRARY_NAME=tbbmalloc_debug
|
||||||
|
-DEMBREE_TBB_LIBRARY_NAME=tbb_debug
|
||||||
|
)
|
||||||
|
endif()
|
||||||
else()
|
else()
|
||||||
set(EMBREE_BUILD_DIR)
|
set(EMBREE_BUILD_DIR)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(APPLE AND ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64"))
|
if(BLENDER_PLATFORM_ARM)
|
||||||
ExternalProject_Add(external_embree
|
ExternalProject_Add(external_embree
|
||||||
GIT_REPOSITORY ${EMBREE_ARM_GIT}
|
GIT_REPOSITORY ${EMBREE_ARM_GIT}
|
||||||
GIT_TAG "blender-arm"
|
GIT_TAG "blender-arm"
|
||||||
|
@@ -31,6 +31,12 @@ if(WIN32)
|
|||||||
--disable-pthreads
|
--disable-pthreads
|
||||||
--enable-libopenjpeg
|
--enable-libopenjpeg
|
||||||
)
|
)
|
||||||
|
if("${CMAKE_SIZEOF_VOID_P}" EQUAL "4")
|
||||||
|
set(FFMPEG_EXTRA_FLAGS
|
||||||
|
${FFMPEG_EXTRA_FLAGS}
|
||||||
|
--x86asmexe=yasm
|
||||||
|
)
|
||||||
|
endif()
|
||||||
else()
|
else()
|
||||||
set(FFMPEG_EXTRA_FLAGS
|
set(FFMPEG_EXTRA_FLAGS
|
||||||
${FFMPEG_EXTRA_FLAGS}
|
${FFMPEG_EXTRA_FLAGS}
|
||||||
|
@@ -19,14 +19,13 @@
|
|||||||
set(FREETYPE_EXTRA_ARGS
|
set(FREETYPE_EXTRA_ARGS
|
||||||
-DCMAKE_RELEASE_POSTFIX:STRING=2ST
|
-DCMAKE_RELEASE_POSTFIX:STRING=2ST
|
||||||
-DCMAKE_DEBUG_POSTFIX:STRING=2ST_d
|
-DCMAKE_DEBUG_POSTFIX:STRING=2ST_d
|
||||||
-DFT_DISABLE_BZIP2=ON
|
-DWITH_BZip2=OFF
|
||||||
-DFT_DISABLE_HARFBUZZ=ON
|
-DWITH_HarfBuzz=OFF
|
||||||
-DFT_DISABLE_PNG=ON
|
-DFT_WITH_HARFBUZZ=OFF
|
||||||
-DFT_REQUIRE_BROTLI=OFF
|
-DFT_WITH_BZIP2=OFF
|
||||||
-DFT_REQUIRE_ZLIB=ON
|
-DCMAKE_DISABLE_FIND_PACKAGE_HarfBuzz=TRUE
|
||||||
-DZLIB_LIBRARY=${LIBDIR}/zlib/lib/${ZLIB_LIBRARY}
|
-DCMAKE_DISABLE_FIND_PACKAGE_BZip2=TRUE
|
||||||
-DZLIB_INCLUDE_DIR=${LIBDIR}/zlib/include
|
-DCMAKE_DISABLE_FIND_PACKAGE_BrotliDec=TRUE)
|
||||||
)
|
|
||||||
|
|
||||||
ExternalProject_Add(external_freetype
|
ExternalProject_Add(external_freetype
|
||||||
URL file://${PACKAGE_DIR}/${FREETYPE_FILE}
|
URL file://${PACKAGE_DIR}/${FREETYPE_FILE}
|
||||||
@@ -37,11 +36,6 @@ ExternalProject_Add(external_freetype
|
|||||||
INSTALL_DIR ${LIBDIR}/freetype
|
INSTALL_DIR ${LIBDIR}/freetype
|
||||||
)
|
)
|
||||||
|
|
||||||
add_dependencies(
|
|
||||||
external_freetype
|
|
||||||
external_zlib
|
|
||||||
)
|
|
||||||
|
|
||||||
if(BUILD_MODE STREQUAL Release AND WIN32)
|
if(BUILD_MODE STREQUAL Release AND WIN32)
|
||||||
ExternalProject_Add_Step(external_freetype after_install
|
ExternalProject_Add_Step(external_freetype after_install
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/freetype ${HARVEST_TARGET}/freetype
|
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/freetype ${HARVEST_TARGET}/freetype
|
||||||
|
@@ -25,19 +25,12 @@ else()
|
|||||||
set(GMP_OPTIONS --enable-static --disable-shared )
|
set(GMP_OPTIONS --enable-static --disable-shared )
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(APPLE)
|
if(APPLE AND NOT BLENDER_PLATFORM_ARM)
|
||||||
if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64")
|
|
||||||
set(GMP_OPTIONS
|
|
||||||
${GMP_OPTIONS}
|
|
||||||
--disable-assembly
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
set(GMP_OPTIONS
|
set(GMP_OPTIONS
|
||||||
${GMP_OPTIONS}
|
${GMP_OPTIONS}
|
||||||
--with-pic
|
--with-pic
|
||||||
)
|
)
|
||||||
endif()
|
elseif(UNIX AND NOT APPLE)
|
||||||
elseif(UNIX)
|
|
||||||
set(GMP_OPTIONS
|
set(GMP_OPTIONS
|
||||||
${GMP_OPTIONS}
|
${GMP_OPTIONS}
|
||||||
--with-pic
|
--with-pic
|
||||||
@@ -45,12 +38,18 @@ elseif(UNIX)
|
|||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(BLENDER_PLATFORM_ARM)
|
||||||
|
set(GMP_OPTIONS
|
||||||
|
${GMP_OPTIONS}
|
||||||
|
--disable-assembly
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
ExternalProject_Add(external_gmp
|
ExternalProject_Add(external_gmp
|
||||||
URL file://${PACKAGE_DIR}/${GMP_FILE}
|
URL file://${PACKAGE_DIR}/${GMP_FILE}
|
||||||
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
||||||
URL_HASH ${GMP_HASH_TYPE}=${GMP_HASH}
|
URL_HASH ${GMP_HASH_TYPE}=${GMP_HASH}
|
||||||
PREFIX ${BUILD_DIR}/gmp
|
PREFIX ${BUILD_DIR}/gmp
|
||||||
PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/gmp/src/external_gmp < ${PATCH_DIR}/gmp.diff
|
|
||||||
CONFIGURE_COMMAND ${CONFIGURE_ENV_NO_PERL} && cd ${BUILD_DIR}/gmp/src/external_gmp/ && ${CONFIGURE_COMMAND} --prefix=${LIBDIR}/gmp ${GMP_OPTIONS} ${GMP_EXTRA_ARGS}
|
CONFIGURE_COMMAND ${CONFIGURE_ENV_NO_PERL} && cd ${BUILD_DIR}/gmp/src/external_gmp/ && ${CONFIGURE_COMMAND} --prefix=${LIBDIR}/gmp ${GMP_OPTIONS} ${GMP_EXTRA_ARGS}
|
||||||
BUILD_COMMAND ${CONFIGURE_ENV_NO_PERL} && cd ${BUILD_DIR}/gmp/src/external_gmp/ && make -j${MAKE_THREADS}
|
BUILD_COMMAND ${CONFIGURE_ENV_NO_PERL} && cd ${BUILD_DIR}/gmp/src/external_gmp/ && make -j${MAKE_THREADS}
|
||||||
INSTALL_COMMAND ${CONFIGURE_ENV_NO_PERL} && cd ${BUILD_DIR}/gmp/src/external_gmp/ && make install
|
INSTALL_COMMAND ${CONFIGURE_ENV_NO_PERL} && cd ${BUILD_DIR}/gmp/src/external_gmp/ && make install
|
||||||
|
@@ -26,6 +26,7 @@ endif()
|
|||||||
message("HARVEST_TARGET = ${HARVEST_TARGET}")
|
message("HARVEST_TARGET = ${HARVEST_TARGET}")
|
||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
|
|
||||||
if(BUILD_MODE STREQUAL Release)
|
if(BUILD_MODE STREQUAL Release)
|
||||||
add_custom_target(Harvest_Release_Results
|
add_custom_target(Harvest_Release_Results
|
||||||
COMMAND # jpeg rename libfile + copy include
|
COMMAND # jpeg rename libfile + copy include
|
||||||
@@ -47,7 +48,7 @@ if(WIN32)
|
|||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
else()
|
else(WIN32)
|
||||||
|
|
||||||
function(harvest from to)
|
function(harvest from to)
|
||||||
set(pattern "")
|
set(pattern "")
|
||||||
@@ -108,9 +109,9 @@ else()
|
|||||||
if(APPLE)
|
if(APPLE)
|
||||||
harvest(openmp/lib openmp/lib "*")
|
harvest(openmp/lib openmp/lib "*")
|
||||||
harvest(openmp/include openmp/include "*.h")
|
harvest(openmp/include openmp/include "*.h")
|
||||||
if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64")
|
|
||||||
harvest(sse2neon sse2neon "*.h")
|
|
||||||
endif()
|
endif()
|
||||||
|
if(BLENDER_PLATFORM_ARM)
|
||||||
|
harvest(sse2neon sse2neon "*.h")
|
||||||
endif()
|
endif()
|
||||||
harvest(ogg/lib ffmpeg/lib "*.a")
|
harvest(ogg/lib ffmpeg/lib "*.a")
|
||||||
harvest(openal/include openal/include "*.h")
|
harvest(openal/include openal/include "*.h")
|
||||||
@@ -125,6 +126,8 @@ else()
|
|||||||
|
|
||||||
harvest(xml2/include xml2/include "*.h")
|
harvest(xml2/include xml2/include "*.h")
|
||||||
harvest(xml2/lib xml2/lib "*.a")
|
harvest(xml2/lib xml2/lib "*.a")
|
||||||
|
|
||||||
|
harvest(wayland-protocols/share/wayland-protocols wayland-protocols/share/wayland-protocols/ "*.xml")
|
||||||
else()
|
else()
|
||||||
harvest(blosc/lib openvdb/lib "*.a")
|
harvest(blosc/lib openvdb/lib "*.a")
|
||||||
harvest(xml2/lib opencollada/lib "*.a")
|
harvest(xml2/lib opencollada/lib "*.a")
|
||||||
@@ -189,9 +192,12 @@ else()
|
|||||||
harvest(potrace/lib potrace/lib "*.a")
|
harvest(potrace/lib potrace/lib "*.a")
|
||||||
harvest(haru/include haru/include "*.h")
|
harvest(haru/include haru/include "*.h")
|
||||||
harvest(haru/lib haru/lib "*.a")
|
harvest(haru/lib haru/lib "*.a")
|
||||||
|
harvest(zstd/include zstd/include "*.h")
|
||||||
|
harvest(zstd/lib zstd/lib "*.a")
|
||||||
|
|
||||||
if(UNIX AND NOT APPLE)
|
if(UNIX AND NOT APPLE)
|
||||||
harvest(libglu/lib mesa/lib "*.so*")
|
harvest(libglu/lib mesa/lib "*.so*")
|
||||||
harvest(mesa/lib64 mesa/lib "*.so*")
|
harvest(mesa/lib64 mesa/lib "*.so*")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
@@ -41,7 +41,7 @@ if(WIN32)
|
|||||||
else()
|
else()
|
||||||
set(JPEG_LIBRARY jpeg-staticd${LIBEXT})
|
set(JPEG_LIBRARY jpeg-staticd${LIBEXT})
|
||||||
endif()
|
endif()
|
||||||
else()
|
else(WIN32)
|
||||||
# cmake for unix
|
# cmake for unix
|
||||||
set(JPEG_EXTRA_ARGS
|
set(JPEG_EXTRA_ARGS
|
||||||
-DWITH_JPEG8=ON
|
-DWITH_JPEG8=ON
|
||||||
|
@@ -16,7 +16,7 @@
|
|||||||
#
|
#
|
||||||
# ***** END GPL LICENSE BLOCK *****
|
# ***** END GPL LICENSE BLOCK *****
|
||||||
|
|
||||||
if(APPLE AND "${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64")
|
if(BLENDER_PLATFORM_ARM)
|
||||||
set(LLVM_TARGETS AArch64$<SEMICOLON>ARM)
|
set(LLVM_TARGETS AArch64$<SEMICOLON>ARM)
|
||||||
else()
|
else()
|
||||||
set(LLVM_TARGETS X86)
|
set(LLVM_TARGETS X86)
|
||||||
@@ -25,7 +25,6 @@ endif()
|
|||||||
if(APPLE)
|
if(APPLE)
|
||||||
set(LLVM_XML2_ARGS
|
set(LLVM_XML2_ARGS
|
||||||
-DLIBXML2_LIBRARY=${LIBDIR}/xml2/lib/libxml2.a
|
-DLIBXML2_LIBRARY=${LIBDIR}/xml2/lib/libxml2.a
|
||||||
-DLIBXML2_INCLUDE_DIR=${LIBDIR}/xml2/include/libxml2
|
|
||||||
)
|
)
|
||||||
set(LLVM_BUILD_CLANG_TOOLS_EXTRA ^^clang-tools-extra)
|
set(LLVM_BUILD_CLANG_TOOLS_EXTRA ^^clang-tools-extra)
|
||||||
set(BUILD_CLANG_TOOLS ON)
|
set(BUILD_CLANG_TOOLS ON)
|
||||||
|
@@ -20,29 +20,6 @@ if(UNIX)
|
|||||||
set(OPENCOLLADA_EXTRA_ARGS
|
set(OPENCOLLADA_EXTRA_ARGS
|
||||||
-DLIBXML2_INCLUDE_DIR=${LIBDIR}/xml2/include/libxml2
|
-DLIBXML2_INCLUDE_DIR=${LIBDIR}/xml2/include/libxml2
|
||||||
-DLIBXML2_LIBRARIES=${LIBDIR}/xml2/lib/libxml2.a)
|
-DLIBXML2_LIBRARIES=${LIBDIR}/xml2/lib/libxml2.a)
|
||||||
|
|
||||||
# WARNING: the patch contains mixed UNIX and DOS line endings
|
|
||||||
# as does the OPENCOLLADA package, if this can be corrected upstream that would be better.
|
|
||||||
# For now use `sed` to force UNIX line endings so the patch applies.
|
|
||||||
# Needed as neither ignoring white-space or applying as a binary resolve this problem.
|
|
||||||
set(PATCH_MAYBE_DOS2UNIX_CMD
|
|
||||||
sed -i "s/\\r//"
|
|
||||||
${PATCH_DIR}/opencollada.diff
|
|
||||||
${BUILD_DIR}/opencollada/src/external_opencollada/CMakeLists.txt
|
|
||||||
${BUILD_DIR}/opencollada/src/external_opencollada/Externals/LibXML/CMakeLists.txt &&
|
|
||||||
)
|
|
||||||
|
|
||||||
else()
|
|
||||||
set(OPENCOLLADA_EXTRA_ARGS
|
|
||||||
-DCMAKE_DEBUG_POSTFIX=_d
|
|
||||||
-DLIBXML2_INCLUDE_DIR=${LIBDIR}/xml2/include/libxml2
|
|
||||||
)
|
|
||||||
if(BUILD_MODE STREQUAL Release)
|
|
||||||
list(APPEND OPENCOLLADA_EXTRA_ARGS -DLIBXML2_LIBRARIES=${LIBDIR}/xml2/lib/libxml2s.lib)
|
|
||||||
else()
|
|
||||||
list(APPEND OPENCOLLADA_EXTRA_ARGS -DLIBXML2_LIBRARIES=${LIBDIR}/xml2/lib/libxml2sd.lib)
|
|
||||||
endif()
|
|
||||||
set(PATCH_MAYBE_DOS2UNIX_CMD)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
ExternalProject_Add(external_opencollada
|
ExternalProject_Add(external_opencollada
|
||||||
@@ -50,19 +27,17 @@ ExternalProject_Add(external_opencollada
|
|||||||
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
||||||
URL_HASH ${OPENCOLLADA_HASH_TYPE}=${OPENCOLLADA_HASH}
|
URL_HASH ${OPENCOLLADA_HASH_TYPE}=${OPENCOLLADA_HASH}
|
||||||
PREFIX ${BUILD_DIR}/opencollada
|
PREFIX ${BUILD_DIR}/opencollada
|
||||||
PATCH_COMMAND
|
PATCH_COMMAND ${PATCH_CMD} -p 1 -N -d ${BUILD_DIR}/opencollada/src/external_opencollada < ${PATCH_DIR}/opencollada.diff
|
||||||
${PATCH_MAYBE_DOS2UNIX_CMD}
|
|
||||||
${PATCH_CMD} -p 1 -N -d ${BUILD_DIR}/opencollada/src/external_opencollada < ${PATCH_DIR}/opencollada.diff
|
|
||||||
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/opencollada ${DEFAULT_CMAKE_FLAGS} ${OPENCOLLADA_EXTRA_ARGS}
|
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/opencollada ${DEFAULT_CMAKE_FLAGS} ${OPENCOLLADA_EXTRA_ARGS}
|
||||||
INSTALL_DIR ${LIBDIR}/opencollada
|
INSTALL_DIR ${LIBDIR}/opencollada
|
||||||
)
|
)
|
||||||
|
|
||||||
unset(PATCH_MAYBE_DOS2UNIX_CMD)
|
if(UNIX)
|
||||||
|
|
||||||
add_dependencies(
|
add_dependencies(
|
||||||
external_opencollada
|
external_opencollada
|
||||||
external_xml2
|
external_xml2
|
||||||
)
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
if(BUILD_MODE STREQUAL Release)
|
if(BUILD_MODE STREQUAL Release)
|
||||||
@@ -73,7 +48,17 @@ if(WIN32)
|
|||||||
endif()
|
endif()
|
||||||
if(BUILD_MODE STREQUAL Debug)
|
if(BUILD_MODE STREQUAL Debug)
|
||||||
ExternalProject_Add_Step(external_opencollada after_install
|
ExternalProject_Add_Step(external_opencollada after_install
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/opencollada/lib ${HARVEST_TARGET}/opencollada/lib
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/opencollada/lib/opencollada/buffer.lib ${HARVEST_TARGET}/opencollada/lib/opencollada/buffer_d.lib
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/opencollada/lib/opencollada/ftoa.lib ${HARVEST_TARGET}/opencollada/lib/opencollada/ftoa_d.lib
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/opencollada/lib/opencollada/GeneratedSaxParser.lib ${HARVEST_TARGET}/opencollada/lib/opencollada/GeneratedSaxParser_d.lib
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/opencollada/lib/opencollada/MathMLSolver.lib ${HARVEST_TARGET}/opencollada/lib/opencollada/MathMLSolver_d.lib
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/opencollada/lib/opencollada/OpenCOLLADABaseUtils.lib ${HARVEST_TARGET}/opencollada/lib/opencollada/OpenCOLLADABaseUtils_d.lib
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/opencollada/lib/opencollada/OpenCOLLADAFramework.lib ${HARVEST_TARGET}/opencollada/lib/opencollada/OpenCOLLADAFramework_d.lib
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/opencollada/lib/opencollada/OpenCOLLADASaxFrameworkLoader.lib ${HARVEST_TARGET}/opencollada/lib/opencollada/OpenCOLLADASaxFrameworkLoader_d.lib
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/opencollada/lib/opencollada/OpenCOLLADAStreamWriter.lib ${HARVEST_TARGET}/opencollada/lib/opencollada/OpenCOLLADAStreamWriter_d.lib
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/opencollada/lib/opencollada/pcre.lib ${HARVEST_TARGET}/opencollada/lib/opencollada/pcre_d.lib
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/opencollada/lib/opencollada/UTF.lib ${HARVEST_TARGET}/opencollada/lib/opencollada/UTF_d.lib
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/opencollada/lib/opencollada/xml.lib ${HARVEST_TARGET}/opencollada/lib/opencollada/xml_d.lib
|
||||||
DEPENDEES install
|
DEPENDEES install
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
@@ -36,7 +36,7 @@ set(OPENCOLORIO_EXTRA_ARGS
|
|||||||
-Dyaml-cpp_ROOT=${LIBDIR}/yamlcpp
|
-Dyaml-cpp_ROOT=${LIBDIR}/yamlcpp
|
||||||
)
|
)
|
||||||
|
|
||||||
if(APPLE AND NOT("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "x86_64"))
|
if(BLENDER_PLATFORM_ARM)
|
||||||
set(OPENCOLORIO_EXTRA_ARGS
|
set(OPENCOLORIO_EXTRA_ARGS
|
||||||
${OPENCOLORIO_EXTRA_ARGS}
|
${OPENCOLORIO_EXTRA_ARGS}
|
||||||
-DOCIO_USE_SSE=OFF
|
-DOCIO_USE_SSE=OFF
|
||||||
|
@@ -32,7 +32,7 @@ message("BuildMode = ${BUILD_MODE}")
|
|||||||
|
|
||||||
if(BUILD_MODE STREQUAL "Debug")
|
if(BUILD_MODE STREQUAL "Debug")
|
||||||
set(LIBDIR ${CMAKE_CURRENT_BINARY_DIR}/Debug)
|
set(LIBDIR ${CMAKE_CURRENT_BINARY_DIR}/Debug)
|
||||||
else()
|
else(BUILD_MODE STREQUAL "Debug")
|
||||||
set(LIBDIR ${CMAKE_CURRENT_BINARY_DIR}/Release)
|
set(LIBDIR ${CMAKE_CURRENT_BINARY_DIR}/Release)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -116,16 +116,34 @@ else()
|
|||||||
set(LIBPREFIX "lib")
|
set(LIBPREFIX "lib")
|
||||||
|
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
# Use same Xcode detection as Blender itself.
|
# Let's get the current Xcode dir, to support xcode-select
|
||||||
include(../cmake/platform/platform_apple_xcode.cmake)
|
execute_process(
|
||||||
|
COMMAND xcode-select --print-path
|
||||||
|
OUTPUT_VARIABLE XCODE_DEV_PATH OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
)
|
||||||
|
execute_process(
|
||||||
|
COMMAND xcodebuild -version -sdk macosx SDKVersion
|
||||||
|
OUTPUT_VARIABLE MACOSX_SDK_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
|
||||||
|
if(NOT CMAKE_OSX_ARCHITECTURES)
|
||||||
|
execute_process(COMMAND uname -m OUTPUT_VARIABLE ARCHITECTURE OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
message(STATUS "Detected native architecture ${ARCHITECTURE}.")
|
||||||
|
set(CMAKE_OSX_ARCHITECTURES "${ARCHITECTURE}")
|
||||||
|
endif()
|
||||||
|
if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "x86_64")
|
||||||
|
set(OSX_DEPLOYMENT_TARGET 10.13)
|
||||||
|
else()
|
||||||
|
set(OSX_DEPLOYMENT_TARGET 11.00)
|
||||||
|
endif()
|
||||||
|
set(OSX_SYSROOT ${XCODE_DEV_PATH}/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk)
|
||||||
|
|
||||||
if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64")
|
if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64")
|
||||||
set(BLENDER_PLATFORM_ARM ON)
|
set(BLENDER_PLATFORM_ARM ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(PLATFORM_CFLAGS "-isysroot ${CMAKE_OSX_SYSROOT} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET} -arch ${CMAKE_OSX_ARCHITECTURES}")
|
set(PLATFORM_CFLAGS "-isysroot ${OSX_SYSROOT} -mmacosx-version-min=${OSX_DEPLOYMENT_TARGET} -arch ${CMAKE_OSX_ARCHITECTURES}")
|
||||||
set(PLATFORM_CXXFLAGS "-isysroot ${CMAKE_OSX_SYSROOT} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET} -std=c++11 -stdlib=libc++ -arch ${CMAKE_OSX_ARCHITECTURES}")
|
set(PLATFORM_CXXFLAGS "-isysroot ${OSX_SYSROOT} -mmacosx-version-min=${OSX_DEPLOYMENT_TARGET} -std=c++11 -stdlib=libc++ -arch ${CMAKE_OSX_ARCHITECTURES}")
|
||||||
set(PLATFORM_LDFLAGS "-isysroot ${CMAKE_OSX_SYSROOT} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET} -arch ${CMAKE_OSX_ARCHITECTURES}")
|
set(PLATFORM_LDFLAGS "-isysroot ${OSX_SYSROOT} -mmacosx-version-min=${OSX_DEPLOYMENT_TARGET} -arch ${CMAKE_OSX_ARCHITECTURES}")
|
||||||
if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "x86_64")
|
if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "x86_64")
|
||||||
set(PLATFORM_BUILD_TARGET --build=x86_64-apple-darwin17.0.0) # OS X 10.13
|
set(PLATFORM_BUILD_TARGET --build=x86_64-apple-darwin17.0.0) # OS X 10.13
|
||||||
else()
|
else()
|
||||||
@@ -133,10 +151,14 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
set(PLATFORM_CMAKE_FLAGS
|
set(PLATFORM_CMAKE_FLAGS
|
||||||
-DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES}
|
-DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES}
|
||||||
-DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=${CMAKE_OSX_DEPLOYMENT_TARGET}
|
-DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=${OSX_DEPLOYMENT_TARGET}
|
||||||
-DCMAKE_OSX_SYSROOT:PATH=${CMAKE_OSX_SYSROOT}
|
-DCMAKE_OSX_SYSROOT:PATH=${OSX_SYSROOT}
|
||||||
)
|
)
|
||||||
else()
|
else()
|
||||||
|
if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "aarch64")
|
||||||
|
set(BLENDER_PLATFORM_ARM ON)
|
||||||
|
endif()
|
||||||
|
|
||||||
set(PLATFORM_CFLAGS "-fPIC")
|
set(PLATFORM_CFLAGS "-fPIC")
|
||||||
set(PLATFORM_CXXFLAGS "-std=c++11 -fPIC")
|
set(PLATFORM_CXXFLAGS "-std=c++11 -fPIC")
|
||||||
set(PLATFORM_LDFLAGS)
|
set(PLATFORM_LDFLAGS)
|
||||||
@@ -164,8 +186,8 @@ else()
|
|||||||
set(BLENDER_CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DNDEBUG ${PLATFORM_CXXFLAGS}")
|
set(BLENDER_CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DNDEBUG ${PLATFORM_CXXFLAGS}")
|
||||||
|
|
||||||
set(CONFIGURE_ENV
|
set(CONFIGURE_ENV
|
||||||
export MACOSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET} &&
|
export MACOSX_DEPLOYMENT_TARGET=${OSX_DEPLOYMENT_TARGET} &&
|
||||||
export MACOSX_SDK_VERSION=${CMAKE_OSX_DEPLOYMENT_TARGET} &&
|
export MACOSX_SDK_VERSION=${OSX_DEPLOYMENT_TARGET} &&
|
||||||
export CFLAGS=${PLATFORM_CFLAGS} &&
|
export CFLAGS=${PLATFORM_CFLAGS} &&
|
||||||
export CXXFLAGS=${PLATFORM_CXXFLAGS} &&
|
export CXXFLAGS=${PLATFORM_CXXFLAGS} &&
|
||||||
export LDFLAGS=${PLATFORM_LDFLAGS}
|
export LDFLAGS=${PLATFORM_LDFLAGS}
|
||||||
|
@@ -68,8 +68,6 @@ set(OSL_EXTRA_ARGS
|
|||||||
-DINSTALL_DOCS=OFF
|
-DINSTALL_DOCS=OFF
|
||||||
${OSL_SIMD_FLAGS}
|
${OSL_SIMD_FLAGS}
|
||||||
-Dpugixml_ROOT=${LIBDIR}/pugixml
|
-Dpugixml_ROOT=${LIBDIR}/pugixml
|
||||||
-DTIFF_ROOT=${LIBDIR}/tiff
|
|
||||||
-DJPEG_ROOT=${LIBDIR}/jpeg
|
|
||||||
-DUSE_PYTHON=OFF
|
-DUSE_PYTHON=OFF
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@@ -22,8 +22,8 @@ set(PNG_EXTRA_ARGS
|
|||||||
-DPNG_STATIC=ON
|
-DPNG_STATIC=ON
|
||||||
)
|
)
|
||||||
|
|
||||||
if(APPLE AND ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64"))
|
if(BLENDER_PLATFORM_ARM)
|
||||||
set(PNG_EXTRA_ARGS ${PNG_EXTRA_ARGS} -DPNG_HARDWARE_OPTIMIZATIONS=ON -DPNG_ARM_NEON=on -DCMAKE_SYSTEM_PROCESSOR="aarch64")
|
set(PNG_EXTRA_ARGS ${PNG_EXTRA_ARGS} -DPNG_HARDWARE_OPTIMIZATIONS=ON -DPNG_ARM_NEON=ON -DCMAKE_SYSTEM_PROCESSOR="aarch64")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
ExternalProject_Add(external_png
|
ExternalProject_Add(external_png
|
||||||
@@ -40,14 +40,6 @@ add_dependencies(
|
|||||||
external_zlib
|
external_zlib
|
||||||
)
|
)
|
||||||
|
|
||||||
if(WIN32 AND BUILD_MODE STREQUAL Release)
|
|
||||||
ExternalProject_Add_Step(external_png after_install
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/png/include/ ${HARVEST_TARGET}/png/include/
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/png/lib/libpng16_static${LIBEXT} ${HARVEST_TARGET}/png/lib/libpng${LIBEXT}
|
|
||||||
DEPENDEES install
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(WIN32 AND BUILD_MODE STREQUAL Debug)
|
if(WIN32 AND BUILD_MODE STREQUAL Debug)
|
||||||
ExternalProject_Add_Step(external_png after_install
|
ExternalProject_Add_Step(external_png after_install
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/png/lib/libpng16_staticd${LIBEXT} ${LIBDIR}/png/lib/libpng16${LIBEXT}
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/png/lib/libpng16_staticd${LIBEXT} ${LIBDIR}/png/lib/libpng16${LIBEXT}
|
||||||
|
@@ -31,11 +31,9 @@ if(WIN32)
|
|||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
set(PYTHON_EXTERNALS_FOLDER ${BUILD_DIR}/python/src/external_python/externals)
|
set(PYTHON_EXTERNALS_FOLDER ${BUILD_DIR}/python/src/external_python/externals)
|
||||||
set(ZLIB_SOURCE_FOLDER ${BUILD_DIR}/zlib/src/external_zlib)
|
|
||||||
set(DOWNLOADS_EXTERNALS_FOLDER ${DOWNLOAD_DIR}/externals)
|
set(DOWNLOADS_EXTERNALS_FOLDER ${DOWNLOAD_DIR}/externals)
|
||||||
|
|
||||||
cmake_to_dos_path(${PYTHON_EXTERNALS_FOLDER} PYTHON_EXTERNALS_FOLDER_DOS)
|
cmake_to_dos_path(${PYTHON_EXTERNALS_FOLDER} PYTHON_EXTERNALS_FOLDER_DOS)
|
||||||
cmake_to_dos_path(${ZLIB_SOURCE_FOLDER} ZLIB_SOURCE_FOLDER_DOS)
|
|
||||||
cmake_to_dos_path(${DOWNLOADS_EXTERNALS_FOLDER} DOWNLOADS_EXTERNALS_FOLDER_DOS)
|
cmake_to_dos_path(${DOWNLOADS_EXTERNALS_FOLDER} DOWNLOADS_EXTERNALS_FOLDER_DOS)
|
||||||
|
|
||||||
ExternalProject_Add(external_python
|
ExternalProject_Add(external_python
|
||||||
@@ -43,21 +41,11 @@ if(WIN32)
|
|||||||
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
||||||
URL_HASH ${PYTHON_HASH_TYPE}=${PYTHON_HASH}
|
URL_HASH ${PYTHON_HASH_TYPE}=${PYTHON_HASH}
|
||||||
PREFIX ${BUILD_DIR}/python
|
PREFIX ${BUILD_DIR}/python
|
||||||
# Python will download its own deps and there's very little we can do about
|
CONFIGURE_COMMAND ""
|
||||||
# that beyond placing some code in their externals dir before it tries.
|
|
||||||
# the foldernames *HAVE* to match the ones inside pythons get_externals.cmd.
|
|
||||||
# python 3.10.8 still ships zlib 1.2.12, replace it with our 1.2.13
|
|
||||||
# copy until they update.
|
|
||||||
CONFIGURE_COMMAND mkdir ${PYTHON_EXTERNALS_FOLDER_DOS} &&
|
|
||||||
mklink /J ${PYTHON_EXTERNALS_FOLDER_DOS}\\zlib-1.2.12 ${ZLIB_SOURCE_FOLDER_DOS} &&
|
|
||||||
${CMAKE_COMMAND} -E copy ${ZLIB_SOURCE_FOLDER}/../external_zlib-build/zconf.h ${PYTHON_EXTERNALS_FOLDER}/zlib-1.2.12/zconf.h
|
|
||||||
BUILD_COMMAND cd ${BUILD_DIR}/python/src/external_python/pcbuild/ && set IncludeTkinter=false && call build.bat -e -p x64 -c ${BUILD_MODE}
|
BUILD_COMMAND cd ${BUILD_DIR}/python/src/external_python/pcbuild/ && set IncludeTkinter=false && call build.bat -e -p x64 -c ${BUILD_MODE}
|
||||||
INSTALL_COMMAND ${PYTHON_BINARY_INTERNAL} ${PYTHON_SRC}/PC/layout/main.py -b ${PYTHON_SRC}/PCbuild/amd64 -s ${PYTHON_SRC} -t ${PYTHON_SRC}/tmp/ --include-stable --include-pip --include-dev --include-launchers --include-venv --include-symbols ${PYTHON_EXTRA_INSTLAL_FLAGS} --copy ${LIBDIR}/python
|
INSTALL_COMMAND ${PYTHON_BINARY_INTERNAL} ${PYTHON_SRC}/PC/layout/main.py -b ${PYTHON_SRC}/PCbuild/amd64 -s ${PYTHON_SRC} -t ${PYTHON_SRC}/tmp/ --include-stable --include-pip --include-dev --include-launchers --include-venv --include-symbols ${PYTHON_EXTRA_INSTLAL_FLAGS} --copy ${LIBDIR}/python
|
||||||
)
|
)
|
||||||
add_dependencies(
|
|
||||||
external_python
|
|
||||||
external_zlib
|
|
||||||
)
|
|
||||||
else()
|
else()
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
# Disable functions that can be in 10.13 sdk but aren't available on 10.9 target.
|
# Disable functions that can be in 10.13 sdk but aren't available on 10.9 target.
|
||||||
|
@@ -27,11 +27,18 @@ else()
|
|||||||
set(SNDFILE_OPTIONS --enable-static --disable-shared )
|
set(SNDFILE_OPTIONS --enable-static --disable-shared )
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(UNIX)
|
||||||
|
set(SNDFILE_PATCH_CMD ${PATCH_CMD} --verbose -p 0 -d ${BUILD_DIR}/sndfile/src/external_sndfile < ${PATCH_DIR}/sndfile.diff)
|
||||||
|
else()
|
||||||
|
set(SNDFILE_PATCH_CMD)
|
||||||
|
endif()
|
||||||
|
|
||||||
ExternalProject_Add(external_sndfile
|
ExternalProject_Add(external_sndfile
|
||||||
URL file://${PACKAGE_DIR}/${SNDFILE_FILE}
|
URL file://${PACKAGE_DIR}/${SNDFILE_FILE}
|
||||||
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
||||||
URL_HASH ${SNDFILE_HASH_TYPE}=${SNDFILE_HASH}
|
URL_HASH ${SNDFILE_HASH_TYPE}=${SNDFILE_HASH}
|
||||||
PREFIX ${BUILD_DIR}/sndfile
|
PREFIX ${BUILD_DIR}/sndfile
|
||||||
|
PATCH_COMMAND ${SNDFILE_PATCH_CMD}
|
||||||
CONFIGURE_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/sndfile/src/external_sndfile/ && ${SNDFILE_ENV} ${CONFIGURE_COMMAND} ${SNDFILE_OPTIONS} --prefix=${mingw_LIBDIR}/sndfile
|
CONFIGURE_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/sndfile/src/external_sndfile/ && ${SNDFILE_ENV} ${CONFIGURE_COMMAND} ${SNDFILE_OPTIONS} --prefix=${mingw_LIBDIR}/sndfile
|
||||||
BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/sndfile/src/external_sndfile/ && make -j${MAKE_THREADS}
|
BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/sndfile/src/external_sndfile/ && make -j${MAKE_THREADS}
|
||||||
INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/sndfile/src/external_sndfile/ && make install
|
INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/sndfile/src/external_sndfile/ && make install
|
||||||
|
@@ -64,6 +64,7 @@ ExternalProject_Add(external_sqlite
|
|||||||
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
||||||
URL_HASH ${SQLITE_HASH_TYPE}=${SQLITE_HASH}
|
URL_HASH ${SQLITE_HASH_TYPE}=${SQLITE_HASH}
|
||||||
PREFIX ${BUILD_DIR}/sqlite
|
PREFIX ${BUILD_DIR}/sqlite
|
||||||
|
PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/sqlite/src/external_sqlite < ${PATCH_DIR}/sqlite.diff
|
||||||
CONFIGURE_COMMAND ${SQLITE_CONFIGURE_ENV} && cd ${BUILD_DIR}/sqlite/src/external_sqlite/ && ${CONFIGURE_COMMAND} --prefix=${LIBDIR}/sqlite ${SQLITE_CONFIGURATION_ARGS}
|
CONFIGURE_COMMAND ${SQLITE_CONFIGURE_ENV} && cd ${BUILD_DIR}/sqlite/src/external_sqlite/ && ${CONFIGURE_COMMAND} --prefix=${LIBDIR}/sqlite ${SQLITE_CONFIGURATION_ARGS}
|
||||||
BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/sqlite/src/external_sqlite/ && make -j${MAKE_THREADS}
|
BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/sqlite/src/external_sqlite/ && make -j${MAKE_THREADS}
|
||||||
INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/sqlite/src/external_sqlite/ && make install
|
INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/sqlite/src/external_sqlite/ && make install
|
||||||
|
@@ -16,7 +16,6 @@
|
|||||||
#
|
#
|
||||||
# ***** END GPL LICENSE BLOCK *****
|
# ***** END GPL LICENSE BLOCK *****
|
||||||
|
|
||||||
if(APPLE AND ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64"))
|
|
||||||
ExternalProject_Add(external_sse2neon
|
ExternalProject_Add(external_sse2neon
|
||||||
GIT_REPOSITORY ${SSE2NEON_GIT}
|
GIT_REPOSITORY ${SSE2NEON_GIT}
|
||||||
GIT_TAG ${SSE2NEON_GIT_HASH}
|
GIT_TAG ${SSE2NEON_GIT_HASH}
|
||||||
@@ -27,4 +26,3 @@ if(APPLE AND ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64"))
|
|||||||
INSTALL_COMMAND mkdir -p ${LIBDIR}/sse2neon && cp ${BUILD_DIR}/sse2neon/src/external_sse2neon/sse2neon.h ${LIBDIR}/sse2neon
|
INSTALL_COMMAND mkdir -p ${LIBDIR}/sse2neon && cp ${BUILD_DIR}/sse2neon/src/external_sse2neon/sse2neon.h ${LIBDIR}/sse2neon
|
||||||
INSTALL_DIR ${LIBDIR}/sse2neon
|
INSTALL_DIR ${LIBDIR}/sse2neon
|
||||||
)
|
)
|
||||||
endif()
|
|
||||||
|
@@ -21,9 +21,10 @@ set(SSL_PATCH_CMD echo .)
|
|||||||
|
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
set(SSL_OS_COMPILER "blender-darwin-${CMAKE_OSX_ARCHITECTURES}")
|
set(SSL_OS_COMPILER "blender-darwin-${CMAKE_OSX_ARCHITECTURES}")
|
||||||
set(SSL_PATCH_CMD ${PATCH_CMD} --verbose -p 0 -d ${BUILD_DIR}/ssl/src/external_ssl < ${PATCH_DIR}/ssl.diff)
|
|
||||||
else()
|
else()
|
||||||
if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
|
if(BLENDER_PLATFORM_ARM)
|
||||||
|
set(SSL_OS_COMPILER "blender-linux-aarch64")
|
||||||
|
elseif("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
|
||||||
set(SSL_EXTRA_ARGS enable-ec_nistp_64_gcc_128)
|
set(SSL_EXTRA_ARGS enable-ec_nistp_64_gcc_128)
|
||||||
set(SSL_OS_COMPILER "blender-linux-x86_64")
|
set(SSL_OS_COMPILER "blender-linux-x86_64")
|
||||||
else()
|
else()
|
||||||
|
@@ -8,6 +8,11 @@ my %targets = (
|
|||||||
inherit_from => [ "linux-x86_64" ],
|
inherit_from => [ "linux-x86_64" ],
|
||||||
cflags => add("-fPIC"),
|
cflags => add("-fPIC"),
|
||||||
},
|
},
|
||||||
|
"blender-linux-aarch64" => {
|
||||||
|
inherit_from => [ "linux-aarch64" ],
|
||||||
|
cxxflags => add("-fPIC"),
|
||||||
|
cflags => add("-fPIC"),
|
||||||
|
},
|
||||||
"blender-darwin-x86_64" => {
|
"blender-darwin-x86_64" => {
|
||||||
inherit_from => [ "darwin64-x86_64-cc" ],
|
inherit_from => [ "darwin64-x86_64-cc" ],
|
||||||
cflags => add("-fPIC"),
|
cflags => add("-fPIC"),
|
||||||
|
@@ -21,6 +21,8 @@ if(WIN32)
|
|||||||
-DTBB_BUILD_TBBMALLOC=On
|
-DTBB_BUILD_TBBMALLOC=On
|
||||||
-DTBB_BUILD_TBBMALLOC_PROXY=On
|
-DTBB_BUILD_TBBMALLOC_PROXY=On
|
||||||
-DTBB_BUILD_STATIC=Off
|
-DTBB_BUILD_STATIC=Off
|
||||||
|
-DTBB_BUILD_TESTS=Off
|
||||||
|
-DCMAKE_DEBUG_POSTFIX=_debug
|
||||||
)
|
)
|
||||||
set(TBB_LIBRARY tbb)
|
set(TBB_LIBRARY tbb)
|
||||||
set(TBB_STATIC_LIBRARY Off)
|
set(TBB_STATIC_LIBRARY Off)
|
||||||
@@ -30,6 +32,7 @@ else()
|
|||||||
-DTBB_BUILD_TBBMALLOC=On
|
-DTBB_BUILD_TBBMALLOC=On
|
||||||
-DTBB_BUILD_TBBMALLOC_PROXY=Off
|
-DTBB_BUILD_TBBMALLOC_PROXY=Off
|
||||||
-DTBB_BUILD_STATIC=On
|
-DTBB_BUILD_STATIC=On
|
||||||
|
-DTBB_BUILD_TESTS=Off
|
||||||
)
|
)
|
||||||
set(TBB_LIBRARY tbb_static)
|
set(TBB_LIBRARY tbb_static)
|
||||||
set(TBB_STATIC_LIBRARY On)
|
set(TBB_STATIC_LIBRARY On)
|
||||||
@@ -42,7 +45,7 @@ ExternalProject_Add(external_tbb
|
|||||||
URL_HASH ${TBB_HASH_TYPE}=${TBB_HASH}
|
URL_HASH ${TBB_HASH_TYPE}=${TBB_HASH}
|
||||||
PREFIX ${BUILD_DIR}/tbb
|
PREFIX ${BUILD_DIR}/tbb
|
||||||
PATCH_COMMAND COMMAND ${CMAKE_COMMAND} -E copy ${PATCH_DIR}/cmakelists_tbb.txt ${BUILD_DIR}/tbb/src/external_tbb/CMakeLists.txt &&
|
PATCH_COMMAND COMMAND ${CMAKE_COMMAND} -E copy ${PATCH_DIR}/cmakelists_tbb.txt ${BUILD_DIR}/tbb/src/external_tbb/CMakeLists.txt &&
|
||||||
${CMAKE_COMMAND} -E copy ${BUILD_DIR}/tbb/src/external_tbb/build/vs2013/version_string.ver ${BUILD_DIR}/tbb/src/external_tbb/src/tbb/version_string.ver &&
|
${CMAKE_COMMAND} -E copy ${BUILD_DIR}/tbb/src/external_tbb/build/vs2013/version_string.ver ${BUILD_DIR}/tbb/src/external_tbb/build/version_string.ver.in &&
|
||||||
${PATCH_CMD} -p 1 -d ${BUILD_DIR}/tbb/src/external_tbb < ${PATCH_DIR}/tbb.diff
|
${PATCH_CMD} -p 1 -d ${BUILD_DIR}/tbb/src/external_tbb < ${PATCH_DIR}/tbb.diff
|
||||||
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/tbb ${DEFAULT_CMAKE_FLAGS} ${TBB_EXTRA_ARGS}
|
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/tbb ${DEFAULT_CMAKE_FLAGS} ${TBB_EXTRA_ARGS}
|
||||||
INSTALL_DIR ${LIBDIR}/tbb
|
INSTALL_DIR ${LIBDIR}/tbb
|
||||||
@@ -53,17 +56,17 @@ if(WIN32)
|
|||||||
ExternalProject_Add_Step(external_tbb after_install
|
ExternalProject_Add_Step(external_tbb after_install
|
||||||
# findtbb.cmake in some deps *NEEDS* to find tbb_debug.lib even if they are not going to use it
|
# findtbb.cmake in some deps *NEEDS* to find tbb_debug.lib even if they are not going to use it
|
||||||
# to make that test pass, we place a copy with the right name in the lib folder.
|
# to make that test pass, we place a copy with the right name in the lib folder.
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbb.lib ${HARVEST_TARGET}/tbb/lib/tbb_debug.lib
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbb.lib ${LIBDIR}/tbb/lib/tbb_debug.lib
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbbmalloc.lib ${HARVEST_TARGET}/tbb/lib/tbbmalloc_debug.lib
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbbmalloc.lib ${LIBDIR}/tbb/lib/tbbmalloc_debug.lib
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbb.dll ${HARVEST_TARGET}/tbb/lib/tbb_debug.dll
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/bin/tbb.dll ${LIBDIR}/tbb/bin/tbb_debug.dll
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbbmalloc.dll ${HARVEST_TARGET}/tbb/lib/tbbmalloc_debug.dll
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/bin/tbbmalloc.dll ${LIBDIR}/tbb/bin/tbbmalloc_debug.dll
|
||||||
# Normal collection of build artifacts
|
# Normal collection of build artifacts
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbb.lib ${HARVEST_TARGET}/tbb/lib/tbb.lib
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbb.lib ${HARVEST_TARGET}/tbb/lib/tbb.lib
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbb.dll ${HARVEST_TARGET}/tbb/lib/tbb.dll
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/bin/tbb.dll ${HARVEST_TARGET}/tbb/bin/tbb.dll
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbbmalloc.lib ${HARVEST_TARGET}/tbb/lib/tbbmalloc.lib
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbbmalloc.lib ${HARVEST_TARGET}/tbb/lib/tbbmalloc.lib
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbbmalloc.dll ${HARVEST_TARGET}/tbb/lib/tbbmalloc.dll
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/bin/tbbmalloc.dll ${HARVEST_TARGET}/tbb/bin/tbbmalloc.dll
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbbmalloc_proxy.lib ${HARVEST_TARGET}/tbb/lib/tbbmalloc_proxy.lib
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbbmalloc_proxy.lib ${HARVEST_TARGET}/tbb/lib/tbbmalloc_proxy.lib
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbbmalloc_proxy.dll ${HARVEST_TARGET}/tbb/lib/tbbmalloc_proxy.dll
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/bin/tbbmalloc_proxy.dll ${HARVEST_TARGET}/tbb/bin/tbbmalloc_proxy.dll
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/tbb/include/ ${HARVEST_TARGET}/tbb/include/
|
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/tbb/include/ ${HARVEST_TARGET}/tbb/include/
|
||||||
DEPENDEES install
|
DEPENDEES install
|
||||||
)
|
)
|
||||||
@@ -74,11 +77,12 @@ if(WIN32)
|
|||||||
# to make that test pass, we place a copy with the right name in the lib folder.
|
# to make that test pass, we place a copy with the right name in the lib folder.
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbb_debug.lib ${LIBDIR}/tbb/lib/tbb.lib
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbb_debug.lib ${LIBDIR}/tbb/lib/tbb.lib
|
||||||
# Normal collection of build artifacts
|
# Normal collection of build artifacts
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbb_debug.lib ${HARVEST_TARGET}/tbb/lib/debug/tbb_debug.lib
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbb_debug.lib ${HARVEST_TARGET}/tbb/lib/tbb_debug.lib
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbb_debug.dll ${HARVEST_TARGET}/tbb/lib/debug/tbb_debug.dll
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/bin/tbb_debug.dll ${HARVEST_TARGET}/tbb/bin/tbb_debug.dll
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbbmalloc_proxy.lib ${HARVEST_TARGET}/tbb/lib/tbbmalloc_proxy_debug.lib
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbbmalloc_debug.lib ${HARVEST_TARGET}/tbb/lib/tbbmalloc_debug.lib
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbbmalloc.dll ${HARVEST_TARGET}/tbb/lib/debug/tbbmalloc.dll
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbbmalloc_proxy_debug.lib ${HARVEST_TARGET}/tbb/lib/tbbmalloc_proxy_debug.lib
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbbmalloc_proxy.dll ${HARVEST_TARGET}/tbb/lib/debug/tbbmalloc_proxy.dll
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/bin/tbbmalloc_debug.dll ${HARVEST_TARGET}/tbb/bin/tbbmalloc_debug.dll
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/bin/tbbmalloc_proxy_debug.dll ${HARVEST_TARGET}/tbb/bin/tbbmalloc_proxy_debug.dll
|
||||||
DEPENDEES install
|
DEPENDEES install
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
@@ -45,7 +45,6 @@ ExternalProject_Add(external_tiff
|
|||||||
add_dependencies(
|
add_dependencies(
|
||||||
external_tiff
|
external_tiff
|
||||||
external_zlib
|
external_zlib
|
||||||
external_jpeg
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if(WIN32 AND BUILD_MODE STREQUAL Debug)
|
if(WIN32 AND BUILD_MODE STREQUAL Debug)
|
||||||
|
@@ -16,20 +16,11 @@
|
|||||||
#
|
#
|
||||||
# ***** END GPL LICENSE BLOCK *****
|
# ***** END GPL LICENSE BLOCK *****
|
||||||
|
|
||||||
# CPE's are used to identify dependencies, for more information on what they
|
set(ZLIB_VERSION 1.2.11)
|
||||||
# are please see https://nvd.nist.gov/products/cpe
|
|
||||||
#
|
|
||||||
# We use them in combination with cve-bin-tool to scan for known security issues.
|
|
||||||
#
|
|
||||||
# Not all of our dependencies are currently in the nvd database so not all
|
|
||||||
# dependencies have one assigned.
|
|
||||||
|
|
||||||
set(ZLIB_VERSION 1.2.13)
|
|
||||||
set(ZLIB_URI https://zlib.net/zlib-${ZLIB_VERSION}.tar.gz)
|
set(ZLIB_URI https://zlib.net/zlib-${ZLIB_VERSION}.tar.gz)
|
||||||
set(ZLIB_HASH 9b8aa094c4e5765dabf4da391f00d15c)
|
set(ZLIB_HASH 1c9f62f0778697a09d36121ead88e08e)
|
||||||
set(ZLIB_HASH_TYPE MD5)
|
set(ZLIB_HASH_TYPE MD5)
|
||||||
set(ZLIB_FILE zlib-${ZLIB_VERSION}.tar.gz)
|
set(ZLIB_FILE zlib-${ZLIB_VERSION}.tar.gz)
|
||||||
set(ZLIB_CPE "cpe:2.3:a:zlib:zlib:${ZLIB_VERSION}:*:*:*:*:*:*:*")
|
|
||||||
|
|
||||||
set(OPENAL_VERSION 1.20.1)
|
set(OPENAL_VERSION 1.20.1)
|
||||||
set(OPENAL_URI http://openal-soft.org/openal-releases/openal-soft-${OPENAL_VERSION}.tar.bz2)
|
set(OPENAL_URI http://openal-soft.org/openal-releases/openal-soft-${OPENAL_VERSION}.tar.bz2)
|
||||||
@@ -42,14 +33,12 @@ set(PNG_URI http://prdownloads.sourceforge.net/libpng/libpng-${PNG_VERSION}.tar.
|
|||||||
set(PNG_HASH 505e70834d35383537b6491e7ae8641f1a4bed1876dbfe361201fc80868d88ca)
|
set(PNG_HASH 505e70834d35383537b6491e7ae8641f1a4bed1876dbfe361201fc80868d88ca)
|
||||||
set(PNG_HASH_TYPE SHA256)
|
set(PNG_HASH_TYPE SHA256)
|
||||||
set(PNG_FILE libpng-${PNG_VERSION}.tar.xz)
|
set(PNG_FILE libpng-${PNG_VERSION}.tar.xz)
|
||||||
set(PNG_CPE "cpe:2.3:a:libpng:libpng:${PNG_VERSION}:*:*:*:*:*:*:*")
|
|
||||||
|
|
||||||
set(JPEG_VERSION 2.0.4)
|
set(JPEG_VERSION 2.0.4)
|
||||||
set(JPEG_URI https://github.com/libjpeg-turbo/libjpeg-turbo/archive/${JPEG_VERSION}.tar.gz)
|
set(JPEG_URI https://github.com/libjpeg-turbo/libjpeg-turbo/archive/${JPEG_VERSION}.tar.gz)
|
||||||
set(JPEG_HASH 44c43e4a9fb352f47090804529317c88)
|
set(JPEG_HASH 44c43e4a9fb352f47090804529317c88)
|
||||||
set(JPEG_HASH_TYPE MD5)
|
set(JPEG_HASH_TYPE MD5)
|
||||||
set(JPEG_FILE libjpeg-turbo-${JPEG_VERSION}.tar.gz)
|
set(JPEG_FILE libjpeg-turbo-${JPEG_VERSION}.tar.gz)
|
||||||
set(JPEG_CPE "cpe:2.3:a:d.r.commander:libjpeg-turbo:${JPEG_VERSION}:*:*:*:*:*:*:*")
|
|
||||||
|
|
||||||
set(BOOST_VERSION 1.73.0)
|
set(BOOST_VERSION 1.73.0)
|
||||||
set(BOOST_VERSION_NODOTS 1_73_0)
|
set(BOOST_VERSION_NODOTS 1_73_0)
|
||||||
@@ -58,7 +47,6 @@ set(BOOST_URI https://boostorg.jfrog.io/artifactory/main/release/${BOOST_VERSION
|
|||||||
set(BOOST_HASH 4036cd27ef7548b8d29c30ea10956196)
|
set(BOOST_HASH 4036cd27ef7548b8d29c30ea10956196)
|
||||||
set(BOOST_HASH_TYPE MD5)
|
set(BOOST_HASH_TYPE MD5)
|
||||||
set(BOOST_FILE boost_${BOOST_VERSION_NODOTS}.tar.gz)
|
set(BOOST_FILE boost_${BOOST_VERSION_NODOTS}.tar.gz)
|
||||||
set(BOOST_CPE "cpe:2.3:a:boost:boost:${BOOST_VERSION}:*:*:*:*:*:*:*")
|
|
||||||
|
|
||||||
# Using old version as recommended by OpenVDB build documentation.
|
# Using old version as recommended by OpenVDB build documentation.
|
||||||
set(BLOSC_VERSION 1.5.0)
|
set(BLOSC_VERSION 1.5.0)
|
||||||
@@ -66,7 +54,6 @@ set(BLOSC_URI https://github.com/Blosc/c-blosc/archive/v${BLOSC_VERSION}.tar.gz)
|
|||||||
set(BLOSC_HASH 6e4a49c8c06f05aa543f3312cfce3d55)
|
set(BLOSC_HASH 6e4a49c8c06f05aa543f3312cfce3d55)
|
||||||
set(BLOSC_HASH_TYPE MD5)
|
set(BLOSC_HASH_TYPE MD5)
|
||||||
set(BLOSC_FILE blosc-${BLOSC_VERSION}.tar.gz)
|
set(BLOSC_FILE blosc-${BLOSC_VERSION}.tar.gz)
|
||||||
set(BLOSC_CPE "cpe:2.3:a:c-blosc2_project:c-blosc2:${BLOSC_VERSION}:*:*:*:*:*:*:*")
|
|
||||||
|
|
||||||
set(PTHREADS_VERSION 3.0.0)
|
set(PTHREADS_VERSION 3.0.0)
|
||||||
set(PTHREADS_URI http://prdownloads.sourceforge.net/pthreads4w/pthreads4w-code-v${PTHREADS_VERSION}.zip)
|
set(PTHREADS_URI http://prdownloads.sourceforge.net/pthreads4w/pthreads4w-code-v${PTHREADS_VERSION}.zip)
|
||||||
@@ -74,12 +61,11 @@ set(PTHREADS_HASH f3bf81bb395840b3446197bcf4ecd653)
|
|||||||
set(PTHREADS_HASH_TYPE MD5)
|
set(PTHREADS_HASH_TYPE MD5)
|
||||||
set(PTHREADS_FILE pthreads4w-code-${PTHREADS_VERSION}.zip)
|
set(PTHREADS_FILE pthreads4w-code-${PTHREADS_VERSION}.zip)
|
||||||
|
|
||||||
set(OPENEXR_VERSION 2.5.8)
|
set(OPENEXR_VERSION 2.5.5)
|
||||||
set(OPENEXR_URI https://github.com/AcademySoftwareFoundation/openexr/archive/v${OPENEXR_VERSION}.tar.gz)
|
set(OPENEXR_URI https://github.com/AcademySoftwareFoundation/openexr/archive/v${OPENEXR_VERSION}.tar.gz)
|
||||||
set(OPENEXR_HASH 85e8a979092c9055d10ed103062d31a0)
|
set(OPENEXR_HASH 85e8a979092c9055d10ed103062d31a0)
|
||||||
set(OPENEXR_HASH_TYPE MD5)
|
set(OPENEXR_HASH_TYPE MD5)
|
||||||
set(OPENEXR_FILE openexr-${OPENEXR_VERSION}.tar.gz)
|
set(OPENEXR_FILE openexr-${OPENEXR_VERSION}.tar.gz)
|
||||||
set(OPENEXR_CPE "cpe:2.3:a:openexr:openexr:${OPENEXR_VERSION}:*:*:*:*:*:*:*")
|
|
||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
# Openexr started appending _d on its own so now
|
# Openexr started appending _d on its own so now
|
||||||
@@ -97,12 +83,11 @@ else()
|
|||||||
set(OPENEXR_VERSION_POSTFIX)
|
set(OPENEXR_VERSION_POSTFIX)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(FREETYPE_VERSION 2.12.1)
|
set(FREETYPE_VERSION 2.10.2)
|
||||||
set(FREETYPE_URI http://prdownloads.sourceforge.net/freetype/freetype-${FREETYPE_VERSION}.tar.gz)
|
set(FREETYPE_URI http://prdownloads.sourceforge.net/freetype/freetype-${FREETYPE_VERSION}.tar.gz)
|
||||||
set(FREETYPE_HASH 8bc5c9c9df7ac12c504f8918552a7cf2)
|
set(FREETYPE_HASH b1cb620e4c875cd4d1bfa04945400945)
|
||||||
set(FREETYPE_HASH_TYPE MD5)
|
set(FREETYPE_HASH_TYPE MD5)
|
||||||
set(FREETYPE_FILE freetype-${FREETYPE_VERSION}.tar.gz)
|
set(FREETYPE_FILE freetype-${FREETYPE_VERSION}.tar.gz)
|
||||||
SET(FREETYPE_CPE "cpe:2.3:a:freetype:freetype:${FREETYPE_VERSION}:*:*:*:*:*:*:*")
|
|
||||||
|
|
||||||
set(GLEW_VERSION 1.13.0)
|
set(GLEW_VERSION 1.13.0)
|
||||||
set(GLEW_URI http://prdownloads.sourceforge.net/glew/glew/${GLEW_VERSION}/glew-${GLEW_VERSION}.tgz)
|
set(GLEW_URI http://prdownloads.sourceforge.net/glew/glew/${GLEW_VERSION}/glew-${GLEW_VERSION}.tgz)
|
||||||
@@ -121,7 +106,6 @@ set(ALEMBIC_URI https://github.com/alembic/alembic/archive/${ALEMBIC_VERSION}.ta
|
|||||||
set(ALEMBIC_HASH effcc86e42fe6605588e3de57bde6677)
|
set(ALEMBIC_HASH effcc86e42fe6605588e3de57bde6677)
|
||||||
set(ALEMBIC_HASH_TYPE MD5)
|
set(ALEMBIC_HASH_TYPE MD5)
|
||||||
set(ALEMBIC_FILE alembic-${ALEMBIC_VERSION}.tar.gz)
|
set(ALEMBIC_FILE alembic-${ALEMBIC_VERSION}.tar.gz)
|
||||||
SET(FREETYPE_CPE "cpe:2.3:a:freetype:freetype:${FREETYPE_VERSION}:*:*:*:*:*:*:*")
|
|
||||||
|
|
||||||
# hash is for 3.1.2
|
# hash is for 3.1.2
|
||||||
set(GLFW_GIT_UID 30306e54705c3adae9fe082c816a3be71963485c)
|
set(GLFW_GIT_UID 30306e54705c3adae9fe082c816a3be71963485c)
|
||||||
@@ -155,7 +139,6 @@ set(SDL_URI https://www.libsdl.org/release/SDL2-${SDL_VERSION}.tar.gz)
|
|||||||
set(SDL_HASH 783b6f2df8ff02b19bb5ce492b99c8ff)
|
set(SDL_HASH 783b6f2df8ff02b19bb5ce492b99c8ff)
|
||||||
set(SDL_HASH_TYPE MD5)
|
set(SDL_HASH_TYPE MD5)
|
||||||
set(SDL_FILE SDL2-${SDL_VERSION}.tar.gz)
|
set(SDL_FILE SDL2-${SDL_VERSION}.tar.gz)
|
||||||
set(SDL_CPE "cpe:2.3:a:libsdl:sdl:${SDL_VERSION}:*:*:*:*:*:*:*")
|
|
||||||
|
|
||||||
set(OPENCOLLADA_VERSION v1.6.68)
|
set(OPENCOLLADA_VERSION v1.6.68)
|
||||||
set(OPENCOLLADA_URI https://github.com/KhronosGroup/OpenCOLLADA/archive/${OPENCOLLADA_VERSION}.tar.gz)
|
set(OPENCOLLADA_URI https://github.com/KhronosGroup/OpenCOLLADA/archive/${OPENCOLLADA_VERSION}.tar.gz)
|
||||||
@@ -169,7 +152,7 @@ set(OPENCOLORIO_HASH 1a2e3478b6cd9a1549f24e1b2205e3f0)
|
|||||||
set(OPENCOLORIO_HASH_TYPE MD5)
|
set(OPENCOLORIO_HASH_TYPE MD5)
|
||||||
set(OPENCOLORIO_FILE OpenColorIO-${OPENCOLORIO_VERSION}.tar.gz)
|
set(OPENCOLORIO_FILE OpenColorIO-${OPENCOLORIO_VERSION}.tar.gz)
|
||||||
|
|
||||||
if(APPLE AND ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64"))
|
if(BLENDER_PLATFORM_ARM)
|
||||||
# Newer version required by ISPC with arm support.
|
# Newer version required by ISPC with arm support.
|
||||||
set(LLVM_VERSION 11.0.1)
|
set(LLVM_VERSION 11.0.1)
|
||||||
set(LLVM_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/llvm-project-${LLVM_VERSION}.src.tar.xz)
|
set(LLVM_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/llvm-project-${LLVM_VERSION}.src.tar.xz)
|
||||||
@@ -194,7 +177,6 @@ else()
|
|||||||
set(OPENMP_HASH_TYPE MD5)
|
set(OPENMP_HASH_TYPE MD5)
|
||||||
set(OPENMP_FILE openmp-${LLVM_VERSION}.src.tar.xz)
|
set(OPENMP_FILE openmp-${LLVM_VERSION}.src.tar.xz)
|
||||||
endif()
|
endif()
|
||||||
set(LLVM_CPE "cpe:2.3:a:llvm:compiler:${LLVM_VERSION}:*:*:*:*:*:*:*")
|
|
||||||
|
|
||||||
set(OPENIMAGEIO_VERSION 2.1.15.0)
|
set(OPENIMAGEIO_VERSION 2.1.15.0)
|
||||||
set(OPENIMAGEIO_URI https://github.com/OpenImageIO/oiio/archive/Release-${OPENIMAGEIO_VERSION}.tar.gz)
|
set(OPENIMAGEIO_URI https://github.com/OpenImageIO/oiio/archive/Release-${OPENIMAGEIO_VERSION}.tar.gz)
|
||||||
@@ -202,12 +184,11 @@ set(OPENIMAGEIO_HASH f03aa5e3ac4795af04771ee4146e9832)
|
|||||||
set(OPENIMAGEIO_HASH_TYPE MD5)
|
set(OPENIMAGEIO_HASH_TYPE MD5)
|
||||||
set(OPENIMAGEIO_FILE OpenImageIO-${OPENIMAGEIO_VERSION}.tar.gz)
|
set(OPENIMAGEIO_FILE OpenImageIO-${OPENIMAGEIO_VERSION}.tar.gz)
|
||||||
|
|
||||||
set(TIFF_VERSION 4.4.0)
|
set(TIFF_VERSION 4.1.0)
|
||||||
set(TIFF_URI http://download.osgeo.org/libtiff/tiff-${TIFF_VERSION}.tar.gz)
|
set(TIFF_URI http://download.osgeo.org/libtiff/tiff-${TIFF_VERSION}.tar.gz)
|
||||||
set(TIFF_HASH 376f17f189e9d02280dfe709b2b2bbea)
|
set(TIFF_HASH 2165e7aba557463acc0664e71a3ed424)
|
||||||
set(TIFF_HASH_TYPE MD5)
|
set(TIFF_HASH_TYPE MD5)
|
||||||
set(TIFF_FILE tiff-${TIFF_VERSION}.tar.gz)
|
set(TIFF_FILE tiff-${TIFF_VERSION}.tar.gz)
|
||||||
set(TIFF_CPE "cpe:2.3:a:libtiff:libtiff:${TIFF_VERSION}:*:*:*:*:*:*:*")
|
|
||||||
|
|
||||||
set(OSL_VERSION 1.11.10.0)
|
set(OSL_VERSION 1.11.10.0)
|
||||||
set(OSL_URI https://github.com/imageworks/OpenShadingLanguage/archive/Release-${OSL_VERSION}.tar.gz)
|
set(OSL_URI https://github.com/imageworks/OpenShadingLanguage/archive/Release-${OSL_VERSION}.tar.gz)
|
||||||
@@ -215,22 +196,19 @@ set(OSL_HASH dfdc23597aeef083832cbada62211756)
|
|||||||
set(OSL_HASH_TYPE MD5)
|
set(OSL_HASH_TYPE MD5)
|
||||||
set(OSL_FILE OpenShadingLanguage-${OSL_VERSION}.tar.gz)
|
set(OSL_FILE OpenShadingLanguage-${OSL_VERSION}.tar.gz)
|
||||||
|
|
||||||
set(PYTHON_VERSION 3.9.15)
|
set(PYTHON_VERSION 3.9.2)
|
||||||
set(PYTHON_SHORT_VERSION 3.9)
|
set(PYTHON_SHORT_VERSION 3.9)
|
||||||
set(PYTHON_SHORT_VERSION_NO_DOTS 39)
|
set(PYTHON_SHORT_VERSION_NO_DOTS 39)
|
||||||
set(PYTHON_URI https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tar.xz)
|
set(PYTHON_URI https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tar.xz)
|
||||||
set(PYTHON_HASH f0dc9000312abeb16de4eccce9a870ab)
|
set(PYTHON_HASH f0dc9000312abeb16de4eccce9a870ab)
|
||||||
set(PYTHON_HASH_TYPE MD5)
|
set(PYTHON_HASH_TYPE MD5)
|
||||||
set(PYTHON_FILE Python-${PYTHON_VERSION}.tar.xz)
|
set(PYTHON_FILE Python-${PYTHON_VERSION}.tar.xz)
|
||||||
set(PYTHON_CPE "cpe:2.3:a:python:python:${PYTHON_VERSION}:-:*:*:*:*:*:*")
|
|
||||||
|
|
||||||
set(TBB_YEAR 2020)
|
set(TBB_VERSION 2020_U2)
|
||||||
set(TBB_VERSION ${TBB_YEAR}_U2)
|
|
||||||
set(TBB_URI https://github.com/oneapi-src/oneTBB/archive/${TBB_VERSION}.tar.gz)
|
set(TBB_URI https://github.com/oneapi-src/oneTBB/archive/${TBB_VERSION}.tar.gz)
|
||||||
set(TBB_HASH 1b711ae956524855088df3bbf5ec65dc)
|
set(TBB_HASH 1b711ae956524855088df3bbf5ec65dc)
|
||||||
set(TBB_HASH_TYPE MD5)
|
set(TBB_HASH_TYPE MD5)
|
||||||
set(TBB_FILE oneTBB-${TBB_VERSION}.tar.gz)
|
set(TBB_FILE oneTBB-${TBB_VERSION}.tar.gz)
|
||||||
set(TBB_CPE "cpe:2.3:a:intel:threading_building_blocks:${TBB_YEAR}:*:*:*:*:*:*:*")
|
|
||||||
|
|
||||||
set(OPENVDB_VERSION 8.0.1)
|
set(OPENVDB_VERSION 8.0.1)
|
||||||
set(OPENVDB_URI https://github.com/AcademySoftwareFoundation/openvdb/archive/v${OPENVDB_VERSION}.tar.gz)
|
set(OPENVDB_URI https://github.com/AcademySoftwareFoundation/openvdb/archive/v${OPENVDB_VERSION}.tar.gz)
|
||||||
@@ -238,47 +216,43 @@ set(OPENVDB_HASH 01b490be16cc0e15c690f9a153c21461)
|
|||||||
set(OPENVDB_HASH_TYPE MD5)
|
set(OPENVDB_HASH_TYPE MD5)
|
||||||
set(OPENVDB_FILE openvdb-${OPENVDB_VERSION}.tar.gz)
|
set(OPENVDB_FILE openvdb-${OPENVDB_VERSION}.tar.gz)
|
||||||
|
|
||||||
set(NANOVDB_GIT_UID e62f7a0bf1e27397223c61ddeaaf57edf111b77f)
|
set(NANOVDB_GIT_UID dc37d8a631922e7bef46712947dc19b755f3e841)
|
||||||
set(NANOVDB_URI https://github.com/AcademySoftwareFoundation/openvdb/archive/${NANOVDB_GIT_UID}.tar.gz)
|
set(NANOVDB_URI https://github.com/AcademySoftwareFoundation/openvdb/archive/${NANOVDB_GIT_UID}.tar.gz)
|
||||||
set(NANOVDB_HASH 90919510bc6ccd630fedc56f748cb199)
|
set(NANOVDB_HASH e7b9e863ec2f3b04ead171dec2322807)
|
||||||
set(NANOVDB_HASH_TYPE MD5)
|
set(NANOVDB_HASH_TYPE MD5)
|
||||||
set(NANOVDB_FILE nano-vdb-${NANOVDB_GIT_UID}.tar.gz)
|
set(NANOVDB_FILE nano-vdb-${NANOVDB_GIT_UID}.tar.gz)
|
||||||
|
|
||||||
set(IDNA_VERSION 2.10)
|
set(IDNA_VERSION 2.10)
|
||||||
set(CHARDET_VERSION 4.0.0)
|
set(CHARDET_VERSION 4.0.0)
|
||||||
set(URLLIB3_VERSION 1.26.3)
|
set(URLLIB3_VERSION 1.26.3)
|
||||||
set(URLLIB3_CPE "cpe:2.3:a:urllib3:urllib3:${URLLIB3_VERSION}:*:*:*:*:*:*:*")
|
|
||||||
set(CERTIFI_VERSION 2020.12.5)
|
set(CERTIFI_VERSION 2020.12.5)
|
||||||
set(REQUESTS_VERSION 2.25.1)
|
set(REQUESTS_VERSION 2.25.1)
|
||||||
set(CYTHON_VERSION 0.29.21)
|
set(CYTHON_VERSION 0.29.21)
|
||||||
|
|
||||||
set(NUMPY_VERSION 1.22.0)
|
set(NUMPY_VERSION 1.19.5)
|
||||||
set(NUMPY_SHORT_VERSION 1.22)
|
set(NUMPY_SHORT_VERSION 1.19)
|
||||||
set(NUMPY_URI https://github.com/numpy/numpy/releases/download/v${NUMPY_VERSION}/numpy-${NUMPY_VERSION}.zip)
|
set(NUMPY_URI https://github.com/numpy/numpy/releases/download/v${NUMPY_VERSION}/numpy-${NUMPY_VERSION}.zip)
|
||||||
set(NUMPY_HASH 252de134862a27bd66705d29622edbfe)
|
set(NUMPY_HASH f6a1b48717c552bbc18f1adc3cc1fe0e)
|
||||||
set(NUMPY_HASH_TYPE MD5)
|
set(NUMPY_HASH_TYPE MD5)
|
||||||
set(NUMPY_FILE numpy-${NUMPY_VERSION}.zip)
|
set(NUMPY_FILE numpy-${NUMPY_VERSION}.zip)
|
||||||
set(NUMPY_CPE "cpe:2.3:a:numpy:numpy:${NUMPY_VERSION}:*:*:*:*:*:*:*")
|
|
||||||
|
|
||||||
set(LAME_VERSION 3.100)
|
set(LAME_VERSION 3.100)
|
||||||
set(LAME_URI http://downloads.sourceforge.net/project/lame/lame/3.100/lame-${LAME_VERSION}.tar.gz)
|
set(LAME_URI http://downloads.sourceforge.net/project/lame/lame/3.100/lame-${LAME_VERSION}.tar.gz)
|
||||||
set(LAME_HASH 83e260acbe4389b54fe08e0bdbf7cddb)
|
set(LAME_HASH 83e260acbe4389b54fe08e0bdbf7cddb)
|
||||||
set(LAME_HASH_TYPE MD5)
|
set(LAME_HASH_TYPE MD5)
|
||||||
set(LAME_FILE lame-${LAME_VERSION}.tar.gz)
|
set(LAME_FILE lame-${LAME_VERSION}.tar.gz)
|
||||||
set(LAME_CPE "cpe:2.3:a:lame_project:lame:${LAME_VERSION}:*:*:*:*:*:*:*")
|
|
||||||
|
|
||||||
set(OGG_VERSION 1.3.5)
|
set(OGG_VERSION 1.3.4)
|
||||||
set(OGG_URI http://downloads.xiph.org/releases/ogg/libogg-${OGG_VERSION}.tar.gz)
|
set(OGG_URI http://downloads.xiph.org/releases/ogg/libogg-${OGG_VERSION}.tar.gz)
|
||||||
set(OGG_HASH 0eb4b4b9420a0f51db142ba3f9c64b333f826532dc0f48c6410ae51f4799b664)
|
set(OGG_HASH fe5670640bd49e828d64d2879c31cb4dde9758681bb664f9bdbf159a01b0c76e)
|
||||||
set(OGG_HASH_TYPE SHA256)
|
set(OGG_HASH_TYPE SHA256)
|
||||||
set(OGG_FILE libogg-${OGG_VERSION}.tar.gz)
|
set(OGG_FILE libogg-${OGG_VERSION}.tar.gz)
|
||||||
|
|
||||||
set(VORBIS_VERSION 1.3.7)
|
set(VORBIS_VERSION 1.3.6)
|
||||||
set(VORBIS_URI http://downloads.xiph.org/releases/vorbis/libvorbis-${VORBIS_VERSION}.tar.gz)
|
set(VORBIS_URI http://downloads.xiph.org/releases/vorbis/libvorbis-${VORBIS_VERSION}.tar.gz)
|
||||||
set(VORBIS_HASH 0e982409a9c3fc82ee06e08205b1355e5c6aa4c36bca58146ef399621b0ce5ab)
|
set(VORBIS_HASH 6ed40e0241089a42c48604dc00e362beee00036af2d8b3f46338031c9e0351cb)
|
||||||
set(VORBIS_HASH_TYPE SHA256)
|
set(VORBIS_HASH_TYPE SHA256)
|
||||||
set(VORBIS_FILE libvorbis-${VORBIS_VERSION}.tar.gz)
|
set(VORBIS_FILE libvorbis-${VORBIS_VERSION}.tar.gz)
|
||||||
set(VORBIS_CPE "cpe:2.3:a:xiph.org:libvorbis:${VORBIS_VERSION}:*:*:*:*:*:*:*")
|
|
||||||
|
|
||||||
set(THEORA_VERSION 1.1.1)
|
set(THEORA_VERSION 1.1.1)
|
||||||
set(THEORA_URI http://downloads.xiph.org/releases/theora/libtheora-${THEORA_VERSION}.tar.bz2)
|
set(THEORA_URI http://downloads.xiph.org/releases/theora/libtheora-${THEORA_VERSION}.tar.bz2)
|
||||||
@@ -286,19 +260,17 @@ set(THEORA_HASH b6ae1ee2fa3d42ac489287d3ec34c5885730b1296f0801ae577a35193d3affbc
|
|||||||
set(THEORA_HASH_TYPE SHA256)
|
set(THEORA_HASH_TYPE SHA256)
|
||||||
set(THEORA_FILE libtheora-${THEORA_VERSION}.tar.bz2)
|
set(THEORA_FILE libtheora-${THEORA_VERSION}.tar.bz2)
|
||||||
|
|
||||||
set(FLAC_VERSION 1.3.4)
|
set(FLAC_VERSION 1.3.3)
|
||||||
set(FLAC_URI http://downloads.xiph.org/releases/flac/flac-${FLAC_VERSION}.tar.xz)
|
set(FLAC_URI http://downloads.xiph.org/releases/flac/flac-${FLAC_VERSION}.tar.xz)
|
||||||
set(FLAC_HASH 8ff0607e75a322dd7cd6ec48f4f225471404ae2730d0ea945127b1355155e737 )
|
set(FLAC_HASH 213e82bd716c9de6db2f98bcadbc4c24c7e2efe8c75939a1a84e28539c4e1748)
|
||||||
set(FLAC_HASH_TYPE SHA256)
|
set(FLAC_HASH_TYPE SHA256)
|
||||||
set(FLAC_FILE flac-${FLAC_VERSION}.tar.xz)
|
set(FLAC_FILE flac-${FLAC_VERSION}.tar.xz)
|
||||||
set(FLAC_CPE "cpe:2.3:a:flac_project:flac:${FLAC_VERSION}:*:*:*:*:*:*:*")
|
|
||||||
|
|
||||||
set(VPX_VERSION 1.11.0)
|
set(VPX_VERSION 1.8.2)
|
||||||
set(VPX_URI https://github.com/webmproject/libvpx/archive/v${VPX_VERSION}/libvpx-v${VPX_VERSION}.tar.gz)
|
set(VPX_URI https://github.com/webmproject/libvpx/archive/v${VPX_VERSION}/libvpx-v${VPX_VERSION}.tar.gz)
|
||||||
set(VPX_HASH 965e51c91ad9851e2337aebcc0f517440c637c506f3a03948062e3d5ea129a83)
|
set(VPX_HASH 8735d9fcd1a781ae6917f28f239a8aa358ce4864ba113ea18af4bb2dc8b474ac)
|
||||||
set(VPX_HASH_TYPE SHA256)
|
set(VPX_HASH_TYPE SHA256)
|
||||||
set(VPX_FILE libvpx-v${VPX_VERSION}.tar.gz)
|
set(VPX_FILE libvpx-v${VPX_VERSION}.tar.gz)
|
||||||
set(VPX_CPE "cpe:2.3:a:webmproject:libvpx:${VPX_VERSION}:*:*:*:*:*:*:*")
|
|
||||||
|
|
||||||
set(OPUS_VERSION 1.3.1)
|
set(OPUS_VERSION 1.3.1)
|
||||||
set(OPUS_URI https://archive.mozilla.org/pub/opus/opus-${OPUS_VERSION}.tar.gz)
|
set(OPUS_URI https://archive.mozilla.org/pub/opus/opus-${OPUS_VERSION}.tar.gz)
|
||||||
@@ -318,20 +290,18 @@ set(XVIDCORE_HASH abbdcbd39555691dd1c9b4d08f0a031376a3b211652c0d8b3b8aa9be1303ce
|
|||||||
set(XVIDCORE_HASH_TYPE SHA256)
|
set(XVIDCORE_HASH_TYPE SHA256)
|
||||||
set(XVIDCORE_FILE xvidcore-${XVIDCORE_VERSION}.tar.gz)
|
set(XVIDCORE_FILE xvidcore-${XVIDCORE_VERSION}.tar.gz)
|
||||||
|
|
||||||
set(OPENJPEG_VERSION 2.5.0)
|
set(OPENJPEG_VERSION 2.3.1)
|
||||||
set(OPENJPEG_SHORT_VERSION 2.5)
|
set(OPENJPEG_SHORT_VERSION 2.3)
|
||||||
set(OPENJPEG_URI https://github.com/uclouvain/openjpeg/archive/v${OPENJPEG_VERSION}.tar.gz)
|
set(OPENJPEG_URI https://github.com/uclouvain/openjpeg/archive/v${OPENJPEG_VERSION}.tar.gz)
|
||||||
set(OPENJPEG_HASH 0333806d6adecc6f7a91243b2b839ff4d2053823634d4f6ed7a59bc87409122a)
|
set(OPENJPEG_HASH 63f5a4713ecafc86de51bfad89cc07bb788e9bba24ebbf0c4ca637621aadb6a9)
|
||||||
set(OPENJPEG_HASH_TYPE SHA256)
|
set(OPENJPEG_HASH_TYPE SHA256)
|
||||||
set(OPENJPEG_FILE openjpeg-v${OPENJPEG_VERSION}.tar.gz)
|
set(OPENJPEG_FILE openjpeg-v${OPENJPEG_VERSION}.tar.gz)
|
||||||
set(OPENJPEG_CPE "cpe:2.3:a:uclouvain:openjpeg:${OPENJPEG_VERSION}:*:*:*:*:*:*:*")
|
|
||||||
|
|
||||||
set(FFMPEG_VERSION 4.4.3)
|
set(FFMPEG_VERSION 4.4)
|
||||||
set(FFMPEG_URI http://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.bz2)
|
set(FFMPEG_URI http://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.bz2)
|
||||||
set(FFMPEG_HASH 695fad11f3baf27784e24cb0e977b65a)
|
set(FFMPEG_HASH 42093549751b582cf0f338a21a3664f52e0a9fbe0d238d3c992005e493607d0e)
|
||||||
set(FFMPEG_HASH_TYPE MD5)
|
set(FFMPEG_HASH_TYPE SHA256)
|
||||||
set(FFMPEG_FILE ffmpeg-${FFMPEG_VERSION}.tar.bz2)
|
set(FFMPEG_FILE ffmpeg-${FFMPEG_VERSION}.tar.bz2)
|
||||||
set(FFMPEG_CPE "cpe:2.3:a:ffmpeg:ffmpeg:${FFMPEG_VERSION}:*:*:*:*:*:*:*")
|
|
||||||
|
|
||||||
set(FFTW_VERSION 3.3.8)
|
set(FFTW_VERSION 3.3.8)
|
||||||
set(FFTW_URI http://www.fftw.org/fftw-${FFTW_VERSION}.tar.gz)
|
set(FFTW_URI http://www.fftw.org/fftw-${FFTW_VERSION}.tar.gz)
|
||||||
@@ -345,19 +315,17 @@ set(ICONV_HASH 7d2a800b952942bb2880efb00cfd524c)
|
|||||||
set(ICONV_HASH_TYPE MD5)
|
set(ICONV_HASH_TYPE MD5)
|
||||||
set(ICONV_FILE libiconv-${ICONV_VERSION}.tar.gz)
|
set(ICONV_FILE libiconv-${ICONV_VERSION}.tar.gz)
|
||||||
|
|
||||||
set(SNDFILE_VERSION 1.1.0)
|
set(SNDFILE_VERSION 1.0.28)
|
||||||
set(SNDFILE_URI https://github.com/libsndfile/libsndfile/releases/download/1.1.0/libsndfile-${SNDFILE_VERSION}.tar.xz)
|
set(SNDFILE_URI http://www.mega-nerd.com/libsndfile/files/libsndfile-${SNDFILE_VERSION}.tar.gz)
|
||||||
set(SNDFILE_HASH e63dead2b4f0aaf323687619d007ee6a)
|
set(SNDFILE_HASH 646b5f98ce89ac60cdb060fcd398247c)
|
||||||
set(SNDFILE_HASH_TYPE MD5)
|
set(SNDFILE_HASH_TYPE MD5)
|
||||||
set(SNDFILE_FILE libsndfile-${SNDFILE_VERSION}.tar.gz)
|
set(SNDFILE_FILE libsndfile-${SNDFILE_VERSION}.tar.gz)
|
||||||
set(SNDFILE_CPE "cpe:2.3:a:libsndfile_project:libsndfile:${SNDFILE_VERSION}:*:*:*:*:*:*:*")
|
|
||||||
|
|
||||||
set(WEBP_VERSION 1.2.2)
|
set(WEBP_VERSION 0.6.1)
|
||||||
set(WEBP_URI https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-${WEBP_VERSION}.tar.gz)
|
set(WEBP_URI https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-${WEBP_VERSION}.tar.gz)
|
||||||
set(WEBP_HASH b5e2e414a8adee4c25fe56b18dd9c549)
|
set(WEBP_HASH b49ce9c3e3e9acae4d91bca44bb85a72)
|
||||||
set(WEBP_HASH_TYPE MD5)
|
set(WEBP_HASH_TYPE MD5)
|
||||||
set(WEBP_FILE libwebp-${WEBP_VERSION}.tar.gz)
|
set(WEBP_FILE libwebp-${WEBP_VERSION}.tar.gz)
|
||||||
set(WEBP_CPE "cpe:2.3:a:webmproject:libwebp:${WEBP_VERSION}:*:*:*:*:*:*:*")
|
|
||||||
|
|
||||||
set(SPNAV_VERSION 0.2.3)
|
set(SPNAV_VERSION 0.2.3)
|
||||||
set(SPNAV_URI http://downloads.sourceforge.net/project/spacenav/spacenav%20library%20%28SDK%29/libspnav%20${SPNAV_VERSION}/libspnav-${SPNAV_VERSION}.tar.gz)
|
set(SPNAV_URI http://downloads.sourceforge.net/project/spacenav/spacenav%20library%20%28SDK%29/libspnav%20${SPNAV_VERSION}/libspnav-${SPNAV_VERSION}.tar.gz)
|
||||||
@@ -371,34 +339,36 @@ set(JEMALLOC_HASH 3d41fbf006e6ebffd489bdb304d009ae)
|
|||||||
set(JEMALLOC_HASH_TYPE MD5)
|
set(JEMALLOC_HASH_TYPE MD5)
|
||||||
set(JEMALLOC_FILE jemalloc-${JEMALLOC_VERSION}.tar.bz2)
|
set(JEMALLOC_FILE jemalloc-${JEMALLOC_VERSION}.tar.bz2)
|
||||||
|
|
||||||
set(XML2_VERSION 2.10.3)
|
set(XML2_VERSION 2.9.10)
|
||||||
set(XML2_URI https://download.gnome.org/sources/libxml2/2.10/libxml2-${XML2_VERSION}.tar.xz)
|
set(XML2_URI http://xmlsoft.org/sources/libxml2-${XML2_VERSION}.tar.gz)
|
||||||
set(XML2_HASH f9edac7fac232b3657a003fd9a5bbe42)
|
set(XML2_HASH 10942a1dc23137a8aa07f0639cbfece5)
|
||||||
set(XML2_HASH_TYPE MD5)
|
set(XML2_HASH_TYPE MD5)
|
||||||
set(XML2_FILE libxml2-${XML2_VERSION}.tar.xz)
|
set(XML2_FILE libxml2-${XML2_VERSION}.tar.gz)
|
||||||
set(XML2_CPE "cpe:2.3:a:xmlsoft:libxml2:${XML2_VERSION}:*:*:*:*:*:*:*")
|
|
||||||
|
set(TINYXML_VERSION 2_6_2)
|
||||||
|
set(TINYXML_VERSION_DOTS 2.6.2)
|
||||||
|
set(TINYXML_URI https://nchc.dl.sourceforge.net/project/tinyxml/tinyxml/${TINYXML_VERSION_DOTS}/tinyxml_${TINYXML_VERSION}.tar.gz)
|
||||||
|
set(TINYXML_HASH c1b864c96804a10526540c664ade67f0)
|
||||||
|
set(TINYXML_HASH_TYPE MD5)
|
||||||
|
set(TINYXML_FILE tinyxml_${TINYXML_VERSION}.tar.gz)
|
||||||
|
|
||||||
set(YAMLCPP_VERSION 0.6.3)
|
set(YAMLCPP_VERSION 0.6.3)
|
||||||
set(YAMLCPP_URI https://codeload.github.com/jbeder/yaml-cpp/tar.gz/yaml-cpp-${YAMLCPP_VERSION})
|
set(YAMLCPP_URI https://codeload.github.com/jbeder/yaml-cpp/tar.gz/yaml-cpp-${YAMLCPP_VERSION})
|
||||||
set(YAMLCPP_HASH b45bf1089a382e81f6b661062c10d0c2)
|
set(YAMLCPP_HASH b45bf1089a382e81f6b661062c10d0c2)
|
||||||
set(YAMLCPP_HASH_TYPE MD5)
|
set(YAMLCPP_HASH_TYPE MD5)
|
||||||
set(YAMLCPP_FILE yaml-cpp-${YAMLCPP_VERSION}.tar.gz)
|
set(YAMLCPP_FILE yaml-cpp-${YAMLCPP_VERSION}.tar.gz)
|
||||||
set(YAMLCPP "cpe:2.3:a:yaml-cpp_project:yaml-cpp:${YAMLCPP_VERSION}:*:*:*:*:*:*:*")
|
|
||||||
|
|
||||||
set(EXPAT_VERSION 2_5_0)
|
set(EXPAT_VERSION 2_2_10)
|
||||||
set(EXPAT_VERSION_DOTS 2.5.0)
|
|
||||||
set(EXPAT_URI https://github.com/libexpat/libexpat/archive/R_${EXPAT_VERSION}.tar.gz)
|
set(EXPAT_URI https://github.com/libexpat/libexpat/archive/R_${EXPAT_VERSION}.tar.gz)
|
||||||
set(EXPAT_HASH d375fa3571c0abb945873f5061a8f2e2)
|
set(EXPAT_HASH 7ca5f09959fcb9a57618368deb627b9f)
|
||||||
set(EXPAT_HASH_TYPE MD5)
|
set(EXPAT_HASH_TYPE MD5)
|
||||||
set(EXPAT_FILE libexpat-${EXPAT_VERSION}.tar.gz)
|
set(EXPAT_FILE libexpat-${EXPAT_VERSION}.tar.gz)
|
||||||
set(EXPAT_CPE "cpe:2.3:a:libexpat_project:libexpat:${EXPAT_VERSION_DOTS}:*:*:*:*:*:*:*")
|
|
||||||
|
|
||||||
set(PUGIXML_VERSION 1.10)
|
set(PUGIXML_VERSION 1.10)
|
||||||
set(PUGIXML_URI https://github.com/zeux/pugixml/archive/v${PUGIXML_VERSION}.tar.gz)
|
set(PUGIXML_URI https://github.com/zeux/pugixml/archive/v${PUGIXML_VERSION}.tar.gz)
|
||||||
set(PUGIXML_HASH 0c208b0664c7fb822bf1b49ad035e8fd)
|
set(PUGIXML_HASH 0c208b0664c7fb822bf1b49ad035e8fd)
|
||||||
set(PUGIXML_HASH_TYPE MD5)
|
set(PUGIXML_HASH_TYPE MD5)
|
||||||
set(PUGIXML_FILE pugixml-${PUGIXML_VERSION}.tar.gz)
|
set(PUGIXML_FILE pugixml-${PUGIXML_VERSION}.tar.gz)
|
||||||
set(PUGIXML_CPE "cpe:2.3:a:pugixml_project:pugixml:${PUGIXML_VERSION}:*:*:*:*:*:*:*")
|
|
||||||
|
|
||||||
set(FLEXBISON_VERSION 2.5.5)
|
set(FLEXBISON_VERSION 2.5.5)
|
||||||
set(FLEXBISON_URI http://prdownloads.sourceforge.net/winflexbison/win_flex_bison-${FLEXBISON_VERSION}.zip)
|
set(FLEXBISON_URI http://prdownloads.sourceforge.net/winflexbison/win_flex_bison-${FLEXBISON_VERSION}.zip)
|
||||||
@@ -410,26 +380,17 @@ set(FLEXBISON_FILE win_flex_bison-${FLEXBISON_VERSION}.zip)
|
|||||||
|
|
||||||
# NOTE: bzip.org domain does no longer belong to BZip 2 project, so we download
|
# NOTE: bzip.org domain does no longer belong to BZip 2 project, so we download
|
||||||
# sources from Debian packaging.
|
# sources from Debian packaging.
|
||||||
#
|
|
||||||
# NOTE 2: This will *HAVE* to match the version python ships on windows which
|
|
||||||
# is hardcoded in pythons PCbuild/get_externals.bat. For compliance reasons there
|
|
||||||
# can be no exceptions to this.
|
|
||||||
set(BZIP2_VERSION 1.0.8)
|
set(BZIP2_VERSION 1.0.8)
|
||||||
set(BZIP2_URI http://http.debian.net/debian/pool/main/b/bzip2/bzip2_${BZIP2_VERSION}.orig.tar.gz)
|
set(BZIP2_URI http://http.debian.net/debian/pool/main/b/bzip2/bzip2_${BZIP2_VERSION}.orig.tar.gz)
|
||||||
set(BZIP2_HASH ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269)
|
set(BZIP2_HASH ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269)
|
||||||
set(BZIP2_HASH_TYPE SHA256)
|
set(BZIP2_HASH_TYPE SHA256)
|
||||||
set(BZIP2_FILE bzip2_${BZIP2_VERSION}.orig.tar.gz)
|
set(BZIP2_FILE bzip2_${BZIP2_VERSION}.orig.tar.gz)
|
||||||
set(BZIP2_CPE "cpe:2.3:a:bzip:bzip2:${BZIP2_VERSION}:*:*:*:*:*:*:*")
|
|
||||||
|
|
||||||
# NOTE: This will *HAVE* to match the version python ships on windows which
|
|
||||||
# is hardcoded in pythons PCbuild/get_externals.bat. For compliance reasons there
|
|
||||||
# can be no exceptions to this.
|
|
||||||
set(FFI_VERSION 3.3)
|
set(FFI_VERSION 3.3)
|
||||||
set(FFI_URI https://sourceware.org/pub/libffi/libffi-${FFI_VERSION}.tar.gz)
|
set(FFI_URI https://sourceware.org/pub/libffi/libffi-${FFI_VERSION}.tar.gz)
|
||||||
set(FFI_HASH 72fba7922703ddfa7a028d513ac15a85c8d54c8d67f55fa5a4802885dc652056)
|
set(FFI_HASH 72fba7922703ddfa7a028d513ac15a85c8d54c8d67f55fa5a4802885dc652056)
|
||||||
set(FFI_HASH_TYPE SHA256)
|
set(FFI_HASH_TYPE SHA256)
|
||||||
set(FFI_FILE libffi-${FFI_VERSION}.tar.gz)
|
set(FFI_FILE libffi-${FFI_VERSION}.tar.gz)
|
||||||
set(FFI_CPE "cpe:2.3:a:libffi_project:libffi:${FFI_VERSION}:*:*:*:*:*:*:*")
|
|
||||||
|
|
||||||
set(LZMA_VERSION 5.2.5)
|
set(LZMA_VERSION 5.2.5)
|
||||||
set(LZMA_URI https://tukaani.org/xz/xz-${LZMA_VERSION}.tar.bz2)
|
set(LZMA_URI https://tukaani.org/xz/xz-${LZMA_VERSION}.tar.bz2)
|
||||||
@@ -437,26 +398,26 @@ set(LZMA_HASH 5117f930900b341493827d63aa910ff5e011e0b994197c3b71c08a20228a42df)
|
|||||||
set(LZMA_HASH_TYPE SHA256)
|
set(LZMA_HASH_TYPE SHA256)
|
||||||
set(LZMA_FILE xz-${LZMA_VERSION}.tar.bz2)
|
set(LZMA_FILE xz-${LZMA_VERSION}.tar.bz2)
|
||||||
|
|
||||||
# NOTE: This will *HAVE* to match the version python ships on windows which
|
if(BLENDER_PLATFORM_ARM)
|
||||||
# is hardcoded in pythons PCbuild/get_externals.bat. For compliance reasons there
|
# Need at least 1.1.1i for aarch64 support (https://github.com/openssl/openssl/pull/13218)
|
||||||
# can be no exceptions to this.
|
set(SSL_VERSION 1.1.1i)
|
||||||
set(SSL_VERSION 1.1.1q)
|
|
||||||
set(SSL_URI https://www.openssl.org/source/openssl-${SSL_VERSION}.tar.gz)
|
set(SSL_URI https://www.openssl.org/source/openssl-${SSL_VERSION}.tar.gz)
|
||||||
set(SSL_HASH d7939ce614029cdff0b6c20f0e2e5703158a489a72b2507b8bd51bf8c8fd10ca)
|
set(SSL_HASH e8be6a35fe41d10603c3cc635e93289ed00bf34b79671a3a4de64fcee00d5242)
|
||||||
set(SSL_HASH_TYPE SHA256)
|
set(SSL_HASH_TYPE SHA256)
|
||||||
set(SSL_FILE openssl-${SSL_VERSION}.tar.gz)
|
set(SSL_FILE openssl-${SSL_VERSION}.tar.gz)
|
||||||
set(SSL_CPE "cpe:2.3:a:openssl:openssl:${SSL_VERSION}:*:*:*:*:*:*:*")
|
else()
|
||||||
|
set(SSL_VERSION 1.1.1g)
|
||||||
|
set(SSL_URI https://www.openssl.org/source/openssl-${SSL_VERSION}.tar.gz)
|
||||||
|
set(SSL_HASH ddb04774f1e32f0c49751e21b67216ac87852ceb056b75209af2443400636d46)
|
||||||
|
set(SSL_HASH_TYPE SHA256)
|
||||||
|
set(SSL_FILE openssl-${SSL_VERSION}.tar.gz)
|
||||||
|
endif()
|
||||||
|
|
||||||
# Note: This will *HAVE* to match the version python ships on windows which
|
set(SQLITE_VERSION 3.31.1)
|
||||||
# is hardcoded in pythons PCbuild/get_externals.bat for compliance reasons there
|
set(SQLITE_URI https://www.sqlite.org/2018/sqlite-src-3240000.zip)
|
||||||
# can be no exceptions to this.
|
set(SQLITE_HASH fb558c49ee21a837713c4f1e7e413309aabdd9c7)
|
||||||
set(SQLITE_VERSION 3.37.2)
|
|
||||||
set(SQLLITE_LONG_VERSION 3370200)
|
|
||||||
set(SQLITE_URI https://www.sqlite.org/2022/sqlite-autoconf-${SQLLITE_LONG_VERSION}.tar.gz)
|
|
||||||
set(SQLITE_HASH e56faacadfb4154f8fbd0f2a3f827d13706b70a1)
|
|
||||||
set(SQLITE_HASH_TYPE SHA1)
|
set(SQLITE_HASH_TYPE SHA1)
|
||||||
set(SQLITE_FILE sqlite-autoconf-${SQLLITE_LONG_VERSION}.tar.gz)
|
set(SQLITE_FILE sqlite-src-3240000.zip)
|
||||||
set(SQLITE_CPE "cpe:2.3:a:sqlite:sqlite:${SQLITE_VERSION}:*:*:*:*:*:*:*")
|
|
||||||
|
|
||||||
set(EMBREE_VERSION 3.10.0)
|
set(EMBREE_VERSION 3.10.0)
|
||||||
set(EMBREE_URI https://github.com/embree/embree/archive/v${EMBREE_VERSION}.zip)
|
set(EMBREE_URI https://github.com/embree/embree/archive/v${EMBREE_VERSION}.zip)
|
||||||
@@ -471,9 +432,9 @@ set(USD_HASH 1dd1e2092d085ed393c1f7c450a4155a)
|
|||||||
set(USD_HASH_TYPE MD5)
|
set(USD_HASH_TYPE MD5)
|
||||||
set(USD_FILE usd-v${USD_VERSION}.tar.gz)
|
set(USD_FILE usd-v${USD_VERSION}.tar.gz)
|
||||||
|
|
||||||
set(OIDN_VERSION 1.3.0)
|
set(OIDN_VERSION 1.4.0)
|
||||||
set(OIDN_URI https://github.com/OpenImageDenoise/oidn/releases/download/v${OIDN_VERSION}/oidn-${OIDN_VERSION}.src.tar.gz)
|
set(OIDN_URI https://github.com/OpenImageDenoise/oidn/releases/download/v${OIDN_VERSION}/oidn-${OIDN_VERSION}.src.tar.gz)
|
||||||
set(OIDN_HASH 301a5a0958d375a942014df0679b9270)
|
set(OIDN_HASH 421824019becc5b664a22a2b98332bc5)
|
||||||
set(OIDN_HASH_TYPE MD5)
|
set(OIDN_HASH_TYPE MD5)
|
||||||
set(OIDN_FILE oidn-${OIDN_VERSION}.src.tar.gz)
|
set(OIDN_FILE oidn-${OIDN_VERSION}.src.tar.gz)
|
||||||
|
|
||||||
@@ -488,22 +449,26 @@ set(MESA_URI ftp://ftp.freedesktop.org/pub/mesa/mesa-${MESA_VERSION}.tar.xz)
|
|||||||
set(MESA_HASH 556338446aef8ae947a789b3e0b5e056)
|
set(MESA_HASH 556338446aef8ae947a789b3e0b5e056)
|
||||||
set(MESA_HASH_TYPE MD5)
|
set(MESA_HASH_TYPE MD5)
|
||||||
set(MESA_FILE mesa-${MESA_VERSION}.tar.xz)
|
set(MESA_FILE mesa-${MESA_VERSION}.tar.xz)
|
||||||
set(MESA_CPE "cpe:2.3:a:mesa3d:mesa:${MESA_VERSION}:*:*:*:*:*:*:*")
|
|
||||||
|
|
||||||
set(NASM_VERSION 2.15.02)
|
set(NASM_VERSION 2.15.02)
|
||||||
set(NASM_URI https://github.com/netwide-assembler/nasm/archive/nasm-${NASM_VERSION}.tar.gz)
|
set(NASM_URI https://github.com/netwide-assembler/nasm/archive/nasm-${NASM_VERSION}.tar.gz)
|
||||||
set(NASM_HASH aded8b796c996a486a56e0515c83e414116decc3b184d88043480b32eb0a8589)
|
set(NASM_HASH aded8b796c996a486a56e0515c83e414116decc3b184d88043480b32eb0a8589)
|
||||||
set(NASM_HASH_TYPE SHA256)
|
set(NASM_HASH_TYPE SHA256)
|
||||||
set(NASM_FILE nasm-${NASM_VERSION}.tar.gz)
|
set(NASM_FILE nasm-${NASM_VERSION}.tar.gz)
|
||||||
set(NASM_PCE "cpe:2.3:a:nasm:nasm:${NASM_VERSION}:*:*:*:*:*:*:*")
|
|
||||||
|
|
||||||
set(XR_OPENXR_SDK_VERSION 1.0.14)
|
set(XR_OPENXR_SDK_VERSION 1.0.17)
|
||||||
set(XR_OPENXR_SDK_URI https://github.com/KhronosGroup/OpenXR-SDK/archive/release-${XR_OPENXR_SDK_VERSION}.tar.gz)
|
set(XR_OPENXR_SDK_URI https://github.com/KhronosGroup/OpenXR-SDK/archive/release-${XR_OPENXR_SDK_VERSION}.tar.gz)
|
||||||
set(XR_OPENXR_SDK_HASH 0df6b2fd6045423451a77ff6bc3e1a75)
|
set(XR_OPENXR_SDK_HASH bf0fd8828837edff01047474e90013e1)
|
||||||
set(XR_OPENXR_SDK_HASH_TYPE MD5)
|
set(XR_OPENXR_SDK_HASH_TYPE MD5)
|
||||||
set(XR_OPENXR_SDK_FILE OpenXR-SDK-${XR_OPENXR_SDK_VERSION}.tar.gz)
|
set(XR_OPENXR_SDK_FILE OpenXR-SDK-${XR_OPENXR_SDK_VERSION}.tar.gz)
|
||||||
|
|
||||||
if(APPLE AND ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64"))
|
set(WL_PROTOCOLS_VERSION 1.21)
|
||||||
|
set(WL_PROTOCOLS_FILE wayland-protocols-${WL_PROTOCOLS_VERSION}.tar.gz)
|
||||||
|
set(WL_PROTOCOLS_URI https://gitlab.freedesktop.org/wayland/wayland-protocols/-/archive/${WL_PROTOCOLS_VERSION}/${WL_PROTOCOLS_FILE})
|
||||||
|
set(WL_PROTOCOLS_HASH af5ca07e13517cdbab33504492cef54a)
|
||||||
|
set(WL_PROTOCOLS_HASH_TYPE MD5)
|
||||||
|
|
||||||
|
if(BLENDER_PLATFORM_ARM)
|
||||||
# Unreleased version with macOS arm support.
|
# Unreleased version with macOS arm support.
|
||||||
set(ISPC_URI https://github.com/ispc/ispc/archive/f5949c055eb9eeb93696978a3da4bfb3a6a30b35.zip)
|
set(ISPC_URI https://github.com/ispc/ispc/archive/f5949c055eb9eeb93696978a3da4bfb3a6a30b35.zip)
|
||||||
set(ISPC_HASH d382fea18d01dbd0cd05d9e1ede36d7d)
|
set(ISPC_HASH d382fea18d01dbd0cd05d9e1ede36d7d)
|
||||||
@@ -522,14 +487,12 @@ set(GMP_URI https://gmplib.org/download/gmp/gmp-${GMP_VERSION}.tar.xz)
|
|||||||
set(GMP_HASH a325e3f09e6d91e62101e59f9bda3ec1)
|
set(GMP_HASH a325e3f09e6d91e62101e59f9bda3ec1)
|
||||||
set(GMP_HASH_TYPE MD5)
|
set(GMP_HASH_TYPE MD5)
|
||||||
set(GMP_FILE gmp-${GMP_VERSION}.tar.xz)
|
set(GMP_FILE gmp-${GMP_VERSION}.tar.xz)
|
||||||
set(GMP_CPE "cpe:2.3:a:gmplib:gmp:${GMP_VERSION}:*:*:*:*:*:*:*")
|
|
||||||
|
|
||||||
set(POTRACE_VERSION 1.16)
|
set(POTRACE_VERSION 1.16)
|
||||||
set(POTRACE_URI http://potrace.sourceforge.net/download/${POTRACE_VERSION}/potrace-${POTRACE_VERSION}.tar.gz)
|
set(POTRACE_URI http://potrace.sourceforge.net/download/${POTRACE_VERSION}/potrace-${POTRACE_VERSION}.tar.gz)
|
||||||
set(POTRACE_HASH 5f0bd87ddd9a620b0c4e65652ef93d69)
|
set(POTRACE_HASH 5f0bd87ddd9a620b0c4e65652ef93d69)
|
||||||
set(POTRACE_HASH_TYPE MD5)
|
set(POTRACE_HASH_TYPE MD5)
|
||||||
set(POTRACE_FILE potrace-${POTRACE_VERSION}.tar.gz)
|
set(POTRACE_FILE potrace-${POTRACE_VERSION}.tar.gz)
|
||||||
set(POTRACE_CPE "cpe:2.3:a:icoasoft:potrace:${POTRACE_VERSION}:*:*:*:*:*:*:*")
|
|
||||||
|
|
||||||
set(HARU_VERSION 2_3_0)
|
set(HARU_VERSION 2_3_0)
|
||||||
set(HARU_URI https://github.com/libharu/libharu/archive/RELEASE_${HARU_VERSION}.tar.gz)
|
set(HARU_URI https://github.com/libharu/libharu/archive/RELEASE_${HARU_VERSION}.tar.gz)
|
||||||
@@ -537,5 +500,11 @@ set(HARU_HASH 4f916aa49c3069b3a10850013c507460)
|
|||||||
set(HARU_HASH_TYPE MD5)
|
set(HARU_HASH_TYPE MD5)
|
||||||
set(HARU_FILE libharu-${HARU_VERSION}.tar.gz)
|
set(HARU_FILE libharu-${HARU_VERSION}.tar.gz)
|
||||||
|
|
||||||
|
set(ZSTD_VERSION 1.5.0)
|
||||||
|
set(ZSTD_URI https://github.com/facebook/zstd/releases/download/v${ZSTD_VERSION}/zstd-${ZSTD_VERSION}.tar.gz)
|
||||||
|
set(ZSTD_HASH 5194fbfa781fcf45b98c5e849651aa7b3b0a008c6b72d4a0db760f3002291e94)
|
||||||
|
set(ZSTD_HASH_TYPE SHA256)
|
||||||
|
set(ZSTD_FILE zstd-${ZSTD_VERSION}.tar.gz)
|
||||||
|
|
||||||
set(SSE2NEON_GIT https://github.com/DLTcollab/sse2neon.git)
|
set(SSE2NEON_GIT https://github.com/DLTcollab/sse2neon.git)
|
||||||
set(SSE2NEON_GIT_HASH fe5ff00bb8d19b327714a3c290f3e2ce81ba3525)
|
set(SSE2NEON_GIT_HASH fe5ff00bb8d19b327714a3c290f3e2ce81ba3525)
|
||||||
|
27
build_files/build_environment/cmake/wayland_protocols.cmake
Normal file
27
build_files/build_environment/cmake/wayland_protocols.cmake
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
# ***** BEGIN GPL LICENSE BLOCK *****
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or
|
||||||
|
# modify it under the terms of the GNU General Public License
|
||||||
|
# as published by the Free Software Foundation; either version 2
|
||||||
|
# of the License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software Foundation,
|
||||||
|
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
#
|
||||||
|
# ***** END GPL LICENSE BLOCK *****
|
||||||
|
|
||||||
|
ExternalProject_Add(external_wayland_protocols
|
||||||
|
URL file://${PACKAGE_DIR}/${WL_PROTOCOLS_FILE}
|
||||||
|
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
||||||
|
URL_HASH ${WL_PROTOCOLS_HASH_TYPE}=${WL_PROTOCOLS_HASH}
|
||||||
|
PREFIX ${BUILD_DIR}/wayland-protocols
|
||||||
|
CONFIGURE_COMMAND meson --prefix ${LIBDIR}/wayland-protocols . ../external_wayland_protocols -Dtests=false
|
||||||
|
BUILD_COMMAND ninja
|
||||||
|
INSTALL_COMMAND ninja install
|
||||||
|
)
|
@@ -20,24 +20,16 @@ if(WIN32)
|
|||||||
set(X264_EXTRA_ARGS --enable-win32thread --cross-prefix=${MINGW_HOST}- --host=${MINGW_HOST})
|
set(X264_EXTRA_ARGS --enable-win32thread --cross-prefix=${MINGW_HOST}- --host=${MINGW_HOST})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(BLENDER_PLATFORM_ARM)
|
||||||
if(APPLE)
|
|
||||||
if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64")
|
|
||||||
set(X264_EXTRA_ARGS ${X264_EXTRA_ARGS} "--disable-asm")
|
set(X264_EXTRA_ARGS ${X264_EXTRA_ARGS} "--disable-asm")
|
||||||
set(X264_CONFIGURE_ENV echo .)
|
|
||||||
else()
|
|
||||||
set(X264_CONFIGURE_ENV
|
|
||||||
export AS=${LIBDIR}/nasm/bin/nasm
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
else()
|
|
||||||
set(X264_CONFIGURE_ENV echo .)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(UNIX AND NOT APPLE)
|
if((APPLE AND NOT BLENDER_PLATFORM_ARM) OR (UNIX AND NOT APPLE))
|
||||||
set(X264_CONFIGURE_ENV
|
set(X264_CONFIGURE_ENV
|
||||||
export AS=${LIBDIR}/nasm/bin/nasm
|
export AS=${LIBDIR}/nasm/bin/nasm
|
||||||
)
|
)
|
||||||
|
else()
|
||||||
|
set(X264_CONFIGURE_ENV echo .)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
ExternalProject_Add(external_x264
|
ExternalProject_Add(external_x264
|
||||||
|
@@ -16,25 +16,6 @@
|
|||||||
#
|
#
|
||||||
# ***** END GPL LICENSE BLOCK *****
|
# ***** END GPL LICENSE BLOCK *****
|
||||||
|
|
||||||
if(WIN32)
|
|
||||||
set(XML2_EXTRA_ARGS
|
|
||||||
-DLIBXML2_WITH_ZLIB=OFF
|
|
||||||
-DLIBXML2_WITH_LZMA=OFF
|
|
||||||
-DLIBXML2_WITH_PYTHON=OFF
|
|
||||||
-DLIBXML2_WITH_ICONV=OFF
|
|
||||||
-DLIBXML2_WITH_TESTS=OFF
|
|
||||||
-DLIBXML2_WITH_PROGRAMS=OFF
|
|
||||||
-DBUILD_SHARED_LIBS=OFF
|
|
||||||
)
|
|
||||||
ExternalProject_Add(external_xml2
|
|
||||||
URL file://${PACKAGE_DIR}/${XML2_FILE}
|
|
||||||
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
|
||||||
URL_HASH ${XML2_HASH_TYPE}=${XML2_HASH}
|
|
||||||
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/xml2 ${DEFAULT_CMAKE_FLAGS} ${XML2_EXTRA_ARGS}
|
|
||||||
PREFIX ${BUILD_DIR}/xml2
|
|
||||||
INSTALL_DIR ${LIBDIR}/xml2
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
ExternalProject_Add(external_xml2
|
ExternalProject_Add(external_xml2
|
||||||
URL file://${PACKAGE_DIR}/${XML2_FILE}
|
URL file://${PACKAGE_DIR}/${XML2_FILE}
|
||||||
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
||||||
@@ -53,12 +34,3 @@ else()
|
|||||||
INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/xml2/src/external_xml2/ && make install
|
INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/xml2/src/external_xml2/ && make install
|
||||||
INSTALL_DIR ${LIBDIR}/xml2
|
INSTALL_DIR ${LIBDIR}/xml2
|
||||||
)
|
)
|
||||||
endif()
|
|
||||||
|
|
||||||
if(WIN32 AND BUILD_MODE STREQUAL Release)
|
|
||||||
ExternalProject_Add_Step(external_xml2 after_install
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/xml2/include ${HARVEST_TARGET}/xml2/include
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/xml2/lib/libxml2s.lib ${HARVEST_TARGET}/xml2/lib/libxml2s.lib
|
|
||||||
DEPENDEES install
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
51
build_files/build_environment/cmake/zstd.cmake
Normal file
51
build_files/build_environment/cmake/zstd.cmake
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
# ***** BEGIN GPL LICENSE BLOCK *****
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or
|
||||||
|
# modify it under the terms of the GNU General Public License
|
||||||
|
# as published by the Free Software Foundation; either version 2
|
||||||
|
# of the License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software Foundation,
|
||||||
|
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
#
|
||||||
|
# ***** END GPL LICENSE BLOCK *****
|
||||||
|
|
||||||
|
set(ZSTD_EXTRA_ARGS
|
||||||
|
-DZSTD_BUILD_PROGRAMS=OFF
|
||||||
|
-DZSTD_BUILD_SHARED=OFF
|
||||||
|
-DZSTD_BUILD_STATIC=ON
|
||||||
|
-DZSTD_BUILD_TESTS=OFF
|
||||||
|
-DZSTD_LEGACY_SUPPORT=OFF
|
||||||
|
-DZSTD_LZ4_SUPPORT=OFF
|
||||||
|
-DZSTD_LZMA_SUPPORT=OFF
|
||||||
|
-DZSTD_MULTITHREAD_SUPPORT=ON
|
||||||
|
-DZSTD_PROGRAMS_LINK_SHARED=OFF
|
||||||
|
-DZSTD_USE_STATIC_RUNTIME=OFF
|
||||||
|
-DZSTD_ZLIB_SUPPORT=OFF
|
||||||
|
)
|
||||||
|
|
||||||
|
ExternalProject_Add(external_zstd
|
||||||
|
URL file://${PACKAGE_DIR}/${ZSTD_FILE}
|
||||||
|
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
||||||
|
URL_HASH ${ZSTD_HASH_TYPE}=${ZSTD_HASH}
|
||||||
|
PREFIX ${BUILD_DIR}/zstd
|
||||||
|
SOURCE_SUBDIR build/cmake
|
||||||
|
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/zstd ${DEFAULT_CMAKE_FLAGS} ${ZSTD_EXTRA_ARGS}
|
||||||
|
INSTALL_DIR ${LIBDIR}/zstd
|
||||||
|
)
|
||||||
|
|
||||||
|
if(WIN32)
|
||||||
|
if(BUILD_MODE STREQUAL Release)
|
||||||
|
ExternalProject_Add_Step(external_zstd after_install
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/zstd/lib/zstd_static${LIBEXT} ${HARVEST_TARGET}/zstd/lib/zstd_static${LIBEXT}
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/zstd/include/ ${HARVEST_TARGET}/zstd/include/
|
||||||
|
DEPENDEES install
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
endif()
|
@@ -1,76 +1,38 @@
|
|||||||
strict graph {
|
strict graph {
|
||||||
graph[autosize = false, size = "25.7,8.3!", resolution = 300];
|
graph[autosize = false, size = "25.7,8.3!", resolution = 300, overlap = false, splines = false, outputorder=edgesfirst ];
|
||||||
|
node [style=filled fillcolor=white];
|
||||||
|
external_alembic -- external_boost;
|
||||||
|
external_alembic -- external_zlib;
|
||||||
external_alembic -- external_openexr;
|
external_alembic -- external_openexr;
|
||||||
external_alembic -- external_imath;
|
|
||||||
external_blosc -- external_zlib;
|
external_blosc -- external_zlib;
|
||||||
external_blosc -- external_pthreads;
|
external_blosc -- external_pthreads;
|
||||||
external_boost -- external_python;
|
external_boost -- Make_Python_Environment;
|
||||||
external_boost -- external_numpy;
|
external_clang -- ll;
|
||||||
external_dpcpp -- external_python;
|
|
||||||
external_dpcpp -- external_python_site_packages;
|
|
||||||
external_dpcpp -- external_vcintrinsics;
|
|
||||||
external_dpcpp -- external_openclheaders;
|
|
||||||
external_dpcpp -- external_icdloader;
|
|
||||||
external_dpcpp -- external_mp11;
|
|
||||||
external_dpcpp -- external_level_zero;
|
|
||||||
external_dpcpp -- external_spirvheaders;
|
|
||||||
external_embree -- external_tbb;
|
|
||||||
external_ffmpeg -- external_zlib;
|
external_ffmpeg -- external_zlib;
|
||||||
|
external_ffmpeg -- external_faad;
|
||||||
external_ffmpeg -- external_openjpeg;
|
external_ffmpeg -- external_openjpeg;
|
||||||
external_ffmpeg -- external_xvidcore;
|
external_ffmpeg -- external_xvidcore;
|
||||||
external_ffmpeg -- external_x264;
|
external_ffmpeg -- external_x264;
|
||||||
external_ffmpeg -- external_opus;
|
|
||||||
external_ffmpeg -- external_vpx;
|
external_ffmpeg -- external_vpx;
|
||||||
external_ffmpeg -- external_theora;
|
external_ffmpeg -- external_theora;
|
||||||
external_ffmpeg -- external_vorbis;
|
external_ffmpeg -- external_vorbis;
|
||||||
external_ffmpeg -- external_ogg;
|
external_ffmpeg -- external_ogg;
|
||||||
external_ffmpeg -- external_lame;
|
external_ffmpeg -- external_lame;
|
||||||
external_ffmpeg -- external_aom;
|
|
||||||
external_ffmpeg -- external_zlib_mingw;
|
external_ffmpeg -- external_zlib_mingw;
|
||||||
external_ffmpeg -- external_nasm;
|
external_numpy -- Make_Python_Environment;
|
||||||
external_freetype -- external_brotli;
|
|
||||||
external_freetype -- external_zlib;
|
|
||||||
external_gmpxx -- external_gmp;
|
|
||||||
external_igc_llvm -- external_igc_opencl_clang;
|
|
||||||
external_igc_spirv_translator -- external_igc_opencl_clang;
|
|
||||||
external_igc -- external_igc_vcintrinsics;
|
|
||||||
external_igc -- external_igc_llvm;
|
|
||||||
external_igc -- external_igc_opencl_clang;
|
|
||||||
external_igc -- external_igc_vcintrinsics;
|
|
||||||
external_igc -- external_igc_spirv_headers;
|
|
||||||
external_igc -- external_igc_spirv_tools;
|
|
||||||
external_igc -- external_igc_spirv_translator;
|
|
||||||
external_igc -- external_flex;
|
|
||||||
external_ispc -- ll;
|
|
||||||
external_ispc -- external_python;
|
|
||||||
external_ispc -- external_flexbison;
|
|
||||||
external_ispc -- external_flex;
|
|
||||||
ll -- external_xml2;
|
|
||||||
ll -- external_python;
|
|
||||||
external_mesa -- ll;
|
|
||||||
external_numpy -- external_python;
|
|
||||||
external_numpy -- external_python_site_packages;
|
|
||||||
external_ocloc -- external_igc;
|
|
||||||
external_ocloc -- external_gmmlib;
|
|
||||||
external_opencollada -- external_xml2;
|
external_opencollada -- external_xml2;
|
||||||
|
external_opencolorio -- external_boost;
|
||||||
|
external_opencolorio -- external_tinyxml;
|
||||||
external_opencolorio -- external_yamlcpp;
|
external_opencolorio -- external_yamlcpp;
|
||||||
external_opencolorio -- external_expat;
|
|
||||||
external_opencolorio -- external_imath;
|
|
||||||
external_opencolorio -- external_pystring;
|
|
||||||
external_openexr -- external_zlib;
|
external_openexr -- external_zlib;
|
||||||
external_openimagedenoise -- external_tbb;
|
|
||||||
external_openimagedenoise -- external_ispc;
|
|
||||||
external_openimagedenoise -- external_python;
|
|
||||||
external_openimageio -- external_png;
|
external_openimageio -- external_png;
|
||||||
external_openimageio -- external_zlib;
|
external_openimageio -- external_zlib;
|
||||||
external_openimageio -- external_openexr;
|
external_openimageio -- external_openexr;
|
||||||
external_openimageio -- external_imath;
|
external_openimageio -- external_openexr;
|
||||||
external_openimageio -- external_jpeg;
|
external_openimageio -- external_jpeg;
|
||||||
external_openimageio -- external_boost;
|
external_openimageio -- external_boost;
|
||||||
external_openimageio -- external_tiff;
|
external_openimageio -- external_tiff;
|
||||||
external_openimageio -- external_pugixml;
|
external_openimageio -- external_opencolorio;
|
||||||
external_openimageio -- external_fmt;
|
|
||||||
external_openimageio -- external_robinmap;
|
|
||||||
external_openimageio -- external_openjpeg;
|
external_openimageio -- external_openjpeg;
|
||||||
external_openimageio -- external_webp;
|
external_openimageio -- external_webp;
|
||||||
external_openimageio -- external_opencolorio_extra;
|
external_openimageio -- external_opencolorio_extra;
|
||||||
@@ -82,37 +44,57 @@ graph[autosize = false, size = "25.7,8.3!", resolution = 300];
|
|||||||
external_opensubdiv -- external_tbb;
|
external_opensubdiv -- external_tbb;
|
||||||
openvdb -- external_tbb;
|
openvdb -- external_tbb;
|
||||||
openvdb -- external_boost;
|
openvdb -- external_boost;
|
||||||
|
openvdb -- external_openexr;
|
||||||
|
openvdb -- external_openexr;
|
||||||
openvdb -- external_zlib;
|
openvdb -- external_zlib;
|
||||||
openvdb -- external_blosc;
|
openvdb -- external_blosc;
|
||||||
external_osl -- external_boost;
|
external_osl -- external_boost;
|
||||||
external_osl -- ll;
|
external_osl -- ll;
|
||||||
|
external_osl -- external_clang;
|
||||||
|
external_osl -- external_openexr;
|
||||||
external_osl -- external_openexr;
|
external_osl -- external_openexr;
|
||||||
external_osl -- external_zlib;
|
external_osl -- external_zlib;
|
||||||
|
external_osl -- external_flexbison;
|
||||||
external_osl -- external_openimageio;
|
external_osl -- external_openimageio;
|
||||||
external_osl -- external_pugixml;
|
external_osl -- external_pugixml;
|
||||||
external_osl -- external_flexbison;
|
|
||||||
external_osl -- external_flex;
|
|
||||||
external_png -- external_zlib;
|
external_png -- external_zlib;
|
||||||
external_python -- external_bzip2;
|
external_python_site_packages -- Make_Python_Environment;
|
||||||
external_python -- external_ffi;
|
|
||||||
external_python -- external_lzma;
|
|
||||||
external_python -- external_ssl;
|
|
||||||
external_python -- external_sqlite;
|
|
||||||
external_python -- external_zlib;
|
|
||||||
external_python_site_packages -- external_python;
|
|
||||||
external_sndfile -- external_ogg;
|
external_sndfile -- external_ogg;
|
||||||
external_sndfile -- external_vorbis;
|
external_sndfile -- external_vorbis;
|
||||||
external_sndfile -- external_flac;
|
external_sndfile -- external_flac;
|
||||||
external_theora -- external_vorbis;
|
external_theora -- external_vorbis;
|
||||||
external_theora -- external_ogg;
|
external_theora -- external_ogg;
|
||||||
external_tiff -- external_zlib;
|
external_tiff -- external_zlib;
|
||||||
external_usd -- external_tbb;
|
|
||||||
external_usd -- external_boost;
|
|
||||||
external_usd -- external_opensubdiv;
|
|
||||||
external_vorbis -- external_ogg;
|
external_vorbis -- external_ogg;
|
||||||
external_wayland -- external_expat;
|
blender-- external_ffmpeg;
|
||||||
external_wayland -- external_xml2;
|
blender-- external_alembic;
|
||||||
external_wayland -- external_ffi;
|
blender-- external_openjpeg;
|
||||||
external_wayland_protocols -- external_wayland;
|
blender-- external_opencolorio;
|
||||||
external_x264 -- external_nasm;
|
blender-- external_openexr;
|
||||||
|
blender-- external_opensubdiv;
|
||||||
|
blender-- openvdb;
|
||||||
|
blender-- external_osl;
|
||||||
|
blender-- external_boost;
|
||||||
|
blender-- external_jpeg;
|
||||||
|
blender-- external_png;
|
||||||
|
blender-- external_python;
|
||||||
|
blender-- external_sndfile;
|
||||||
|
blender-- external_iconv;
|
||||||
|
blender-- external_fftw3;
|
||||||
|
external_python-- external_python_site_packages;
|
||||||
|
external_python_site_packages-- requests;
|
||||||
|
external_python_site_packages-- idna;
|
||||||
|
external_python_site_packages-- chardet;
|
||||||
|
external_python_site_packages-- urllib3;
|
||||||
|
external_python_site_packages-- certifi;
|
||||||
|
external_python-- external_numpy;
|
||||||
|
external_usd-- external_boost;
|
||||||
|
external_usd-- external_tbb;
|
||||||
|
blender-- external_opencollada;
|
||||||
|
blender-- external_sdl;
|
||||||
|
blender-- external_freetype;
|
||||||
|
blender-- external_pthreads;
|
||||||
|
blender-- external_zlib;
|
||||||
|
blender-- external_openal;
|
||||||
|
blender-- external_usd;
|
||||||
}
|
}
|
||||||
|
@@ -37,7 +37,7 @@ if [ $USE_DEBUG_TRAP -ne 0 ]; then
|
|||||||
trap 'err_report $LINENO' ERR
|
trap 'err_report $LINENO' ERR
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Noisy, show every line that runs with it's line number.
|
# Noisy, show every line that runs with its line number.
|
||||||
if [ $USE_DEBUG_LOG -ne 0 ]; then
|
if [ $USE_DEBUG_LOG -ne 0 ]; then
|
||||||
PS4='\e[0;33m$(printf %4d ${LINENO}):\e\033[0m '
|
PS4='\e[0;33m$(printf %4d ${LINENO}):\e\033[0m '
|
||||||
set -x
|
set -x
|
||||||
@@ -553,18 +553,18 @@ EMBREE_FORCE_BUILD=false
|
|||||||
EMBREE_FORCE_REBUILD=false
|
EMBREE_FORCE_REBUILD=false
|
||||||
EMBREE_SKIP=false
|
EMBREE_SKIP=false
|
||||||
|
|
||||||
OIDN_VERSION="1.3.0"
|
OIDN_VERSION="1.4.0"
|
||||||
OIDN_VERSION_SHORT="1.3"
|
OIDN_VERSION_SHORT="1.4"
|
||||||
OIDN_VERSION_MIN="1.3.0"
|
OIDN_VERSION_MIN="1.4.0"
|
||||||
OIDN_VERSION_MAX="1.4"
|
OIDN_VERSION_MAX="1.5"
|
||||||
OIDN_FORCE_BUILD=false
|
OIDN_FORCE_BUILD=false
|
||||||
OIDN_FORCE_REBUILD=false
|
OIDN_FORCE_REBUILD=false
|
||||||
OIDN_SKIP=false
|
OIDN_SKIP=false
|
||||||
|
|
||||||
ISPC_VERSION="1.14.1"
|
ISPC_VERSION="1.14.1"
|
||||||
|
|
||||||
FFMPEG_VERSION="4.2.3"
|
FFMPEG_VERSION="4.4"
|
||||||
FFMPEG_VERSION_SHORT="4.2"
|
FFMPEG_VERSION_SHORT="4.4"
|
||||||
FFMPEG_VERSION_MIN="3.0"
|
FFMPEG_VERSION_MIN="3.0"
|
||||||
FFMPEG_VERSION_MAX="5.0"
|
FFMPEG_VERSION_MAX="5.0"
|
||||||
FFMPEG_FORCE_BUILD=false
|
FFMPEG_FORCE_BUILD=false
|
||||||
@@ -572,7 +572,7 @@ FFMPEG_FORCE_REBUILD=false
|
|||||||
FFMPEG_SKIP=false
|
FFMPEG_SKIP=false
|
||||||
_ffmpeg_list_sep=";"
|
_ffmpeg_list_sep=";"
|
||||||
|
|
||||||
XR_OPENXR_VERSION="1.0.14"
|
XR_OPENXR_VERSION="1.0.17"
|
||||||
XR_OPENXR_VERSION_SHORT="1.0"
|
XR_OPENXR_VERSION_SHORT="1.0"
|
||||||
XR_OPENXR_VERSION_MIN="1.0.8"
|
XR_OPENXR_VERSION_MIN="1.0.8"
|
||||||
XR_OPENXR_VERSION_MAX="2.0"
|
XR_OPENXR_VERSION_MAX="2.0"
|
||||||
@@ -1019,7 +1019,7 @@ PRINT ""
|
|||||||
PYTHON_SOURCE=( "https://www.python.org/ftp/python/$PYTHON_VERSION/Python-$PYTHON_VERSION.tgz" )
|
PYTHON_SOURCE=( "https://www.python.org/ftp/python/$PYTHON_VERSION/Python-$PYTHON_VERSION.tgz" )
|
||||||
|
|
||||||
_boost_version_nodots=`echo "$BOOST_VERSION" | sed -r 's/\./_/g'`
|
_boost_version_nodots=`echo "$BOOST_VERSION" | sed -r 's/\./_/g'`
|
||||||
BOOST_SOURCE=( "https://boostorg.jfrog.io/artifactory/main/release/$BOOST_VERSION/source/boost_$_boost_version_nodots.tar.bz2" )
|
BOOST_SOURCE=( "https://dl.bintray.com/boostorg/release/$BOOST_VERSION/source/boost_$_boost_version_nodots.tar.bz2" )
|
||||||
BOOST_BUILD_MODULES="--with-system --with-filesystem --with-thread --with-regex --with-locale --with-date_time --with-wave --with-iostreams --with-python --with-program_options --with-serialization --with-atomic"
|
BOOST_BUILD_MODULES="--with-system --with-filesystem --with-thread --with-regex --with-locale --with-date_time --with-wave --with-iostreams --with-python --with-program_options --with-serialization --with-atomic"
|
||||||
|
|
||||||
TBB_SOURCE=( "https://github.com/oneapi-src/oneTBB/archive/$TBB_VERSION$TBB_VERSION_UPDATE.tar.gz" )
|
TBB_SOURCE=( "https://github.com/oneapi-src/oneTBB/archive/$TBB_VERSION$TBB_VERSION_UPDATE.tar.gz" )
|
||||||
@@ -1073,7 +1073,7 @@ OPENVDB_SOURCE=( "https://github.com/AcademySoftwareFoundation/openvdb/archive/v
|
|||||||
#~ OPENVDB_SOURCE_REPO_BRANCH="dev"
|
#~ OPENVDB_SOURCE_REPO_BRANCH="dev"
|
||||||
|
|
||||||
NANOVDB_USE_REPO=false
|
NANOVDB_USE_REPO=false
|
||||||
NANOVDB_SOURCE_REPO_UID="e62f7a0bf1e27397223c61ddeaaf57edf111b77f"
|
NANOVDB_SOURCE_REPO_UID="dc37d8a631922e7bef46712947dc19b755f3e841"
|
||||||
NANOVDB_SOURCE=( "https://github.com/AcademySoftwareFoundation/openvdb/archive/${NANOVDB_SOURCE_REPO_UID}.tar.gz" )
|
NANOVDB_SOURCE=( "https://github.com/AcademySoftwareFoundation/openvdb/archive/${NANOVDB_SOURCE_REPO_UID}.tar.gz" )
|
||||||
|
|
||||||
ALEMBIC_USE_REPO=false
|
ALEMBIC_USE_REPO=false
|
||||||
@@ -1108,9 +1108,9 @@ FFMPEG_SOURCE=( "http://ffmpeg.org/releases/ffmpeg-$FFMPEG_VERSION.tar.bz2" )
|
|||||||
|
|
||||||
XR_OPENXR_USE_REPO=false
|
XR_OPENXR_USE_REPO=false
|
||||||
XR_OPENXR_SOURCE=("https://github.com/KhronosGroup/OpenXR-SDK/archive/release-${XR_OPENXR_VERSION}.tar.gz")
|
XR_OPENXR_SOURCE=("https://github.com/KhronosGroup/OpenXR-SDK/archive/release-${XR_OPENXR_VERSION}.tar.gz")
|
||||||
#~ XR_OPENXR_SOURCE_REPO=("https://github.com/KhronosGroup/OpenXR-SDK.git")
|
XR_OPENXR_SOURCE_REPO=("https://github.com/KhronosGroup/OpenXR-SDK.git")
|
||||||
#~ XR_OPENXR_REPO_UID="5900c51562769b03bea699dc0352cae56acb6419d"
|
XR_OPENXR_REPO_UID="bf21ccb1007bb531b45d9978919a56ea5059c245"
|
||||||
#~ XR_OPENXR_REPO_BRANCH="master"
|
XR_OPENXR_REPO_BRANCH="master"
|
||||||
|
|
||||||
# C++11 is required now
|
# C++11 is required now
|
||||||
CXXFLAGS_BACK=$CXXFLAGS
|
CXXFLAGS_BACK=$CXXFLAGS
|
||||||
@@ -1128,6 +1128,7 @@ Those libraries should be available as packages in all recent distributions (opt
|
|||||||
* Basics of dev environment (cmake, gcc, svn , git, ...).
|
* Basics of dev environment (cmake, gcc, svn , git, ...).
|
||||||
* libjpeg, libpng, libtiff, [openjpeg2], [libopenal].
|
* libjpeg, libpng, libtiff, [openjpeg2], [libopenal].
|
||||||
* libx11, libxcursor, libxi, libxrandr, libxinerama (and other libx... as needed).
|
* libx11, libxcursor, libxi, libxrandr, libxinerama (and other libx... as needed).
|
||||||
|
* libwayland-client0, libwayland-cursor0, libwayland-egl1, libxkbcommon0, libdbus-1-3, libegl1 (Wayland)
|
||||||
* libsqlite3, libbz2, libssl, libfftw3, libxml2, libtinyxml, yasm, libyaml-cpp.
|
* libsqlite3, libbz2, libssl, libfftw3, libxml2, libtinyxml, yasm, libyaml-cpp.
|
||||||
* libsdl2, libglew, libpugixml, libpotrace, [libgmp], [libglewmx], fontconfig, [libharu/libhpdf].\""
|
* libsdl2, libglew, libpugixml, libpotrace, [libgmp], [libglewmx], fontconfig, [libharu/libhpdf].\""
|
||||||
|
|
||||||
@@ -1797,6 +1798,10 @@ compile_OCIO() {
|
|||||||
cmake_d="$cmake_d -D OCIO_BUILD_PYTHON=OFF"
|
cmake_d="$cmake_d -D OCIO_BUILD_PYTHON=OFF"
|
||||||
cmake_d="$cmake_d -D OCIO_BUILD_GPU_TESTS=OFF"
|
cmake_d="$cmake_d -D OCIO_BUILD_GPU_TESTS=OFF"
|
||||||
|
|
||||||
|
if [ $(uname -m) == "aarch64" ]; then
|
||||||
|
cmake_d="$cmake_d -D OCIO_USE_SSE=OFF"
|
||||||
|
fi
|
||||||
|
|
||||||
if file /bin/cp | grep -q '32-bit'; then
|
if file /bin/cp | grep -q '32-bit'; then
|
||||||
cflags="-fPIC -m32 -march=i686"
|
cflags="-fPIC -m32 -march=i686"
|
||||||
else
|
else
|
||||||
@@ -2059,7 +2064,10 @@ compile_OIIO() {
|
|||||||
cmake_d="$cmake_d -D CMAKE_INSTALL_PREFIX=$_inst"
|
cmake_d="$cmake_d -D CMAKE_INSTALL_PREFIX=$_inst"
|
||||||
cmake_d="$cmake_d -D STOP_ON_WARNING=OFF"
|
cmake_d="$cmake_d -D STOP_ON_WARNING=OFF"
|
||||||
cmake_d="$cmake_d -D LINKSTATIC=OFF"
|
cmake_d="$cmake_d -D LINKSTATIC=OFF"
|
||||||
|
|
||||||
|
if [ $(uname -m) != "aarch64" ]; then
|
||||||
cmake_d="$cmake_d -D USE_SIMD=sse2"
|
cmake_d="$cmake_d -D USE_SIMD=sse2"
|
||||||
|
fi
|
||||||
|
|
||||||
cmake_d="$cmake_d -D OPENEXR_VERSION=$OPENEXR_VERSION"
|
cmake_d="$cmake_d -D OPENEXR_VERSION=$OPENEXR_VERSION"
|
||||||
|
|
||||||
@@ -2079,7 +2087,7 @@ compile_OIIO() {
|
|||||||
cmake_d="$cmake_d -D USE_OPENCV=OFF"
|
cmake_d="$cmake_d -D USE_OPENCV=OFF"
|
||||||
cmake_d="$cmake_d -D BUILD_TESTING=OFF"
|
cmake_d="$cmake_d -D BUILD_TESTING=OFF"
|
||||||
cmake_d="$cmake_d -D OIIO_BUILD_TESTS=OFF"
|
cmake_d="$cmake_d -D OIIO_BUILD_TESTS=OFF"
|
||||||
cmake_d="$cmake_d -D OIIO_BUILD_TOOLS=ON"
|
cmake_d="$cmake_d -D OIIO_BUILD_TOOLS=OFF"
|
||||||
cmake_d="$cmake_d -D TXT2MAN="
|
cmake_d="$cmake_d -D TXT2MAN="
|
||||||
#cmake_d="$cmake_d -D CMAKE_EXPORT_COMPILE_COMMANDS=ON"
|
#cmake_d="$cmake_d -D CMAKE_EXPORT_COMPILE_COMMANDS=ON"
|
||||||
#cmake_d="$cmake_d -D CMAKE_VERBOSE_MAKEFILE=ON"
|
#cmake_d="$cmake_d -D CMAKE_VERBOSE_MAKEFILE=ON"
|
||||||
@@ -2209,10 +2217,15 @@ compile_LLVM() {
|
|||||||
mkdir build
|
mkdir build
|
||||||
cd build
|
cd build
|
||||||
|
|
||||||
|
LLVM_TARGETS="X86"
|
||||||
|
if [ $(uname -m) == "aarch64" ]; then
|
||||||
|
LLVM_TARGETS="AArch64"
|
||||||
|
fi
|
||||||
|
|
||||||
cmake_d="-D CMAKE_BUILD_TYPE=Release"
|
cmake_d="-D CMAKE_BUILD_TYPE=Release"
|
||||||
cmake_d="$cmake_d -D CMAKE_INSTALL_PREFIX=$_inst"
|
cmake_d="$cmake_d -D CMAKE_INSTALL_PREFIX=$_inst"
|
||||||
cmake_d="$cmake_d -D LLVM_ENABLE_FFI=ON"
|
cmake_d="$cmake_d -D LLVM_ENABLE_FFI=ON"
|
||||||
cmake_d="$cmake_d -D LLVM_TARGETS_TO_BUILD=X86"
|
cmake_d="$cmake_d -D LLVM_TARGETS_TO_BUILD=$LLVM_TARGETS"
|
||||||
cmake_d="$cmake_d -D LLVM_ENABLE_TERMINFO=OFF"
|
cmake_d="$cmake_d -D LLVM_ENABLE_TERMINFO=OFF"
|
||||||
|
|
||||||
if [ -d $_FFI_INCLUDE_DIR ]; then
|
if [ -d $_FFI_INCLUDE_DIR ]; then
|
||||||
@@ -2329,13 +2342,16 @@ compile_OSL() {
|
|||||||
cmake_d="$cmake_d -D STOP_ON_WARNING=OFF"
|
cmake_d="$cmake_d -D STOP_ON_WARNING=OFF"
|
||||||
cmake_d="$cmake_d -D OSL_BUILD_PLUGINS=OFF"
|
cmake_d="$cmake_d -D OSL_BUILD_PLUGINS=OFF"
|
||||||
cmake_d="$cmake_d -D OSL_BUILD_TESTS=OFF"
|
cmake_d="$cmake_d -D OSL_BUILD_TESTS=OFF"
|
||||||
cmake_d="$cmake_d -D USE_SIMD=sse2"
|
|
||||||
cmake_d="$cmake_d -D USE_LLVM_BITCODE=OFF"
|
cmake_d="$cmake_d -D USE_LLVM_BITCODE=OFF"
|
||||||
cmake_d="$cmake_d -D USE_PARTIO=OFF"
|
cmake_d="$cmake_d -D USE_PARTIO=OFF"
|
||||||
cmake_d="$cmake_d -D OSL_BUILD_MATERIALX=OFF"
|
cmake_d="$cmake_d -D OSL_BUILD_MATERIALX=OFF"
|
||||||
cmake_d="$cmake_d -D USE_QT=OFF"
|
cmake_d="$cmake_d -D USE_QT=OFF"
|
||||||
cmake_d="$cmake_d -D USE_PYTHON=OFF"
|
cmake_d="$cmake_d -D USE_PYTHON=OFF"
|
||||||
|
|
||||||
|
if [ $(uname -m) != "aarch64" ]; then
|
||||||
|
cmake_d="$cmake_d -D USE_SIMD=sse2"
|
||||||
|
fi
|
||||||
|
|
||||||
cmake_d="$cmake_d -D CMAKE_CXX_STANDARD=14"
|
cmake_d="$cmake_d -D CMAKE_CXX_STANDARD=14"
|
||||||
|
|
||||||
#~ cmake_d="$cmake_d -D ILMBASE_VERSION=$ILMBASE_VERSION"
|
#~ cmake_d="$cmake_d -D ILMBASE_VERSION=$ILMBASE_VERSION"
|
||||||
@@ -3824,6 +3840,7 @@ install_DEB() {
|
|||||||
_packages="gawk cmake cmake-curses-gui build-essential libjpeg-dev libpng-dev libtiff-dev \
|
_packages="gawk cmake cmake-curses-gui build-essential libjpeg-dev libpng-dev libtiff-dev \
|
||||||
git libfreetype6-dev libfontconfig-dev libx11-dev flex bison libxxf86vm-dev \
|
git libfreetype6-dev libfontconfig-dev libx11-dev flex bison libxxf86vm-dev \
|
||||||
libxcursor-dev libxi-dev wget libsqlite3-dev libxrandr-dev libxinerama-dev \
|
libxcursor-dev libxi-dev wget libsqlite3-dev libxrandr-dev libxinerama-dev \
|
||||||
|
libwayland-dev wayland-protocols libegl-dev libxkbcommon-dev libdbus-1-dev linux-libc-dev \
|
||||||
libbz2-dev libncurses5-dev libssl-dev liblzma-dev libreadline-dev \
|
libbz2-dev libncurses5-dev libssl-dev liblzma-dev libreadline-dev \
|
||||||
libopenal-dev libglew-dev yasm $THEORA_DEV $VORBIS_DEV $OGG_DEV \
|
libopenal-dev libglew-dev yasm $THEORA_DEV $VORBIS_DEV $OGG_DEV \
|
||||||
libsdl2-dev libfftw3-dev patch bzip2 libxml2-dev libtinyxml-dev libjemalloc-dev \
|
libsdl2-dev libfftw3-dev patch bzip2 libxml2-dev libtinyxml-dev libjemalloc-dev \
|
||||||
@@ -4493,6 +4510,7 @@ install_RPM() {
|
|||||||
_packages="gcc gcc-c++ git make cmake tar bzip2 xz findutils flex bison fontconfig-devel \
|
_packages="gcc gcc-c++ git make cmake tar bzip2 xz findutils flex bison fontconfig-devel \
|
||||||
libtiff-devel libjpeg-devel libpng-devel sqlite-devel fftw-devel SDL2-devel \
|
libtiff-devel libjpeg-devel libpng-devel sqlite-devel fftw-devel SDL2-devel \
|
||||||
libX11-devel libXi-devel libXcursor-devel libXrandr-devel libXinerama-devel \
|
libX11-devel libXi-devel libXcursor-devel libXrandr-devel libXinerama-devel \
|
||||||
|
wayland-devel wayland-protocols-devel mesa-libEGL-devel libxkbcommon-devel dbus-devel kernel-headers \
|
||||||
wget ncurses-devel readline-devel $OPENJPEG_DEV openal-soft-devel \
|
wget ncurses-devel readline-devel $OPENJPEG_DEV openal-soft-devel \
|
||||||
glew-devel yasm $THEORA_DEV $VORBIS_DEV $OGG_DEV patch \
|
glew-devel yasm $THEORA_DEV $VORBIS_DEV $OGG_DEV patch \
|
||||||
libxml2-devel yaml-cpp-devel tinyxml-devel jemalloc-devel \
|
libxml2-devel yaml-cpp-devel tinyxml-devel jemalloc-devel \
|
||||||
|
@@ -1,18 +0,0 @@
|
|||||||
diff -Naur libaom-3.4.0/build/cmake/aom_configure.cmake external_aom/build/cmake/aom_configure.cmake
|
|
||||||
--- libaom-3.4.0/build/cmake/aom_configure.cmake 2022-06-17 11:46:18 -0600
|
|
||||||
+++ external_aom/build/cmake/aom_configure.cmake 2022-10-16 15:35:54 -0600
|
|
||||||
@@ -15,8 +15,12 @@
|
|
||||||
|
|
||||||
include(FindGit)
|
|
||||||
include(FindPerl)
|
|
||||||
-include(FindThreads)
|
|
||||||
-
|
|
||||||
+# Blender: This will drag in a dep on libwinpthreads which we prefer
|
|
||||||
+# not to have, aom will fallback on a native win32 thread wrapper
|
|
||||||
+# if pthreads are not found.
|
|
||||||
+if(NOT WIN32)
|
|
||||||
+ include(FindThreads)
|
|
||||||
+endif()
|
|
||||||
include("${AOM_ROOT}/build/cmake/aom_config_defaults.cmake")
|
|
||||||
include("${AOM_ROOT}/build/cmake/aom_experiment_deps.cmake")
|
|
||||||
include("${AOM_ROOT}/build/cmake/aom_optimization.cmake")
|
|
@@ -20,7 +20,7 @@
|
|||||||
# ILMBASE_LIBRARIES - list of libraries to link against when using IlmBase.
|
# ILMBASE_LIBRARIES - list of libraries to link against when using IlmBase.
|
||||||
# ILMBASE_FOUND - True if IlmBase was found.
|
# ILMBASE_FOUND - True if IlmBase was found.
|
||||||
|
|
||||||
# Other standarnd issue macros
|
# Other standard issue macros
|
||||||
include(FindPackageHandleStandardArgs)
|
include(FindPackageHandleStandardArgs)
|
||||||
include(FindPackageMessage)
|
include(FindPackageMessage)
|
||||||
include(SelectLibraryConfigurations)
|
include(SelectLibraryConfigurations)
|
||||||
|
@@ -22,7 +22,7 @@
|
|||||||
# These are defined by the FindIlmBase module.
|
# These are defined by the FindIlmBase module.
|
||||||
# OPENEXR_FOUND - True if OpenEXR was found.
|
# OPENEXR_FOUND - True if OpenEXR was found.
|
||||||
|
|
||||||
# Other standarnd issue macros
|
# Other standard issue macros
|
||||||
include(SelectLibraryConfigurations)
|
include(SelectLibraryConfigurations)
|
||||||
include(FindPackageHandleStandardArgs)
|
include(FindPackageHandleStandardArgs)
|
||||||
include(FindPackageMessage)
|
include(FindPackageMessage)
|
||||||
|
@@ -1,6 +1,33 @@
|
|||||||
cmake_minimum_required (VERSION 2.8)
|
cmake_minimum_required(VERSION 3.1 FATAL_ERROR)
|
||||||
|
|
||||||
|
if (POLICY CMP0048)
|
||||||
|
# cmake warns if loaded from a min-3.0-required parent dir, so silence the warning:
|
||||||
|
cmake_policy(SET CMP0048 NEW)
|
||||||
|
endif()
|
||||||
|
|
||||||
project (tbb CXX)
|
project (tbb CXX)
|
||||||
|
|
||||||
|
include(CheckCXXCompilerFlag)
|
||||||
|
include(CheckCXXSourceRuns)
|
||||||
|
|
||||||
|
if(POLICY CMP0058)
|
||||||
|
cmake_policy(SET CMP0058 NEW)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(POLICY CMP0068)
|
||||||
|
cmake_policy(SET CMP0068 NEW)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (POLICY CMP0078)
|
||||||
|
# swig standard target names
|
||||||
|
cmake_policy(SET CMP0078 NEW)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
if (POLICY CMP0086)
|
||||||
|
# UseSWIG honors SWIG_MODULE_NAME via -module flag
|
||||||
|
cmake_policy(SET CMP0086 NEW)
|
||||||
|
endif ()
|
||||||
|
|
||||||
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
||||||
message(STATUS "Setting build type to 'Release' as none was specified.")
|
message(STATUS "Setting build type to 'Release' as none was specified.")
|
||||||
set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE)
|
set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE)
|
||||||
@@ -8,12 +35,36 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
|||||||
"MinSizeRel" "RelWithDebInfo")
|
"MinSizeRel" "RelWithDebInfo")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
include_directories(include src src/rml/include )
|
if(NOT TBB_INSTALL_RUNTIME_DIR)
|
||||||
|
set(TBB_INSTALL_RUNTIME_DIR bin)
|
||||||
|
endif()
|
||||||
|
if(NOT TBB_INSTALL_LIBRARY_DIR)
|
||||||
|
set(TBB_INSTALL_LIBRARY_DIR lib)
|
||||||
|
endif()
|
||||||
|
if(NOT TBB_INSTALL_ARCHIVE_DIR)
|
||||||
|
set(TBB_INSTALL_ARCHIVE_DIR lib)
|
||||||
|
endif()
|
||||||
|
if(NOT TBB_INSTALL_INCLUDE_DIR)
|
||||||
|
set(TBB_INSTALL_INCLUDE_DIR include)
|
||||||
|
endif()
|
||||||
|
if(NOT TBB_CMAKE_PACKAGE_INSTALL_DIR)
|
||||||
|
set(TBB_CMAKE_PACKAGE_INSTALL_DIR lib/cmake/tbb)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include_directories(include src src/rml/include ${CMAKE_CURRENT_BINARY_DIR})
|
||||||
|
|
||||||
option(TBB_BUILD_SHARED "Build TBB shared library" ON)
|
option(TBB_BUILD_SHARED "Build TBB shared library" ON)
|
||||||
option(TBB_BUILD_STATIC "Build TBB static library" ON)
|
option(TBB_BUILD_STATIC "Build TBB static library" ON)
|
||||||
option(TBB_BUILD_TBBMALLOC "Build TBB malloc library" ON)
|
option(TBB_BUILD_TBBMALLOC "Build TBB malloc library" ON)
|
||||||
option(TBB_BUILD_TBBMALLOC_PROXY "Build TBB malloc proxy library" ON)
|
option(TBB_BUILD_TBBMALLOC_PROXY "Build TBB malloc proxy library" ON)
|
||||||
|
option(TBB_BUILD_TESTS "Build TBB tests and enable testing infrastructure" ON)
|
||||||
|
option(TBB_NO_DATE "Do not save the configure date in the version string" OFF)
|
||||||
|
option(TBB_BUILD_PYTHON "Build TBB Python bindings" OFF)
|
||||||
|
option(TBB_SET_SOVERSION "Set the SOVERSION (shared library build version suffix)?" OFF)
|
||||||
|
|
||||||
|
# When this repository is part of a larger build system of a parent project
|
||||||
|
# we may not want TBB to set up default installation targets
|
||||||
|
option(TBB_INSTALL_TARGETS "Include build targets for 'make install'" ON)
|
||||||
|
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
set(CMAKE_MACOSX_RPATH ON)
|
set(CMAKE_MACOSX_RPATH ON)
|
||||||
@@ -39,9 +90,16 @@ set(tbbmalloc_proxy_src
|
|||||||
src/tbbmalloc/proxy.cpp
|
src/tbbmalloc/proxy.cpp
|
||||||
src/tbbmalloc/tbb_function_replacement.cpp)
|
src/tbbmalloc/tbb_function_replacement.cpp)
|
||||||
|
|
||||||
if (NOT APPLE)
|
add_library (tbb_interface INTERFACE)
|
||||||
add_definitions(-DDO_ITT_NOTIFY)
|
add_definitions(-DTBB_SUPPRESS_DEPRECATED_MESSAGES=1)
|
||||||
else()
|
|
||||||
|
if (CMAKE_SYSTEM_PROCESSOR MATCHES "(i386|x86_64)")
|
||||||
|
if (NOT APPLE AND NOT MINGW)
|
||||||
|
target_compile_definitions(tbb_interface INTERFACE DO_ITT_NOTIFY)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (APPLE)
|
||||||
# Disable annoying "has no symbols" warnings
|
# Disable annoying "has no symbols" warnings
|
||||||
set(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>")
|
set(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>")
|
||||||
set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>")
|
set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>")
|
||||||
@@ -49,56 +107,126 @@ else()
|
|||||||
set(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>")
|
set(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
macro(CHECK_CXX_COMPILER_AND_LINKER_FLAGS _RESULT _CXX_FLAGS _LINKER_FLAGS)
|
||||||
|
set(CMAKE_REQUIRED_FLAGS ${_CXX_FLAGS})
|
||||||
|
set(CMAKE_REQUIRED_LIBRARIES ${_LINKER_FLAGS})
|
||||||
|
set(CMAKE_REQUIRED_QUIET TRUE)
|
||||||
|
check_cxx_source_runs("#include <iostream>\nint main(int argc, char **argv) { std::cout << \"test\"; return 0; }" ${_RESULT})
|
||||||
|
set(CMAKE_REQUIRED_FLAGS "")
|
||||||
|
set(CMAKE_REQUIRED_LIBRARIES "")
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
# Prefer libc++ in conjunction with Clang
|
||||||
|
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||||
|
if (CMAKE_CXX_FLAGS MATCHES "-stdlib=libc\\+\\+")
|
||||||
|
message(STATUS "TBB: using libc++.")
|
||||||
|
else()
|
||||||
|
CHECK_CXX_COMPILER_AND_LINKER_FLAGS(HAS_LIBCPP "-stdlib=libc++" "-stdlib=libc++")
|
||||||
|
if (HAS_LIBCPP)
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++ -D_LIBCPP_VERSION")
|
||||||
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libc++")
|
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -stdlib=libc++")
|
||||||
|
message(STATUS "TBB: using libc++.")
|
||||||
|
else()
|
||||||
|
message(STATUS "TBB: NOT using libc++.")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set (CMAKE_CXX_STANDARD 11)
|
||||||
|
|
||||||
if (UNIX)
|
if (UNIX)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -DUSE_PTHREAD")
|
target_compile_definitions(tbb_interface INTERFACE USE_PTHREAD)
|
||||||
if(NOT CMAKE_CXX_FLAGS MATCHES "-mno-rtm")
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mrtm")
|
check_cxx_compiler_flag ("-mrtm -Werror" SUPPORTS_MRTM)
|
||||||
|
if (SUPPORTS_MRTM)
|
||||||
|
target_compile_options(tbb_interface INTERFACE "-mrtm")
|
||||||
endif ()
|
endif ()
|
||||||
if (APPLE)
|
|
||||||
set(ARCH_PREFIX "mac")
|
|
||||||
else()
|
|
||||||
set(ARCH_PREFIX "lin")
|
|
||||||
endif()
|
|
||||||
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
||||||
set(ARCH_PREFIX "${ARCH_PREFIX}64")
|
|
||||||
else()
|
|
||||||
set(ARCH_PREFIX "${ARCH_PREFIX}32")
|
|
||||||
endif()
|
|
||||||
set(ENABLE_RTTI "-frtti -fexceptions ")
|
|
||||||
set(DISABLE_RTTI "-fno-rtti -fno-exceptions ")
|
|
||||||
elseif(WIN32)
|
elseif(WIN32)
|
||||||
cmake_minimum_required (VERSION 3.1)
|
target_compile_definitions(tbb_interface INTERFACE USE_WINTHREAD _WIN32_WINNT=0x0600)
|
||||||
|
if (MSVC)
|
||||||
enable_language(ASM_MASM)
|
enable_language(ASM_MASM)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GS- /Zc:wchar_t /Zc:forScope /DUSE_WINTHREAD")
|
target_compile_options(tbb_interface INTERFACE /GS- /Zc:wchar_t /Zc:forScope)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0600 /volatile:iso")
|
check_cxx_compiler_flag ("/volatile:iso" SUPPORTS_VOLATILE_FLAG)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4267 /wd4800 /wd4146 /wd4244 /wd4018")
|
if (SUPPORTS_VOLATILE_FLAG)
|
||||||
|
target_compile_options(tbb_interface INTERFACE /volatile:iso)
|
||||||
|
endif ()
|
||||||
|
target_compile_options(tbb_interface INTERFACE $<$<COMPILE_LANGUAGE:CXX>:/wd4267 /wd4800 /wd4146 /wd4244 /wd4577 /wd4018>)
|
||||||
|
if (NOT CMAKE_SIZEOF_VOID_P)
|
||||||
|
message(FATAL_ERROR "'CMAKE_SIZEOF_VOID_P' is undefined. Please delete your build directory and rerun CMake again!")
|
||||||
|
endif()
|
||||||
|
|
||||||
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
|
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||||
list(APPEND tbb_src src/tbb/intel64-masm/atomic_support.asm
|
list(APPEND tbb_src src/tbb/intel64-masm/atomic_support.asm
|
||||||
src/tbb/intel64-masm/itsx.asm src/tbb/intel64-masm/intel64_misc.asm)
|
src/tbb/intel64-masm/itsx.asm src/tbb/intel64-masm/intel64_misc.asm)
|
||||||
list(APPEND tbbmalloc_src src/tbb/intel64-masm/atomic_support.asm)
|
list(APPEND tbbmalloc_src src/tbb/intel64-masm/atomic_support.asm)
|
||||||
set(CMAKE_ASM_MASM_FLAGS "/DEM64T=1")
|
set(CMAKE_ASM_MASM_FLAGS "/DEM64T=1 ${CMAKE_ASM_MASM_FLAGS}")
|
||||||
set(ARCH_PREFIX "win64")
|
|
||||||
else()
|
else()
|
||||||
list(APPEND tbb_src src/tbb/ia32-masm/atomic_support.asm
|
list(APPEND tbb_src src/tbb/ia32-masm/atomic_support.asm
|
||||||
src/tbb/ia32-masm/itsx.asm src/tbb/ia32-masm/lock_byte.asm)
|
src/tbb/ia32-masm/itsx.asm src/tbb/ia32-masm/lock_byte.asm)
|
||||||
list(APPEND tbbmalloc_src src/tbb/ia32-masm/atomic_support.asm)
|
# Enable SAFESEH feature for assembly (x86 builds only).
|
||||||
set(ARCH_PREFIX "win32")
|
set(CMAKE_ASM_MASM_FLAGS "/safeseh ${CMAKE_ASM_MASM_FLAGS}")
|
||||||
|
endif()
|
||||||
|
elseif (MINGW)
|
||||||
|
target_compile_options(tbb_interface INTERFACE "-mthreads")
|
||||||
endif ()
|
endif ()
|
||||||
set(ENABLE_RTTI "/EHsc /GR ")
|
|
||||||
set(DISABLE_RTTI "/EHs- /GR- ")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if (MSVC)
|
||||||
|
set(ENABLE_RTTI "/EHsc /GR ")
|
||||||
|
set(DISABLE_RTTI "/EHs- /GR- ")
|
||||||
|
elseif (UNIX)
|
||||||
|
set(ENABLE_RTTI "-frtti -fexceptions ")
|
||||||
|
set(DISABLE_RTTI "-fno-rtti -fno-exceptions ")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
##--------
|
||||||
|
# - Added TBB_USE_GLIBCXX_VERSION macro to specify the version of GNU
|
||||||
|
# libstdc++ when it cannot be properly recognized, e.g. when used
|
||||||
|
# with Clang on Linux* OS. Inspired by a contribution from David A.
|
||||||
|
if (NOT TBB_USE_GLIBCXX_VERSION AND UNIX AND NOT APPLE)
|
||||||
|
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||||
|
# using Clang
|
||||||
|
string(REPLACE "." "0" TBB_USE_GLIBCXX_VERSION ${CMAKE_CXX_COMPILER_VERSION})
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (TBB_USE_GLIBCXX_VERSION)
|
||||||
|
target_compile_definitions(tbb_interface INTERFACE TBB_USE_GLIBCXX_VERSION=${TBB_USE_GLIBCXX_VERSION})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
##-------
|
||||||
|
|
||||||
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
||||||
include(CheckCXXCompilerFlag)
|
|
||||||
check_cxx_compiler_flag ("-flifetime-dse=1" SUPPORTS_FLIFETIME)
|
check_cxx_compiler_flag ("-flifetime-dse=1" SUPPORTS_FLIFETIME)
|
||||||
if (SUPPORTS_FLIFETIME)
|
if (SUPPORTS_FLIFETIME)
|
||||||
add_definitions(-flifetime-dse=1)
|
target_compile_options(tbb_interface INTERFACE -flifetime-dse=1)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Linker export definitions
|
# Linker export definitions
|
||||||
if (WIN32)
|
if (APPLE)
|
||||||
|
set (ARCH_PREFIX "mac")
|
||||||
|
elseif(WIN32)
|
||||||
|
set (ARCH_PREFIX "win")
|
||||||
|
else()
|
||||||
|
set (ARCH_PREFIX "lin")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||||
|
set(ARCH_PREFIX "${ARCH_PREFIX}64")
|
||||||
|
else()
|
||||||
|
set(ARCH_PREFIX "${ARCH_PREFIX}32")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (MINGW)
|
||||||
|
set (ARCH_PREFIX "${ARCH_PREFIX}-gcc")
|
||||||
|
# there's no win32-gcc-tbb-export.def, use lin32-tbb-export.def
|
||||||
|
execute_process (COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/src/tbb/lin32-tbb-export.def ${CMAKE_CURRENT_SOURCE_DIR}/src/tbb/win32-gcc-tbb-export.def)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (MSVC)
|
||||||
add_custom_command(OUTPUT tbb.def
|
add_custom_command(OUTPUT tbb.def
|
||||||
COMMAND ${CMAKE_CXX_COMPILER} /TC /EP ${CMAKE_CURRENT_SOURCE_DIR}/src/tbb/${ARCH_PREFIX}-tbb-export.def -I ${CMAKE_CURRENT_SOURCE_DIR}/include > tbb.def
|
COMMAND ${CMAKE_CXX_COMPILER} /TC /EP ${CMAKE_CURRENT_SOURCE_DIR}/src/tbb/${ARCH_PREFIX}-tbb-export.def -I ${CMAKE_CURRENT_SOURCE_DIR}/include > tbb.def
|
||||||
MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/src/tbb/${ARCH_PREFIX}-tbb-export.def
|
MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/src/tbb/${ARCH_PREFIX}-tbb-export.def
|
||||||
@@ -110,18 +238,15 @@ if (WIN32)
|
|||||||
MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/src/tbbmalloc/${ARCH_PREFIX}-tbbmalloc-export.def
|
MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/src/tbbmalloc/${ARCH_PREFIX}-tbbmalloc-export.def
|
||||||
COMMENT "Preprocessing tbbmalloc.def"
|
COMMENT "Preprocessing tbbmalloc.def"
|
||||||
)
|
)
|
||||||
list(APPEND tbb_src ${CMAKE_CURRENT_SOURCE_DIR}/src/tbb/tbb_resource.rc)
|
|
||||||
list(APPEND tbbmalloc_src ${CMAKE_CURRENT_SOURCE_DIR}/src/tbbmalloc/tbbmalloc.rc)
|
|
||||||
list(APPEND tbbmalloc_proxy_src ${CMAKE_CURRENT_SOURCE_DIR}/src/tbbmalloc/tbbmalloc.rc)
|
|
||||||
else()
|
else()
|
||||||
add_custom_command(OUTPUT tbb.def
|
add_custom_command(OUTPUT tbb.def
|
||||||
COMMAND ${CMAKE_CXX_COMPILER} -xc++ -E ${CMAKE_CURRENT_SOURCE_DIR}/src/tbb/${ARCH_PREFIX}-tbb-export.def -I ${CMAKE_CURRENT_SOURCE_DIR}/include -o tbb.def
|
COMMAND ${CMAKE_CXX_COMPILER} -xc++ -std=c++11 -E ${CMAKE_CURRENT_SOURCE_DIR}/src/tbb/${ARCH_PREFIX}-tbb-export.def -I ${CMAKE_CURRENT_SOURCE_DIR}/include -o tbb.def
|
||||||
MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/src/tbb/${ARCH_PREFIX}-tbb-export.def
|
MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/src/tbb/${ARCH_PREFIX}-tbb-export.def
|
||||||
COMMENT "Preprocessing tbb.def"
|
COMMENT "Preprocessing tbb.def"
|
||||||
)
|
)
|
||||||
|
|
||||||
add_custom_command(OUTPUT tbbmalloc.def
|
add_custom_command(OUTPUT tbbmalloc.def
|
||||||
COMMAND ${CMAKE_CXX_COMPILER} -xc++ -E ${CMAKE_CURRENT_SOURCE_DIR}/src/tbbmalloc/${ARCH_PREFIX}-tbbmalloc-export.def -I ${CMAKE_CURRENT_SOURCE_DIR}/include -o tbbmalloc.def
|
COMMAND ${CMAKE_CXX_COMPILER} -xc++ -std=c++11 -E ${CMAKE_CURRENT_SOURCE_DIR}/src/tbbmalloc/${ARCH_PREFIX}-tbbmalloc-export.def -I ${CMAKE_CURRENT_SOURCE_DIR}/include -o tbbmalloc.def
|
||||||
MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/src/tbbmalloc/${ARCH_PREFIX}-tbbmalloc-export.def
|
MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/src/tbbmalloc/${ARCH_PREFIX}-tbbmalloc-export.def
|
||||||
COMMENT "Preprocessing tbbmalloc.def"
|
COMMENT "Preprocessing tbbmalloc.def"
|
||||||
)
|
)
|
||||||
@@ -132,34 +257,80 @@ add_custom_target(tbb_def_files DEPENDS tbb.def tbbmalloc.def)
|
|||||||
# TBB library
|
# TBB library
|
||||||
if (TBB_BUILD_STATIC)
|
if (TBB_BUILD_STATIC)
|
||||||
add_library(tbb_static STATIC ${tbb_src})
|
add_library(tbb_static STATIC ${tbb_src})
|
||||||
set_property(TARGET tbb_static APPEND PROPERTY COMPILE_DEFINITIONS "__TBB_BUILD=1")
|
target_link_libraries(tbb_static PRIVATE tbb_interface)
|
||||||
set_property(TARGET tbb_static APPEND PROPERTY COMPILE_DEFINITIONS "__TBB_SOURCE_DIRECTLY_INCLUDED=1")
|
target_include_directories(tbb_static INTERFACE "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>" "$<INSTALL_INTERFACE:${TBB_INSTALL_INCLUDE_DIR}>")
|
||||||
set_property(TARGET tbb_static APPEND_STRING PROPERTY COMPILE_FLAGS ${ENABLE_RTTI})
|
set_property(TARGET tbb_static APPEND_STRING PROPERTY COMPILE_FLAGS ${ENABLE_RTTI})
|
||||||
install(TARGETS tbb_static ARCHIVE DESTINATION lib)
|
if (TBB_INSTALL_TARGETS)
|
||||||
|
install(TARGETS tbb_static ARCHIVE DESTINATION ${TBB_INSTALL_ARCHIVE_DIR})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
target_compile_definitions(tbb_static
|
||||||
|
PRIVATE
|
||||||
|
-D__TBB_BUILD=1
|
||||||
|
-D__TBB_DYNAMIC_LOAD_ENABLED=0
|
||||||
|
-D__TBB_SOURCE_DIRECTLY_INCLUDED=1)
|
||||||
|
|
||||||
|
if (MSVC)
|
||||||
|
target_compile_definitions(tbb_static
|
||||||
|
PUBLIC -D__TBB_NO_IMPLICIT_LINKAGE=1
|
||||||
|
PRIVATE -D_CRT_SECURE_NO_WARNINGS)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (UNIX AND NOT APPLE)
|
||||||
|
target_link_libraries(tbb_static PUBLIC pthread dl)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (TBB_BUILD_SHARED)
|
if (TBB_BUILD_SHARED)
|
||||||
add_library(tbb SHARED ${tbb_src})
|
add_library(tbb SHARED ${tbb_src})
|
||||||
set_property(TARGET tbb APPEND PROPERTY COMPILE_DEFINITIONS "__TBB_BUILD=1")
|
target_link_libraries(tbb PRIVATE tbb_interface)
|
||||||
|
target_include_directories(tbb INTERFACE "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>" "$<INSTALL_INTERFACE:${TBB_INSTALL_INCLUDE_DIR}>")
|
||||||
set_property(TARGET tbb APPEND_STRING PROPERTY COMPILE_FLAGS ${ENABLE_RTTI})
|
set_property(TARGET tbb APPEND_STRING PROPERTY COMPILE_FLAGS ${ENABLE_RTTI})
|
||||||
|
if (TBB_SET_SOVERSION)
|
||||||
|
set_property(TARGET tbb PROPERTY SOVERSION 2)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
target_compile_definitions(tbb
|
||||||
|
PRIVATE -D__TBB_BUILD=1)
|
||||||
|
|
||||||
|
if (MSVC)
|
||||||
|
target_compile_definitions(tbb
|
||||||
|
PUBLIC -D__TBB_NO_IMPLICIT_LINKAGE=1
|
||||||
|
PRIVATE -D_CRT_SECURE_NO_WARNINGS)
|
||||||
|
endif()
|
||||||
|
|
||||||
add_dependencies(tbb tbb_def_files)
|
add_dependencies(tbb tbb_def_files)
|
||||||
|
|
||||||
if (APPLE)
|
if (APPLE)
|
||||||
set_property(TARGET tbb APPEND PROPERTY LINK_FLAGS "-Wl,-exported_symbols_list,${CMAKE_CURRENT_BINARY_DIR}/tbb.def")
|
set_property(TARGET tbb APPEND PROPERTY LINK_FLAGS "-Wl,-exported_symbols_list,\"${CMAKE_CURRENT_BINARY_DIR}/tbb.def\"")
|
||||||
elseif(UNIX)
|
elseif (MSVC)
|
||||||
set_property(TARGET tbb APPEND PROPERTY LINK_FLAGS "-Wl,-version-script,${CMAKE_CURRENT_BINARY_DIR}/tbb.def")
|
set_property(TARGET tbb APPEND PROPERTY LINK_FLAGS "/DEF:\"${CMAKE_CURRENT_BINARY_DIR}/tbb.def\"")
|
||||||
elseif(WIN32)
|
else ()
|
||||||
set_property(TARGET tbb APPEND PROPERTY LINK_FLAGS "/DEF:${CMAKE_CURRENT_BINARY_DIR}/tbb.def")
|
set_property(TARGET tbb APPEND PROPERTY LINK_FLAGS "-Wl,-version-script,\"${CMAKE_CURRENT_BINARY_DIR}/tbb.def\"")
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
install(TARGETS tbb DESTINATION lib)
|
|
||||||
if(WIN32)
|
if (TBB_INSTALL_TARGETS)
|
||||||
set_target_properties(tbb PROPERTIES OUTPUT_NAME "tbb$<$<CONFIG:Debug>:_debug>")
|
install(TARGETS tbb EXPORT TBB
|
||||||
|
LIBRARY DESTINATION ${TBB_INSTALL_LIBRARY_DIR}
|
||||||
|
ARCHIVE DESTINATION ${TBB_INSTALL_ARCHIVE_DIR}
|
||||||
|
RUNTIME DESTINATION ${TBB_INSTALL_RUNTIME_DIR})
|
||||||
|
if (MSVC)
|
||||||
|
install(FILES $<TARGET_PDB_FILE:tbb> DESTINATION ${TBB_INSTALL_RUNTIME_DIR} OPTIONAL)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(CMAKE_COMPILER_IS_GNUCC)
|
if (UNIX AND NOT APPLE)
|
||||||
|
target_link_libraries(tbb PUBLIC pthread dl)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
||||||
# Quench a warning on GCC
|
# Quench a warning on GCC
|
||||||
set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/src/tbb/governor.cpp COMPILE_FLAGS "-Wno-missing-field-initializers ")
|
set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/src/tbb/governor.cpp COMPILE_FLAGS "-Wno-missing-field-initializers ")
|
||||||
|
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||||
|
# Quench a warning on Clang
|
||||||
|
set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/src/tbb/itt_notify.cpp COMPILE_FLAGS "-Wno-varargs ")
|
||||||
elseif(MSVC)
|
elseif(MSVC)
|
||||||
# Quench a warning on MSVC
|
# Quench a warning on MSVC
|
||||||
set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/src/tbb/scheduler.cpp COMPILE_FLAGS "/wd4458 ")
|
set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/src/tbb/scheduler.cpp COMPILE_FLAGS "/wd4458 ")
|
||||||
@@ -169,24 +340,50 @@ if(TBB_BUILD_TBBMALLOC)
|
|||||||
# TBB malloc library
|
# TBB malloc library
|
||||||
if (TBB_BUILD_STATIC)
|
if (TBB_BUILD_STATIC)
|
||||||
add_library(tbbmalloc_static STATIC ${tbbmalloc_static_src})
|
add_library(tbbmalloc_static STATIC ${tbbmalloc_static_src})
|
||||||
|
target_link_libraries(tbbmalloc_static PRIVATE tbb_interface)
|
||||||
set_property(TARGET tbbmalloc_static APPEND PROPERTY COMPILE_DEFINITIONS "__TBBMALLOC_BUILD=1")
|
set_property(TARGET tbbmalloc_static APPEND PROPERTY COMPILE_DEFINITIONS "__TBBMALLOC_BUILD=1")
|
||||||
|
set_property(TARGET tbbmalloc_static APPEND PROPERTY COMPILE_DEFINITIONS "__TBB_DYNAMIC_LOAD_ENABLED=0")
|
||||||
|
set_property(TARGET tbbmalloc_static APPEND PROPERTY COMPILE_DEFINITIONS "__TBB_SOURCE_DIRECTLY_INCLUDED=1")
|
||||||
set_property(TARGET tbbmalloc_static APPEND_STRING PROPERTY COMPILE_FLAGS ${DISABLE_RTTI})
|
set_property(TARGET tbbmalloc_static APPEND_STRING PROPERTY COMPILE_FLAGS ${DISABLE_RTTI})
|
||||||
install(TARGETS tbbmalloc_static ARCHIVE DESTINATION lib)
|
if (MSVC)
|
||||||
|
target_compile_definitions(tbbmalloc_static PUBLIC __TBB_NO_IMPLICIT_LINKAGE=1 __TBBMALLOC_NO_IMPLICIT_LINKAGE=1)
|
||||||
|
endif()
|
||||||
|
if (TBB_INSTALL_TARGETS)
|
||||||
|
install(TARGETS tbbmalloc_static ARCHIVE DESTINATION ${TBB_INSTALL_ARCHIVE_DIR})
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (TBB_BUILD_SHARED)
|
if (TBB_BUILD_SHARED)
|
||||||
add_library(tbbmalloc SHARED ${tbbmalloc_src})
|
add_library(tbbmalloc SHARED ${tbbmalloc_src})
|
||||||
|
target_link_libraries(tbbmalloc PRIVATE tbb_interface)
|
||||||
set_property(TARGET tbbmalloc APPEND PROPERTY COMPILE_DEFINITIONS "__TBBMALLOC_BUILD=1")
|
set_property(TARGET tbbmalloc APPEND PROPERTY COMPILE_DEFINITIONS "__TBBMALLOC_BUILD=1")
|
||||||
set_property(TARGET tbbmalloc APPEND_STRING PROPERTY COMPILE_FLAGS ${DISABLE_RTTI})
|
set_property(TARGET tbbmalloc APPEND_STRING PROPERTY COMPILE_FLAGS ${DISABLE_RTTI})
|
||||||
|
if (TBB_SET_SOVERSION)
|
||||||
|
set_property(TARGET tbbmalloc PROPERTY SOVERSION 2)
|
||||||
|
endif ()
|
||||||
add_dependencies(tbbmalloc tbb_def_files)
|
add_dependencies(tbbmalloc tbb_def_files)
|
||||||
if (APPLE)
|
if (APPLE)
|
||||||
set_property(TARGET tbbmalloc APPEND PROPERTY LINK_FLAGS "-Wl,-exported_symbols_list,${CMAKE_CURRENT_BINARY_DIR}/tbbmalloc.def")
|
set_property(TARGET tbbmalloc APPEND PROPERTY LINK_FLAGS "-Wl,-exported_symbols_list,\"${CMAKE_CURRENT_BINARY_DIR}/tbbmalloc.def\"")
|
||||||
elseif(UNIX)
|
elseif (MSVC)
|
||||||
set_property(TARGET tbbmalloc APPEND PROPERTY LINK_FLAGS "-Wl,-version-script,${CMAKE_CURRENT_BINARY_DIR}/tbbmalloc.def")
|
set_property(TARGET tbbmalloc APPEND PROPERTY LINK_FLAGS "/DEF:\"${CMAKE_CURRENT_BINARY_DIR}/tbbmalloc.def\"")
|
||||||
elseif(WIN32)
|
else ()
|
||||||
set_property(TARGET tbbmalloc APPEND PROPERTY LINK_FLAGS "/DEF:${CMAKE_CURRENT_BINARY_DIR}/tbbmalloc.def")
|
set_property(TARGET tbbmalloc APPEND PROPERTY LINK_FLAGS "-Wl,-version-script,\"${CMAKE_CURRENT_BINARY_DIR}/tbbmalloc.def\"")
|
||||||
|
endif()
|
||||||
|
if (MSVC)
|
||||||
|
target_compile_definitions(tbbmalloc PUBLIC __TBB_NO_IMPLICIT_LINKAGE=1 __TBBMALLOC_NO_IMPLICIT_LINKAGE=1)
|
||||||
|
endif()
|
||||||
|
if (TBB_INSTALL_TARGETS)
|
||||||
|
install(TARGETS tbbmalloc EXPORT TBB
|
||||||
|
LIBRARY DESTINATION ${TBB_INSTALL_LIBRARY_DIR}
|
||||||
|
ARCHIVE DESTINATION ${TBB_INSTALL_ARCHIVE_DIR}
|
||||||
|
RUNTIME DESTINATION ${TBB_INSTALL_RUNTIME_DIR})
|
||||||
|
if (MSVC)
|
||||||
|
install(FILES $<TARGET_PDB_FILE:tbbmalloc> DESTINATION ${TBB_INSTALL_RUNTIME_DIR} OPTIONAL)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
if (UNIX AND NOT APPLE)
|
||||||
|
target_link_libraries(tbbmalloc PUBLIC pthread dl)
|
||||||
endif()
|
endif()
|
||||||
install(TARGETS tbbmalloc DESTINATION lib)
|
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -194,19 +391,298 @@ if(TBB_BUILD_TBBMALLOC_PROXY)
|
|||||||
# TBB malloc proxy library
|
# TBB malloc proxy library
|
||||||
if (TBB_BUILD_STATIC)
|
if (TBB_BUILD_STATIC)
|
||||||
add_library(tbbmalloc_proxy_static STATIC ${tbbmalloc_proxy_src})
|
add_library(tbbmalloc_proxy_static STATIC ${tbbmalloc_proxy_src})
|
||||||
|
target_link_libraries(tbbmalloc_proxy_static PRIVATE tbb_interface)
|
||||||
set_property(TARGET tbbmalloc_proxy_static APPEND PROPERTY COMPILE_DEFINITIONS "__TBBMALLOC_BUILD=1")
|
set_property(TARGET tbbmalloc_proxy_static APPEND PROPERTY COMPILE_DEFINITIONS "__TBBMALLOC_BUILD=1")
|
||||||
|
set_property(TARGET tbbmalloc_proxy_static APPEND PROPERTY COMPILE_DEFINITIONS "__TBB_DYNAMIC_LOAD_ENABLED=0")
|
||||||
|
set_property(TARGET tbbmalloc_proxy_static APPEND PROPERTY COMPILE_DEFINITIONS "__TBB_SOURCE_DIRECTLY_INCLUDED=1")
|
||||||
set_property(TARGET tbbmalloc_proxy_static APPEND_STRING PROPERTY COMPILE_FLAGS ${DISABLE_RTTI})
|
set_property(TARGET tbbmalloc_proxy_static APPEND_STRING PROPERTY COMPILE_FLAGS ${DISABLE_RTTI})
|
||||||
link_libraries(tbbmalloc_proxy_static tbbmalloc)
|
if (TBB_INSTALL_TARGETS)
|
||||||
install(TARGETS tbbmalloc_proxy_static ARCHIVE DESTINATION lib)
|
install(TARGETS tbbmalloc_proxy_static ARCHIVE DESTINATION ${TBB_INSTALL_ARCHIVE_DIR})
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (TBB_BUILD_SHARED)
|
if (TBB_BUILD_SHARED)
|
||||||
add_library(tbbmalloc_proxy SHARED ${tbbmalloc_proxy_src})
|
add_library(tbbmalloc_proxy SHARED ${tbbmalloc_proxy_src})
|
||||||
|
target_link_libraries(tbbmalloc_proxy PRIVATE tbb_interface)
|
||||||
set_property(TARGET tbbmalloc_proxy APPEND PROPERTY COMPILE_DEFINITIONS "__TBBMALLOC_BUILD=1")
|
set_property(TARGET tbbmalloc_proxy APPEND PROPERTY COMPILE_DEFINITIONS "__TBBMALLOC_BUILD=1")
|
||||||
set_property(TARGET tbbmalloc_proxy APPEND_STRING PROPERTY COMPILE_FLAGS ${DISABLE_RTTI})
|
set_property(TARGET tbbmalloc_proxy APPEND_STRING PROPERTY COMPILE_FLAGS ${DISABLE_RTTI})
|
||||||
target_link_libraries(tbbmalloc_proxy tbbmalloc)
|
if (TBB_SET_SOVERSION)
|
||||||
install(TARGETS tbbmalloc_proxy DESTINATION lib)
|
set_property(TARGET tbbmalloc_proxy PROPERTY SOVERSION 2)
|
||||||
|
endif ()
|
||||||
|
target_link_libraries(tbbmalloc_proxy PUBLIC tbbmalloc)
|
||||||
|
if (TBB_INSTALL_TARGETS)
|
||||||
|
install(TARGETS tbbmalloc_proxy EXPORT TBB
|
||||||
|
LIBRARY DESTINATION ${TBB_INSTALL_LIBRARY_DIR}
|
||||||
|
ARCHIVE DESTINATION ${TBB_INSTALL_ARCHIVE_DIR}
|
||||||
|
RUNTIME DESTINATION ${TBB_INSTALL_RUNTIME_DIR})
|
||||||
|
if (MSVC)
|
||||||
|
install(FILES $<TARGET_PDB_FILE:tbbmalloc_proxy> DESTINATION ${TBB_INSTALL_RUNTIME_DIR} OPTIONAL)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
if (UNIX AND NOT APPLE)
|
||||||
|
target_link_libraries(tbbmalloc_proxy PUBLIC pthread dl)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
install(DIRECTORY include/tbb DESTINATION include)
|
if (TBB_INSTALL_TARGETS)
|
||||||
|
install(DIRECTORY include/tbb DESTINATION ${TBB_INSTALL_INCLUDE_DIR})
|
||||||
|
if (TBB_BUILD_SHARED)
|
||||||
|
install(EXPORT TBB DESTINATION ${TBB_CMAKE_PACKAGE_INSTALL_DIR} NAMESPACE TBB:: FILE TBBConfig.cmake)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# version file
|
||||||
|
if (TBB_INSTALL_TARGETS)
|
||||||
|
set (_VERSION_FILE ${CMAKE_CURRENT_SOURCE_DIR}/include/tbb/tbb_stddef.h)
|
||||||
|
file (STRINGS ${_VERSION_FILE} _VERSION_MAJOR_STRING REGEX ".*define[ ]+TBB_VERSION_MAJOR[ ]+[0-9]+.*")
|
||||||
|
file (STRINGS ${_VERSION_FILE} _VERSION_MINOR_STRING REGEX ".*define[ ]+TBB_VERSION_MINOR[ ]+[0-9]+.*")
|
||||||
|
string (REGEX REPLACE ".*TBB_VERSION_MAJOR[ ]+([0-9]+)" "\\1" TBB_MAJOR_VERSION ${_VERSION_MAJOR_STRING})
|
||||||
|
string (REGEX REPLACE ".*TBB_VERSION_MINOR[ ]+([0-9]+)" "\\1" TBB_MINOR_VERSION ${_VERSION_MINOR_STRING})
|
||||||
|
set (TBB_VERSION_STRING "${TBB_MAJOR_VERSION}.${TBB_MINOR_VERSION}")
|
||||||
|
include (CMakePackageConfigHelpers)
|
||||||
|
write_basic_package_version_file (TBBConfigVersion.cmake VERSION "${TBB_VERSION_STRING}" COMPATIBILITY AnyNewerVersion)
|
||||||
|
install (FILES ${CMAKE_CURRENT_BINARY_DIR}/TBBConfigVersion.cmake DESTINATION "${TBB_CMAKE_PACKAGE_INSTALL_DIR}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# version_string.ver
|
||||||
|
if (UNIX AND NOT TBB_NO_DATE)
|
||||||
|
execute_process (COMMAND date "+%a, %d %b %Y %H:%M:%S %z"
|
||||||
|
OUTPUT_VARIABLE _configure_date
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
elseif (WIN32 AND NOT TBB_NO_DATE)
|
||||||
|
execute_process (COMMAND cmd " /C date /T"
|
||||||
|
OUTPUT_VARIABLE _configure_date
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
else ()
|
||||||
|
set (_configure_date "Unknown")
|
||||||
|
endif()
|
||||||
|
set (TBB_CONFIG_DATE "${_configure_date}" CACHE STRING "First time that TBB was configured")
|
||||||
|
set (_configure_date "${TBB_CONFIG_DATE}")
|
||||||
|
include_directories (${CMAKE_BINARY_DIR})
|
||||||
|
configure_file (build/version_string.ver.in version_string.ver @ONLY)
|
||||||
|
|
||||||
|
if (TBB_BUILD_TESTS)
|
||||||
|
enable_language (C)
|
||||||
|
enable_testing ()
|
||||||
|
|
||||||
|
find_library (LIBRT_LIBRARIES rt)
|
||||||
|
find_library (LIDL_LIBRARIES dl)
|
||||||
|
find_package (Threads)
|
||||||
|
if (NOT APPLE)
|
||||||
|
find_package (OpenMP)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
macro (tbb_add_test testname)
|
||||||
|
set (full_testname tbb_test_${testname})
|
||||||
|
add_executable (${full_testname} src/test/test_${testname}.cpp)
|
||||||
|
target_link_libraries(${full_testname} PRIVATE tbb_interface)
|
||||||
|
if (TBB_BUILD_SHARED)
|
||||||
|
target_link_libraries (${full_testname} PRIVATE tbb tbbmalloc)
|
||||||
|
target_compile_definitions (${full_testname} PRIVATE __TBB_LIB_NAME=tbb)
|
||||||
|
else ()
|
||||||
|
target_link_libraries (${full_testname} PRIVATE tbb_static tbbmalloc_static)
|
||||||
|
target_compile_definitions (${full_testname} PRIVATE __TBB_LIB_NAME=tbb_static)
|
||||||
|
endif ()
|
||||||
|
if (LIBRT_LIBRARIES)
|
||||||
|
target_link_libraries (${full_testname} PRIVATE ${LIBRT_LIBRARIES})
|
||||||
|
endif ()
|
||||||
|
if (LIDL_LIBRARIES)
|
||||||
|
target_link_libraries (${full_testname} PRIVATE ${LIDL_LIBRARIES})
|
||||||
|
endif ()
|
||||||
|
if (Threads_FOUND)
|
||||||
|
target_link_libraries (${full_testname} PRIVATE ${CMAKE_THREAD_LIBS_INIT})
|
||||||
|
endif ()
|
||||||
|
if (OPENMP_FOUND AND "${testname}" MATCHES "openmp")
|
||||||
|
set_target_properties (${full_testname} PROPERTIES COMPILE_FLAGS "${OpenMP_CXX_FLAGS}")
|
||||||
|
set_target_properties (${full_testname} PROPERTIES LINK_FLAGS "${OpenMP_CXX_FLAGS}")
|
||||||
|
endif()
|
||||||
|
if (MINGW)
|
||||||
|
target_link_libraries (${full_testname} PRIVATE psapi)
|
||||||
|
endif ()
|
||||||
|
add_test (NAME ${full_testname} COMMAND ${full_testname})
|
||||||
|
endmacro ()
|
||||||
|
|
||||||
|
tbb_add_test (aggregator)
|
||||||
|
tbb_add_test (aligned_space)
|
||||||
|
tbb_add_test (assembly)
|
||||||
|
if (NOT WIN32)
|
||||||
|
tbb_add_test (async_msg) # msvc64/debug timeouts
|
||||||
|
endif()
|
||||||
|
tbb_add_test (async_node)
|
||||||
|
# tbb_add_test (atomic) # msvc64/debug timeouts: Compile-time initialization fails for static tbb::atomic variables
|
||||||
|
tbb_add_test (blocked_range2d)
|
||||||
|
tbb_add_test (blocked_range3d)
|
||||||
|
tbb_add_test (blocked_range)
|
||||||
|
tbb_add_test (broadcast_node)
|
||||||
|
tbb_add_test (buffer_node)
|
||||||
|
tbb_add_test (cache_aligned_allocator)
|
||||||
|
if (NOT WIN32)
|
||||||
|
tbb_add_test (cache_aligned_allocator_STL)
|
||||||
|
endif()
|
||||||
|
tbb_add_test (cilk_dynamic_load)
|
||||||
|
tbb_add_test (cilk_interop)
|
||||||
|
tbb_add_test (combinable)
|
||||||
|
tbb_add_test (composite_node)
|
||||||
|
tbb_add_test (concurrent_hash_map)
|
||||||
|
tbb_add_test (concurrent_lru_cache)
|
||||||
|
# tbb_add_test (concurrent_monitor) # too long
|
||||||
|
# tbb_add_test (concurrent_priority_queue)
|
||||||
|
if (NOT WIN32)
|
||||||
|
tbb_add_test (concurrent_queue) # msvc64/debug timeouts
|
||||||
|
endif()
|
||||||
|
# tbb_add_test (concurrent_queue_whitebox)
|
||||||
|
tbb_add_test (concurrent_unordered_map)
|
||||||
|
# tbb_add_test (concurrent_unordered_set)
|
||||||
|
tbb_add_test (concurrent_vector)
|
||||||
|
tbb_add_test (continue_node)
|
||||||
|
tbb_add_test (critical_section)
|
||||||
|
tbb_add_test (dynamic_link)
|
||||||
|
# tbb_add_test (eh_algorithms)
|
||||||
|
tbb_add_test (eh_flow_graph)
|
||||||
|
# tbb_add_test (eh_tasks)
|
||||||
|
tbb_add_test (enumerable_thread_specific)
|
||||||
|
tbb_add_test (examples_common_utility)
|
||||||
|
# tbb_add_test (fast_random)
|
||||||
|
tbb_add_test (flow_graph)
|
||||||
|
tbb_add_test (flow_graph_whitebox)
|
||||||
|
# tbb_add_test (fp) # mingw: harness_fp.h:66, assertion !checkConsistency || (ctl.mxcsr & SSE_RND_MODE_MASK) >> 3 == (ctl.x87cw & FE_RND_MODE_MASK): failed
|
||||||
|
# tbb_add_test (function_node) # mingw:random timeout
|
||||||
|
# tbb_add_test (global_control)
|
||||||
|
# tbb_add_test (global_control_whitebox)
|
||||||
|
tbb_add_test (halt)
|
||||||
|
tbb_add_test (handle_perror)
|
||||||
|
# tbb_add_test (hw_concurrency)
|
||||||
|
tbb_add_test (indexer_node)
|
||||||
|
tbb_add_test (inits_loop)
|
||||||
|
tbb_add_test (intrusive_list)
|
||||||
|
tbb_add_test (ittnotify)
|
||||||
|
# tbb_add_test (join_node) #msvc/64: fatal error C1128: number of sections exceeded object file format limit: compile with /bigob
|
||||||
|
tbb_add_test (lambda)
|
||||||
|
tbb_add_test (limiter_node)
|
||||||
|
# tbb_add_test (malloc_atexit)
|
||||||
|
# tbb_add_test (malloc_compliance) #mingw: Limits should be decreased for the test to work
|
||||||
|
tbb_add_test (malloc_init_shutdown)
|
||||||
|
# tbb_add_test (malloc_lib_unload)
|
||||||
|
# tbb_add_test (malloc_overload)
|
||||||
|
tbb_add_test (malloc_pools)
|
||||||
|
tbb_add_test (malloc_regression)
|
||||||
|
# tbb_add_test (malloc_used_by_lib)
|
||||||
|
# tbb_add_test (malloc_whitebox)
|
||||||
|
tbb_add_test (model_plugin)
|
||||||
|
# tbb_add_test (multifunction_node) # too long
|
||||||
|
tbb_add_test (mutex)
|
||||||
|
tbb_add_test (mutex_native_threads)
|
||||||
|
# tbb_add_test (opencl_node)
|
||||||
|
if (OPENMP_FOUND)
|
||||||
|
tbb_add_test (openmp)
|
||||||
|
endif ()
|
||||||
|
tbb_add_test (overwrite_node)
|
||||||
|
# tbb_add_test (parallel_do)
|
||||||
|
# This seems to fail on CI platforms (AppVeyor/Travis), perhaps because the VM exposes just 1 core?
|
||||||
|
tbb_add_test (parallel_for)
|
||||||
|
tbb_add_test (parallel_for_each)
|
||||||
|
tbb_add_test (parallel_for_vectorization)
|
||||||
|
tbb_add_test (parallel_invoke)
|
||||||
|
tbb_add_test (parallel_pipeline)
|
||||||
|
tbb_add_test (parallel_reduce)
|
||||||
|
tbb_add_test (parallel_scan)
|
||||||
|
tbb_add_test (parallel_sort)
|
||||||
|
tbb_add_test (parallel_while)
|
||||||
|
# tbb_add_test (partitioner_whitebox) # too long
|
||||||
|
tbb_add_test (pipeline)
|
||||||
|
# tbb_add_test (pipeline_with_tbf) # takes forever on appveyor
|
||||||
|
tbb_add_test (priority_queue_node)
|
||||||
|
tbb_add_test (queue_node)
|
||||||
|
tbb_add_test (reader_writer_lock)
|
||||||
|
# tbb_add_test (runtime_loader) # LINK : fatal error LNK1104: cannot open file 'tbbproxy.lib' [C:\projects\tbb\test_runtime_loader.vcxproj]
|
||||||
|
tbb_add_test (rwm_upgrade_downgrade)
|
||||||
|
# tbb_add_test (ScalableAllocator)
|
||||||
|
if (NOT WIN32)
|
||||||
|
tbb_add_test (ScalableAllocator_STL)
|
||||||
|
endif()
|
||||||
|
tbb_add_test (semaphore)
|
||||||
|
# tbb_add_test (sequencer_node) # msvc: timeout
|
||||||
|
tbb_add_test (source_node)
|
||||||
|
tbb_add_test (split_node)
|
||||||
|
tbb_add_test (static_assert)
|
||||||
|
tbb_add_test (std_thread)
|
||||||
|
tbb_add_test (tagged_msg)
|
||||||
|
# tbb_add_test (task_arena) # LINK : fatal error LNK1104: cannot open file '__TBB_LIB_NAME.lib' [C:\projects\tbb\test_task_arena.vcxproj]
|
||||||
|
# tbb_add_test (task_assertions)
|
||||||
|
tbb_add_test (task_auto_init)
|
||||||
|
tbb_add_test (task)
|
||||||
|
# tbb_add_test (task_enqueue) # too long
|
||||||
|
tbb_add_test (task_group)
|
||||||
|
# tbb_add_test (task_leaks)
|
||||||
|
# tbb_add_test (task_priority)
|
||||||
|
# tbb_add_test (task_scheduler_init) # msvc: test_task_scheduler_init.cpp:68, assertion !test_mandatory_parallelism || Harness::CanReachConcurrencyLevel(threads): failed
|
||||||
|
tbb_add_test (task_scheduler_observer)
|
||||||
|
tbb_add_test (task_steal_limit)
|
||||||
|
tbb_add_test (tbb_condition_variable)
|
||||||
|
tbb_add_test (tbb_fork)
|
||||||
|
# tbb_add_test (tbb_header)
|
||||||
|
tbb_add_test (tbb_thread)
|
||||||
|
# tbb_add_test (tbb_version)
|
||||||
|
tbb_add_test (tick_count)
|
||||||
|
tbb_add_test (tuple)
|
||||||
|
tbb_add_test (write_once_node)
|
||||||
|
tbb_add_test (yield)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
if (TBB_BUILD_PYTHON)
|
||||||
|
find_package(PythonInterp)
|
||||||
|
find_package(PythonLibs ${PYTHON_VERSION_STRING} EXACT)
|
||||||
|
find_package(SWIG 3)
|
||||||
|
if (PythonLibs_FOUND AND SWIG_FOUND AND TBB_BUILD_SHARED)
|
||||||
|
include (${SWIG_USE_FILE})
|
||||||
|
set_source_files_properties (python/tbb/api.i PROPERTIES CPLUSPLUS ON)
|
||||||
|
set (CMAKE_SWIG_FLAGS "-threads")
|
||||||
|
|
||||||
|
# swig_add_module is deprecated
|
||||||
|
if (CMAKE_VERSION VERSION_LESS 3.8)
|
||||||
|
swig_add_module (api python python/tbb/api.i)
|
||||||
|
else ()
|
||||||
|
swig_add_library (api LANGUAGE python SOURCES python/tbb/api.i)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
# UseSWIG generates now standard target names
|
||||||
|
if (CMAKE_VERSION VERSION_LESS 3.13)
|
||||||
|
set (module_target ${SWIG_MODULE_api_REAL_NAME})
|
||||||
|
else ()
|
||||||
|
set (module_target api)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
target_include_directories(${module_target} PRIVATE ${PYTHON_INCLUDE_DIRS})
|
||||||
|
target_link_libraries(${module_target} PRIVATE tbb)
|
||||||
|
if(WIN32)
|
||||||
|
target_link_libraries(${module_target} ${PYTHON_LIBRARIES})
|
||||||
|
elseif(APPLE)
|
||||||
|
set_target_properties(${module_target} PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (WIN32)
|
||||||
|
set (PYTHON_SITE_PACKAGES Lib/site-packages)
|
||||||
|
else ()
|
||||||
|
set (PYTHON_SITE_PACKAGES lib/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/site-packages)
|
||||||
|
endif ()
|
||||||
|
if (TBB_INSTALL_TARGETS)
|
||||||
|
install(FILES python/TBB.py
|
||||||
|
DESTINATION ${PYTHON_SITE_PACKAGES})
|
||||||
|
install(FILES python/tbb/__init__.py python/tbb/pool.py python/tbb/test.py python/tbb/__main__.py ${CMAKE_CURRENT_BINARY_DIR}/api.py
|
||||||
|
DESTINATION ${PYTHON_SITE_PACKAGES}/tbb)
|
||||||
|
install(TARGETS ${module_target}
|
||||||
|
DESTINATION ${PYTHON_SITE_PACKAGES}/tbb)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(UNIX AND NOT APPLE)
|
||||||
|
add_library(irml SHARED python/rml/ipc_server.cpp python/rml/ipc_utils.cpp src/tbb/cache_aligned_allocator.cpp src/tbb/dynamic_link.cpp src/tbb/tbb_misc_ex.cpp src/tbb/tbb_misc.cpp)
|
||||||
|
target_compile_definitions(irml PRIVATE DO_ITT_NOTIFY=0 USE_PTHREAD=1)
|
||||||
|
target_link_libraries(irml PRIVATE tbb)
|
||||||
|
set_target_properties(irml PROPERTIES VERSION 1)
|
||||||
|
if (TBB_INSTALL_TARGETS)
|
||||||
|
install(TARGETS irml DESTINATION ${TBB_INSTALL_LIBRARY_DIR})
|
||||||
|
endif()
|
||||||
|
endif ()
|
||||||
|
endif ()
|
||||||
|
endif ()
|
||||||
|
@@ -68,18 +68,32 @@
|
|||||||
+
|
+
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
diff --git a/libavcodec/x86/simple_idct.asm b/libavcodec/x86/simple_idct.asm
|
--- a/libavcodec/rl.c
|
||||||
index dcf0da6df121..982b2f0bbba1 100644
|
+++ b/libavcodec/rl.c
|
||||||
--- a/libavcodec/x86/simple_idct.asm
|
@@ -71,7 +71,7 @@ av_cold void ff_rl_init(RLTable *rl,
|
||||||
+++ b/libavcodec/x86/simple_idct.asm
|
av_cold void ff_rl_init_vlc(RLTable *rl, unsigned static_size)
|
||||||
@@ -25,9 +25,9 @@
|
{
|
||||||
|
int i, q;
|
||||||
|
- VLC_TYPE table[1500][2] = {{0}};
|
||||||
|
+ VLC_TYPE (*table)[2] = av_calloc(sizeof(VLC_TYPE), 1500 * 2);
|
||||||
|
VLC vlc = { .table = table, .table_allocated = static_size };
|
||||||
|
av_assert0(static_size <= FF_ARRAY_ELEMS(table));
|
||||||
|
init_vlc(&vlc, 9, rl->n + 1, &rl->table_vlc[0][1], 4, 2, &rl->table_vlc[0][0], 4, 2, INIT_VLC_USE_NEW_STATIC);
|
||||||
|
@@ -80,8 +80,10 @@ av_cold void ff_rl_init_vlc(RLTable *rl, unsigned static_size)
|
||||||
|
int qmul = q * 2;
|
||||||
|
int qadd = (q - 1) | 1;
|
||||||
|
|
||||||
%include "libavutil/x86/x86util.asm"
|
- if (!rl->rl_vlc[q])
|
||||||
|
+ if (!rl->rl_vlc[q]){
|
||||||
|
+ av_free(table);
|
||||||
|
return;
|
||||||
|
+ }
|
||||||
|
|
||||||
-%if ARCH_X86_32
|
if (q == 0) {
|
||||||
SECTION_RODATA
|
qmul = 1;
|
||||||
|
@@ -113,4 +115,5 @@ av_cold void ff_rl_init_vlc(RLTable *rl, unsigned static_size)
|
||||||
+%if ARCH_X86_32
|
rl->rl_vlc[q][i].run = run;
|
||||||
cextern pb_80
|
}
|
||||||
|
}
|
||||||
wm1010: dw 0, 0xffff, 0, 0xffff
|
+ av_free(table);
|
||||||
|
}
|
||||||
|
@@ -1,15 +0,0 @@
|
|||||||
--- a/mpz/inp_raw.c Tue Dec 22 23:49:51 2020 +0100
|
|
||||||
+++ b/mpz/inp_raw.c Thu Oct 21 19:06:49 2021 +0200
|
|
||||||
@@ -88,8 +88,11 @@
|
|
||||||
|
|
||||||
abs_csize = ABS (csize);
|
|
||||||
|
|
||||||
+ if (UNLIKELY (abs_csize > ~(mp_bitcnt_t) 0 / 8))
|
|
||||||
+ return 0; /* Bit size overflows */
|
|
||||||
+
|
|
||||||
/* round up to a multiple of limbs */
|
|
||||||
- abs_xsize = BITS_TO_LIMBS (abs_csize*8);
|
|
||||||
+ abs_xsize = BITS_TO_LIMBS ((mp_bitcnt_t) abs_csize * 8);
|
|
||||||
|
|
||||||
if (abs_xsize != 0)
|
|
||||||
{
|
|
@@ -1,33 +1,3 @@
|
|||||||
diff -Naur oidn-1.3.0/cmake/FindTBB.cmake external_openimagedenoise/cmake/FindTBB.cmake
|
|
||||||
--- oidn-1.3.0/cmake/FindTBB.cmake 2021-02-04 16:20:26 -0700
|
|
||||||
+++ external_openimagedenoise/cmake/FindTBB.cmake 2021-02-12 09:35:53 -0700
|
|
||||||
@@ -332,20 +332,22 @@
|
|
||||||
${TBB_ROOT}/lib/${TBB_ARCH}/${TBB_VCVER}
|
|
||||||
${TBB_ROOT}/lib
|
|
||||||
)
|
|
||||||
-
|
|
||||||
# On Windows, also search the DLL so that the client may install it.
|
|
||||||
file(GLOB DLL_NAMES
|
|
||||||
${TBB_ROOT}/bin/${TBB_ARCH}/${TBB_VCVER}/${LIB_NAME}.dll
|
|
||||||
${TBB_ROOT}/bin/${LIB_NAME}.dll
|
|
||||||
+ ${TBB_ROOT}/lib/${LIB_NAME}.dll
|
|
||||||
${TBB_ROOT}/redist/${TBB_ARCH}/${TBB_VCVER}/${LIB_NAME}.dll
|
|
||||||
${TBB_ROOT}/redist/${TBB_ARCH}/${TBB_VCVER}/${LIB_NAME_GLOB1}.dll
|
|
||||||
${TBB_ROOT}/redist/${TBB_ARCH}/${TBB_VCVER}/${LIB_NAME_GLOB2}.dll
|
|
||||||
${TBB_ROOT}/../redist/${TBB_ARCH}/tbb/${TBB_VCVER}/${LIB_NAME}.dll
|
|
||||||
${TBB_ROOT}/../redist/${TBB_ARCH}_win/tbb/${TBB_VCVER}/${LIB_NAME}.dll
|
|
||||||
)
|
|
||||||
- list(GET DLL_NAMES 0 DLL_NAME)
|
|
||||||
- get_filename_component(${BIN_DIR_VAR} "${DLL_NAME}" DIRECTORY)
|
|
||||||
- set(${DLL_VAR} "${DLL_NAME}" CACHE PATH "${COMPONENT_NAME} ${BUILD_CONFIG} dll path")
|
|
||||||
+ if (DLL_NAMES)
|
|
||||||
+ list(GET DLL_NAMES 0 DLL_NAME)
|
|
||||||
+ get_filename_component(${BIN_DIR_VAR} "${DLL_NAME}" DIRECTORY)
|
|
||||||
+ set(${DLL_VAR} "${DLL_NAME}" CACHE PATH "${COMPONENT_NAME} ${BUILD_CONFIG} dll path")
|
|
||||||
+ endif()
|
|
||||||
elseif(APPLE)
|
|
||||||
set(LIB_PATHS ${TBB_ROOT}/lib)
|
|
||||||
else()
|
|
||||||
--- external_openimagedenoise/cmake/oidn_ispc.cmake 2021-02-15 17:29:34.000000000 +0100
|
--- external_openimagedenoise/cmake/oidn_ispc.cmake 2021-02-15 17:29:34.000000000 +0100
|
||||||
+++ external_openimagedenoise/cmake/oidn_ispc.cmake2 2021-02-15 17:29:28.000000000 +0100
|
+++ external_openimagedenoise/cmake/oidn_ispc.cmake2 2021-02-15 17:29:28.000000000 +0100
|
||||||
@@ -98,7 +98,7 @@
|
@@ -98,7 +98,7 @@
|
||||||
|
@@ -130,28 +130,3 @@ index 715d903..24423ce 100644
|
|||||||
{
|
{
|
||||||
string id = node.attribute("id").value();
|
string id = node.attribute("id").value();
|
||||||
size_t line = node.line();
|
size_t line = node.line();
|
||||||
diff -Naur a/CMakeLists.txt b/CMakeLists.txt
|
|
||||||
--- a/CMakeLists.txt
|
|
||||||
+++ b/CMakeLists.txt
|
|
||||||
@@ -274,7 +274,7 @@
|
|
||||||
add_subdirectory(${EXTERNAL_LIBRARIES}/UTF)
|
|
||||||
add_subdirectory(common/libBuffer)
|
|
||||||
add_subdirectory(${EXTERNAL_LIBRARIES}/MathMLSolver)
|
|
||||||
-add_subdirectory(${EXTERNAL_LIBRARIES}/zlib)
|
|
||||||
+#add_subdirectory(${EXTERNAL_LIBRARIES}/zlib)
|
|
||||||
|
|
||||||
# building OpenCOLLADA libs
|
|
||||||
add_subdirectory(COLLADABaseUtils)
|
|
||||||
@@ -284,10 +284,10 @@
|
|
||||||
add_subdirectory(COLLADAStreamWriter)
|
|
||||||
|
|
||||||
# building COLLADAValidator app
|
|
||||||
-add_subdirectory(COLLADAValidator)
|
|
||||||
+#add_subdirectory(COLLADAValidator)
|
|
||||||
|
|
||||||
# DAE validator app
|
|
||||||
-add_subdirectory(DAEValidator)
|
|
||||||
+#add_subdirectory(DAEValidator)
|
|
||||||
|
|
||||||
# Library export
|
|
||||||
install(EXPORT LibraryExport DESTINATION ${OPENCOLLADA_INST_CMAKECONFIG} FILE OpenCOLLADATargets.cmake)
|
|
||||||
|
@@ -18,30 +18,6 @@ diff -Naur OpenShadingLanguage-Release-1.9.9/src/include/OSL/llvm_util.h externa
|
|||||||
+++ external_osl/src/include/OSL/llvm_util.h 2018-08-25 14:05:00 -0600
|
+++ external_osl/src/include/OSL/llvm_util.h 2018-08-25 14:05:00 -0600
|
||||||
@@ -33,6 +33,8 @@
|
@@ -33,6 +33,8 @@
|
||||||
|
|
||||||
+set (USE_OIIO_STATIC ON CACHE BOOL "If OIIO is built static")
|
|
||||||
+if (USE_OIIO_STATIC)
|
|
||||||
+ add_definitions ("-DOIIO_STATIC_BUILD=1")
|
|
||||||
+ add_definitions ("-DOIIO_STATIC_DEFINE=1")
|
|
||||||
+endif ()
|
|
||||||
|
|
||||||
set (OSL_NO_DEFAULT_TEXTURESYSTEM OFF CACHE BOOL "Do not use create a raw OIIO::TextureSystem")
|
|
||||||
if (OSL_NO_DEFAULT_TEXTURESYSTEM)
|
|
||||||
diff -Naur OpenShadingLanguage-1.12.6.2/src/cmake/externalpackages.cmake external_osl/src/cmake/externalpackages.cmake
|
|
||||||
--- OpenShadingLanguage-1.12.6.2/src/cmake/externalpackages.cmake 2022-09-30 17:43:53 -0600
|
|
||||||
+++ external_osl/src/cmake/externalpackages.cmake 2022-10-15 14:49:26 -0600
|
|
||||||
@@ -77,6 +77,7 @@
|
|
||||||
|
|
||||||
|
|
||||||
checked_find_package (ZLIB REQUIRED) # Needed by several packages
|
|
||||||
+checked_find_package (PNG REQUIRED) # Needed since OIIO needs it
|
|
||||||
|
|
||||||
# IlmBase & OpenEXR
|
|
||||||
checked_find_package (OpenEXR REQUIRED
|
|
||||||
diff -Naur OpenShadingLanguage-1.12.6.2/src/include/OSL/llvm_util.h external_osl/src/include/OSL/llvm_util.h
|
|
||||||
--- OpenShadingLanguage-1.12.6.2/src/include/OSL/llvm_util.h 2022-09-30 17:43:53 -0600
|
|
||||||
+++ external_osl/src/include/OSL/llvm_util.h 2022-10-15 15:37:24 -0600
|
|
||||||
@@ -9,6 +9,8 @@
|
|
||||||
#include <unordered_set>
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
+#define OSL_HAS_BLENDER_CLEANUP_FIX
|
+#define OSL_HAS_BLENDER_CLEANUP_FIX
|
||||||
@@ -49,14 +25,26 @@ diff -Naur OpenShadingLanguage-1.12.6.2/src/include/OSL/llvm_util.h external_osl
|
|||||||
#ifdef LLVM_NAMESPACE
|
#ifdef LLVM_NAMESPACE
|
||||||
namespace llvm = LLVM_NAMESPACE;
|
namespace llvm = LLVM_NAMESPACE;
|
||||||
#endif
|
#endif
|
||||||
@@ -455,7 +457,7 @@
|
@@ -487,6 +489,7 @@
|
||||||
llvm::BasicBlock* masked_return_block() const;
|
std::string func_name (llvm::Function *f);
|
||||||
|
|
||||||
bool is_masking_required() const { return m_is_masking_required; }
|
static size_t total_jit_memory_held ();
|
||||||
-
|
|
||||||
+ static void Cleanup ();
|
+ static void Cleanup ();
|
||||||
struct ScopedMasking {
|
|
||||||
ScopedMasking() {}
|
private:
|
||||||
|
class MemoryManager;
|
||||||
|
diff -Naur OpenShadingLanguage-Release-1.9.9/src/liboslexec/llvm_util.cpp external_osl/src/liboslexec/llvm_util.cpp
|
||||||
|
--- OpenShadingLanguage-Release-1.9.9/src/liboslexec/llvm_util.cpp 2018-05-01 16:39:02 -0600
|
||||||
|
+++ external_osl/src/liboslexec/llvm_util.cpp 2018-08-25 14:04:27 -0600
|
||||||
|
@@ -140,7 +140,10 @@
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
-
|
||||||
|
+void LLVM_Util::Cleanup ()
|
||||||
|
+{
|
||||||
|
+ if(jitmm_hold) jitmm_hold->clear();
|
||||||
|
+}
|
||||||
|
|
||||||
size_t
|
size_t
|
||||||
LLVM_Util::total_jit_memory_held ()
|
LLVM_Util::total_jit_memory_held ()
|
||||||
|
42
build_files/build_environment/patches/sndfile.diff
Normal file
42
build_files/build_environment/patches/sndfile.diff
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
--- src/Makefile.in 2017-09-26 01:28:47.000000000 +0300
|
||||||
|
+++ src/Makefile.in 2017-09-26 01:19:06.000000000 +0300
|
||||||
|
@@ -513,7 +513,7 @@
|
||||||
|
libcommon_la_SOURCES = common.c file_io.c command.c pcm.c ulaw.c alaw.c \
|
||||||
|
float32.c double64.c ima_adpcm.c ms_adpcm.c gsm610.c dwvw.c vox_adpcm.c \
|
||||||
|
interleave.c strings.c dither.c cart.c broadcast.c audio_detect.c \
|
||||||
|
- ima_oki_adpcm.c ima_oki_adpcm.h alac.c chunk.c ogg.c chanmap.c \
|
||||||
|
+ ima_oki_adpcm.c ima_oki_adpcm.h alac.c chunk.c ogg.c chanmap.c \
|
||||||
|
windows.c id3.c $(WIN_VERSION_FILE)
|
||||||
|
|
||||||
|
|
||||||
|
@@ -719,10 +719,10 @@
|
||||||
|
$(AM_V_CCLD)$(LINK) $(GSM610_libgsm_la_OBJECTS) $(GSM610_libgsm_la_LIBADD) $(LIBS)
|
||||||
|
|
||||||
|
libcommon.la: $(libcommon_la_OBJECTS) $(libcommon_la_DEPENDENCIES) $(EXTRA_libcommon_la_DEPENDENCIES)
|
||||||
|
- $(AM_V_CCLD)$(LINK) $(libcommon_la_OBJECTS) $(libcommon_la_LIBADD) $(LIBS)
|
||||||
|
+ $(AM_V_CCLD)$(LINK) $(libcommon_la_OBJECTS) $(libcommon_la_LIBADD) $(LIBS) $(EXTERNAL_XIPH_LIBS)
|
||||||
|
|
||||||
|
libsndfile.la: $(libsndfile_la_OBJECTS) $(libsndfile_la_DEPENDENCIES) $(EXTRA_libsndfile_la_DEPENDENCIES)
|
||||||
|
- $(AM_V_CCLD)$(libsndfile_la_LINK) -rpath $(libdir) $(libsndfile_la_OBJECTS) $(libsndfile_la_LIBADD) $(LIBS)
|
||||||
|
+ $(AM_V_CCLD)$(libsndfile_la_LINK) -rpath $(libdir) $(libsndfile_la_OBJECTS) $(libsndfile_la_LIBADD) $(LIBS) $(EXTERNAL_XIPH_LIBS)
|
||||||
|
|
||||||
|
clean-checkPROGRAMS:
|
||||||
|
@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
|
||||||
|
@@ -924,7 +924,7 @@
|
||||||
|
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsndfile_la_CPPFLAGS) $(CPPFLAGS) $(libsndfile_la_CFLAGS) $(CFLAGS) -c -o libsndfile_la-dwd.lo `test -f 'dwd.c' || echo '$(srcdir)/'`dwd.c
|
||||||
|
|
||||||
|
libsndfile_la-flac.lo: flac.c
|
||||||
|
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsndfile_la_CPPFLAGS) $(CPPFLAGS) $(libsndfile_la_CFLAGS) $(CFLAGS) -MT libsndfile_la-flac.lo -MD -MP -MF $(DEPDIR)/libsndfile_la-flac.Tpo -c -o libsndfile_la-flac.lo `test -f 'flac.c' || echo '$(srcdir)/'`flac.c
|
||||||
|
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsndfile_la_CPPFLAGS) $(CPPFLAGS) $(libsndfile_la_CFLAGS) $(CFLAGS) $(EXTERNAL_XIPH_CFLAGS) -MT libsndfile_la-flac.lo -MD -MP -MF $(DEPDIR)/libsndfile_la-flac.Tpo -c -o libsndfile_la-flac.lo `test -f 'flac.c' || echo '$(srcdir)/'`flac.c
|
||||||
|
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsndfile_la-flac.Tpo $(DEPDIR)/libsndfile_la-flac.Plo
|
||||||
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='flac.c' object='libsndfile_la-flac.lo' libtool=yes @AMDEPBACKSLASH@
|
||||||
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
|
@@ -1092,7 +1092,7 @@
|
||||||
|
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsndfile_la_CPPFLAGS) $(CPPFLAGS) $(libsndfile_la_CFLAGS) $(CFLAGS) -c -o libsndfile_la-rf64.lo `test -f 'rf64.c' || echo '$(srcdir)/'`rf64.c
|
||||||
|
|
||||||
|
libsndfile_la-ogg_vorbis.lo: ogg_vorbis.c
|
||||||
|
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsndfile_la_CPPFLAGS) $(CPPFLAGS) $(libsndfile_la_CFLAGS) $(CFLAGS) -MT libsndfile_la-ogg_vorbis.lo -MD -MP -MF $(DEPDIR)/libsndfile_la-ogg_vorbis.Tpo -c -o libsndfile_la-ogg_vorbis.lo `test -f 'ogg_vorbis.c' || echo '$(srcdir)/'`ogg_vorbis.c
|
||||||
|
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsndfile_la_CPPFLAGS) $(CPPFLAGS) $(libsndfile_la_CFLAGS) $(CFLAGS) $(EXTERNAL_XIPH_CFLAGS) -MT libsndfile_la-ogg_vorbis.lo -MD -MP -MF $(DEPDIR)/libsndfile_la-ogg_vorbis.Tpo -c -o libsndfile_la-ogg_vorbis.lo `test -f 'ogg_vorbis.c' || echo '$(srcdir)/'`ogg_vorbis.c
|
||||||
|
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsndfile_la-ogg_vorbis.Tpo $(DEPDIR)/libsndfile_la-ogg_vorbis.Plo
|
||||||
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ogg_vorbis.c' object='libsndfile_la-ogg_vorbis.lo' libtool=yes @AMDEPBACKSLASH@
|
||||||
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
14
build_files/build_environment/patches/sqlite.diff
Normal file
14
build_files/build_environment/patches/sqlite.diff
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
Only in external_sqlite_orig: config.log
|
||||||
|
diff -ru external_sqlite_orig/config.sub external_sqlite/config.sub
|
||||||
|
--- external_sqlite_orig/config.sub 2020-07-10 14:06:42.000000000 +0200
|
||||||
|
+++ external_sqlite/config.sub 2020-07-10 14:10:24.000000000 +0200
|
||||||
|
@@ -314,6 +314,7 @@
|
||||||
|
# Recognize the basic CPU types with company name.
|
||||||
|
580-* \
|
||||||
|
| a29k-* \
|
||||||
|
+ | aarch64-* \
|
||||||
|
| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
|
||||||
|
| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
|
||||||
|
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
|
||||||
|
Only in external_sqlite: mksourceid
|
||||||
|
Only in external_sqlite: sqlite3session.h
|
@@ -1,10 +0,0 @@
|
|||||||
--- ./test/v3ext.c 2022-07-05 11:08:33.000000000 +0200
|
|
||||||
+++ ./test/v3ext.c 2022-10-18 13:58:05.000000000 +0200
|
|
||||||
@@ -8,6 +8,7 @@
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
+#include <string.h>
|
|
||||||
#include <openssl/x509.h>
|
|
||||||
#include <openssl/x509v3.h>
|
|
||||||
#include <openssl/pem.h>
|
|
@@ -11,3 +11,14 @@ index 7a8d06a0..886699d8 100644
|
|||||||
#define __TBB_DEPRECATED [[deprecated]]
|
#define __TBB_DEPRECATED [[deprecated]]
|
||||||
#define __TBB_DEPRECATED_MSG(msg) [[deprecated(msg)]]
|
#define __TBB_DEPRECATED_MSG(msg) [[deprecated(msg)]]
|
||||||
#elif _MSC_VER
|
#elif _MSC_VER
|
||||||
|
--- a/src/tbb/tools_api/ittnotify_config.h
|
||||||
|
+++ b/src/tbb/tools_api/ittnotify_config.h
|
||||||
|
@@ -162,7 +162,7 @@
|
||||||
|
# define ITT_ARCH ITT_ARCH_IA32E
|
||||||
|
# elif defined _M_IA64 || defined __ia64__
|
||||||
|
# define ITT_ARCH ITT_ARCH_IA64
|
||||||
|
-# elif defined _M_ARM || defined __arm__
|
||||||
|
+# elif defined _M_ARM || defined __arm__ || defined __aarch64__
|
||||||
|
# define ITT_ARCH ITT_ARCH_ARM
|
||||||
|
# elif defined __powerpc64__
|
||||||
|
# define ITT_ARCH ITT_ARCH_PPC64
|
||||||
|
@@ -53,3 +53,147 @@ diff -ru USD-20.11/pxr/base/tf/pxrLZ4/lz4.cpp external_usd/pxr/base/tf/pxrLZ4/lz
|
|||||||
|
|
||||||
/*-******************************
|
/*-******************************
|
||||||
* Compression functions
|
* Compression functions
|
||||||
|
|
||||||
|
From 442d087962f762deeb8b6e49a0955753fcf9aeb9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Tsahi Zidenberg <tsahee@amazon.com>
|
||||||
|
Date: Sun, 15 Nov 2020 15:18:24 +0000
|
||||||
|
Subject: [PATCH 1/2] stackTrace: support aarch64/linux
|
||||||
|
|
||||||
|
stacktrace calls syscall directly via assembler. Create compatible
|
||||||
|
aarch64 code.
|
||||||
|
---
|
||||||
|
pxr/base/arch/stackTrace.cpp | 30 ++++++++++++++++++++++++------
|
||||||
|
1 file changed, 24 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/pxr/base/arch/stackTrace.cpp b/pxr/base/arch/stackTrace.cpp
|
||||||
|
index dcc1dfd46..c11aabeb1 100644
|
||||||
|
--- a/pxr/base/arch/stackTrace.cpp
|
||||||
|
+++ b/pxr/base/arch/stackTrace.cpp
|
||||||
|
@@ -583,7 +583,6 @@ nonLockingLinux__execve (const char *file,
|
||||||
|
char *const argv[],
|
||||||
|
char *const envp[])
|
||||||
|
{
|
||||||
|
-#if defined(ARCH_BITS_64)
|
||||||
|
/*
|
||||||
|
* We make a direct system call here, because we can't find an
|
||||||
|
* execve which corresponds with the non-locking fork we call
|
||||||
|
@@ -594,7 +593,27 @@ nonLockingLinux__execve (const char *file,
|
||||||
|
* hangs in a threaded app. (We use the non-locking fork to get
|
||||||
|
* around problems with forking when we have had memory
|
||||||
|
* corruption.) whew.
|
||||||
|
- *
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+ unsigned long result;
|
||||||
|
+
|
||||||
|
+#if defined (__aarch64__)
|
||||||
|
+ {
|
||||||
|
+ register long __file_result asm ("x0") = (long)file;
|
||||||
|
+ register char* const* __argv asm ("x1") = argv;
|
||||||
|
+ register char* const* __envp asm ("x2") = envp;
|
||||||
|
+ register long __num_execve asm ("x8") = 221;
|
||||||
|
+ __asm__ __volatile__ (
|
||||||
|
+ "svc 0"
|
||||||
|
+ : "=r" (__file_result)
|
||||||
|
+ : "r"(__num_execve), "r" (__file_result), "r" (__argv), "r" (__envp)
|
||||||
|
+ : "memory"
|
||||||
|
+ );
|
||||||
|
+ result = __file_result;
|
||||||
|
+ }
|
||||||
|
+#elif defined(ARCH_CPU_INTEL) && defined(ARCH_BITS_64)
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
* %rdi, %rsi, %rdx, %rcx, %r8, %r9 are args 0-5
|
||||||
|
* syscall clobbers %rcx and %r11
|
||||||
|
*
|
||||||
|
@@ -603,7 +622,6 @@ nonLockingLinux__execve (const char *file,
|
||||||
|
* constraints to gcc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- unsigned long result;
|
||||||
|
__asm__ __volatile__ (
|
||||||
|
"mov %0, %%rdi \n\t"
|
||||||
|
"mov %%rcx, %%rsi \n\t"
|
||||||
|
@@ -614,6 +632,9 @@ nonLockingLinux__execve (const char *file,
|
||||||
|
: "0" (file), "c" (argv), "d" (envp)
|
||||||
|
: "memory", "cc", "r11"
|
||||||
|
);
|
||||||
|
+#else
|
||||||
|
+#error Unknown architecture
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
if (result >= 0xfffffffffffff000) {
|
||||||
|
errno = -result;
|
||||||
|
@@ -621,9 +642,6 @@ nonLockingLinux__execve (const char *file,
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
-#else
|
||||||
|
-#error Unknown architecture
|
||||||
|
-#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
From a1dffe02519bb3c6ccbbe8c6c58304da5db98995 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Tsahi Zidenberg <tsahee@amazon.com>
|
||||||
|
Date: Sun, 15 Nov 2020 15:22:52 +0000
|
||||||
|
Subject: [PATCH 2/2] timing: support aarch64/linux
|
||||||
|
|
||||||
|
The aarch64 arch-timer is directly accessible to userspace via two
|
||||||
|
registers:
|
||||||
|
CNTVCT_EL0 - holds the current counter value
|
||||||
|
CNTFRQ_EL0 - holds the counter frequency (in Hz)
|
||||||
|
---
|
||||||
|
pxr/base/arch/timing.cpp | 6 ++++++
|
||||||
|
pxr/base/arch/timing.h | 6 +++++-
|
||||||
|
2 files changed, 11 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/pxr/base/arch/timing.cpp b/pxr/base/arch/timing.cpp
|
||||||
|
index 27ad58fed..9022950c1 100644
|
||||||
|
--- a/pxr/base/arch/timing.cpp
|
||||||
|
+++ b/pxr/base/arch/timing.cpp
|
||||||
|
@@ -59,6 +59,11 @@ ARCH_HIDDEN
|
||||||
|
void
|
||||||
|
Arch_InitTickTimer()
|
||||||
|
{
|
||||||
|
+#ifdef __aarch64__
|
||||||
|
+ uint64_t counter_hz;
|
||||||
|
+ __asm __volatile("mrs %0, CNTFRQ_EL0" : "=&r" (counter_hz));
|
||||||
|
+ Arch_NanosecondsPerTick = double(1e9) / double(counter_hz);
|
||||||
|
+#else
|
||||||
|
// NOTE: Normally ifstream would be cleaner, but it causes crashes when
|
||||||
|
// used in conjunction with DSOs and the Intel Compiler.
|
||||||
|
FILE *in;
|
||||||
|
@@ -135,6 +140,7 @@ Arch_InitTickTimer()
|
||||||
|
}
|
||||||
|
|
||||||
|
Arch_NanosecondsPerTick = double(1e9) / double(cpuHz);
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
#elif defined(ARCH_OS_WINDOWS)
|
||||||
|
|
||||||
|
diff --git a/pxr/base/arch/timing.h b/pxr/base/arch/timing.h
|
||||||
|
index 67ec0d15f..6dc3e85a0 100644
|
||||||
|
--- a/pxr/base/arch/timing.h
|
||||||
|
+++ b/pxr/base/arch/timing.h
|
||||||
|
@@ -36,7 +36,7 @@
|
||||||
|
/// \addtogroup group_arch_SystemFunctions
|
||||||
|
///@{
|
||||||
|
|
||||||
|
-#if defined(ARCH_OS_LINUX)
|
||||||
|
+#if defined(ARCH_OS_LINUX) && defined(ARCH_CPU_INTEL)
|
||||||
|
#include <x86intrin.h>
|
||||||
|
#elif defined(ARCH_OS_DARWIN)
|
||||||
|
#include <mach/mach_time.h>
|
||||||
|
@@ -69,6 +69,10 @@ ArchGetTickTime()
|
||||||
|
#elif defined(ARCH_CPU_INTEL)
|
||||||
|
// On Intel we'll use the rdtsc instruction.
|
||||||
|
return __rdtsc();
|
||||||
|
+#elif defined (__aarch64__)
|
||||||
|
+ uint64_t result;
|
||||||
|
+ __asm __volatile("mrs %0, CNTVCT_EL0" : "=&r" (result));
|
||||||
|
+ return result;
|
||||||
|
#else
|
||||||
|
#error Unknown architecture.
|
||||||
|
#endif
|
||||||
|
@@ -1,70 +1,4 @@
|
|||||||
Blender Buildbot
|
Buildbot Configuration
|
||||||
================
|
=====================
|
||||||
|
|
||||||
Code signing
|
Files used by Buildbot's `compile-code` step.
|
||||||
------------
|
|
||||||
|
|
||||||
Code signing is done as part of INSTALL target, which makes it possible to sign
|
|
||||||
files which are aimed into a bundle and coming from a non-signed source (such as
|
|
||||||
libraries SVN).
|
|
||||||
|
|
||||||
This is achieved by specifying `worker_codesign.cmake` as a post-install script
|
|
||||||
run by CMake. This CMake script simply involves an utility script written in
|
|
||||||
Python which takes care of an actual signing.
|
|
||||||
|
|
||||||
### Configuration
|
|
||||||
|
|
||||||
Client configuration doesn't need anything special, other than variable
|
|
||||||
`SHARED_STORAGE_DIR` pointing to a location which is watched by a server.
|
|
||||||
This is done in `config_builder.py` file and is stored in Git (which makes it
|
|
||||||
possible to have almost zero-configuration buildbot machines).
|
|
||||||
|
|
||||||
Server configuration requires copying `config_server_template.py` under the
|
|
||||||
name of `config_server.py` and tweaking values, which are platform-specific.
|
|
||||||
|
|
||||||
#### Windows configuration
|
|
||||||
|
|
||||||
There are two things which are needed on Windows in order to have code signing
|
|
||||||
to work:
|
|
||||||
|
|
||||||
- `TIMESTAMP_AUTHORITY_URL` which is most likely set http://timestamp.digicert.com
|
|
||||||
- `CERTIFICATE_FILEPATH` which is a full file path to a PKCS #12 key (.pfx).
|
|
||||||
|
|
||||||
## Tips
|
|
||||||
|
|
||||||
### Self-signed certificate on Windows
|
|
||||||
|
|
||||||
It is easiest to test configuration using self-signed certificate.
|
|
||||||
|
|
||||||
The certificate manipulation utilities are coming with Windows SDK.
|
|
||||||
Unfortunately, they are not added to PATH. Here is an example of how to make
|
|
||||||
sure they are easily available:
|
|
||||||
|
|
||||||
```
|
|
||||||
set PATH=C:\Program Files (x86)\Windows Kits\10\App Certification Kit;%PATH%
|
|
||||||
set PATH=C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x64;%PATH%
|
|
||||||
```
|
|
||||||
|
|
||||||
Generate CA:
|
|
||||||
|
|
||||||
```
|
|
||||||
makecert -r -pe -n "CN=Blender Test CA" -ss CA -sr CurrentUser -a sha256 ^
|
|
||||||
-cy authority -sky signature -sv BlenderTestCA.pvk BlenderTestCA.cer
|
|
||||||
```
|
|
||||||
|
|
||||||
Import the generated CA:
|
|
||||||
|
|
||||||
```
|
|
||||||
certutil -user -addstore Root BlenderTestCA.cer
|
|
||||||
```
|
|
||||||
|
|
||||||
Create self-signed certificate and pack it into PKCS #12:
|
|
||||||
|
|
||||||
```
|
|
||||||
makecert -pe -n "CN=Blender Test SPC" -a sha256 -cy end ^
|
|
||||||
-sky signature ^
|
|
||||||
-ic BlenderTestCA.cer -iv BlenderTestCA.pvk ^
|
|
||||||
-sv BlenderTestSPC.pvk BlenderTestSPC.cer
|
|
||||||
|
|
||||||
pvk2pfx -pvk BlenderTestSPC.pvk -spc BlenderTestSPC.cer -pfx BlenderTestSPC.pfx
|
|
||||||
```
|
|
||||||
|
@@ -1,127 +0,0 @@
|
|||||||
# ##### BEGIN GPL LICENSE BLOCK #####
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or
|
|
||||||
# modify it under the terms of the GNU General Public License
|
|
||||||
# as published by the Free Software Foundation; either version 2
|
|
||||||
# of the License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
|
||||||
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
#
|
|
||||||
# ##### END GPL LICENSE BLOCK #####
|
|
||||||
|
|
||||||
# <pep8 compliant>
|
|
||||||
|
|
||||||
import argparse
|
|
||||||
import os
|
|
||||||
import re
|
|
||||||
import subprocess
|
|
||||||
import sys
|
|
||||||
|
|
||||||
|
|
||||||
def is_tool(name):
|
|
||||||
"""Check whether `name` is on PATH and marked as executable."""
|
|
||||||
|
|
||||||
# from whichcraft import which
|
|
||||||
from shutil import which
|
|
||||||
|
|
||||||
return which(name) is not None
|
|
||||||
|
|
||||||
|
|
||||||
class Builder:
|
|
||||||
def __init__(self, name, branch, codesign):
|
|
||||||
self.name = name
|
|
||||||
self.branch = branch
|
|
||||||
self.is_release_branch = re.match("^blender-v(.*)-release$", branch) is not None
|
|
||||||
self.codesign = codesign
|
|
||||||
|
|
||||||
# Buildbot runs from build/ directory
|
|
||||||
self.blender_dir = os.path.abspath(os.path.join('..', 'blender.git'))
|
|
||||||
self.build_dir = os.path.abspath(os.path.join('..', 'build'))
|
|
||||||
self.install_dir = os.path.abspath(os.path.join('..', 'install'))
|
|
||||||
self.upload_dir = os.path.abspath(os.path.join('..', 'install'))
|
|
||||||
|
|
||||||
# Detect platform
|
|
||||||
if name.startswith('mac'):
|
|
||||||
self.platform = 'mac'
|
|
||||||
self.command_prefix = []
|
|
||||||
elif name.startswith('linux'):
|
|
||||||
self.platform = 'linux'
|
|
||||||
if is_tool('scl'):
|
|
||||||
self.command_prefix = ['scl', 'enable', 'devtoolset-9', '--']
|
|
||||||
else:
|
|
||||||
self.command_prefix = []
|
|
||||||
elif name.startswith('win'):
|
|
||||||
self.platform = 'win'
|
|
||||||
self.command_prefix = []
|
|
||||||
else:
|
|
||||||
raise ValueError('Unkonw platform for builder ' + self.platform)
|
|
||||||
|
|
||||||
# Always 64 bit now
|
|
||||||
self.bits = 64
|
|
||||||
|
|
||||||
|
|
||||||
def create_builder_from_arguments():
|
|
||||||
parser = argparse.ArgumentParser()
|
|
||||||
parser.add_argument('builder_name')
|
|
||||||
parser.add_argument('branch', default='master', nargs='?')
|
|
||||||
parser.add_argument("--codesign", action="store_true")
|
|
||||||
args = parser.parse_args()
|
|
||||||
return Builder(args.builder_name, args.branch, args.codesign)
|
|
||||||
|
|
||||||
|
|
||||||
class VersionInfo:
|
|
||||||
def __init__(self, builder):
|
|
||||||
# Get version information
|
|
||||||
buildinfo_h = os.path.join(builder.build_dir, "source", "creator", "buildinfo.h")
|
|
||||||
blender_h = os.path.join(builder.blender_dir, "source", "blender", "blenkernel", "BKE_blender_version.h")
|
|
||||||
|
|
||||||
version_number = int(self._parse_header_file(blender_h, 'BLENDER_VERSION'))
|
|
||||||
version_number_patch = int(self._parse_header_file(blender_h, 'BLENDER_VERSION_PATCH'))
|
|
||||||
version_numbers = (version_number // 100, version_number % 100, version_number_patch)
|
|
||||||
self.short_version = "%d.%02d" % (version_numbers[0], version_numbers[1])
|
|
||||||
self.version = "%d.%02d.%d" % version_numbers
|
|
||||||
self.version_cycle = self._parse_header_file(blender_h, 'BLENDER_VERSION_CYCLE')
|
|
||||||
self.hash = self._parse_header_file(buildinfo_h, 'BUILD_HASH')[1:-1]
|
|
||||||
|
|
||||||
if self.version_cycle == "release":
|
|
||||||
# Final release
|
|
||||||
self.full_version = self.version
|
|
||||||
self.is_development_build = False
|
|
||||||
elif self.version_cycle == "rc":
|
|
||||||
# Release candidate
|
|
||||||
self.full_version = self.version + self.version_cycle
|
|
||||||
self.is_development_build = False
|
|
||||||
else:
|
|
||||||
# Development build
|
|
||||||
self.full_version = self.version + '-' + self.hash
|
|
||||||
self.is_development_build = True
|
|
||||||
|
|
||||||
def _parse_header_file(self, filename, define):
|
|
||||||
import re
|
|
||||||
regex = re.compile(r"^#\s*define\s+%s\s+(.*)" % define)
|
|
||||||
with open(filename, "r") as file:
|
|
||||||
for l in file:
|
|
||||||
match = regex.match(l)
|
|
||||||
if match:
|
|
||||||
return match.group(1)
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
def call(cmd, env=None, exit_on_error=True):
|
|
||||||
print(' '.join(cmd))
|
|
||||||
|
|
||||||
# Flush to ensure correct order output on Windows.
|
|
||||||
sys.stdout.flush()
|
|
||||||
sys.stderr.flush()
|
|
||||||
|
|
||||||
retcode = subprocess.call(cmd, env=env)
|
|
||||||
if exit_on_error and retcode != 0:
|
|
||||||
sys.exit(retcode)
|
|
||||||
return retcode
|
|
@@ -1,81 +0,0 @@
|
|||||||
# ##### BEGIN GPL LICENSE BLOCK #####
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or
|
|
||||||
# modify it under the terms of the GNU General Public License
|
|
||||||
# as published by the Free Software Foundation; either version 2
|
|
||||||
# of the License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
|
||||||
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
#
|
|
||||||
# ##### END GPL LICENSE BLOCK #####
|
|
||||||
|
|
||||||
# <pep8 compliant>
|
|
||||||
|
|
||||||
from dataclasses import dataclass
|
|
||||||
from pathlib import Path
|
|
||||||
from typing import List
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
|
||||||
class AbsoluteAndRelativeFileName:
|
|
||||||
"""
|
|
||||||
Helper class which keeps track of absolute file path for a direct access and
|
|
||||||
corresponding relative path against given base.
|
|
||||||
|
|
||||||
The relative part is used to construct a file name within an archive which
|
|
||||||
contains files which are to be signed or which has been signed already
|
|
||||||
(depending on whether the archive is addressed to signing server or back
|
|
||||||
to the buildbot worker).
|
|
||||||
"""
|
|
||||||
|
|
||||||
# Base directory which is where relative_filepath is relative to.
|
|
||||||
base_dir: Path
|
|
||||||
|
|
||||||
# Full absolute path of the corresponding file.
|
|
||||||
absolute_filepath: Path
|
|
||||||
|
|
||||||
# Derived from full file path, contains part of the path which is relative
|
|
||||||
# to a desired base path.
|
|
||||||
relative_filepath: Path
|
|
||||||
|
|
||||||
def __init__(self, base_dir: Path, filepath: Path):
|
|
||||||
self.base_dir = base_dir
|
|
||||||
self.absolute_filepath = filepath.resolve()
|
|
||||||
self.relative_filepath = self.absolute_filepath.relative_to(
|
|
||||||
self.base_dir)
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def from_path(cls, path: Path) -> 'AbsoluteAndRelativeFileName':
|
|
||||||
assert path.is_absolute()
|
|
||||||
assert path.is_file()
|
|
||||||
|
|
||||||
base_dir = path.parent
|
|
||||||
return AbsoluteAndRelativeFileName(base_dir, path)
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def recursively_from_directory(cls, base_dir: Path) \
|
|
||||||
-> List['AbsoluteAndRelativeFileName']:
|
|
||||||
"""
|
|
||||||
Create list of AbsoluteAndRelativeFileName for all the files in the
|
|
||||||
given directory.
|
|
||||||
|
|
||||||
NOTE: Result will be pointing to a resolved paths.
|
|
||||||
"""
|
|
||||||
assert base_dir.is_absolute()
|
|
||||||
assert base_dir.is_dir()
|
|
||||||
|
|
||||||
base_dir = base_dir.resolve()
|
|
||||||
|
|
||||||
result = []
|
|
||||||
for filename in base_dir.glob('**/*'):
|
|
||||||
if not filename.is_file():
|
|
||||||
continue
|
|
||||||
result.append(AbsoluteAndRelativeFileName(base_dir, filename))
|
|
||||||
return result
|
|
@@ -1,245 +0,0 @@
|
|||||||
# ##### BEGIN GPL LICENSE BLOCK #####
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or
|
|
||||||
# modify it under the terms of the GNU General Public License
|
|
||||||
# as published by the Free Software Foundation; either version 2
|
|
||||||
# of the License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
|
||||||
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
#
|
|
||||||
# ##### END GPL LICENSE BLOCK #####
|
|
||||||
|
|
||||||
# <pep8 compliant>
|
|
||||||
|
|
||||||
import dataclasses
|
|
||||||
import json
|
|
||||||
import os
|
|
||||||
|
|
||||||
from pathlib import Path
|
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
import codesign.util as util
|
|
||||||
|
|
||||||
|
|
||||||
class ArchiveStateError(Exception):
|
|
||||||
message: str
|
|
||||||
|
|
||||||
def __init__(self, message):
|
|
||||||
self.message = message
|
|
||||||
super().__init__(self.message)
|
|
||||||
|
|
||||||
|
|
||||||
@dataclasses.dataclass
|
|
||||||
class ArchiveState:
|
|
||||||
"""
|
|
||||||
Additional information (state) of the archive
|
|
||||||
|
|
||||||
Includes information like expected file size of the archive file in the case
|
|
||||||
the archive file is expected to be successfully created.
|
|
||||||
|
|
||||||
If the archive can not be created, this state will contain error message
|
|
||||||
indicating details of error.
|
|
||||||
"""
|
|
||||||
|
|
||||||
# Size in bytes of the corresponding archive.
|
|
||||||
file_size: Optional[int] = None
|
|
||||||
|
|
||||||
# Non-empty value indicates that error has happenned.
|
|
||||||
error_message: str = ''
|
|
||||||
|
|
||||||
def has_error(self) -> bool:
|
|
||||||
"""
|
|
||||||
Check whether the archive is at error state
|
|
||||||
"""
|
|
||||||
|
|
||||||
return self.error_message
|
|
||||||
|
|
||||||
def serialize_to_string(self) -> str:
|
|
||||||
payload = dataclasses.asdict(self)
|
|
||||||
return json.dumps(payload, sort_keys=True, indent=4)
|
|
||||||
|
|
||||||
def serialize_to_file(self, filepath: Path) -> None:
|
|
||||||
string = self.serialize_to_string()
|
|
||||||
filepath.write_text(string)
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def deserialize_from_string(cls, string: str) -> 'ArchiveState':
|
|
||||||
try:
|
|
||||||
object_as_dict = json.loads(string)
|
|
||||||
except json.decoder.JSONDecodeError:
|
|
||||||
raise ArchiveStateError('Error parsing JSON')
|
|
||||||
|
|
||||||
return cls(**object_as_dict)
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def deserialize_from_file(cls, filepath: Path):
|
|
||||||
string = filepath.read_text()
|
|
||||||
return cls.deserialize_from_string(string)
|
|
||||||
|
|
||||||
|
|
||||||
class ArchiveWithIndicator:
|
|
||||||
"""
|
|
||||||
The idea of this class is to wrap around logic which takes care of keeping
|
|
||||||
track of a name of an archive and synchronization routines between buildbot
|
|
||||||
worker and signing server.
|
|
||||||
|
|
||||||
The synchronization is done based on creating a special file after the
|
|
||||||
archive file is knowingly ready for access.
|
|
||||||
"""
|
|
||||||
|
|
||||||
# Base directory where the archive is stored (basically, a basename() of
|
|
||||||
# the absolute archive file name).
|
|
||||||
#
|
|
||||||
# For example, 'X:\\TEMP\\'.
|
|
||||||
base_dir: Path
|
|
||||||
|
|
||||||
# Absolute file name of the archive.
|
|
||||||
#
|
|
||||||
# For example, 'X:\\TEMP\\FOO.ZIP'.
|
|
||||||
archive_filepath: Path
|
|
||||||
|
|
||||||
# Absolute name of a file which acts as an indication of the fact that the
|
|
||||||
# archive is ready and is available for access.
|
|
||||||
#
|
|
||||||
# This is how synchronization between buildbot worker and signing server is
|
|
||||||
# done:
|
|
||||||
# - First, the archive is created under archive_filepath name.
|
|
||||||
# - Second, the indication file is created under ready_indicator_filepath
|
|
||||||
# name.
|
|
||||||
# - Third, the colleague of whoever created the indicator name watches for
|
|
||||||
# the indication file to appear, and once it's there it access the
|
|
||||||
# archive.
|
|
||||||
ready_indicator_filepath: Path
|
|
||||||
|
|
||||||
def __init__(
|
|
||||||
self, base_dir: Path, archive_name: str, ready_indicator_name: str):
|
|
||||||
"""
|
|
||||||
Construct the object from given base directory and name of the archive
|
|
||||||
file:
|
|
||||||
ArchiveWithIndicator(Path('X:\\TEMP'), 'FOO.ZIP', 'INPUT_READY')
|
|
||||||
"""
|
|
||||||
|
|
||||||
self.base_dir = base_dir
|
|
||||||
self.archive_filepath = self.base_dir / archive_name
|
|
||||||
self.ready_indicator_filepath = self.base_dir / ready_indicator_name
|
|
||||||
|
|
||||||
def is_ready_unsafe(self) -> bool:
|
|
||||||
"""
|
|
||||||
Check whether the archive is ready for access.
|
|
||||||
|
|
||||||
No guarding about possible network failres is done here.
|
|
||||||
"""
|
|
||||||
if not self.ready_indicator_filepath.exists():
|
|
||||||
return False
|
|
||||||
|
|
||||||
try:
|
|
||||||
archive_state = ArchiveState.deserialize_from_file(
|
|
||||||
self.ready_indicator_filepath)
|
|
||||||
except ArchiveStateError as error:
|
|
||||||
print(f'Error deserializing archive state: {error.message}')
|
|
||||||
return False
|
|
||||||
|
|
||||||
if archive_state.has_error():
|
|
||||||
# If the error did happen during codesign procedure there will be no
|
|
||||||
# corresponding archive file.
|
|
||||||
# The caller code will deal with the error check further.
|
|
||||||
return True
|
|
||||||
|
|
||||||
# Sometimes on macOS indicator file appears prior to the actual archive
|
|
||||||
# despite the order of creation and os.sync() used in tag_ready().
|
|
||||||
# So consider archive not ready if there is an indicator without an
|
|
||||||
# actual archive.
|
|
||||||
if not self.archive_filepath.exists():
|
|
||||||
print('Found indicator without actual archive, waiting for archive '
|
|
||||||
f'({self.archive_filepath}) to appear.')
|
|
||||||
return False
|
|
||||||
|
|
||||||
# Wait for until archive is fully stored.
|
|
||||||
actual_archive_size = self.archive_filepath.stat().st_size
|
|
||||||
if actual_archive_size != archive_state.file_size:
|
|
||||||
print('Partial/invalid archive size (expected '
|
|
||||||
f'{archive_state.file_size} got {actual_archive_size})')
|
|
||||||
return False
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
|
||||||
def is_ready(self) -> bool:
|
|
||||||
"""
|
|
||||||
Check whether the archive is ready for access.
|
|
||||||
|
|
||||||
Will tolerate possible network failures: if there is a network failure
|
|
||||||
or if there is still no proper permission on a file False is returned.
|
|
||||||
"""
|
|
||||||
|
|
||||||
# There are some intermitten problem happening at a random which is
|
|
||||||
# translates to "OSError : [WinError 59] An unexpected network error occurred".
|
|
||||||
# Some reports suggests it might be due to lack of permissions to the file,
|
|
||||||
# which might be applicable in our case since it's possible that file is
|
|
||||||
# initially created with non-accessible permissions and gets chmod-ed
|
|
||||||
# after initial creation.
|
|
||||||
try:
|
|
||||||
return self.is_ready_unsafe()
|
|
||||||
except OSError as e:
|
|
||||||
print(f'Exception checking archive: {e}')
|
|
||||||
return False
|
|
||||||
|
|
||||||
def tag_ready(self, error_message='') -> None:
|
|
||||||
"""
|
|
||||||
Tag the archive as ready by creating the corresponding indication file.
|
|
||||||
|
|
||||||
NOTE: It is expected that the archive was never tagged as ready before
|
|
||||||
and that there are no subsequent tags of the same archive.
|
|
||||||
If it is violated, an assert will fail.
|
|
||||||
"""
|
|
||||||
assert not self.is_ready()
|
|
||||||
|
|
||||||
# Try the best to make sure everything is synced to the file system,
|
|
||||||
# to avoid any possibility of stamp appearing on a network share prior to
|
|
||||||
# an actual file.
|
|
||||||
if util.get_current_platform() != util.Platform.WINDOWS:
|
|
||||||
os.sync()
|
|
||||||
|
|
||||||
archive_size = -1
|
|
||||||
if self.archive_filepath.exists():
|
|
||||||
archive_size = self.archive_filepath.stat().st_size
|
|
||||||
|
|
||||||
archive_info = ArchiveState(
|
|
||||||
file_size=archive_size, error_message=error_message)
|
|
||||||
|
|
||||||
self.ready_indicator_filepath.write_text(
|
|
||||||
archive_info.serialize_to_string())
|
|
||||||
|
|
||||||
def get_state(self) -> ArchiveState:
|
|
||||||
"""
|
|
||||||
Get state object for this archive
|
|
||||||
|
|
||||||
The state is read from the corresponding state file.
|
|
||||||
"""
|
|
||||||
|
|
||||||
try:
|
|
||||||
return ArchiveState.deserialize_from_file(self.ready_indicator_filepath)
|
|
||||||
except ArchiveStateError as error:
|
|
||||||
return ArchiveState(error_message=f'Error in information format: {error}')
|
|
||||||
|
|
||||||
def clean(self) -> None:
|
|
||||||
"""
|
|
||||||
Remove both archive and the ready indication file.
|
|
||||||
"""
|
|
||||||
util.ensure_file_does_not_exist_or_die(self.ready_indicator_filepath)
|
|
||||||
util.ensure_file_does_not_exist_or_die(self.archive_filepath)
|
|
||||||
|
|
||||||
def is_fully_absent(self) -> bool:
|
|
||||||
"""
|
|
||||||
Check whether both archive and its ready indicator are absent.
|
|
||||||
Is used for a sanity check during code signing process by both
|
|
||||||
buildbot worker and signing server.
|
|
||||||
"""
|
|
||||||
return (not self.archive_filepath.exists() and
|
|
||||||
not self.ready_indicator_filepath.exists())
|
|
@@ -1,501 +0,0 @@
|
|||||||
# ##### BEGIN GPL LICENSE BLOCK #####
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or
|
|
||||||
# modify it under the terms of the GNU General Public License
|
|
||||||
# as published by the Free Software Foundation; either version 2
|
|
||||||
# of the License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
|
||||||
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
#
|
|
||||||
# ##### END GPL LICENSE BLOCK #####
|
|
||||||
|
|
||||||
# <pep8 compliant>
|
|
||||||
|
|
||||||
# Signing process overview.
|
|
||||||
#
|
|
||||||
# From buildbot worker side:
|
|
||||||
# - Files which needs to be signed are collected from either a directory to
|
|
||||||
# sign all signable files in there, or by filename of a single file to sign.
|
|
||||||
# - Those files gets packed into an archive and stored in a location location
|
|
||||||
# which is watched by the signing server.
|
|
||||||
# - A marker READY file is created which indicates the archive is ready for
|
|
||||||
# access.
|
|
||||||
# - Wait for the server to provide an archive with signed files.
|
|
||||||
# This is done by watching for the READY file which corresponds to an archive
|
|
||||||
# coming from the signing server.
|
|
||||||
# - Unpack the signed signed files from the archives and replace original ones.
|
|
||||||
#
|
|
||||||
# From code sign server:
|
|
||||||
# - Watch special location for a READY file which indicates the there is an
|
|
||||||
# archive with files which are to be signed.
|
|
||||||
# - Unpack the archive to a temporary location.
|
|
||||||
# - Run codesign tool and make sure all the files are signed.
|
|
||||||
# - Pack the signed files and store them in a location which is watched by
|
|
||||||
# the buildbot worker.
|
|
||||||
# - Create a READY file which indicates that the archive with signed files is
|
|
||||||
# ready.
|
|
||||||
|
|
||||||
import abc
|
|
||||||
import logging
|
|
||||||
import shutil
|
|
||||||
import subprocess
|
|
||||||
import time
|
|
||||||
import tarfile
|
|
||||||
import uuid
|
|
||||||
|
|
||||||
from pathlib import Path
|
|
||||||
from tempfile import TemporaryDirectory
|
|
||||||
from typing import Iterable, List
|
|
||||||
|
|
||||||
import codesign.util as util
|
|
||||||
|
|
||||||
from codesign.absolute_and_relative_filename import AbsoluteAndRelativeFileName
|
|
||||||
from codesign.archive_with_indicator import ArchiveWithIndicator
|
|
||||||
from codesign.exception import CodeSignException
|
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
|
||||||
logger_builder = logger.getChild('builder')
|
|
||||||
logger_server = logger.getChild('server')
|
|
||||||
|
|
||||||
|
|
||||||
def pack_files(files: Iterable[AbsoluteAndRelativeFileName],
|
|
||||||
archive_filepath: Path) -> None:
|
|
||||||
"""
|
|
||||||
Create tar archive from given files for the signing pipeline.
|
|
||||||
Is used by buildbot worker to create an archive of files which are to be
|
|
||||||
signed, and by signing server to send signed files back to the worker.
|
|
||||||
"""
|
|
||||||
with tarfile.TarFile.open(archive_filepath, 'w') as tar_file_handle:
|
|
||||||
for file_info in files:
|
|
||||||
tar_file_handle.add(file_info.absolute_filepath,
|
|
||||||
arcname=file_info.relative_filepath)
|
|
||||||
|
|
||||||
|
|
||||||
def extract_files(archive_filepath: Path,
|
|
||||||
extraction_dir: Path) -> None:
|
|
||||||
"""
|
|
||||||
Extract all files form the given archive into the given direcotry.
|
|
||||||
"""
|
|
||||||
|
|
||||||
# TODO(sergey): Verify files in the archive have relative path.
|
|
||||||
|
|
||||||
with tarfile.TarFile.open(archive_filepath, mode='r') as tar_file_handle:
|
|
||||||
tar_file_handle.extractall(path=extraction_dir)
|
|
||||||
|
|
||||||
|
|
||||||
class BaseCodeSigner(metaclass=abc.ABCMeta):
|
|
||||||
"""
|
|
||||||
Base class for a platform-specific signer of binaries.
|
|
||||||
|
|
||||||
Contains all the logic shared across platform-specific implementations, such
|
|
||||||
as synchronization and notification logic.
|
|
||||||
|
|
||||||
Platform specific bits (such as actual command for signing the binary) are
|
|
||||||
to be implemented as a subclass.
|
|
||||||
|
|
||||||
Provides utilities code signing as a whole, including functionality needed
|
|
||||||
by a signing server and a buildbot worker.
|
|
||||||
|
|
||||||
The signer and builder may run on separate machines, the only requirement is
|
|
||||||
that they have access to a directory which is shared between them. For the
|
|
||||||
security concerns this is to be done as a separate machine (or as a Shared
|
|
||||||
Folder configuration in VirtualBox configuration). This directory might be
|
|
||||||
mounted under different base paths, but its underlying storage is to be
|
|
||||||
the same.
|
|
||||||
|
|
||||||
The code signer is short-lived on a buildbot worker side, and is living
|
|
||||||
forever on a code signing server side.
|
|
||||||
"""
|
|
||||||
|
|
||||||
# TODO(sergey): Find a neat way to have config annotated.
|
|
||||||
# config: Config
|
|
||||||
|
|
||||||
# Storage directory where builder puts files which are requested to be
|
|
||||||
# signed.
|
|
||||||
# Consider this an input of the code signing server.
|
|
||||||
unsigned_storage_dir: Path
|
|
||||||
|
|
||||||
# Storage where signed files are stored.
|
|
||||||
# Consider this an output of the code signer server.
|
|
||||||
signed_storage_dir: Path
|
|
||||||
|
|
||||||
# Platform the code is currently executing on.
|
|
||||||
platform: util.Platform
|
|
||||||
|
|
||||||
def __init__(self, config):
|
|
||||||
self.config = config
|
|
||||||
|
|
||||||
absolute_shared_storage_dir = config.SHARED_STORAGE_DIR.resolve()
|
|
||||||
|
|
||||||
# Unsigned (signing server input) configuration.
|
|
||||||
self.unsigned_storage_dir = absolute_shared_storage_dir / 'unsigned'
|
|
||||||
|
|
||||||
# Signed (signing server output) configuration.
|
|
||||||
self.signed_storage_dir = absolute_shared_storage_dir / 'signed'
|
|
||||||
|
|
||||||
self.platform = util.get_current_platform()
|
|
||||||
|
|
||||||
def cleanup_environment_for_builder(self) -> None:
|
|
||||||
# TODO(sergey): Revisit need of cleaning up the existing files.
|
|
||||||
# In practice it wasn't so helpful, and with multiple clients
|
|
||||||
# talking to the same server it becomes even more tricky.
|
|
||||||
pass
|
|
||||||
|
|
||||||
def cleanup_environment_for_signing_server(self) -> None:
|
|
||||||
# TODO(sergey): Revisit need of cleaning up the existing files.
|
|
||||||
# In practice it wasn't so helpful, and with multiple clients
|
|
||||||
# talking to the same server it becomes even more tricky.
|
|
||||||
pass
|
|
||||||
|
|
||||||
def generate_request_id(self) -> str:
|
|
||||||
"""
|
|
||||||
Generate an unique identifier for code signing request.
|
|
||||||
"""
|
|
||||||
return str(uuid.uuid4())
|
|
||||||
|
|
||||||
def archive_info_for_request_id(
|
|
||||||
self, path: Path, request_id: str) -> ArchiveWithIndicator:
|
|
||||||
return ArchiveWithIndicator(
|
|
||||||
path, f'{request_id}.tar', f'{request_id}.ready')
|
|
||||||
|
|
||||||
def signed_archive_info_for_request_id(
|
|
||||||
self, request_id: str) -> ArchiveWithIndicator:
|
|
||||||
return self.archive_info_for_request_id(
|
|
||||||
self.signed_storage_dir, request_id)
|
|
||||||
|
|
||||||
def unsigned_archive_info_for_request_id(
|
|
||||||
self, request_id: str) -> ArchiveWithIndicator:
|
|
||||||
return self.archive_info_for_request_id(
|
|
||||||
self.unsigned_storage_dir, request_id)
|
|
||||||
|
|
||||||
############################################################################
|
|
||||||
# Buildbot worker side helpers.
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def check_file_is_to_be_signed(
|
|
||||||
self, file: AbsoluteAndRelativeFileName) -> bool:
|
|
||||||
"""
|
|
||||||
Check whether file is to be signed.
|
|
||||||
|
|
||||||
Is used by both single file signing pipeline and recursive directory
|
|
||||||
signing pipeline.
|
|
||||||
|
|
||||||
This is where code signer is to check whether file is to be signed or
|
|
||||||
not. This check might be based on a simple extension test or on actual
|
|
||||||
test whether file have a digital signature already or not.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def collect_files_to_sign(self, path: Path) \
|
|
||||||
-> List[AbsoluteAndRelativeFileName]:
|
|
||||||
"""
|
|
||||||
Get all files which need to be signed from the given path.
|
|
||||||
|
|
||||||
NOTE: The path might either be a file or directory.
|
|
||||||
|
|
||||||
This function is run from the buildbot worker side.
|
|
||||||
"""
|
|
||||||
|
|
||||||
# If there is a single file provided trust the buildbot worker that it
|
|
||||||
# is eligible for signing.
|
|
||||||
if path.is_file():
|
|
||||||
file = AbsoluteAndRelativeFileName.from_path(path)
|
|
||||||
if not self.check_file_is_to_be_signed(file):
|
|
||||||
return []
|
|
||||||
return [file]
|
|
||||||
|
|
||||||
all_files = AbsoluteAndRelativeFileName.recursively_from_directory(
|
|
||||||
path)
|
|
||||||
files_to_be_signed = [file for file in all_files
|
|
||||||
if self.check_file_is_to_be_signed(file)]
|
|
||||||
return files_to_be_signed
|
|
||||||
|
|
||||||
def wait_for_signed_archive_or_die(self, request_id) -> None:
|
|
||||||
"""
|
|
||||||
Wait until archive with signed files is available.
|
|
||||||
|
|
||||||
Will only return if the archive with signed files is available. If there
|
|
||||||
was an error during code sign procedure the SystemExit exception is
|
|
||||||
raised, with the message set to the error reported by the codesign
|
|
||||||
server.
|
|
||||||
|
|
||||||
Will only wait for the configured time. If that time exceeds and there
|
|
||||||
is still no responce from the signing server the application will exit
|
|
||||||
with a non-zero exit code.
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
signed_archive_info = self.signed_archive_info_for_request_id(
|
|
||||||
request_id)
|
|
||||||
unsigned_archive_info = self.unsigned_archive_info_for_request_id(
|
|
||||||
request_id)
|
|
||||||
|
|
||||||
timeout_in_seconds = self.config.TIMEOUT_IN_SECONDS
|
|
||||||
time_start = time.monotonic()
|
|
||||||
while not signed_archive_info.is_ready():
|
|
||||||
time.sleep(1)
|
|
||||||
time_slept_in_seconds = time.monotonic() - time_start
|
|
||||||
if time_slept_in_seconds > timeout_in_seconds:
|
|
||||||
signed_archive_info.clean()
|
|
||||||
unsigned_archive_info.clean()
|
|
||||||
raise SystemExit("Signing server didn't finish signing in "
|
|
||||||
f'{timeout_in_seconds} seconds, dying :(')
|
|
||||||
|
|
||||||
archive_state = signed_archive_info.get_state()
|
|
||||||
if archive_state.has_error():
|
|
||||||
signed_archive_info.clean()
|
|
||||||
unsigned_archive_info.clean()
|
|
||||||
raise SystemExit(
|
|
||||||
f'Error happenned during codesign procedure: {archive_state.error_message}')
|
|
||||||
|
|
||||||
def copy_signed_files_to_directory(
|
|
||||||
self, signed_dir: Path, destination_dir: Path) -> None:
|
|
||||||
"""
|
|
||||||
Copy all files from signed_dir to destination_dir.
|
|
||||||
|
|
||||||
This function will overwrite any existing file. Permissions are copied
|
|
||||||
from the source files, but other metadata, such as timestamps, are not.
|
|
||||||
"""
|
|
||||||
for signed_filepath in signed_dir.glob('**/*'):
|
|
||||||
if not signed_filepath.is_file():
|
|
||||||
continue
|
|
||||||
|
|
||||||
relative_filepath = signed_filepath.relative_to(signed_dir)
|
|
||||||
destination_filepath = destination_dir / relative_filepath
|
|
||||||
destination_filepath.parent.mkdir(parents=True, exist_ok=True)
|
|
||||||
|
|
||||||
shutil.copy(signed_filepath, destination_filepath)
|
|
||||||
|
|
||||||
def run_buildbot_path_sign_pipeline(self, path: Path) -> None:
|
|
||||||
"""
|
|
||||||
Run all steps needed to make given path signed.
|
|
||||||
|
|
||||||
Path points to an unsigned file or a directory which contains unsigned
|
|
||||||
files.
|
|
||||||
|
|
||||||
If the path points to a single file then this file will be signed.
|
|
||||||
This is used to sign a final bundle such as .msi on Windows or .dmg on
|
|
||||||
macOS.
|
|
||||||
|
|
||||||
NOTE: The code signed implementation might actually reject signing the
|
|
||||||
file, in which case the file will be left unsigned. This isn't anything
|
|
||||||
to be considered a failure situation, just might happen when buildbot
|
|
||||||
worker can not detect whether signing is really required in a specific
|
|
||||||
case or not.
|
|
||||||
|
|
||||||
If the path points to a directory then code signer will sign all
|
|
||||||
signable files from it (finding them recursively).
|
|
||||||
"""
|
|
||||||
|
|
||||||
self.cleanup_environment_for_builder()
|
|
||||||
|
|
||||||
# Make sure storage directory exists.
|
|
||||||
self.unsigned_storage_dir.mkdir(parents=True, exist_ok=True)
|
|
||||||
|
|
||||||
# Collect all files which needs to be signed and pack them into a single
|
|
||||||
# archive which will be sent to the signing server.
|
|
||||||
logger_builder.info('Collecting files which are to be signed...')
|
|
||||||
files = self.collect_files_to_sign(path)
|
|
||||||
if not files:
|
|
||||||
logger_builder.info('No files to be signed, ignoring.')
|
|
||||||
return
|
|
||||||
logger_builder.info('Found %d files to sign.', len(files))
|
|
||||||
|
|
||||||
request_id = self.generate_request_id()
|
|
||||||
signed_archive_info = self.signed_archive_info_for_request_id(
|
|
||||||
request_id)
|
|
||||||
unsigned_archive_info = self.unsigned_archive_info_for_request_id(
|
|
||||||
request_id)
|
|
||||||
|
|
||||||
pack_files(files=files,
|
|
||||||
archive_filepath=unsigned_archive_info.archive_filepath)
|
|
||||||
unsigned_archive_info.tag_ready()
|
|
||||||
|
|
||||||
# Wait for the signing server to finish signing.
|
|
||||||
logger_builder.info('Waiting signing server to sign the files...')
|
|
||||||
self.wait_for_signed_archive_or_die(request_id)
|
|
||||||
|
|
||||||
# Extract signed files from archive and move files to final location.
|
|
||||||
with TemporaryDirectory(prefix='blender-buildbot-') as temp_dir_str:
|
|
||||||
unpacked_signed_files_dir = Path(temp_dir_str)
|
|
||||||
|
|
||||||
logger_builder.info('Extracting signed files from archive...')
|
|
||||||
extract_files(
|
|
||||||
archive_filepath=signed_archive_info.archive_filepath,
|
|
||||||
extraction_dir=unpacked_signed_files_dir)
|
|
||||||
|
|
||||||
destination_dir = path
|
|
||||||
if destination_dir.is_file():
|
|
||||||
destination_dir = destination_dir.parent
|
|
||||||
self.copy_signed_files_to_directory(
|
|
||||||
unpacked_signed_files_dir, destination_dir)
|
|
||||||
|
|
||||||
logger_builder.info('Removing archive with signed files...')
|
|
||||||
signed_archive_info.clean()
|
|
||||||
|
|
||||||
############################################################################
|
|
||||||
# Signing server side helpers.
|
|
||||||
|
|
||||||
def wait_for_sign_request(self) -> str:
|
|
||||||
"""
|
|
||||||
Wait for the buildbot to request signing of an archive.
|
|
||||||
|
|
||||||
Returns an identifier of signing request.
|
|
||||||
"""
|
|
||||||
|
|
||||||
# TOOD(sergey): Support graceful shutdown on Ctrl-C.
|
|
||||||
|
|
||||||
logger_server.info(
|
|
||||||
f'Waiting for a request directory {self.unsigned_storage_dir} to appear.')
|
|
||||||
while not self.unsigned_storage_dir.exists():
|
|
||||||
time.sleep(1)
|
|
||||||
|
|
||||||
logger_server.info(
|
|
||||||
'Waiting for a READY indicator of any signing request.')
|
|
||||||
request_id = None
|
|
||||||
while request_id is None:
|
|
||||||
for file in self.unsigned_storage_dir.iterdir():
|
|
||||||
if file.suffix != '.ready':
|
|
||||||
continue
|
|
||||||
request_id = file.stem
|
|
||||||
logger_server.info(f'Found READY for request ID {request_id}.')
|
|
||||||
if request_id is None:
|
|
||||||
time.sleep(1)
|
|
||||||
|
|
||||||
unsigned_archive_info = self.unsigned_archive_info_for_request_id(
|
|
||||||
request_id)
|
|
||||||
while not unsigned_archive_info.is_ready():
|
|
||||||
time.sleep(1)
|
|
||||||
|
|
||||||
return request_id
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def sign_all_files(self, files: List[AbsoluteAndRelativeFileName]) -> None:
|
|
||||||
"""
|
|
||||||
Sign all files in the given directory.
|
|
||||||
|
|
||||||
NOTE: Signing should happen in-place.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def run_signing_pipeline(self, request_id: str):
|
|
||||||
"""
|
|
||||||
Run the full signing pipeline starting from the point when buildbot
|
|
||||||
worker have requested signing.
|
|
||||||
"""
|
|
||||||
|
|
||||||
# Make sure storage directory exists.
|
|
||||||
self.signed_storage_dir.mkdir(parents=True, exist_ok=True)
|
|
||||||
|
|
||||||
with TemporaryDirectory(prefix='blender-codesign-') as temp_dir_str:
|
|
||||||
temp_dir = Path(temp_dir_str)
|
|
||||||
|
|
||||||
signed_archive_info = self.signed_archive_info_for_request_id(
|
|
||||||
request_id)
|
|
||||||
unsigned_archive_info = self.unsigned_archive_info_for_request_id(
|
|
||||||
request_id)
|
|
||||||
|
|
||||||
logger_server.info('Extracting unsigned files from archive...')
|
|
||||||
extract_files(
|
|
||||||
archive_filepath=unsigned_archive_info.archive_filepath,
|
|
||||||
extraction_dir=temp_dir)
|
|
||||||
|
|
||||||
logger_server.info('Collecting all files which needs signing...')
|
|
||||||
files = AbsoluteAndRelativeFileName.recursively_from_directory(
|
|
||||||
temp_dir)
|
|
||||||
|
|
||||||
logger_server.info('Signing all requested files...')
|
|
||||||
try:
|
|
||||||
self.sign_all_files(files)
|
|
||||||
except CodeSignException as error:
|
|
||||||
signed_archive_info.tag_ready(error_message=error.message)
|
|
||||||
unsigned_archive_info.clean()
|
|
||||||
logger_server.info('Signing is complete with errors.')
|
|
||||||
return
|
|
||||||
|
|
||||||
logger_server.info('Packing signed files...')
|
|
||||||
pack_files(files=files,
|
|
||||||
archive_filepath=signed_archive_info.archive_filepath)
|
|
||||||
signed_archive_info.tag_ready()
|
|
||||||
|
|
||||||
logger_server.info('Removing signing request...')
|
|
||||||
unsigned_archive_info.clean()
|
|
||||||
|
|
||||||
logger_server.info('Signing is complete.')
|
|
||||||
|
|
||||||
def run_signing_server(self):
|
|
||||||
logger_server.info('Starting new code signing server...')
|
|
||||||
self.cleanup_environment_for_signing_server()
|
|
||||||
logger_server.info('Code signing server is ready')
|
|
||||||
while True:
|
|
||||||
logger_server.info('Waiting for the signing request in %s...',
|
|
||||||
self.unsigned_storage_dir)
|
|
||||||
request_id = self.wait_for_sign_request()
|
|
||||||
|
|
||||||
logger_server.info(
|
|
||||||
f'Beging signign procedure for request ID {request_id}.')
|
|
||||||
self.run_signing_pipeline(request_id)
|
|
||||||
|
|
||||||
############################################################################
|
|
||||||
# Command executing.
|
|
||||||
#
|
|
||||||
# Abstracted to a degree that allows to run commands from a foreign
|
|
||||||
# platform.
|
|
||||||
# The goal with this is to allow performing dry-run tests of code signer
|
|
||||||
# server from other platforms (for example, to test that macOS code signer
|
|
||||||
# does what it is supposed to after doing a refactor on Linux).
|
|
||||||
|
|
||||||
# TODO(sergey): What is the type annotation for the command?
|
|
||||||
def run_command_or_mock(self, command, platform: util.Platform) -> None:
|
|
||||||
"""
|
|
||||||
Run given command if current platform matches given one
|
|
||||||
|
|
||||||
If the platform is different then it will only be printed allowing
|
|
||||||
to verify logic of the code signing process.
|
|
||||||
"""
|
|
||||||
|
|
||||||
if platform != self.platform:
|
|
||||||
logger_server.info(
|
|
||||||
f'Will run command for {platform}: {command}')
|
|
||||||
return
|
|
||||||
|
|
||||||
logger_server.info(f'Running command: {command}')
|
|
||||||
subprocess.run(command)
|
|
||||||
|
|
||||||
# TODO(sergey): What is the type annotation for the command?
|
|
||||||
def check_output_or_mock(self, command,
|
|
||||||
platform: util.Platform,
|
|
||||||
allow_nonzero_exit_code=False) -> str:
|
|
||||||
"""
|
|
||||||
Run given command if current platform matches given one
|
|
||||||
|
|
||||||
If the platform is different then it will only be printed allowing
|
|
||||||
to verify logic of the code signing process.
|
|
||||||
|
|
||||||
If allow_nonzero_exit_code is truth then the output will be returned
|
|
||||||
even if application quit with non-zero exit code.
|
|
||||||
Otherwise an subprocess.CalledProcessError exception will be raised
|
|
||||||
in such case.
|
|
||||||
"""
|
|
||||||
|
|
||||||
if platform != self.platform:
|
|
||||||
logger_server.info(
|
|
||||||
f'Will run command for {platform}: {command}')
|
|
||||||
return
|
|
||||||
|
|
||||||
if allow_nonzero_exit_code:
|
|
||||||
process = subprocess.Popen(command,
|
|
||||||
stdout=subprocess.PIPE,
|
|
||||||
stderr=subprocess.STDOUT)
|
|
||||||
output = process.communicate()[0]
|
|
||||||
return output.decode()
|
|
||||||
|
|
||||||
logger_server.info(f'Running command: {command}')
|
|
||||||
return subprocess.check_output(
|
|
||||||
command, stderr=subprocess.STDOUT).decode()
|
|
@@ -1,62 +0,0 @@
|
|||||||
# ##### BEGIN GPL LICENSE BLOCK #####
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or
|
|
||||||
# modify it under the terms of the GNU General Public License
|
|
||||||
# as published by the Free Software Foundation; either version 2
|
|
||||||
# of the License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
|
||||||
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
#
|
|
||||||
# ##### END GPL LICENSE BLOCK #####
|
|
||||||
|
|
||||||
# <pep8 compliant>
|
|
||||||
|
|
||||||
# Configuration of a code signer which is specific to the code running from
|
|
||||||
# buildbot's worker.
|
|
||||||
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
import codesign.util as util
|
|
||||||
|
|
||||||
from codesign.config_common import *
|
|
||||||
|
|
||||||
platform = util.get_current_platform()
|
|
||||||
if platform == util.Platform.LINUX:
|
|
||||||
SHARED_STORAGE_DIR = Path('/data/codesign')
|
|
||||||
elif platform == util.Platform.WINDOWS:
|
|
||||||
SHARED_STORAGE_DIR = Path('Z:\\codesign')
|
|
||||||
elif platform == util.Platform.MACOS:
|
|
||||||
SHARED_STORAGE_DIR = Path('/Volumes/codesign_macos/codesign')
|
|
||||||
|
|
||||||
# https://docs.python.org/3/library/logging.config.html#configuration-dictionary-schema
|
|
||||||
LOGGING = {
|
|
||||||
'version': 1,
|
|
||||||
'formatters': {
|
|
||||||
'default': {'format': '%(asctime)-15s %(levelname)8s %(name)s %(message)s'}
|
|
||||||
},
|
|
||||||
'handlers': {
|
|
||||||
'console': {
|
|
||||||
'class': 'logging.StreamHandler',
|
|
||||||
'formatter': 'default',
|
|
||||||
'stream': 'ext://sys.stderr',
|
|
||||||
}
|
|
||||||
},
|
|
||||||
'loggers': {
|
|
||||||
'codesign': {'level': 'INFO'},
|
|
||||||
},
|
|
||||||
'root': {
|
|
||||||
'level': 'WARNING',
|
|
||||||
'handlers': [
|
|
||||||
'console',
|
|
||||||
],
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,36 +0,0 @@
|
|||||||
# ##### BEGIN GPL LICENSE BLOCK #####
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or
|
|
||||||
# modify it under the terms of the GNU General Public License
|
|
||||||
# as published by the Free Software Foundation; either version 2
|
|
||||||
# of the License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
|
||||||
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
#
|
|
||||||
# ##### END GPL LICENSE BLOCK #####
|
|
||||||
|
|
||||||
# <pep8 compliant>
|
|
||||||
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
# Timeout in seconds for the signing process.
|
|
||||||
#
|
|
||||||
# This is how long buildbot packing step will wait signing server to
|
|
||||||
# perform signing.
|
|
||||||
#
|
|
||||||
# NOTE: Notarization could take a long time, hence the rather high value
|
|
||||||
# here. Might consider using different timeout for different platforms.
|
|
||||||
TIMEOUT_IN_SECONDS = 45 * 60 * 60
|
|
||||||
|
|
||||||
# Directory which is shared across buildbot worker and signing server.
|
|
||||||
#
|
|
||||||
# This is where worker puts files requested for signing as well as where
|
|
||||||
# server puts signed files.
|
|
||||||
SHARED_STORAGE_DIR: Path
|
|
@@ -1,101 +0,0 @@
|
|||||||
# ##### BEGIN GPL LICENSE BLOCK #####
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or
|
|
||||||
# modify it under the terms of the GNU General Public License
|
|
||||||
# as published by the Free Software Foundation; either version 2
|
|
||||||
# of the License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
|
||||||
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
#
|
|
||||||
# ##### END GPL LICENSE BLOCK #####
|
|
||||||
|
|
||||||
# <pep8 compliant>
|
|
||||||
|
|
||||||
# Configuration of a code signer which is specific to the code signing server.
|
|
||||||
#
|
|
||||||
# NOTE: DO NOT put any sensitive information here, put it in an actual
|
|
||||||
# configuration on the signing machine.
|
|
||||||
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
from codesign.config_common import *
|
|
||||||
|
|
||||||
CODESIGN_DIRECTORY = Path(__file__).absolute().parent
|
|
||||||
BLENDER_GIT_ROOT_DIRECTORY = CODESIGN_DIRECTORY.parent.parent.parent
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Common configuration.
|
|
||||||
|
|
||||||
# Directory where folders for codesign requests and signed result are stored.
|
|
||||||
# For example, /data/codesign
|
|
||||||
SHARED_STORAGE_DIR: Path
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# macOS-specific configuration.
|
|
||||||
|
|
||||||
MACOS_ENTITLEMENTS_FILE = \
|
|
||||||
BLENDER_GIT_ROOT_DIRECTORY / 'release' / 'darwin' / 'entitlements.plist'
|
|
||||||
|
|
||||||
# Identity of the Developer ID Application certificate which is to be used for
|
|
||||||
# codesign tool.
|
|
||||||
# Use `security find-identity -v -p codesigning` to find the identity.
|
|
||||||
#
|
|
||||||
# NOTE: This identity is just an example from release/darwin/README.txt.
|
|
||||||
MACOS_CODESIGN_IDENTITY = 'AE825E26F12D08B692F360133210AF46F4CF7B97'
|
|
||||||
|
|
||||||
# User name (Apple ID) which will be used to request notarization.
|
|
||||||
MACOS_XCRUN_USERNAME = 'me@example.com'
|
|
||||||
|
|
||||||
# One-time application password which will be used to request notarization.
|
|
||||||
MACOS_XCRUN_PASSWORD = '@keychain:altool-password'
|
|
||||||
|
|
||||||
# Timeout in seconds within which the notarial office is supposed to reply.
|
|
||||||
MACOS_NOTARIZE_TIMEOUT_IN_SECONDS = 60 * 60
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Windows-specific configuration.
|
|
||||||
|
|
||||||
# URL to the timestamping authority.
|
|
||||||
WIN_TIMESTAMP_AUTHORITY_URL = 'http://timestamp.digicert.com'
|
|
||||||
|
|
||||||
# Full path to the certificate used for signing.
|
|
||||||
#
|
|
||||||
# The path and expected file format might vary depending on a platform.
|
|
||||||
#
|
|
||||||
# On Windows it is usually is a PKCS #12 key (.pfx), so the path will look
|
|
||||||
# like Path('C:\\Secret\\Blender.pfx').
|
|
||||||
WIN_CERTIFICATE_FILEPATH: Path
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Logging configuration, common for all platforms.
|
|
||||||
|
|
||||||
# https://docs.python.org/3/library/logging.config.html#configuration-dictionary-schema
|
|
||||||
LOGGING = {
|
|
||||||
'version': 1,
|
|
||||||
'formatters': {
|
|
||||||
'default': {'format': '%(asctime)-15s %(levelname)8s %(name)s %(message)s'}
|
|
||||||
},
|
|
||||||
'handlers': {
|
|
||||||
'console': {
|
|
||||||
'class': 'logging.StreamHandler',
|
|
||||||
'formatter': 'default',
|
|
||||||
'stream': 'ext://sys.stderr',
|
|
||||||
}
|
|
||||||
},
|
|
||||||
'loggers': {
|
|
||||||
'codesign': {'level': 'INFO'},
|
|
||||||
},
|
|
||||||
'root': {
|
|
||||||
'level': 'WARNING',
|
|
||||||
'handlers': [
|
|
||||||
'console',
|
|
||||||
],
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,26 +0,0 @@
|
|||||||
# ##### BEGIN GPL LICENSE BLOCK #####
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or
|
|
||||||
# modify it under the terms of the GNU General Public License
|
|
||||||
# as published by the Free Software Foundation; either version 2
|
|
||||||
# of the License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
|
||||||
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
#
|
|
||||||
# ##### END GPL LICENSE BLOCK #####
|
|
||||||
|
|
||||||
# <pep8 compliant>
|
|
||||||
|
|
||||||
class CodeSignException(Exception):
|
|
||||||
message: str
|
|
||||||
|
|
||||||
def __init__(self, message):
|
|
||||||
self.message = message
|
|
||||||
super().__init__(self.message)
|
|
@@ -1,72 +0,0 @@
|
|||||||
# ##### BEGIN GPL LICENSE BLOCK #####
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or
|
|
||||||
# modify it under the terms of the GNU General Public License
|
|
||||||
# as published by the Free Software Foundation; either version 2
|
|
||||||
# of the License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
|
||||||
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
#
|
|
||||||
# ##### END GPL LICENSE BLOCK #####
|
|
||||||
|
|
||||||
# <pep8 compliant>
|
|
||||||
|
|
||||||
# NOTE: This is a no-op signer (since there isn't really a procedure to sign
|
|
||||||
# Linux binaries yet). Used to debug and verify the code signing routines on
|
|
||||||
# a Linux environment.
|
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
from pathlib import Path
|
|
||||||
from typing import List
|
|
||||||
|
|
||||||
from codesign.absolute_and_relative_filename import AbsoluteAndRelativeFileName
|
|
||||||
from codesign.base_code_signer import BaseCodeSigner
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
|
||||||
logger_server = logger.getChild('server')
|
|
||||||
|
|
||||||
|
|
||||||
class LinuxCodeSigner(BaseCodeSigner):
|
|
||||||
def is_active(self) -> bool:
|
|
||||||
"""
|
|
||||||
Check whether this signer is active.
|
|
||||||
|
|
||||||
if it is inactive, no files will be signed.
|
|
||||||
|
|
||||||
Is used to be able to debug code signing pipeline on Linux, where there
|
|
||||||
is no code signing happening in the actual buildbot and release
|
|
||||||
environment.
|
|
||||||
"""
|
|
||||||
return False
|
|
||||||
|
|
||||||
def check_file_is_to_be_signed(
|
|
||||||
self, file: AbsoluteAndRelativeFileName) -> bool:
|
|
||||||
if file.relative_filepath == Path('blender'):
|
|
||||||
return True
|
|
||||||
if (file.relative_filepath.parts[-3:-1] == ('python', 'bin') and
|
|
||||||
file.relative_filepath.name.startwith('python')):
|
|
||||||
return True
|
|
||||||
if file.relative_filepath.suffix == '.so':
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
def collect_files_to_sign(self, path: Path) \
|
|
||||||
-> List[AbsoluteAndRelativeFileName]:
|
|
||||||
if not self.is_active():
|
|
||||||
return []
|
|
||||||
|
|
||||||
return super().collect_files_to_sign(path)
|
|
||||||
|
|
||||||
def sign_all_files(self, files: List[AbsoluteAndRelativeFileName]) -> None:
|
|
||||||
num_files = len(files)
|
|
||||||
for file_index, file in enumerate(files):
|
|
||||||
logger.info('Server: Signed file [%d/%d] %s',
|
|
||||||
file_index + 1, num_files, file.relative_filepath)
|
|
@@ -1,456 +0,0 @@
|
|||||||
# ##### BEGIN GPL LICENSE BLOCK #####
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or
|
|
||||||
# modify it under the terms of the GNU General Public License
|
|
||||||
# as published by the Free Software Foundation; either version 2
|
|
||||||
# of the License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
|
||||||
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
#
|
|
||||||
# ##### END GPL LICENSE BLOCK #####
|
|
||||||
|
|
||||||
# <pep8 compliant>
|
|
||||||
|
|
||||||
import logging
|
|
||||||
import re
|
|
||||||
import stat
|
|
||||||
import subprocess
|
|
||||||
import time
|
|
||||||
|
|
||||||
from pathlib import Path
|
|
||||||
from typing import List
|
|
||||||
|
|
||||||
import codesign.util as util
|
|
||||||
|
|
||||||
from buildbot_utils import Builder
|
|
||||||
|
|
||||||
from codesign.absolute_and_relative_filename import AbsoluteAndRelativeFileName
|
|
||||||
from codesign.base_code_signer import BaseCodeSigner
|
|
||||||
from codesign.exception import CodeSignException
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
|
||||||
logger_server = logger.getChild('server')
|
|
||||||
|
|
||||||
# NOTE: Check is done as filename.endswith(), so keep the dot
|
|
||||||
EXTENSIONS_TO_BE_SIGNED = {'.dylib', '.so', '.dmg'}
|
|
||||||
|
|
||||||
# Prefixes of a file (not directory) name which are to be signed.
|
|
||||||
# Used to sign extra executable files in Contents/Resources.
|
|
||||||
NAME_PREFIXES_TO_BE_SIGNED = {'python'}
|
|
||||||
|
|
||||||
|
|
||||||
class NotarizationException(CodeSignException):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
def is_file_from_bundle(file: AbsoluteAndRelativeFileName) -> bool:
|
|
||||||
"""
|
|
||||||
Check whether file is coming from an .app bundle
|
|
||||||
"""
|
|
||||||
parts = file.relative_filepath.parts
|
|
||||||
if not parts:
|
|
||||||
return False
|
|
||||||
if not parts[0].endswith('.app'):
|
|
||||||
return False
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
def get_bundle_from_file(
|
|
||||||
file: AbsoluteAndRelativeFileName) -> AbsoluteAndRelativeFileName:
|
|
||||||
"""
|
|
||||||
Get AbsoluteAndRelativeFileName descriptor of bundle
|
|
||||||
"""
|
|
||||||
assert(is_file_from_bundle(file))
|
|
||||||
|
|
||||||
parts = file.relative_filepath.parts
|
|
||||||
bundle_name = parts[0]
|
|
||||||
|
|
||||||
base_dir = file.base_dir
|
|
||||||
bundle_filepath = file.base_dir / bundle_name
|
|
||||||
return AbsoluteAndRelativeFileName(base_dir, bundle_filepath)
|
|
||||||
|
|
||||||
|
|
||||||
def is_bundle_executable_file(file: AbsoluteAndRelativeFileName) -> bool:
|
|
||||||
"""
|
|
||||||
Check whether given file is an executable within an app bundle
|
|
||||||
"""
|
|
||||||
if not is_file_from_bundle(file):
|
|
||||||
return False
|
|
||||||
|
|
||||||
parts = file.relative_filepath.parts
|
|
||||||
num_parts = len(parts)
|
|
||||||
if num_parts < 3:
|
|
||||||
return False
|
|
||||||
|
|
||||||
if parts[1:3] != ('Contents', 'MacOS'):
|
|
||||||
return False
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
def xcrun_field_value_from_output(field: str, output: str) -> str:
|
|
||||||
"""
|
|
||||||
Get value of a given field from xcrun output.
|
|
||||||
|
|
||||||
If field is not found empty string is returned.
|
|
||||||
"""
|
|
||||||
|
|
||||||
field_prefix = field + ': '
|
|
||||||
for line in output.splitlines():
|
|
||||||
line = line.strip()
|
|
||||||
if line.startswith(field_prefix):
|
|
||||||
return line[len(field_prefix):]
|
|
||||||
return ''
|
|
||||||
|
|
||||||
|
|
||||||
class MacOSCodeSigner(BaseCodeSigner):
|
|
||||||
def check_file_is_to_be_signed(
|
|
||||||
self, file: AbsoluteAndRelativeFileName) -> bool:
|
|
||||||
if file.relative_filepath.name.startswith('.'):
|
|
||||||
return False
|
|
||||||
|
|
||||||
if is_bundle_executable_file(file):
|
|
||||||
return True
|
|
||||||
|
|
||||||
base_name = file.relative_filepath.name
|
|
||||||
if any(base_name.startswith(prefix)
|
|
||||||
for prefix in NAME_PREFIXES_TO_BE_SIGNED):
|
|
||||||
return True
|
|
||||||
|
|
||||||
mode = file.absolute_filepath.lstat().st_mode
|
|
||||||
if mode & stat.S_IXUSR != 0:
|
|
||||||
file_output = subprocess.check_output(
|
|
||||||
("file", file.absolute_filepath)).decode()
|
|
||||||
if "64-bit executable" in file_output:
|
|
||||||
return True
|
|
||||||
|
|
||||||
return file.relative_filepath.suffix in EXTENSIONS_TO_BE_SIGNED
|
|
||||||
|
|
||||||
def collect_files_to_sign(self, path: Path) \
|
|
||||||
-> List[AbsoluteAndRelativeFileName]:
|
|
||||||
# Include all files when signing app or dmg bundle: all the files are
|
|
||||||
# needed to do valid signature of bundle.
|
|
||||||
if path.name.endswith('.app'):
|
|
||||||
return AbsoluteAndRelativeFileName.recursively_from_directory(path)
|
|
||||||
if path.is_dir():
|
|
||||||
files = []
|
|
||||||
for child in path.iterdir():
|
|
||||||
if child.name.endswith('.app'):
|
|
||||||
current_files = AbsoluteAndRelativeFileName.recursively_from_directory(
|
|
||||||
child)
|
|
||||||
else:
|
|
||||||
current_files = super().collect_files_to_sign(child)
|
|
||||||
for current_file in current_files:
|
|
||||||
files.append(AbsoluteAndRelativeFileName(
|
|
||||||
path, current_file.absolute_filepath))
|
|
||||||
return files
|
|
||||||
return super().collect_files_to_sign(path)
|
|
||||||
|
|
||||||
############################################################################
|
|
||||||
# Codesign.
|
|
||||||
|
|
||||||
def codesign_remove_signature(
|
|
||||||
self, file: AbsoluteAndRelativeFileName) -> None:
|
|
||||||
"""
|
|
||||||
Make sure given file does not have codesign signature
|
|
||||||
|
|
||||||
This is needed because codesigning is not possible for file which has
|
|
||||||
signature already.
|
|
||||||
"""
|
|
||||||
|
|
||||||
logger_server.info(
|
|
||||||
'Removing codesign signature from %s...', file.relative_filepath)
|
|
||||||
|
|
||||||
command = ['codesign', '--remove-signature', file.absolute_filepath]
|
|
||||||
self.run_command_or_mock(command, util.Platform.MACOS)
|
|
||||||
|
|
||||||
def codesign_file(
|
|
||||||
self, file: AbsoluteAndRelativeFileName) -> None:
|
|
||||||
"""
|
|
||||||
Sign given file
|
|
||||||
|
|
||||||
NOTE: File must not have any signatures.
|
|
||||||
"""
|
|
||||||
|
|
||||||
logger_server.info(
|
|
||||||
'Codesigning %s...', file.relative_filepath)
|
|
||||||
|
|
||||||
entitlements_file = self.config.MACOS_ENTITLEMENTS_FILE
|
|
||||||
command = ['codesign',
|
|
||||||
'--timestamp',
|
|
||||||
'--options', 'runtime',
|
|
||||||
f'--entitlements={entitlements_file}',
|
|
||||||
'--sign', self.config.MACOS_CODESIGN_IDENTITY,
|
|
||||||
file.absolute_filepath]
|
|
||||||
self.run_command_or_mock(command, util.Platform.MACOS)
|
|
||||||
|
|
||||||
def codesign_all_files(self, files: List[AbsoluteAndRelativeFileName]) -> None:
|
|
||||||
"""
|
|
||||||
Run codesign tool on all eligible files in the given list.
|
|
||||||
|
|
||||||
Will ignore all files which are not to be signed. For the rest will
|
|
||||||
remove possible existing signature and add a new signature.
|
|
||||||
"""
|
|
||||||
|
|
||||||
num_files = len(files)
|
|
||||||
have_ignored_files = False
|
|
||||||
signed_files = []
|
|
||||||
for file_index, file in enumerate(files):
|
|
||||||
# Ignore file if it is not to be signed.
|
|
||||||
# Allows to manually construct ZIP of a bundle and get it signed.
|
|
||||||
if not self.check_file_is_to_be_signed(file):
|
|
||||||
logger_server.info(
|
|
||||||
'Ignoring file [%d/%d] %s',
|
|
||||||
file_index + 1, num_files, file.relative_filepath)
|
|
||||||
have_ignored_files = True
|
|
||||||
continue
|
|
||||||
|
|
||||||
logger_server.info(
|
|
||||||
'Running codesigning routines for file [%d/%d] %s...',
|
|
||||||
file_index + 1, num_files, file.relative_filepath)
|
|
||||||
|
|
||||||
self.codesign_remove_signature(file)
|
|
||||||
self.codesign_file(file)
|
|
||||||
|
|
||||||
signed_files.append(file)
|
|
||||||
|
|
||||||
if have_ignored_files:
|
|
||||||
logger_server.info('Signed %d files:', len(signed_files))
|
|
||||||
num_signed_files = len(signed_files)
|
|
||||||
for file_index, signed_file in enumerate(signed_files):
|
|
||||||
logger_server.info(
|
|
||||||
'- [%d/%d] %s',
|
|
||||||
file_index + 1, num_signed_files,
|
|
||||||
signed_file.relative_filepath)
|
|
||||||
|
|
||||||
def codesign_bundles(
|
|
||||||
self, files: List[AbsoluteAndRelativeFileName]) -> None:
|
|
||||||
"""
|
|
||||||
Codesign all .app bundles in the given list of files.
|
|
||||||
|
|
||||||
Bundle is deducted from paths of the files, and every bundle is only
|
|
||||||
signed once.
|
|
||||||
"""
|
|
||||||
|
|
||||||
signed_bundles = set()
|
|
||||||
extra_files = []
|
|
||||||
|
|
||||||
for file in files:
|
|
||||||
if not is_file_from_bundle(file):
|
|
||||||
continue
|
|
||||||
bundle = get_bundle_from_file(file)
|
|
||||||
bundle_name = bundle.relative_filepath
|
|
||||||
if bundle_name in signed_bundles:
|
|
||||||
continue
|
|
||||||
|
|
||||||
logger_server.info('Running codesign routines on bundle %s',
|
|
||||||
bundle_name)
|
|
||||||
|
|
||||||
# It is not possible to remove signature from DMG.
|
|
||||||
if bundle.relative_filepath.name.endswith('.app'):
|
|
||||||
self.codesign_remove_signature(bundle)
|
|
||||||
self.codesign_file(bundle)
|
|
||||||
|
|
||||||
signed_bundles.add(bundle_name)
|
|
||||||
|
|
||||||
# Codesign on a bundle adds an extra folder with information.
|
|
||||||
# It needs to be compied to the source.
|
|
||||||
code_signature_directory = \
|
|
||||||
bundle.absolute_filepath / 'Contents' / '_CodeSignature'
|
|
||||||
code_signature_files = \
|
|
||||||
AbsoluteAndRelativeFileName.recursively_from_directory(
|
|
||||||
code_signature_directory)
|
|
||||||
for code_signature_file in code_signature_files:
|
|
||||||
bundle_relative_file = AbsoluteAndRelativeFileName(
|
|
||||||
bundle.base_dir,
|
|
||||||
code_signature_directory /
|
|
||||||
code_signature_file.relative_filepath)
|
|
||||||
extra_files.append(bundle_relative_file)
|
|
||||||
|
|
||||||
files.extend(extra_files)
|
|
||||||
|
|
||||||
############################################################################
|
|
||||||
# Notarization.
|
|
||||||
|
|
||||||
def notarize_get_bundle_id(self, file: AbsoluteAndRelativeFileName) -> str:
|
|
||||||
"""
|
|
||||||
Get bundle ID which will be used to notarize DMG
|
|
||||||
"""
|
|
||||||
name = file.relative_filepath.name
|
|
||||||
app_name = name.split('-', 2)[0].lower()
|
|
||||||
|
|
||||||
app_name_words = app_name.split()
|
|
||||||
if len(app_name_words) > 1:
|
|
||||||
app_name_id = ''.join(word.capitalize() for word in app_name_words)
|
|
||||||
else:
|
|
||||||
app_name_id = app_name_words[0]
|
|
||||||
|
|
||||||
# TODO(sergey): Consider using "alpha" for buildbot builds.
|
|
||||||
return f'org.blenderfoundation.{app_name_id}.release'
|
|
||||||
|
|
||||||
def notarize_request(self, file) -> str:
|
|
||||||
"""
|
|
||||||
Request notarization of the given file.
|
|
||||||
|
|
||||||
Returns UUID of the notarization request. If error occurred None is
|
|
||||||
returned instead of UUID.
|
|
||||||
"""
|
|
||||||
|
|
||||||
bundle_id = self.notarize_get_bundle_id(file)
|
|
||||||
logger_server.info('Bundle ID: %s', bundle_id)
|
|
||||||
|
|
||||||
logger_server.info('Submitting file to the notarial office.')
|
|
||||||
command = [
|
|
||||||
'xcrun', 'altool', '--notarize-app', '--verbose',
|
|
||||||
'-f', file.absolute_filepath,
|
|
||||||
'--primary-bundle-id', bundle_id,
|
|
||||||
'--username', self.config.MACOS_XCRUN_USERNAME,
|
|
||||||
'--password', self.config.MACOS_XCRUN_PASSWORD]
|
|
||||||
|
|
||||||
output = self.check_output_or_mock(
|
|
||||||
command, util.Platform.MACOS, allow_nonzero_exit_code=True)
|
|
||||||
|
|
||||||
for line in output.splitlines():
|
|
||||||
line = line.strip()
|
|
||||||
if line.startswith('RequestUUID = '):
|
|
||||||
request_uuid = line[14:]
|
|
||||||
return request_uuid
|
|
||||||
|
|
||||||
# Check whether the package has been already submitted.
|
|
||||||
if 'The software asset has already been uploaded.' in line:
|
|
||||||
request_uuid = re.sub(
|
|
||||||
'.*The upload ID is ([A-Fa-f0-9\-]+).*', '\\1', line)
|
|
||||||
logger_server.warning(
|
|
||||||
f'The package has been already submitted under UUID {request_uuid}')
|
|
||||||
return request_uuid
|
|
||||||
|
|
||||||
logger_server.error(output)
|
|
||||||
logger_server.error('xcrun command did not report RequestUUID')
|
|
||||||
return None
|
|
||||||
|
|
||||||
def notarize_review_status(self, xcrun_output: str) -> bool:
|
|
||||||
"""
|
|
||||||
Review status returned by xcrun's notarization info
|
|
||||||
|
|
||||||
Returns truth if the notarization process has finished.
|
|
||||||
If there are errors during notarization, a NotarizationException()
|
|
||||||
exception is thrown with status message from the notarial office.
|
|
||||||
"""
|
|
||||||
|
|
||||||
# Parse status and message
|
|
||||||
status = xcrun_field_value_from_output('Status', xcrun_output)
|
|
||||||
status_message = xcrun_field_value_from_output(
|
|
||||||
'Status Message', xcrun_output)
|
|
||||||
|
|
||||||
if status == 'success':
|
|
||||||
logger_server.info(
|
|
||||||
'Package successfully notarized: %s', status_message)
|
|
||||||
return True
|
|
||||||
|
|
||||||
if status == 'invalid':
|
|
||||||
logger_server.error(xcrun_output)
|
|
||||||
logger_server.error(
|
|
||||||
'Package notarization has failed: %s', status_message)
|
|
||||||
raise NotarizationException(status_message)
|
|
||||||
|
|
||||||
if status == 'in progress':
|
|
||||||
return False
|
|
||||||
|
|
||||||
logger_server.info(
|
|
||||||
'Unknown notarization status %s (%s)', status, status_message)
|
|
||||||
|
|
||||||
return False
|
|
||||||
|
|
||||||
def notarize_wait_result(self, request_uuid: str) -> None:
|
|
||||||
"""
|
|
||||||
Wait for until notarial office have a reply
|
|
||||||
"""
|
|
||||||
|
|
||||||
logger_server.info(
|
|
||||||
'Waiting for a result from the notarization office.')
|
|
||||||
|
|
||||||
command = ['xcrun', 'altool',
|
|
||||||
'--notarization-info', request_uuid,
|
|
||||||
'--username', self.config.MACOS_XCRUN_USERNAME,
|
|
||||||
'--password', self.config.MACOS_XCRUN_PASSWORD]
|
|
||||||
|
|
||||||
time_start = time.monotonic()
|
|
||||||
timeout_in_seconds = self.config.MACOS_NOTARIZE_TIMEOUT_IN_SECONDS
|
|
||||||
|
|
||||||
while True:
|
|
||||||
xcrun_output = self.check_output_or_mock(
|
|
||||||
command, util.Platform.MACOS, allow_nonzero_exit_code=True)
|
|
||||||
|
|
||||||
if self.notarize_review_status(xcrun_output):
|
|
||||||
break
|
|
||||||
|
|
||||||
logger_server.info('Keep waiting for notarization office.')
|
|
||||||
time.sleep(30)
|
|
||||||
|
|
||||||
time_slept_in_seconds = time.monotonic() - time_start
|
|
||||||
if time_slept_in_seconds > timeout_in_seconds:
|
|
||||||
logger_server.error(
|
|
||||||
"Notarial office didn't reply in %f seconds.",
|
|
||||||
timeout_in_seconds)
|
|
||||||
|
|
||||||
def notarize_staple(self, file: AbsoluteAndRelativeFileName) -> bool:
|
|
||||||
"""
|
|
||||||
Staple notarial label on the file
|
|
||||||
"""
|
|
||||||
|
|
||||||
logger_server.info('Stapling notarial stamp.')
|
|
||||||
|
|
||||||
command = ['xcrun', 'stapler', 'staple', '-v', file.absolute_filepath]
|
|
||||||
self.check_output_or_mock(command, util.Platform.MACOS)
|
|
||||||
|
|
||||||
def notarize_dmg(self, file: AbsoluteAndRelativeFileName) -> bool:
|
|
||||||
"""
|
|
||||||
Run entire pipeline to get DMG notarized.
|
|
||||||
"""
|
|
||||||
logger_server.info('Begin notarization routines on %s',
|
|
||||||
file.relative_filepath)
|
|
||||||
|
|
||||||
# Submit file for notarization.
|
|
||||||
request_uuid = self.notarize_request(file)
|
|
||||||
if not request_uuid:
|
|
||||||
return False
|
|
||||||
logger_server.info('Received Request UUID: %s', request_uuid)
|
|
||||||
|
|
||||||
# Wait for the status from the notarization office.
|
|
||||||
if not self.notarize_wait_result(request_uuid):
|
|
||||||
return False
|
|
||||||
|
|
||||||
# Staple.
|
|
||||||
self.notarize_staple(file)
|
|
||||||
|
|
||||||
def notarize_all_dmg(
|
|
||||||
self, files: List[AbsoluteAndRelativeFileName]) -> bool:
|
|
||||||
"""
|
|
||||||
Notarize all DMG images from the input.
|
|
||||||
|
|
||||||
Images are supposed to be codesigned already.
|
|
||||||
"""
|
|
||||||
for file in files:
|
|
||||||
if not file.relative_filepath.name.endswith('.dmg'):
|
|
||||||
continue
|
|
||||||
if not self.check_file_is_to_be_signed(file):
|
|
||||||
continue
|
|
||||||
|
|
||||||
self.notarize_dmg(file)
|
|
||||||
|
|
||||||
############################################################################
|
|
||||||
# Entry point.
|
|
||||||
|
|
||||||
def sign_all_files(self, files: List[AbsoluteAndRelativeFileName]) -> None:
|
|
||||||
# TODO(sergey): Handle errors somehow.
|
|
||||||
|
|
||||||
self.codesign_all_files(files)
|
|
||||||
self.codesign_bundles(files)
|
|
||||||
self.notarize_all_dmg(files)
|
|
@@ -1,52 +0,0 @@
|
|||||||
# ##### BEGIN GPL LICENSE BLOCK #####
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or
|
|
||||||
# modify it under the terms of the GNU General Public License
|
|
||||||
# as published by the Free Software Foundation; either version 2
|
|
||||||
# of the License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
|
||||||
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
#
|
|
||||||
# ##### END GPL LICENSE BLOCK #####
|
|
||||||
|
|
||||||
# <pep8 compliant>
|
|
||||||
|
|
||||||
|
|
||||||
import logging.config
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from pathlib import Path
|
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
import codesign.config_builder
|
|
||||||
import codesign.util as util
|
|
||||||
from codesign.base_code_signer import BaseCodeSigner
|
|
||||||
|
|
||||||
|
|
||||||
class SimpleCodeSigner:
|
|
||||||
code_signer: Optional[BaseCodeSigner]
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
platform = util.get_current_platform()
|
|
||||||
if platform == util.Platform.LINUX:
|
|
||||||
from codesign.linux_code_signer import LinuxCodeSigner
|
|
||||||
self.code_signer = LinuxCodeSigner(codesign.config_builder)
|
|
||||||
elif platform == util.Platform.MACOS:
|
|
||||||
from codesign.macos_code_signer import MacOSCodeSigner
|
|
||||||
self.code_signer = MacOSCodeSigner(codesign.config_builder)
|
|
||||||
elif platform == util.Platform.WINDOWS:
|
|
||||||
from codesign.windows_code_signer import WindowsCodeSigner
|
|
||||||
self.code_signer = WindowsCodeSigner(codesign.config_builder)
|
|
||||||
else:
|
|
||||||
self.code_signer = None
|
|
||||||
|
|
||||||
def sign_file_or_directory(self, path: Path) -> None:
|
|
||||||
logging.config.dictConfig(codesign.config_builder.LOGGING)
|
|
||||||
self.code_signer.run_buildbot_path_sign_pipeline(path)
|
|
@@ -1,54 +0,0 @@
|
|||||||
# ##### BEGIN GPL LICENSE BLOCK #####
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or
|
|
||||||
# modify it under the terms of the GNU General Public License
|
|
||||||
# as published by the Free Software Foundation; either version 2
|
|
||||||
# of the License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
|
||||||
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
#
|
|
||||||
# ##### END GPL LICENSE BLOCK #####
|
|
||||||
|
|
||||||
# <pep8 compliant>
|
|
||||||
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from enum import Enum
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
|
|
||||||
class Platform(Enum):
|
|
||||||
LINUX = 1
|
|
||||||
MACOS = 2
|
|
||||||
WINDOWS = 3
|
|
||||||
|
|
||||||
|
|
||||||
def get_current_platform() -> Platform:
|
|
||||||
if sys.platform == 'linux':
|
|
||||||
return Platform.LINUX
|
|
||||||
elif sys.platform == 'darwin':
|
|
||||||
return Platform.MACOS
|
|
||||||
elif sys.platform == 'win32':
|
|
||||||
return Platform.WINDOWS
|
|
||||||
raise Exception(f'Unknown platform {sys.platform}')
|
|
||||||
|
|
||||||
|
|
||||||
def ensure_file_does_not_exist_or_die(filepath: Path) -> None:
|
|
||||||
"""
|
|
||||||
If the file exists, unlink it.
|
|
||||||
If the file path exists and is not a file an assert will trigger.
|
|
||||||
If the file path does not exists nothing happens.
|
|
||||||
"""
|
|
||||||
if not filepath.exists():
|
|
||||||
return
|
|
||||||
if not filepath.is_file():
|
|
||||||
# TODO(sergey): Provide information about what the filepath actually is.
|
|
||||||
raise SystemExit(f'{filepath} is expected to be a file, but is not')
|
|
||||||
filepath.unlink()
|
|
@@ -1,117 +0,0 @@
|
|||||||
# ##### BEGIN GPL LICENSE BLOCK #####
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or
|
|
||||||
# modify it under the terms of the GNU General Public License
|
|
||||||
# as published by the Free Software Foundation; either version 2
|
|
||||||
# of the License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
|
||||||
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
#
|
|
||||||
# ##### END GPL LICENSE BLOCK #####
|
|
||||||
|
|
||||||
# <pep8 compliant>
|
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
from pathlib import Path
|
|
||||||
from typing import List
|
|
||||||
|
|
||||||
import codesign.util as util
|
|
||||||
|
|
||||||
from buildbot_utils import Builder
|
|
||||||
|
|
||||||
from codesign.absolute_and_relative_filename import AbsoluteAndRelativeFileName
|
|
||||||
from codesign.base_code_signer import BaseCodeSigner
|
|
||||||
from codesign.exception import CodeSignException
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
|
||||||
logger_server = logger.getChild('server')
|
|
||||||
|
|
||||||
# NOTE: Check is done as filename.endswith(), so keep the dot
|
|
||||||
EXTENSIONS_TO_BE_SIGNED = {'.exe', '.dll', '.pyd', '.msi'}
|
|
||||||
|
|
||||||
BLACKLIST_FILE_PREFIXES = (
|
|
||||||
'api-ms-', 'concrt', 'msvcp', 'ucrtbase', 'vcomp', 'vcruntime')
|
|
||||||
|
|
||||||
|
|
||||||
class SigntoolException(CodeSignException):
|
|
||||||
pass
|
|
||||||
|
|
||||||
class WindowsCodeSigner(BaseCodeSigner):
|
|
||||||
def check_file_is_to_be_signed(
|
|
||||||
self, file: AbsoluteAndRelativeFileName) -> bool:
|
|
||||||
base_name = file.relative_filepath.name
|
|
||||||
if any(base_name.startswith(prefix)
|
|
||||||
for prefix in BLACKLIST_FILE_PREFIXES):
|
|
||||||
return False
|
|
||||||
|
|
||||||
return file.relative_filepath.suffix in EXTENSIONS_TO_BE_SIGNED
|
|
||||||
|
|
||||||
|
|
||||||
def get_sign_command_prefix(self) -> List[str]:
|
|
||||||
return [
|
|
||||||
'signtool', 'sign', '/v',
|
|
||||||
'/f', self.config.WIN_CERTIFICATE_FILEPATH,
|
|
||||||
'/tr', self.config.WIN_TIMESTAMP_AUTHORITY_URL]
|
|
||||||
|
|
||||||
|
|
||||||
def run_codesign_tool(self, filepath: Path) -> None:
|
|
||||||
command = self.get_sign_command_prefix() + [filepath]
|
|
||||||
|
|
||||||
try:
|
|
||||||
codesign_output = self.check_output_or_mock(command, util.Platform.WINDOWS)
|
|
||||||
except subprocess.CalledProcessError as e:
|
|
||||||
raise SigntoolException(f'Error running signtool {e}')
|
|
||||||
|
|
||||||
logger_server.info(f'signtool output:\n{codesign_output}')
|
|
||||||
|
|
||||||
got_number_of_success = False
|
|
||||||
|
|
||||||
for line in codesign_output.split('\n'):
|
|
||||||
line_clean = line.strip()
|
|
||||||
line_clean_lower = line_clean.lower()
|
|
||||||
|
|
||||||
if line_clean_lower.startswith('number of warnings') or \
|
|
||||||
line_clean_lower.startswith('number of errors'):
|
|
||||||
number = int(line_clean_lower.split(':')[1])
|
|
||||||
if number != 0:
|
|
||||||
raise SigntoolException('Non-clean success of signtool')
|
|
||||||
|
|
||||||
if line_clean_lower.startswith('number of files successfully signed'):
|
|
||||||
got_number_of_success = True
|
|
||||||
number = int(line_clean_lower.split(':')[1])
|
|
||||||
if number != 1:
|
|
||||||
raise SigntoolException('Signtool did not consider codesign a success')
|
|
||||||
|
|
||||||
if not got_number_of_success:
|
|
||||||
raise SigntoolException('Signtool did not report number of files signed')
|
|
||||||
|
|
||||||
|
|
||||||
def sign_all_files(self, files: List[AbsoluteAndRelativeFileName]) -> None:
|
|
||||||
# NOTE: Sign files one by one to avoid possible command line length
|
|
||||||
# overflow (which could happen if we ever decide to sign every binary
|
|
||||||
# in the install folder, for example).
|
|
||||||
#
|
|
||||||
# TODO(sergey): Consider doing batched signing of handful of files in
|
|
||||||
# one go (but only if this actually known to be much faster).
|
|
||||||
num_files = len(files)
|
|
||||||
for file_index, file in enumerate(files):
|
|
||||||
# Ignore file if it is not to be signed.
|
|
||||||
# Allows to manually construct ZIP of package and get it signed.
|
|
||||||
if not self.check_file_is_to_be_signed(file):
|
|
||||||
logger_server.info(
|
|
||||||
'Ignoring file [%d/%d] %s',
|
|
||||||
file_index + 1, num_files, file.relative_filepath)
|
|
||||||
continue
|
|
||||||
|
|
||||||
logger_server.info(
|
|
||||||
'Running signtool command for file [%d/%d] %s...',
|
|
||||||
file_index + 1, num_files, file.relative_filepath)
|
|
||||||
self.run_codesign_tool(file.absolute_filepath)
|
|
@@ -1,37 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
# ##### BEGIN GPL LICENSE BLOCK #####
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or
|
|
||||||
# modify it under the terms of the GNU General Public License
|
|
||||||
# as published by the Free Software Foundation; either version 2
|
|
||||||
# of the License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
|
||||||
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
#
|
|
||||||
# ##### END GPL LICENSE BLOCK #####
|
|
||||||
|
|
||||||
# <pep8 compliant>
|
|
||||||
|
|
||||||
# NOTE: This is a no-op signer (since there isn't really a procedure to sign
|
|
||||||
# Linux binaries yet). Used to debug and verify the code signing routines on
|
|
||||||
# a Linux environment.
|
|
||||||
|
|
||||||
import logging.config
|
|
||||||
from pathlib import Path
|
|
||||||
from typing import List
|
|
||||||
|
|
||||||
from codesign.linux_code_signer import LinuxCodeSigner
|
|
||||||
import codesign.config_server
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
logging.config.dictConfig(codesign.config_server.LOGGING)
|
|
||||||
code_signer = LinuxCodeSigner(codesign.config_server)
|
|
||||||
code_signer.run_signing_server()
|
|
@@ -1,41 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
# ##### BEGIN GPL LICENSE BLOCK #####
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or
|
|
||||||
# modify it under the terms of the GNU General Public License
|
|
||||||
# as published by the Free Software Foundation; either version 2
|
|
||||||
# of the License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
|
||||||
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
#
|
|
||||||
# ##### END GPL LICENSE BLOCK #####
|
|
||||||
|
|
||||||
# <pep8 compliant>
|
|
||||||
|
|
||||||
import logging.config
|
|
||||||
from pathlib import Path
|
|
||||||
from typing import List
|
|
||||||
|
|
||||||
from codesign.macos_code_signer import MacOSCodeSigner
|
|
||||||
import codesign.config_server
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
entitlements_file = codesign.config_server.MACOS_ENTITLEMENTS_FILE
|
|
||||||
if not entitlements_file.exists():
|
|
||||||
raise SystemExit(
|
|
||||||
'Entitlements file {entitlements_file} does not exist.')
|
|
||||||
if not entitlements_file.is_file():
|
|
||||||
raise SystemExit(
|
|
||||||
'Entitlements file {entitlements_file} is not a file.')
|
|
||||||
|
|
||||||
logging.config.dictConfig(codesign.config_server.LOGGING)
|
|
||||||
code_signer = MacOSCodeSigner(codesign.config_server)
|
|
||||||
code_signer.run_signing_server()
|
|
@@ -1,11 +0,0 @@
|
|||||||
@echo off
|
|
||||||
|
|
||||||
rem This is an entry point of the codesign server for Windows.
|
|
||||||
rem It makes sure that signtool.exe is within the current PATH and can be
|
|
||||||
rem used by the Python script.
|
|
||||||
|
|
||||||
SETLOCAL
|
|
||||||
|
|
||||||
set PATH=C:\Program Files (x86)\Windows Kits\10\App Certification Kit;%PATH%
|
|
||||||
|
|
||||||
codesign_server_windows.py
|
|
@@ -1,54 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
# ##### BEGIN GPL LICENSE BLOCK #####
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or
|
|
||||||
# modify it under the terms of the GNU General Public License
|
|
||||||
# as published by the Free Software Foundation; either version 2
|
|
||||||
# of the License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
|
||||||
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
#
|
|
||||||
# ##### END GPL LICENSE BLOCK #####
|
|
||||||
|
|
||||||
# <pep8 compliant>
|
|
||||||
|
|
||||||
# Implementation of codesign server for Windows.
|
|
||||||
#
|
|
||||||
# NOTE: If signtool.exe is not in the PATH use codesign_server_windows.bat
|
|
||||||
|
|
||||||
import logging.config
|
|
||||||
import shutil
|
|
||||||
|
|
||||||
from pathlib import Path
|
|
||||||
from typing import List
|
|
||||||
|
|
||||||
import codesign.util as util
|
|
||||||
|
|
||||||
from codesign.windows_code_signer import WindowsCodeSigner
|
|
||||||
import codesign.config_server
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
logging.config.dictConfig(codesign.config_server.LOGGING)
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
|
||||||
logger_server = logger.getChild('server')
|
|
||||||
|
|
||||||
# TODO(sergey): Consider moving such sanity checks into
|
|
||||||
# CodeSigner.check_environment_or_die().
|
|
||||||
if not shutil.which('signtool.exe'):
|
|
||||||
if util.get_current_platform() == util.Platform.WINDOWS:
|
|
||||||
raise SystemExit("signtool.exe is not found in %PATH%")
|
|
||||||
logger_server.info(
|
|
||||||
'signtool.exe not found, '
|
|
||||||
'but will not be used on this foreign platform')
|
|
||||||
|
|
||||||
code_signer = WindowsCodeSigner(codesign.config_server)
|
|
||||||
code_signer.run_signing_server()
|
|
@@ -1,551 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
# ##### BEGIN GPL LICENSE BLOCK #####
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or
|
|
||||||
# modify it under the terms of the GNU General Public License
|
|
||||||
# as published by the Free Software Foundation; either version 2
|
|
||||||
# of the License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
|
||||||
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
#
|
|
||||||
# ##### END GPL LICENSE BLOCK #####
|
|
||||||
|
|
||||||
import argparse
|
|
||||||
import re
|
|
||||||
import shutil
|
|
||||||
import subprocess
|
|
||||||
import sys
|
|
||||||
import time
|
|
||||||
|
|
||||||
from pathlib import Path
|
|
||||||
from tempfile import TemporaryDirectory, NamedTemporaryFile
|
|
||||||
from typing import List
|
|
||||||
|
|
||||||
BUILDBOT_DIRECTORY = Path(__file__).absolute().parent
|
|
||||||
CODESIGN_SCRIPT = BUILDBOT_DIRECTORY / 'worker_codesign.py'
|
|
||||||
BLENDER_GIT_ROOT_DIRECTORY = BUILDBOT_DIRECTORY.parent.parent
|
|
||||||
DARWIN_DIRECTORY = BLENDER_GIT_ROOT_DIRECTORY / 'release' / 'darwin'
|
|
||||||
|
|
||||||
|
|
||||||
# Extra size which is added on top of actual files size when estimating size
|
|
||||||
# of destination DNG.
|
|
||||||
EXTRA_DMG_SIZE_IN_BYTES = 800 * 1024 * 1024
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Common utilities
|
|
||||||
|
|
||||||
|
|
||||||
def get_directory_size(root_directory: Path) -> int:
|
|
||||||
"""
|
|
||||||
Get size of directory on disk
|
|
||||||
"""
|
|
||||||
|
|
||||||
total_size = 0
|
|
||||||
for file in root_directory.glob('**/*'):
|
|
||||||
total_size += file.lstat().st_size
|
|
||||||
return total_size
|
|
||||||
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# DMG bundling specific logic
|
|
||||||
|
|
||||||
def create_argument_parser():
|
|
||||||
parser = argparse.ArgumentParser()
|
|
||||||
parser.add_argument(
|
|
||||||
'source_dir',
|
|
||||||
type=Path,
|
|
||||||
help='Source directory which points to either existing .app bundle'
|
|
||||||
'or to a directory with .app bundles.')
|
|
||||||
parser.add_argument(
|
|
||||||
'--background-image',
|
|
||||||
type=Path,
|
|
||||||
help="Optional background picture which will be set on the DMG."
|
|
||||||
"If not provided default Blender's one is used.")
|
|
||||||
parser.add_argument(
|
|
||||||
'--volume-name',
|
|
||||||
type=str,
|
|
||||||
help='Optional name of a volume which will be used for DMG.')
|
|
||||||
parser.add_argument(
|
|
||||||
'--dmg',
|
|
||||||
type=Path,
|
|
||||||
help='Optional argument which points to a final DMG file name.')
|
|
||||||
parser.add_argument(
|
|
||||||
'--applescript',
|
|
||||||
type=Path,
|
|
||||||
help="Optional path to applescript to set up folder looks of DMG."
|
|
||||||
"If not provided default Blender's one is used.")
|
|
||||||
parser.add_argument(
|
|
||||||
'--codesign',
|
|
||||||
action="store_true",
|
|
||||||
help="Code sign and notarize DMG contents.")
|
|
||||||
return parser
|
|
||||||
|
|
||||||
|
|
||||||
def collect_app_bundles(source_dir: Path) -> List[Path]:
|
|
||||||
"""
|
|
||||||
Collect all app bundles which are to be put into DMG
|
|
||||||
|
|
||||||
If the source directory points to FOO.app it will be the only app bundle
|
|
||||||
packed.
|
|
||||||
|
|
||||||
Otherwise all .app bundles from given directory are placed to a single
|
|
||||||
DMG.
|
|
||||||
"""
|
|
||||||
|
|
||||||
if source_dir.name.endswith('.app'):
|
|
||||||
return [source_dir]
|
|
||||||
|
|
||||||
app_bundles = []
|
|
||||||
for filename in source_dir.glob('*'):
|
|
||||||
if not filename.is_dir():
|
|
||||||
continue
|
|
||||||
if not filename.name.endswith('.app'):
|
|
||||||
continue
|
|
||||||
|
|
||||||
app_bundles.append(filename)
|
|
||||||
|
|
||||||
return app_bundles
|
|
||||||
|
|
||||||
|
|
||||||
def collect_and_log_app_bundles(source_dir: Path) -> List[Path]:
|
|
||||||
app_bundles = collect_app_bundles(source_dir)
|
|
||||||
|
|
||||||
if not app_bundles:
|
|
||||||
print('No app bundles found for packing')
|
|
||||||
return
|
|
||||||
|
|
||||||
print(f'Found {len(app_bundles)} to pack:')
|
|
||||||
for app_bundle in app_bundles:
|
|
||||||
print(f'- {app_bundle}')
|
|
||||||
|
|
||||||
return app_bundles
|
|
||||||
|
|
||||||
|
|
||||||
def estimate_dmg_size(app_bundles: List[Path]) -> int:
|
|
||||||
"""
|
|
||||||
Estimate size of DMG to hold requested app bundles
|
|
||||||
|
|
||||||
The size is based on actual size of all files in all bundles plus some
|
|
||||||
space to compensate for different size-on-disk plus some space to hold
|
|
||||||
codesign signatures.
|
|
||||||
|
|
||||||
Is better to be on a high side since the empty space is compressed, but
|
|
||||||
lack of space might cause silent failures later on.
|
|
||||||
"""
|
|
||||||
|
|
||||||
app_bundles_size = 0
|
|
||||||
for app_bundle in app_bundles:
|
|
||||||
app_bundles_size += get_directory_size(app_bundle)
|
|
||||||
|
|
||||||
return app_bundles_size + EXTRA_DMG_SIZE_IN_BYTES
|
|
||||||
|
|
||||||
|
|
||||||
def copy_app_bundles_to_directory(app_bundles: List[Path],
|
|
||||||
directory: Path) -> None:
|
|
||||||
"""
|
|
||||||
Copy all bundles to a given directory
|
|
||||||
|
|
||||||
This directory is what the DMG will be created from.
|
|
||||||
"""
|
|
||||||
for app_bundle in app_bundles:
|
|
||||||
print(f'Copying {app_bundle.name}...')
|
|
||||||
shutil.copytree(app_bundle, directory / app_bundle.name)
|
|
||||||
|
|
||||||
|
|
||||||
def get_main_app_bundle(app_bundles: List[Path]) -> Path:
|
|
||||||
"""
|
|
||||||
Get application bundle main for the installation
|
|
||||||
"""
|
|
||||||
return app_bundles[0]
|
|
||||||
|
|
||||||
|
|
||||||
def create_dmg_image(app_bundles: List[Path],
|
|
||||||
dmg_filepath: Path,
|
|
||||||
volume_name: str) -> None:
|
|
||||||
"""
|
|
||||||
Create DMG disk image and put app bundles in it
|
|
||||||
|
|
||||||
No DMG configuration or codesigning is happening here.
|
|
||||||
"""
|
|
||||||
|
|
||||||
if dmg_filepath.exists():
|
|
||||||
print(f'Removing existing writable DMG {dmg_filepath}...')
|
|
||||||
dmg_filepath.unlink()
|
|
||||||
|
|
||||||
print('Preparing directory with app bundles for the DMG...')
|
|
||||||
with TemporaryDirectory(prefix='blender-dmg-content-') as content_dir_str:
|
|
||||||
# Copy all bundles to a clean directory.
|
|
||||||
content_dir = Path(content_dir_str)
|
|
||||||
copy_app_bundles_to_directory(app_bundles, content_dir)
|
|
||||||
|
|
||||||
# Estimate size of the DMG.
|
|
||||||
dmg_size = estimate_dmg_size(app_bundles)
|
|
||||||
print(f'Estimated DMG size: {dmg_size:,} bytes.')
|
|
||||||
|
|
||||||
# Create the DMG.
|
|
||||||
print(f'Creating writable DMG {dmg_filepath}')
|
|
||||||
command = ('hdiutil',
|
|
||||||
'create',
|
|
||||||
'-size', str(dmg_size),
|
|
||||||
'-fs', 'HFS+',
|
|
||||||
'-srcfolder', content_dir,
|
|
||||||
'-volname', volume_name,
|
|
||||||
'-format', 'UDRW',
|
|
||||||
dmg_filepath)
|
|
||||||
subprocess.run(command)
|
|
||||||
|
|
||||||
|
|
||||||
def get_writable_dmg_filepath(dmg_filepath: Path):
|
|
||||||
"""
|
|
||||||
Get file path for writable DMG image
|
|
||||||
"""
|
|
||||||
parent = dmg_filepath.parent
|
|
||||||
return parent / (dmg_filepath.stem + '-temp.dmg')
|
|
||||||
|
|
||||||
|
|
||||||
def mount_readwrite_dmg(dmg_filepath: Path) -> None:
|
|
||||||
"""
|
|
||||||
Mount writable DMG
|
|
||||||
|
|
||||||
Mounting point would be /Volumes/<volume name>
|
|
||||||
"""
|
|
||||||
|
|
||||||
print(f'Mounting read-write DMG ${dmg_filepath}')
|
|
||||||
command = ('hdiutil',
|
|
||||||
'attach', '-readwrite',
|
|
||||||
'-noverify',
|
|
||||||
'-noautoopen',
|
|
||||||
dmg_filepath)
|
|
||||||
subprocess.run(command)
|
|
||||||
|
|
||||||
|
|
||||||
def get_mount_directory_for_volume_name(volume_name: str) -> Path:
|
|
||||||
"""
|
|
||||||
Get directory under which the volume will be mounted
|
|
||||||
"""
|
|
||||||
|
|
||||||
return Path('/Volumes') / volume_name
|
|
||||||
|
|
||||||
|
|
||||||
def eject_volume(volume_name: str) -> None:
|
|
||||||
"""
|
|
||||||
Eject given volume, if mounted
|
|
||||||
"""
|
|
||||||
mount_directory = get_mount_directory_for_volume_name(volume_name)
|
|
||||||
if not mount_directory.exists():
|
|
||||||
return
|
|
||||||
mount_directory_str = str(mount_directory)
|
|
||||||
|
|
||||||
print(f'Ejecting volume {volume_name}')
|
|
||||||
|
|
||||||
# Figure out which device to eject.
|
|
||||||
mount_output = subprocess.check_output(['mount']).decode()
|
|
||||||
device = ''
|
|
||||||
for line in mount_output.splitlines():
|
|
||||||
if f'on {mount_directory_str} (' not in line:
|
|
||||||
continue
|
|
||||||
tokens = line.split(' ', 3)
|
|
||||||
if len(tokens) < 3:
|
|
||||||
continue
|
|
||||||
if tokens[1] != 'on':
|
|
||||||
continue
|
|
||||||
if device:
|
|
||||||
raise Exception(
|
|
||||||
f'Multiple devices found for mounting point {mount_directory}')
|
|
||||||
device = tokens[0]
|
|
||||||
|
|
||||||
if not device:
|
|
||||||
raise Exception(
|
|
||||||
f'No device found for mounting point {mount_directory}')
|
|
||||||
|
|
||||||
print(f'{mount_directory} is mounted as device {device}, ejecting...')
|
|
||||||
subprocess.run(['diskutil', 'eject', device])
|
|
||||||
|
|
||||||
|
|
||||||
def copy_background_if_needed(background_image_filepath: Path,
|
|
||||||
mount_directory: Path) -> None:
|
|
||||||
"""
|
|
||||||
Copy background to the DMG
|
|
||||||
|
|
||||||
If the background image is not specified it will not be copied.
|
|
||||||
"""
|
|
||||||
|
|
||||||
if not background_image_filepath:
|
|
||||||
print('No background image provided.')
|
|
||||||
return
|
|
||||||
|
|
||||||
print(f'Copying background image {background_image_filepath}')
|
|
||||||
|
|
||||||
destination_dir = mount_directory / '.background'
|
|
||||||
destination_dir.mkdir(exist_ok=True)
|
|
||||||
|
|
||||||
destination_filepath = destination_dir / background_image_filepath.name
|
|
||||||
shutil.copy(background_image_filepath, destination_filepath)
|
|
||||||
|
|
||||||
|
|
||||||
def create_applications_link(mount_directory: Path) -> None:
|
|
||||||
"""
|
|
||||||
Create link to /Applications in the given location
|
|
||||||
"""
|
|
||||||
|
|
||||||
print('Creating link to /Applications')
|
|
||||||
|
|
||||||
command = ('ln', '-s', '/Applications', mount_directory / ' ')
|
|
||||||
subprocess.run(command)
|
|
||||||
|
|
||||||
|
|
||||||
def run_applescript(applescript: Path,
|
|
||||||
volume_name: str,
|
|
||||||
app_bundles: List[Path],
|
|
||||||
background_image_filepath: Path) -> None:
|
|
||||||
"""
|
|
||||||
Run given applescript to adjust look and feel of the DMG
|
|
||||||
"""
|
|
||||||
|
|
||||||
main_app_bundle = get_main_app_bundle(app_bundles)
|
|
||||||
|
|
||||||
with NamedTemporaryFile(
|
|
||||||
mode='w', suffix='.applescript') as temp_applescript:
|
|
||||||
print('Adjusting applescript for volume name...')
|
|
||||||
# Adjust script to the specific volume name.
|
|
||||||
with open(applescript, mode='r') as input:
|
|
||||||
for line in input.readlines():
|
|
||||||
stripped_line = line.strip()
|
|
||||||
if stripped_line.startswith('tell disk'):
|
|
||||||
line = re.sub('tell disk ".*"',
|
|
||||||
f'tell disk "{volume_name}"',
|
|
||||||
line)
|
|
||||||
elif stripped_line.startswith('set background picture'):
|
|
||||||
if not background_image_filepath:
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
background_image_short = \
|
|
||||||
'.background:' + background_image_filepath.name
|
|
||||||
line = re.sub('to file ".*"',
|
|
||||||
f'to file "{background_image_short}"',
|
|
||||||
line)
|
|
||||||
line = line.replace('blender.app', main_app_bundle.name)
|
|
||||||
temp_applescript.write(line)
|
|
||||||
|
|
||||||
temp_applescript.flush()
|
|
||||||
|
|
||||||
print('Running applescript...')
|
|
||||||
command = ('osascript', temp_applescript.name)
|
|
||||||
subprocess.run(command)
|
|
||||||
|
|
||||||
print('Waiting for applescript...')
|
|
||||||
|
|
||||||
# NOTE: This is copied from bundle.sh. The exact reason for sleep is
|
|
||||||
# still remained a mystery.
|
|
||||||
time.sleep(5)
|
|
||||||
|
|
||||||
|
|
||||||
def codesign(subject: Path):
|
|
||||||
"""
|
|
||||||
Codesign file or directory
|
|
||||||
|
|
||||||
NOTE: For DMG it will also notarize.
|
|
||||||
"""
|
|
||||||
|
|
||||||
command = (CODESIGN_SCRIPT, subject)
|
|
||||||
subprocess.run(command)
|
|
||||||
|
|
||||||
|
|
||||||
def codesign_app_bundles_in_dmg(mount_directory: str) -> None:
|
|
||||||
"""
|
|
||||||
Code sign all binaries and bundles in the mounted directory
|
|
||||||
"""
|
|
||||||
|
|
||||||
print(f'Codesigning all app bundles in {mount_directory}')
|
|
||||||
codesign(mount_directory)
|
|
||||||
|
|
||||||
|
|
||||||
def codesign_and_notarize_dmg(dmg_filepath: Path) -> None:
|
|
||||||
"""
|
|
||||||
Run codesign and notarization pipeline on the DMG
|
|
||||||
"""
|
|
||||||
|
|
||||||
print(f'Codesigning and notarizing DMG {dmg_filepath}')
|
|
||||||
codesign(dmg_filepath)
|
|
||||||
|
|
||||||
|
|
||||||
def compress_dmg(writable_dmg_filepath: Path,
|
|
||||||
final_dmg_filepath: Path) -> None:
|
|
||||||
"""
|
|
||||||
Compress temporary read-write DMG
|
|
||||||
"""
|
|
||||||
command = ('hdiutil', 'convert',
|
|
||||||
writable_dmg_filepath,
|
|
||||||
'-format', 'UDZO',
|
|
||||||
'-o', final_dmg_filepath)
|
|
||||||
|
|
||||||
if final_dmg_filepath.exists():
|
|
||||||
print(f'Removing old compressed DMG {final_dmg_filepath}')
|
|
||||||
final_dmg_filepath.unlink()
|
|
||||||
|
|
||||||
print('Compressing disk image...')
|
|
||||||
subprocess.run(command)
|
|
||||||
|
|
||||||
|
|
||||||
def create_final_dmg(app_bundles: List[Path],
|
|
||||||
dmg_filepath: Path,
|
|
||||||
background_image_filepath: Path,
|
|
||||||
volume_name: str,
|
|
||||||
applescript: Path,
|
|
||||||
codesign: bool) -> None:
|
|
||||||
"""
|
|
||||||
Create DMG with all app bundles
|
|
||||||
|
|
||||||
Will take care configuring background, signing all binaries and app bundles
|
|
||||||
and notarizing the DMG.
|
|
||||||
"""
|
|
||||||
|
|
||||||
print('Running all routines to create final DMG')
|
|
||||||
|
|
||||||
writable_dmg_filepath = get_writable_dmg_filepath(dmg_filepath)
|
|
||||||
mount_directory = get_mount_directory_for_volume_name(volume_name)
|
|
||||||
|
|
||||||
# Make sure volume is not mounted.
|
|
||||||
# If it is mounted it will prevent removing old DMG files and could make
|
|
||||||
# it so app bundles are copied to the wrong place.
|
|
||||||
eject_volume(volume_name)
|
|
||||||
|
|
||||||
create_dmg_image(app_bundles, writable_dmg_filepath, volume_name)
|
|
||||||
|
|
||||||
mount_readwrite_dmg(writable_dmg_filepath)
|
|
||||||
|
|
||||||
# Run codesign first, prior to copying amything else.
|
|
||||||
#
|
|
||||||
# This allows to recurs into the content of bundles without worrying about
|
|
||||||
# possible interfereice of Application symlink.
|
|
||||||
if codesign:
|
|
||||||
codesign_app_bundles_in_dmg(mount_directory)
|
|
||||||
|
|
||||||
copy_background_if_needed(background_image_filepath, mount_directory)
|
|
||||||
create_applications_link(mount_directory)
|
|
||||||
run_applescript(applescript, volume_name, app_bundles,
|
|
||||||
background_image_filepath)
|
|
||||||
|
|
||||||
print('Ejecting read-write DMG image...')
|
|
||||||
eject_volume(volume_name)
|
|
||||||
|
|
||||||
compress_dmg(writable_dmg_filepath, dmg_filepath)
|
|
||||||
writable_dmg_filepath.unlink()
|
|
||||||
|
|
||||||
if codesign:
|
|
||||||
codesign_and_notarize_dmg(dmg_filepath)
|
|
||||||
|
|
||||||
|
|
||||||
def ensure_dmg_extension(filepath: Path) -> Path:
|
|
||||||
"""
|
|
||||||
Make sure given file have .dmg extension
|
|
||||||
"""
|
|
||||||
|
|
||||||
if filepath.suffix != '.dmg':
|
|
||||||
return filepath.with_suffix(f'{filepath.suffix}.dmg')
|
|
||||||
return filepath
|
|
||||||
|
|
||||||
|
|
||||||
def get_dmg_filepath(requested_name: Path, app_bundles: List[Path]) -> Path:
|
|
||||||
"""
|
|
||||||
Get full file path for the final DMG image
|
|
||||||
|
|
||||||
Will use the provided one when possible, otherwise will deduct it from
|
|
||||||
app bundles.
|
|
||||||
|
|
||||||
If the name is deducted, the DMG is stored in the current directory.
|
|
||||||
"""
|
|
||||||
|
|
||||||
if requested_name:
|
|
||||||
return ensure_dmg_extension(requested_name.absolute())
|
|
||||||
|
|
||||||
# TODO(sergey): This is not necessarily the main one.
|
|
||||||
main_bundle = app_bundles[0]
|
|
||||||
# Strip .app from the name
|
|
||||||
return Path(main_bundle.name[:-4] + '.dmg').absolute()
|
|
||||||
|
|
||||||
|
|
||||||
def get_background_image(requested_background_image: Path) -> Path:
|
|
||||||
"""
|
|
||||||
Get effective filepath for the background image
|
|
||||||
"""
|
|
||||||
|
|
||||||
if requested_background_image:
|
|
||||||
return requested_background_image.absolute()
|
|
||||||
|
|
||||||
return DARWIN_DIRECTORY / 'background.tif'
|
|
||||||
|
|
||||||
|
|
||||||
def get_applescript(requested_applescript: Path) -> Path:
|
|
||||||
"""
|
|
||||||
Get effective filepath for the applescript
|
|
||||||
"""
|
|
||||||
|
|
||||||
if requested_applescript:
|
|
||||||
return requested_applescript.absolute()
|
|
||||||
|
|
||||||
return DARWIN_DIRECTORY / 'blender.applescript'
|
|
||||||
|
|
||||||
|
|
||||||
def get_volume_name_from_dmg_filepath(dmg_filepath: Path) -> str:
|
|
||||||
"""
|
|
||||||
Deduct volume name from the DMG path
|
|
||||||
|
|
||||||
Will use first part of the DMG file name prior to dash.
|
|
||||||
"""
|
|
||||||
|
|
||||||
tokens = dmg_filepath.stem.split('-')
|
|
||||||
words = tokens[0].split()
|
|
||||||
|
|
||||||
return ' '.join(word.capitalize() for word in words)
|
|
||||||
|
|
||||||
|
|
||||||
def get_volume_name(requested_volume_name: str,
|
|
||||||
dmg_filepath: Path) -> str:
|
|
||||||
"""
|
|
||||||
Get effective name for DMG volume
|
|
||||||
"""
|
|
||||||
|
|
||||||
if requested_volume_name:
|
|
||||||
return requested_volume_name
|
|
||||||
|
|
||||||
return get_volume_name_from_dmg_filepath(dmg_filepath)
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
parser = create_argument_parser()
|
|
||||||
args = parser.parse_args()
|
|
||||||
|
|
||||||
# Get normalized input parameters.
|
|
||||||
source_dir = args.source_dir.absolute()
|
|
||||||
background_image_filepath = get_background_image(args.background_image)
|
|
||||||
applescript = get_applescript(args.applescript)
|
|
||||||
codesign = args.codesign
|
|
||||||
|
|
||||||
app_bundles = collect_and_log_app_bundles(source_dir)
|
|
||||||
if not app_bundles:
|
|
||||||
return
|
|
||||||
|
|
||||||
dmg_filepath = get_dmg_filepath(args.dmg, app_bundles)
|
|
||||||
volume_name = get_volume_name(args.volume_name, dmg_filepath)
|
|
||||||
|
|
||||||
print(f'Will produce DMG "{dmg_filepath.name}" (without quotes)')
|
|
||||||
|
|
||||||
create_final_dmg(app_bundles,
|
|
||||||
dmg_filepath,
|
|
||||||
background_image_filepath,
|
|
||||||
volume_name,
|
|
||||||
applescript,
|
|
||||||
codesign)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
@@ -1,44 +0,0 @@
|
|||||||
# ##### BEGIN GPL LICENSE BLOCK #####
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or
|
|
||||||
# modify it under the terms of the GNU General Public License
|
|
||||||
# as published by the Free Software Foundation; either version 2
|
|
||||||
# of the License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
|
||||||
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
#
|
|
||||||
# ##### END GPL LICENSE BLOCK #####
|
|
||||||
|
|
||||||
# This is a script which is used as POST-INSTALL one for regular CMake's
|
|
||||||
# INSTALL target.
|
|
||||||
# It is used by buildbot workers to sign every binary which is going into
|
|
||||||
# the final buundle.
|
|
||||||
|
|
||||||
# On Windows Python 3 there only is python.exe, no python3.exe.
|
|
||||||
#
|
|
||||||
# On other platforms it is possible to have python2 and python3, and a
|
|
||||||
# symbolic link to python to either of them. So on those platforms use
|
|
||||||
# an explicit Python version.
|
|
||||||
if(WIN32)
|
|
||||||
set(PYTHON_EXECUTABLE python)
|
|
||||||
else()
|
|
||||||
set(PYTHON_EXECUTABLE python3)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
execute_process(
|
|
||||||
COMMAND ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_LIST_DIR}/worker_codesign.py"
|
|
||||||
"${CMAKE_INSTALL_PREFIX}"
|
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
|
|
||||||
RESULT_VARIABLE exit_code
|
|
||||||
)
|
|
||||||
|
|
||||||
if(NOT exit_code EQUAL "0")
|
|
||||||
message(FATAL_ERROR "Non-zero exit code of codesign tool")
|
|
||||||
endif()
|
|
@@ -1,74 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
# ##### BEGIN GPL LICENSE BLOCK #####
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or
|
|
||||||
# modify it under the terms of the GNU General Public License
|
|
||||||
# as published by the Free Software Foundation; either version 2
|
|
||||||
# of the License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
|
||||||
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
#
|
|
||||||
# ##### END GPL LICENSE BLOCK #####
|
|
||||||
|
|
||||||
# Helper script which takes care of signing provided location.
|
|
||||||
#
|
|
||||||
# The location can either be a directory (in which case all eligible binaries
|
|
||||||
# will be signed) or a single file (in which case a single file will be signed).
|
|
||||||
#
|
|
||||||
# This script takes care of all the complexity of communicating between process
|
|
||||||
# which requests file to be signed and the code signing server.
|
|
||||||
#
|
|
||||||
# NOTE: Signing happens in-place.
|
|
||||||
|
|
||||||
import argparse
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
from codesign.simple_code_signer import SimpleCodeSigner
|
|
||||||
|
|
||||||
|
|
||||||
def create_argument_parser():
|
|
||||||
parser = argparse.ArgumentParser()
|
|
||||||
parser.add_argument('path_to_sign', type=Path)
|
|
||||||
return parser
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
parser = create_argument_parser()
|
|
||||||
args = parser.parse_args()
|
|
||||||
path_to_sign = args.path_to_sign.absolute()
|
|
||||||
|
|
||||||
if sys.platform == 'win32':
|
|
||||||
# When WIX packed is used to generate .msi on Windows the CPack will
|
|
||||||
# install two different projects and install them to different
|
|
||||||
# installation prefix:
|
|
||||||
#
|
|
||||||
# - C:\b\build\_CPack_Packages\WIX\Blender
|
|
||||||
# - C:\b\build\_CPack_Packages\WIX\Unspecified
|
|
||||||
#
|
|
||||||
# Annoying part is: CMake's post-install script will only be run
|
|
||||||
# once, with the install prefix which corresponds to a project which
|
|
||||||
# was installed last. But we want to sign binaries from all projects.
|
|
||||||
# So in order to do so we detect that we are running for a CPack's
|
|
||||||
# project used for WIX and force parent directory (which includes both
|
|
||||||
# projects) to be signed.
|
|
||||||
#
|
|
||||||
# Here we force both projects to be signed.
|
|
||||||
if path_to_sign.name == 'Unspecified' and 'WIX' in str(path_to_sign):
|
|
||||||
path_to_sign = path_to_sign.parent
|
|
||||||
|
|
||||||
code_signer = SimpleCodeSigner()
|
|
||||||
code_signer.sign_file_or_directory(path_to_sign)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
@@ -1,135 +0,0 @@
|
|||||||
# ##### BEGIN GPL LICENSE BLOCK #####
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or
|
|
||||||
# modify it under the terms of the GNU General Public License
|
|
||||||
# as published by the Free Software Foundation; either version 2
|
|
||||||
# of the License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
|
||||||
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
#
|
|
||||||
# ##### END GPL LICENSE BLOCK #####
|
|
||||||
|
|
||||||
# <pep8 compliant>
|
|
||||||
|
|
||||||
import os
|
|
||||||
import shutil
|
|
||||||
|
|
||||||
import buildbot_utils
|
|
||||||
|
|
||||||
|
|
||||||
def get_cmake_options(builder):
|
|
||||||
codesign_script = os.path.join(
|
|
||||||
builder.blender_dir, 'build_files', 'buildbot', 'worker_codesign.cmake')
|
|
||||||
|
|
||||||
config_file = "build_files/cmake/config/blender_release.cmake"
|
|
||||||
options = ['-DCMAKE_BUILD_TYPE:STRING=Release',
|
|
||||||
'-DWITH_GTESTS=ON']
|
|
||||||
|
|
||||||
if builder.platform == 'mac':
|
|
||||||
options.append('-DCMAKE_OSX_ARCHITECTURES:STRING=x86_64')
|
|
||||||
options.append('-DCMAKE_OSX_DEPLOYMENT_TARGET=10.9')
|
|
||||||
elif builder.platform == 'win':
|
|
||||||
options.extend(['-G', 'Visual Studio 16 2019', '-A', 'x64'])
|
|
||||||
if builder.codesign:
|
|
||||||
options.extend(['-DPOSTINSTALL_SCRIPT:PATH=' + codesign_script])
|
|
||||||
elif builder.platform == 'linux':
|
|
||||||
config_file = "build_files/buildbot/config/blender_linux.cmake"
|
|
||||||
|
|
||||||
optix_sdk_dir = os.path.join(builder.blender_dir, '..', '..', 'NVIDIA-Optix-SDK-7.1')
|
|
||||||
options.append('-DOPTIX_ROOT_DIR:PATH=' + optix_sdk_dir)
|
|
||||||
|
|
||||||
# Workaround to build sm_30 kernels with CUDA 10, since CUDA 11 no longer supports that architecture
|
|
||||||
if builder.platform == 'win':
|
|
||||||
options.append('-DCUDA10_TOOLKIT_ROOT_DIR:PATH=C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.1')
|
|
||||||
options.append('-DCUDA10_NVCC_EXECUTABLE:FILEPATH=C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.1/bin/nvcc.exe')
|
|
||||||
options.append('-DCUDA11_TOOLKIT_ROOT_DIR:PATH=C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.1')
|
|
||||||
options.append('-DCUDA11_NVCC_EXECUTABLE:FILEPATH=C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.1/bin/nvcc.exe')
|
|
||||||
elif builder.platform == 'linux':
|
|
||||||
options.append('-DCUDA10_TOOLKIT_ROOT_DIR:PATH=/usr/local/cuda-10.1')
|
|
||||||
options.append('-DCUDA10_NVCC_EXECUTABLE:FILEPATH=/usr/local/cuda-10.1/bin/nvcc')
|
|
||||||
options.append('-DCUDA11_TOOLKIT_ROOT_DIR:PATH=/usr/local/cuda-11.1')
|
|
||||||
options.append('-DCUDA11_NVCC_EXECUTABLE:FILEPATH=/usr/local/cuda-11.1/bin/nvcc')
|
|
||||||
|
|
||||||
options.append("-C" + os.path.join(builder.blender_dir, config_file))
|
|
||||||
options.append("-DCMAKE_INSTALL_PREFIX=%s" % (builder.install_dir))
|
|
||||||
|
|
||||||
return options
|
|
||||||
|
|
||||||
|
|
||||||
def update_git(builder):
|
|
||||||
# Do extra git fetch because not all platform/git/buildbot combinations
|
|
||||||
# update the origin remote, causing buildinfo to detect local changes.
|
|
||||||
os.chdir(builder.blender_dir)
|
|
||||||
|
|
||||||
print("Fetching remotes")
|
|
||||||
command = ['git', 'fetch', '--all']
|
|
||||||
buildbot_utils.call(builder.command_prefix + command)
|
|
||||||
|
|
||||||
|
|
||||||
def clean_directories(builder):
|
|
||||||
# Make sure no garbage remained from the previous run
|
|
||||||
if os.path.isdir(builder.install_dir):
|
|
||||||
shutil.rmtree(builder.install_dir)
|
|
||||||
|
|
||||||
# Make sure build directory exists and enter it
|
|
||||||
os.makedirs(builder.build_dir, exist_ok=True)
|
|
||||||
|
|
||||||
# Remove buildinfo files to force buildbot to re-generate them.
|
|
||||||
for buildinfo in ('buildinfo.h', 'buildinfo.h.txt', ):
|
|
||||||
full_path = os.path.join(builder.build_dir, 'source', 'creator', buildinfo)
|
|
||||||
if os.path.exists(full_path):
|
|
||||||
print("Removing {}" . format(buildinfo))
|
|
||||||
os.remove(full_path)
|
|
||||||
|
|
||||||
|
|
||||||
def cmake_configure(builder):
|
|
||||||
# CMake configuration
|
|
||||||
os.chdir(builder.build_dir)
|
|
||||||
|
|
||||||
cmake_cache = os.path.join(builder.build_dir, 'CMakeCache.txt')
|
|
||||||
if os.path.exists(cmake_cache):
|
|
||||||
print("Removing CMake cache")
|
|
||||||
os.remove(cmake_cache)
|
|
||||||
|
|
||||||
print("CMake configure:")
|
|
||||||
cmake_options = get_cmake_options(builder)
|
|
||||||
command = ['cmake', builder.blender_dir] + cmake_options
|
|
||||||
buildbot_utils.call(builder.command_prefix + command)
|
|
||||||
|
|
||||||
|
|
||||||
def cmake_build(builder):
|
|
||||||
# CMake build
|
|
||||||
os.chdir(builder.build_dir)
|
|
||||||
|
|
||||||
# NOTE: CPack will build an INSTALL target, which would mean that code
|
|
||||||
# signing will happen twice when using `make install` and CPack.
|
|
||||||
# The tricky bit here is that it is not possible to know whether INSTALL
|
|
||||||
# target is used by CPack or by a buildbot itaself. Extra level on top of
|
|
||||||
# this is that on Windows it is required to build INSTALL target in order
|
|
||||||
# to have unit test binaries to run.
|
|
||||||
# So on the one hand we do an extra unneeded code sign on Windows, but on
|
|
||||||
# a positive side we don't add complexity and don't make build process more
|
|
||||||
# fragile trying to avoid this. The signing process is way faster than just
|
|
||||||
# a clean build of buildbot, especially with regression tests enabled.
|
|
||||||
if builder.platform == 'win':
|
|
||||||
command = ['cmake', '--build', '.', '--target', 'install', '--config', 'Release']
|
|
||||||
else:
|
|
||||||
command = ['make', '-s', '-j16', 'install']
|
|
||||||
|
|
||||||
print("CMake build:")
|
|
||||||
buildbot_utils.call(builder.command_prefix + command)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
builder = buildbot_utils.create_builder_from_arguments()
|
|
||||||
update_git(builder)
|
|
||||||
clean_directories(builder)
|
|
||||||
cmake_configure(builder)
|
|
||||||
cmake_build(builder)
|
|
@@ -1,208 +0,0 @@
|
|||||||
# ##### BEGIN GPL LICENSE BLOCK #####
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or
|
|
||||||
# modify it under the terms of the GNU General Public License
|
|
||||||
# as published by the Free Software Foundation; either version 2
|
|
||||||
# of the License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
|
||||||
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
#
|
|
||||||
# ##### END GPL LICENSE BLOCK #####
|
|
||||||
|
|
||||||
# <pep8 compliant>
|
|
||||||
|
|
||||||
# Runs on buildbot worker, creating a release package using the build
|
|
||||||
# system and zipping it into buildbot_upload.zip. This is then uploaded
|
|
||||||
# to the master in the next buildbot step.
|
|
||||||
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
import buildbot_utils
|
|
||||||
|
|
||||||
|
|
||||||
def get_package_name(builder, platform=None):
|
|
||||||
info = buildbot_utils.VersionInfo(builder)
|
|
||||||
|
|
||||||
package_name = 'blender-' + info.full_version
|
|
||||||
if platform:
|
|
||||||
package_name += '-' + platform
|
|
||||||
if not (builder.branch == 'master' or builder.is_release_branch):
|
|
||||||
if info.is_development_build:
|
|
||||||
package_name = builder.branch + "-" + package_name
|
|
||||||
|
|
||||||
return package_name
|
|
||||||
|
|
||||||
|
|
||||||
def sign_file_or_directory(path):
|
|
||||||
from codesign.simple_code_signer import SimpleCodeSigner
|
|
||||||
code_signer = SimpleCodeSigner()
|
|
||||||
code_signer.sign_file_or_directory(Path(path))
|
|
||||||
|
|
||||||
|
|
||||||
def create_buildbot_upload_zip(builder, package_files):
|
|
||||||
import zipfile
|
|
||||||
|
|
||||||
buildbot_upload_zip = os.path.join(builder.upload_dir, "buildbot_upload.zip")
|
|
||||||
if os.path.exists(buildbot_upload_zip):
|
|
||||||
os.remove(buildbot_upload_zip)
|
|
||||||
|
|
||||||
try:
|
|
||||||
z = zipfile.ZipFile(buildbot_upload_zip, "w", compression=zipfile.ZIP_STORED)
|
|
||||||
for filepath, filename in package_files:
|
|
||||||
print("Packaged", filename)
|
|
||||||
z.write(filepath, arcname=filename)
|
|
||||||
z.close()
|
|
||||||
except Exception as ex:
|
|
||||||
sys.stderr.write('Create buildbot_upload.zip failed: ' + str(ex) + '\n')
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
|
|
||||||
def create_tar_xz(src, dest, package_name):
|
|
||||||
# One extra to remove leading os.sep when cleaning root for package_root
|
|
||||||
ln = len(src) + 1
|
|
||||||
flist = list()
|
|
||||||
|
|
||||||
# Create list of tuples containing file and archive name
|
|
||||||
for root, dirs, files in os.walk(src):
|
|
||||||
package_root = os.path.join(package_name, root[ln:])
|
|
||||||
flist.extend([(os.path.join(root, file), os.path.join(package_root, file)) for file in files])
|
|
||||||
|
|
||||||
import tarfile
|
|
||||||
|
|
||||||
# Set UID/GID of archived files to 0, otherwise they'd be owned by whatever
|
|
||||||
# user compiled the package. If root then unpacks it to /usr/local/ you get
|
|
||||||
# a security issue.
|
|
||||||
def _fakeroot(tarinfo):
|
|
||||||
tarinfo.gid = 0
|
|
||||||
tarinfo.gname = "root"
|
|
||||||
tarinfo.uid = 0
|
|
||||||
tarinfo.uname = "root"
|
|
||||||
return tarinfo
|
|
||||||
|
|
||||||
package = tarfile.open(dest, 'w:xz', preset=9)
|
|
||||||
for entry in flist:
|
|
||||||
package.add(entry[0], entry[1], recursive=False, filter=_fakeroot)
|
|
||||||
package.close()
|
|
||||||
|
|
||||||
|
|
||||||
def cleanup_files(dirpath, extension):
|
|
||||||
for f in os.listdir(dirpath):
|
|
||||||
filepath = os.path.join(dirpath, f)
|
|
||||||
if os.path.isfile(filepath) and f.endswith(extension):
|
|
||||||
os.remove(filepath)
|
|
||||||
|
|
||||||
|
|
||||||
def pack_mac(builder):
|
|
||||||
info = buildbot_utils.VersionInfo(builder)
|
|
||||||
|
|
||||||
os.chdir(builder.build_dir)
|
|
||||||
cleanup_files(builder.build_dir, '.dmg')
|
|
||||||
|
|
||||||
package_name = get_package_name(builder, 'macOS')
|
|
||||||
package_filename = package_name + '.dmg'
|
|
||||||
package_filepath = os.path.join(builder.build_dir, package_filename)
|
|
||||||
|
|
||||||
release_dir = os.path.join(builder.blender_dir, 'release', 'darwin')
|
|
||||||
buildbot_dir = os.path.join(builder.blender_dir, 'build_files', 'buildbot')
|
|
||||||
bundle_script = os.path.join(buildbot_dir, 'worker_bundle_dmg.py')
|
|
||||||
|
|
||||||
command = [bundle_script]
|
|
||||||
command += ['--dmg', package_filepath]
|
|
||||||
if info.is_development_build:
|
|
||||||
background_image = os.path.join(release_dir, 'buildbot', 'background.tif')
|
|
||||||
command += ['--background-image', background_image]
|
|
||||||
if builder.codesign:
|
|
||||||
command += ['--codesign']
|
|
||||||
command += [builder.install_dir]
|
|
||||||
buildbot_utils.call(command)
|
|
||||||
|
|
||||||
create_buildbot_upload_zip(builder, [(package_filepath, package_filename)])
|
|
||||||
|
|
||||||
|
|
||||||
def pack_win(builder):
|
|
||||||
info = buildbot_utils.VersionInfo(builder)
|
|
||||||
|
|
||||||
os.chdir(builder.build_dir)
|
|
||||||
cleanup_files(builder.build_dir, '.zip')
|
|
||||||
|
|
||||||
# CPack will add the platform name
|
|
||||||
cpack_name = get_package_name(builder, None)
|
|
||||||
package_name = get_package_name(builder, 'windows' + str(builder.bits))
|
|
||||||
|
|
||||||
command = ['cmake', '-DCPACK_OVERRIDE_PACKAGENAME:STRING=' + cpack_name, '.']
|
|
||||||
buildbot_utils.call(builder.command_prefix + command)
|
|
||||||
command = ['cpack', '-G', 'ZIP']
|
|
||||||
buildbot_utils.call(builder.command_prefix + command)
|
|
||||||
|
|
||||||
package_filename = package_name + '.zip'
|
|
||||||
package_filepath = os.path.join(builder.build_dir, package_filename)
|
|
||||||
package_files = [(package_filepath, package_filename)]
|
|
||||||
|
|
||||||
if info.version_cycle == 'release':
|
|
||||||
# Installer only for final release builds, otherwise will get
|
|
||||||
# 'this product is already installed' messages.
|
|
||||||
command = ['cpack', '-G', 'WIX']
|
|
||||||
buildbot_utils.call(builder.command_prefix + command)
|
|
||||||
|
|
||||||
package_filename = package_name + '.msi'
|
|
||||||
package_filepath = os.path.join(builder.build_dir, package_filename)
|
|
||||||
if builder.codesign:
|
|
||||||
sign_file_or_directory(package_filepath)
|
|
||||||
|
|
||||||
package_files += [(package_filepath, package_filename)]
|
|
||||||
|
|
||||||
create_buildbot_upload_zip(builder, package_files)
|
|
||||||
|
|
||||||
|
|
||||||
def pack_linux(builder):
|
|
||||||
blender_executable = os.path.join(builder.install_dir, 'blender')
|
|
||||||
|
|
||||||
info = buildbot_utils.VersionInfo(builder)
|
|
||||||
|
|
||||||
# Strip all unused symbols from the binaries
|
|
||||||
print("Stripping binaries...")
|
|
||||||
buildbot_utils.call(builder.command_prefix + ['strip', '--strip-all', blender_executable])
|
|
||||||
|
|
||||||
print("Stripping python...")
|
|
||||||
py_target = os.path.join(builder.install_dir, info.short_version)
|
|
||||||
buildbot_utils.call(
|
|
||||||
builder.command_prefix + [
|
|
||||||
'find', py_target, '-iname', '*.so', '-exec', 'strip', '-s', '{}', ';',
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
# Construct package name
|
|
||||||
platform_name = 'linux64'
|
|
||||||
package_name = get_package_name(builder, platform_name)
|
|
||||||
package_filename = package_name + ".tar.xz"
|
|
||||||
|
|
||||||
print("Creating .tar.xz archive")
|
|
||||||
package_filepath = builder.install_dir + '.tar.xz'
|
|
||||||
create_tar_xz(builder.install_dir, package_filepath, package_name)
|
|
||||||
|
|
||||||
# Create buildbot_upload.zip
|
|
||||||
create_buildbot_upload_zip(builder, [(package_filepath, package_filename)])
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
builder = buildbot_utils.create_builder_from_arguments()
|
|
||||||
|
|
||||||
# Make sure install directory always exists
|
|
||||||
os.makedirs(builder.install_dir, exist_ok=True)
|
|
||||||
|
|
||||||
if builder.platform == 'mac':
|
|
||||||
pack_mac(builder)
|
|
||||||
elif builder.platform == 'win':
|
|
||||||
pack_win(builder)
|
|
||||||
elif builder.platform == 'linux':
|
|
||||||
pack_linux(builder)
|
|
@@ -1,42 +0,0 @@
|
|||||||
# ##### BEGIN GPL LICENSE BLOCK #####
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or
|
|
||||||
# modify it under the terms of the GNU General Public License
|
|
||||||
# as published by the Free Software Foundation; either version 2
|
|
||||||
# of the License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
|
||||||
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
#
|
|
||||||
# ##### END GPL LICENSE BLOCK #####
|
|
||||||
|
|
||||||
# <pep8 compliant>
|
|
||||||
|
|
||||||
import buildbot_utils
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
|
|
||||||
|
|
||||||
def get_ctest_arguments(builder):
|
|
||||||
args = ['--output-on-failure']
|
|
||||||
if builder.platform == 'win':
|
|
||||||
args += ['-C', 'Release']
|
|
||||||
return args
|
|
||||||
|
|
||||||
|
|
||||||
def test(builder):
|
|
||||||
os.chdir(builder.build_dir)
|
|
||||||
|
|
||||||
command = builder.command_prefix + ['ctest'] + get_ctest_arguments(builder)
|
|
||||||
buildbot_utils.call(command)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
builder = buildbot_utils.create_builder_from_arguments()
|
|
||||||
test(builder)
|
|
@@ -1,31 +0,0 @@
|
|||||||
# ##### BEGIN GPL LICENSE BLOCK #####
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or
|
|
||||||
# modify it under the terms of the GNU General Public License
|
|
||||||
# as published by the Free Software Foundation; either version 2
|
|
||||||
# of the License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
|
||||||
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
#
|
|
||||||
# ##### END GPL LICENSE BLOCK #####
|
|
||||||
|
|
||||||
# <pep8 compliant>
|
|
||||||
|
|
||||||
import buildbot_utils
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
builder = buildbot_utils.create_builder_from_arguments()
|
|
||||||
os.chdir(builder.blender_dir)
|
|
||||||
|
|
||||||
# Run make update which handles all libraries and submodules.
|
|
||||||
make_update = os.path.join(builder.blender_dir, "build_files", "utils", "make_update.py")
|
|
||||||
buildbot_utils.call([sys.executable, make_update, '--no-blender', "--use-tests", "--use-centos-libraries"])
|
|
@@ -20,8 +20,24 @@ if(NOT CLANG_ROOT_DIR AND NOT $ENV{CLANG_ROOT_DIR} STREQUAL "")
|
|||||||
set(CLANG_ROOT_DIR $ENV{CLANG_ROOT_DIR})
|
set(CLANG_ROOT_DIR $ENV{CLANG_ROOT_DIR})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(NOT LLVM_ROOT_DIR)
|
||||||
|
if(DEFINED LLVM_VERSION)
|
||||||
|
message(running llvm-config-${LLVM_VERSION})
|
||||||
|
find_program(LLVM_CONFIG llvm-config-${LLVM_VERSION})
|
||||||
|
endif()
|
||||||
|
if(NOT LLVM_CONFIG)
|
||||||
|
find_program(LLVM_CONFIG llvm-config)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
execute_process(COMMAND ${LLVM_CONFIG} --prefix
|
||||||
|
OUTPUT_VARIABLE LLVM_ROOT_DIR
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
set(LLVM_ROOT_DIR ${LLVM_ROOT_DIR} CACHE PATH "Path to the LLVM installation")
|
||||||
|
endif()
|
||||||
|
|
||||||
set(_CLANG_SEARCH_DIRS
|
set(_CLANG_SEARCH_DIRS
|
||||||
${CLANG_ROOT_DIR}
|
${CLANG_ROOT_DIR}
|
||||||
|
${LLVM_ROOT_DIR}
|
||||||
/opt/lib/clang
|
/opt/lib/clang
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@@ -34,7 +34,7 @@ FIND_PATH(EMBREE_INCLUDE_DIR
|
|||||||
include
|
include
|
||||||
)
|
)
|
||||||
|
|
||||||
IF(NOT (APPLE AND ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64")))
|
IF(NOT (("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "aarch64") OR (APPLE AND ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64"))))
|
||||||
SET(_embree_SIMD_COMPONENTS
|
SET(_embree_SIMD_COMPONENTS
|
||||||
embree_sse42
|
embree_sse42
|
||||||
embree_avx
|
embree_avx
|
||||||
|
@@ -472,8 +472,7 @@ if(NOT GFLAGS_FOUND)
|
|||||||
gflags_report_not_found(
|
gflags_report_not_found(
|
||||||
"Could not find gflags include directory, set GFLAGS_INCLUDE_DIR "
|
"Could not find gflags include directory, set GFLAGS_INCLUDE_DIR "
|
||||||
"to directory containing gflags/gflags.h")
|
"to directory containing gflags/gflags.h")
|
||||||
endif(NOT GFLAGS_INCLUDE_DIR OR
|
endif()
|
||||||
NOT EXISTS ${GFLAGS_INCLUDE_DIR})
|
|
||||||
|
|
||||||
find_library(GFLAGS_LIBRARY NAMES gflags
|
find_library(GFLAGS_LIBRARY NAMES gflags
|
||||||
PATHS ${GFLAGS_LIBRARY_DIR_HINTS}
|
PATHS ${GFLAGS_LIBRARY_DIR_HINTS}
|
||||||
@@ -484,8 +483,7 @@ if(NOT GFLAGS_FOUND)
|
|||||||
gflags_report_not_found(
|
gflags_report_not_found(
|
||||||
"Could not find gflags library, set GFLAGS_LIBRARY "
|
"Could not find gflags library, set GFLAGS_LIBRARY "
|
||||||
"to full path to libgflags.")
|
"to full path to libgflags.")
|
||||||
endif(NOT GFLAGS_LIBRARY OR
|
endif()
|
||||||
NOT EXISTS ${GFLAGS_LIBRARY})
|
|
||||||
|
|
||||||
# gflags typically requires a threading library (which is OS dependent), note
|
# gflags typically requires a threading library (which is OS dependent), note
|
||||||
# that this defines the CMAKE_THREAD_LIBS_INIT variable. If we are able to
|
# that this defines the CMAKE_THREAD_LIBS_INIT variable. If we are able to
|
||||||
@@ -560,8 +558,7 @@ if(NOT GFLAGS_FOUND)
|
|||||||
gflags_report_not_found(
|
gflags_report_not_found(
|
||||||
"Caller defined GFLAGS_INCLUDE_DIR:"
|
"Caller defined GFLAGS_INCLUDE_DIR:"
|
||||||
" ${GFLAGS_INCLUDE_DIR} does not contain gflags/gflags.h header.")
|
" ${GFLAGS_INCLUDE_DIR} does not contain gflags/gflags.h header.")
|
||||||
endif(GFLAGS_INCLUDE_DIR AND
|
endif()
|
||||||
NOT EXISTS ${GFLAGS_INCLUDE_DIR}/gflags/gflags.h)
|
|
||||||
# TODO: This regex for gflags library is pretty primitive, we use lowercase
|
# TODO: This regex for gflags library is pretty primitive, we use lowercase
|
||||||
# for comparison to handle Windows using CamelCase library names, could
|
# for comparison to handle Windows using CamelCase library names, could
|
||||||
# this check be better?
|
# this check be better?
|
||||||
@@ -571,8 +568,7 @@ if(NOT GFLAGS_FOUND)
|
|||||||
gflags_report_not_found(
|
gflags_report_not_found(
|
||||||
"Caller defined GFLAGS_LIBRARY: "
|
"Caller defined GFLAGS_LIBRARY: "
|
||||||
"${GFLAGS_LIBRARY} does not match gflags.")
|
"${GFLAGS_LIBRARY} does not match gflags.")
|
||||||
endif(GFLAGS_LIBRARY AND
|
endif()
|
||||||
NOT "${LOWERCASE_GFLAGS_LIBRARY}" MATCHES ".*gflags[^/]*")
|
|
||||||
|
|
||||||
gflags_reset_find_library_prefix()
|
gflags_reset_find_library_prefix()
|
||||||
|
|
||||||
|
@@ -40,7 +40,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(NanoVDB DEFAULT_MSG
|
|||||||
|
|
||||||
IF(NANOVDB_FOUND)
|
IF(NANOVDB_FOUND)
|
||||||
SET(NANOVDB_INCLUDE_DIRS ${NANOVDB_INCLUDE_DIR})
|
SET(NANOVDB_INCLUDE_DIRS ${NANOVDB_INCLUDE_DIR})
|
||||||
ENDIF(NANOVDB_FOUND)
|
ENDIF()
|
||||||
|
|
||||||
MARK_AS_ADVANCED(
|
MARK_AS_ADVANCED(
|
||||||
NANOVDB_INCLUDE_DIR
|
NANOVDB_INCLUDE_DIR
|
||||||
|
@@ -46,7 +46,7 @@ SET(_opencollada_FIND_COMPONENTS
|
|||||||
)
|
)
|
||||||
|
|
||||||
# Fedora openCOLLADA package links these statically
|
# Fedora openCOLLADA package links these statically
|
||||||
# note that order is important here ot it wont link
|
# note that order is important here or it won't link
|
||||||
SET(_opencollada_FIND_STATIC_COMPONENTS
|
SET(_opencollada_FIND_STATIC_COMPONENTS
|
||||||
buffer
|
buffer
|
||||||
ftoa
|
ftoa
|
||||||
|
@@ -44,7 +44,7 @@ SET(PYTHON_LINKFLAGS "-Xlinker -export-dynamic" CACHE STRING "Linker flags for p
|
|||||||
MARK_AS_ADVANCED(PYTHON_LINKFLAGS)
|
MARK_AS_ADVANCED(PYTHON_LINKFLAGS)
|
||||||
|
|
||||||
|
|
||||||
# if the user passes these defines as args, we dont want to overwrite
|
# if the user passes these defines as args, we don't want to overwrite
|
||||||
SET(_IS_INC_DEF OFF)
|
SET(_IS_INC_DEF OFF)
|
||||||
SET(_IS_INC_CONF_DEF OFF)
|
SET(_IS_INC_CONF_DEF OFF)
|
||||||
SET(_IS_LIB_DEF OFF)
|
SET(_IS_LIB_DEF OFF)
|
||||||
@@ -143,7 +143,7 @@ IF((NOT _IS_INC_DEF) OR (NOT _IS_INC_CONF_DEF) OR (NOT _IS_LIB_DEF) OR (NOT _IS_
|
|||||||
SET(_PYTHON_ABI_FLAGS "${_CURRENT_ABI_FLAGS}")
|
SET(_PYTHON_ABI_FLAGS "${_CURRENT_ABI_FLAGS}")
|
||||||
break()
|
break()
|
||||||
ELSE()
|
ELSE()
|
||||||
# ensure we dont find values from 2 different ABI versions
|
# ensure we don't find values from 2 different ABI versions
|
||||||
IF(NOT _IS_INC_DEF)
|
IF(NOT _IS_INC_DEF)
|
||||||
UNSET(PYTHON_INCLUDE_DIR CACHE)
|
UNSET(PYTHON_INCLUDE_DIR CACHE)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
@@ -40,7 +40,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(sse2neon DEFAULT_MSG
|
|||||||
|
|
||||||
IF(SSE2NEON_FOUND)
|
IF(SSE2NEON_FOUND)
|
||||||
SET(SSE2NEON_INCLUDE_DIRS ${SSE2NEON_INCLUDE_DIR})
|
SET(SSE2NEON_INCLUDE_DIRS ${SSE2NEON_INCLUDE_DIR})
|
||||||
ENDIF(SSE2NEON_FOUND)
|
ENDIF()
|
||||||
|
|
||||||
MARK_AS_ADVANCED(
|
MARK_AS_ADVANCED(
|
||||||
SSE2NEON_INCLUDE_DIR
|
SSE2NEON_INCLUDE_DIR
|
||||||
|
@@ -79,7 +79,7 @@ if(EXISTS ${SOURCE_DIR}/.git)
|
|||||||
ERROR_QUIET)
|
ERROR_QUIET)
|
||||||
if(NOT _git_below_check STREQUAL "")
|
if(NOT _git_below_check STREQUAL "")
|
||||||
# If there're commits between HEAD and upstream this means
|
# If there're commits between HEAD and upstream this means
|
||||||
# that we're reset-ed to older revision. Use it's hash then.
|
# that we're reset-ed to older revision. Use its hash then.
|
||||||
execute_process(COMMAND git rev-parse --short=12 HEAD
|
execute_process(COMMAND git rev-parse --short=12 HEAD
|
||||||
WORKING_DIRECTORY ${SOURCE_DIR}
|
WORKING_DIRECTORY ${SOURCE_DIR}
|
||||||
OUTPUT_VARIABLE MY_WC_HASH
|
OUTPUT_VARIABLE MY_WC_HASH
|
||||||
|
@@ -305,7 +305,7 @@ def file_check_arg_sizes(tu):
|
|||||||
for i, node_child in enumerate(children):
|
for i, node_child in enumerate(children):
|
||||||
children = list(node_child.get_children())
|
children = list(node_child.get_children())
|
||||||
|
|
||||||
# skip if we dont have an index...
|
# skip if we don't have an index...
|
||||||
size_def = args_size_definition.get(i, -1)
|
size_def = args_size_definition.get(i, -1)
|
||||||
|
|
||||||
if size_def == -1:
|
if size_def == -1:
|
||||||
@@ -354,7 +354,7 @@ def file_check_arg_sizes(tu):
|
|||||||
filepath # always the same but useful when running threaded
|
filepath # always the same but useful when running threaded
|
||||||
))
|
))
|
||||||
|
|
||||||
# we dont really care what we are looking at, just scan entire file for
|
# we don't really care what we are looking at, just scan entire file for
|
||||||
# function calls.
|
# function calls.
|
||||||
|
|
||||||
def recursive_func_call_check(node):
|
def recursive_func_call_check(node):
|
||||||
|
@@ -8,6 +8,9 @@ IGNORE_SOURCE = (
|
|||||||
# specific source files
|
# specific source files
|
||||||
"extern/audaspace/",
|
"extern/audaspace/",
|
||||||
|
|
||||||
|
# Use for `WIN32` only.
|
||||||
|
"source/creator/blender_launcher_win32.c",
|
||||||
|
|
||||||
# specific source files
|
# specific source files
|
||||||
"extern/bullet2/src/BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.cpp",
|
"extern/bullet2/src/BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.cpp",
|
||||||
"extern/bullet2/src/BulletCollision/CollisionDispatch/btConvex2dConvex2dAlgorithm.cpp",
|
"extern/bullet2/src/BulletCollision/CollisionDispatch/btConvex2dConvex2dAlgorithm.cpp",
|
||||||
|
@@ -29,6 +29,7 @@ set(WITH_IMAGE_OPENEXR ON CACHE BOOL "" FORCE)
|
|||||||
set(WITH_IMAGE_OPENJPEG ON CACHE BOOL "" FORCE)
|
set(WITH_IMAGE_OPENJPEG ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_IMAGE_TIFF ON CACHE BOOL "" FORCE)
|
set(WITH_IMAGE_TIFF ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_INPUT_NDOF ON CACHE BOOL "" FORCE)
|
set(WITH_INPUT_NDOF ON CACHE BOOL "" FORCE)
|
||||||
|
set(WITH_INPUT_IME ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_INTERNATIONAL ON CACHE BOOL "" FORCE)
|
set(WITH_INTERNATIONAL ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_LIBMV ON CACHE BOOL "" FORCE)
|
set(WITH_LIBMV ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_LIBMV_SCHUR_SPECIALIZATIONS ON CACHE BOOL "" FORCE)
|
set(WITH_LIBMV_SCHUR_SPECIALIZATIONS ON CACHE BOOL "" FORCE)
|
||||||
|
@@ -30,6 +30,7 @@ set(WITH_IMAGE_OPENEXR ON CACHE BOOL "" FORCE)
|
|||||||
set(WITH_IMAGE_OPENJPEG ON CACHE BOOL "" FORCE)
|
set(WITH_IMAGE_OPENJPEG ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_IMAGE_TIFF ON CACHE BOOL "" FORCE)
|
set(WITH_IMAGE_TIFF ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_INPUT_NDOF ON CACHE BOOL "" FORCE)
|
set(WITH_INPUT_NDOF ON CACHE BOOL "" FORCE)
|
||||||
|
set(WITH_INPUT_IME ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_INTERNATIONAL ON CACHE BOOL "" FORCE)
|
set(WITH_INTERNATIONAL ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_LIBMV ON CACHE BOOL "" FORCE)
|
set(WITH_LIBMV ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_LIBMV_SCHUR_SPECIALIZATIONS ON CACHE BOOL "" FORCE)
|
set(WITH_LIBMV_SCHUR_SPECIALIZATIONS ON CACHE BOOL "" FORCE)
|
||||||
|
@@ -596,14 +596,6 @@ function(SETUP_LIBDIRS)
|
|||||||
link_directories(${GMP_LIBPATH})
|
link_directories(${GMP_LIBPATH})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_GHOST_WAYLAND)
|
|
||||||
link_directories(
|
|
||||||
${wayland-client_LIBRARY_DIRS}
|
|
||||||
${wayland-egl_LIBRARY_DIRS}
|
|
||||||
${xkbcommon_LIBRARY_DIRS}
|
|
||||||
${wayland-cursor_LIBRARY_DIRS})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(WIN32 AND NOT UNIX)
|
if(WIN32 AND NOT UNIX)
|
||||||
link_directories(${PTHREADS_LIBPATH})
|
link_directories(${PTHREADS_LIBPATH})
|
||||||
endif()
|
endif()
|
||||||
@@ -702,7 +694,7 @@ macro(message_first_run)
|
|||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
# when we have warnings as errors applied globally this
|
# when we have warnings as errors applied globally this
|
||||||
# needs to be removed for some external libs which we dont maintain.
|
# needs to be removed for some external libs which we don't maintain.
|
||||||
|
|
||||||
# utility macro
|
# utility macro
|
||||||
macro(remove_cc_flag
|
macro(remove_cc_flag
|
||||||
@@ -802,7 +794,7 @@ macro(remove_extra_strict_flags)
|
|||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
# note, we can only append flags on a single file so we need to negate the options.
|
# note, we can only append flags on a single file so we need to negate the options.
|
||||||
# at the moment we cant shut up ffmpeg deprecations, so use this, but will
|
# at the moment we can't shut up ffmpeg deprecations, so use this, but will
|
||||||
# probably add more removals here.
|
# probably add more removals here.
|
||||||
macro(remove_strict_c_flags_file
|
macro(remove_strict_c_flags_file
|
||||||
filenames)
|
filenames)
|
||||||
@@ -923,10 +915,6 @@ function(get_blender_version)
|
|||||||
math(EXPR _out_version_major "${_out_version} / 100")
|
math(EXPR _out_version_major "${_out_version} / 100")
|
||||||
math(EXPR _out_version_minor "${_out_version} % 100")
|
math(EXPR _out_version_minor "${_out_version} % 100")
|
||||||
|
|
||||||
# Zero pad the minor version so `_out_version_minor` is always two characters.
|
|
||||||
# This is needed if the minor version is a single digit.
|
|
||||||
string(REGEX REPLACE "^([0-9])$" "0\\1" _out_version_minor "${_out_version_minor}")
|
|
||||||
|
|
||||||
# output vars
|
# output vars
|
||||||
set(BLENDER_VERSION "${_out_version_major}.${_out_version_minor}" PARENT_SCOPE)
|
set(BLENDER_VERSION "${_out_version_major}.${_out_version_minor}" PARENT_SCOPE)
|
||||||
set(BLENDER_VERSION_MAJOR "${_out_version_major}" PARENT_SCOPE)
|
set(BLENDER_VERSION_MAJOR "${_out_version_major}" PARENT_SCOPE)
|
||||||
@@ -975,14 +963,6 @@ macro(blender_project_hack_post)
|
|||||||
unset(_reset_standard_cflags_rel)
|
unset(_reset_standard_cflags_rel)
|
||||||
unset(_reset_standard_cxxflags_rel)
|
unset(_reset_standard_cxxflags_rel)
|
||||||
|
|
||||||
# ------------------------------------------------------------------
|
|
||||||
# workaround for omission in cmake 2.8.4's GNU.cmake, fixed in 2.8.5
|
|
||||||
if(CMAKE_COMPILER_IS_GNUCC)
|
|
||||||
if(NOT DARWIN)
|
|
||||||
set(CMAKE_INCLUDE_SYSTEM_FLAG_C "-isystem ")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
# pair of macros to allow libraries to be specify files to install, but to
|
# pair of macros to allow libraries to be specify files to install, but to
|
||||||
|
@@ -46,7 +46,7 @@ if(MSVC)
|
|||||||
else()
|
else()
|
||||||
set(PACKAGE_ARCH windows32)
|
set(PACKAGE_ARCH windows32)
|
||||||
endif()
|
endif()
|
||||||
else()
|
else(MSVC)
|
||||||
set(PACKAGE_ARCH ${CMAKE_SYSTEM_PROCESSOR})
|
set(PACKAGE_ARCH ${CMAKE_SYSTEM_PROCESSOR})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -104,8 +104,8 @@ if(WIN32)
|
|||||||
set(CPACK_WIX_LIGHT_EXTRA_FLAGS -dcl:medium)
|
set(CPACK_WIX_LIGHT_EXTRA_FLAGS -dcl:medium)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(CPACK_PACKAGE_EXECUTABLES "blender" "blender")
|
set(CPACK_PACKAGE_EXECUTABLES "blender-launcher" "blender")
|
||||||
set(CPACK_CREATE_DESKTOP_LINKS "blender" "blender")
|
set(CPACK_CREATE_DESKTOP_LINKS "blender-launcher" "blender")
|
||||||
|
|
||||||
include(CPack)
|
include(CPack)
|
||||||
|
|
||||||
|
@@ -388,6 +388,10 @@ endif()
|
|||||||
|
|
||||||
if(WITH_TBB)
|
if(WITH_TBB)
|
||||||
find_package(TBB)
|
find_package(TBB)
|
||||||
|
if(NOT TBB_FOUND)
|
||||||
|
message(WARNING "TBB not found, disabling WITH_TBB")
|
||||||
|
set(WITH_TBB OFF)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_POTRACE)
|
if(WITH_POTRACE)
|
||||||
|
@@ -457,6 +457,10 @@ endif()
|
|||||||
|
|
||||||
if(WITH_TBB)
|
if(WITH_TBB)
|
||||||
find_package_wrapper(TBB)
|
find_package_wrapper(TBB)
|
||||||
|
if(NOT TBB_FOUND)
|
||||||
|
message(WARNING "TBB not found, disabling WITH_TBB")
|
||||||
|
set(WITH_TBB OFF)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_XR_OPENXR)
|
if(WITH_XR_OPENXR)
|
||||||
@@ -575,18 +579,18 @@ if(WITH_GHOST_WAYLAND)
|
|||||||
pkg_check_modules(wayland-scanner REQUIRED wayland-scanner)
|
pkg_check_modules(wayland-scanner REQUIRED wayland-scanner)
|
||||||
pkg_check_modules(xkbcommon REQUIRED xkbcommon)
|
pkg_check_modules(xkbcommon REQUIRED xkbcommon)
|
||||||
pkg_check_modules(wayland-cursor REQUIRED wayland-cursor)
|
pkg_check_modules(wayland-cursor REQUIRED wayland-cursor)
|
||||||
|
pkg_check_modules(dbus REQUIRED dbus-1)
|
||||||
|
|
||||||
set(WITH_GL_EGL ON)
|
set(WITH_GL_EGL ON)
|
||||||
|
|
||||||
if(WITH_GHOST_WAYLAND)
|
|
||||||
list(APPEND PLATFORM_LINKLIBS
|
list(APPEND PLATFORM_LINKLIBS
|
||||||
${wayland-client_LIBRARIES}
|
${wayland-client_LINK_LIBRARIES}
|
||||||
${wayland-egl_LIBRARIES}
|
${wayland-egl_LINK_LIBRARIES}
|
||||||
${xkbcommon_LIBRARIES}
|
${xkbcommon_LINK_LIBRARIES}
|
||||||
${wayland-cursor_LIBRARIES}
|
${wayland-cursor_LINK_LIBRARIES}
|
||||||
|
${dbus_LINK_LIBRARIES}
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
|
||||||
|
|
||||||
if(WITH_GHOST_X11)
|
if(WITH_GHOST_X11)
|
||||||
find_package(X11 REQUIRED)
|
find_package(X11 REQUIRED)
|
||||||
|
@@ -119,7 +119,7 @@ string(APPEND CMAKE_MODULE_LINKER_FLAGS " /SAFESEH:NO /ignore:4099")
|
|||||||
list(APPEND PLATFORM_LINKLIBS
|
list(APPEND PLATFORM_LINKLIBS
|
||||||
ws2_32 vfw32 winmm kernel32 user32 gdi32 comdlg32 Comctl32 version
|
ws2_32 vfw32 winmm kernel32 user32 gdi32 comdlg32 Comctl32 version
|
||||||
advapi32 shfolder shell32 ole32 oleaut32 uuid psapi Dbghelp Shlwapi
|
advapi32 shfolder shell32 ole32 oleaut32 uuid psapi Dbghelp Shlwapi
|
||||||
pathcch
|
pathcch Shcore
|
||||||
)
|
)
|
||||||
|
|
||||||
if(WITH_INPUT_IME)
|
if(WITH_INPUT_IME)
|
||||||
@@ -144,8 +144,8 @@ add_definitions(-D_ALLOW_KEYWORD_MACROS)
|
|||||||
# that both /GR and /GR- are specified.
|
# that both /GR and /GR- are specified.
|
||||||
remove_cc_flag("/GR")
|
remove_cc_flag("/GR")
|
||||||
|
|
||||||
# We want to support Windows 7 level ABI
|
# Make the Windows 8.1 API available for use.
|
||||||
add_definitions(-D_WIN32_WINNT=0x601)
|
add_definitions(-D_WIN32_WINNT=0x603)
|
||||||
include(build_files/cmake/platform/platform_win32_bundle_crt.cmake)
|
include(build_files/cmake/platform/platform_win32_bundle_crt.cmake)
|
||||||
remove_cc_flag("/MDd" "/MD" "/Zi")
|
remove_cc_flag("/MDd" "/MD" "/Zi")
|
||||||
|
|
||||||
@@ -261,8 +261,10 @@ if(NOT DEFINED LIBDIR)
|
|||||||
else()
|
else()
|
||||||
message(FATAL_ERROR "32 bit compiler detected, blender no longer provides pre-build libraries for 32 bit windows, please set the LIBDIR cmake variable to your own library folder")
|
message(FATAL_ERROR "32 bit compiler detected, blender no longer provides pre-build libraries for 32 bit windows, please set the LIBDIR cmake variable to your own library folder")
|
||||||
endif()
|
endif()
|
||||||
# Can be 1910..1912
|
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.29.30130)
|
||||||
if(MSVC_VERSION GREATER 1919)
|
message(STATUS "Visual Studio 2022 detected.")
|
||||||
|
set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/${LIBDIR_BASE}_vc15)
|
||||||
|
elseif(MSVC_VERSION GREATER 1919)
|
||||||
message(STATUS "Visual Studio 2019 detected.")
|
message(STATUS "Visual Studio 2019 detected.")
|
||||||
set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/${LIBDIR_BASE}_vc15)
|
set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/${LIBDIR_BASE}_vc15)
|
||||||
elseif(MSVC_VERSION GREATER 1909)
|
elseif(MSVC_VERSION GREATER 1909)
|
||||||
@@ -375,6 +377,7 @@ if(WITH_OPENCOLLADA)
|
|||||||
optimized ${OPENCOLLADA}/lib/opencollada/OpenCOLLADAStreamWriter.lib
|
optimized ${OPENCOLLADA}/lib/opencollada/OpenCOLLADAStreamWriter.lib
|
||||||
optimized ${OPENCOLLADA}/lib/opencollada/MathMLSolver.lib
|
optimized ${OPENCOLLADA}/lib/opencollada/MathMLSolver.lib
|
||||||
optimized ${OPENCOLLADA}/lib/opencollada/GeneratedSaxParser.lib
|
optimized ${OPENCOLLADA}/lib/opencollada/GeneratedSaxParser.lib
|
||||||
|
optimized ${OPENCOLLADA}/lib/opencollada/xml.lib
|
||||||
optimized ${OPENCOLLADA}/lib/opencollada/buffer.lib
|
optimized ${OPENCOLLADA}/lib/opencollada/buffer.lib
|
||||||
optimized ${OPENCOLLADA}/lib/opencollada/ftoa.lib
|
optimized ${OPENCOLLADA}/lib/opencollada/ftoa.lib
|
||||||
|
|
||||||
@@ -384,14 +387,10 @@ if(WITH_OPENCOLLADA)
|
|||||||
debug ${OPENCOLLADA}/lib/opencollada/OpenCOLLADAStreamWriter_d.lib
|
debug ${OPENCOLLADA}/lib/opencollada/OpenCOLLADAStreamWriter_d.lib
|
||||||
debug ${OPENCOLLADA}/lib/opencollada/MathMLSolver_d.lib
|
debug ${OPENCOLLADA}/lib/opencollada/MathMLSolver_d.lib
|
||||||
debug ${OPENCOLLADA}/lib/opencollada/GeneratedSaxParser_d.lib
|
debug ${OPENCOLLADA}/lib/opencollada/GeneratedSaxParser_d.lib
|
||||||
|
debug ${OPENCOLLADA}/lib/opencollada/xml_d.lib
|
||||||
debug ${OPENCOLLADA}/lib/opencollada/buffer_d.lib
|
debug ${OPENCOLLADA}/lib/opencollada/buffer_d.lib
|
||||||
debug ${OPENCOLLADA}/lib/opencollada/ftoa_d.lib
|
debug ${OPENCOLLADA}/lib/opencollada/ftoa_d.lib
|
||||||
)
|
)
|
||||||
if(EXISTS ${LIBDIR}/xml2/lib/libxml2s.lib) # 3.4 libraries
|
|
||||||
list(APPEND OPENCOLLADA_LIBRARIES ${LIBDIR}/xml2/lib/libxml2s.lib)
|
|
||||||
else()
|
|
||||||
list(APPEND OPENCOLLADA_LIBRARIES ${OPENCOLLADA}/lib/opencollada/xml.lib)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
list(APPEND OPENCOLLADA_LIBRARIES ${OPENCOLLADA}/lib/opencollada/UTF.lib)
|
list(APPEND OPENCOLLADA_LIBRARIES ${OPENCOLLADA}/lib/opencollada/UTF.lib)
|
||||||
|
|
||||||
@@ -551,7 +550,6 @@ if(WITH_OPENIMAGEIO)
|
|||||||
set(OPENIMAGEIO_LIBRARIES ${OIIO_OPTIMIZED} ${OIIO_DEBUG})
|
set(OPENIMAGEIO_LIBRARIES ${OIIO_OPTIMIZED} ${OIIO_DEBUG})
|
||||||
|
|
||||||
set(OPENIMAGEIO_DEFINITIONS "-DUSE_TBB=0")
|
set(OPENIMAGEIO_DEFINITIONS "-DUSE_TBB=0")
|
||||||
set(OPENCOLORIO_DEFINITIONS "-DDOpenColorIO_SKIP_IMPORTS")
|
|
||||||
set(OPENIMAGEIO_IDIFF "${OPENIMAGEIO}/bin/idiff.exe")
|
set(OPENIMAGEIO_IDIFF "${OPENIMAGEIO}/bin/idiff.exe")
|
||||||
add_definitions(-DOIIO_STATIC_DEFINE)
|
add_definitions(-DOIIO_STATIC_DEFINE)
|
||||||
add_definitions(-DOIIO_NO_SSE=1)
|
add_definitions(-DOIIO_NO_SSE=1)
|
||||||
@@ -597,7 +595,7 @@ if(WITH_OPENCOLORIO)
|
|||||||
debug ${OPENCOLORIO_LIBPATH}/libexpatdMD.lib
|
debug ${OPENCOLORIO_LIBPATH}/libexpatdMD.lib
|
||||||
debug ${OPENCOLORIO_LIBPATH}/pystring_d.lib
|
debug ${OPENCOLORIO_LIBPATH}/pystring_d.lib
|
||||||
)
|
)
|
||||||
set(OPENCOLORIO_DEFINITIONS)
|
set(OPENCOLORIO_DEFINITIONS "-DOpenColorIO_SKIP_IMPORTS")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_OPENVDB)
|
if(WITH_OPENVDB)
|
||||||
@@ -638,15 +636,7 @@ endif()
|
|||||||
|
|
||||||
if(WITH_IMAGE_OPENJPEG)
|
if(WITH_IMAGE_OPENJPEG)
|
||||||
set(OPENJPEG ${LIBDIR}/openjpeg)
|
set(OPENJPEG ${LIBDIR}/openjpeg)
|
||||||
set(OPENJPEG_INCLUDE_DIRS ${OPENJPEG}/include/openjpeg-2.5)
|
|
||||||
if(NOT EXISTS "${OPENJPEG_INCLUDE_DIRS}")
|
|
||||||
# when not found, could be an older lib folder with openjpeg 2.4
|
|
||||||
# to ease the transition period, fall back if 2.5 is not found.
|
|
||||||
set(OPENJPEG_INCLUDE_DIRS ${OPENJPEG}/include/openjpeg-2.4)
|
|
||||||
if(NOT EXISTS "${OPENJPEG_INCLUDE_DIRS}")
|
|
||||||
set(OPENJPEG_INCLUDE_DIRS ${OPENJPEG}/include/openjpeg-2.3)
|
set(OPENJPEG_INCLUDE_DIRS ${OPENJPEG}/include/openjpeg-2.3)
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
set(OPENJPEG_LIBRARIES ${OPENJPEG}/lib/openjp2.lib)
|
set(OPENJPEG_LIBRARIES ${OPENJPEG}/lib/openjp2.lib)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -686,10 +676,11 @@ if(WITH_SYSTEM_AUDASPACE)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_TBB)
|
if(WITH_TBB)
|
||||||
set(TBB_LIBRARIES optimized ${LIBDIR}/tbb/lib/tbb.lib debug ${LIBDIR}/tbb/lib/debug/tbb_debug.lib)
|
set(TBB_LIBRARIES optimized ${LIBDIR}/tbb/lib/tbb.lib debug ${LIBDIR}/tbb/lib/tbb_debug.lib)
|
||||||
set(TBB_INCLUDE_DIR ${LIBDIR}/tbb/include)
|
set(TBB_INCLUDE_DIR ${LIBDIR}/tbb/include)
|
||||||
set(TBB_INCLUDE_DIRS ${TBB_INCLUDE_DIR})
|
set(TBB_INCLUDE_DIRS ${TBB_INCLUDE_DIR})
|
||||||
if(WITH_TBB_MALLOC_PROXY)
|
if(WITH_TBB_MALLOC_PROXY)
|
||||||
|
set(TBB_MALLOC_LIBRARIES optimized ${LIBDIR}/tbb/lib/tbbmalloc.lib debug ${LIBDIR}/tbb/lib/tbbmalloc_debug.lib)
|
||||||
add_definitions(-DWITH_TBB_MALLOC)
|
add_definitions(-DWITH_TBB_MALLOC)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
8
build_files/config/README.md
Normal file
8
build_files/config/README.md
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
Pipeline Config
|
||||||
|
===============
|
||||||
|
|
||||||
|
This configuration file is used by buildbot new pipeline for the `update-code` step.
|
||||||
|
|
||||||
|
It will soon be used by the ../utils/make_update.py script.
|
||||||
|
|
||||||
|
Both buildbot and developers will eventually use the same configuration file.
|
87
build_files/config/pipeline_config.json
Normal file
87
build_files/config/pipeline_config.json
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
{
|
||||||
|
"update-code":
|
||||||
|
{
|
||||||
|
"git" :
|
||||||
|
{
|
||||||
|
"submodules":
|
||||||
|
[
|
||||||
|
{ "path": "release/scripts/addons", "branch": "master", "commit_id": "HEAD" },
|
||||||
|
{ "path": "release/scripts/addons_contrib", "branch": "master", "commit_id": "HEAD" },
|
||||||
|
{ "path": "release/datafiles/locale", "branch": "master", "commit_id": "HEAD" },
|
||||||
|
{ "path": "source/tools", "branch": "master", "commit_id": "HEAD" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"svn":
|
||||||
|
{
|
||||||
|
"tests": { "path": "lib/tests", "branch": "trunk", "commit_id": "HEAD" },
|
||||||
|
"libraries":
|
||||||
|
{
|
||||||
|
"darwin-x86_64": { "path": "lib/darwin", "branch": "trunk", "commit_id": "HEAD" },
|
||||||
|
"darwin-arm64": { "path": "lib/darwin_arm64", "branch": "trunk", "commit_id": "HEAD" },
|
||||||
|
"linux-x86_64": { "path": "lib/linux_centos7_x86_64", "branch": "trunk", "commit_id": "HEAD" },
|
||||||
|
"windows-amd64": { "path": "lib/win64_vc15", "branch": "trunk", "commit_id": "HEAD" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"buildbot":
|
||||||
|
{
|
||||||
|
"gcc":
|
||||||
|
{
|
||||||
|
"version": "9.0"
|
||||||
|
},
|
||||||
|
"sdks":
|
||||||
|
{
|
||||||
|
"optix":
|
||||||
|
{
|
||||||
|
"version": "7.1.0"
|
||||||
|
},
|
||||||
|
"cuda10":
|
||||||
|
{
|
||||||
|
"version": "10.1"
|
||||||
|
},
|
||||||
|
"cuda11":
|
||||||
|
{
|
||||||
|
"version": "11.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"cmake":
|
||||||
|
{
|
||||||
|
"default":
|
||||||
|
{
|
||||||
|
"version": "any",
|
||||||
|
"overrides":
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"darwin-x86_64":
|
||||||
|
{
|
||||||
|
"overrides":
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"darwin-arm64":
|
||||||
|
{
|
||||||
|
"overrides":
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"linux-x86_64":
|
||||||
|
{
|
||||||
|
"overrides":
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"windows-amd64":
|
||||||
|
{
|
||||||
|
"overrides":
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -1,69 +0,0 @@
|
|||||||
#
|
|
||||||
# Do NOT merge to master
|
|
||||||
#
|
|
||||||
|
|
||||||
#
|
|
||||||
# Used by Buildbot build pipeline make_update.py script only for now
|
|
||||||
# We intended to udpate the make_update.py in the branches to use this file eventually
|
|
||||||
#
|
|
||||||
update-code:
|
|
||||||
git:
|
|
||||||
submodules:
|
|
||||||
- branch: blender-v2.93-release
|
|
||||||
commit_id: HEAD
|
|
||||||
path: release/scripts/addons
|
|
||||||
- branch: blender-v2.93-release
|
|
||||||
commit_id: HEAD
|
|
||||||
path: release/scripts/addons_contrib
|
|
||||||
- branch: blender-v2.93-release
|
|
||||||
commit_id: HEAD
|
|
||||||
path: release/datafiles/locale
|
|
||||||
- branch: blender-v2.93-release
|
|
||||||
commit_id: HEAD
|
|
||||||
path: source/tools
|
|
||||||
svn:
|
|
||||||
libraries:
|
|
||||||
darwin-arm64:
|
|
||||||
branch: tags/blender-2.93-release
|
|
||||||
commit_id: HEAD
|
|
||||||
path: lib/darwin_arm64
|
|
||||||
darwin-x86_64:
|
|
||||||
branch: tags/blender-2.93-release
|
|
||||||
commit_id: HEAD
|
|
||||||
path: lib/darwin
|
|
||||||
linux-x86_64:
|
|
||||||
branch: tags/blender-2.93-release
|
|
||||||
commit_id: HEAD
|
|
||||||
path: lib/linux_centos7_x86_64
|
|
||||||
windows-amd64:
|
|
||||||
branch: tags/blender-2.93-release
|
|
||||||
commit_id: HEAD
|
|
||||||
path: lib/win64_vc15
|
|
||||||
tests:
|
|
||||||
branch: tags/blender-2.93-release
|
|
||||||
commit_id: HEAD
|
|
||||||
path: lib/tests
|
|
||||||
#
|
|
||||||
# Buildbot only configs
|
|
||||||
#
|
|
||||||
buildbot:
|
|
||||||
gcc:
|
|
||||||
version: '9.0.0'
|
|
||||||
cuda10:
|
|
||||||
version: '10.1.243'
|
|
||||||
cuda11:
|
|
||||||
version: '11.4.1'
|
|
||||||
optix:
|
|
||||||
version: '7.1.0'
|
|
||||||
cmake:
|
|
||||||
default:
|
|
||||||
overrides: {}
|
|
||||||
version: any
|
|
||||||
darwin-arm64:
|
|
||||||
overrides: {}
|
|
||||||
darwin-x86_64:
|
|
||||||
overrides: {}
|
|
||||||
linux-x86_64:
|
|
||||||
overrides: {}
|
|
||||||
windows-amd64:
|
|
||||||
overrides: {}
|
|
5
build_files/utils/README.md
Normal file
5
build_files/utils/README.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
Make Utility Scripts
|
||||||
|
====================
|
||||||
|
|
||||||
|
Scripts used only by developers for now
|
||||||
|
|
@@ -1,9 +1,12 @@
|
|||||||
echo No explicit msvc version requested, autodetecting version.
|
echo No explicit msvc version requested, autodetecting version.
|
||||||
|
|
||||||
|
call "%~dp0\detect_msvc2019.cmd"
|
||||||
|
if %ERRORLEVEL% EQU 0 goto DetectionComplete
|
||||||
|
|
||||||
call "%~dp0\detect_msvc2017.cmd"
|
call "%~dp0\detect_msvc2017.cmd"
|
||||||
if %ERRORLEVEL% EQU 0 goto DetectionComplete
|
if %ERRORLEVEL% EQU 0 goto DetectionComplete
|
||||||
|
|
||||||
call "%~dp0\detect_msvc2019.cmd"
|
call "%~dp0\detect_msvc2022.cmd"
|
||||||
if %ERRORLEVEL% EQU 0 goto DetectionComplete
|
if %ERRORLEVEL% EQU 0 goto DetectionComplete
|
||||||
|
|
||||||
echo Compiler Detection failed. Use verbose switch for more information.
|
echo Compiler Detection failed. Use verbose switch for more information.
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
if "%BUILD_VS_YEAR%"=="2017" set BUILD_VS_LIBDIRPOST=vc15
|
if "%BUILD_VS_YEAR%"=="2017" set BUILD_VS_LIBDIRPOST=vc15
|
||||||
if "%BUILD_VS_YEAR%"=="2019" set BUILD_VS_LIBDIRPOST=vc15
|
if "%BUILD_VS_YEAR%"=="2019" set BUILD_VS_LIBDIRPOST=vc15
|
||||||
|
if "%BUILD_VS_YEAR%"=="2022" set BUILD_VS_LIBDIRPOST=vc15
|
||||||
|
|
||||||
set BUILD_VS_SVNDIR=win64_%BUILD_VS_LIBDIRPOST%
|
set BUILD_VS_SVNDIR=win64_%BUILD_VS_LIBDIRPOST%
|
||||||
set BUILD_VS_LIBDIR="%BLENDER_DIR%..\lib\%BUILD_VS_SVNDIR%"
|
set BUILD_VS_LIBDIR="%BLENDER_DIR%..\lib\%BUILD_VS_SVNDIR%"
|
||||||
|
@@ -19,10 +19,10 @@ if "%WITH_PYDEBUG%"=="1" (
|
|||||||
set PYDEBUG_CMAKE_ARGS=-DWINDOWS_PYTHON_DEBUG=On
|
set PYDEBUG_CMAKE_ARGS=-DWINDOWS_PYTHON_DEBUG=On
|
||||||
)
|
)
|
||||||
|
|
||||||
if "%BUILD_VS_YEAR%"=="2019" (
|
if "%BUILD_VS_YEAR%"=="2017" (
|
||||||
set BUILD_PLATFORM_SELECT=-A %MSBUILD_PLATFORM%
|
|
||||||
) else (
|
|
||||||
set BUILD_GENERATOR_POST=%WINDOWS_ARCH%
|
set BUILD_GENERATOR_POST=%WINDOWS_ARCH%
|
||||||
|
) else (
|
||||||
|
set BUILD_PLATFORM_SELECT=-A %MSBUILD_PLATFORM%
|
||||||
)
|
)
|
||||||
|
|
||||||
set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -G "Visual Studio %BUILD_VS_VER% %BUILD_VS_YEAR%%BUILD_GENERATOR_POST%" %BUILD_PLATFORM_SELECT% %TESTS_CMAKE_ARGS% %CLANG_CMAKE_ARGS% %ASAN_CMAKE_ARGS% %PYDEBUG_CMAKE_ARGS%
|
set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -G "Visual Studio %BUILD_VS_VER% %BUILD_VS_YEAR%%BUILD_GENERATOR_POST%" %BUILD_PLATFORM_SELECT% %TESTS_CMAKE_ARGS% %CLANG_CMAKE_ARGS% %ASAN_CMAKE_ARGS% %PYDEBUG_CMAKE_ARGS%
|
||||||
|
3
build_files/windows/detect_msvc2022.cmd
Normal file
3
build_files/windows/detect_msvc2022.cmd
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
set BUILD_VS_VER=17
|
||||||
|
set BUILD_VS_YEAR=2022
|
||||||
|
call "%~dp0\detect_msvc_vswhere.cmd"
|
@@ -66,6 +66,14 @@ if NOT "%1" == "" (
|
|||||||
) else if "%1" == "2019b" (
|
) else if "%1" == "2019b" (
|
||||||
set BUILD_VS_YEAR=2019
|
set BUILD_VS_YEAR=2019
|
||||||
set VSWHERE_ARGS=-products Microsoft.VisualStudio.Product.BuildTools
|
set VSWHERE_ARGS=-products Microsoft.VisualStudio.Product.BuildTools
|
||||||
|
) else if "%1" == "2022" (
|
||||||
|
set BUILD_VS_YEAR=2022
|
||||||
|
) else if "%1" == "2022pre" (
|
||||||
|
set BUILD_VS_YEAR=2022
|
||||||
|
set VSWHERE_ARGS=-prerelease
|
||||||
|
) else if "%1" == "2022b" (
|
||||||
|
set BUILD_VS_YEAR=2022
|
||||||
|
set VSWHERE_ARGS=-products Microsoft.VisualStudio.Product.BuildTools
|
||||||
) else if "%1" == "packagename" (
|
) else if "%1" == "packagename" (
|
||||||
set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -DCPACK_OVERRIDE_PACKAGENAME="%2"
|
set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -DCPACK_OVERRIDE_PACKAGENAME="%2"
|
||||||
shift /1
|
shift /1
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user