name: Build on: workflow_dispatch: push: branches: - 'main' paths-ignore: - '*.md' pull_request: paths-ignore: - '*.md' jobs: windows: runs-on: windows-latest steps: - name: Checkout uses: actions/checkout@v5 - name: Get CMake uses: lukka/get-cmake@v4.0.2 - name: Configure win-x64 run: cmake -S "." -B "build_win_64" -G "Visual Studio 17 2022" -A x64 -DCMAKE_BUILD_TYPE:String=Distribution -DCMAKE_INSTALL_PREFIX:String="SDK" - name: Build win-x64 run: cmake --build build_win_64 --config Distribution - name: Configure win-x64 double 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" - name: Build win-x64 double run: cmake --build build_win_64_double --config Distribution - name: Configure win-arm64 run: cmake -S "." -B "build_win_arm64" -G "Visual Studio 17 2022" -A ARM64 -DCMAKE_BUILD_TYPE:String=Distribution -DCMAKE_INSTALL_PREFIX:String="SDK" - name: Build win-arm64 run: cmake --build build_win_arm64 --config Distribution - name: Configure win-arm64 double 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" - name: Build win-arm64 double run: cmake --build build_win_arm64_double --config Distribution - name: Configure win-x64 Debug run: cmake -S "." -B "build_win_64" -G "Visual Studio 17 2022" -A x64 -DCMAKE_BUILD_TYPE:String=Debug -DCMAKE_INSTALL_PREFIX:String="SDK" - name: Build win-x64 Debug run: cmake --build build_win_64 --config Debug - name: Configure win-x64 double Debug 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" - name: Build win-x64 double Debug run: cmake --build build_win_64_double --config Debug - name: Configure win-arm64 Debug run: cmake -S "." -B "build_win_arm64" -G "Visual Studio 17 2022" -A ARM64 -DCMAKE_BUILD_TYPE:String=Debug -DCMAKE_INSTALL_PREFIX:String="SDK" - name: Build win-arm64 Debug run: cmake --build build_win_arm64 --config Debug - name: Configure win-arm64 double Debug 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" - name: Build win-arm64 double Debug run: cmake --build build_win_arm64_double --config Debug - name: Package Windows run: | mkdir bin/win-x64 mkdir bin/win-arm64 mv build_win_64\bin\Distribution\joltc.dll bin/win-x64 mv build_win_64\bin\Debug\joltcd.dll bin/win-x64 mv build_win_64\bin\Debug\joltcd.pdb bin/win-x64 mv build_win_64_double\bin\Distribution\joltc_double.dll bin/win-x64 mv build_win_64_double\bin\Debug\joltc_doubled.dll bin/win-x64 mv build_win_64_double\bin\Debug\joltc_doubled.pdb bin/win-x64 mv build_win_arm64\bin\Distribution\joltc.dll bin/win-arm64 mv build_win_arm64\bin\Debug\joltcd.dll bin/win-arm64 mv build_win_arm64\bin\Debug\joltcd.pdb bin/win-arm64 mv build_win_arm64_double\bin\Distribution\joltc_double.dll bin/win-arm64 mv build_win_arm64_double\bin\Debug\joltc_doubled.dll bin/win-arm64 mv build_win_arm64_double\bin\Debug\joltc_doubled.pdb bin/win-arm64 - uses: actions/upload-artifact@v4 with: name: libs_windows path: bin linux: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v5 - name: Get CMake uses: lukka/get-cmake@v4.0.2 - name: Install dependencies on Ubuntu run: | sudo apt-get update sudo apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu llvm # Linux - name: CMake Configure (linux-x64) run: cmake -S "." -B "build_linux_x64" -G Ninja -DCMAKE_BUILD_TYPE=Distribution -DCMAKE_INSTALL_PREFIX:String="SDK" - name: Build linux-x64 run: cmake --build build_linux_x64 --config Distribution --verbose --parallel - name: CMake Configure (linux-arm64) 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" - name: Build linux-arm64 run: cmake --build build_linux_arm64 --config Distribution --verbose --parallel - name: CMake Configure (linux-x64) Debug run: cmake -S "." -B "build_linux_x64" -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX:String="SDK" - name: Build linux-x64 Debug run: cmake --build build_linux_x64 --config Debug --verbose --parallel - name: CMake Configure (linux-arm64) Debug 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" - name: Build linux-arm64 Debug run: cmake --build build_linux_arm64 --config Debug --verbose --parallel # Android - name: Setup Android NDK id: setup-ndk uses: nttld/setup-ndk@v1 with: ndk-version: r25 add-to-path: false env: ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }} - name: CMake Configure (android-arm64-v8a) run: > cmake -S "." -B "build_android_arm64_v8a" -DANDROID_ABI=arm64-v8a -DCMAKE_BUILD_TYPE=Distribution -DANDROID_NDK=${{ steps.setup-ndk.outputs.ndk-path }} -DCMAKE_TOOLCHAIN_FILE="${{ steps.setup-ndk.outputs.ndk-path }}/build/cmake/android.toolchain.cmake" -DCMAKE_INSTALL_PREFIX:String="SDK" -DCMAKE_SHARED_LINKER_FLAGS="-Wl,-z,max-page-size=16384" - name: Build (android-arm64-v8a) run: cmake --build build_android_arm64_v8a --config Distribution --verbose --parallel - name: CMake Configure (android-armeabi-v7a) run: > cmake -S "." -B "build_android_armeabi_v7a" -DANDROID_ABI=armeabi-v7a -DCMAKE_BUILD_TYPE=Distribution -DANDROID_NDK=${{ steps.setup-ndk.outputs.ndk-path }} -DCMAKE_TOOLCHAIN_FILE="${{ steps.setup-ndk.outputs.ndk-path }}/build/cmake/android.toolchain.cmake" -DCMAKE_INSTALL_PREFIX:String="SDK" -DCMAKE_SHARED_LINKER_FLAGS="-Wl,-z,max-page-size=16384" - name: Build (android-armeabi-v7a) run: cmake --build build_android_armeabi_v7a --config Distribution --verbose --parallel - name: CMake Configure (android-x86_64) run: > cmake -S "." -B "build_android_x86_64" -DANDROID_ABI=x86_64 -DCMAKE_BUILD_TYPE=Distribution -DANDROID_NDK=${{ steps.setup-ndk.outputs.ndk-path }} -DCMAKE_TOOLCHAIN_FILE="${{ steps.setup-ndk.outputs.ndk-path }}/build/cmake/android.toolchain.cmake" -DCMAKE_INSTALL_PREFIX:String="SDK" -DCMAKE_SHARED_LINKER_FLAGS="-Wl,-z,max-page-size=16384" - name: Build (android-armeabi-v7a) run: cmake --build build_android_x86_64 --config Distribution --verbose --parallel - name: CMake Configure (android-arm64-v8a) Debug run: > cmake -S "." -B "build_android_arm64_v8a" -DANDROID_ABI=arm64-v8a -DCMAKE_BUILD_TYPE=Debug -DANDROID_NDK=${{ steps.setup-ndk.outputs.ndk-path }} -DCMAKE_TOOLCHAIN_FILE="${{ steps.setup-ndk.outputs.ndk-path }}/build/cmake/android.toolchain.cmake" -DCMAKE_INSTALL_PREFIX:String="SDK" -DCMAKE_SHARED_LINKER_FLAGS="-Wl,-z,max-page-size=16384" - name: Build (android-arm64-v8a) Debug run: cmake --build build_android_arm64_v8a --config Debug --verbose --parallel - name: CMake Configure (android-armeabi-v7a) Debug run: > cmake -S "." -B "build_android_armeabi_v7a" -DANDROID_ABI=armeabi-v7a -DCMAKE_BUILD_TYPE=Debug -DANDROID_NDK=${{ steps.setup-ndk.outputs.ndk-path }} -DCMAKE_TOOLCHAIN_FILE="${{ steps.setup-ndk.outputs.ndk-path }}/build/cmake/android.toolchain.cmake" -DCMAKE_INSTALL_PREFIX:String="SDK" -DCMAKE_SHARED_LINKER_FLAGS="-Wl,-z,max-page-size=16384" - name: Build (android-armeabi-v7a) Debug run: cmake --build build_android_armeabi_v7a --config Debug --verbose --parallel - name: CMake Configure (android-x86_64) Debug run: > cmake -S "." -B "build_android_x86_64" -DANDROID_ABI=x86_64 -DCMAKE_BUILD_TYPE=Debug -DANDROID_NDK=${{ steps.setup-ndk.outputs.ndk-path }} -DCMAKE_TOOLCHAIN_FILE="${{ steps.setup-ndk.outputs.ndk-path }}/build/cmake/android.toolchain.cmake" -DCMAKE_INSTALL_PREFIX:String="SDK" -DCMAKE_SHARED_LINKER_FLAGS="-Wl,-z,max-page-size=16384" - name: Build (android-armeabi-v7a) Debug run: cmake --build build_android_x86_64 --config Debug --verbose --parallel # Linux and Android artifacts - name: Package Linux and Android run: | mkdir -p bin/linux-x64 mkdir -p bin/linux-arm64 mkdir -p bin/android-arm64 mkdir -p bin/android-arm mkdir -p bin/android-x64 mv build_linux_x64/lib/libjoltc.so bin/linux-x64/libjoltc.so mv build_linux_arm64/lib/libjoltc.so bin/linux-arm64/libjoltc.so mv build_android_arm64_v8a/lib/libjoltc.so bin/android-arm64/libjoltc.so mv build_android_armeabi_v7a/lib/libjoltc.so bin/android-arm/libjoltc.so mv build_android_x86_64/lib/libjoltc.so bin/android-x64/libjoltc.so mv build_linux_x64/lib/libjoltcd.so bin/linux-x64/libjoltcd.so mv build_linux_arm64/lib/libjoltcd.so bin/linux-arm64/libjoltcd.so mv build_android_arm64_v8a/lib/libjoltcd.so bin/android-arm64/libjoltcd.so mv build_android_armeabi_v7a/lib/libjoltcd.so bin/android-arm/libjoltcd.so mv build_android_x86_64/lib/libjoltcd.so bin/android-x64/libjoltcd.so llvm-strip --strip-unneeded bin/linux-x64/libjoltc.so llvm-strip --strip-unneeded bin/linux-arm64/libjoltc.so llvm-strip --strip-unneeded bin/android-arm/libjoltc.so llvm-strip --strip-unneeded bin/android-arm64/libjoltc.so llvm-strip --strip-unneeded bin/android-x64/libjoltc.so - uses: actions/upload-artifact@v4 with: name: libs_linux path: bin macos: runs-on: macos-latest steps: - uses: actions/checkout@v5 - name: Get CMake uses: lukka/get-cmake@v4.0.2 - name: Configure osx-universal run: cmake -S "." -B "build_osx" -G Ninja -DCMAKE_BUILD_TYPE=Distribution -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" -DCMAKE_INSTALL_PREFIX:String="SDK" - name: Build osx-universal run: cmake --build build_osx --config Distribution --verbose --parallel - name: Configure osx-universal Debug run: cmake -S "." -B "build_osx" -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" -DCMAKE_INSTALL_PREFIX:String="SDK" - name: Build osx-universal Debug run: cmake --build build_osx --config Debug --verbose --parallel # macOS artifacts - name: package_osx run: | mkdir -p bin/osx mv build_osx/lib/libjoltc.dylib bin/osx/libjoltc.dylib mv build_osx/lib/libjoltcd.dylib bin/osx/libjoltcd.dylib - uses: actions/upload-artifact@v4 with: name: libs_osx path: bin combine: name: Combine artifacts runs-on: ubuntu-latest needs: [windows, linux, macos] steps: - name: Download artifacts uses: actions/download-artifact@v4 with: path: artifacts - name: Display structure of downloaded files run: ls -R working-directory: artifacts - name: Combine run: | mkdir jolt_libs cp -r artifacts/libs_windows/* jolt_libs cp -r artifacts/libs_linux/* jolt_libs cp -r artifacts/libs_osx/* jolt_libs - uses: edgarrc/action-7z@v1 with: args: 7z a -t7z jolt_libs.7z ./jolt_libs/ - uses: AButler/upload-release-assets@v2.0 if: github.event_name == 'release' && github.event.action == 'created' with: files: jolt_libs.zip repo-token: ${{ secrets.GITHUB_TOKEN }} - uses: actions/upload-artifact@v4 with: name: 'Build Artifacts' path: jolt_libs.7z - uses: geekyeggo/delete-artifact@v5 with: name: | libs_windows libs_linux libs_osx