name: Build
permissions:
contents: read
on:
push:
workflow_dispatch:
env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: full
jobs:
build-on-host:
strategy:
matrix:
os:
- name: linux-amd64
runner: ubuntu-latest
target: x86_64-unknown-linux-gnu
- name: linux-arm64
runner: ubuntu-24.04-arm
target: aarch64-unknown-linux-gnu
- name: windows-amd64
runner: windows-latest
target: x86_64-pc-windows-msvc
- name: windows-arm64
runner: windows-11-arm
target: aarch64-pc-windows-msvc
- name: macos-arm64
runner: macos-latest
target: aarch64-apple-darwin
- name: macos-amd64
runner: macos-15-intel
target: x86_64-apple-darwin
fail-fast: false
name: Build on ${{ matrix.os.name }} target ${{ matrix.os.target }}
runs-on: ${{ matrix.os.runner }}
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Check rust version
run: rustup --version
- name: Build debug
run: cargo test --target ${{ matrix.os.target }}
- name: Build release
run: cargo test --target ${{ matrix.os.target }} --release
build-linux-musl-amd64:
name: Build on linux-amd64 target x86_64-unknown-linux-musl
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Check rust version
run: rustup --version
- name: Install packages
run: |
curl -LO https://github.com/cross-tools/musl-cross/releases/download/20250929/x86_64-unknown-linux-musl.tar.xz
sudo mkdir -p /opt/x-tools
sudo tar -xf x86_64-unknown-linux-musl.tar.xz -C /opt/x-tools
echo CC_x86_64_unknown_linux_musl=/opt/x-tools/x86_64-unknown-linux-musl/bin/x86_64-unknown-linux-musl-gcc >> $GITHUB_ENV
echo CXX_x86_64_unknown_linux_musl=/opt/x-tools/x86_64-unknown-linux-musl/bin/x86_64-unknown-linux-musl-g++ >> $GITHUB_ENV
echo AR_x86_64_unknown_linux_musl=/opt/x-tools/x86_64-unknown-linux-musl/bin/x86_64-unknown-linux-musl-ar >> $GITHUB_ENV
echo RANLIB_x86_64_unknown_linux_musl=/opt/x-tools/x86_64-unknown-linux-musl/bin/x86_64-unknown-linux-musl-ranlib >> $GITHUB_ENV
echo STRIP_x86_64_unknown_linux_musl=/opt/x-tools/x86_64-unknown-linux-musl/bin/x86_64-unknown-linux-musl-strip >> $GITHUB_ENV
echo CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_LINKER=$CC_x86_64_unknown_linux_musl >> $GITHUB_ENV
rustup target add x86_64-unknown-linux-musl
- name: Build debug
run: cargo build --target x86_64-unknown-linux-musl
- name: Build release
run: cargo build --target x86_64-unknown-linux-musl --release
build-linux-musl-arm64:
name: Build on linux-arm64 target aarch64-unknown-linux-musl
runs-on: ubuntu-24.04-arm
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Check rust version
run: rustup --version
- name: Install packages
run: |
curl -LO https://github.com/cross-tools/musl-cross/releases/download/20250929/aarch64-unknown-linux-musl.tar.xz
sudo mkdir -p /opt/x-tools
sudo tar -xf aarch64-unknown-linux-musl.tar.xz -C /opt/x-tools
echo CC_aarch64_unknown_linux_musl=/opt/x-tools/aarch64-unknown-linux-musl/bin/aarch64-unknown-linux-musl-gcc >> $GITHUB_ENV
echo CXX_aarch64_unknown_linux_musl=/opt/x-tools/aarch64-unknown-linux-musl/bin/aarch64-unknown-linux-musl-g++ >> $GITHUB_ENV
echo AR_aarch64_unknown_linux_musl=/opt/x-tools/aarch64-unknown-linux-musl/bin/aarch64-unknown-linux-musl-ar >> $GITHUB_ENV
echo RANLIB_aarch64_unknown_linux_musl=/opt/x-tools/aarch64-unknown-linux-musl/bin/aarch64-unknown-linux-musl-ranlib >> $GITHUB_ENV
echo STRIP_aarch64_unknown_linux_musl=/opt/x-tools/aarch64-unknown-linux-musl/bin/aarch64-unknown-linux-musl-strip >> $GITHUB_ENV
echo CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER=$CC_aarch64_unknown_linux_musl >> $GITHUB_ENV
rustup target add aarch64-unknown-linux-musl
- name: Build debug
run: cargo build --target aarch64-unknown-linux-musl
- name: Build release
run: cargo build --target aarch64-unknown-linux-musl --release
build-android:
name: Build on linux-amd64 target android 30
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Check rust version
run: rustup --version
- name: Build arm64
run: |
export CC_aarch64_linux_android=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android30-clang
export CXX_aarch64_linux_android=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android30-clang++
export AR_aarch64_linux_android=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar
export RANLIB_aarch64_linux_android=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ranlib
export STRIP_aarch64_linux_android=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip
export CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER=$CC_aarch64_linux_android
export CLANG_PATH=$CC_aarch64_linux_android
rustup target add aarch64-linux-android
cargo build --target aarch64-linux-android
cargo build --target aarch64-linux-android --release
- name: Build arm32
run: |
export CC_armv7_linux_androideabi=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7-linux-androideabi30-clang
export CXX_armv7_linux_androideabi=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7-linux-androideabi30-clang++
export AR_armv7_linux_androideabi=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar
export RANLIB_armv7_linux_androideabi=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ranlib
export STRIP_armv7_linux_androideabi=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip
export CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER=$CC_armv7_linux_androideabi
export CLANG_PATH=$CC_armv7_linux_androideabi
rustup target add armv7-linux-androideabi
cargo build --target armv7-linux-androideabi
cargo build --target armv7-linux-androideabi --release
- name: Build amd64
run: |
export CC_x86_64_linux_android=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android30-clang
export CXX_x86_64_linux_android=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android30-clang++
export AR_x86_64_linux_android=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar
export RANLIB_x86_64_linux_android=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ranlib
export STRIP_x86_64_linux_android=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip
export CARGO_TARGET_X86_64_LINUX_ANDROID_LINKER=$CC_x86_64_linux_android
export CLANG_PATH=$CC_x86_64_linux_android
rustup target add x86_64-linux-android
cargo build --target x86_64-linux-android
cargo build --target x86_64-linux-android --release
- name: Build amd32
run: |
export CC_i686_linux_android=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android30-clang
export CXX_i686_linux_android=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android30-clang++
export AR_i686_linux_android=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar
export RANLIB_i686_linux_android=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ranlib
export STRIP_i686_linux_android=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip
export CARGO_TARGET_I686_LINUX_ANDROID_LINKER=$CC_i686_linux_android
export CLANG_PATH=$CC_i686_linux_android
rustup target add i686-linux-android
cargo build --target i686-linux-android
cargo build --target i686-linux-android --release