Compare commits
780
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8cd66ae9b3 | ||
|
|
555bcdabaa | ||
|
|
3dfc393f95 | ||
|
|
79302f3ed4 | ||
|
|
3bc38c315b | ||
|
|
7289bbb01f | ||
|
|
9c9bd0e52f | ||
|
|
98e85cd6f6 | ||
|
|
76aa4eb895 | ||
|
|
fa5a0dd27b | ||
|
|
114fb11bc4 | ||
|
|
550f8cbcb4 | ||
|
|
b265280a63 | ||
|
|
60ab1f281d | ||
|
|
ac4aa0487b | ||
|
|
9fecc8301a | ||
|
|
4b29b87c14 | ||
|
|
12f359f748 | ||
|
|
afc84c9c0c | ||
|
|
ae9a7b2085 | ||
|
|
2b5f38bbeb | ||
|
|
caf50de5e5 | ||
|
|
944fa67c30 | ||
|
|
e37ffa9ec8 | ||
|
|
7e387675ac | ||
|
|
a60987f237 | ||
|
|
f404470e0d | ||
|
|
7057b9d359 | ||
|
|
eee71c930e | ||
|
|
1a3b65117f | ||
|
|
c22a8fa9c6 | ||
|
|
6495242f54 | ||
|
|
57a59c5696 | ||
|
|
1335cb41be | ||
|
|
15f40f2b8d | ||
|
|
3e8dc1b1ad | ||
|
|
eda67d7910 | ||
|
|
a30b8adb2b | ||
|
|
c50abdc645 | ||
|
|
f9e6a021db | ||
|
|
3a7d084081 | ||
|
|
85518ff44c | ||
|
|
5436509a23 | ||
|
|
622293c64e | ||
|
|
9a13a77691 | ||
|
|
3ccd280bd0 | ||
|
|
f6f8c749f2 | ||
|
|
5eb5e197b4 | ||
|
|
f39b9296d0 | ||
|
|
a9989d3ecd | ||
|
|
21731e6824 | ||
|
|
27b8bf22bf | ||
|
|
ac9a5f2f1a | ||
|
|
1fd21cd7a5 | ||
|
|
ba6f88661f | ||
|
|
359ed0728a | ||
|
|
19a1bae289 | ||
|
|
7a4e4f9189 | ||
|
|
b477c60d6c | ||
|
|
bb0a6cc918 | ||
|
|
c5d0daa9da | ||
|
|
fc323081ad | ||
|
|
7a10d2b866 | ||
|
|
ee64e7e368 | ||
|
|
0f788c3990 | ||
|
|
6f04ecd472 | ||
|
|
177338f28a | ||
|
|
194d5f5478 | ||
|
|
4184aa05f7 | ||
|
|
97292eca03 | ||
|
|
1a69a1b16b | ||
|
|
f0c3870db0 | ||
|
|
c17a3cbb86 | ||
|
|
8d756b995e | ||
|
|
719249a2a5 | ||
|
|
4560ce79f6 | ||
|
|
3dec87b9b5 | ||
|
|
a7b114d8bb | ||
|
|
e3071a1e40 | ||
|
|
76653f5380 | ||
|
|
2f2e5bf7fe | ||
|
|
63f37f5fe2 | ||
|
|
aa45e2ed71 | ||
|
|
2f8f81b119 | ||
|
|
0daf527ddf | ||
|
|
84523d94f2 | ||
|
|
f3d651ab31 | ||
|
|
aa4d601b8e | ||
|
|
2f333ffbd6 | ||
|
|
528435f14f | ||
|
|
375592aef4 | ||
|
|
0d7c39d9f5 | ||
|
|
5db4acd816 | ||
|
|
e148d9ebd6 | ||
|
|
b828a2be6c | ||
|
|
5d04ecc4ff | ||
|
|
3df2e3f2b6 | ||
|
|
32d4848993 | ||
|
|
5e5a5bf632 | ||
|
|
c14385be08 | ||
|
|
23223aaefa | ||
|
|
7f47307dab | ||
|
|
eeae3e9859 | ||
|
|
cf1ca21d1b | ||
|
|
104df74246 | ||
|
|
ac47c2a9a0 | ||
|
|
2e06bdb4af | ||
|
|
5e814ea606 | ||
|
|
9f66386cef | ||
|
|
c33391222a | ||
|
|
8908fe4a45 | ||
|
|
227665312b | ||
|
|
284001d4c1 | ||
|
|
0714d2e783 | ||
|
|
4ef1759bd4 | ||
|
|
f796720f63 | ||
|
|
fe2f20a49a | ||
|
|
bf7f36b707 | ||
|
|
6749446c59 | ||
|
|
901b798b69 | ||
|
|
27163edbd9 | ||
|
|
cfe89fdc3c | ||
|
|
fd2cbb82c9 | ||
|
|
79ddf1ad98 | ||
|
|
966a66c78a | ||
|
|
f8f38b6075 | ||
|
|
e05ba11196 | ||
|
|
7f8898c853 | ||
|
|
b54bece30d | ||
|
|
705cc95d7f | ||
|
|
1f7d55cffb | ||
|
|
bc772aa9a3 | ||
|
|
383dc0f7ae | ||
|
|
961cc44049 | ||
|
|
4e318dabf0 | ||
|
|
7583aeb55f | ||
|
|
be62792593 | ||
|
|
644e9b70bd | ||
|
|
cb0b6f65ac | ||
|
|
71237bdb1c | ||
|
|
a75aec0b99 | ||
|
|
7c66ae09b7 | ||
|
|
a32f9a0127 | ||
|
|
a92c3148f6 | ||
|
|
8c5d2e378e | ||
|
|
3f3a39168c | ||
|
|
d2fe82a6b4 | ||
|
|
62aed5f014 | ||
|
|
ff08b85528 | ||
|
|
5341906d83 | ||
|
|
3564d6f7a9 | ||
|
|
58a756460a | ||
|
|
cf06502b17 | ||
|
|
e9caa7dc23 | ||
|
|
df9a91a267 | ||
|
|
23305900c5 | ||
|
|
7a87f7405f | ||
|
|
2daaf38cb3 | ||
|
|
3497515a94 | ||
|
|
683fc6cea7 | ||
|
|
bc588849f8 | ||
|
|
8a6b579029 | ||
|
|
574b4d9b3c | ||
|
|
656c6b4fdd | ||
|
|
0c1a3360fa | ||
|
|
3119d39deb | ||
|
|
2de5816f04 | ||
|
|
363f1a1b07 | ||
|
|
a3ec9dc89e | ||
|
|
9320303fb3 | ||
|
|
8aa5b1bdec | ||
|
|
0875ee2467 | ||
|
|
6357c6370b | ||
|
|
e9d1116c79 | ||
|
|
47b131303f | ||
|
|
8396a9a6c1 | ||
|
|
0d631bf0a0 | ||
|
|
d3aa0f4f93 | ||
|
|
86411a3611 | ||
|
|
c8ece33fc9 | ||
|
|
f68f6dec50 | ||
|
|
98b5f5fc5a | ||
|
|
f2a2bf4ca6 | ||
|
|
56151b85aa | ||
|
|
e9045bc6e9 | ||
|
|
2aad8e8de3 | ||
|
|
9da2466609 | ||
|
|
047facb618 | ||
|
|
988d862a9e | ||
|
|
69e9fd39a5 | ||
|
|
b7b50c245d | ||
|
|
f495235196 | ||
|
|
797ff2687c | ||
|
|
6986f4998c | ||
|
|
6f84e2f6c4 | ||
|
|
47f8e708c6 | ||
|
|
aab02fc335 | ||
|
|
c91b7c2de1 | ||
|
|
7101b7f1be | ||
|
|
cfb2ecbc41 | ||
|
|
f6f5d2bb19 | ||
|
|
6594b7d1ab | ||
|
|
af371d50ba | ||
|
|
601232f730 | ||
|
|
ab8d2dc2a7 | ||
|
|
205c1c5891 | ||
|
|
50eaed3ae5 | ||
|
|
b8a9a5ae6e | ||
|
|
7735c35f16 | ||
|
|
6389d5d718 | ||
|
|
0e72048685 | ||
|
|
d8f42d74bf | ||
|
|
969411f8ef | ||
|
|
9633e297d8 | ||
|
|
1149e81c2b | ||
|
|
641f10688e | ||
|
|
19d395197d | ||
|
|
4ffc81c99f | ||
|
|
bbdc62f691 | ||
|
|
60f90b60ba | ||
|
|
ce935d7455 | ||
|
|
de63b5721f | ||
|
|
9311f0d61c | ||
|
|
bdea945ca7 | ||
|
|
62c9d75020 | ||
|
|
f9a56161ed | ||
|
|
54178656e8 | ||
|
|
a12a522410 | ||
|
|
f8fa944cd8 | ||
|
|
d0b70f096d | ||
|
|
eac0bd7141 | ||
|
|
167843a5f8 | ||
|
|
c0da465f74 | ||
|
|
30ef3a7ce8 | ||
|
|
e218cc3061 | ||
|
|
b3167cb78b | ||
|
|
91ccdad497 | ||
|
|
b42b5e68be | ||
|
|
2a10494b8a | ||
|
|
15d8b2ffaf | ||
|
|
57fcff35c5 | ||
|
|
0d21ae733e | ||
|
|
81fd78e81e | ||
|
|
cc3297fe2c | ||
|
|
85ce881011 | ||
|
|
0d813b41a0 | ||
|
|
15addc8105 | ||
|
|
655789e5ae | ||
|
|
1b39ad1ab2 | ||
|
|
583131153e | ||
|
|
e8e85732d0 | ||
|
|
fef4d9961b | ||
|
|
3ea3e2e15c | ||
|
|
94613e81e3 | ||
|
|
2d5dd862e5 | ||
|
|
77755e5a36 | ||
|
|
d17880fce2 | ||
|
|
d445beaac3 | ||
|
|
91d5162be4 | ||
|
|
cd5f0ede27 | ||
|
|
c35c23ef2c | ||
|
|
fe09a71580 | ||
|
|
6a244e1368 | ||
|
|
86a13f2756 | ||
|
|
84c921ebbf | ||
|
|
2eafce19bb | ||
|
|
94ebabcca8 | ||
|
|
abc6c2d46c | ||
|
|
72e2393bcf | ||
|
|
7458db97ed | ||
|
|
f4601fc86a | ||
|
|
064a9093d5 | ||
|
|
ff400de5bc | ||
|
|
664b096e52 | ||
|
|
4359051d4a | ||
|
|
02b1c043c1 | ||
|
|
5f12f27335 | ||
|
|
e7eaa8e753 | ||
|
|
784cef9f63 | ||
|
|
803127cf52 | ||
|
|
2fd6ac9538 | ||
|
|
2c96eab4b3 | ||
|
|
773f97f0b7 | ||
|
|
f24df1dfbd | ||
|
|
94c5e1ce7e | ||
|
|
33b14a50c9 | ||
|
|
f60c7521c7 | ||
|
|
0be18d4a9f | ||
|
|
d4d0ff19a2 | ||
|
|
510105d51f | ||
|
|
9dbbc39c65 | ||
|
|
dd48e47d98 | ||
|
|
12a60d54e9 | ||
|
|
6be45c9bcf | ||
|
|
b74e1e1020 | ||
|
|
66e80b31aa | ||
|
|
100917541f | ||
|
|
288b4b75c8 | ||
|
|
39bbd66193 | ||
|
|
6497d02b28 | ||
|
|
8f06f47fc9 | ||
|
|
fddaf96f67 | ||
|
|
3a3e32760b | ||
|
|
0e863c5bd1 | ||
|
|
8a555be07b | ||
|
|
7e624c997a | ||
|
|
88d18b7342 | ||
|
|
aa24163cca | ||
|
|
ab7421e9e4 | ||
|
|
76742cd93b | ||
|
|
27a3fc6356 | ||
|
|
84b0909170 | ||
|
|
c272b2535d | ||
|
|
af971ccea4 | ||
|
|
bf70bcaedf | ||
|
|
b502b8d32f | ||
|
|
527c019c0f | ||
|
|
f7ad93dec0 | ||
|
|
c4ef9f0efc | ||
|
|
b183666a08 | ||
|
|
e6512ce080 | ||
|
|
24935f654f | ||
|
|
98d33929de | ||
|
|
fde2c48986 | ||
|
|
f29aa6ba0d | ||
|
|
39b592d3b8 | ||
|
|
23397f5913 | ||
|
|
ba57e54d5c | ||
|
|
acda2974bf | ||
|
|
ad81191667 | ||
|
|
27754bc698 | ||
|
|
0033b6312f | ||
|
|
ca93874026 | ||
|
|
4937a24a0b | ||
|
|
9e21e8d36d | ||
|
|
365a16a564 | ||
|
|
53bf680ef4 | ||
|
|
7acf0bc422 | ||
|
|
5d1d643a0c | ||
|
|
6bbb37ca07 | ||
|
|
ee548255f4 | ||
|
|
c6b54cb045 | ||
|
|
194089bcba | ||
|
|
95e78e880c | ||
|
|
8882068501 | ||
|
|
8870247fae | ||
|
|
102aad8394 | ||
|
|
aee865386f | ||
|
|
1cae649d7b | ||
|
|
84a293950f | ||
|
|
ddbf40f6e4 | ||
|
|
f93029f2c2 | ||
|
|
ee898650ba | ||
|
|
6085bbc949 | ||
|
|
9d55f53860 | ||
|
|
1730a680b4 | ||
|
|
11e307fc0d | ||
|
|
e6ecff7006 | ||
|
|
6e3d640c1a | ||
|
|
05e52e11bf | ||
|
|
1624c4446f | ||
|
|
28cd6ec1ca | ||
|
|
c753e0cf10 | ||
|
|
212c04557f | ||
|
|
64ead975b8 | ||
|
|
dcf32cbf17 | ||
|
|
18759849e7 | ||
|
|
0c244dab90 | ||
|
|
d1ab0c71f5 | ||
|
|
c377d5c799 | ||
|
|
16bd9d27de | ||
|
|
9cf3b56cf0 | ||
|
|
84f3acc5aa | ||
|
|
ddaf96805c | ||
|
|
8ad11c21e5 | ||
|
|
7fa0d95f25 | ||
|
|
10f8d01b8d | ||
|
|
c52a39850c | ||
|
|
ad2d53d15a | ||
|
|
a201a75498 | ||
|
|
256b43c6f9 | ||
|
|
261b8e66a6 | ||
|
|
2d0525257a | ||
|
|
d84dd57127 | ||
|
|
1b2e841502 | ||
|
|
ee66264a6a | ||
|
|
abd804a552 | ||
|
|
a6c557855e | ||
|
|
06d492b8f6 | ||
|
|
fa306af477 | ||
|
|
7a2f606c48 | ||
|
|
1a631cebfe | ||
|
|
df32d17a25 | ||
|
|
39da57cf6b | ||
|
|
f7ffbfb6ce | ||
|
|
55b4808666 | ||
|
|
9437acb2c3 | ||
|
|
0af845c324 | ||
|
|
26fd41b56e | ||
|
|
82419fb435 | ||
|
|
c06af2d15b | ||
|
|
ced4499bf8 | ||
|
|
6ccdffe221 | ||
|
|
08f3c80fae | ||
|
|
0ecd6682c7 | ||
|
|
79909cbed9 | ||
|
|
79bc4818c7 | ||
|
|
a57543c950 | ||
|
|
0e518017d3 | ||
|
|
10714e3215 | ||
|
|
45cb65e2ca | ||
|
|
336165fc96 | ||
|
|
f8c711dd94 | ||
|
|
378233570b | ||
|
|
f230094d58 | ||
|
|
0fdc183551 | ||
|
|
722ed6c403 | ||
|
|
51d8182047 | ||
|
|
3339248b47 | ||
|
|
b5a5940b6b | ||
|
|
e726b3d0ba | ||
|
|
b490f97987 | ||
|
|
534d1824e5 | ||
|
|
e1a8244b92 | ||
|
|
3020cc66de | ||
|
|
c9a4d3335c | ||
|
|
bafa32f146 | ||
|
|
c776d5994c | ||
|
|
e4455d7193 | ||
|
|
57647bb05b | ||
|
|
4f4f636598 | ||
|
|
261c49ebf5 | ||
|
|
7627a1d5da | ||
|
|
9cb5c191b4 | ||
|
|
6ae50e517f | ||
|
|
8e9246992c | ||
|
|
7faf465af5 | ||
|
|
208f2debbf | ||
|
|
7412a4c50c | ||
|
|
bef99ccff3 | ||
|
|
06a8525837 | ||
|
|
06db1d29af | ||
|
|
266f989e52 | ||
|
|
1307d34b55 | ||
|
|
18d7334fbe | ||
|
|
96d39a0834 | ||
|
|
7607ce36db | ||
|
|
17e40a7de6 | ||
|
|
31551749e4 | ||
|
|
c2dc898a01 | ||
|
|
325ed27f32 | ||
|
|
fb772b1c67 | ||
|
|
ef27ca91b6 | ||
|
|
7137c4b7e2 | ||
|
|
baa023b914 | ||
|
|
f75718ccd9 | ||
|
|
f944b0a917 | ||
|
|
7c7d8e4585 | ||
|
|
946b66550c | ||
|
|
c6bd124537 | ||
|
|
0ad27bf799 | ||
|
|
d2a9e94a51 | ||
|
|
c11d6acf77 | ||
|
|
820b663c41 | ||
|
|
6fc45a5656 | ||
|
|
87689bec78 | ||
|
|
d65f3333c0 | ||
|
|
430df66954 | ||
|
|
ac23b9bdb5 | ||
|
|
9eec02d575 | ||
|
|
ac6dabe3e1 | ||
|
|
59e936b884 | ||
|
|
63b2c8e836 | ||
|
|
cadb803b1c | ||
|
|
2e9ed7c147 | ||
|
|
dfeaa20a39 | ||
|
|
af2297bb8f | ||
|
|
cff8c4211a | ||
|
|
f891891191 | ||
|
|
aa5800876f | ||
|
|
239f78dc33 | ||
|
|
e03bf4974e | ||
|
|
496c13bf42 | ||
|
|
b314235b0f | ||
|
|
15a1246a73 | ||
|
|
4a58cc18fd | ||
|
|
b421535b8e | ||
|
|
5e4d6f7ee0 | ||
|
|
cae1367190 | ||
|
|
7f878f40ee | ||
|
|
a15c6d1240 | ||
|
|
bd8e8368b4 | ||
|
|
9511d9fccf | ||
|
|
8f12ec939d | ||
|
|
724cf995f3 | ||
|
|
ba54ea632b | ||
|
|
b065900497 | ||
|
|
3416ca4d9d | ||
|
|
79b9caf424 | ||
|
|
57294452a1 | ||
|
|
0b1ac7bfcb | ||
|
|
a2a9d1b137 | ||
|
|
3861a8269a | ||
|
|
9a242f452b | ||
|
|
b386771600 | ||
|
|
3527ed3c6a | ||
|
|
6eb37b8a27 | ||
|
|
9331982bfe | ||
|
|
4bd080a965 | ||
|
|
1aec66f6a7 | ||
|
|
566d4ac8a8 | ||
|
|
2830a8a32a | ||
|
|
a3bd1ffe58 | ||
|
|
6262ca7433 | ||
|
|
d4dee2946f | ||
|
|
b227eb3bbc | ||
|
|
f920bf4bcf | ||
|
|
0d1d85c8de | ||
|
|
a92d88f4bd | ||
|
|
fd500d5c5e | ||
|
|
3816cccd95 | ||
|
|
8fcff6e8e3 | ||
|
|
d4d66c5189 | ||
|
|
5883082d5d | ||
|
|
d6f5261995 | ||
|
|
c6b8b67db6 | ||
|
|
274d887e17 | ||
|
|
b775ebec03 | ||
|
|
9f73563fa3 | ||
|
|
10bf526044 | ||
|
|
d0b3569ec0 | ||
|
|
6878989482 | ||
|
|
e61cba8dcc | ||
|
|
f3d7b8f6cd | ||
|
|
16c881c379 | ||
|
|
c572dc7c91 | ||
|
|
110047f1ae | ||
|
|
373f94dcf1 | ||
|
|
d948e08043 | ||
|
|
ea928902e4 | ||
|
|
50986fcaf1 | ||
|
|
ef585e2b35 | ||
|
|
1a215c2448 | ||
|
|
74a690ec7e | ||
|
|
05e3c6eb7c | ||
|
|
2a41db7027 | ||
|
|
f5655cc6b9 | ||
|
|
cb9e43c7e1 | ||
|
|
a05fd6bc2c | ||
|
|
ada32bfba1 | ||
|
|
140c766522 | ||
|
|
360ae7bb8f | ||
|
|
799f21c7ef | ||
|
|
eb4d92bd5f | ||
|
|
77328b0071 | ||
|
|
e9782c5927 | ||
|
|
b65e7cca03 | ||
|
|
9358af4e93 | ||
|
|
92c0c60df8 | ||
|
|
12c5bf4489 | ||
|
|
b8151e3ca1 | ||
|
|
18423b1d8c | ||
|
|
6bb3eee5d8 | ||
|
|
d3edce4e2c | ||
|
|
ccd4e54485 | ||
|
|
caf40c72d4 | ||
|
|
f9d5c2805f | ||
|
|
43c07ca06b | ||
|
|
48eae9b0d4 | ||
|
|
3af0465bb4 | ||
|
|
e71d764009 | ||
|
|
b730ec068d | ||
|
|
fbcb5bfe2e | ||
|
|
6841ef0d0c | ||
|
|
e107e15917 | ||
|
|
ed61e22da1 | ||
|
|
acb1bf01ee | ||
|
|
22b13f030a | ||
|
|
3b69bcc18d | ||
|
|
40d770cb92 | ||
|
|
c7e33d84d8 | ||
|
|
3471ca4184 | ||
|
|
a615adbee4 | ||
|
|
540049d0d9 | ||
|
|
eb66de3cd9 | ||
|
|
55b6075bf8 | ||
|
|
bb7faf3e72 | ||
|
|
2ae5327e86 | ||
|
|
72ebe0d89e | ||
|
|
076bd5cd23 | ||
|
|
d98f4ee6a8 | ||
|
|
2cf5ab2917 | ||
|
|
cb34da92a1 | ||
|
|
1c523c74e7 | ||
|
|
e12dafbfc0 | ||
|
|
214c42787a | ||
|
|
c8e6433da9 | ||
|
|
a34f734a99 | ||
|
|
47b8495973 | ||
|
|
bdeeb17bc6 | ||
|
|
525b56e74f | ||
|
|
1b11e1bbfe | ||
|
|
8e5217e835 | ||
|
|
691ba9ec5c | ||
|
|
e04645d3c7 | ||
|
|
f080d582b6 | ||
|
|
346f4ce8c0 | ||
|
|
271df3da06 | ||
|
|
a86c76f29a | ||
|
|
20fa201e62 | ||
|
|
7355f1b2c6 | ||
|
|
92812dfe2e | ||
|
|
0459d3bf77 | ||
|
|
ccba31cff1 | ||
|
|
d76018ce2d | ||
|
|
464e7d1107 | ||
|
|
4f2c3bdf1c | ||
|
|
162f15d884 | ||
|
|
8a105d5e12 | ||
|
|
da3c9bcd38 | ||
|
|
45ffa6db92 | ||
|
|
33818ac622 | ||
|
|
5b8380de3f | ||
|
|
3f47b3c49e | ||
|
|
88acb19835 | ||
|
|
b2fc5ba9be | ||
|
|
e0aea95246 | ||
|
|
89ea7a12c6 | ||
|
|
717e4e9347 | ||
|
|
1e18697e6e | ||
|
|
0685d44f59 | ||
|
|
dc2425a314 | ||
|
|
70da506e88 | ||
|
|
e1432c4830 | ||
|
|
c8afcec193 | ||
|
|
f619864eca | ||
|
|
c5e168a560 | ||
|
|
ee43520b76 | ||
|
|
a89095c104 | ||
|
|
255d09c92d | ||
|
|
95025aa76e | ||
|
|
e1ae238087 | ||
|
|
b05d886400 | ||
|
|
9c70f05db9 | ||
|
|
a69ec7c08c | ||
|
|
5ece770e29 | ||
|
|
3f8a01d582 | ||
|
|
b1cb10413f | ||
|
|
ee80637030 | ||
|
|
9a7636d0b3 | ||
|
|
b95919954b | ||
|
|
8719fb6512 | ||
|
|
5a4c94cbba | ||
|
|
4656539c2a | ||
|
|
96c15f7905 | ||
|
|
6db3be9ac1 | ||
|
|
009306cedd | ||
|
|
7f557695ba | ||
|
|
ddf5f4b82d | ||
|
|
7d54afdbd1 | ||
|
|
5edd16f5af | ||
|
|
61c0fd761f | ||
|
|
996301623b | ||
|
|
1d63c60ee8 | ||
|
|
672d73f1cb | ||
|
|
d9303f682c | ||
|
|
77fc9b92af | ||
|
|
9ef590fb99 | ||
|
|
71a7b4bf83 | ||
|
|
ca33644c1a | ||
|
|
c35a0b9a64 | ||
|
|
5e491b37df | ||
|
|
4d7c106d1d | ||
|
|
9e62e9e019 | ||
|
|
d0e19509b5 | ||
|
|
3d4799a0c0 | ||
|
|
3568445ab0 | ||
|
|
0bac240a30 | ||
|
|
7eed525d88 | ||
|
|
3eea5e7e4a | ||
|
|
61a8b046de | ||
|
|
036e7fdaf0 | ||
|
|
d8bca167f8 | ||
|
|
a83333e09f | ||
|
|
e3cafe67ea | ||
|
|
d2ad8f6108 | ||
|
|
ab93d302d2 | ||
|
|
8cff9dcad9 | ||
|
|
0d51ea4e50 | ||
|
|
26b3920527 | ||
|
|
c7bbd74094 | ||
|
|
158f291b1f | ||
|
|
ffef01221d | ||
|
|
ab3f073ac0 | ||
|
|
e4baf52b4f | ||
|
|
12c740905d | ||
|
|
94bbacd100 | ||
|
|
3b7b5a738d | ||
|
|
92dac82cc5 | ||
|
|
8d5e3a0e82 | ||
|
|
24f4a5d954 | ||
|
|
b8422047e9 | ||
|
|
b8e825b464 | ||
|
|
06aa75c085 | ||
|
|
e83f812e5d | ||
|
|
32abf75562 | ||
|
|
5eb19bafbf | ||
|
|
1a4a93c36f | ||
|
|
8a338e57b3 | ||
|
|
e8503e031f | ||
|
|
9cf2ec87fa | ||
|
|
611ce0c5e0 | ||
|
|
2aa87f656c | ||
|
|
923ecaa256 | ||
|
|
e875a8ffa2 | ||
|
|
9e084e64ff | ||
|
|
d25b4d20a8 | ||
|
|
3903034b78 | ||
|
|
8bb11a2efa | ||
|
|
dbbb952535 | ||
|
|
66c772209b | ||
|
|
2ec24125e6 | ||
|
|
e0b0814859 | ||
|
|
5db3eb15f7 | ||
|
|
42ca36844e | ||
|
|
23ec99d01c | ||
|
|
29e4a07016 | ||
|
|
df653a6331 | ||
|
|
70ac0a727f | ||
|
|
56f503ade0 | ||
|
|
530827a0f0 | ||
|
|
f39695b6b3 | ||
|
|
d0c30970eb | ||
|
|
31a3b3b34b | ||
|
|
d483b2b2f1 | ||
|
|
136dea5fde | ||
|
|
163fa1c42c | ||
|
|
c28c195d1b | ||
|
|
d8f452967e | ||
|
|
d79b9f4e1f | ||
|
|
10c5b0a190 | ||
|
|
05103f55a6 | ||
|
|
ff629b5642 | ||
|
|
8d874a023b | ||
|
|
f8c0d63ba3 | ||
|
|
3c65ffe2d6 | ||
|
|
2a197a23d7 | ||
|
|
ae7b3436b3 | ||
|
|
49ab06b107 | ||
|
|
b43d3fd6c8 | ||
|
|
3d7802aaac | ||
|
|
de7492ee49 | ||
|
|
dbee1f9efe | ||
|
|
97a6546af0 | ||
|
|
67afb7b93d | ||
|
|
fce157b45f | ||
|
|
5bbbdad5f8 | ||
|
|
fda42077c4 | ||
|
|
89bbe0deb2 | ||
|
|
11540055c7 | ||
|
|
a73ab46531 | ||
|
|
51d258f95b | ||
|
|
97ae54f6e1 | ||
|
|
2737c05837 | ||
|
|
4aac4dc067 | ||
|
|
7831e6113c | ||
|
|
bb7a898eee | ||
|
|
3d0da01f7f | ||
|
|
3d10658455 | ||
|
|
e453b535a3 | ||
|
|
e541b5f5b7 | ||
|
|
3e4c3ae3a0 | ||
|
|
0260b2f534 | ||
|
|
15fcfc37cc | ||
|
|
2317898f36 | ||
|
|
b1e1a44d49 | ||
|
|
f8543381b9 | ||
|
|
d15defefe7 | ||
|
|
fa423b7e0f | ||
|
|
fd8af3ac00 |
-139
@@ -1,139 +0,0 @@
|
||||
version: 0.7.{build}
|
||||
image: Visual Studio 2019
|
||||
clone_folder: c:\projects\lief
|
||||
|
||||
configuration: Release
|
||||
|
||||
services:
|
||||
- docker
|
||||
|
||||
platform:
|
||||
- x86
|
||||
- x64
|
||||
|
||||
environment:
|
||||
LIEF_AUTOMATIC_BUILDS_KEY:
|
||||
secure: TT7SXISIifq2/tf02n2ATgPj+Ky4Cjl3Fg44BAfyI4yRa4i87UAQIx5EFeV63+Xv2rhcU7JcMgl+An7QBrV6ofuQ9jxbuw+Gd1GqcCrAIyY=
|
||||
LIEF_AUTOMATIC_BUILDS_IV:
|
||||
secure: /S6Vbt3vEisoC81siFbkqOXQeVnwxLZZPMYp1r79G7h+HFjLlWUZSidxxpsAgHNE
|
||||
SCCACHE_CACHE_SIZE: "750M"
|
||||
SCCACHE_DIR: C:\Users\appveyor\AppData\Local\Mozilla\sccache
|
||||
SCCACHE_ERROR_LOG: C:\projects\sccache.log
|
||||
matrix:
|
||||
# Python 3.6
|
||||
- PYTHON_VERSION: "3.6"
|
||||
PYTHON32_PATH: "C:\\Python36"
|
||||
PYTHON32_INCLUDE: "C:\\Python36\\include"
|
||||
PYTHON32_BINARY: "C:\\Python36\\python.exe"
|
||||
PYTHON32_LIBRARY: "C:\\Python36\\libs\\python36.lib"
|
||||
PYTHON64_PATH: "C:\\Python36-x64"
|
||||
PYTHON64_INCLUDE: "C:\\Python36-x64\\include"
|
||||
PYTHON64_BINARY: "C:\\Python36-x64\\python.exe"
|
||||
PYTHON64_LIBRARY: "C:\\Python36-x64\\libs\\python36.lib"
|
||||
|
||||
# Python 3.7
|
||||
- PYTHON_VERSION: "3.7"
|
||||
PYTHON32_PATH: "C:\\Python37"
|
||||
PYTHON32_INCLUDE: "C:\\Python37\\include"
|
||||
PYTHON32_BINARY: "C:\\Python37\\python.exe"
|
||||
PYTHON32_LIBRARY: "C:\\Python37\\libs\\python37.lib"
|
||||
PYTHON64_PATH: "C:\\Python37-x64"
|
||||
PYTHON64_INCLUDE: "C:\\Python37-x64\\include"
|
||||
PYTHON64_BINARY: "C:\\Python37-x64\\python.exe"
|
||||
PYTHON64_LIBRARY: "C:\\Python37-x64\\libs\\python37.lib"
|
||||
|
||||
# Python 3.8
|
||||
- PYTHON_VERSION: "3.8"
|
||||
PYTHON32_PATH: "C:\\Python38"
|
||||
PYTHON32_INCLUDE: "C:\\Python38\\include"
|
||||
PYTHON32_BINARY: "C:\\Python38\\python.exe"
|
||||
PYTHON32_LIBRARY: "C:\\Python38\\libs\\python38.lib"
|
||||
PYTHON64_PATH: "C:\\Python38-x64"
|
||||
PYTHON64_INCLUDE: "C:\\Python38-x64\\include"
|
||||
PYTHON64_BINARY: "C:\\Python38-x64\\python.exe"
|
||||
PYTHON64_LIBRARY: "C:\\Python38-x64\\libs\\python38.lib"
|
||||
|
||||
# Python 3.9
|
||||
- PYTHON_VERSION: "3.9"
|
||||
PYTHON32_PATH: "C:\\Python39"
|
||||
PYTHON32_INCLUDE: "C:\\Python39\\include"
|
||||
PYTHON32_BINARY: "C:\\Python39\\python.exe"
|
||||
PYTHON32_LIBRARY: "C:\\Python39\\libs\\python39.lib"
|
||||
PYTHON64_PATH: "C:\\Python39-x64"
|
||||
PYTHON64_INCLUDE: "C:\\Python39-x64\\include"
|
||||
PYTHON64_BINARY: "C:\\Python39-x64\\python.exe"
|
||||
PYTHON64_LIBRARY: "C:\\Python39-x64\\libs\\python39.lib"
|
||||
|
||||
cache:
|
||||
- '%SCCACHE_DIR%'
|
||||
|
||||
install:
|
||||
- cmd: choco install sccache
|
||||
- cmd: sccache.exe --start-server
|
||||
- ps: if ($env:PLATFORM -eq "x64") { $env:CMAKE_ARCH = "x64" }
|
||||
|
||||
- ps: if ($env:PLATFORM -eq "x64") { $env:PYTHON_PATH = $env:PYTHON64_PATH }
|
||||
- ps: if ($env:PLATFORM -eq "x64") { $env:PYTHON_INCLUDE = $env:PYTHON64_INCLUDE }
|
||||
- ps: if ($env:PLATFORM -eq "x64") { $env:PYTHON_BINARY = $env:PYTHON64_BINARY }
|
||||
- ps: if ($env:PLATFORM -eq "x64") { $env:PYTHON_LIBRARY = $env:PYTHON64_LIBRARY }
|
||||
|
||||
- ps: if ($env:PLATFORM -eq "x86") { $env:PYTHON_PATH = $env:PYTHON32_PATH }
|
||||
- ps: if ($env:PLATFORM -eq "x86") { $env:PYTHON_INCLUDE = $env:PYTHON32_INCLUDE }
|
||||
- ps: if ($env:PLATFORM -eq "x86") { $env:PYTHON_BINARY = $env:PYTHON32_BINARY }
|
||||
- ps: if ($env:PLATFORM -eq "x86") { $env:PYTHON_LIBRARY = $env:PYTHON32_LIBRARY }
|
||||
- set PATH=%PYTHON_PATH%;%PATH%
|
||||
|
||||
# Upgrade pip
|
||||
- python.exe -m pip install --disable-pip-version-check --user --upgrade pip
|
||||
- python.exe -m pip install --user wheel mako
|
||||
- python.exe -m pip install --upgrade setuptools
|
||||
|
||||
|
||||
build_script:
|
||||
- cd %APPVEYOR_BUILD_FOLDER%
|
||||
- set MSBuildLogger="C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll"
|
||||
- python.exe .\setup.py --ninja --lief-test build bdist_wheel --skip-build && exit 0 # Ignore warnings...
|
||||
- ps: if ($env:PYTHON_VERSION -eq "3.9") { python.exe .\scripts\windows\package_sdk.py }
|
||||
|
||||
after_build:
|
||||
- ps: Get-Service -Name 'ssh-agent' | Set-Service -StartupType Manual
|
||||
- ps: Start-Service -Name 'ssh-agent'
|
||||
- cd %APPVEYOR_BUILD_FOLDER%
|
||||
- ps: docker pull liefproject/deploy:latest
|
||||
- ps: |
|
||||
docker run `
|
||||
-v ${PWD}:/src `
|
||||
-e APPVEYOR="true" `
|
||||
-e APPVEYOR_PULL_REQUEST_NUMBER="$env:APPVEYOR_PULL_REQUEST_NUMBER" `
|
||||
-e APPVEYOR_REPO_NAME="$env:APPVEYOR_REPO_NAME" `
|
||||
-e APPVEYOR_REPO_BRANCH="$env:APPVEYOR_REPO_BRANCH" `
|
||||
-e APPVEYOR_BUILD_FOLDER="$env:APPVEYOR_BUILD_FOLDER" `
|
||||
-e LIEF_AUTOMATIC_BUILDS_KEY="$env:LIEF_AUTOMATIC_BUILDS_KEY" `
|
||||
-e LIEF_AUTOMATIC_BUILDS_IV="$env:LIEF_AUTOMATIC_BUILDS_IV" `
|
||||
--rm `
|
||||
liefproject/deploy python3 /src/.github/deploy.py
|
||||
$host.SetShouldExit(0)
|
||||
|
||||
on_finish:
|
||||
- cmd: sccache.exe --stop-server
|
||||
|
||||
artifacts:
|
||||
- path: 'dist\*.whl'
|
||||
name: python-wheel
|
||||
|
||||
- path: 'build\*.zip'
|
||||
name: sdk
|
||||
|
||||
#deploy:
|
||||
# description: "LIEF version $(APPVEYOR_REPO_TAG_NAME)"
|
||||
# provider: GitHub
|
||||
# auth_token:
|
||||
# secure: FU9CGrZ1lm0VDHUZg6zvTL4tidluDvRegVUTehCRo2xgiOv6NZePi7TdSy5CsOdG
|
||||
# artifact: sdk;python-wheel
|
||||
# draft: false
|
||||
# prerelease: false
|
||||
# force_update: true
|
||||
# on:
|
||||
# appveyor_repo_tag: true # deploy on tag push only
|
||||
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
version: 2.1
|
||||
jobs:
|
||||
build:
|
||||
macos:
|
||||
xcode: 12.3.0
|
||||
steps:
|
||||
- checkout:
|
||||
path: ~/LIEF
|
||||
- restore_cache:
|
||||
keys:
|
||||
- ccache-{{ arch }}-{{ .Branch }}
|
||||
- ccache-{{ arch }}-master
|
||||
- ccache-{{ arch }}
|
||||
- pyenv
|
||||
- run:
|
||||
name: Install pyenv
|
||||
command: |
|
||||
brew install pyenv
|
||||
pyenv root
|
||||
pyenv install --list
|
||||
- run:
|
||||
name: Install ccache
|
||||
command: brew install ccache
|
||||
- run:
|
||||
name: Install ninja
|
||||
command: brew install ninja
|
||||
- run:
|
||||
name: CCache initialization
|
||||
command: |
|
||||
ccache --show-stats
|
||||
ccache --zero-stats
|
||||
ccache --max-size=10.0G
|
||||
ccache --set-config=compiler_check=content
|
||||
- run:
|
||||
name: LIEF build setup
|
||||
command: |
|
||||
export PYTHON_CONFIGURE_OPTS="--enable-shared --enable-unicode=ucs2"
|
||||
pyenv install --skip-existing 3.9.0
|
||||
export PYTHON_BINARY=$(pyenv root)/versions/3.9.0/bin/python3.9
|
||||
$PYTHON_BINARY -m pip install --upgrade pip setuptools wheel
|
||||
$PYTHON_BINARY ./setup.py --ninja --lief-test build bdist_wheel
|
||||
bash scripts/osx/package_sdk.sh
|
||||
- run:
|
||||
name: LIEF deploy
|
||||
command: |
|
||||
export PYTHON_BINARY=$(pyenv root)/versions/3.9.0/bin/python3.9
|
||||
$PYTHON_BINARY -m pip install --upgrade requests mako
|
||||
$PYTHON_BINARY .github/deploy.py
|
||||
- run:
|
||||
name: ccache stats
|
||||
when: always
|
||||
command: |
|
||||
ccache --show-stats
|
||||
- save_cache:
|
||||
key: 'ccache-{{ arch }}-{{ .Branch }}'
|
||||
paths: [ "/home/circleci/.ccache" ]
|
||||
- save_cache:
|
||||
key: 'pyenv'
|
||||
paths: [ "/home/circleci/.pyenv" ]
|
||||
|
||||
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
build
|
||||
@@ -0,0 +1 @@
|
||||
github: [romainthomas]
|
||||
@@ -0,0 +1,12 @@
|
||||
---
|
||||
name: Feature Request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
*Please describe what you would like to have in LIEF*.
|
||||
|
||||
**Note: If the feature is not precise or if you want to have feedback first, you can open a [discussion](https://github.com/lief-project/LIEF/discussions).**
|
||||
@@ -1,20 +0,0 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
name: Premium Issue
|
||||
about: You need a fix for the issue with a high priority
|
||||
title: ''
|
||||
labels: Premium
|
||||
assignees: romainthomas
|
||||
|
||||
---
|
||||
|
||||
*Premium issues can be used to get a higher priority resolution for users and companies.*
|
||||
*In return, you need to contribute to the project with an action:*
|
||||
|
||||
- Writing a guest blog post here: https://lief-project.github.io/blog/
|
||||
- Fixing another issue
|
||||
- Sponsoring the issue
|
||||
|
||||
*Premium issues will be highlighted in the changelog and the release blog post with your name/logo*
|
||||
|
||||
----------------------------------
|
||||
|
||||
**Description**
|
||||
|
||||
*Please describe the issue/request that needs to be addressed*
|
||||
|
||||
**Context**
|
||||
|
||||
*Please provide the version of LIEF, the operating system as well as the binaries associated with the issue
|
||||
(it can be sent by email as well)*
|
||||
|
||||
----------------------------------
|
||||
|
||||
|
||||
**Reach out to `issue@lief.re` to discuss about the timeline/contribution.**
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
name: Regular Issue
|
||||
about: You identified a bug or a problem in LIEF
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: romainthomas
|
||||
@@ -14,7 +14,7 @@ A clear and concise description of what the bug is.
|
||||
Steps to reproduce the behavior:
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
A clear and concise description of what you expected to happen (if applicable)
|
||||
|
||||
**Environment (please complete the following information):**
|
||||
- System and Version : [e.g. Ubuntu 16.04]
|
||||
@@ -0,0 +1,10 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<title>Links for lief</title>
|
||||
<body>
|
||||
<h1>Links for lief</h1>
|
||||
% for path, filename in files:
|
||||
<a href="/${path}">${filename}</a><br />
|
||||
% endfor
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,9 @@
|
||||
[lief.s3]
|
||||
region = "fr-par"
|
||||
bucket = "lief"
|
||||
endpoint = "https://s3.fr-par.scw.cloud"
|
||||
|
||||
[lief.deploy]
|
||||
branches = ["master", "deploy", "devel"]
|
||||
main-branches = ["master", "main"]
|
||||
default-dir = "latest"
|
||||
+257
-365
@@ -1,406 +1,298 @@
|
||||
#!/usr/bin/env python3
|
||||
import sys
|
||||
import os
|
||||
import re
|
||||
import logging
|
||||
import pathlib
|
||||
import subprocess
|
||||
import shutil
|
||||
import json
|
||||
from datetime import datetime
|
||||
from botocore.exceptions import ClientError
|
||||
from mako.template import Template
|
||||
from enum import Enum, auto
|
||||
from pathlib import Path
|
||||
from typing import Any, Optional
|
||||
|
||||
class CI(Enum):
|
||||
UNKNOWN = auto()
|
||||
TRAVIS = auto()
|
||||
APPVEYOR = auto()
|
||||
GITLAB_CI = auto()
|
||||
CIRCLE_CI = auto()
|
||||
GITHUB_ACTIONS = auto()
|
||||
AZURE = auto()
|
||||
LOCAL = auto()
|
||||
import argparse
|
||||
import boto3
|
||||
import functools
|
||||
import logging
|
||||
import os
|
||||
import sys
|
||||
import tempfile
|
||||
import tomli
|
||||
|
||||
def pretty_ci_name(ci):
|
||||
return str(ci).split(".")[-1].replace("_", "-").lower()
|
||||
LOG_LEVEL = logging.INFO
|
||||
|
||||
def is_pr(ci):
|
||||
if ci == CI.TRAVIS:
|
||||
cond1 = os.getenv("TRAVIS_EVENT_TYPE", "pull_request") == "pull_request"
|
||||
cond2 = not (os.getenv("TRAVIS_REPO_SLUG", "").startswith("lief-project/") or os.getenv("TRAVIS_REPO_SLUG", "").startswith("romainthomas/LIEF"))
|
||||
return cond1 or cond2
|
||||
elif ci == CI.APPVEYOR:
|
||||
logger.info("%s - %s", os.getenv("APPVEYOR_PULL_REQUEST_NUMBER", -1), os.getenv("APPVEYOR_REPO_NAME", ""))
|
||||
pr_number = os.getenv("APPVEYOR_PULL_REQUEST_NUMBER", "")
|
||||
cond1 = len(pr_number) != 0 and int(pr_number) >= 0
|
||||
cond2 = not (os.getenv("APPVEYOR_REPO_NAME", "").startswith("lief-project/") or os.getenv("APPVEYOR_REPO_NAME", "").startswith("romainthomas/"))
|
||||
return cond1 or cond2
|
||||
elif ci == CI.CIRCLE_CI:
|
||||
cond1 = int(os.getenv("CIRCLE_PR_NUMBER", -1)) >= 0
|
||||
cond2 = os.getenv("CIRCLE_PROJECT_USERNAME", "") != "lief-project" and os.getenv("CIRCLE_PROJECT_USERNAME", "") != "romainthomas"
|
||||
return cond1 or cond2
|
||||
elif ci == CI.GITHUB_ACTIONS:
|
||||
cond1 = os.getenv("GITHUB_HEAD_REF", "") != ""
|
||||
cond2 = not (os.getenv("GITHUB_REPOSITORY", "").startswith("lief-project/") or os.getenv("GITHUB_REPOSITORY", "").startswith("romainthomas/LIEF"))
|
||||
return cond1 or cond2
|
||||
elif ci == CI.LOCAL:
|
||||
return False
|
||||
return True
|
||||
CURRENTDIR = Path(__file__).resolve().parent
|
||||
REPODIR = CURRENTDIR.parent
|
||||
ASSET_DIR = CURRENTDIR / "assets"
|
||||
CONFIG_DIR = CURRENTDIR / "config"
|
||||
LIEF_S3_KEY = os.getenv("LIEF_S3_KEY", None)
|
||||
LIEF_S3_SECRET = os.getenv("LIEF_S3_SECRET", None)
|
||||
OWNED_ORGS = ["lief-project/", "romainthomas/"]
|
||||
RELEASE_KEYWRD = "release-"
|
||||
|
||||
def get_branch(ci):
|
||||
if ci == CI.TRAVIS:
|
||||
return os.getenv("TRAVIS_BRANCH")
|
||||
elif ci == CI.APPVEYOR:
|
||||
return os.getenv("APPVEYOR_REPO_BRANCH")
|
||||
elif ci == CI.CIRCLE_CI:
|
||||
return os.getenv("CIRCLE_BRANCH")
|
||||
elif ci == CI.GITHUB_ACTIONS:
|
||||
return os.getenv("GITHUB_REF").replace("refs/heads/", "")
|
||||
elif ci == CI.LOCAL:
|
||||
return os.getenv("CI_BRANCH")
|
||||
return None
|
||||
|
||||
def get_ci_workdir(ci):
|
||||
if ci == CI.CIRCLE_CI:
|
||||
return os.getenv("CIRCLE_WORKING_DIRECTORY")
|
||||
elif ci == CI.TRAVIS:
|
||||
return os.getenv("TRAVIS_BUILD_DIR")
|
||||
elif ci == CI.APPVEYOR:
|
||||
return os.getenv("APPVEYOR_BUILD_FOLDER")
|
||||
elif ci == CI.GITHUB_ACTIONS:
|
||||
return os.getenv("GITHUB_WORKSPACE")
|
||||
elif ci == CI.LOCAL:
|
||||
return os.getenv("CI_WORKING_DIR")
|
||||
else:
|
||||
logger.critical("Unsupported CI to resolve working directory")
|
||||
sys.exit(1)
|
||||
|
||||
def get_tag(ci):
|
||||
if ci == CI.CIRCLE_CI:
|
||||
return os.getenv("CIRCLE_TAG", "")
|
||||
elif ci == CI.TRAVIS:
|
||||
return os.getenv("TRAVIS_TAG", "")
|
||||
elif ci == CI.APPVEYOR:
|
||||
if "APPVEYOR_REPO_TAG_NAME" in os.environ:
|
||||
return os.getenv("APPVEYOR_REPO_TAG_NAME", "")
|
||||
elif ci == CI.GITHUB_ACTIONS:
|
||||
ref = os.getenv("GITHUB_REF", "")
|
||||
logger.info("Github Action tag: {}".format(ref))
|
||||
if ref.startswith("refs/tags/"):
|
||||
return ref.replace("refs/tags/", "")
|
||||
return ""
|
||||
elif ci == CI.LOCAL:
|
||||
return os.getenv("CI_TAG")
|
||||
else:
|
||||
logger.critical("Unsupported CI to resolve working directory")
|
||||
sys.exit(1)
|
||||
|
||||
LOG_LEVEL = logging.DEBUG
|
||||
DEFAULT_CONFIG = CONFIG_DIR / "gh-ci.toml"
|
||||
DEFAULT_TEMPLATE = (ASSET_DIR / "index.j2").read_text()
|
||||
|
||||
logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))
|
||||
logging.getLogger().setLevel(LOG_LEVEL)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
CURRENT_CI = CI.UNKNOWN
|
||||
if LIEF_S3_KEY is None or len(LIEF_S3_KEY) == 0:
|
||||
logger.error("LIEF_S3_KEY is not set!")
|
||||
|
||||
# Detect CI
|
||||
# ===========================================
|
||||
if os.getenv("TRAVIS", None) is not None:
|
||||
CURRENT_CI = CI.TRAVIS
|
||||
elif os.getenv("APPVEYOR", None) is not None:
|
||||
CURRENT_CI = CI.APPVEYOR
|
||||
elif os.getenv("GITHUB_ACTIONS", None) is not None:
|
||||
CURRENT_CI = CI.GITHUB_ACTIONS
|
||||
elif os.getenv("GITLAB_CI", None) is not None:
|
||||
CURRENT_CI = CI.GITLAB_CI
|
||||
elif os.getenv("CI_LOCAL", "") == "true":
|
||||
CURRENT_CI = CI.LOCAL
|
||||
else:
|
||||
logger.error("Can't detect CI!")
|
||||
sys.exit(1)
|
||||
# TODO(romain): Azure
|
||||
if LIEF_S3_SECRET is None or len(LIEF_S3_SECRET) == 0:
|
||||
logger.error("LIEF_S3_SECRET is not set!")
|
||||
|
||||
CI_PRETTY_NAME = pretty_ci_name(CURRENT_CI)
|
||||
logger.info("CI: %s", CI_PRETTY_NAME)
|
||||
class S3Manager:
|
||||
def __init__(self, dirname: str, bucket: str,
|
||||
region: str, endpoint: str,
|
||||
dry_run: bool = False):
|
||||
self._s3_dirname: str = dirname
|
||||
self._s3_bucket: str = bucket
|
||||
self._s3_region: str = region
|
||||
self._s3_endpoint: str = endpoint
|
||||
self._dry_run: bool = dry_run
|
||||
|
||||
ALLOWED_BRANCHES = {"master", "deploy", "devel"}
|
||||
BRANCH_NAME = get_branch(CURRENT_CI)
|
||||
TAG_NAME = get_tag(CURRENT_CI)
|
||||
IS_TAGGED = len(TAG_NAME) > 0
|
||||
logger.info("Branch: %s", BRANCH_NAME)
|
||||
logger.info("Tag: %s", TAG_NAME)
|
||||
if BRANCH_NAME not in ALLOWED_BRANCHES and not IS_TAGGED:
|
||||
logger.info("Skip deployment for branch '%s'", BRANCH_NAME)
|
||||
sys.exit(0)
|
||||
logger.info("[S3] Bucket : %s", self._s3_bucket)
|
||||
logger.info("[S3] Region : %s", self._s3_region)
|
||||
logger.info("[S3] Endpoint: %s", self._s3_endpoint)
|
||||
logger.info("[S3] Dir : %s", self._s3_dirname)
|
||||
|
||||
if is_pr(CURRENT_CI):
|
||||
logger.info("Skip pull request")
|
||||
sys.exit(0)
|
||||
def change_dir(self, dirname: str):
|
||||
self._s3_dirname = dirname
|
||||
|
||||
CURRENTDIR = pathlib.Path(__file__).resolve().parent
|
||||
REPODIR = CURRENTDIR.parent
|
||||
@property
|
||||
def s3_lief_sdk(self) -> str:
|
||||
return f"{self._s3_dirname}/sdk"
|
||||
|
||||
DEPLOY_KEY = os.getenv("LIEF_AUTOMATIC_BUILDS_KEY", None)
|
||||
DEPLOY_IV = os.getenv("LIEF_AUTOMATIC_BUILDS_IV", None)
|
||||
@property
|
||||
def s3_lief_wheel(self) -> str:
|
||||
return f"{self._s3_dirname}/lief"
|
||||
|
||||
if DEPLOY_KEY is None or len(DEPLOY_KEY) == 0:
|
||||
logger.error("Deploy key is not set!")
|
||||
sys.exit(1)
|
||||
@property
|
||||
def url(self):
|
||||
return f"https://{self._s3_bucket}.s3-website.{self._s3_region}.scw.cloud/{self._s3_dirname}"
|
||||
|
||||
if DEPLOY_IV is None or len(DEPLOY_IV) == 0:
|
||||
logger.error("Deploy IV is not set!")
|
||||
sys.exit(1)
|
||||
@functools.lru_cache(maxsize=1)
|
||||
def s3(self) -> boto3.Session:
|
||||
s3_res = boto3.resource(
|
||||
's3',
|
||||
region_name=self._s3_region,
|
||||
use_ssl=True,
|
||||
endpoint_url=self._s3_endpoint,
|
||||
aws_access_key_id=LIEF_S3_KEY,
|
||||
aws_secret_access_key=LIEF_S3_SECRET
|
||||
)
|
||||
return s3_res
|
||||
|
||||
GIT_USER = "lief-{}-ci".format(CI_PRETTY_NAME)
|
||||
GIT_EMAIL = "lief@quarkslab.com"
|
||||
@classmethod
|
||||
def from_config(cls, config):
|
||||
pass
|
||||
|
||||
CI_CWD = pathlib.Path(get_ci_workdir(CURRENT_CI))
|
||||
def _s3_push(self, file: Path, dst: str):
|
||||
logger.info("Uploading %s to %s", file, dst)
|
||||
try:
|
||||
obj = self.s3().Object(self._s3_bucket, dst)
|
||||
if not self._dry_run:
|
||||
obj.put(Body=file.read_bytes())
|
||||
else:
|
||||
logger.info("[--] put: %s/%s - %s", self._s3_bucket, dst, file.as_posix())
|
||||
return 0
|
||||
except ClientError as e:
|
||||
logger.error("S3 push failed: %s", e)
|
||||
return 1
|
||||
|
||||
if CI_CWD is None:
|
||||
logger.debug("Can't resolve CI working dir")
|
||||
sys.exit(1)
|
||||
def push_wheel(self, file: str):
|
||||
wheel_file = Path(file)
|
||||
if not wheel_file.is_file():
|
||||
logger.error("'%s' is not a valid file!", wheel_file)
|
||||
return
|
||||
|
||||
LIEF_PACKAGE_REPO = "https://github.com/lief-project/packages.git"
|
||||
LIEF_PACKAGE_DIR = REPODIR / "deploy-packages"
|
||||
LIEF_PACKAGE_SSH_REPO = "git@github.com:lief-project/packages.git"
|
||||
SDK_PACKAGE_DIR = LIEF_PACKAGE_DIR / "sdk"
|
||||
PYPI_PACKAGE_DIR = LIEF_PACKAGE_DIR / "lief"
|
||||
JSON_PACKAGE = LIEF_PACKAGE_DIR / "packages.json"
|
||||
DIST_DIR = REPODIR / "dist"
|
||||
BUILD_DIR = REPODIR / "build"
|
||||
dst = f"{self.s3_lief_wheel}/{wheel_file.name}"
|
||||
self._s3_push(wheel_file, dst)
|
||||
|
||||
def push_sdk(self, file: str):
|
||||
sdk_path = Path(file)
|
||||
if not sdk_path.is_file():
|
||||
logger.error("'%s' is not a valid file!", sdk_path)
|
||||
return
|
||||
|
||||
dst = f"{self.s3_lief_sdk}/{sdk_path.name}"
|
||||
self._s3_push(sdk_path, dst)
|
||||
|
||||
def push_content(self, content: str, dst: str):
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
tmp_path = Path(tmp)
|
||||
index = tmp_path / "index.html"
|
||||
index.write_text(content)
|
||||
self._s3_push(index, dst)
|
||||
|
||||
def process_sdk_wheels(self, directory: Path, maxdepth: int = 0,
|
||||
depth: int = 0, recurse: bool = True):
|
||||
logger.info("Processing directory: %s", directory)
|
||||
for item in directory.iterdir():
|
||||
if item.is_dir() and recurse:
|
||||
if 0 < maxdepth < depth:
|
||||
logger.debug("Maximum iteration depth reached")
|
||||
else:
|
||||
self.process_sdk_wheels(item, maxdepth, depth + 1, recurse)
|
||||
elif item.is_file():
|
||||
extension = item.suffix
|
||||
if extension in (".zip", ".gz"):
|
||||
logger.info("[SDK ] Uploading '%s'", item.as_posix())
|
||||
self.push_sdk(item.as_posix())
|
||||
elif extension in (".whl", ):
|
||||
logger.info("[WHEEL] Uploading '%s'", item.as_posix())
|
||||
self.push_wheel(item.as_posix())
|
||||
|
||||
|
||||
logger.debug("Working directory: %s", CI_CWD)
|
||||
def upload_wheels_sdk(self, src_dir: Path, maxdepth: int):
|
||||
logger.info("Looking for wheels and sdk from: %s", src_dir)
|
||||
self.process_sdk_wheels(src_dir, maxdepth=maxdepth, recurse=True)
|
||||
|
||||
SSH_DIR = pathlib.Path("~/.ssh").expanduser().resolve()
|
||||
PYTHON = shutil.which("python")
|
||||
GIT = shutil.which("git")
|
||||
TAR = shutil.which("tar")
|
||||
OPENSSL = shutil.which("openssl")
|
||||
MV = shutil.which("mv")
|
||||
RM = shutil.which("rm")
|
||||
SSH_AGENT = shutil.which("ssh-agent")
|
||||
SSH_ADD = shutil.which("ssh-add")
|
||||
SSH_KEYSCAN = shutil.which("ssh-keyscan")
|
||||
wheels_index = self.generate_index(self.s3_lief_wheel,
|
||||
DEFAULT_TEMPLATE,
|
||||
skiplist=("index.html", ))
|
||||
|
||||
if DEPLOY_KEY is None:
|
||||
logger.error("Deploy key is not set!")
|
||||
sys.exit(1)
|
||||
sdk_index = self.generate_index(self.s3_lief_sdk, DEFAULT_TEMPLATE,
|
||||
skiplist=("index.html", ))
|
||||
|
||||
if DEPLOY_IV is None:
|
||||
logger.error("Deploy IV is not set!")
|
||||
sys.exit(1)
|
||||
self.push_content(wheels_index, f"{self.s3_lief_wheel}/index.html")
|
||||
self.push_content(sdk_index, f"{self.s3_lief_sdk}/index.html")
|
||||
|
||||
logger.info("Done!")
|
||||
logger.info("URL: %s/%s", self.url, "sdk")
|
||||
logger.info("URL: %s/%s", self.url, "lief")
|
||||
|
||||
def s3_list(self, dirname: str) -> list[Any]:
|
||||
if self._dry_run:
|
||||
return []
|
||||
return self.s3().Bucket(self._s3_bucket).objects.filter(Prefix=dirname)
|
||||
|
||||
def generate_index(self, dirname: str, template: str, skiplist=None):
|
||||
files = self.s3_list(dirname)
|
||||
selected_files = []
|
||||
for s3_object in files:
|
||||
filename = Path(s3_object.key).name
|
||||
if skiplist is not None and filename in skiplist:
|
||||
continue
|
||||
selected_files.append((s3_object.key, filename))
|
||||
return Template(template).render(files=selected_files)
|
||||
|
||||
class GithubDeploy:
|
||||
def __init__(self, branches: list[str],
|
||||
main_branches: list[str],
|
||||
default_dir: str,
|
||||
s3_manager: S3Manager):
|
||||
self.s3_manager: S3Manager = s3_manager
|
||||
|
||||
self._branches: list[str] = branches
|
||||
self._main_branches: list[str] = main_branches
|
||||
self._default_dir: str = default_dir
|
||||
|
||||
|
||||
#####################
|
||||
# Clone package repo
|
||||
#####################
|
||||
target_branch = "gh-pages"
|
||||
@classmethod
|
||||
def from_config(cls, config_file: Path):
|
||||
with open(config_file, "rb") as f:
|
||||
toml_config = tomli.load(f)
|
||||
|
||||
if BRANCH_NAME != "master":
|
||||
target_branch = "packages-{}".format(BRANCH_NAME.replace("/", "-").replace("_", "-"))
|
||||
if "lief" not in toml_config:
|
||||
logger.warning("Missing lief entries in '%s'", config_file)
|
||||
return None
|
||||
lief_conf = toml_config["lief"]
|
||||
|
||||
if IS_TAGGED:
|
||||
target_branch = str(TAG_NAME)
|
||||
if "s3" not in lief_conf:
|
||||
logger.warning("Missing lief.s3 entries in '%s'", config_file)
|
||||
return None
|
||||
|
||||
new_branch = False
|
||||
if not LIEF_PACKAGE_DIR.is_dir():
|
||||
cmd = "{} clone --branch={} -j8 --single-branch {} {}".format(GIT, target_branch, LIEF_PACKAGE_REPO, LIEF_PACKAGE_DIR)
|
||||
p = subprocess.Popen(cmd, shell=True, cwd=REPODIR, stderr=subprocess.STDOUT)
|
||||
p.wait()
|
||||
if "deploy" not in lief_conf:
|
||||
logger.warning("Missing lief.deploy entries in '%s'", config_file)
|
||||
return None
|
||||
|
||||
if p.returncode:
|
||||
cmd = "{} clone --branch=master -j8 --single-branch {} {}".format(GIT, LIEF_PACKAGE_REPO, LIEF_PACKAGE_DIR)
|
||||
pmaster = subprocess.Popen(cmd, shell=True, cwd=REPODIR, stderr=subprocess.STDOUT)
|
||||
pmaster.wait()
|
||||
if pmaster.returncode:
|
||||
branches = lief_conf["deploy"]["branches"]
|
||||
main_branches = lief_conf["deploy"]["main-branches"]
|
||||
default_dir = lief_conf["deploy"]["default-dir"]
|
||||
s3_config = lief_conf["s3"]
|
||||
s3_region = s3_config["region"]
|
||||
s3_bucket = s3_config["bucket"]
|
||||
s3_endpoint = s3_config["endpoint"]
|
||||
|
||||
s3_manager = S3Manager(default_dir, s3_bucket, s3_region, s3_endpoint)
|
||||
return cls(branches, main_branches, default_dir, s3_manager)
|
||||
|
||||
@staticmethod
|
||||
def branch() -> Optional[str]:
|
||||
ref = os.getenv("GITHUB_REF")
|
||||
if ref is None:
|
||||
return None
|
||||
return ref.replace("refs/heads/", "")
|
||||
|
||||
@staticmethod
|
||||
def is_pr() -> bool:
|
||||
head_ref = os.getenv("GITHUB_HEAD_REF", "")
|
||||
repo_path = os.getenv("GITHUB_REPOSITORY", "")
|
||||
is_owned_repo = any(repo_path.startswith(org) for org in OWNED_ORGS)
|
||||
return head_ref != "" or not is_owned_repo
|
||||
|
||||
@staticmethod
|
||||
def is_tagged() -> bool:
|
||||
tag = GithubDeploy.tag_name()
|
||||
return tag is not None and len(tag) > 0
|
||||
|
||||
@staticmethod
|
||||
def tag_name() -> Optional[str]:
|
||||
ref = os.getenv("GITHUB_REF", "")
|
||||
logger.info("Github Action tag: %s", ref)
|
||||
if ref.startswith("refs/tags/"):
|
||||
return ref.replace("refs/tags/", "")
|
||||
return ""
|
||||
|
||||
@staticmethod
|
||||
def workspace() -> str:
|
||||
return os.getenv("GITHUB_WORKSPACE", "")
|
||||
|
||||
def is_main_branch(self, name: str) -> bool:
|
||||
return name in self._main_branches
|
||||
|
||||
def deploy(self, directories: list[str]):
|
||||
s3dir = None
|
||||
if GithubDeploy.is_tagged():
|
||||
s3dir = GithubDeploy.tag_name()
|
||||
else:
|
||||
branch = GithubDeploy.branch()
|
||||
if branch is None:
|
||||
logger.warning("Can't resolve the branch name")
|
||||
sys.exit(1)
|
||||
|
||||
if branch.startswith(RELEASE_KEYWRD):
|
||||
_, s3dir = branch.split(RELEASE_KEYWRD)
|
||||
elif self.is_main_branch(branch):
|
||||
s3dir = self._default_dir
|
||||
else:
|
||||
s3dir = branch.replace("/", "-").replace("_", "-")
|
||||
if s3dir is None:
|
||||
logger.error("Target directory is not set")
|
||||
sys.exit(1)
|
||||
new_branch = True
|
||||
logger.info("s3dir: %s", s3dir)
|
||||
self.s3_manager.change_dir(s3dir)
|
||||
for dirname in directories:
|
||||
dirpath = Path(dirname).resolve().absolute().expanduser()
|
||||
self.s3_manager.upload_wheels_sdk(dirpath, maxdepth=1)
|
||||
|
||||
cmd = "{} checkout --orphan {}".format(GIT, target_branch)
|
||||
pmaster = subprocess.Popen(cmd, shell=True, cwd=LIEF_PACKAGE_DIR, stderr=subprocess.STDOUT)
|
||||
pmaster.wait()
|
||||
if pmaster.returncode:
|
||||
sys.exit(1)
|
||||
def main():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--config", "-c")
|
||||
parser.add_argument("--dry-run", "-n", action="store_true", default=False)
|
||||
parser.add_argument("directories", nargs="+")
|
||||
|
||||
cmd = "{} reset --hard".format(GIT)
|
||||
pmaster = subprocess.Popen(cmd, shell=True, cwd=LIEF_PACKAGE_DIR, stderr=subprocess.STDOUT)
|
||||
pmaster.wait()
|
||||
args = parser.parse_args()
|
||||
config_path = None
|
||||
if args.config is not None:
|
||||
config_path = Path(args.config)
|
||||
else:
|
||||
config_path = DEFAULT_CONFIG
|
||||
|
||||
SDK_PACKAGE_DIR.mkdir(exist_ok=True)
|
||||
PYPI_PACKAGE_DIR.mkdir(exist_ok=True)
|
||||
|
||||
packages_info = {}
|
||||
new_packages_info = {}
|
||||
if JSON_PACKAGE.is_file():
|
||||
try:
|
||||
packages_info = json.loads(JSON_PACKAGE.read_bytes())
|
||||
except json.decoder.JSONDecodeError as e:
|
||||
logger.error(e)
|
||||
else:
|
||||
JSON_PACKAGE.touch()
|
||||
|
||||
logger.info("CI: %s - %s", GIT_USER, GIT_EMAIL)
|
||||
cmds = [
|
||||
"{} config user.name '{}'".format(GIT, GIT_USER),
|
||||
"{} config user.email '{}'".format(GIT, GIT_EMAIL),
|
||||
"{} reset --soft root".format(GIT),
|
||||
"{} ls-files -v".format(GIT),
|
||||
]
|
||||
|
||||
for cmd in cmds:
|
||||
p = subprocess.Popen(cmd, shell=True, cwd=LIEF_PACKAGE_DIR, stderr=subprocess.STDOUT)
|
||||
p.wait()
|
||||
|
||||
if p.returncode:
|
||||
if not config_path.is_file():
|
||||
logger.error("'%s' is not a valid config path")
|
||||
sys.exit(1)
|
||||
|
||||
for file in DIST_DIR.glob("*.whl"):
|
||||
logger.debug("Copying '%s' to '%s'", file.as_posix(), PYPI_PACKAGE_DIR.as_posix())
|
||||
new_packages_info[file.name] = datetime.now().strftime('%Y-%m-%d-%H:%M:%S')
|
||||
shutil.copy(file.as_posix(), PYPI_PACKAGE_DIR.as_posix())
|
||||
|
||||
for file in BUILD_DIR.glob("*.zip"):
|
||||
logger.debug("Copying '%s' to '%s'", file.as_posix(), SDK_PACKAGE_DIR.as_posix())
|
||||
new_packages_info[file.name] = datetime.now().strftime('%Y-%m-%d-%H:%M:%S')
|
||||
shutil.copy(file.as_posix(), SDK_PACKAGE_DIR.as_posix())
|
||||
|
||||
for file in BUILD_DIR.glob("*.tar.gz"):
|
||||
logger.debug("Copying '%s' to '%s'", file.as_posix(), SDK_PACKAGE_DIR.as_posix())
|
||||
new_packages_info[file.name] = datetime.now().strftime('%Y-%m-%d-%H:%M:%S')
|
||||
shutil.copy(file.as_posix(), SDK_PACKAGE_DIR.as_posix())
|
||||
|
||||
for k, v in new_packages_info.items():
|
||||
logger.info("{:<30}: {}".format(k, v))
|
||||
|
||||
try:
|
||||
packages_info.update(new_packages_info)
|
||||
JSON_PACKAGE.write_text(json.dumps(packages_info))
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
|
||||
INDEX_TEMPLATE = r"""
|
||||
<html>
|
||||
<title>Links for lief</title>
|
||||
<body>
|
||||
<h1>Links for lief</h1>
|
||||
% for name in names:
|
||||
<a href="${base_url}/${base}/${name}">${name}</a><br />
|
||||
% endfor
|
||||
</body>
|
||||
</html>
|
||||
"""
|
||||
|
||||
EXCLUDED = ['index.html', '.gitkeep']
|
||||
BASE_URL = "https://lief-project.github.io"
|
||||
|
||||
fnames = [fname for fname in sorted(f.name for f in PYPI_PACKAGE_DIR.iterdir() if f.is_file() and f.name not in EXCLUDED)]
|
||||
html = Template(INDEX_TEMPLATE).render(names=fnames, base_url=BASE_URL, base="packages/lief")
|
||||
with open((PYPI_PACKAGE_DIR / "index.html").as_posix(), "w") as f:
|
||||
f.write(html)
|
||||
|
||||
|
||||
fnames = [fname for fname in sorted(f.name for f in SDK_PACKAGE_DIR.iterdir() if f.is_file() and f.name not in EXCLUDED)]
|
||||
html = Template(INDEX_TEMPLATE).render(names=fnames, base_url=BASE_URL, base="packages/sdk")
|
||||
with open((SDK_PACKAGE_DIR / "index.html").as_posix(), "w") as f:
|
||||
f.write(html)
|
||||
|
||||
if not SSH_DIR.is_dir():
|
||||
SSH_DIR.mkdir(mode=0o700)
|
||||
|
||||
#fix_ssh_perms()
|
||||
deploy_key_path = (REPODIR / ".github" / "deploy-key.enc").as_posix()
|
||||
output_key_path = (REPODIR / ".git" / "deploy-key")
|
||||
cmd = "{} aes-256-cbc -K {} -iv {} -in {} -out {} -d".format(
|
||||
OPENSSL, DEPLOY_KEY, DEPLOY_IV, deploy_key_path, output_key_path.as_posix())
|
||||
|
||||
kwargs = {
|
||||
'shell': True,
|
||||
'cwd': REPODIR,
|
||||
'stdout': subprocess.DEVNULL,
|
||||
'stderr': subprocess.DEVNULL,
|
||||
}
|
||||
|
||||
p = subprocess.Popen(cmd, **kwargs)
|
||||
p.wait()
|
||||
|
||||
if p.returncode:
|
||||
sys.exit(1)
|
||||
|
||||
output_key_path.chmod(0o600)
|
||||
logger.info(output_key_path)
|
||||
|
||||
process = subprocess.run(SSH_AGENT, stdout=subprocess.PIPE, universal_newlines=True, stderr=subprocess.STDOUT)
|
||||
OUTPUT_PATTERN = re.compile(r'SSH_AUTH_SOCK=(?P<socket>[^;]+).*SSH_AGENT_PID=(?P<pid>\d+)', re.MULTILINE | re.DOTALL)
|
||||
match = OUTPUT_PATTERN.search(process.stdout)
|
||||
if match is None:
|
||||
logger.error("Can't start ssh-agent")
|
||||
sys.exit(1)
|
||||
|
||||
agent_data = match.groupdict()
|
||||
logger.info(f'ssh agent data: {agent_data!s}')
|
||||
logger.info('Exporting ssh agent environment variables' )
|
||||
|
||||
os.environ['SSH_AUTH_SOCK'] = agent_data['socket']
|
||||
os.environ['SSH_AGENT_PID'] = agent_data['pid']
|
||||
|
||||
process = subprocess.run([SSH_ADD, output_key_path], stderr=subprocess.STDOUT)
|
||||
if process.returncode != 0:
|
||||
raise Exception(f'Failed to add the key: {output_key_path}')
|
||||
known_hosts = (SSH_DIR / "known_hosts").as_posix()
|
||||
cmd = "{} -H github.com >> {}".format(SSH_KEYSCAN, known_hosts)
|
||||
|
||||
kwargs = {
|
||||
'shell': True,
|
||||
'cwd': REPODIR,
|
||||
'stderr': subprocess.STDOUT,
|
||||
}
|
||||
|
||||
p = subprocess.Popen(cmd, **kwargs)
|
||||
p.wait()
|
||||
|
||||
if p.returncode:
|
||||
sys.exit(1)
|
||||
|
||||
commit_msg = 'Automatic deployment by {}'.format(CI_PRETTY_NAME)
|
||||
cmds = [
|
||||
"{} add .".format(GIT),
|
||||
"{} commit -m '{}'".format(GIT, commit_msg),
|
||||
"{} ls-files -v".format(GIT),
|
||||
]
|
||||
|
||||
for cmd in cmds:
|
||||
logger.info("Running %s", cmd)
|
||||
p = subprocess.Popen(cmd, shell=True, cwd=LIEF_PACKAGE_DIR, stderr=subprocess.STDOUT)
|
||||
p.wait()
|
||||
|
||||
if p.returncode:
|
||||
logger.error("Error while running %s", cmd)
|
||||
sys.exit(1)
|
||||
|
||||
for i in range(10):
|
||||
p = subprocess.Popen("{} push --force {} {}".format(GIT, LIEF_PACKAGE_SSH_REPO, target_branch),
|
||||
shell=True, cwd=LIEF_PACKAGE_DIR, stderr=subprocess.STDOUT)
|
||||
p.wait()
|
||||
|
||||
if p.returncode == 0:
|
||||
break
|
||||
|
||||
cmds = [
|
||||
"{} branch -a -v".format(GIT),
|
||||
"{} fetch -v origin {}".format(GIT, target_branch),
|
||||
"{} branch -a -v".format(GIT),
|
||||
"{} rebase -s recursive -X theirs FETCH_HEAD".format(GIT),
|
||||
"{} branch -a -v".format(GIT),
|
||||
]
|
||||
for c in cmds:
|
||||
p = subprocess.Popen(c, shell=True, cwd=LIEF_PACKAGE_DIR, stderr=subprocess.STDOUT)
|
||||
p.wait()
|
||||
else:
|
||||
logger.critical("Can't push file on %s -> %s", LIEF_PACKAGE_SSH_REPO, target_branch)
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
output_key_path.unlink()
|
||||
logger.info("Done!")
|
||||
gh_deploy = GithubDeploy.from_config(config_path)
|
||||
gh_deploy.deploy(args.directories)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
sys.exit(0)
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 137 KiB After Width: | Height: | Size: 73 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 171 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 110 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 84 KiB |
@@ -1,63 +1,79 @@
|
||||
name: 'Android'
|
||||
on: push
|
||||
on: workflow_dispatch
|
||||
|
||||
jobs:
|
||||
build-and-deploy:
|
||||
build-sdk:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
arch: ['arm', 'arm64']
|
||||
fail-fast: false
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Get Date
|
||||
id: get-date
|
||||
run: |
|
||||
echo "::set-output name=date::$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")"
|
||||
echo "date=$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")" >> $GITHUB_OUTPUT
|
||||
shell: bash
|
||||
- name: ccache cache files
|
||||
uses: actions/cache@v1.1.0
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/.ccache
|
||||
key: android-${{ runner.os }}-${{ steps.get-date.outputs.date }}
|
||||
key: android-${{ runner.os }}-${{ matrix.arch }}-${{ steps.get-date.outputs.date }}
|
||||
restore-keys: |
|
||||
android-${{ runner.os }}-
|
||||
- name: Build ARM SDK
|
||||
android-${{ runner.os }}-${{ matrix.arch }}
|
||||
- name: Build SDK [${{ matrix.arch }}]
|
||||
shell: bash
|
||||
env:
|
||||
ARCH: ${{ matrix.arch }}
|
||||
run: |
|
||||
docker run \
|
||||
-e CCACHE_COMPRESS=1 \
|
||||
-e CCACHE_MAXSIZE=10.0G \
|
||||
-e CCACHE_CPP2=1 \
|
||||
-e CCACHE_DIR=/ccache \
|
||||
docker run \
|
||||
-e CCACHE_COMPRESS=1 \
|
||||
-e CCACHE_MAXSIZE=10.0G \
|
||||
-e CCACHE_CPP2=1 \
|
||||
-e CCACHE_DIR=/ccache \
|
||||
-v $GITHUB_WORKSPACE:/work \
|
||||
-v $HOME/.ccache:/ccache \
|
||||
--rm liefproject/android-arm bash /work/scripts/docker/android-arm.sh
|
||||
- name: Build AArch64 SDK
|
||||
shell: bash
|
||||
run: |
|
||||
docker run \
|
||||
-e CCACHE_COMPRESS=1 \
|
||||
-e CCACHE_MAXSIZE=10.0G \
|
||||
-e CCACHE_CPP2=1 \
|
||||
-e CCACHE_DIR=/ccache \
|
||||
-v $GITHUB_WORKSPACE:/work \
|
||||
-v $HOME/.ccache:/ccache \
|
||||
--rm liefproject/android-arm64 bash /work/scripts/docker/android-aarch64.sh
|
||||
-v $HOME/.ccache:/ccache \
|
||||
--rm liefproject/android-${ARCH} bash /work/scripts/docker/android-${ARCH}.sh
|
||||
- name: 'Upload Artifact'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: android-sdk-${{ matrix.arch }}
|
||||
path: build/*.tar.gz
|
||||
retention-days: 3
|
||||
deploy:
|
||||
if: ${{ always() }}
|
||||
runs-on: ubuntu-latest
|
||||
needs: build-sdk
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
path: ${{ runner.temp }}/artifacts
|
||||
- name: Display artifacts
|
||||
run: ls -R
|
||||
working-directory: ${{ runner.temp }}/artifacts
|
||||
- name: Deploy
|
||||
env:
|
||||
LIEF_AUTOMATIC_BUILDS_KEY: ${{ secrets.LIEF_AUTOMATIC_BUILDS_KEY }}
|
||||
LIEF_AUTOMATIC_BUILDS_IV: ${{ secrets.LIEF_AUTOMATIC_BUILDS_IV }}
|
||||
LIEF_S3_KEY: ${{ secrets.LIEF_S3_KEY }}
|
||||
LIEF_S3_SECRET: ${{ secrets.LIEF_S3_SECRET }}
|
||||
shell: bash
|
||||
run: |
|
||||
docker run \
|
||||
-v $GITHUB_WORKSPACE:/src \
|
||||
-e GITHUB_ACTIONS="true" \
|
||||
-e GITHUB_WORKSPACE=$GITHUB_WORKSPACE \
|
||||
-e GITHUB_REF=$GITHUB_REF \
|
||||
docker run --rm \
|
||||
-v $GITHUB_WORKSPACE:/src \
|
||||
-v $RUNNER_TEMP:/runner_tmp \
|
||||
-e GITHUB_ACTIONS="true" \
|
||||
-e GITHUB_WORKSPACE=$GITHUB_WORKSPACE \
|
||||
-e GITHUB_REF=$GITHUB_REF \
|
||||
-e GITHUB_REPOSITORY=$GITHUB_REPOSITORY \
|
||||
-e LIEF_AUTOMATIC_BUILDS_KEY=$LIEF_AUTOMATIC_BUILDS_KEY \
|
||||
-e LIEF_AUTOMATIC_BUILDS_IV=$LIEF_AUTOMATIC_BUILDS_IV \
|
||||
--rm \
|
||||
liefproject/deploy python3 /src/.github/deploy.py
|
||||
-e LIEF_S3_KEY=$LIEF_S3_KEY \
|
||||
-e LIEF_S3_SECRET=$LIEF_S3_SECRET \
|
||||
liefproject/deploy python3 /src/.github/deploy.py /runner_tmp/artifacts
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
name: code-check
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
branch:
|
||||
description: 'LIEF branch'
|
||||
default: 'master'
|
||||
required: false
|
||||
type: string
|
||||
push:
|
||||
branches:
|
||||
- test/code-check
|
||||
jobs:
|
||||
coverage:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: liefproject/code-check
|
||||
env:
|
||||
LIEF_S3_KEY: ${{ secrets.LIEF_S3_KEY }}
|
||||
LIEF_S3_SECRET: ${{ secrets.LIEF_S3_SECRET }}
|
||||
GH_BRANCH: ${{ inputs.branch }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
repository: lief-project/code-check
|
||||
token: ${{ secrets.LIEF_CLONE_TOKEN }}
|
||||
- name: Print info
|
||||
run: |
|
||||
echo ${GH_BRANCH}
|
||||
- name: Running LIEF coverage
|
||||
run: ./lief-coverage --debug
|
||||
+47
-15
@@ -1,17 +1,20 @@
|
||||
name: 'iOS'
|
||||
on: push
|
||||
on: workflow_dispatch
|
||||
|
||||
env:
|
||||
python-version: '3.10'
|
||||
|
||||
jobs:
|
||||
osx-sdk:
|
||||
ios-sdk:
|
||||
runs-on: macos-11.0
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Set up Python 3.9
|
||||
uses: actions/setup-python@v2
|
||||
- name: Set up Python ${{ env.python-version }}
|
||||
uses: actions/setup-python@v3
|
||||
with:
|
||||
python-version: 3.9
|
||||
python-version: ${{ env.python-version }}
|
||||
- name: Install system dependencies
|
||||
run: |
|
||||
brew install cmake ninja ccache
|
||||
@@ -19,36 +22,65 @@ jobs:
|
||||
- name: Get Date
|
||||
id: get-date
|
||||
run: |
|
||||
echo "::set-output name=date::$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")"
|
||||
echo "date=$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")" >> $GITHUB_OUTPUT
|
||||
shell: bash
|
||||
- name: Setup cache dir
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir -p ~/.ccache
|
||||
- name: ccache cache files
|
||||
uses: actions/cache@v1.1.0
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/.ccache
|
||||
path: ${{ runner.temp }}/.ccache
|
||||
key: ios-${{ runner.os }}-${{ steps.get-date.outputs.date }}
|
||||
restore-keys: |
|
||||
ios-${{ runner.os }}-
|
||||
ios-${{ runner.os }}
|
||||
- name: Build iOS SDK
|
||||
shell: bash
|
||||
env:
|
||||
CCACHE_DIR: ~/.ccache
|
||||
CCACHE_DIR: ${{ runner.temp }}/.ccache
|
||||
CCACHE_MAXSIZE: 10.0G
|
||||
CCACHE_CPP2: 1
|
||||
CCACHE_COMPRESS: 1
|
||||
run: |
|
||||
bash scripts/osx/package_ios.sh
|
||||
- name: 'Upload Artifact'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: ios-sdk
|
||||
path: build/*.tar.gz
|
||||
retention-days: 3
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ always() }}
|
||||
needs: ios-sdk
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
path: ${{ runner.temp }}/artifacts
|
||||
- name: Display artifacts
|
||||
run: ls -R
|
||||
working-directory: ${{ runner.temp }}/artifacts
|
||||
- name: Deploy
|
||||
env:
|
||||
LIEF_AUTOMATIC_BUILDS_KEY: ${{ secrets.LIEF_AUTOMATIC_BUILDS_KEY }}
|
||||
LIEF_AUTOMATIC_BUILDS_IV: ${{ secrets.LIEF_AUTOMATIC_BUILDS_IV }}
|
||||
LIEF_S3_KEY: ${{ secrets.LIEF_S3_KEY }}
|
||||
LIEF_S3_SECRET: ${{ secrets.LIEF_S3_SECRET }}
|
||||
shell: bash
|
||||
run: |
|
||||
python -m pip install --upgrade requests mako
|
||||
python .github/deploy.py
|
||||
docker run --rm \
|
||||
-v $GITHUB_WORKSPACE:/src \
|
||||
-v $RUNNER_TEMP:/runner_tmp \
|
||||
-e GITHUB_ACTIONS="true" \
|
||||
-e GITHUB_WORKSPACE=$GITHUB_WORKSPACE \
|
||||
-e GITHUB_REF=$GITHUB_REF \
|
||||
-e GITHUB_REPOSITORY=$GITHUB_REPOSITORY \
|
||||
-e LIEF_S3_KEY=$LIEF_S3_KEY \
|
||||
-e LIEF_S3_SECRET=$LIEF_S3_SECRET \
|
||||
liefproject/deploy python3 /src/.github/deploy.py /runner_tmp/artifacts
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,71 +1,129 @@
|
||||
name: 'Linux AArch64'
|
||||
on: push
|
||||
on: workflow_dispatch
|
||||
|
||||
jobs:
|
||||
linux-sdk:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: [3.7, 3.8, 3.9]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Get Date
|
||||
id: get-date
|
||||
run: |
|
||||
echo "::set-output name=date::$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")"
|
||||
echo "date=$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")" >> $GITHUB_OUTPUT
|
||||
shell: bash
|
||||
- name: ccache cache files
|
||||
uses: actions/cache@v1.1.0
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/.ccache
|
||||
key: linux-aarch64-${{ runner.os }}-${{ steps.get-date.outputs.date }}
|
||||
key: linux-aarch64-${{ runner.os }}-sdk-${{ steps.get-date.outputs.date }}
|
||||
restore-keys: |
|
||||
linux-aarch64-${{ runner.os }}-
|
||||
linux-aarch64-${{ runner.os }}-sdk
|
||||
- name: Build SDK
|
||||
if: matrix.python-version == '3.9'
|
||||
shell: bash
|
||||
run: |
|
||||
docker run \
|
||||
-e CCACHE_COMPRESS=1 \
|
||||
-e CCACHE_MAXSIZE=10.0G \
|
||||
-e CCACHE_CPP2=1 \
|
||||
-e CCACHE_DIR=/ccache \
|
||||
-v $GITHUB_WORKSPACE:/work \
|
||||
-v $HOME/.ccache:/ccache \
|
||||
--rm liefproject/manylinux2014-aarch64 bash /work/scripts/docker/linux-aarch64.sh
|
||||
- name: Build Python ${{ matrix.python-version }} wheel
|
||||
mkdir -p $RUNNER_TEMP/lief-install
|
||||
docker run --name lief_sdk --rm \
|
||||
-e CCACHE_COMPRESS=1 \
|
||||
-e CCACHE_MAXSIZE=10.0G \
|
||||
-e CCACHE_DIR=/ccache \
|
||||
-v $GITHUB_WORKSPACE:/work \
|
||||
-v $RUNNER_TEMP/lief-install:/install \
|
||||
-v $HOME/.ccache:/ccache \
|
||||
liefproject/manylinux2014-aarch64 bash /work/scripts/docker/linux-aarch64.sh
|
||||
- name: 'Upload SDK Artifact'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: linux-aarch64-sdk
|
||||
path: build/*.tar.gz
|
||||
retention-days: 3
|
||||
- name: 'Upload Install Artifact'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: linux-aarch64-install
|
||||
path: ${{ runner.temp }}/lief-install
|
||||
retention-days: 1
|
||||
wheels:
|
||||
runs-on: ubuntu-latest
|
||||
needs: linux-sdk
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: [3.8, 3.9, '3.10', '3.11']
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Get Date
|
||||
id: get-date
|
||||
run: |
|
||||
echo "date=$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")" >> $GITHUB_OUTPUT
|
||||
shell: bash
|
||||
- name: ccache cache files
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/.ccache
|
||||
key: linux-aarch64-${{ runner.os }}-${{ matrix.python-version }}-${{ steps.get-date.outputs.date }}
|
||||
restore-keys: |
|
||||
linux-aarch64-${{ runner.os }}-${{ matrix.python-version }}
|
||||
- name: Download LIEF install dir
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: linux-aarch64-install
|
||||
path: ${{ runner.temp }}/lief-install
|
||||
- name: Python ${{ matrix.python-version }} -- Wheel
|
||||
shell: bash
|
||||
env:
|
||||
PYTHON_VERSION: ${{ matrix.python-version }}
|
||||
run: |
|
||||
PYTHON_VERSION2=$(echo "${PYTHON_VERSION}" | sed 's/\.//') # Transform 3.8 -> 38
|
||||
docker run \
|
||||
-e CCACHE_COMPRESS=1 \
|
||||
-e CCACHE_MAXSIZE=10.0G \
|
||||
-e CCACHE_CPP2=1 \
|
||||
-e CCACHE_DIR=/ccache \
|
||||
-e PYTHON_BINARY=/opt/python/cp${PYTHON_VERSION2}-cp${PYTHON_VERSION2}/bin/python${PYTHON_VERSION} \
|
||||
-v $GITHUB_WORKSPACE:/work \
|
||||
-v $HOME/.ccache:/ccache \
|
||||
--rm liefproject/manylinux2014-aarch64 bash /work/scripts/docker/manylinux2014-aarch64.sh
|
||||
PYTHON_VERSION_ALT=$(echo "${PYTHON_VERSION}" | sed 's/\.//') # Transform 3.8 -> 38
|
||||
docker run --rm \
|
||||
-e CCACHE_COMPRESS=1 \
|
||||
-e CCACHE_MAXSIZE=10.0G \
|
||||
-e CCACHE_CPP2=1 \
|
||||
-e CCACHE_DIR=/ccache \
|
||||
-e PYTHON_VERSION=$PYTHON_VERSION_ALT \
|
||||
-e PYTHON_BINARY=/opt/python/cp${PYTHON_VERSION_ALT}-cp${PYTHON_VERSION_ALT}/bin/python${PYTHON_VERSION} \
|
||||
-v $GITHUB_WORKSPACE:/work \
|
||||
-v $HOME/.ccache:/ccache \
|
||||
-v $RUNNER_TEMP/lief-install:/install \
|
||||
liefproject/manylinux2014-aarch64 bash /work/scripts/docker/manylinux2014-aarch64.sh
|
||||
- name: 'Artifact'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: linux-aarch64-python${{ matrix.python-version }}-wheel
|
||||
path: dist/*.whl
|
||||
retention-days: 3
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ always() }}
|
||||
needs: [linux-sdk, wheels]
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
path: ${{ runner.temp }}/artifacts
|
||||
- name: Display artifacts
|
||||
run: ls -R
|
||||
working-directory: ${{ runner.temp }}/artifacts
|
||||
- name: Deploy
|
||||
env:
|
||||
LIEF_AUTOMATIC_BUILDS_KEY: ${{ secrets.LIEF_AUTOMATIC_BUILDS_KEY }}
|
||||
LIEF_AUTOMATIC_BUILDS_IV: ${{ secrets.LIEF_AUTOMATIC_BUILDS_IV }}
|
||||
LIEF_S3_KEY: ${{ secrets.LIEF_S3_KEY }}
|
||||
LIEF_S3_SECRET: ${{ secrets.LIEF_S3_SECRET }}
|
||||
shell: bash
|
||||
run: |
|
||||
docker run \
|
||||
-v $GITHUB_WORKSPACE:/src \
|
||||
-e GITHUB_ACTIONS="true" \
|
||||
-e GITHUB_WORKSPACE=$GITHUB_WORKSPACE \
|
||||
-e GITHUB_REF=$GITHUB_REF \
|
||||
-e GITHUB_REPOSITORY=$GITHUB_REPOSITORY \
|
||||
-e LIEF_AUTOMATIC_BUILDS_KEY=$LIEF_AUTOMATIC_BUILDS_KEY \
|
||||
-e LIEF_AUTOMATIC_BUILDS_IV=$LIEF_AUTOMATIC_BUILDS_IV \
|
||||
--rm \
|
||||
liefproject/deploy python3 /src/.github/deploy.py
|
||||
|
||||
docker run --rm \
|
||||
-v $GITHUB_WORKSPACE:/src \
|
||||
-v $RUNNER_TEMP:/runner_tmp \
|
||||
-e GITHUB_ACTIONS="true" \
|
||||
-e GITHUB_WORKSPACE=$GITHUB_WORKSPACE \
|
||||
-e GITHUB_REF=$GITHUB_REF \
|
||||
-e GITHUB_REPOSITORY=$GITHUB_REPOSITORY \
|
||||
-e LIEF_S3_KEY=$LIEF_S3_KEY \
|
||||
-e LIEF_S3_SECRET=$LIEF_S3_SECRET \
|
||||
liefproject/deploy python3 /src/.github/deploy.py /runner_tmp/artifacts
|
||||
|
||||
|
||||
|
||||
@@ -1,101 +1,177 @@
|
||||
name: 'Linux x86-64'
|
||||
on: push
|
||||
on: workflow_dispatch
|
||||
|
||||
jobs:
|
||||
linux-sdk:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: [3.7, 3.8, 3.9]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Get Date
|
||||
id: get-date
|
||||
run: |
|
||||
echo "::set-output name=date::$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")"
|
||||
echo "date=$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")" >> $GITHUB_OUTPUT
|
||||
shell: bash
|
||||
- name: ccache cache files
|
||||
uses: actions/cache@v1.1.0
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/.ccache
|
||||
key: linux-x86-64-${{ runner.os }}-${{ steps.get-date.outputs.date }}
|
||||
key: linux-x86-64-${{ runner.os }}-sdk-${{ steps.get-date.outputs.date }}
|
||||
restore-keys: |
|
||||
linux-x86-64-${{ runner.os }}-
|
||||
- name: Build Python ${{ matrix.python-version }} wheel
|
||||
if: matrix.python-version == '3.7'
|
||||
shell: bash
|
||||
env:
|
||||
PYTHON_VERSION: ${{ matrix.python-version }}
|
||||
run: |
|
||||
PYTHON_VERSION2=$(echo "${PYTHON_VERSION}" | sed 's/\.//') # Transform 3.8 -> 38
|
||||
docker run --rm \
|
||||
-e CCACHE_COMPRESS=1 \
|
||||
-e CCACHE_MAXSIZE=10.0G \
|
||||
-e CCACHE_CPP2=1 \
|
||||
-e CCACHE_DIR=/ccache \
|
||||
-e PYTHON_BINARY=/opt/python/cp${PYTHON_VERSION2}-cp${PYTHON_VERSION2}m/bin/python${PYTHON_VERSION} \
|
||||
-v $GITHUB_WORKSPACE:/src \
|
||||
-v $HOME/.ccache:/ccache \
|
||||
liefproject/manylinux1_x86_64 bash /src/scripts/docker/travis-linux.sh
|
||||
- name: Build Python ${{ matrix.python-version }} wheel
|
||||
if: matrix.python-version != '3.7'
|
||||
shell: bash
|
||||
env:
|
||||
PYTHON_VERSION: ${{ matrix.python-version }}
|
||||
run: |
|
||||
PYTHON_VERSION2=$(echo "${PYTHON_VERSION}" | sed 's/\.//') # Transform 3.8 -> 38
|
||||
docker run --rm \
|
||||
-e CCACHE_COMPRESS=1 \
|
||||
-e CCACHE_MAXSIZE=10.0G \
|
||||
-e CCACHE_CPP2=1 \
|
||||
-e CCACHE_DIR=/ccache \
|
||||
-e PYTHON_BINARY=/opt/python/cp${PYTHON_VERSION2}-cp${PYTHON_VERSION2}/bin/python${PYTHON_VERSION} \
|
||||
-v $GITHUB_WORKSPACE:/src \
|
||||
-v $HOME/.ccache:/ccache \
|
||||
liefproject/manylinux1_x86_64 bash /src/scripts/docker/travis-linux.sh
|
||||
linux-x86-64-${{ runner.os }}-sdk
|
||||
- name: Build SDK
|
||||
if: matrix.python-version == '3.9'
|
||||
shell: bash
|
||||
run: |
|
||||
PYTHON_VERSION2=$(echo "${PYTHON_VERSION}" | sed 's/\.//') # Transform 3.8 -> 38
|
||||
docker run --name lief_sdk --rm \
|
||||
-e PYTHON_BINARY=/opt/python/cp${PYTHON_VERSION2}-cp${PYTHON_VERSION2}/bin/python${PYTHON_VERSION} \
|
||||
-e CCACHE_COMPRESS=1 \
|
||||
-e CCACHE_MAXSIZE=10.0G \
|
||||
-e CCACHE_DIR=/ccache \
|
||||
-v $GITHUB_WORKSPACE:/src \
|
||||
-v $HOME/.ccache:/ccache \
|
||||
liefproject/manylinux1_x86_64 bash /src/scripts/docker/travis-linux-sdk.sh
|
||||
mkdir -p $RUNNER_TEMP/lief-install
|
||||
docker run --name lief_sdk --rm \
|
||||
-e CCACHE_COMPRESS=1 \
|
||||
-e CCACHE_MAXSIZE=10.0G \
|
||||
-e CCACHE_DIR=/ccache \
|
||||
-v $GITHUB_WORKSPACE:/src \
|
||||
-v $RUNNER_TEMP/lief-install:/install \
|
||||
-v $HOME/.ccache:/ccache \
|
||||
liefproject/manylinux_2_28_x86_64 bash /src/scripts/docker/run_linux_sdk.sh
|
||||
- name: 'Upload SDK Artifact'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: linux-x86-64-sdk
|
||||
path: build/*.tar.gz
|
||||
retention-days: 3
|
||||
- name: 'Upload Install Artifact'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: linux-x86-64-install
|
||||
path: ${{ runner.temp }}/lief-install
|
||||
retention-days: 1
|
||||
testing:
|
||||
if: "!contains(github.event.commits[0].message, '[skip-test]')"
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Get Date
|
||||
id: get-date
|
||||
run: |
|
||||
echo "date=$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")" >> $GITHUB_OUTPUT
|
||||
shell: bash
|
||||
- name: ccache cache files
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/.ccache
|
||||
key: linux-x86-64-${{ runner.os }}-test-${{ steps.get-date.outputs.date }}
|
||||
restore-keys: |
|
||||
linux-x86-64-${{ runner.os }}-test
|
||||
- name: Python 3.8 -- Wheel & Test
|
||||
shell: bash
|
||||
env:
|
||||
PYTHON_VERSION: 38
|
||||
run: |
|
||||
docker run --rm \
|
||||
-e CCACHE_COMPRESS=1 \
|
||||
-e CCACHE_MAXSIZE=10.0G \
|
||||
-e CCACHE_CPP2=1 \
|
||||
-e CCACHE_DIR=/ccache \
|
||||
-e PYTHON_VERSION=$PYTHON_VERSION \
|
||||
-e PYTHON_BINARY=/opt/python/cp38-cp38/bin/python3.8 \
|
||||
-v $GITHUB_WORKSPACE:/src \
|
||||
-v $HOME/.ccache:/ccache \
|
||||
liefproject/manylinux_2_28_x86_64 bash /src/scripts/docker/run_linux_test.sh
|
||||
pywheels:
|
||||
runs-on: ubuntu-latest
|
||||
needs: linux-sdk
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: ['3.8', '3.9', '3.10', '3.11', '3.12']
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Get Date
|
||||
id: get-date
|
||||
run: |
|
||||
echo "date=$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")" >> $GITHUB_OUTPUT
|
||||
shell: bash
|
||||
- name: ccache cache files
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/.ccache
|
||||
key: linux-x86-64-${{ runner.os }}-${{ matrix.python-version }}-${{ steps.get-date.outputs.date }}
|
||||
restore-keys: |
|
||||
linux-x86-64-${{ runner.os }}-${{ matrix.python-version }}
|
||||
- name: Download LIEF install dir
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: linux-x86-64-install
|
||||
path: ${{ runner.temp }}/lief-install
|
||||
- name: Python ${{ matrix.python-version }} -- Wheel
|
||||
shell: bash
|
||||
env:
|
||||
PYTHON_VERSION: ${{ matrix.python-version }}
|
||||
run: |
|
||||
PYTHON_VERSION_ALT=$(echo "${PYTHON_VERSION}" | sed 's/\.//') # Transform 3.8 -> 38
|
||||
docker run --rm \
|
||||
-e CCACHE_COMPRESS=1 \
|
||||
-e CCACHE_MAXSIZE=10.0G \
|
||||
-e CCACHE_CPP2=1 \
|
||||
-e CCACHE_DIR=/ccache \
|
||||
-e PYTHON_VERSION=$PYTHON_VERSION_ALT \
|
||||
-e PYTHON_BINARY=/opt/python/cp${PYTHON_VERSION_ALT}-cp${PYTHON_VERSION_ALT}/bin/python${PYTHON_VERSION} \
|
||||
-v $GITHUB_WORKSPACE:/src \
|
||||
-v $HOME/.ccache:/ccache \
|
||||
-v $RUNNER_TEMP/lief-install:/install \
|
||||
liefproject/manylinux_2_28_x86_64 bash /src/scripts/docker/run_linux.sh
|
||||
- name: 'Artifact'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: linux-x86-64-python${{ matrix.python-version }}-wheel
|
||||
path: dist/*.whl
|
||||
retention-days: 3
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ always() }}
|
||||
needs: [linux-sdk, pywheels]
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
path: ${{ runner.temp }}/artifacts
|
||||
- name: Display artifacts
|
||||
run: ls -R
|
||||
working-directory: ${{ runner.temp }}/artifacts
|
||||
- name: Deploy
|
||||
env:
|
||||
LIEF_AUTOMATIC_BUILDS_KEY: ${{ secrets.LIEF_AUTOMATIC_BUILDS_KEY }}
|
||||
LIEF_AUTOMATIC_BUILDS_IV: ${{ secrets.LIEF_AUTOMATIC_BUILDS_IV }}
|
||||
LIEF_S3_KEY: ${{ secrets.LIEF_S3_KEY }}
|
||||
LIEF_S3_SECRET: ${{ secrets.LIEF_S3_SECRET }}
|
||||
shell: bash
|
||||
run: |
|
||||
docker run \
|
||||
-v $GITHUB_WORKSPACE:/src \
|
||||
-e GITHUB_ACTIONS="true" \
|
||||
-e GITHUB_WORKSPACE=$GITHUB_WORKSPACE \
|
||||
-e GITHUB_REF=$GITHUB_REF \
|
||||
-e GITHUB_REPOSITORY=$GITHUB_REPOSITORY \
|
||||
-e LIEF_AUTOMATIC_BUILDS_KEY=$LIEF_AUTOMATIC_BUILDS_KEY \
|
||||
-e LIEF_AUTOMATIC_BUILDS_IV=$LIEF_AUTOMATIC_BUILDS_IV \
|
||||
--rm \
|
||||
liefproject/deploy python3 /src/.github/deploy.py
|
||||
docker run --rm \
|
||||
-v $GITHUB_WORKSPACE:/src \
|
||||
-v $RUNNER_TEMP:/runner_tmp \
|
||||
-e GITHUB_ACTIONS="true" \
|
||||
-e GITHUB_WORKSPACE=$GITHUB_WORKSPACE \
|
||||
-e GITHUB_REF=$GITHUB_REF \
|
||||
-e GITHUB_REPOSITORY=$GITHUB_REPOSITORY \
|
||||
-e LIEF_S3_KEY=$LIEF_S3_KEY \
|
||||
-e LIEF_S3_SECRET=$LIEF_S3_SECRET \
|
||||
liefproject/deploy python3 /src/.github/deploy.py /runner_tmp/artifacts
|
||||
documentation:
|
||||
needs: [deploy]
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: liefproject/manylinux_2_28_x86_64
|
||||
env:
|
||||
CIRCLE_CI_URL: "https://circleci.com/api/v2/project/gh/lief-project/doc/pipeline"
|
||||
CIRCLE_CI_TOKEN: ${{ secrets.CIRCLE_CI_TOKEN }}
|
||||
steps:
|
||||
- name: Trigger documentation
|
||||
if: matrix.python-version == '3.9'
|
||||
env:
|
||||
CIRCLE_CI_TOKEN: ${{ secrets.CIRCLE_CI_TOKEN }}
|
||||
shell: bash
|
||||
if: github.ref == 'refs/heads/master'
|
||||
run: |
|
||||
docker run --rm \
|
||||
-e CIRCLE_CI_TOKEN=$CIRCLE_CI_TOKEN \
|
||||
liefproject/manylinux1_x86_64 \
|
||||
bash -c "curl --request POST --url https://circleci.com/api/v2/project/gh/lief-project/doc/pipeline --header 'Circle-Token: ${CIRCLE_CI_TOKEN}' --header 'content-type: application/json'";
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
curl --request POST --url ${CIRCLE_CI_URL} \
|
||||
--header "Circle-Token: ${CIRCLE_CI_TOKEN}" \
|
||||
--header 'content-type: application/json' \
|
||||
--data '{"parameters":{"lief-branch":"master"}}'
|
||||
|
||||
+175
-31
@@ -1,18 +1,136 @@
|
||||
name: 'macOS'
|
||||
on: push
|
||||
on: workflow_dispatch
|
||||
|
||||
env:
|
||||
python-test-version: '3.10'
|
||||
|
||||
jobs:
|
||||
osx-sdk:
|
||||
runs-on: macos-11.0
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Install system dependencies
|
||||
run: |
|
||||
brew install cmake ninja ccache
|
||||
- name: Get Date
|
||||
id: get-date
|
||||
run: |
|
||||
echo "date=$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")" >> $GITHUB_OUTPUT
|
||||
shell: bash
|
||||
- name: Setup cache dir
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir -p $RUNNER_TEMP/.ccache
|
||||
- name: ccache cache files
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ${{ runner.temp }}/.ccache
|
||||
key: osx-${{ runner.os }}-sdk-${{ steps.get-date.outputs.date }}
|
||||
restore-keys: |
|
||||
osx-${{ runner.os }}-sdk
|
||||
- name: Build SDK
|
||||
shell: bash
|
||||
env:
|
||||
MACOSX_DEPLOYMENT_TARGET: "11.0"
|
||||
CCACHE_DIR: ${{ runner.temp }}/.ccache
|
||||
CCACHE_MAXSIZE: 10.0G
|
||||
CCACHE_CPP2: 1
|
||||
CCACHE_COMPRESS: 1
|
||||
run: |
|
||||
bash scripts/osx/package_sdk.sh
|
||||
- name: 'Upload SDK Artifact'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: osx-sdk
|
||||
path: build/*.tar.gz
|
||||
retention-days: 3
|
||||
- name: 'Upload install artifact [arm64]'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: osx-arm64-install
|
||||
path: install/arm64
|
||||
retention-days: 1
|
||||
- name: 'Upload install artifact [x64]'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: osx-x64-install
|
||||
path: install/x64
|
||||
retention-days: 1
|
||||
osx-testing:
|
||||
runs-on: macos-11.0
|
||||
if: "!contains(github.event.commits[0].message, '[skip-test]')"
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Set up Python ${{ env.python-test-version }}
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ env.python-test-version }}
|
||||
- name: Install system dependencies
|
||||
run: |
|
||||
brew install cmake ninja ccache
|
||||
python -m pip install --upgrade pip setuptools wheel
|
||||
- name: Get Date
|
||||
id: get-date
|
||||
run: |
|
||||
echo "date=$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")" >> $GITHUB_OUTPUT
|
||||
shell: bash
|
||||
- name: Setup cache dir
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir -p $RUNNER_TEMP/.ccache
|
||||
- name: ccache cache files
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ${{ runner.temp }}/.ccache
|
||||
key: osx-${{ runner.os }}-test-${{ steps.get-date.outputs.date }}
|
||||
restore-keys: |
|
||||
osx-${{ runner.os }}-test
|
||||
- name: Upgrade pip
|
||||
shell: bash
|
||||
run: |
|
||||
python -m pip install --upgrade pip setuptools
|
||||
- name: Build Python 3.10 with tests
|
||||
shell: bash
|
||||
env:
|
||||
LIEF_SAMPLES_DIR: "/tmp/samples"
|
||||
BUILD_DIR: "/tmp/lief-build"
|
||||
MACOSX_TARGET: "11.7"
|
||||
MACOSX_DEPLOYMENT_TARGET: "11.0"
|
||||
CCACHE_DIR: ${{ runner.temp }}/.ccache
|
||||
CCACHE_MAXSIZE: 10.0G
|
||||
CCACHE_CPP2: 1
|
||||
CCACHE_COMPRESS: 1
|
||||
run: |
|
||||
python -m pip install -r tests/requirements.txt
|
||||
python tests/dl_samples.py ${LIEF_SAMPLES_DIR}
|
||||
cd api/python
|
||||
PYLIEF_CONF=${GITHUB_WORKSPACE}/scripts/osx/osx-testing-x64.toml \
|
||||
python ./setup.py build \
|
||||
--build-base=${BUILD_DIR}/base \
|
||||
--build-temp=${BUILD_DIR}/temp \
|
||||
install --user
|
||||
cd ${GITHUB_WORKSPACE}
|
||||
python tests/run_pytest.py
|
||||
python tests/run_tools_check.py ${BUILD_DIR}/temp
|
||||
ctest --output-on-failure --test-dir ${BUILD_DIR}/temp
|
||||
wheels:
|
||||
runs-on: macos-11.0
|
||||
needs: osx-sdk
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: [3.6, 3.7, 3.8, 3.9]
|
||||
python-version: [3.8, 3.9, '3.10', '3.11']
|
||||
arch: ['x64', 'arm64']
|
||||
fail-fast: false
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
uses: actions/setup-python@v2
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
- name: Install system dependencies
|
||||
@@ -22,49 +140,75 @@ jobs:
|
||||
- name: Get Date
|
||||
id: get-date
|
||||
run: |
|
||||
echo "::set-output name=date::$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")"
|
||||
echo "date=$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")" >> $GITHUB_OUTPUT
|
||||
shell: bash
|
||||
- name: Setup cache dir
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir -p ~/.ccache
|
||||
mkdir -p $RUNNER_TEMP/.ccache
|
||||
- name: ccache cache files
|
||||
uses: actions/cache@v1.1.0
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/.ccache
|
||||
key: osx-${{ runner.os }}-${{ matrix.python-version }}-${{ steps.get-date.outputs.date }}
|
||||
path: ${{ runner.temp }}/.ccache
|
||||
key: osx-${{ runner.os }}-${{ matrix.arch }}-${{ matrix.python-version }}-${{ steps.get-date.outputs.date }}
|
||||
restore-keys: |
|
||||
osx-${{ runner.os }}-${{ matrix.python-version }}-
|
||||
osx-${{ runner.os }}-
|
||||
- name: Build Python ${{ matrix.python-version }} wheel
|
||||
osx-${{ runner.os }}-${{ matrix.arch }}-${{ matrix.python-version }}
|
||||
- name: Upgrade pip
|
||||
shell: bash
|
||||
run: |
|
||||
python -m pip install --upgrade pip setuptools
|
||||
- name: Download LIEF install dir
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: osx-${{ matrix.arch }}-install
|
||||
path: ~/lief-${{ matrix.arch }}-install
|
||||
- name: Build Python ${{ matrix.python-version }} [${{ matrix.arch }}]
|
||||
shell: bash
|
||||
env:
|
||||
MACOSX_DEPLOYMENT_TARGET: "10.14"
|
||||
CCACHE_DIR: ~/.ccache
|
||||
MACOSX_DEPLOYMENT_TARGET: "11.0"
|
||||
CCACHE_DIR: ${{ runner.temp }}/.ccache
|
||||
CCACHE_MAXSIZE: 10.0G
|
||||
CCACHE_CPP2: 1
|
||||
CCACHE_COMPRESS: 1
|
||||
PYLIEF_CONF: "${{ github.workspace }}/scripts/osx/py-${{ matrix.arch }}.toml"
|
||||
run: |
|
||||
python ./setup.py --ninja build bdist_wheel --skip-build --plat-name=macosx_${MACOSX_DEPLOYMENT_TARGET}_x86_64
|
||||
- name: Build SDK
|
||||
shell: bash
|
||||
if: matrix.python-version == '3.9' # Build the SDk only with Python 3.9
|
||||
env:
|
||||
MACOSX_DEPLOYMENT_TARGET: "10.14"
|
||||
CCACHE_DIR: ~/.ccache
|
||||
CCACHE_MAXSIZE: 10.0G
|
||||
CCACHE_CPP2: 1
|
||||
CCACHE_COMPRESS: 1
|
||||
run: |
|
||||
bash scripts/osx/package_sdk.sh
|
||||
python -m pip -vv wheel --wheel-dir=dist/ api/python
|
||||
- name: 'Upload Python wheel artifact - ${{ matrix.python-version }}'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: osx-wheel-${{ matrix.arch }}-${{ matrix.python-version }}
|
||||
path: dist/*.whl
|
||||
retention-days: 3
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ always() }}
|
||||
needs: [osx-sdk, wheels]
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
path: ${{ runner.temp }}/artifacts
|
||||
- name: Display artifacts
|
||||
run: ls -R
|
||||
working-directory: ${{ runner.temp }}/artifacts
|
||||
- name: Deploy
|
||||
env:
|
||||
LIEF_AUTOMATIC_BUILDS_KEY: ${{ secrets.LIEF_AUTOMATIC_BUILDS_KEY }}
|
||||
LIEF_AUTOMATIC_BUILDS_IV: ${{ secrets.LIEF_AUTOMATIC_BUILDS_IV }}
|
||||
LIEF_S3_KEY: ${{ secrets.LIEF_S3_KEY }}
|
||||
LIEF_S3_SECRET: ${{ secrets.LIEF_S3_SECRET }}
|
||||
shell: bash
|
||||
run: |
|
||||
python -m pip install --upgrade requests mako
|
||||
python .github/deploy.py
|
||||
|
||||
docker run --rm \
|
||||
-v $GITHUB_WORKSPACE:/src \
|
||||
-v $RUNNER_TEMP:/runner_tmp \
|
||||
-e GITHUB_ACTIONS="true" \
|
||||
-e GITHUB_WORKSPACE=$GITHUB_WORKSPACE \
|
||||
-e GITHUB_REF=$GITHUB_REF \
|
||||
-e GITHUB_REPOSITORY=$GITHUB_REPOSITORY \
|
||||
-e LIEF_S3_KEY=$LIEF_S3_KEY \
|
||||
-e LIEF_S3_SECRET=$LIEF_S3_SECRET \
|
||||
liefproject/deploy python3 /src/.github/deploy.py /runner_tmp/artifacts
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
name: LIEF PR
|
||||
on: [pull_request, workflow_dispatch]
|
||||
|
||||
env:
|
||||
python-osx-version: '3.10'
|
||||
python-win-version: '3.10'
|
||||
|
||||
jobs:
|
||||
osx:
|
||||
runs-on: macos-11.0
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ env.python-osx-version }}
|
||||
- name: Install system dependencies
|
||||
run: |
|
||||
brew install cmake ninja ccache
|
||||
python -m pip install --upgrade pip setuptools wheel
|
||||
- name: Build with Python ${{ env.python-osx-version }} & Test
|
||||
shell: bash
|
||||
env:
|
||||
LIEF_SAMPLES_DIR: "/tmp/samples"
|
||||
BUILD_DIR: "/tmp/lief-build"
|
||||
run: |
|
||||
python -m pip install -r tests/requirements.txt
|
||||
python tests/dl_samples.py ${LIEF_SAMPLES_DIR}
|
||||
cd api/python
|
||||
PYLIEF_CONF=${GITHUB_WORKSPACE}/scripts/osx/osx-testing-x64.toml \
|
||||
python ./setup.py build \
|
||||
--build-base=${BUILD_DIR}/base \
|
||||
--build-temp=${BUILD_DIR}/temp \
|
||||
install --user
|
||||
cd ${GITHUB_WORKSPACE}
|
||||
python tests/run_pytest.py
|
||||
python tests/run_tools_check.py ${BUILD_DIR}/temp
|
||||
ctest --output-on-failure --test-dir ${BUILD_DIR}/temp
|
||||
linux:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Build & Test
|
||||
shell: bash
|
||||
env:
|
||||
PYTHON_VERSION: 39
|
||||
run: |
|
||||
docker run --rm \
|
||||
-e PYTHON_VERSION=$PYTHON_VERSION \
|
||||
-e PYTHON_BINARY=/opt/python/cp39-cp39/bin/python3.9 \
|
||||
-v $GITHUB_WORKSPACE:/src \
|
||||
liefproject/manylinux_2_28_x86_64 bash /src/scripts/docker/run_linux_test.sh
|
||||
windows:
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up Python ${{ env.python-win-version }}
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ env.python-win-version }}
|
||||
architecture: x64
|
||||
- name: Install system dependencies
|
||||
run: |
|
||||
choco install ninja
|
||||
python -m pip install --upgrade pip setuptools
|
||||
- uses: ilammy/msvc-dev-cmd@v1
|
||||
with:
|
||||
toolset: "14.16"
|
||||
- name: Set env variables
|
||||
run: |
|
||||
chcp 65001 #set code page to utf-8
|
||||
echo ("LIEF_SAMPLES_DIR=" + $env:RUNNER_TEMP + "/samples") >> $env:GITHUB_ENV
|
||||
echo ("BUILD_DIR=" + $env:RUNNER_TEMP + "/lief-build") >> $env:GITHUB_ENV
|
||||
echo ("PYLIEF_CONF=" + $env:GITHUB_WORKSPACE + "/scripts/windows/py-x64-test.toml") >> $env:GITHUB_ENV
|
||||
- name: Build Python ${{ env.python-win-version }}
|
||||
run: |
|
||||
python -m pip install -r tests/requirements.txt
|
||||
python tests/dl_samples.py %LIEF_SAMPLES_DIR%
|
||||
cd api/python
|
||||
python ./setup.py build ^
|
||||
--build-base=%BUILD_DIR%/base ^
|
||||
--build-temp=%BUILD_DIR%/temp ^
|
||||
install --user
|
||||
shell: cmd
|
||||
- name: Run tests
|
||||
run: |
|
||||
cd %GITHUB_WORKSPACE%
|
||||
python tests/run_pytest.py
|
||||
ctest --output-on-failure --test-dir %BUILD_DIR%/temp/Release
|
||||
shell: cmd
|
||||
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
name: 'sanitize'
|
||||
on: workflow_dispatch
|
||||
|
||||
jobs:
|
||||
gcc:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: compile
|
||||
shell: bash
|
||||
run: |
|
||||
docker run --rm \
|
||||
-e BUILD_DIR=/tmp/build_gcc \
|
||||
-e SRC_DIR=/src \
|
||||
-v $GITHUB_WORKSPACE:/src \
|
||||
liefproject/sanity:latest bash /src/scripts/docker/gcc.sh
|
||||
clang:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: compile
|
||||
shell: bash
|
||||
run: |
|
||||
docker run --rm \
|
||||
-e BUILD_DIR=/tmp/build_clang \
|
||||
-e SRC_DIR=/src \
|
||||
-v $GITHUB_WORKSPACE:/src \
|
||||
liefproject/sanity:latest bash /src/scripts/docker/clang.sh
|
||||
asan:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: compile
|
||||
shell: bash
|
||||
run: |
|
||||
docker run --rm \
|
||||
-v $GITHUB_WORKSPACE:/src \
|
||||
liefproject/sanity:latest bash /src/scripts/docker/asan_check.sh
|
||||
@@ -0,0 +1,249 @@
|
||||
name: LIEF Windows
|
||||
on: workflow_dispatch
|
||||
|
||||
env:
|
||||
python-test-version: '3.10'
|
||||
python-version: '3.9'
|
||||
|
||||
jobs:
|
||||
build-sdk:
|
||||
runs-on: windows-2019
|
||||
strategy:
|
||||
matrix:
|
||||
arch: ['x64', 'x86']
|
||||
fail-fast: false
|
||||
env:
|
||||
SCCACHE_CACHE_SIZE: 2G
|
||||
SCCACHE_DIR: ${{ vars.SCCACHE_DIR }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ env.python-version }}
|
||||
architecture: ${{ matrix.arch }}
|
||||
- name: Install system dependencies
|
||||
run: |
|
||||
choco install ninja
|
||||
choco install sccache
|
||||
- uses: ilammy/msvc-dev-cmd@v1
|
||||
with:
|
||||
toolset: "14.16"
|
||||
- name: Get Date
|
||||
id: get-date
|
||||
run: |
|
||||
echo "date=$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")" >> $GITHUB_OUTPUT
|
||||
shell: bash
|
||||
- name: Setup sccache
|
||||
uses: actions/cache@v3
|
||||
continue-on-error: false
|
||||
with:
|
||||
path: ${{ vars.SCCACHE_DIR }}
|
||||
key: ${{ runner.os }}-${{ matrix.arch }}-sccache-sdk-${{ steps.get-date.outputs.date }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-${{ matrix.arch }}-sccache-sdk
|
||||
- name: Start sccache server
|
||||
run: sccache --start-server
|
||||
- name: Build SDK
|
||||
run: |
|
||||
python ./scripts/windows/package_sdk.py
|
||||
- name: 'Upload SDK artifact'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: windows-${{ matrix.arch }}-sdk
|
||||
path: build/*.zip
|
||||
retention-days: 3
|
||||
- name: 'Upload install artifact'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: windows-${{ matrix.arch }}-install
|
||||
path: ${{ runner.temp }}/lief-install
|
||||
retention-days: 1
|
||||
- name: sccache stats
|
||||
run: sccache --show-stats
|
||||
- name: stop sccache server
|
||||
run: sccache --stop-server || true
|
||||
tests:
|
||||
runs-on: windows-2019
|
||||
if: "!contains(github.event.commits[0].message, '[skip-test]')"
|
||||
strategy:
|
||||
matrix:
|
||||
arch: ['x64']
|
||||
fail-fast: false
|
||||
env:
|
||||
SCCACHE_CACHE_SIZE: 2G
|
||||
SCCACHE_DIR: ${{ vars.SCCACHE_DIR }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Set up Python ${{ env.python-test-version }}
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ env.python-test-version }}
|
||||
architecture: ${{ matrix.arch }}
|
||||
- name: Install system dependencies
|
||||
run: |
|
||||
choco install ninja
|
||||
choco install sccache
|
||||
- uses: ilammy/msvc-dev-cmd@v1
|
||||
with:
|
||||
toolset: "14.16"
|
||||
- name: Get Date
|
||||
id: get-date
|
||||
run: |
|
||||
echo "date=$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")" >> $GITHUB_OUTPUT
|
||||
shell: bash
|
||||
- name: Setup sccache
|
||||
uses: actions/cache@v3
|
||||
continue-on-error: false
|
||||
with:
|
||||
path: ${{ vars.SCCACHE_DIR }}
|
||||
key: ${{ runner.os }}-${{ matrix.arch }}-sccache-test-${{ steps.get-date.outputs.date }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-${{ matrix.arch }}-sccache-test
|
||||
- name: Start sccache server
|
||||
run: sccache --start-server
|
||||
- name: Set arch specific env
|
||||
if: matrix.arch == 'x64'
|
||||
run: |
|
||||
echo "ARCH=x64" >> $env:GITHUB_ENV
|
||||
- name: Set arch specific env
|
||||
if: matrix.arch == 'x86'
|
||||
run: |
|
||||
echo "ARCH=x86" >> $env:GITHUB_ENV
|
||||
- name: Set Python config (${{ matrix.arch }})
|
||||
run: |
|
||||
echo ("PYLIEF_CONF=" + $env:GITHUB_WORKSPACE + "/scripts/windows/py-" + $env:ARCH + "-test.toml") >> $env:GITHUB_ENV
|
||||
- name: Set env variables
|
||||
run: |
|
||||
chcp 65001 #set code page to utf-8
|
||||
echo ("LIEF_SAMPLES_DIR=" + $env:RUNNER_TEMP + "/samples") >> $env:GITHUB_ENV
|
||||
echo ("BUILD_DIR=" + $env:RUNNER_TEMP + "/lief-build") >> $env:GITHUB_ENV
|
||||
- name: Build Python ${{ env.python-test-version }}
|
||||
run: |
|
||||
python -m pip install -r tests/requirements.txt
|
||||
python tests/dl_samples.py %LIEF_SAMPLES_DIR%
|
||||
cd api/python
|
||||
python ./setup.py build ^
|
||||
--build-base=%BUILD_DIR%/base ^
|
||||
--build-temp=%BUILD_DIR%/temp ^
|
||||
install --user
|
||||
shell: cmd
|
||||
- name: Run tests
|
||||
run: |
|
||||
cd %GITHUB_WORKSPACE%
|
||||
python tests/run_pytest.py
|
||||
ctest --output-on-failure --test-dir %BUILD_DIR%/temp/Release
|
||||
shell: cmd
|
||||
- name: sccache stats
|
||||
run: sccache --show-stats
|
||||
- name: stop sccache server
|
||||
run: sccache --stop-server || true
|
||||
wheels:
|
||||
runs-on: windows-2019
|
||||
needs: build-sdk
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: [3.8, 3.9, '3.10', '3.11', '3.12-dev']
|
||||
arch: ['x86', 'x64']
|
||||
fail-fast: false
|
||||
env:
|
||||
SCCACHE_CACHE_SIZE: 2G
|
||||
SCCACHE_DIR: ${{ vars.SCCACHE_DIR }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
architecture: ${{ matrix.arch }}
|
||||
- name: Install system dependencies
|
||||
run: |
|
||||
choco install ninja
|
||||
choco install sccache
|
||||
python -m pip install --upgrade pip setuptools wheel
|
||||
- uses: ilammy/msvc-dev-cmd@v1
|
||||
with:
|
||||
toolset: "14.16"
|
||||
- name: Get Date
|
||||
id: get-date
|
||||
run: |
|
||||
echo "date=$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")" >> $GITHUB_OUTPUT
|
||||
shell: bash
|
||||
- name: Save sccache
|
||||
uses: actions/cache@v3
|
||||
continue-on-error: false
|
||||
with:
|
||||
path: ${{ vars.SCCACHE_DIR }}
|
||||
key: ${{ runner.os }}-${{ matrix.arch }}-sccache-${{ matrix.python-version }}-${{ steps.get-date.outputs.date }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-${{ matrix.arch }}-sccache-${{ matrix.python-version }}
|
||||
- name: Download LIEF install dir
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: windows-${{ matrix.arch }}-install
|
||||
path: ~/lief-${{ matrix.arch }}-install
|
||||
- name: Start sccache server
|
||||
run: sccache --start-server
|
||||
- name: Upgrade pip
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
shell: cmd
|
||||
- name: Set arch specific env
|
||||
if: matrix.arch == 'x64'
|
||||
run: |
|
||||
echo "ARCH=x64" >> $env:GITHUB_ENV
|
||||
- name: Set arch specific env
|
||||
if: matrix.arch == 'x86'
|
||||
run: |
|
||||
echo "ARCH=x86" >> $env:GITHUB_ENV
|
||||
- name: Set Python config (${{ matrix.arch }})
|
||||
run: |
|
||||
echo ("PYLIEF_CONF=" + $env:GITHUB_WORKSPACE + "/scripts/windows/py-" + $env:ARCH + ".toml") >> $env:GITHUB_ENV
|
||||
- name: Set env variables
|
||||
run: |
|
||||
chcp 65001 #set code page to utf-8
|
||||
- name: Build Python ${{ matrix.python-version }}
|
||||
run: |
|
||||
python -m pip -vv wheel --wheel-dir=dist/ api/python
|
||||
shell: cmd
|
||||
- name: 'Upload Python artifacts [${{ matrix.python-version }}]'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: windows-${{ matrix.arch }}-wheel-${{ matrix.python-version }}
|
||||
path: dist/*.whl
|
||||
retention-days: 3
|
||||
deploy:
|
||||
if: ${{ always() }}
|
||||
runs-on: ubuntu-latest
|
||||
needs: [build-sdk, wheels]
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
path: ${{ runner.temp }}/artifacts
|
||||
- name: Deploy
|
||||
env:
|
||||
LIEF_S3_KEY: ${{ secrets.LIEF_S3_KEY }}
|
||||
LIEF_S3_SECRET: ${{ secrets.LIEF_S3_SECRET }}
|
||||
shell: bash
|
||||
run: |
|
||||
docker run --rm \
|
||||
-v $GITHUB_WORKSPACE:/src \
|
||||
-v $RUNNER_TEMP:/runner_tmp \
|
||||
-e GITHUB_ACTIONS="true" \
|
||||
-e GITHUB_WORKSPACE=$GITHUB_WORKSPACE \
|
||||
-e GITHUB_REF=$GITHUB_REF \
|
||||
-e GITHUB_REPOSITORY=$GITHUB_REPOSITORY \
|
||||
-e LIEF_S3_KEY=$LIEF_S3_KEY \
|
||||
-e LIEF_S3_SECRET=$LIEF_S3_SECRET \
|
||||
liefproject/deploy python3 /src/.github/deploy.py /runner_tmp/artifacts
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
name: LIEF Windows Quick
|
||||
on: workflow_dispatch
|
||||
|
||||
env:
|
||||
python-version: '3.9'
|
||||
|
||||
jobs:
|
||||
quick-test:
|
||||
runs-on: windows-2019
|
||||
strategy:
|
||||
matrix:
|
||||
arch: [x64, x86]
|
||||
fail-fast: false
|
||||
env:
|
||||
SCCACHE_CACHE_SIZE: 2G
|
||||
SCCACHE_DIR: ${{ vars.SCCACHE_DIR }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Set up Python ${{ env.python-version }}
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ env.python-version }}
|
||||
architecture: ${{ matrix.python-version }}
|
||||
- name: Install system dependencies
|
||||
run: |
|
||||
choco install ninja
|
||||
choco install sccache
|
||||
python -m pip install --upgrade pip setuptools wheel
|
||||
- uses: ilammy/msvc-dev-cmd@v1
|
||||
with:
|
||||
toolset: "14.16"
|
||||
- name: Get Date
|
||||
id: get-date
|
||||
run: |
|
||||
echo "date=$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")" >> $GITHUB_OUTPUT
|
||||
shell: bash
|
||||
- name: Save sccache
|
||||
uses: actions/cache@v3
|
||||
continue-on-error: false
|
||||
with:
|
||||
path: ${{ vars.SCCACHE_DIR }}
|
||||
key: ${{ runner.os }}-${{ matrix.arch }}-quick-${{ steps.get-date.outputs.date }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-${{ matrix.arch }}-quick
|
||||
- name: Start sccache server
|
||||
run: sccache --start-server
|
||||
- name: Set env variables
|
||||
run: |
|
||||
chcp 65001 #set code page to utf-8
|
||||
echo ("LIEF_SAMPLES_DIR=" + $env:RUNNER_TEMP + "/samples") >> $env:GITHUB_ENV
|
||||
- name: Upgrade pip
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
shell: cmd
|
||||
- name: Build Python ${{ env.python-version }}
|
||||
run: |
|
||||
python -m pip install -r tests/requirements.txt
|
||||
python tests/dl_samples.py %LIEF_SAMPLES_DIR%
|
||||
python -m pip -vv install api/python
|
||||
shell: cmd
|
||||
- name: Run tests
|
||||
run: |
|
||||
python ./tests/run_pytest.py
|
||||
shell: cmd
|
||||
- name: sccache stats
|
||||
run: sccache --show-stats
|
||||
- name: sccache server
|
||||
run: sccache --stop-server || true
|
||||
@@ -1,30 +0,0 @@
|
||||
name: LIEF Windows Tests
|
||||
|
||||
on: [pull_request]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: windows-latest
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: [3.8]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
- name: Install system dependencies
|
||||
run: |
|
||||
choco install ninja
|
||||
python -m pip install --upgrade pip setuptools
|
||||
python -m pip install wheel mako
|
||||
- uses: ilammy/msvc-dev-cmd@v1
|
||||
with:
|
||||
toolset: "14.16"
|
||||
- name: Build and Test
|
||||
run: |
|
||||
python ./setup.py --ninja --lief-test bdist_wheel
|
||||
shell: cmd
|
||||
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
build/
|
||||
*.so
|
||||
*.whl
|
||||
lief.egg-info/
|
||||
dist/
|
||||
-322
@@ -1,322 +0,0 @@
|
||||
language: cpp
|
||||
|
||||
git:
|
||||
depth: false
|
||||
|
||||
jobs:
|
||||
include:
|
||||
- if: branch = master AND tag IS present
|
||||
services: docker
|
||||
name: "Linux Python 3.5"
|
||||
script:
|
||||
- >
|
||||
docker run --name lief_35
|
||||
-e PYTHON_BINARY=/opt/python/cp35-cp35m/bin/python3.5
|
||||
-e CCACHE_DIR=/ccache
|
||||
-v $HOME/.ccache:/ccache
|
||||
-v $TRAVIS_BUILD_DIR:/src
|
||||
liefproject/manylinux1_x86_64
|
||||
bash /src/scripts/docker/travis-linux.sh
|
||||
- >
|
||||
if [[ "$TRAVIS_EVENT_TYPE" != "pull_request" ]]; then
|
||||
docker run \
|
||||
-v $TRAVIS_BUILD_DIR:/src \
|
||||
-e TRAVIS="true" \
|
||||
-e TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE \
|
||||
-e TRAVIS_REPO_SLUG=$TRAVIS_REPO_SLUG \
|
||||
-e TRAVIS_BRANCH=$TRAVIS_BRANCH \
|
||||
-e TRAVIS_BUILD_DIR=$TRAVIS_BUILD_DIR \
|
||||
-e LIEF_AUTOMATIC_BUILDS_KEY=$LIEF_AUTOMATIC_BUILDS_KEY \
|
||||
-e LIEF_AUTOMATIC_BUILDS_IV=$LIEF_AUTOMATIC_BUILDS_IV \
|
||||
--rm \
|
||||
liefproject/deploy python3 /src/.github/deploy.py;
|
||||
fi
|
||||
|
||||
|
||||
- if: branch = master AND tag IS present
|
||||
services: docker
|
||||
name: "Linux Python 3.6"
|
||||
script:
|
||||
- >
|
||||
docker run --name lief_36
|
||||
-e PYTHON_BINARY=/opt/python/cp36-cp36m/bin/python3.6
|
||||
-e CCACHE_DIR=/ccache
|
||||
-v $HOME/.ccache:/ccache
|
||||
-v $TRAVIS_BUILD_DIR:/src
|
||||
liefproject/manylinux1_x86_64
|
||||
bash /src/scripts/docker/travis-linux.sh
|
||||
- >
|
||||
if [[ "$TRAVIS_EVENT_TYPE" != "pull_request" ]]; then
|
||||
docker run \
|
||||
-v $TRAVIS_BUILD_DIR:/src \
|
||||
-e TRAVIS="true" \
|
||||
-e TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE \
|
||||
-e TRAVIS_REPO_SLUG=$TRAVIS_REPO_SLUG \
|
||||
-e TRAVIS_BRANCH=$TRAVIS_BRANCH \
|
||||
-e TRAVIS_BUILD_DIR=$TRAVIS_BUILD_DIR \
|
||||
-e LIEF_AUTOMATIC_BUILDS_KEY=$LIEF_AUTOMATIC_BUILDS_KEY \
|
||||
-e LIEF_AUTOMATIC_BUILDS_IV=$LIEF_AUTOMATIC_BUILDS_IV \
|
||||
--rm \
|
||||
liefproject/deploy python3 /src/.github/deploy.py;
|
||||
fi
|
||||
|
||||
- services: docker
|
||||
name: "Linux Python 3.7 | SDK | Doc Trigger"
|
||||
script:
|
||||
- >
|
||||
docker run --name lief_37
|
||||
-e PYTHON_BINARY=/opt/python/cp37-cp37m/bin/python3.7
|
||||
-e CCACHE_DIR=/ccache
|
||||
-v $HOME/.ccache:/ccache
|
||||
-v $TRAVIS_BUILD_DIR:/src
|
||||
liefproject/manylinux1_x86_64
|
||||
bash /src/scripts/docker/travis-linux.sh
|
||||
- >
|
||||
docker run --name lief_sdk
|
||||
-e PYTHON_BINARY=$PYTHON_BINARY
|
||||
-e CCACHE_DIR=/ccache
|
||||
-v $HOME/.ccache:/ccache
|
||||
-v $TRAVIS_BUILD_DIR:/src
|
||||
liefproject/manylinux1_x86_64
|
||||
bash /src/scripts/docker/travis-linux-sdk.sh
|
||||
- >
|
||||
sudo chmod -R 777 $TRAVIS_BUILD_DIR/build &&
|
||||
sudo chown -R 1000:1000 $TRAVIS_BUILD_DIR/build
|
||||
- >
|
||||
if [[ "$TRAVIS_EVENT_TYPE" != "pull_request" ]]; then
|
||||
docker run \
|
||||
-v $TRAVIS_BUILD_DIR:/src \
|
||||
-e TRAVIS="true" \
|
||||
-e TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE \
|
||||
-e TRAVIS_REPO_SLUG=$TRAVIS_REPO_SLUG \
|
||||
-e TRAVIS_BRANCH=$TRAVIS_BRANCH \
|
||||
-e TRAVIS_BUILD_DIR=$TRAVIS_BUILD_DIR \
|
||||
-e LIEF_AUTOMATIC_BUILDS_KEY=$LIEF_AUTOMATIC_BUILDS_KEY \
|
||||
-e LIEF_AUTOMATIC_BUILDS_IV=$LIEF_AUTOMATIC_BUILDS_IV \
|
||||
--rm \
|
||||
liefproject/deploy python3 /src/.github/deploy.py;
|
||||
fi
|
||||
after_success:
|
||||
- >
|
||||
if [[ "$TRAVIS_EVENT_TYPE" != "pull_request" ]];
|
||||
then
|
||||
docker run --rm
|
||||
-e CIRCLE_CI_TOKEN=$CIRCLE_CI_TOKEN
|
||||
liefproject/manylinux1_x86_64
|
||||
bash -c "curl --request POST --url https://circleci.com/api/v2/project/gh/lief-project/doc/pipeline --header 'Circle-Token: ${CIRCLE_CI_TOKEN}' --header 'content-type: application/json'";
|
||||
fi
|
||||
|
||||
- services: docker
|
||||
name: "Linux Python 3.8"
|
||||
script:
|
||||
- >
|
||||
docker run --name lief_38
|
||||
-e PYTHON_BINARY=/opt/python/cp38-cp38/bin/python3.8
|
||||
-e CCACHE_DIR=/ccache
|
||||
-v $HOME/.ccache:/ccache
|
||||
-v $TRAVIS_BUILD_DIR:/src
|
||||
liefproject/manylinux1_x86_64
|
||||
bash /src/scripts/docker/travis-linux.sh
|
||||
- >
|
||||
sudo chmod -R 777 $TRAVIS_BUILD_DIR/build &&
|
||||
sudo chown -R 1000:1000 $TRAVIS_BUILD_DIR/build
|
||||
- >
|
||||
if [[ "$TRAVIS_EVENT_TYPE" != "pull_request" ]]; then
|
||||
docker run \
|
||||
-v $TRAVIS_BUILD_DIR:/src \
|
||||
-e TRAVIS="true" \
|
||||
-e TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE \
|
||||
-e TRAVIS_REPO_SLUG=$TRAVIS_REPO_SLUG \
|
||||
-e TRAVIS_BRANCH=$TRAVIS_BRANCH \
|
||||
-e TRAVIS_BUILD_DIR=$TRAVIS_BUILD_DIR \
|
||||
-e LIEF_AUTOMATIC_BUILDS_KEY=$LIEF_AUTOMATIC_BUILDS_KEY \
|
||||
-e LIEF_AUTOMATIC_BUILDS_IV=$LIEF_AUTOMATIC_BUILDS_IV \
|
||||
--rm \
|
||||
liefproject/deploy python3 /src/.github/deploy.py;
|
||||
fi
|
||||
- services: docker
|
||||
name: "Linux Python 3.9"
|
||||
script:
|
||||
- >
|
||||
docker run --name lief_39
|
||||
-e PYTHON_BINARY=/opt/python/cp39-cp39/bin/python3.9
|
||||
-e CCACHE_DIR=/ccache
|
||||
-v $HOME/.ccache:/ccache
|
||||
-v $TRAVIS_BUILD_DIR:/src
|
||||
liefproject/manylinux1_x86_64
|
||||
bash /src/scripts/docker/travis-linux.sh
|
||||
- >
|
||||
sudo chmod -R 777 $TRAVIS_BUILD_DIR/build &&
|
||||
sudo chown -R 1000:1000 $TRAVIS_BUILD_DIR/build
|
||||
- >
|
||||
if [[ "$TRAVIS_EVENT_TYPE" != "pull_request" ]]; then
|
||||
docker run \
|
||||
-v $TRAVIS_BUILD_DIR:/src \
|
||||
-e TRAVIS="true" \
|
||||
-e TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE \
|
||||
-e TRAVIS_REPO_SLUG=$TRAVIS_REPO_SLUG \
|
||||
-e TRAVIS_BRANCH=$TRAVIS_BRANCH \
|
||||
-e TRAVIS_BUILD_DIR=$TRAVIS_BUILD_DIR \
|
||||
-e LIEF_AUTOMATIC_BUILDS_KEY=$LIEF_AUTOMATIC_BUILDS_KEY \
|
||||
-e LIEF_AUTOMATIC_BUILDS_IV=$LIEF_AUTOMATIC_BUILDS_IV \
|
||||
--rm \
|
||||
liefproject/deploy python3 /src/.github/deploy.py;
|
||||
fi
|
||||
|
||||
## macOS 10.14.6 - xcode 11 - Python 3.5
|
||||
#- if: branch = master AND tag IS present AND type = push
|
||||
# os: osx
|
||||
# osx_image: xcode11
|
||||
# compiler: clang
|
||||
# script:
|
||||
# - pyenv install --skip-existing 3.5.0
|
||||
# - >
|
||||
# export PYTHON_BINARY=$(pyenv root)/versions/3.5.0/bin/python3.5 &&
|
||||
# sudo $PYTHON_BINARY -m pip install --upgrade pip setuptools wheel &&
|
||||
# $PYTHON_BINARY ./setup.py --ninja --lief-test build bdist_wheel
|
||||
# after_success:
|
||||
# - >
|
||||
# if [[ "$TRAVIS_EVENT_TYPE" != "pull_request" ]]; then
|
||||
# export PYTHON_BINARY=$(pyenv root)/versions/3.5.0/bin/python3.5 &&
|
||||
# sudo $PYTHON_BINARY -m pip install --upgrade pip setuptools requests mako wheel &&
|
||||
# cd $TRAVIS_BUILD_DIR &&
|
||||
# bash ./.github/deploy.sh;
|
||||
# fi
|
||||
|
||||
## macOS 10.14.6 - xcode 11 - Python 3.6
|
||||
#- if: branch = master AND tag IS present AND type = push
|
||||
# os: osx
|
||||
# osx_image: xcode11
|
||||
# compiler: clang
|
||||
# script:
|
||||
# - pyenv install --skip-existing 3.6.0
|
||||
# - >
|
||||
# export PYTHON_BINARY=$(pyenv root)/versions/3.6.0/bin/python3.6 &&
|
||||
# sudo $PYTHON_BINARY -m pip install --upgrade pip setuptools wheel &&
|
||||
# $PYTHON_BINARY ./setup.py --ninja --lief-test build bdist_wheel
|
||||
# after_success:
|
||||
# - >
|
||||
# if [[ "$TRAVIS_EVENT_TYPE" != "pull_request" ]]; then
|
||||
# export PYTHON_BINARY=$(pyenv root)/versions/3.6.0/bin/python3.6 &&
|
||||
# sudo $PYTHON_BINARY -m pip install --upgrade pip setuptools requests mako wheel &&
|
||||
# cd $TRAVIS_BUILD_DIR &&
|
||||
# bash ./.github/deploy.sh;
|
||||
# fi
|
||||
|
||||
|
||||
## macOS 10.14.6 - xcode 11 - Python 3.7
|
||||
#- os: osx
|
||||
# osx_image: xcode11
|
||||
# compiler: clang
|
||||
# script:
|
||||
# - pyenv install --skip-existing 3.7.0
|
||||
# - >
|
||||
# export PYTHON_BINARY=$(pyenv root)/versions/3.7.0/bin/python3.7 &&
|
||||
# sudo $PYTHON_BINARY -m pip install --upgrade pip setuptools wheel &&
|
||||
# $PYTHON_BINARY ./setup.py --ninja --lief-test build bdist_wheel
|
||||
# after_success:
|
||||
# - >
|
||||
# if [[ "$TRAVIS_EVENT_TYPE" != "pull_request" ]]; then
|
||||
# export PYTHON_BINARY=$(pyenv root)/versions/3.7.0/bin/python3.7 &&
|
||||
# sudo $PYTHON_BINARY -m pip install --upgrade pip setuptools requests mako wheel &&
|
||||
# cd $TRAVIS_BUILD_DIR &&
|
||||
# bash ./.github/deploy.sh;
|
||||
# fi
|
||||
|
||||
# macOS 10.14.6 - xcode 11 - Python 3.8
|
||||
#- os: osx
|
||||
# osx_image: xcode11
|
||||
# compiler: clang
|
||||
# name: "OSX Python 3.8"
|
||||
# script:
|
||||
# - pyenv install --skip-existing 3.8.0
|
||||
# - >
|
||||
# export PYTHON_BINARY=$(pyenv root)/versions/3.8.0/bin/python3.8 &&
|
||||
# sudo $PYTHON_BINARY -m pip install --upgrade pip setuptools wheel &&
|
||||
# $PYTHON_BINARY ./setup.py --ninja --lief-test build bdist_wheel
|
||||
# after_success:
|
||||
# - >
|
||||
# if [[ "$TRAVIS_EVENT_TYPE" != "pull_request" ]]; then
|
||||
# export PYTHON_BINARY=$(pyenv root)/versions/3.8.0/bin/python3.8 &&
|
||||
# sudo $PYTHON_BINARY -m pip install --upgrade pip setuptools requests mako wheel &&
|
||||
# cd $TRAVIS_BUILD_DIR &&
|
||||
# bash ./.github/deploy.sh;
|
||||
# fi
|
||||
|
||||
## macOS 10.14.6 - xcode 11 - Python 3.9
|
||||
#- os: osx
|
||||
# osx_image: xcode11
|
||||
# compiler: clang
|
||||
# name: "OSX Python 3.9 | SDK"
|
||||
# script:
|
||||
# - pyenv install --skip-existing 3.9.0
|
||||
# - >
|
||||
# export PYTHON_BINARY=$(pyenv root)/versions/3.9.0/bin/python3.9 &&
|
||||
# sudo $PYTHON_BINARY -m pip install --upgrade pip setuptools wheel &&
|
||||
# $PYTHON_BINARY ./setup.py --ninja --lief-test build bdist_wheel
|
||||
# - bash scripts/osx/package_sdk.sh
|
||||
# after_success:
|
||||
# - >
|
||||
# if [[ "$TRAVIS_EVENT_TYPE" != "pull_request" ]]; then
|
||||
# export PYTHON_BINARY=$(pyenv root)/versions/3.9.0/bin/python3.9 &&
|
||||
# sudo $PYTHON_BINARY -m pip install --upgrade pip setuptools requests mako wheel &&
|
||||
# cd $TRAVIS_BUILD_DIR &&
|
||||
# bash ./.github/deploy.sh;
|
||||
# fi
|
||||
|
||||
|
||||
#branches:
|
||||
# only:
|
||||
# - master
|
||||
|
||||
notifications:
|
||||
email:
|
||||
on_success: never
|
||||
on_failure: always
|
||||
|
||||
cache:
|
||||
- ccache: true
|
||||
- directories:
|
||||
- $HOME/.pyenv
|
||||
- $HOME/.ccache
|
||||
|
||||
env:
|
||||
global:
|
||||
- USE_CCACHE=1
|
||||
- CCACHE_COMPRESS=1
|
||||
- CCACHE_MAXSIZE=10.0G
|
||||
- CCACHE_CPP2=1
|
||||
|
||||
addons:
|
||||
homebrew:
|
||||
packages:
|
||||
- pyenv
|
||||
- ccache
|
||||
- ninja
|
||||
update: true
|
||||
|
||||
before_install:
|
||||
- ccache --set-config=max_size=10.0G
|
||||
- ccache --zero-stats --version
|
||||
- ccache --set-config=compiler_check=content
|
||||
- ccache -p
|
||||
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then docker pull liefproject/manylinux1_x86_64:latest; fi
|
||||
- if [ "$TRAVIS_OS_NAME" == "osx" ]; then export PREFIX="/usr/local"; fi
|
||||
#- if [ "$TRAVIS_OS_NAME" == "osx" ]; then export PATH="/usr/local/opt/ccache/libexec:$PATH"; fi
|
||||
- if [ "$TRAVIS_OS_NAME" == "osx" ]; then export PYTHON_CONFIGURE_OPTS="--enable-shared --enable-unicode=ucs2"; fi
|
||||
- if [ "$TRAVIS_OS_NAME" == "osx" ]; then pyenv root; fi
|
||||
- if [ "$TRAVIS_OS_NAME" == "osx" ]; then pyenv install --list ;fi
|
||||
|
||||
after_script:
|
||||
- ccache --show-stats
|
||||
|
||||
#deploy:
|
||||
# provider: releases
|
||||
# token:
|
||||
# - secure: LTJMZp9kJ9/tmv73YGktP3Bdhh3moettDNooiRlQfUEgUemRlp9K+ybbufN0ya0Md0bouOJ/7nWqFToWl1G5/kcRr4MjV/P2c+iH8W7mvWcFupLGdwm1+aqpin3hiGsdYz0a1TK37y6DANspFwHILjq1SPf5L8kGEHnYSIfyUFHaETbv7GHL+4gf1XG/55KVuyFa3vZ2BPa3sIXr4bRypdNsqssFOZ7qeoJawtcI3TbjmLqx+sOGR2aiG+9lX+/vcYVGECHOE4KdV5BbTFitDLkJ0toAQrgN4XuB6XMXEnijU0RGtpkvsUAYJUuYaNcV2ea4bwLPCKz0IJvzTw3gtyB/pioP4OUx0xY2csuNuGfppZ0Fb+BWhPx9wOg209lrPjtoWszK8vo4PywKlEUviNG+3hEYx9x382IbtbXvIxp+c2iYdRicudFIdjjSZt7fy1MwBvHhWoBRl1hVw5fpFvRIC6Q1/B6MV55Jc3LVYCs+QHPAXq2KJ1KWK/Q7mmlriG3O+dvswcE1l0/AmeqKuXLsgUMuzScYa4fMFvXL3l/B8bKw205ynMzKvbb61P3sGrJJ+AFDEoHDk8yNtSaTowoUveu75DbL1s1p02QjYeVt7AJS8AsqUm7QPcUU5iXW1gSgt50jD/46/uvK7NZCFj2LzkiVzM5JIbiUANx8pKA=
|
||||
# file_glob: true
|
||||
# file:
|
||||
# - ${TRAVIS_BUILD_DIR}/dist/*.whl
|
||||
# - ${TRAVIS_BUILD_DIR}/build/*.tar.gz
|
||||
# on:
|
||||
# tags: true
|
||||
@@ -1,3 +1,3 @@
|
||||
Authors:
|
||||
|
||||
Romain Thomas <rthomas@quarkslab.com>
|
||||
Romain Thomas <me@romainthomas.fr> - Quarkslab
|
||||
|
||||
+327
-223
@@ -1,12 +1,18 @@
|
||||
cmake_minimum_required(VERSION 3.5)
|
||||
cmake_minimum_required(VERSION 3.15)
|
||||
|
||||
# Avoid warning about DOWNLOAD_EXTRACT_TIMESTAMP in CMake 3.24:
|
||||
if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.24.0")
|
||||
cmake_policy(SET CMP0135 NEW)
|
||||
endif()
|
||||
|
||||
# Enable https://cmake.org/cmake/help/latest/prop_tgt/MSVC_RUNTIME_LIBRARY.html
|
||||
cmake_policy(SET CMP0091 NEW)
|
||||
|
||||
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
||||
|
||||
# Modules
|
||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/")
|
||||
if(WIN32)
|
||||
include(ChooseMSVCCRT)
|
||||
endif()
|
||||
|
||||
include(CheckCXXCompilerFlag)
|
||||
include(CheckCCompilerFlag)
|
||||
include(ExternalProject)
|
||||
@@ -21,7 +27,7 @@ if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git"
|
||||
include(LIEFGit)
|
||||
else()
|
||||
set(LIEF_VERSION_MAJOR "0")
|
||||
set(LIEF_VERSION_MINOR "12")
|
||||
set(LIEF_VERSION_MINOR "14")
|
||||
set(LIEF_VERSION_PATCH "0")
|
||||
endif()
|
||||
|
||||
@@ -32,6 +38,36 @@ project(
|
||||
VERSION ${LIEF_VERSION_MAJOR}.${LIEF_VERSION_MINOR}.${LIEF_VERSION_PATCH})
|
||||
message(STATUS "${PROJECT_NAME} ${PROJECT_VERSION}")
|
||||
|
||||
# Select the MSVC runtime based on the LIEF_USE_CRT_XXX variable
|
||||
if(MSVC)
|
||||
foreach(build_type ${CMAKE_CONFIGURATION_TYPES} ${CMAKE_BUILD_TYPE})
|
||||
string(TOUPPER "${build_type}" build)
|
||||
if(DEFINED "LIEF_USE_CRT_${build}")
|
||||
set(runtime "${LIEF_USE_CRT_${build}}")
|
||||
if(build_type STREQUAL Debug)
|
||||
set(default_runtime MDd)
|
||||
else()
|
||||
set(default_runtime MD)
|
||||
endif()
|
||||
if(runtime AND NOT "${runtime}" STREQUAL "${default_runtime}")
|
||||
if(runtime STREQUAL "MT")
|
||||
set(runtime_library "MultiThreaded")
|
||||
elseif(runtime STREQUAL "MD")
|
||||
set(runtime_library "MultiThreadedDLL")
|
||||
elseif(runtime STREQUAL "MTd")
|
||||
set(runtime_library "MultiThreadedDebug")
|
||||
elseif(runtime STREQUAL "MDd")
|
||||
set(runtime_library "MultiThreadedDebugDLL")
|
||||
else()
|
||||
message(FATAL_ERROR "Unsupported value LIEF_USE_CRT_${build}=${runtime}")
|
||||
endif()
|
||||
message(STATUS "LIEF_CRT_${build}: ${runtime}")
|
||||
set(CMAKE_MSVC_RUNTIME_LIBRARY "${CMAKE_MSVC_RUNTIME_LIBRARY}$<$<CONFIG:${build_type}>:${runtime_library}>")
|
||||
endif()
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
# LIEF options
|
||||
# =============
|
||||
include(LIEFOptions)
|
||||
@@ -50,7 +86,7 @@ if(LIEF_USE_CCACHE)
|
||||
message(STATUS "Found ccache: ${CCACHE_FOUND}")
|
||||
else()
|
||||
find_program(SCCACHE_FOUND sccache)
|
||||
if (SCCACHE_FOUND)
|
||||
if(SCCACHE_FOUND)
|
||||
set(CMAKE_C_COMPILER_LAUNCHER ${SCCACHE_FOUND})
|
||||
set(CMAKE_CXX_COMPILER_LAUNCHER ${SCCACHE_FOUND})
|
||||
message(STATUS "Found sccache: ${SCCACHE_FOUND}")
|
||||
@@ -90,9 +126,6 @@ message(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}")
|
||||
|
||||
# LIEF Source definition
|
||||
# ======================
|
||||
set_source_files_properties(${mbedtls_src_crypto} PROPERTIES GENERATED TRUE)
|
||||
set_source_files_properties(${mbedtls_src_x509} PROPERTIES GENERATED TRUE)
|
||||
set_source_files_properties(${mbedtls_src_tls} PROPERTIES GENERATED TRUE)
|
||||
|
||||
set(LIEF_PRIVATE_INCLUDE_DIR)
|
||||
set(LIEF_PUBLIC_INCLUDE_DIR)
|
||||
@@ -101,22 +134,20 @@ set(LIEF_PUBLIC_INCLUDE_FILES)
|
||||
set(LIEF_PRIVATE_INCLUDE_FILES)
|
||||
|
||||
set(LIBLIEF_SOURCE_FILES
|
||||
"${ELG_CC_PATH}"
|
||||
"${mbedtls_src_crypto}"
|
||||
"${mbedtls_src_x509}"
|
||||
"${mbedtls_src_tls}"
|
||||
"${LIBFUZZER_SRC_FILES}"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/errors.cpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/hash_stream.cpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/logging.cpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/exception.cpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/iostream.cpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/utils.cpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/internal_utils.cpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/Object.cpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/Object.tcc"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/Visitor.cpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/BinaryStream/BinaryStream.cpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/BinaryStream/VectorStream.cpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/BinaryStream/FileStream.cpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/BinaryStream/MemoryStream.cpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/BinaryStream/SpanStream.cpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/BinaryStream/Convert.cpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/visitors/hash.cpp")
|
||||
|
||||
@@ -124,9 +155,9 @@ set(LIBLIEF_SOURCE_FILES
|
||||
# ===============================
|
||||
set(LIEF_INC_FILES
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/errors.hpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/span.hpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/ELF.hpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/Abstract.hpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/exception.hpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/iostream.hpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/iterators.hpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/LIEF.hpp"
|
||||
@@ -141,9 +172,14 @@ set(LIEF_INC_FILES
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/visitor_macros.hpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/BinaryStream/BinaryStream.hpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/BinaryStream/VectorStream.hpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/BinaryStream/FileStream.hpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/BinaryStream/MemoryStream.hpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/BinaryStream/SpanStream.hpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/BinaryStream/Convert.hpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/internal_utils.hpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/hash_stream.hpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/frozen.hpp")
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/frozen.hpp"
|
||||
)
|
||||
|
||||
set(LIEF_VISITOR_INCLUDE_FILES
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/hash.hpp")
|
||||
@@ -151,12 +187,14 @@ set(LIEF_VISITOR_INCLUDE_FILES
|
||||
set(LIEF_INCLUDE_FILES ${LIEF_INC_FILES} ${LIEF_VISITOR_INCLUDE_FILES})
|
||||
|
||||
set(LIEF_JSON_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/visitors/json.cpp")
|
||||
set(LIEF_JSON_HDR "${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/json.hpp"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/third-party/json.hpp")
|
||||
set(LIEF_JSON_HDR "${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/third-party/json.hpp")
|
||||
|
||||
list(APPEND LIEF_INC_FILES "${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/json.hpp")
|
||||
list(APPEND LIBLIEF_SOURCE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/src/json_api.cpp")
|
||||
|
||||
if(LIEF_ENABLE_JSON)
|
||||
list(APPEND LIBLIEF_SOURCE_FILES "${LIEF_JSON_SRC}")
|
||||
list(APPEND LIEF_INC_FILES "${LIEF_JSON_HDR}")
|
||||
list(APPEND LIEF_INC_FILES "${LIEF_JSON_HDR}")
|
||||
endif()
|
||||
|
||||
source_group("Header Files" FILES ${LIEF_INC_FILES})
|
||||
@@ -166,13 +204,43 @@ source_group("Header Files\\visitors" FILES ${LIEF_VISITOR_INCLUDE_FILES})
|
||||
|
||||
add_library(LIB_LIEF ${LIBLIEF_SOURCE_FILES} ${LIEF_INCLUDE_FILES})
|
||||
|
||||
if(NOT LIEF_PY_LIEF_EXT)
|
||||
add_library(LIEF::LIEF ALIAS LIB_LIEF)
|
||||
endif()
|
||||
|
||||
if(NOT LIEF_OPT_MBEDTLS_EXTERNAL)
|
||||
set_source_files_properties(${mbedtls_src_crypto} PROPERTIES GENERATED TRUE)
|
||||
set_source_files_properties(${mbedtls_src_x509} PROPERTIES GENERATED TRUE)
|
||||
set_source_files_properties(${mbedtls_src_tls} PROPERTIES GENERATED TRUE)
|
||||
target_sources(LIB_LIEF PRIVATE
|
||||
"${mbedtls_src_crypto}"
|
||||
"${mbedtls_src_x509}"
|
||||
"${mbedtls_src_tls}")
|
||||
|
||||
source_group("mbedtls\\crypto" FILES ${mbedtls_src_crypto})
|
||||
source_group("mbedtls\\x509" FILES ${mbedtls_src_x509})
|
||||
source_group("mbedtls\\tls" FILES ${mbedtls_src_tls})
|
||||
|
||||
target_include_directories(
|
||||
LIB_LIEF SYSTEM PRIVATE
|
||||
"${MBEDTLS_INCLUDE_DIRS}"
|
||||
"${MBEDTLS_SOURCE_DIR}/library"
|
||||
)
|
||||
|
||||
add_dependencies(LIB_LIEF lief_mbed_tls)
|
||||
else()
|
||||
find_package(MbedTLS REQUIRED)
|
||||
target_link_libraries(LIB_LIEF PRIVATE
|
||||
MbedTLS::mbedcrypto
|
||||
MbedTLS::mbedx509)
|
||||
endif()
|
||||
|
||||
if(WINDOWS AND BUILD_SHARED_LIBS)
|
||||
target_link_libraries(LIB_LIEF ws2_32)
|
||||
endif()
|
||||
|
||||
if(MSVC)
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /bigobj")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj")
|
||||
add_compile_options(/bigobj)
|
||||
endif()
|
||||
|
||||
if(CMAKE_BUILD_TYPE MATCHES Debug AND WINDOWS)
|
||||
@@ -184,14 +252,11 @@ if(CMAKE_BUILD_TYPE MATCHES Debug AND UNIX)
|
||||
target_compile_options(LIB_LIEF PRIVATE -g -O0)
|
||||
endif()
|
||||
|
||||
if(BUILD_SHARED_LIBS)
|
||||
if(BUILD_SHARED_LIBS OR LIEF_FORCE_API_EXPORTS)
|
||||
target_compile_definitions(LIB_LIEF PRIVATE -DLIEF_EXPORTS)
|
||||
else()
|
||||
target_compile_definitions(LIB_LIEF PRIVATE -DLIEF_STATIC)
|
||||
endif()
|
||||
if(LIEF_SUPPORT_CXX14)
|
||||
target_compile_features(LIB_LIEF PRIVATE cxx_std_14)
|
||||
endif()
|
||||
|
||||
# Abstract part
|
||||
include("${CMAKE_CURRENT_SOURCE_DIR}/src/Abstract/CMakeLists.txt")
|
||||
@@ -227,14 +292,14 @@ endif()
|
||||
# =====================
|
||||
|
||||
target_compile_definitions(LIB_LIEF PRIVATE SPDLOG_DISABLE_DEFAULT_LOGGER
|
||||
SPDLOG_NO_EXCEPTIONS
|
||||
SPDLOG_FUNCTION=)
|
||||
|
||||
# Frozen Configuration
|
||||
# ====================
|
||||
if(LIEF_FROZEN_ENABLED)
|
||||
list(APPEND LIEF_PRIVATE_INCLUDE_DIR "${FROZEN_INCLUDE_DIR}")
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "iOS")
|
||||
target_compile_definitions(LIB_LIEF PRIVATE SPDLOG_NO_THREAD_ID)
|
||||
endif()
|
||||
|
||||
|
||||
# OAT part
|
||||
# ========
|
||||
if(LIEF_OAT)
|
||||
@@ -283,74 +348,123 @@ configure_file("${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/version.h.in"
|
||||
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/config.h.in"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/config.h" @ONLY)
|
||||
|
||||
list(APPEND LIEF_PUBLIC_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include/"
|
||||
list(APPEND LIEF_PUBLIC_INCLUDE_DIR
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/api/c/include/"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/include/")
|
||||
|
||||
list(APPEND LIEF_PRIVATE_INCLUDE_DIR "${LIEF_PUBLIC_INCLUDE_DIR}"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src" "${CMAKE_BINARY_DIR}")
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src" "${CMAKE_CURRENT_BINARY_DIR}")
|
||||
|
||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/LIEF.pc.in ${CMAKE_CURRENT_BINARY_DIR}/LIEF.pc
|
||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/LIEF.pc.in ${CMAKE_CURRENT_BINARY_DIR}/LIEF.pc
|
||||
@ONLY)
|
||||
|
||||
# Grouping external projects
|
||||
# ==========================
|
||||
source_group("mbedtls\\crypto" FILES ${mbedtls_src_crypto})
|
||||
source_group("mbedtls\\x509" FILES ${mbedtls_src_x509})
|
||||
source_group("mbedtls\\tls" FILES ${mbedtls_src_tls})
|
||||
|
||||
# Library definition
|
||||
# ==================
|
||||
target_include_directories(
|
||||
LIB_LIEF SYSTEM PRIVATE "${SPDLOG_SOURCE_DIR}/include"
|
||||
"${MBEDTLS_INCLUDE_DIRS}")
|
||||
|
||||
target_include_directories(
|
||||
LIB_LIEF
|
||||
PUBLIC "${LIEF_PUBLIC_INCLUDE_DIR}"
|
||||
target_include_directories(LIB_LIEF
|
||||
PUBLIC "$<BUILD_INTERFACE:${LIEF_PUBLIC_INCLUDE_DIR}>"
|
||||
PRIVATE "${LIEF_PRIVATE_INCLUDE_DIR}")
|
||||
|
||||
if(LIEF_ENABLE_JSON)
|
||||
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/third-party/json.hpp
|
||||
COMMAND
|
||||
${CMAKE_COMMAND} -E copy_directory ${LIBJSON_SOURCE_DIR}/
|
||||
${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/third-party/
|
||||
DEPENDS lief_libjson)
|
||||
if(LIEF_OPT_NLOHMANN_JSON_EXTERNAL)
|
||||
find_package(nlohmann_json REQUIRED)
|
||||
target_link_libraries(LIB_LIEF PRIVATE nlohmann_json::nlohmann_json)
|
||||
else()
|
||||
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/internal/nlohmann/json.hpp
|
||||
COMMAND
|
||||
${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/internal/nlohmann
|
||||
COMMAND
|
||||
${CMAKE_COMMAND} -E copy_directory ${LIBJSON_SOURCE_DIR}/
|
||||
${CMAKE_CURRENT_BINARY_DIR}/internal/nlohmann/
|
||||
DEPENDS lief_libjson)
|
||||
|
||||
target_sources(LIB_LIEF PRIVATE
|
||||
${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/third-party/json.hpp)
|
||||
target_sources(LIB_LIEF PRIVATE
|
||||
${CMAKE_CURRENT_BINARY_DIR}/internal/nlohmann/json.hpp)
|
||||
|
||||
target_include_directories(LIB_LIEF PRIVATE
|
||||
${CMAKE_CURRENT_BINARY_DIR}/)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(LIEF_FROZEN_ENABLED)
|
||||
add_dependencies(LIB_LIEF lief_frozen)
|
||||
if(LIEF_OPT_FROZEN_EXTERNAL)
|
||||
find_package(frozen REQUIRED)
|
||||
target_link_libraries(LIB_LIEF PRIVATE frozen::frozen)
|
||||
else()
|
||||
add_dependencies(LIB_LIEF lief_frozen)
|
||||
target_include_directories(LIB_LIEF
|
||||
PRIVATE "${FROZEN_INCLUDE_DIR}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# =======================================
|
||||
# Leaf
|
||||
# =======================================
|
||||
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/third-party/boost/leaf/all.hpp
|
||||
COMMAND
|
||||
${CMAKE_COMMAND} -E copy_directory ${LEAF_INCLUDE_DIR}/
|
||||
${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/third-party/
|
||||
DEPENDS lief_leaf)
|
||||
|
||||
target_sources(LIB_LIEF PRIVATE
|
||||
${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/third-party/boost/leaf/all.hpp)
|
||||
# =======================================
|
||||
# Expected
|
||||
# =======================================
|
||||
if(LIEF_EXTERNAL_EXPECTED)
|
||||
message(STATUS "Using external Expected version")
|
||||
find_package(tl-expected REQUIRED)
|
||||
target_link_libraries(LIB_LIEF PUBLIC tl::expected)
|
||||
else()
|
||||
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/third-party/internal/expected.hpp
|
||||
COMMAND
|
||||
${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/third-party/internal/
|
||||
COMMAND
|
||||
${CMAKE_COMMAND} -E copy_directory ${EXPECTED_SRC_DIR}/include/tl/
|
||||
${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/third-party/internal/
|
||||
DEPENDS lief_expected)
|
||||
|
||||
target_sources(LIB_LIEF PRIVATE
|
||||
${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/third-party/internal/expected.hpp)
|
||||
endif()
|
||||
|
||||
|
||||
# =======================================
|
||||
# utfcpp
|
||||
# =======================================
|
||||
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/third-party/utfcpp/utf8.h
|
||||
COMMAND
|
||||
${CMAKE_COMMAND} -E copy_directory ${UTFCPP_INCLUDE_DIR}/
|
||||
${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/third-party/utfcpp
|
||||
DEPENDS lief_utfcpp)
|
||||
|
||||
target_sources(LIB_LIEF PRIVATE
|
||||
${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/third-party/utfcpp/utf8.h)
|
||||
if(LIEF_OPT_UTFCPP_EXTERNAL)
|
||||
find_package(utf8cpp REQUIRED)
|
||||
target_link_libraries(LIB_LIEF PRIVATE utf8cpp)
|
||||
else()
|
||||
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/internal/utfcpp/utf8.h
|
||||
COMMAND
|
||||
${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/internal/
|
||||
COMMAND
|
||||
${CMAKE_COMMAND} -E copy_directory ${UTFCPP_INCLUDE_DIR}/
|
||||
${CMAKE_CURRENT_BINARY_DIR}/internal/utfcpp
|
||||
DEPENDS lief_utfcpp)
|
||||
|
||||
target_sources(LIB_LIEF PRIVATE
|
||||
${CMAKE_CURRENT_BINARY_DIR}/internal/utfcpp/utf8.h)
|
||||
endif()
|
||||
|
||||
add_dependencies(LIB_LIEF lief_spdlog lief_mbed_tls)
|
||||
# =======================================
|
||||
# tcb/span
|
||||
# =======================================
|
||||
if(LIEF_EXTERNAL_SPAN)
|
||||
message(STATUS "Using external tcb/span version")
|
||||
if(LIEF_EXTERNAL_SPAN_DIR)
|
||||
message(STATUS "External span include dir: ${LIEF_EXTERNAL_SPAN_DIR}")
|
||||
target_include_directories(LIB_LIEF SYSTEM PUBLIC
|
||||
"$<BUILD_INTERFACE:${LIEF_EXTERNAL_SPAN_DIR}>")
|
||||
endif()
|
||||
else()
|
||||
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/third-party/internal/span.hpp
|
||||
COMMAND
|
||||
${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/third-party/internal/
|
||||
COMMAND
|
||||
${CMAKE_COMMAND} -E copy_directory ${TCB_SPAN_SRC_DIR}/
|
||||
${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/third-party/internal/
|
||||
DEPENDS lief_span)
|
||||
|
||||
target_sources(LIB_LIEF PRIVATE
|
||||
${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/third-party/internal/span.hpp)
|
||||
endif()
|
||||
|
||||
target_link_libraries(LIB_LIEF PRIVATE lief_spdlog)
|
||||
|
||||
if(ANDROID AND BUILD_SHARED_LIBS AND LIEF_LOGGING)
|
||||
target_link_libraries(LIB_LIEF PUBLIC log)
|
||||
endif()
|
||||
|
||||
# Flags definition
|
||||
# ----------------
|
||||
@@ -359,7 +473,7 @@ add_dependencies(LIB_LIEF lief_spdlog lief_mbed_tls)
|
||||
set_target_properties(
|
||||
LIB_LIEF
|
||||
PROPERTIES POSITION_INDEPENDENT_CODE ON
|
||||
CXX_STANDARD 11
|
||||
CXX_STANDARD 17
|
||||
CXX_STANDARD_REQUIRED ON
|
||||
CXX_VISIBILITY_PRESET hidden
|
||||
C_VISIBILITY_PRESET hidden)
|
||||
@@ -374,27 +488,15 @@ endif()
|
||||
|
||||
target_compile_definitions(LIB_LIEF PUBLIC -D_GLIBCXX_USE_CXX11_ABI=1)
|
||||
|
||||
# Enable support for MD2 and MD4 for parsing the Authenticode sigs of older
|
||||
# executables. Also, some older signed executables use certs with the
|
||||
# SpcSpAgencyInfo Critical Extension, which mbed TLS doesn't support, so set
|
||||
# MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION to have it skip this
|
||||
# extension.
|
||||
add_definitions(-DMBEDTLS_MD2_C -DMBEDTLS_MD4_C -DMBEDTLS_PEM_PARSE_C
|
||||
-DMBEDTLS_X509_CRT_PARSE_C -DMBEDTLS_PEM_WRITE_C
|
||||
-DMBEDTLS_PKCS1_V15 -DMBEDTLS_PKCS1_V21
|
||||
-DMBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION)
|
||||
|
||||
# ASAN - LSAN - TSAN - USAN
|
||||
# ~~~
|
||||
# LIEF Sanitizer options
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
set(SANITIZER_FLAGS -fno-omit-frame-pointer -g -O1)
|
||||
if(LIEF_ASAN)
|
||||
message(STATUS "Address sanitizer enabled")
|
||||
list(APPEND SANITIZER_FLAGS -fsanitize=address)
|
||||
|
||||
set_property(
|
||||
TARGET LIB_LIEF
|
||||
APPEND
|
||||
PROPERTY LINK_FLAGS -fsanitize=address)
|
||||
set_property(TARGET LIB_LIEF
|
||||
APPEND PROPERTY LINK_FLAGS -fsanitize=address)
|
||||
target_link_libraries(LIB_LIEF INTERFACE asan)
|
||||
endif()
|
||||
|
||||
@@ -402,10 +504,8 @@ if(LIEF_LSAN)
|
||||
message(STATUS "Leak sanitizer enabled")
|
||||
list(APPEND SANITIZER_FLAGS -fsanitize=leak)
|
||||
|
||||
set_property(
|
||||
TARGET LIB_LIEF
|
||||
APPEND
|
||||
PROPERTY LINK_FLAGS -fsanitize=leak)
|
||||
set_property(TARGET LIB_LIEF
|
||||
APPEND PROPERTY LINK_FLAGS -fsanitize=leak)
|
||||
|
||||
target_link_libraries(LIB_LIEF INTERFACE lsan)
|
||||
endif()
|
||||
@@ -414,88 +514,60 @@ if(LIEF_TSAN)
|
||||
message(STATUS "Thread sanitizer enabled")
|
||||
list(APPEND SANITIZER_FLAGS -fsanitize=thread)
|
||||
|
||||
set_property(
|
||||
TARGET LIB_LIEF
|
||||
APPEND
|
||||
PROPERTY LINK_FLAGS -fsanitize=thread)
|
||||
set_property(TARGET LIB_LIEF
|
||||
APPEND PROPERTY LINK_FLAGS -fsanitize=thread)
|
||||
|
||||
target_link_libraries(LIB_LIEF INTERFACE tsan)
|
||||
endif()
|
||||
|
||||
if(LIEF_USAN)
|
||||
message(STATUS "Undefined sanitizer enabled")
|
||||
list(APPEND SANITIZER_FLAGS -fsanitize=undefined)
|
||||
list(APPEND SANITIZER_FLAGS -fsanitize=undefined,null,alignment)
|
||||
|
||||
set_property(
|
||||
TARGET LIB_LIEF
|
||||
APPEND
|
||||
PROPERTY LINK_FLAGS -fsanitize=undefined)
|
||||
set_property(TARGET LIB_LIEF
|
||||
APPEND PROPERTY LINK_FLAGS -fsanitize=undefined,null,alignment)
|
||||
target_link_options(LIB_LIEF PUBLIC -fsanitize=undefined,null,alignment)
|
||||
|
||||
target_link_libraries(LIB_LIEF INTERFACE ubsan)
|
||||
target_link_libraries(LIB_LIEF PUBLIC ubsan -fsanitize=undefined,null,alignment)
|
||||
endif()
|
||||
|
||||
if(LIEF_ASAN
|
||||
OR LIEF_LSAN
|
||||
OR LIEF_TSAN
|
||||
OR LIEF_USAN)
|
||||
target_compile_options(LIB_LIEF PRIVATE ${SANITIZER_FLAGS})
|
||||
set(LIEF_SANITIZER OFF)
|
||||
if(LIEF_ASAN OR LIEF_LSAN OR LIEF_TSAN OR LIEF_USAN)
|
||||
set(LIEF_SANITIZER ON)
|
||||
endif()
|
||||
|
||||
# Fuzzing
|
||||
# ~~~
|
||||
if(LIEF_SANITIZER)
|
||||
message("LIEF Sanitizer enabled: ${SANITIZER_FLAGS}")
|
||||
target_compile_options(LIB_LIEF PUBLIC ${SANITIZER_FLAGS})
|
||||
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/tests/sanitizer")
|
||||
endif()
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
# Fuzzing options
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
if(LIEF_FUZZING)
|
||||
set_property(
|
||||
TARGET LIB_LIEF
|
||||
APPEND
|
||||
PROPERTY LINK_FLAGS ${FUZZING_LINKER_FLAGS})
|
||||
set(FUZZING_FLAGS -fno-omit-frame-pointer -g -O2 -fsanitize=address,fuzzer-no-link)
|
||||
set(FUZZING_LINKER_FLAGS -fsanitize=address,fuzzer-no-link)
|
||||
set_property(TARGET LIB_LIEF
|
||||
APPEND PROPERTY LINK_FLAGS ${FUZZING_LINKER_FLAGS})
|
||||
|
||||
target_compile_options(LIB_LIEF PRIVATE ${FUZZING_FLAGS})
|
||||
|
||||
target_link_libraries(LIB_LIEF asan pthread)
|
||||
|
||||
add_dependencies(LIB_LIEF lief_libfuzzer)
|
||||
target_link_libraries(LIB_LIEF PUBLIC asan pthread)
|
||||
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/fuzzing")
|
||||
endif()
|
||||
|
||||
# Compile Flags
|
||||
# =============
|
||||
include(LIEFCompilerFlags)
|
||||
|
||||
# Profiling flags
|
||||
# ---------------
|
||||
if(LIEF_PROFILING)
|
||||
set(PROFILING_FLAGS
|
||||
-fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc
|
||||
-fno-builtin-free -fno-omit-frame-pointer -g)
|
||||
target_compile_options(LIB_LIEF PUBLIC ${PROFILING_FLAGS})
|
||||
|
||||
add_executable(elf_profiler profiling/elf_profiler.cpp)
|
||||
target_compile_options(elf_profiler PUBLIC ${PROFILING_FLAGS})
|
||||
target_link_libraries(elf_profiler PRIVATE LIB_LIEF)
|
||||
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/profiling")
|
||||
endif()
|
||||
|
||||
# Coverage flags
|
||||
# --------------
|
||||
if(LIEF_COVERAGE)
|
||||
target_compile_options(LIB_LIEF PRIVATE -g -O0 --coverage -fprofile-arcs
|
||||
-ftest-coverage)
|
||||
target_link_libraries(LIB_LIEF gcov)
|
||||
endif()
|
||||
set_target_properties(LIB_LIEF PROPERTIES
|
||||
OUTPUT_NAME LIEF
|
||||
EXPORT_NAME LIEF
|
||||
CLEAN_DIRECT_OUTPUT 1)
|
||||
|
||||
|
||||
if(MSVC)
|
||||
string(TOLOWER "${CMAKE_BUILD_TYPE}" build_type)
|
||||
if(build_type STREQUAL "debug")
|
||||
set(CRT_OUTPUT_SUFFIX ${LIEF_USE_CRT_DEBUG})
|
||||
else()
|
||||
set(CRT_OUTPUT_SUFFIX ${LIEF_USE_CRT_RELEASE})
|
||||
endif()
|
||||
set_target_properties(LIB_LIEF PROPERTIES OUTPUT_NAME LIEF${CRT_OUTPUT_SUFFIX}
|
||||
CLEAN_DIRECT_OUTPUT 1)
|
||||
else()
|
||||
set_target_properties(LIB_LIEF PROPERTIES OUTPUT_NAME LIEF CLEAN_DIRECT_OUTPUT
|
||||
1)
|
||||
endif()
|
||||
|
||||
# Set a default build type if none was specified
|
||||
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
||||
message(STATUS "Setting build type to 'Release' as none was specified.")
|
||||
@@ -504,16 +576,14 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
||||
CACHE STRING "Choose the type of build." FORCE)
|
||||
# Set the possible values of build type for cmake-gui
|
||||
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release"
|
||||
"MinSizeRel" "RelWithDebInfo")
|
||||
"MinSizeRel" "RelWithDebInfo")
|
||||
endif()
|
||||
|
||||
message(STATUS "Configuration Types: ${CMAKE_CONFIGURATION_TYPES}")
|
||||
message(STATUS "Build Types: ${CMAKE_BUILD_TYPE}")
|
||||
message(STATUS "Build Types: ${CMAKE_BUILD_TYPE}")
|
||||
|
||||
if(APPLE)
|
||||
set_target_properties(LIB_LIEF PROPERTIES
|
||||
MACOSX_RPATH ON
|
||||
)
|
||||
set_target_properties(LIB_LIEF PROPERTIES MACOSX_RPATH ON)
|
||||
endif()
|
||||
|
||||
# API
|
||||
@@ -540,22 +610,10 @@ if(LIEF_DOC)
|
||||
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/doc)
|
||||
endif()
|
||||
|
||||
# Find Package Config
|
||||
# ======================
|
||||
configure_package_config_file(
|
||||
LIEFConfig.cmake.in
|
||||
${CMAKE_CURRENT_BINARY_DIR}/LIEFConfig.cmake
|
||||
INSTALL_DESTINATION share/LIEF/cmake)
|
||||
|
||||
write_basic_package_version_file(
|
||||
${CMAKE_CURRENT_BINARY_DIR}/LIEFConfigVersion.cmake
|
||||
VERSION ${PROJECT_VERSION}
|
||||
COMPATIBILITY AnyNewerVersion)
|
||||
|
||||
# Post-build operations
|
||||
# ======================
|
||||
if (BUILD_SHARED_LIBS AND CMAKE_BUILD_TYPE MATCHES "Release")
|
||||
if (UNIX AND NOT APPLE)
|
||||
if(BUILD_SHARED_LIBS AND CMAKE_BUILD_TYPE MATCHES "Release")
|
||||
if(UNIX AND NOT APPLE)
|
||||
add_custom_command(
|
||||
TARGET LIB_LIEF
|
||||
COMMENT "Strip LIEF shared library"
|
||||
@@ -564,7 +622,7 @@ if (BUILD_SHARED_LIBS AND CMAKE_BUILD_TYPE MATCHES "Release")
|
||||
)
|
||||
endif()
|
||||
|
||||
if (APPLE)
|
||||
if(APPLE)
|
||||
add_custom_command(
|
||||
TARGET LIB_LIEF
|
||||
COMMENT "Strip LIEF shared library"
|
||||
@@ -574,55 +632,101 @@ if (BUILD_SHARED_LIBS AND CMAKE_BUILD_TYPE MATCHES "Release")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Install Prefix
|
||||
# ======================
|
||||
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND UNIX)
|
||||
if(UNIX AND NOT APPLE)
|
||||
set(CMAKE_INSTALL_PREFIX
|
||||
"/usr"
|
||||
CACHE PATH "Install path prefix prepended on to install directories."
|
||||
FORCE)
|
||||
elseif(APPLE)
|
||||
set(CMAKE_INSTALL_PREFIX
|
||||
"/usr/local"
|
||||
CACHE PATH "" FORCE)
|
||||
# Generate install target and package
|
||||
# =======================================
|
||||
if(LIEF_INSTALL)
|
||||
|
||||
# Find Package Config
|
||||
# ======================
|
||||
configure_file(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/cmake/LIEFConfig.cmake.in
|
||||
${CMAKE_CURRENT_BINARY_DIR}/LIEFConfig.cmake
|
||||
@ONLY)
|
||||
|
||||
write_basic_package_version_file(
|
||||
${CMAKE_CURRENT_BINARY_DIR}/LIEFConfigVersion.cmake
|
||||
VERSION ${PROJECT_VERSION}
|
||||
COMPATIBILITY AnyNewerVersion)
|
||||
|
||||
# Install Prefix
|
||||
# ======================
|
||||
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND UNIX)
|
||||
if(UNIX AND NOT APPLE)
|
||||
set(CMAKE_INSTALL_PREFIX
|
||||
"/usr"
|
||||
CACHE PATH "Install path prefix prepended on to install directories."
|
||||
FORCE)
|
||||
elseif(APPLE)
|
||||
set(CMAKE_INSTALL_PREFIX
|
||||
"/usr/local"
|
||||
CACHE PATH "" FORCE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Installation
|
||||
# ======================
|
||||
|
||||
if(UNIX)
|
||||
include(GNUInstallDirs)
|
||||
set(CMAKE_INSTALL_LIBDIR "lib")
|
||||
else()
|
||||
if(WIN32)
|
||||
set(CMAKE_INSTALL_LIBDIR "lib")
|
||||
set(CMAKE_INSTALL_DATADIR "share")
|
||||
set(CMAKE_INSTALL_INCLUDEDIR "include")
|
||||
set(CMAKE_INSTALL_BINDIR "bin")
|
||||
set(CMAKE_INSTALL_DATAROOTDIR "share")
|
||||
message(STATUS "Setting installation destination on Windows to: ${CMAKE_INSTALL_PREFIX}")
|
||||
else()
|
||||
message(FATAL_ERROR "System not UNIX nor WIN32 - not implemented yet")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
install(
|
||||
TARGETS LIB_LIEF lief_spdlog
|
||||
EXPORT LIEFExport
|
||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries
|
||||
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
||||
|
||||
install(
|
||||
DIRECTORY ${LIEF_PUBLIC_INCLUDE_DIR}
|
||||
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
||||
COMPONENT headers
|
||||
FILES_MATCHING
|
||||
REGEX "(.*).(hpp|h|def|inc)$")
|
||||
|
||||
install(
|
||||
FILES ${CMAKE_CURRENT_BINARY_DIR}/LIEFConfig.cmake
|
||||
${CMAKE_CURRENT_BINARY_DIR}/LIEFConfigVersion.cmake
|
||||
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/LIEF/cmake
|
||||
COMPONENT config)
|
||||
|
||||
install(
|
||||
FILES ${CMAKE_CURRENT_BINARY_DIR}/LIEF.pc
|
||||
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
|
||||
COMPONENT libraries)
|
||||
|
||||
if(BUILD_SHARED_LIBS)
|
||||
set(lib_type shared)
|
||||
else()
|
||||
set(lib_type static)
|
||||
endif()
|
||||
|
||||
install(
|
||||
EXPORT LIEFExport
|
||||
NAMESPACE LIEF::
|
||||
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/LIEF/cmake
|
||||
FILE LIEFExport-${lib_type}.cmake
|
||||
COMPONENT config)
|
||||
|
||||
export(
|
||||
EXPORT LIEFExport
|
||||
NAMESPACE LIEF::
|
||||
FILE LIEFExport-${lib_type}.cmake)
|
||||
|
||||
# Package
|
||||
# ======================
|
||||
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/package")
|
||||
endif()
|
||||
|
||||
# Installation
|
||||
# ======================
|
||||
|
||||
install(
|
||||
TARGETS LIB_LIEF
|
||||
ARCHIVE DESTINATION lib
|
||||
LIBRARY DESTINATION lib
|
||||
RUNTIME DESTINATION lib COMPONENT libraries)
|
||||
|
||||
install(
|
||||
DIRECTORY ${LIEF_PUBLIC_INCLUDE_DIR}
|
||||
DESTINATION include
|
||||
COMPONENT headers
|
||||
FILES_MATCHING
|
||||
REGEX "(.*).(hpp|h|def)$")
|
||||
|
||||
install(
|
||||
FILES ${CMAKE_CURRENT_SOURCE_DIR}/scripts/FindLIEF.cmake
|
||||
DESTINATION share/LIEF/cmake
|
||||
COMPONENT CMakeScripts)
|
||||
|
||||
install(
|
||||
FILES ${CMAKE_CURRENT_BINARY_DIR}/LIEFConfig.cmake
|
||||
${CMAKE_CURRENT_BINARY_DIR}/LIEFConfigVersion.cmake
|
||||
DESTINATION share/LIEF/cmake
|
||||
COMPONENT config)
|
||||
|
||||
install(
|
||||
FILES ${CMAKE_BINARY_DIR}/LIEF.pc
|
||||
DESTINATION lib/pkgconfig
|
||||
COMPONENT libraries)
|
||||
|
||||
export(TARGETS LIB_LIEF FILE LIEFExport.cmake)
|
||||
|
||||
# Package
|
||||
# ======================
|
||||
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/package")
|
||||
|
||||
-21
@@ -1,21 +0,0 @@
|
||||
# Docker file used to compile LIEF on Linux x86-64 compliant with Python tag: manylinux1
|
||||
# docker build -t liefproject/manylinux1_x86_64:latest -f ./Dockerfile .
|
||||
FROM quay.io/pypa/manylinux1_x86_64:2020-12-30-e2b3664
|
||||
|
||||
RUN yum update -y \
|
||||
&& yum install -y ccache \
|
||||
&& yum clean all
|
||||
|
||||
RUN /opt/python/cp37-cp37m/bin/pip install cmake==3.13.3 ninja==1.10.0.post2
|
||||
ENV PATH=$PATH:/opt/python/cp37-cp37m/bin/
|
||||
|
||||
RUN curl --output /tmp/gcc-6.3.0-binutils-2.27-x86_64.tar.bz2 -L https://github.com/squeaky-pl/centos-devtools/releases/download/6.3/gcc-6.3.0-binutils-2.27-x86_64.tar.bz2 && \
|
||||
echo "ca3e9f92411507018c839c8cc2b496f14956a49fcf6df0cdcb356de7161bcbc5 /tmp/gcc-6.3.0-binutils-2.27-x86_64.tar.bz2" | sha256sum --check --status && \
|
||||
tar -C / -xj -f /tmp/gcc-6.3.0-binutils-2.27-x86_64.tar.bz2 && \
|
||||
rm -rf /tmp/gcc-6.3.0-binutils-2.27-x86_64.tar.bz2
|
||||
|
||||
ENV CC=/opt/devtools-6.3/bin/gcc
|
||||
ENV CXX=/opt/devtools-6.3/bin/g++
|
||||
ENV CXXFLAGS="-static-libstdc++ -static-libgcc"
|
||||
|
||||
WORKDIR /src
|
||||
@@ -186,8 +186,8 @@
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright 2017 - 2021 R. Thomas
|
||||
Copyright 2017 - 2021 Quarkslab
|
||||
Copyright 2017 - 2023 R. Thomas
|
||||
Copyright 2017 - 2023 Quarkslab
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
@PACKAGE_INIT@
|
||||
|
||||
set(LIEF_DIR "${PACKAGE_PREFIX_DIR}")
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/FindLIEF.cmake")
|
||||
-26
@@ -1,26 +0,0 @@
|
||||
include README.md LICENSE setup.cfg CMakeLists.txt LIEF.pc.in LIEFConfig.cmake.in
|
||||
|
||||
# Examples
|
||||
recursive-include examples *
|
||||
|
||||
# LIEF Sources
|
||||
recursive-include src *
|
||||
recursive-include include *
|
||||
|
||||
recursive-include third-party *
|
||||
recursive-include cmake *
|
||||
recursive-include scripts *
|
||||
|
||||
# Bindings
|
||||
recursive-include api *
|
||||
prune api/python/build
|
||||
|
||||
# Global exclude
|
||||
recursive-exclude *.egg-info *.so
|
||||
|
||||
# Install script
|
||||
recursive-include package *
|
||||
|
||||
# Documentation
|
||||
recursive-include doc *
|
||||
|
||||
@@ -3,32 +3,32 @@
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://gitter.im/lief-project">
|
||||
<img src="https://img.shields.io/gitter/room/gitterHQ/gitter.svg?style=flat-square">
|
||||
<a href="https://discord.gg/7hRFGWYedu">
|
||||
<img src="https://img.shields.io/discord/1117013848914931762">
|
||||
</a>
|
||||
|
||||
<a href="https://travis-ci.com/lief-project/LIEF">
|
||||
<img alt="Linux CI status" src="https://img.shields.io/travis/com/lief-project/LIEF/master?label=Linux%20x86-64&logo=travis">
|
||||
<a href="https://github.com/lief-project/LIEF/actions/workflows/linux-x86-64.yml">
|
||||
<img alt="Linux x86-64 CI status" src="https://img.shields.io/github/actions/workflow/status/lief-project/LIEF/linux-x86-64.yml?branch=master&label=Linux%20x86-64&logo=github">
|
||||
</a>
|
||||
|
||||
<a href="https://github.com/lief-project/LIEF/actions?query=workflow%3A%22Linux+AArch64%22">
|
||||
<img alt="Linux AArch64 CI status" src="https://img.shields.io/github/workflow/status/lief-project/LIEF/Linux%20AArch64/master?label=Linux%20AArch64&logo=github">
|
||||
<a href="https://github.com/lief-project/LIEF/actions/workflows/linux-aarch64.yml">
|
||||
<img alt="Linux AArch64 CI status" src="https://img.shields.io/github/actions/workflow/status/lief-project/LIEF/linux-aarch64.yml?branch=master&label=Linux%20AArch64&logo=github">
|
||||
</a>
|
||||
|
||||
<a href="https://github.com/lief-project/LIEF/actions?query=workflow%3AAndroid">
|
||||
<img alt="Android CI status" src="https://img.shields.io/github/workflow/status/lief-project/LIEF/Android/master?label=Android&logo=github">
|
||||
<a href="https://github.com/lief-project/LIEF/actions/workflows/android.yml">
|
||||
<img alt="Android CI status" src="https://img.shields.io/github/actions/workflow/status/lief-project/LIEF/android.yml?branch=master&label=Android&logo=github">
|
||||
</a>
|
||||
|
||||
<a href="https://github.com/lief-project/LIEF/actions?query=workflow%3AmacOS">
|
||||
<img alt="macOS CI status" src="https://img.shields.io/github/workflow/status/lief-project/LIEF/macOS/master?label=macOS&logo=github">
|
||||
<a href="https://github.com/lief-project/LIEF/actions/workflows/osx.yml">
|
||||
<img alt="macOS CI status" src="https://img.shields.io/github/actions/workflow/status/lief-project/LIEF/osx.yml?branch=master&label=macOS&logo=github">
|
||||
</a>
|
||||
|
||||
<a href="https://github.com/lief-project/LIEF/actions?query=workflow%3AiOS">
|
||||
<img alt="iOS CI status" src="https://img.shields.io/github/workflow/status/lief-project/LIEF/iOS/master?label=iOS&logo=github">
|
||||
<a href="https://github.com/lief-project/LIEF/actions/workflows/ios.yml">
|
||||
<img alt="iOS CI status" src="https://img.shields.io/github/actions/workflow/status/lief-project/LIEF/ios.yml?branch=master&label=iOS&logo=github">
|
||||
</a>
|
||||
|
||||
<a href="https://ci.appveyor.com/project/Romain/lief/branch/master">
|
||||
<img alt="Windows CI status" src="https://img.shields.io/appveyor/build/Romain/LIEF/master?label=Windows&logo=appveyor">
|
||||
<a href="https://github.com/lief-project/LIEF/actions/workflows/windows-all.yml">
|
||||
<img alt="Windows CI status" src="https://img.shields.io/github/actions/workflow/status/lief-project/LIEF/windows-all.yml?branch=master&label=Windows&logo=github">
|
||||
</a>
|
||||
|
||||
<a href="https://github.com/lief-project/LIEF/releases">
|
||||
@@ -36,14 +36,22 @@
|
||||
</a>
|
||||
|
||||
<a href="https://twitter.com/LIEF_project">
|
||||
<img alt="Twitter Follow" src="https://img.shields.io/twitter/follow/lief_project?color=1da1f2&label=Follow&logo=twitter&logoColor=white&style=flat-square">
|
||||
<img alt="Twitter Follow" src="https://img.shields.io/twitter/follow/lief_project">
|
||||
</a>
|
||||
|
||||
</p>
|
||||
|
||||
<br />
|
||||
<p align="center">
|
||||
<a href="https://lief-project.github.io/blog/"><b>Blog</b></a> •
|
||||
<a href="https://lief-project.github.io/doc/latest/index.html"><b>Documentation</b></a> •
|
||||
<a href="#user-content-about-1"><b>About</b></a>
|
||||
</p>
|
||||
<br />
|
||||
|
||||
# About
|
||||
|
||||
The purpose of this project is to provide a cross platform library which can parse, modify and abstract ELF, PE and MachO formats.
|
||||
The purpose of this project is to provide a cross platform library which can parse,
|
||||
modify and abstract ELF, PE and MachO formats.
|
||||
|
||||
Main features:
|
||||
|
||||
@@ -58,22 +66,22 @@ Main features:
|
||||
- [Download / Install](#downloads--install)
|
||||
- [Getting started](#getting-started)
|
||||
- [Documentation](#documentation)
|
||||
- [Sphinx](https://lief.quarkslab.com/doc/stable/index.html)
|
||||
- [Doxygen](https://lief.quarkslab.com/doc/latest/doxygen/index.html)
|
||||
- [Sphinx](https://lief-project.github.io/doc/stable/index.html)
|
||||
- [Doxygen](https://lief-project.github.io/doc/latest/doxygen/index.html)
|
||||
- Tutorials:
|
||||
- [Parse and manipulate formats](https://lief.quarkslab.com/doc/latest/tutorials/01_play_with_formats.html)
|
||||
- [Create a PE from scratch](https://lief.quarkslab.com/doc/latest/tutorials/02_pe_from_scratch.html)
|
||||
- [Play with ELF symbols](https://lief.quarkslab.com/doc/latest/tutorials/03_elf_change_symbols.html)
|
||||
- [ELF Hooking](https://lief.quarkslab.com/doc/latest/tutorials/04_elf_hooking.html)
|
||||
- [Infecting the plt/got](https://lief.quarkslab.com/doc/latest/tutorials/05_elf_infect_plt_got.html)
|
||||
- [PE Hooking](https://lief.quarkslab.com/doc/latest/tutorials/06_pe_hooking.html)
|
||||
- [PE Resources](https://lief.quarkslab.com/doc/latest/tutorials/07_pe_resource.html)
|
||||
- [Transforming an ELF executable into a library](https://lief.quarkslab.com/doc/latest/tutorials/08_elf_bin2lib.html)
|
||||
- [How to use frida on a non-rooted device](https://lief.quarkslab.com/doc/latest/tutorials/09_frida_lief.html)
|
||||
- [Android formats](https://lief.quarkslab.com/doc/latest/tutorials/10_android_formats.html)
|
||||
- [Mach-O modification](https://lief.quarkslab.com/doc/latest/tutorials/11_macho_modification.html)
|
||||
- [ELF Coredump](https://lief.quarkslab.com/doc/latest/tutorials/12_elf_coredump.html)
|
||||
- [PE Authenticode](https://lief.quarkslab.com/doc/latest/tutorials/13_pe_authenticode.html)
|
||||
- [Parse and manipulate formats](https://lief-project.github.io/doc/latest/tutorials/01_play_with_formats.html)
|
||||
- [Create a PE from scratch](https://lief-project.github.io/doc/latest/tutorials/02_pe_from_scratch.html)
|
||||
- [Play with ELF symbols](https://lief-project.github.io/doc/latest/tutorials/03_elf_change_symbols.html)
|
||||
- [ELF Hooking](https://lief-project.github.io/doc/latest/tutorials/04_elf_hooking.html)
|
||||
- [Infecting the plt/got](https://lief-project.github.io/doc/latest/tutorials/05_elf_infect_plt_got.html)
|
||||
- [PE Hooking](https://lief-project.github.io/doc/latest/tutorials/06_pe_hooking.html)
|
||||
- [PE Resources](https://lief-project.github.io/doc/latest/tutorials/07_pe_resource.html)
|
||||
- [Transforming an ELF executable into a library](https://lief-project.github.io/doc/latest/tutorials/08_elf_bin2lib.html)
|
||||
- [How to use frida on a non-rooted device](https://lief-project.github.io/doc/latest/tutorials/09_frida_lief.html)
|
||||
- [Android formats](https://lief-project.github.io/doc/latest/tutorials/10_android_formats.html)
|
||||
- [Mach-O modification](https://lief-project.github.io/doc/latest/tutorials/11_macho_modification.html)
|
||||
- [ELF Coredump](https://lief-project.github.io/doc/latest/tutorials/12_elf_coredump.html)
|
||||
- [PE Authenticode](https://lief-project.github.io/doc/latest/tutorials/13_pe_authenticode.html)
|
||||
- [Contact](#contact)
|
||||
- [About](#about)
|
||||
- [Authors](#authors)
|
||||
@@ -94,23 +102,25 @@ To install the latest **version** (release):
|
||||
pip install lief
|
||||
```
|
||||
|
||||
To install nightlty build:
|
||||
To install nightly build:
|
||||
|
||||
```console
|
||||
pip install [--user] --index-url https://lief.quarkslab.com/packages lief==0.12.0.dev0
|
||||
pip install [--user] --index-url https://lief.s3-website.fr-par.scw.cloud/latest lief==0.14.0.dev0
|
||||
```
|
||||
|
||||
### Packages
|
||||
|
||||
* **Nightly**: https://github.com/lief-project/packages/tree/gh-pages
|
||||
* **v0.11.0**: https://github.com/lief-project/LIEF/releases/tag/0.11.0
|
||||
- **Nightly**:
|
||||
* SDK: https://lief.s3-website.fr-par.scw.cloud/latest/sdk
|
||||
* Python Wheels: https://lief.s3-website.fr-par.scw.cloud/latest/lief
|
||||
- **v0.13.2**: https://github.com/lief-project/LIEF/releases/tag/0.13.2
|
||||
|
||||
Here are guides to install or integrate LIEF:
|
||||
|
||||
* [Python](https://lief.quarkslab.com/doc/latest/installation.html#python)
|
||||
* [VisualStudio](https://lief.quarkslab.com/doc/latest/installation.html#visual-studio-integration)
|
||||
* [XCode](https://lief.quarkslab.com/doc/latest/installation.html#xcode-integration)
|
||||
* [CMake](https://lief.quarkslab.com/doc/latest/installation.html#cmake-integration)
|
||||
* [Python](https://lief-project.github.io/doc/latest/installation.html#python)
|
||||
* [VisualStudio](https://lief-project.github.io/doc/latest/installation.html#visual-studio-integration)
|
||||
* [XCode](https://lief-project.github.io/doc/latest/installation.html#xcode-integration)
|
||||
* [CMake](https://lief-project.github.io/doc/latest/installation.html#cmake-integration)
|
||||
|
||||
## Getting started
|
||||
|
||||
@@ -139,27 +149,18 @@ print(binary)
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
// ELF
|
||||
try {
|
||||
std::unique_ptr<LIEF::ELF::Binary> elf = LIEF::ELF::Parser::parse("/bin/ls");
|
||||
std::cout << *elf << std::endl;
|
||||
} catch (const LIEF::exception& err) {
|
||||
std::cerr << err.what() << std::endl;
|
||||
if (std::unique_ptr<const LIEF::ELF::Binary> elf = LIEF::ELF::Parser::parse("/bin/ls")) {
|
||||
std::cout << *elf << '\n';
|
||||
}
|
||||
|
||||
// PE
|
||||
try {
|
||||
std::unique_ptr<LIEF::PE::Binary> pe = LIEF::PE::Parser::parse("C:\\Windows\\explorer.exe");
|
||||
std::cout << *pe << std::endl;
|
||||
} catch (const LIEF::exception& err) {
|
||||
std::cerr << err.what() << std::endl;
|
||||
if (std::unique_ptr<const LIEF::PE::Binary> pe = LIEF::PE::Parser::parse("C:\\Windows\\explorer.exe")) {
|
||||
std::cout << *pe << '\n';
|
||||
}
|
||||
|
||||
// Mach-O
|
||||
try {
|
||||
std::unique_ptr<LIEF::MachO::FatBinary> macho = LIEF::MachO::Parser::parse("/bin/ls");
|
||||
std::cout << *macho << std::endl;
|
||||
} catch (const LIEF::exception& err) {
|
||||
std::cerr << err.what() << std::endl;
|
||||
if (std::unique_ptr<LIEF::MachO::FatBinary> macho = LIEF::MachO::Parser::parse("/bin/ls")) {
|
||||
std::cout << *macho << '\n';
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -188,15 +189,15 @@ int main(int argc, char** argv) {
|
||||
|
||||
## Documentation
|
||||
|
||||
* [Main documentation](https://lief.quarkslab.com/doc/latest/index.html)
|
||||
* [Tutorial](https://lief.quarkslab.com/doc/latest/tutorials/index.html)
|
||||
* [API](https://lief.quarkslab.com/doc/latest/api/index.html)
|
||||
* [Doxygen](https://lief.quarkslab.com/doc/latest/doxygen/index.html)
|
||||
* [Main documentation](https://lief-project.github.io/doc/latest/index.html)
|
||||
* [Tutorial](https://lief-project.github.io/doc/latest/tutorials/index.html)
|
||||
* [API](https://lief-project.github.io/doc/latest/api/index.html)
|
||||
* [Doxygen](https://lief-project.github.io/doc/latest/doxygen/index.html)
|
||||
|
||||
## Contact
|
||||
|
||||
* **Mail**: lief at quarkslab com
|
||||
* **Gitter**: [lief-project](https://gitter.im/lief-project)
|
||||
* **Mail**: contact at lief re
|
||||
* **Discord**: [LIEF](https://discord.gg/7hRFGWYedu)
|
||||
|
||||
## About
|
||||
|
||||
@@ -206,19 +207,18 @@ Romain Thomas ([@rh0main](https://twitter.com/rh0main)) - [Quarkslab](https://ww
|
||||
|
||||
### License
|
||||
|
||||
LIEF is provided under the [Apache 2.0 license](https://github.com/lief-project/LIEF/blob/0.11.0/LICENSE).
|
||||
LIEF is provided under the [Apache 2.0 license](https://github.com/lief-project/LIEF/blob/0.13.0/LICENSE).
|
||||
|
||||
### Bibtex
|
||||
|
||||
```latex
|
||||
```bibtex
|
||||
@MISC {LIEF,
|
||||
author = "Romain Thomas",
|
||||
title = "LIEF - Library to Instrument Executable Formats",
|
||||
howpublished = "https://lief.quarkslab.com/",
|
||||
month = "April",
|
||||
year = "2017",
|
||||
month = "apr",
|
||||
year = "2017"
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
|
||||
|
||||
+10
-6
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -36,11 +36,10 @@ namespace LIEF {
|
||||
namespace ELF {
|
||||
void init_c_binary(Elf_Binary_t* c_binary, Binary* binary) {
|
||||
c_binary->handler = reinterpret_cast<void*>(binary);
|
||||
c_binary->name = binary->name().c_str();
|
||||
c_binary->type = static_cast<enum LIEF_ELF_ELF_CLASS>(binary->type());
|
||||
c_binary->interpreter = nullptr;
|
||||
if (binary->has_interpreter()) {
|
||||
std::string interp = binary->interpreter();
|
||||
const std::string& interp = binary->interpreter();
|
||||
c_binary->interpreter = static_cast<char*>(malloc((interp.size() + 1) * sizeof(char)));
|
||||
std::memcpy(
|
||||
reinterpret_cast<void*>(const_cast<char*>(c_binary->interpreter)),
|
||||
@@ -65,7 +64,12 @@ void init_c_binary(Elf_Binary_t* c_binary, Binary* binary) {
|
||||
|
||||
Elf_Binary_t* elf_parse(const char *file) {
|
||||
Binary* binary = Parser::parse(file).release();
|
||||
Elf_Binary_t* c_binary = static_cast<Elf_Binary_t*>(malloc(sizeof(Elf_Binary_t)));
|
||||
|
||||
if (binary == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
auto* c_binary = static_cast<Elf_Binary_t*>(malloc(sizeof(Elf_Binary_t)));
|
||||
memset(c_binary, 0, sizeof(Elf_Binary_t));
|
||||
init_c_binary(c_binary, binary);
|
||||
return c_binary;
|
||||
@@ -92,7 +96,7 @@ int elf_binary_save_header(Elf_Binary_t* binary) {
|
||||
hdr.entrypoint(binary->header.entrypoint);
|
||||
|
||||
//TODO: identity
|
||||
return true;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -32,8 +32,7 @@ set(LIEF_API_C_ELF_INCLUDE_FILES_C
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/api/c/include/LIEF/ELF/Section.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/api/c/include/LIEF/ELF/Segment.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/api/c/include/LIEF/ELF/Symbol.h"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/ELF/structures.h"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/ELF/enums.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/api/c/include/LIEF/ELF/enums.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/api/c/include/LIEF/ELF/utils.h"
|
||||
)
|
||||
|
||||
|
||||
+34
-24
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -27,7 +27,7 @@ namespace ELF {
|
||||
|
||||
void init_c_dynamic_entries(Elf_Binary_t* c_binary, Binary* binary) {
|
||||
|
||||
it_dynamic_entries dyn_entries = binary->dynamic_entries();
|
||||
Binary::it_dynamic_entries dyn_entries = binary->dynamic_entries();
|
||||
c_binary->dynamic_entries = static_cast<Elf_DynamicEntry_t**>(
|
||||
malloc((dyn_entries.size() + 1) * sizeof(Elf_DynamicEntry_t**)));
|
||||
|
||||
@@ -37,12 +37,12 @@ void init_c_dynamic_entries(Elf_Binary_t* c_binary, Binary* binary) {
|
||||
case DYNAMIC_TAGS::DT_NEEDED:
|
||||
{
|
||||
|
||||
Elf_DynamicEntry_Library_t* e = static_cast<Elf_DynamicEntry_Library_t*>(
|
||||
auto* e = static_cast<Elf_DynamicEntry_Library_t*>(
|
||||
malloc(sizeof(Elf_DynamicEntry_Library_t)));
|
||||
|
||||
e->tag = static_cast<enum LIEF_ELF_DYNAMIC_TAGS>(entry.tag());
|
||||
e->value = entry.value();
|
||||
e->name = dynamic_cast<DynamicEntryLibrary*>(&entry)->name().c_str();
|
||||
e->name = reinterpret_cast<DynamicEntryLibrary*>(&entry)->name().c_str();
|
||||
|
||||
c_binary->dynamic_entries[i] = reinterpret_cast<Elf_DynamicEntry_t*>(e);
|
||||
break;
|
||||
@@ -50,12 +50,12 @@ void init_c_dynamic_entries(Elf_Binary_t* c_binary, Binary* binary) {
|
||||
|
||||
case DYNAMIC_TAGS::DT_SONAME:
|
||||
{
|
||||
Elf_DynamicEntry_SharedObject_t* e = static_cast<Elf_DynamicEntry_SharedObject_t*>(
|
||||
auto* e = static_cast<Elf_DynamicEntry_SharedObject_t*>(
|
||||
malloc(sizeof(Elf_DynamicEntry_SharedObject_t)));
|
||||
|
||||
e->tag = static_cast<enum LIEF_ELF_DYNAMIC_TAGS>(entry.tag());
|
||||
e->value = entry.value();
|
||||
e->name = dynamic_cast<DynamicSharedObject*>(&entry)->name().c_str();
|
||||
e->name = reinterpret_cast<DynamicSharedObject*>(&entry)->name().c_str();
|
||||
|
||||
c_binary->dynamic_entries[i] = reinterpret_cast<Elf_DynamicEntry_t*>(e);
|
||||
break;
|
||||
@@ -63,12 +63,12 @@ void init_c_dynamic_entries(Elf_Binary_t* c_binary, Binary* binary) {
|
||||
|
||||
case DYNAMIC_TAGS::DT_RPATH:
|
||||
{
|
||||
Elf_DynamicEntry_Rpath_t* e = static_cast<Elf_DynamicEntry_Rpath_t*>(
|
||||
auto* e = static_cast<Elf_DynamicEntry_Rpath_t*>(
|
||||
malloc(sizeof(Elf_DynamicEntry_Rpath_t)));
|
||||
|
||||
e->tag = static_cast<enum LIEF_ELF_DYNAMIC_TAGS>(entry.tag());
|
||||
e->value = entry.value();
|
||||
e->rpath = dynamic_cast<DynamicEntryRpath*>(&entry)->name().c_str();
|
||||
e->rpath = reinterpret_cast<DynamicEntryRpath*>(&entry)->name().c_str();
|
||||
|
||||
c_binary->dynamic_entries[i] = reinterpret_cast<Elf_DynamicEntry_t*>(e);
|
||||
|
||||
@@ -77,12 +77,12 @@ void init_c_dynamic_entries(Elf_Binary_t* c_binary, Binary* binary) {
|
||||
|
||||
case DYNAMIC_TAGS::DT_RUNPATH:
|
||||
{
|
||||
Elf_DynamicEntry_RunPath_t* e = static_cast<Elf_DynamicEntry_RunPath_t*>(
|
||||
auto* e = static_cast<Elf_DynamicEntry_RunPath_t*>(
|
||||
malloc(sizeof(Elf_DynamicEntry_RunPath_t)));
|
||||
|
||||
e->tag = static_cast<enum LIEF_ELF_DYNAMIC_TAGS>(entry.tag());
|
||||
e->value = entry.value();
|
||||
e->runpath = dynamic_cast<DynamicEntryRunPath*>(&entry)->name().c_str();
|
||||
e->runpath = reinterpret_cast<DynamicEntryRunPath*>(&entry)->name().c_str();
|
||||
|
||||
c_binary->dynamic_entries[i] = reinterpret_cast<Elf_DynamicEntry_t*>(e);
|
||||
|
||||
@@ -93,12 +93,12 @@ void init_c_dynamic_entries(Elf_Binary_t* c_binary, Binary* binary) {
|
||||
case DYNAMIC_TAGS::DT_FINI_ARRAY:
|
||||
case DYNAMIC_TAGS::DT_PREINIT_ARRAY:
|
||||
{
|
||||
Elf_DynamicEntry_Array_t* e = static_cast<Elf_DynamicEntry_Array_t*>(
|
||||
auto* e = static_cast<Elf_DynamicEntry_Array_t*>(
|
||||
malloc(sizeof(Elf_DynamicEntry_Array_t)));
|
||||
|
||||
e->tag = static_cast<enum LIEF_ELF_DYNAMIC_TAGS>(entry.tag());
|
||||
e->value = entry.value();
|
||||
const std::vector<uint64_t>& array = dynamic_cast<DynamicEntryArray*>(&entry)->array();
|
||||
const std::vector<uint64_t>& array = reinterpret_cast<DynamicEntryArray*>(&entry)->array();
|
||||
e->array = static_cast<uint64_t*>(malloc((array.size() + 1) * sizeof(uint64_t)));
|
||||
for (size_t i = 0; i < array.size(); ++i) {
|
||||
e->array[i] = array[i];
|
||||
@@ -111,16 +111,16 @@ void init_c_dynamic_entries(Elf_Binary_t* c_binary, Binary* binary) {
|
||||
|
||||
case DYNAMIC_TAGS::DT_FLAGS:
|
||||
{
|
||||
Elf_DynamicEntry_Flags_t* e = static_cast<Elf_DynamicEntry_Flags_t*>(
|
||||
auto* e = static_cast<Elf_DynamicEntry_Flags_t*>(
|
||||
malloc(sizeof(Elf_DynamicEntry_Flags_t)));
|
||||
|
||||
e->tag = static_cast<enum LIEF_ELF_DYNAMIC_TAGS>(entry.tag());
|
||||
e->value = entry.value();
|
||||
const DynamicEntryFlags::flags_list_t& flags = dynamic_cast<DynamicEntryFlags*>(&entry)->flags();
|
||||
const DynamicEntryFlags::flags_list_t& flags = reinterpret_cast<DynamicEntryFlags*>(&entry)->flags();
|
||||
e->flags = static_cast<enum LIEF_ELF_DYNAMIC_FLAGS*>(malloc((flags.size() + 1) * sizeof(enum LIEF_ELF_DYNAMIC_FLAGS)));
|
||||
e->flags_1 = nullptr;
|
||||
|
||||
auto&& it = std::begin(flags);
|
||||
auto it = std::begin(flags);
|
||||
|
||||
for (size_t i = 0; it != std::end(flags); ++i, ++it) {
|
||||
e->flags[i] = static_cast<enum LIEF_ELF_DYNAMIC_FLAGS>(*it);
|
||||
@@ -134,16 +134,16 @@ void init_c_dynamic_entries(Elf_Binary_t* c_binary, Binary* binary) {
|
||||
|
||||
case DYNAMIC_TAGS::DT_FLAGS_1:
|
||||
{
|
||||
Elf_DynamicEntry_Flags_t* e = static_cast<Elf_DynamicEntry_Flags_t*>(
|
||||
auto* e = static_cast<Elf_DynamicEntry_Flags_t*>(
|
||||
malloc(sizeof(Elf_DynamicEntry_Flags_t)));
|
||||
|
||||
e->tag = static_cast<enum LIEF_ELF_DYNAMIC_TAGS>(entry.tag());
|
||||
e->value = entry.value();
|
||||
const DynamicEntryFlags::flags_list_t& flags = dynamic_cast<DynamicEntryFlags*>(&entry)->flags();
|
||||
const DynamicEntryFlags::flags_list_t& flags = reinterpret_cast<DynamicEntryFlags*>(&entry)->flags();
|
||||
e->flags_1 = static_cast<enum LIEF_ELF_DYNAMIC_FLAGS_1*>(malloc((flags.size() + 1) * sizeof(enum LIEF_ELF_DYNAMIC_FLAGS_1)));
|
||||
e->flags = nullptr;
|
||||
|
||||
auto&& it = std::begin(flags);
|
||||
auto it = std::begin(flags);
|
||||
|
||||
for (size_t i = 0; it != std::end(flags); ++i, ++it) {
|
||||
e->flags_1[i] = static_cast<enum LIEF_ELF_DYNAMIC_FLAGS_1>(*it);
|
||||
@@ -162,9 +162,9 @@ void init_c_dynamic_entries(Elf_Binary_t* c_binary, Binary* binary) {
|
||||
{
|
||||
c_binary->dynamic_entries[i] =
|
||||
static_cast<Elf_DynamicEntry_t*>(malloc(sizeof(Elf_DynamicEntry_t)));
|
||||
c_binary->dynamic_entries[i]->tag = static_cast<enum LIEF_ELF_DYNAMIC_TAGS>(entry.tag());
|
||||
c_binary->dynamic_entries[i]->tag = static_cast<uint64_t>(entry.tag());
|
||||
c_binary->dynamic_entries[i]->value = entry.value();
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -178,7 +178,7 @@ void init_c_dynamic_entries(Elf_Binary_t* c_binary, Binary* binary) {
|
||||
void destroy_dynamic_entries(Elf_Binary_t* c_binary) {
|
||||
|
||||
Elf_DynamicEntry_t **dynamic_entries = c_binary->dynamic_entries;
|
||||
for (size_t idx = 0; dynamic_entries[idx] != NULL; ++idx) {
|
||||
for (size_t idx = 0; dynamic_entries[idx] != nullptr; ++idx) {
|
||||
switch(static_cast<DYNAMIC_TAGS>(dynamic_entries[idx]->tag)) {
|
||||
case DYNAMIC_TAGS::DT_NEEDED:
|
||||
{
|
||||
@@ -208,14 +208,24 @@ void destroy_dynamic_entries(Elf_Binary_t* c_binary) {
|
||||
case DYNAMIC_TAGS::DT_FINI_ARRAY:
|
||||
case DYNAMIC_TAGS::DT_PREINIT_ARRAY:
|
||||
{
|
||||
free(reinterpret_cast<Elf_DynamicEntry_Array_t*>(dynamic_entries[idx]));
|
||||
Elf_DynamicEntry_Array_t* entry_array=reinterpret_cast<Elf_DynamicEntry_Array_t*>(dynamic_entries[idx]);
|
||||
free(entry_array->array);
|
||||
free(entry_array);
|
||||
break;
|
||||
}
|
||||
|
||||
case DYNAMIC_TAGS::DT_FLAGS:
|
||||
{
|
||||
Elf_DynamicEntry_Flags_t* entry_flags=reinterpret_cast<Elf_DynamicEntry_Flags_t*>(dynamic_entries[idx]);
|
||||
free(entry_flags->flags);
|
||||
free(entry_flags);
|
||||
break;
|
||||
}
|
||||
case DYNAMIC_TAGS::DT_FLAGS_1:
|
||||
{
|
||||
free(reinterpret_cast<Elf_DynamicEntry_Flags_t*>(dynamic_entries[idx]));
|
||||
Elf_DynamicEntry_Flags_t* entry_flags=reinterpret_cast<Elf_DynamicEntry_Flags_t*>(dynamic_entries[idx]);
|
||||
free(entry_flags->flags_1);
|
||||
free(entry_flags);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -16,9 +16,8 @@
|
||||
#include "LIEF/ELF/EnumToString.h"
|
||||
#include "LIEF/ELF/EnumToString.hpp"
|
||||
|
||||
#include "LIEF/ELF/Structures.hpp"
|
||||
#include "LIEF/ELF/structures.h"
|
||||
|
||||
#include "LIEF/ELF/enums.h"
|
||||
#include "LIEF/ELF/enums.hpp"
|
||||
|
||||
extern "C"
|
||||
{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
+7
-12
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -19,7 +19,7 @@ namespace LIEF {
|
||||
namespace ELF {
|
||||
void init_c_sections(Elf_Binary_t* c_binary, Binary* binary) {
|
||||
|
||||
it_sections sections = binary->sections();
|
||||
Binary::it_sections sections = binary->sections();
|
||||
|
||||
c_binary->sections = static_cast<Elf_Section_t**>(
|
||||
malloc((sections.size() + 1) * sizeof(Elf_Section_t**)));
|
||||
@@ -27,14 +27,9 @@ void init_c_sections(Elf_Binary_t* c_binary, Binary* binary) {
|
||||
for (size_t i = 0; i < sections.size(); ++i) {
|
||||
Section& b_section = sections[i];
|
||||
c_binary->sections[i] = static_cast<Elf_Section_t*>(malloc(sizeof(Elf_Section_t)));
|
||||
const std::vector<uint8_t>& section_content = b_section.content();
|
||||
uint8_t* content = static_cast<uint8_t*>(malloc(section_content.size() * sizeof(uint8_t)));
|
||||
std::copy(
|
||||
std::begin(section_content),
|
||||
std::end(section_content),
|
||||
content);
|
||||
span<const uint8_t> section_content = b_section.content();
|
||||
|
||||
c_binary->sections[i]->name = b_section.name().c_str();
|
||||
c_binary->sections[i]->name = b_section.fullname().c_str();
|
||||
c_binary->sections[i]->flags = b_section.flags();
|
||||
c_binary->sections[i]->type = static_cast<enum LIEF_ELF_ELF_SECTION_TYPES>(b_section.type());
|
||||
c_binary->sections[i]->virtual_address = b_section.virtual_address();
|
||||
@@ -44,9 +39,10 @@ void init_c_sections(Elf_Binary_t* c_binary, Binary* binary) {
|
||||
c_binary->sections[i]->info = b_section.information();
|
||||
c_binary->sections[i]->alignment = b_section.alignment();
|
||||
c_binary->sections[i]->entry_size = b_section.entry_size();
|
||||
c_binary->sections[i]->content = content;
|
||||
c_binary->sections[i]->size = section_content.size();
|
||||
c_binary->sections[i]->entropy = b_section.entropy();
|
||||
c_binary->sections[i]->content = !section_content.empty() ?
|
||||
const_cast<uint8_t*>(section_content.data()) : nullptr;
|
||||
}
|
||||
c_binary->sections[sections.size()] = nullptr;
|
||||
|
||||
@@ -58,7 +54,6 @@ void destroy_sections(Elf_Binary_t* c_binary) {
|
||||
|
||||
Elf_Section_t **sections = c_binary->sections;
|
||||
for (size_t idx = 0; sections[idx] != nullptr; ++idx) {
|
||||
free(sections[idx]->content);
|
||||
free(sections[idx]);
|
||||
}
|
||||
free(c_binary->sections);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
+6
-11
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -20,18 +20,13 @@ namespace ELF {
|
||||
|
||||
void init_c_segments(Elf_Binary_t* c_binary, Binary* binary) {
|
||||
|
||||
it_segments segments = binary->segments();
|
||||
Binary::it_segments segments = binary->segments();
|
||||
c_binary->segments = static_cast<Elf_Segment_t**>(
|
||||
malloc((segments.size() + 1) * sizeof(Elf_Segment_t**)));
|
||||
for (size_t i = 0; i < segments.size(); ++i) {
|
||||
Segment& segment = segments[i];
|
||||
|
||||
const std::vector<uint8_t>& segment_content = segment.content();
|
||||
uint8_t* content = static_cast<uint8_t*>(malloc(segment_content.size() * sizeof(uint8_t)));
|
||||
std::copy(
|
||||
std::begin(segment_content),
|
||||
std::end(segment_content),
|
||||
content);
|
||||
span<const uint8_t> segment_content = segment.content();
|
||||
|
||||
c_binary->segments[i] = static_cast<Elf_Segment_t*>(malloc(sizeof(Elf_Segment_t)));
|
||||
c_binary->segments[i]->type = static_cast<enum LIEF_ELF_SEGMENT_TYPES>(segment.type());
|
||||
@@ -41,7 +36,8 @@ void init_c_segments(Elf_Binary_t* c_binary, Binary* binary) {
|
||||
c_binary->segments[i]->offset = segment.file_offset();
|
||||
c_binary->segments[i]->alignment = segment.alignment();
|
||||
c_binary->segments[i]->size = segment_content.size();
|
||||
c_binary->segments[i]->content = content;
|
||||
c_binary->segments[i]->content = !segment_content.empty() ?
|
||||
const_cast<uint8_t*>(segment_content.data()) : nullptr;
|
||||
}
|
||||
|
||||
c_binary->segments[segments.size()] = nullptr;
|
||||
@@ -54,7 +50,6 @@ void destroy_segments(Elf_Binary_t* c_binary) {
|
||||
|
||||
Elf_Segment_t **segments = c_binary->segments;
|
||||
for (size_t idx = 0; segments[idx] != nullptr; ++idx) {
|
||||
free(segments[idx]->content);
|
||||
free(segments[idx]);
|
||||
}
|
||||
free(c_binary->segments);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -19,7 +19,7 @@ namespace LIEF {
|
||||
namespace ELF {
|
||||
|
||||
void init_c_dynamic_symbols(Elf_Binary_t* c_binary, Binary* binary) {
|
||||
it_symbols dyn_symb = binary->dynamic_symbols();
|
||||
Binary::it_dynamic_symbols dyn_symb = binary->dynamic_symbols();
|
||||
|
||||
c_binary->dynamic_symbols = static_cast<Elf_Symbol_t**>(
|
||||
malloc((dyn_symb.size() + 1) * sizeof(Elf_Symbol_t**)));
|
||||
@@ -46,7 +46,7 @@ void init_c_dynamic_symbols(Elf_Binary_t* c_binary, Binary* binary) {
|
||||
|
||||
|
||||
void init_c_static_symbols(Elf_Binary_t* c_binary, Binary* binary) {
|
||||
it_symbols static_symb = binary->static_symbols();
|
||||
Binary::it_static_symbols static_symb = binary->static_symbols();
|
||||
|
||||
c_binary->static_symbols = static_cast<Elf_Symbol_t**>(
|
||||
malloc((static_symb.size() + 1) * sizeof(Elf_Symbol_t**)));
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -32,7 +32,6 @@ namespace MachO {
|
||||
void init_c_binary(Macho_Binary_t* c_binary, Binary* binary) {
|
||||
|
||||
c_binary->handler = reinterpret_cast<void*>(binary);
|
||||
c_binary->name = binary->name().c_str();
|
||||
c_binary->imagebase = binary->imagebase();
|
||||
init_c_header(c_binary, binary);
|
||||
init_c_commands(c_binary, binary);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -26,8 +26,7 @@ set(LIEF_API_C_MACHO_INCLUDE_FILES_CPP
|
||||
|
||||
|
||||
set(LIEF_API_C_MACHO_INCLUDE_FILES_C
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/MachO/structures.h"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/MachO/enums.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/api/c/include/LIEF/MachO/enums.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/api/c/include/LIEF/MachO/Binary.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/api/c/include/LIEF/MachO/EnumToString.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/api/c/include/LIEF/MachO/Header.h"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -18,7 +18,7 @@
|
||||
namespace LIEF {
|
||||
namespace MachO {
|
||||
void init_c_commands(Macho_Binary_t* c_binary, Binary* binary) {
|
||||
it_commands commands = binary->commands();
|
||||
Binary::it_commands commands = binary->commands();
|
||||
|
||||
c_binary->commands = static_cast<Macho_Command_t**>(
|
||||
malloc((commands.size() + 1) * sizeof(Macho_Command_t**)));
|
||||
@@ -28,7 +28,7 @@ void init_c_commands(Macho_Binary_t* c_binary, Binary* binary) {
|
||||
|
||||
c_binary->commands[i] = static_cast<Macho_Command_t*>(malloc(sizeof(Macho_Command_t)));
|
||||
const std::vector<uint8_t>& cmd_content = cmd.data();
|
||||
uint8_t* content = static_cast<uint8_t*>(malloc(cmd_content.size() * sizeof(uint8_t)));
|
||||
auto* content = static_cast<uint8_t*>(malloc(cmd_content.size() * sizeof(uint8_t)));
|
||||
std::copy(
|
||||
std::begin(cmd_content),
|
||||
std::end(cmd_content),
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
+22
-12
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -24,18 +24,28 @@
|
||||
using namespace LIEF::MachO;
|
||||
|
||||
Macho_Binary_t** macho_parse(const char *file) {
|
||||
FatBinary* macho_binaries = Parser::parse(file).release();
|
||||
|
||||
Macho_Binary_t** c_macho_binaries = static_cast<Macho_Binary_t**>(
|
||||
malloc((macho_binaries->size() + 1) * sizeof(Macho_Binary_t**)));
|
||||
|
||||
for (size_t i = 0; i < macho_binaries->size(); ++i) {
|
||||
Binary& binary = (*macho_binaries)[i];
|
||||
c_macho_binaries[i] = static_cast<Macho_Binary_t*>(malloc(sizeof(Macho_Binary_t)));
|
||||
init_c_binary(c_macho_binaries[i], &binary);
|
||||
FatBinary* fat = Parser::parse(file).release();
|
||||
if (fat == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
c_macho_binaries[macho_binaries->size()] = nullptr;
|
||||
size_t nb_bin = fat->size();
|
||||
|
||||
auto** c_macho_binaries = static_cast<Macho_Binary_t**>(
|
||||
malloc((fat->size() + 1) * sizeof(Macho_Binary_t**)));
|
||||
|
||||
for (size_t i = 0; i < nb_bin; ++i) {
|
||||
Binary* binary = fat->at(i);
|
||||
if (binary != nullptr) {
|
||||
c_macho_binaries[i] = static_cast<Macho_Binary_t*>(malloc(sizeof(Macho_Binary_t)));
|
||||
init_c_binary(c_macho_binaries[i], binary);
|
||||
}
|
||||
}
|
||||
|
||||
fat->release_all_binaries();
|
||||
|
||||
c_macho_binaries[nb_bin] = nullptr;
|
||||
delete fat;
|
||||
|
||||
return c_macho_binaries;
|
||||
}
|
||||
|
||||
+10
-12
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -18,23 +18,21 @@
|
||||
namespace LIEF {
|
||||
namespace MachO {
|
||||
void init_c_sections(Macho_Binary_t* c_binary, Binary* binary) {
|
||||
it_sections sections = binary->sections();
|
||||
Binary::it_sections sections = binary->sections();
|
||||
|
||||
c_binary->sections = static_cast<Macho_Section_t**>(
|
||||
malloc((sections.size() + 1) * sizeof(Macho_Section_t**)));
|
||||
|
||||
for (size_t i = 0; i < sections.size(); ++i) {
|
||||
Section& section = sections[i];
|
||||
const Section& section = sections[i];
|
||||
|
||||
c_binary->sections[i] = static_cast<Macho_Section_t*>(malloc(sizeof(Macho_Section_t)));
|
||||
const std::vector<uint8_t>& section_content = section.content();
|
||||
uint8_t* content = static_cast<uint8_t*>(malloc(section_content.size() * sizeof(uint8_t)));
|
||||
std::copy(
|
||||
std::begin(section_content),
|
||||
std::end(section_content),
|
||||
content);
|
||||
span<const uint8_t> section_content = section.content();
|
||||
auto* content = static_cast<uint8_t*>(malloc(section_content.size() * sizeof(uint8_t)));
|
||||
std::copy(std::begin(section_content), std::end(section_content),
|
||||
content);
|
||||
|
||||
c_binary->sections[i]->name = section.name().c_str();
|
||||
c_binary->sections[i]->name = section.fullname().c_str();
|
||||
c_binary->sections[i]->alignment = section.alignment();
|
||||
c_binary->sections[i]->relocation_offset = section.relocation_offset();
|
||||
c_binary->sections[i]->numberof_relocations = section.numberof_relocations();
|
||||
@@ -45,7 +43,7 @@ void init_c_sections(Macho_Binary_t* c_binary, Binary* binary) {
|
||||
c_binary->sections[i]->reserved3 = section.reserved3();
|
||||
c_binary->sections[i]->virtual_address = section.virtual_address();
|
||||
c_binary->sections[i]->offset = section.offset();
|
||||
c_binary->sections[i]->size = section.size();
|
||||
c_binary->sections[i]->size = section_content.size();
|
||||
c_binary->sections[i]->content = content;
|
||||
c_binary->sections[i]->entropy = section.entropy();
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -18,7 +18,7 @@
|
||||
namespace LIEF {
|
||||
namespace MachO {
|
||||
void init_c_segments(Macho_Binary_t* c_binary, Binary* binary) {
|
||||
it_segments segments = binary->segments();
|
||||
Binary::it_segments segments = binary->segments();
|
||||
|
||||
c_binary->segments = static_cast<Macho_Segment_t**>(
|
||||
malloc((segments.size() + 1) * sizeof(Macho_Segment_t**)));
|
||||
@@ -27,8 +27,8 @@ void init_c_segments(Macho_Binary_t* c_binary, Binary* binary) {
|
||||
SegmentCommand& segment = segments[i];
|
||||
|
||||
c_binary->segments[i] = static_cast<Macho_Segment_t*>(malloc(sizeof(Macho_Segment_t)));
|
||||
const std::vector<uint8_t>& segment_content = segment.content();
|
||||
uint8_t* content = static_cast<uint8_t*>(malloc(segment_content.size() * sizeof(uint8_t)));
|
||||
span<const uint8_t> segment_content = segment.content();
|
||||
auto* content = static_cast<uint8_t*>(malloc(segment_content.size() * sizeof(uint8_t)));
|
||||
std::copy(
|
||||
std::begin(segment_content),
|
||||
std::end(segment_content),
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -18,13 +18,13 @@
|
||||
namespace LIEF {
|
||||
namespace MachO {
|
||||
void init_c_symbols(Macho_Binary_t* c_binary, Binary* binary) {
|
||||
it_symbols symbols = binary->symbols();
|
||||
Binary::it_symbols symbols = binary->symbols();
|
||||
|
||||
c_binary->symbols = static_cast<Macho_Symbol_t**>(
|
||||
malloc((symbols.size() + 1) * sizeof(Macho_Symbol_t**)));
|
||||
|
||||
for (size_t i = 0; i < symbols.size(); ++i) {
|
||||
Symbol& symbol = symbols[i];
|
||||
const Symbol& symbol = symbols[i];
|
||||
|
||||
c_binary->symbols[i] = static_cast<Macho_Symbol_t*>(malloc(sizeof(Macho_Symbol_t)));
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
+8
-4
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -34,7 +34,6 @@ namespace LIEF {
|
||||
namespace PE {
|
||||
|
||||
void init_c_binary(Pe_Binary_t* c_binary, Binary* binary) {
|
||||
c_binary->name = binary->name().c_str();
|
||||
c_binary->handler = reinterpret_cast<void*>(binary);
|
||||
|
||||
init_c_dos_header(c_binary, binary);
|
||||
@@ -51,7 +50,12 @@ void init_c_binary(Pe_Binary_t* c_binary, Binary* binary) {
|
||||
|
||||
Pe_Binary_t* pe_parse(const char *file) {
|
||||
Binary* binary = Parser::parse(file).release();
|
||||
Pe_Binary_t* c_binary = static_cast<Pe_Binary_t*>(malloc(sizeof(Pe_Binary_t)));
|
||||
|
||||
if (binary == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
auto* c_binary = static_cast<Pe_Binary_t*>(malloc(sizeof(Pe_Binary_t)));
|
||||
std::memset(c_binary, 0, sizeof(Pe_Binary_t));
|
||||
init_c_binary(c_binary, binary);
|
||||
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -27,8 +27,7 @@ set(LIEF_API_C_PE_INCLUDE_FILES_CPP
|
||||
)
|
||||
|
||||
set(LIEF_API_C_PE_INCLUDE_FILES_C
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/PE/structures.h"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/PE/enums.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/api/c/include/LIEF/PE/enums.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/api/c/include/LIEF/PE/Binary.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/api/c/include/LIEF/PE/DataDirectory.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/api/c/include/LIEF/PE/DosHeader.h"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -19,7 +19,7 @@ namespace LIEF {
|
||||
namespace PE {
|
||||
void init_c_data_directories(Pe_Binary_t* c_binary, Binary* binary) {
|
||||
|
||||
it_data_directories data_directories = binary->data_directories();
|
||||
Binary::it_data_directories data_directories = binary->data_directories();
|
||||
|
||||
c_binary->data_directories = static_cast<Pe_DataDirectory_t**>(
|
||||
malloc((data_directories.size() + 1) * sizeof(Pe_DataDirectory_t**)));
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
+4
-4
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -21,11 +21,11 @@ namespace PE {
|
||||
|
||||
void init_c_imports(Pe_Binary_t* c_binary, Binary* binary) {
|
||||
|
||||
if (not binary->has_imports()) {
|
||||
if (!binary->has_imports()) {
|
||||
c_binary->imports = nullptr;
|
||||
}
|
||||
|
||||
it_imports imports = binary->imports();
|
||||
Binary::it_imports imports = binary->imports();
|
||||
|
||||
c_binary->imports = static_cast<Pe_Import_t**>(
|
||||
malloc((imports.size() + 1) * sizeof(Pe_Import_t**)));
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -20,7 +20,7 @@ namespace PE {
|
||||
|
||||
void init_c_import_entries(Pe_Import_t* c_import, Import& imp) {
|
||||
|
||||
it_import_entries entries = imp.entries();
|
||||
Import::it_entries entries = imp.entries();
|
||||
|
||||
c_import->entries = static_cast<Pe_ImportEntry_t**>(
|
||||
malloc((entries.size() + 1) * sizeof(Pe_ImportEntry_t**)));
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
+8
-10
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -19,7 +19,7 @@ namespace LIEF {
|
||||
namespace PE {
|
||||
void init_c_sections(Pe_Binary_t* c_binary, Binary* binary) {
|
||||
|
||||
it_sections sections = binary->sections();
|
||||
Binary::it_sections sections = binary->sections();
|
||||
|
||||
c_binary->sections = static_cast<Pe_Section_t**>(
|
||||
malloc((sections.size() + 1) * sizeof(Pe_Section_t**)));
|
||||
@@ -27,18 +27,16 @@ void init_c_sections(Pe_Binary_t* c_binary, Binary* binary) {
|
||||
for (size_t i = 0; i < sections.size(); ++i) {
|
||||
Section& b_section = sections[i];
|
||||
c_binary->sections[i] = static_cast<Pe_Section_t*>(malloc(sizeof(Pe_Section_t)));
|
||||
std::vector<uint8_t> section_content = b_section.content();
|
||||
span<const uint8_t> section_content = b_section.content();
|
||||
uint8_t* content = nullptr;
|
||||
|
||||
if (section_content.size() > 0) {
|
||||
if (!section_content.empty()) {
|
||||
content = static_cast<uint8_t*>(malloc(section_content.size() * sizeof(uint8_t)));
|
||||
std::move(
|
||||
std::begin(section_content),
|
||||
std::end(section_content),
|
||||
content);
|
||||
std::copy(std::begin(section_content), std::end(section_content),
|
||||
content);
|
||||
}
|
||||
|
||||
c_binary->sections[i]->name = b_section.name().c_str();
|
||||
c_binary->sections[i]->name = b_section.fullname().c_str();
|
||||
c_binary->sections[i]->virtual_address = b_section.virtual_address();
|
||||
c_binary->sections[i]->size = b_section.size();
|
||||
c_binary->sections[i]->offset = b_section.offset();
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -16,7 +16,7 @@
|
||||
#ifndef C_LIEF_ELF_H_
|
||||
#define C_LIEF_ELF_H_
|
||||
|
||||
//! @defgroup elf_c_api ELF C API
|
||||
/** @defgroup elf_c_api ELF C API */
|
||||
|
||||
#include "LIEF/ELF/Binary.h"
|
||||
#include "LIEF/ELF/Symbol.h"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -34,44 +34,44 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
struct Elf_DynamicEntry_t {
|
||||
enum LIEF_ELF_DYNAMIC_TAGS tag;
|
||||
uint64_t value;
|
||||
uint64_t tag;
|
||||
uint64_t value;
|
||||
};
|
||||
|
||||
struct Elf_DynamicEntry_Library_t {
|
||||
enum LIEF_ELF_DYNAMIC_TAGS tag;
|
||||
uint64_t value;
|
||||
const char* name;
|
||||
uint64_t tag;
|
||||
uint64_t value;
|
||||
const char* name;
|
||||
};
|
||||
|
||||
struct Elf_DynamicEntry_SharedObject_t {
|
||||
enum LIEF_ELF_DYNAMIC_TAGS tag;
|
||||
uint64_t value;
|
||||
const char* name;
|
||||
uint64_t tag;
|
||||
uint64_t value;
|
||||
const char* name;
|
||||
};
|
||||
|
||||
struct Elf_DynamicEntry_Array_t {
|
||||
enum LIEF_ELF_DYNAMIC_TAGS tag;
|
||||
uint64_t value;
|
||||
uint64_t* array;
|
||||
uint64_t tag;
|
||||
uint64_t value;
|
||||
uint64_t* array;
|
||||
};
|
||||
|
||||
struct Elf_DynamicEntry_Rpath_t {
|
||||
enum LIEF_ELF_DYNAMIC_TAGS tag;
|
||||
uint64_t value;
|
||||
const char* rpath;
|
||||
uint64_t tag;
|
||||
uint64_t value;
|
||||
const char* rpath;
|
||||
};
|
||||
|
||||
struct Elf_DynamicEntry_RunPath_t {
|
||||
enum LIEF_ELF_DYNAMIC_TAGS tag;
|
||||
uint64_t value;
|
||||
const char* runpath;
|
||||
uint64_t tag;
|
||||
uint64_t value;
|
||||
const char* runpath;
|
||||
};
|
||||
|
||||
|
||||
struct Elf_DynamicEntry_Flags_t {
|
||||
enum LIEF_ELF_DYNAMIC_TAGS tag;
|
||||
uint64_t value;
|
||||
uint64_t tag;
|
||||
uint64_t value;
|
||||
enum LIEF_ELF_DYNAMIC_FLAGS *flags;
|
||||
enum LIEF_ELF_DYNAMIC_FLAGS_1 *flags_1;
|
||||
};
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -6,11 +6,11 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define _LIEF_EN(N) LIEF_ELF_##N // enum LIEF_N {
|
||||
#define _LIEF_EN_2(N, TYPE) LIEF_ELF_##N // enum LIEF_N {
|
||||
#define _LIEF_EI(X) LIEF_ELF_##X // LIEF_X
|
||||
#define _LIEF_EN(N) LIEF_ELF_##N
|
||||
#define _LIEF_EN_2(N, TYPE) LIEF_ELF_##N
|
||||
#define _LIEF_EI(X) LIEF_ELF_##X
|
||||
|
||||
@LIEF_ELF_ENUMS@
|
||||
#include "LIEF/ELF/enums.inc"
|
||||
|
||||
#undef _LIEF_EN
|
||||
#undef _LIEF_EN_2
|
||||
@@ -1,14 +0,0 @@
|
||||
#ifndef LIEF_ELF_C_STRUCTURES_H_
|
||||
#define LIEF_ELF_C_STRUCTURES_H_
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
@LIEF_ELF_STRUCTURES@
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#endif
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -16,7 +16,7 @@
|
||||
#ifndef C_LIEF_MACHO_H_
|
||||
#define C_LIEF_MACHO_H_
|
||||
|
||||
//! @defgroup macho_c_api MachO C API
|
||||
/** @defgroup macho_c_api MachO C API */
|
||||
|
||||
#include "LIEF/MachO/Binary.h"
|
||||
#include "LIEF/MachO/Symbol.h"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -24,7 +24,7 @@
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "LIEF/visibility.h"
|
||||
|
||||
@@ -33,7 +33,6 @@
|
||||
#include "LIEF/MachO/Symbol.h"
|
||||
#include "LIEF/MachO/Section.h"
|
||||
#include "LIEF/MachO/Segment.h"
|
||||
#include "LIEF/MachO/enums.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2017 - 2021 R. Thomas
|
||||
* Copyright 2017 - 2021 Quarkslab
|
||||
/* Copyright 2017 - 2023 R. Thomas
|
||||
* Copyright 2017 - 2023 Quarkslab
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user