From bacc522220fbb5f3bf4ee1f05d03fae99371f8cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20Spie=C3=9F?= Date: Tue, 23 Dec 2025 15:19:20 +0100 Subject: [PATCH] Add musl build action --- .github/workflows/build.yml | 36 +++++++++++++++++++++ .github/workflows/musl.yml | 60 ----------------------------------- .github/workflows/publish.yml | 42 ++++++++++++++++++++++++ native/.cargo/config.toml | 10 ++---- 4 files changed, 80 insertions(+), 68 deletions(-) delete mode 100644 .github/workflows/musl.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f503b8f..f12e006 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -41,6 +41,42 @@ jobs: - name: Run Gradle Build run: ./gradlew build -Ptarget=${{ matrix.target }} + linux-musl: + strategy: + matrix: + include: + - target: x86_64-unknown-linux-musl + arch: x86_64 + - target: aarch64-unknown-linux-musl + arch: aarch64 + + name: Build ${{ matrix.target }} + runs-on: ubuntu-latest + container: + image: clux/muslrust:stable + steps: + - name: Checkout sources + uses: taiki-e/checkout-action@v1 + - name: Install Essentials + run: | + apt-get update -y + apt-get upgrade -y + apt-get install -y gcc musl-tools curl openjdk-17-jdk-headless + - name: Install Rust toolchain + run: | + rustup target add x86_64-unknown-linux-musl ${{ matrix.target }} + - name: Install linker dependencies + run: | + mkdir -p /opt/musl + curl -L https://github.com/MinnDevelopment/musl-cross-mirror/releases/download/v0.0.1/${{ matrix.arch }}-linux-musl-cross.tgz | tar xz -C /opt/musl + - name: Run Gradle Build + env: + RUSTFLAGS: "-C target-feature=-crt-static -C link-args=-static-libgcc" + run: | + export PATH="/opt/musl/${{ matrix.arch }}-linux-musl-cross/bin:$PATH" + which ${{ matrix.arch }}-linux-musl-gcc + ./gradlew build -Ptarget=${{ matrix.target }} + windows: strategy: matrix: diff --git a/.github/workflows/musl.yml b/.github/workflows/musl.yml deleted file mode 100644 index 3ea60e0..0000000 --- a/.github/workflows/musl.yml +++ /dev/null @@ -1,60 +0,0 @@ -name: musl - -on: - workflow_dispatch: - -concurrency: - group: "pub-musl" - cancel-in-progress: true - -jobs: - linux: - strategy: - matrix: - include: - - target: x86_64-unknown-linux-musl - deps: | - apk add musl openjdk8 - - target: aarch64-unknown-linux-musl - deps: | - apk add musl openjdk8 - curl -q https://musl.cc/aarch64-linux-musl-cross.tgz | tar xzf - -C /root/musl - # - target: i686-unknown-linux-musl - # deps: apk add gcc-multilib musl - # - target: armv7-unknown-linux-musleabihf - # deps: apt-get gcc-arm-linux-gnueabihf musl - - name: Musl build ${{ matrix.target }} - environment: MavenRelease - runs-on: ubuntu-20.04 - container: - image: alpine:3.18 - steps: - - name: Checkout sources - uses: taiki-e/checkout-action@v1 - - name: Install Essentials - run: | - apk add curl gcc bash - mkdir -p /root/musl - curl -q https://musl.cc/x86_64-linux-musl-cross.tgz | tar xzf - -C /root/musl - - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: stable - target: x86_64-unknown-linux-musl ${{ matrix.target }} # requires native target installed to build proc-macros2 - - name: Install linker dependencies - run: ${{ matrix.deps }} - if: ${{ matrix.deps != '' }} - - name: Compile natives - working-directory: native - run: cargo build -r --target ${{ matrix.target }} - - name: Publish - env: - ORG_GRADLE_PROJECT_ossrhUser: ${{ secrets.OSSRH_USER }} - ORG_GRADLE_PROJECT_ossrhPassword: ${{ secrets.OSSRH_PASSWORD }} - ORG_GRADLE_PROJECT_stagingProfile: ${{ secrets.STAGING_PROFILE_ID }} - ORG_GRADLE_PROJECT_signingKey: ${{ secrets.GPG_KEY }} - ORG_GRADLE_PROJECT_signingKeyId: ${{ secrets.GPG_KEYID }} - run: | - chmod u+x gradlew - ./gradlew --console plain --stacktrace -Ptarget="${{ matrix.target }}" native:publishToSonatype closeAndReleaseStagingRepository diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 41a190e..874323d 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -50,6 +50,47 @@ jobs: JRELEASER_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} run: ./gradlew native:publish native:jreleaserRelease -Ptarget=${{ matrix.target }} + linux-musl: + strategy: + matrix: + include: + - target: x86_64-unknown-linux-musl + arch: x86_64 + - target: aarch64-unknown-linux-musl + arch: aarch64 + + name: Publish ${{ matrix.target }} + environment: MavenRelease + runs-on: ubuntu-latest + container: + image: clux/muslrust:stable + steps: + - name: Checkout sources + uses: taiki-e/checkout-action@v1 + - name: Install Essentials + run: | + apt-get update -y + apt-get upgrade -y + apt-get install -y gcc musl-tools curl openjdk-17-jdk-headless + - name: Install Rust toolchain + run: | + rustup target add x86_64-unknown-linux-musl ${{ matrix.target }} + - name: Install linker dependencies + run: | + mkdir -p /opt/musl + curl -L https://github.com/MinnDevelopment/musl-cross-mirror/releases/download/v0.0.1/${{ matrix.arch }}-linux-musl-cross.tgz | tar xz -C /opt/musl + - name: Build and Publish + env: + JRELEASER_MAVENCENTRAL_USERNAME: ${{ secrets.MAVENCENTRAL_USERNAME }} + JRELEASER_MAVENCENTRAL_TOKEN: ${{ secrets.MAVENCENTRAL_TOKEN }} + JRELEASER_GPG_PUBLIC_KEY: ${{ secrets.GPG_PUBLIC_KEY }} + JRELEASER_GPG_SECRET_KEY: ${{ secrets.GPG_SECRET_KEY }} + JRELEASER_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} + RUSTFLAGS: "-C target-feature=-crt-static -C link-args=-static-libgcc" + run: | + export PATH="/opt/musl/${{ matrix.arch }}-linux-musl-cross/bin:$PATH" + ./gradlew native:publish native:jreleaserRelease -Ptarget=${{ matrix.target }} + windows: strategy: matrix: @@ -85,6 +126,7 @@ jobs: macos: name: Build macOS universal binary + environment: MavenRelease runs-on: macos-14 steps: - name: Checkout sources diff --git a/native/.cargo/config.toml b/native/.cargo/config.toml index d6f5825..76311f6 100644 --- a/native/.cargo/config.toml +++ b/native/.cargo/config.toml @@ -6,14 +6,8 @@ linker = "arm-linux-gnueabihf-gcc" [target.x86_64-unknown-linux-musl] rustflags = ["-C", "target-feature=-crt-static", "-C", "link-args=-static-libgcc"] -linker = "/root/musl/x86_64-linux-musl-cross/bin/x86_64-linux-musl-gcc" +linker = "x86_64-linux-musl-gcc" [target.aarch64-unknown-linux-musl] rustflags = ["-C", "target-feature=-crt-static", "-C", "link-args=-static-libgcc"] -linker = "/root/musl/aarch64-linux-musl-cross/bin/aarch64-linux-musl-gcc" - -# [target.i686-unknown-linux-musl] -# rustflags = ["-C", "target-feature=-crt-static"] -# [target.armv7-unknown-linux-musleabihf] -# rustflags = ["-C", "target-feature=-crt-static"] -# linker = "arm-linux-gnueabihf-gcc" +linker = "aarch64-linux-musl-gcc"