build.yml 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. name: build
  2. on:
  3. push:
  4. pull_request:
  5. schedule:
  6. - cron: '0 0 1 * *'
  7. jobs:
  8. build-linux-ubuntu:
  9. runs-on: ubuntu-latest
  10. steps:
  11. - name: install dependencies
  12. run: |
  13. sudo apt-get update
  14. pip install cython
  15. - name: prepare environment
  16. run: |
  17. echo "target_triplet=`gcc -dumpmachine`" >> $GITHUB_ENV
  18. - name: fetch libplist
  19. uses: dawidd6/action-download-artifact@v6
  20. with:
  21. github_token: ${{secrets.GITHUB_TOKEN}}
  22. workflow: build.yml
  23. name: libplist-latest_${{env.target_triplet}}
  24. repo: libimobiledevice/libplist
  25. - name: fetch libusbmuxd
  26. uses: dawidd6/action-download-artifact@v6
  27. with:
  28. github_token: ${{secrets.GITHUB_TOKEN}}
  29. workflow: build.yml
  30. name: libusbmuxd-latest_${{env.target_triplet}}
  31. repo: libimobiledevice/libusbmuxd
  32. - name: fetch libimobiledevice-glue
  33. uses: dawidd6/action-download-artifact@v6
  34. with:
  35. github_token: ${{secrets.GITHUB_TOKEN}}
  36. workflow: build.yml
  37. name: libimobiledevice-glue-latest_${{env.target_triplet}}
  38. repo: libimobiledevice/libimobiledevice-glue
  39. - name: fetch libtatsu
  40. uses: dawidd6/action-download-artifact@v6
  41. with:
  42. github_token: ${{secrets.GITHUB_TOKEN}}
  43. workflow: build.yml
  44. name: libtatsu-latest_${{env.target_triplet}}
  45. repo: libimobiledevice/libtatsu
  46. - name: install external dependencies
  47. run: |
  48. mkdir extract
  49. for I in *.tar; do
  50. tar -C extract -xvf $I
  51. done
  52. sudo cp -r extract/* /
  53. sudo ldconfig
  54. - uses: actions/checkout@v4
  55. with:
  56. fetch-depth: 0
  57. - name: autogen
  58. run: ./autogen.sh PKG_CONFIG_PATH=/usr/local/lib/pkgconfig LDFLAGS="-Wl,-rpath=/usr/local/lib" --enable-debug
  59. - name: make
  60. run: make
  61. - name: make install
  62. run: sudo make install
  63. - name: prepare artifact
  64. run: |
  65. mkdir -p dest
  66. DESTDIR=`pwd`/dest make install
  67. tar -C dest -cf libimobiledevice.tar usr
  68. - name: publish artifact
  69. uses: actions/upload-artifact@v4
  70. with:
  71. name: libimobiledevice-latest_${{env.target_triplet}}
  72. path: libimobiledevice.tar
  73. build-macOS:
  74. runs-on: macOS-latest
  75. steps:
  76. - name: install dependencies
  77. run: |
  78. if test -x "`which port`"; then
  79. sudo port install libtool autoconf automake pkgconfig
  80. else
  81. brew install libtool autoconf automake pkgconfig
  82. fi
  83. pip3 install --break-system-packages cython
  84. shell: bash
  85. - name: fetch libplist
  86. uses: dawidd6/action-download-artifact@v6
  87. with:
  88. github_token: ${{secrets.GITHUB_TOKEN}}
  89. workflow: build.yml
  90. name: libplist-latest_macOS
  91. repo: libimobiledevice/libplist
  92. - name: fetch libusbmuxd
  93. uses: dawidd6/action-download-artifact@v6
  94. with:
  95. github_token: ${{secrets.GITHUB_TOKEN}}
  96. workflow: build.yml
  97. name: libusbmuxd-latest_macOS
  98. repo: libimobiledevice/libusbmuxd
  99. - name: fetch libimobiledevice-glue
  100. uses: dawidd6/action-download-artifact@v6
  101. with:
  102. github_token: ${{secrets.GITHUB_TOKEN}}
  103. workflow: build.yml
  104. name: libimobiledevice-glue-latest_macOS
  105. repo: libimobiledevice/libimobiledevice-glue
  106. - name: fetch libtatsu
  107. uses: dawidd6/action-download-artifact@v6
  108. with:
  109. github_token: ${{secrets.GITHUB_TOKEN}}
  110. workflow: build.yml
  111. name: libtatsu-latest_macOS
  112. repo: libimobiledevice/libtatsu
  113. - name: install external dependencies
  114. run: |
  115. mkdir extract
  116. for I in *.tar; do
  117. tar -C extract -xvf $I
  118. done
  119. sudo cp -r extract/* /
  120. - uses: actions/checkout@v4
  121. - name: install additional requirements
  122. run: |
  123. mkdir -p lib
  124. curl -o lib/libcrypto.35.tbd -Ls \
  125. https://gist.github.com/nikias/94c99fd145a75a5104415e5117b0cafa/raw/5209dfbff5a871a14272afe4794e76eb4cf6f062/libcrypto.35.tbd
  126. curl -o lib/libssl.35.tbd -Ls \
  127. https://gist.github.com/nikias/94c99fd145a75a5104415e5117b0cafa/raw/5209dfbff5a871a14272afe4794e76eb4cf6f062/libssl.35.tbd
  128. echo "LIBSSL=`pwd`/lib/libssl.35.tbd" >> $GITHUB_ENV
  129. echo "LIBCRYPTO=`pwd`/lib/libcrypto.35.tbd" >> $GITHUB_ENV
  130. LIBRESSL_VER=2.2.7
  131. echo "LIBRESSL_VER=$LIBRESSL_VER" >> $GITHUB_ENV
  132. FILENAME="libressl-$LIBRESSL_VER.tar.gz"
  133. curl -o $FILENAME -Ls "https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/$FILENAME"
  134. mkdir -p deps
  135. tar -C deps -xzf $FILENAME
  136. echo "DEPSDIR=`pwd`/deps" >> $GITHUB_ENV
  137. - name: autogen
  138. run: |
  139. SDKDIR=`xcrun --sdk macosx --show-sdk-path`
  140. TESTARCHS="arm64 x86_64"
  141. USEARCHS=
  142. for ARCH in $TESTARCHS; do
  143. if echo "int main(int argc, char **argv) { return 0; }" |clang -arch $ARCH -o /dev/null -isysroot $SDKDIR -x c - 2>/dev/null; then
  144. USEARCHS="$USEARCHS -arch $ARCH"
  145. fi
  146. done
  147. export CFLAGS="$USEARCHS -isysroot $SDKDIR"
  148. echo "Using CFLAGS: $CFLAGS"
  149. PYTHON3_BIN=`xcrun -f python3`
  150. if test -x $PYTHON3_BIN; then
  151. export PYTHON=$PYTHON3_BIN
  152. PYTHON_VER=`$PYTHON3_BIN -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('VERSION'))"`
  153. PYTHON_EXEC_PREFIX=`$PYTHON3_BIN -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('exec_prefix'))"`
  154. PYTHON_LIBS_PATH=$PYTHON_EXEC_PREFIX/lib
  155. PYTHON_FRAMEWORK_PATH=$PYTHON_EXEC_PREFIX/Python3
  156. export PYTHON_CPPFLAGS="-I$PYTHON_EXEC_PREFIX/Headers"
  157. export PYTHON_LIBS="-L$PYTHON_LIBS_PATH -lpython$PYTHON_VER"
  158. export PYTHON_EXTRA_LDFLAGS="-Wl,-stack_size,1000000 -framework CoreFoundation $PYTHON_FRAMEWORK_PATH"
  159. fi
  160. ./autogen.sh PKG_CONFIG_PATH=/usr/local/lib/pkgconfig --enable-debug \
  161. openssl_CFLAGS="-I${{ env.DEPSDIR }}/libressl-${{ env.LIBRESSL_VER }}/include" \
  162. openssl_LIBS="-Xlinker ${{ env.LIBSSL }} -Xlinker ${{ env.LIBCRYPTO }}"
  163. - name: make
  164. run: make
  165. - name: make install
  166. run: sudo make install
  167. - name: prepare artifact
  168. run: |
  169. mkdir -p dest
  170. DESTDIR=`pwd`/dest make install
  171. tar -C dest -cf libimobiledevice.tar usr
  172. - name: publish artifact
  173. uses: actions/upload-artifact@v4
  174. with:
  175. name: libimobiledevice-latest_macOS
  176. path: libimobiledevice.tar
  177. build-windows:
  178. runs-on: windows-2019
  179. defaults:
  180. run:
  181. shell: msys2 {0}
  182. strategy:
  183. fail-fast: false
  184. matrix:
  185. include: [
  186. { msystem: MINGW64, arch: x86_64 },
  187. { msystem: MINGW32, arch: i686 }
  188. ]
  189. steps:
  190. - uses: msys2/setup-msys2@v2
  191. with:
  192. msystem: ${{ matrix.msystem }}
  193. release: false
  194. update: false
  195. install: >-
  196. base-devel
  197. git
  198. mingw-w64-${{ matrix.arch }}-gcc
  199. make
  200. libtool
  201. autoconf
  202. automake-wrapper
  203. - name: prepare environment
  204. run: |
  205. dest=`echo ${{ matrix.msystem }} |tr [:upper:] [:lower:]`
  206. echo "dest=$dest" >> $GITHUB_ENV
  207. echo "target_triplet=`gcc -dumpmachine`" >> $GITHUB_ENV
  208. git config --global core.autocrlf false
  209. - name: fetch libplist
  210. uses: dawidd6/action-download-artifact@v6
  211. with:
  212. github_token: ${{secrets.GITHUB_TOKEN}}
  213. workflow: build.yml
  214. name: libplist-latest_${{ matrix.arch }}-${{ env.dest }}
  215. repo: libimobiledevice/libplist
  216. - name: fetch libusbmuxd
  217. uses: dawidd6/action-download-artifact@v6
  218. with:
  219. github_token: ${{secrets.GITHUB_TOKEN}}
  220. workflow: build.yml
  221. name: libusbmuxd-latest_${{ matrix.arch }}-${{ env.dest }}
  222. repo: libimobiledevice/libusbmuxd
  223. - name: fetch libimobiledevice-glue
  224. uses: dawidd6/action-download-artifact@v6
  225. with:
  226. github_token: ${{secrets.GITHUB_TOKEN}}
  227. workflow: build.yml
  228. name: libimobiledevice-glue-latest_${{ matrix.arch }}-${{ env.dest }}
  229. repo: libimobiledevice/libimobiledevice-glue
  230. - name: fetch libtatsu
  231. uses: dawidd6/action-download-artifact@v6
  232. with:
  233. github_token: ${{secrets.GITHUB_TOKEN}}
  234. workflow: build.yml
  235. name: libtatsu-latest_${{ matrix.arch }}-${{ env.dest }}
  236. repo: libimobiledevice/libtatsu
  237. - name: install external dependencies
  238. run: |
  239. mkdir extract
  240. for I in *.tar; do
  241. tar -C extract -xvf $I
  242. done
  243. cp -r extract/* /
  244. - uses: actions/checkout@v4
  245. - name: autogen
  246. run: ./autogen.sh CC=gcc CXX=g++ --enable-debug
  247. - name: make
  248. run: make
  249. - name: make install
  250. run: make install
  251. - name: prepare artifact
  252. run: |
  253. mkdir -p dest
  254. DESTDIR=`pwd`/dest make install
  255. tar -C dest -cf libimobiledevice.tar ${{ env.dest }}
  256. - name: publish artifact
  257. uses: actions/upload-artifact@v4
  258. with:
  259. name: libimobiledevice-latest_${{ matrix.arch }}-${{ env.dest }}
  260. path: libimobiledevice.tar