build.yml 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. name: Build
  2. on:
  3. workflow_dispatch:
  4. push:
  5. branches:
  6. - 'main'
  7. paths-ignore:
  8. - '*.md'
  9. pull_request:
  10. paths-ignore:
  11. - '*.md'
  12. jobs:
  13. windows:
  14. runs-on: windows-latest
  15. steps:
  16. - name: Checkout
  17. uses: actions/checkout@v5
  18. - name: Get CMake
  19. uses: lukka/[email protected]
  20. - name: Configure win-x64
  21. run: cmake -S "." -B "build_win_64" -G "Visual Studio 17 2022" -A x64 -DCMAKE_BUILD_TYPE:String=Distribution -DCMAKE_INSTALL_PREFIX:String="SDK"
  22. - name: Build win-x64
  23. run: cmake --build build_win_64 --config Distribution
  24. - name: Configure win-x64 double
  25. run: cmake -S "." -B "build_win_64_double" -G "Visual Studio 17 2022" -A x64 -DCMAKE_BUILD_TYPE:String=Distribution -DDOUBLE_PRECISION=ON -DCMAKE_INSTALL_PREFIX:String="SDK"
  26. - name: Build win-x64 double
  27. run: cmake --build build_win_64_double --config Distribution
  28. - name: Configure win-arm64
  29. run: cmake -S "." -B "build_win_arm64" -G "Visual Studio 17 2022" -A ARM64 -DCMAKE_BUILD_TYPE:String=Distribution -DCMAKE_INSTALL_PREFIX:String="SDK"
  30. - name: Build win-arm64
  31. run: cmake --build build_win_arm64 --config Distribution
  32. - name: Configure win-arm64 double
  33. run: cmake -S "." -B "build_win_arm64_double" -G "Visual Studio 17 2022" -A ARM64 -DCMAKE_BUILD_TYPE:String=Distribution -DDOUBLE_PRECISION=ON -DCMAKE_INSTALL_PREFIX:String="SDK"
  34. - name: Build win-arm64 double
  35. run: cmake --build build_win_arm64_double --config Distribution
  36. - name: Configure win-x64 Debug
  37. run: cmake -S "." -B "build_win_64" -G "Visual Studio 17 2022" -A x64 -DCMAKE_BUILD_TYPE:String=Debug -DCMAKE_INSTALL_PREFIX:String="SDK"
  38. - name: Build win-x64 Debug
  39. run: cmake --build build_win_64 --config Debug
  40. - name: Configure win-x64 double Debug
  41. run: cmake -S "." -B "build_win_64_double" -G "Visual Studio 17 2022" -A x64 -DCMAKE_BUILD_TYPE:String=Debug -DDOUBLE_PRECISION=ON -DCMAKE_INSTALL_PREFIX:String="SDK"
  42. - name: Build win-x64 double Debug
  43. run: cmake --build build_win_64_double --config Debug
  44. - name: Configure win-arm64 Debug
  45. run: cmake -S "." -B "build_win_arm64" -G "Visual Studio 17 2022" -A ARM64 -DCMAKE_BUILD_TYPE:String=Debug -DCMAKE_INSTALL_PREFIX:String="SDK"
  46. - name: Build win-arm64 Debug
  47. run: cmake --build build_win_arm64 --config Debug
  48. - name: Configure win-arm64 double Debug
  49. run: cmake -S "." -B "build_win_arm64_double" -G "Visual Studio 17 2022" -A ARM64 -DCMAKE_BUILD_TYPE:String=Debug -DDOUBLE_PRECISION=ON -DCMAKE_INSTALL_PREFIX:String="SDK"
  50. - name: Build win-arm64 double Debug
  51. run: cmake --build build_win_arm64_double --config Debug
  52. - name: Package Windows
  53. run: |
  54. mkdir bin/win-x64
  55. mkdir bin/win-arm64
  56. mv build_win_64\bin\Distribution\joltc.dll bin/win-x64
  57. mv build_win_64\bin\Debug\joltcd.dll bin/win-x64
  58. mv build_win_64\bin\Debug\joltcd.pdb bin/win-x64
  59. mv build_win_64_double\bin\Distribution\joltc_double.dll bin/win-x64
  60. mv build_win_64_double\bin\Debug\joltc_doubled.dll bin/win-x64
  61. mv build_win_64_double\bin\Debug\joltc_doubled.pdb bin/win-x64
  62. mv build_win_arm64\bin\Distribution\joltc.dll bin/win-arm64
  63. mv build_win_arm64\bin\Debug\joltcd.dll bin/win-arm64
  64. mv build_win_arm64\bin\Debug\joltcd.pdb bin/win-arm64
  65. mv build_win_arm64_double\bin\Distribution\joltc_double.dll bin/win-arm64
  66. mv build_win_arm64_double\bin\Debug\joltc_doubled.dll bin/win-arm64
  67. mv build_win_arm64_double\bin\Debug\joltc_doubled.pdb bin/win-arm64
  68. - uses: actions/upload-artifact@v4
  69. with:
  70. name: libs_windows
  71. path: bin
  72. linux:
  73. runs-on: ubuntu-22.04
  74. steps:
  75. - uses: actions/checkout@v5
  76. - name: Get CMake
  77. uses: lukka/[email protected]
  78. - name: Install dependencies on Ubuntu
  79. run: |
  80. sudo apt-get update
  81. sudo apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu llvm
  82. # Linux
  83. - name: CMake Configure (linux-x64)
  84. run: cmake -S "." -B "build_linux_x64" -G Ninja -DCMAKE_BUILD_TYPE=Distribution -DCMAKE_INSTALL_PREFIX:String="SDK"
  85. - name: Build linux-x64
  86. run: cmake --build build_linux_x64 --config Distribution --verbose --parallel
  87. - name: CMake Configure (linux-arm64)
  88. run: cmake -S "." -B "build_linux_arm64" -G Ninja -DCMAKE_BUILD_TYPE=Distribution -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_SYSTEM_PROCESSOR=aarch64 -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_INSTALL_PREFIX:String="SDK"
  89. - name: Build linux-arm64
  90. run: cmake --build build_linux_arm64 --config Distribution --verbose --parallel
  91. - name: CMake Configure (linux-x64) Debug
  92. run: cmake -S "." -B "build_linux_x64" -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX:String="SDK"
  93. - name: Build linux-x64 Debug
  94. run: cmake --build build_linux_x64 --config Debug --verbose --parallel
  95. - name: CMake Configure (linux-arm64) Debug
  96. run: cmake -S "." -B "build_linux_arm64" -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_SYSTEM_PROCESSOR=aarch64 -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_INSTALL_PREFIX:String="SDK"
  97. - name: Build linux-arm64 Debug
  98. run: cmake --build build_linux_arm64 --config Debug --verbose --parallel
  99. # Android
  100. - name: Setup Android NDK
  101. id: setup-ndk
  102. uses: nttld/setup-ndk@v1
  103. with:
  104. ndk-version: r25
  105. add-to-path: false
  106. env:
  107. ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }}
  108. - name: CMake Configure (android-arm64-v8a)
  109. run: >
  110. cmake -S "." -B "build_android_arm64_v8a"
  111. -DANDROID_ABI=arm64-v8a
  112. -DCMAKE_BUILD_TYPE=Distribution
  113. -DANDROID_NDK=${{ steps.setup-ndk.outputs.ndk-path }}
  114. -DCMAKE_TOOLCHAIN_FILE="${{ steps.setup-ndk.outputs.ndk-path }}/build/cmake/android.toolchain.cmake"
  115. -DCMAKE_INSTALL_PREFIX:String="SDK"
  116. -DCMAKE_SHARED_LINKER_FLAGS="-Wl,-z,max-page-size=16384"
  117. - name: Build (android-arm64-v8a)
  118. run: cmake --build build_android_arm64_v8a --config Distribution --verbose --parallel
  119. - name: CMake Configure (android-armeabi-v7a)
  120. run: >
  121. cmake -S "." -B "build_android_armeabi_v7a"
  122. -DANDROID_ABI=armeabi-v7a
  123. -DCMAKE_BUILD_TYPE=Distribution
  124. -DANDROID_NDK=${{ steps.setup-ndk.outputs.ndk-path }}
  125. -DCMAKE_TOOLCHAIN_FILE="${{ steps.setup-ndk.outputs.ndk-path }}/build/cmake/android.toolchain.cmake"
  126. -DCMAKE_INSTALL_PREFIX:String="SDK"
  127. -DCMAKE_SHARED_LINKER_FLAGS="-Wl,-z,max-page-size=16384"
  128. - name: Build (android-armeabi-v7a)
  129. run: cmake --build build_android_armeabi_v7a --config Distribution --verbose --parallel
  130. - name: CMake Configure (android-x86_64)
  131. run: >
  132. cmake -S "." -B "build_android_x86_64"
  133. -DANDROID_ABI=x86_64
  134. -DCMAKE_BUILD_TYPE=Distribution
  135. -DANDROID_NDK=${{ steps.setup-ndk.outputs.ndk-path }}
  136. -DCMAKE_TOOLCHAIN_FILE="${{ steps.setup-ndk.outputs.ndk-path }}/build/cmake/android.toolchain.cmake"
  137. -DCMAKE_INSTALL_PREFIX:String="SDK"
  138. -DCMAKE_SHARED_LINKER_FLAGS="-Wl,-z,max-page-size=16384"
  139. - name: Build (android-armeabi-v7a)
  140. run: cmake --build build_android_x86_64 --config Distribution --verbose --parallel
  141. - name: CMake Configure (android-arm64-v8a) Debug
  142. run: >
  143. cmake -S "." -B "build_android_arm64_v8a"
  144. -DANDROID_ABI=arm64-v8a
  145. -DCMAKE_BUILD_TYPE=Debug
  146. -DANDROID_NDK=${{ steps.setup-ndk.outputs.ndk-path }}
  147. -DCMAKE_TOOLCHAIN_FILE="${{ steps.setup-ndk.outputs.ndk-path }}/build/cmake/android.toolchain.cmake"
  148. -DCMAKE_INSTALL_PREFIX:String="SDK"
  149. -DCMAKE_SHARED_LINKER_FLAGS="-Wl,-z,max-page-size=16384"
  150. - name: Build (android-arm64-v8a) Debug
  151. run: cmake --build build_android_arm64_v8a --config Debug --verbose --parallel
  152. - name: CMake Configure (android-armeabi-v7a) Debug
  153. run: >
  154. cmake -S "." -B "build_android_armeabi_v7a"
  155. -DANDROID_ABI=armeabi-v7a
  156. -DCMAKE_BUILD_TYPE=Debug
  157. -DANDROID_NDK=${{ steps.setup-ndk.outputs.ndk-path }}
  158. -DCMAKE_TOOLCHAIN_FILE="${{ steps.setup-ndk.outputs.ndk-path }}/build/cmake/android.toolchain.cmake"
  159. -DCMAKE_INSTALL_PREFIX:String="SDK"
  160. -DCMAKE_SHARED_LINKER_FLAGS="-Wl,-z,max-page-size=16384"
  161. - name: Build (android-armeabi-v7a) Debug
  162. run: cmake --build build_android_armeabi_v7a --config Debug --verbose --parallel
  163. - name: CMake Configure (android-x86_64) Debug
  164. run: >
  165. cmake -S "." -B "build_android_x86_64"
  166. -DANDROID_ABI=x86_64
  167. -DCMAKE_BUILD_TYPE=Debug
  168. -DANDROID_NDK=${{ steps.setup-ndk.outputs.ndk-path }}
  169. -DCMAKE_TOOLCHAIN_FILE="${{ steps.setup-ndk.outputs.ndk-path }}/build/cmake/android.toolchain.cmake"
  170. -DCMAKE_INSTALL_PREFIX:String="SDK"
  171. -DCMAKE_SHARED_LINKER_FLAGS="-Wl,-z,max-page-size=16384"
  172. - name: Build (android-armeabi-v7a) Debug
  173. run: cmake --build build_android_x86_64 --config Debug --verbose --parallel
  174. # Linux and Android artifacts
  175. - name: Package Linux and Android
  176. run: |
  177. mkdir -p bin/linux-x64
  178. mkdir -p bin/linux-arm64
  179. mkdir -p bin/android-arm64
  180. mkdir -p bin/android-arm
  181. mkdir -p bin/android-x64
  182. mv build_linux_x64/lib/libjoltc.so bin/linux-x64/libjoltc.so
  183. mv build_linux_arm64/lib/libjoltc.so bin/linux-arm64/libjoltc.so
  184. mv build_android_arm64_v8a/lib/libjoltc.so bin/android-arm64/libjoltc.so
  185. mv build_android_armeabi_v7a/lib/libjoltc.so bin/android-arm/libjoltc.so
  186. mv build_android_x86_64/lib/libjoltc.so bin/android-x64/libjoltc.so
  187. mv build_linux_x64/lib/libjoltcd.so bin/linux-x64/libjoltcd.so
  188. mv build_linux_arm64/lib/libjoltcd.so bin/linux-arm64/libjoltcd.so
  189. mv build_android_arm64_v8a/lib/libjoltcd.so bin/android-arm64/libjoltcd.so
  190. mv build_android_armeabi_v7a/lib/libjoltcd.so bin/android-arm/libjoltcd.so
  191. mv build_android_x86_64/lib/libjoltcd.so bin/android-x64/libjoltcd.so
  192. llvm-strip --strip-unneeded bin/linux-x64/libjoltc.so
  193. llvm-strip --strip-unneeded bin/linux-arm64/libjoltc.so
  194. llvm-strip --strip-unneeded bin/android-arm/libjoltc.so
  195. llvm-strip --strip-unneeded bin/android-arm64/libjoltc.so
  196. llvm-strip --strip-unneeded bin/android-x64/libjoltc.so
  197. - uses: actions/upload-artifact@v4
  198. with:
  199. name: libs_linux
  200. path: bin
  201. macos:
  202. runs-on: macos-latest
  203. steps:
  204. - uses: actions/checkout@v5
  205. - name: Get CMake
  206. uses: lukka/[email protected]
  207. - name: Configure osx-universal
  208. run: cmake -S "." -B "build_osx" -G Ninja -DCMAKE_BUILD_TYPE=Distribution -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" -DCMAKE_INSTALL_PREFIX:String="SDK"
  209. - name: Build osx-universal
  210. run: cmake --build build_osx --config Distribution --verbose --parallel
  211. - name: Configure osx-universal Debug
  212. run: cmake -S "." -B "build_osx" -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" -DCMAKE_INSTALL_PREFIX:String="SDK"
  213. - name: Build osx-universal Debug
  214. run: cmake --build build_osx --config Debug --verbose --parallel
  215. # macOS artifacts
  216. - name: package_osx
  217. run: |
  218. mkdir -p bin/osx
  219. mv build_osx/lib/libjoltc.dylib bin/osx/libjoltc.dylib
  220. mv build_osx/lib/libjoltcd.dylib bin/osx/libjoltcd.dylib
  221. - uses: actions/upload-artifact@v4
  222. with:
  223. name: libs_osx
  224. path: bin
  225. combine:
  226. name: Combine artifacts
  227. runs-on: ubuntu-latest
  228. needs: [windows, linux, macos]
  229. steps:
  230. - name: Download artifacts
  231. uses: actions/download-artifact@v4
  232. with:
  233. path: artifacts
  234. - name: Display structure of downloaded files
  235. run: ls -R
  236. working-directory: artifacts
  237. - name: Combine
  238. run: |
  239. mkdir jolt_libs
  240. cp -r artifacts/libs_windows/* jolt_libs
  241. cp -r artifacts/libs_linux/* jolt_libs
  242. cp -r artifacts/libs_osx/* jolt_libs
  243. - uses: edgarrc/action-7z@v1
  244. with:
  245. args: 7z a -t7z jolt_libs.7z ./jolt_libs/
  246. - uses: AButler/[email protected]
  247. if: github.event_name == 'release' && github.event.action == 'created'
  248. with:
  249. files: jolt_libs.zip
  250. repo-token: ${{ secrets.GITHUB_TOKEN }}
  251. - uses: actions/upload-artifact@v4
  252. with:
  253. name: 'Build Artifacts'
  254. path: jolt_libs.7z
  255. - uses: geekyeggo/delete-artifact@v5
  256. with:
  257. name: |
  258. libs_windows
  259. libs_linux
  260. libs_osx