From 56bece70fc8b057dbb914ef235bdf0fb071c0530 Mon Sep 17 00:00:00 2001 From: Roman Lebedev Date: Sun, 10 Aug 2025 22:59:18 +0300 Subject: [PATCH 1/5] CI: sink linux abi into matrix --- .github/workflows/CI-linux.yml | 41 +++++++++++++++------------------- .github/workflows/CI.yml | 15 +++++++------ .github/workflows/rustfmt.yml | 1 + 3 files changed, 27 insertions(+), 30 deletions(-) diff --git a/.github/workflows/CI-linux.yml b/.github/workflows/CI-linux.yml index bd19d425..0a61dbb6 100644 --- a/.github/workflows/CI-linux.yml +++ b/.github/workflows/CI-linux.yml @@ -13,6 +13,9 @@ on: builder-target: required: true type: string + rust-toolchain-abi: + required: true + type: string distro-image: required: true type: string @@ -136,14 +139,6 @@ jobs: GCC_ARCH=${{ inputs.builder-target }} fi echo "GCC_ARCH=$(echo ${GCC_ARCH})" >> $GITHUB_ENV - if [ "${{ inputs.builder-target }}" = "armv6" ]; then - ABI=gnueabi - elif [ "${{ inputs.builder-target }}" = "armv7" ]; then - ABI=gnueabihf - else - ABI=gnu - fi - echo "ABI=$(echo ${ABI})" >> $GITHUB_ENV if [ "${{ inputs.builder-target }}" = "s390x" ] \ || [ "${{ inputs.builder-target }}" = "powerpc64" ]; then @@ -199,24 +194,24 @@ jobs: . "$HOME/.cargo/env" eatmydata apt install \ - gcc-${{ env.GCC_ARCH }}-linux-${{ env.ABI }} \ + gcc-${{ env.GCC_ARCH }}-linux-${{ inputs.rust-toolchain-abi }} \ libc6-dev-${{ env.LIBC6_ARCH }}-cross \ qemu-user \ qemu-user-binfmt \ ; - ln -s /usr/local/bin/clang /usr/local/bin/${{ inputs.builder-target }}-unknown-linux-${{ env.ABI }}-clang - ln -s /usr/local/bin/clang++ /usr/local/bin/${{ inputs.builder-target }}-unknown-linux-${{ env.ABI }}-clang++ - ln -s /usr/local/bin/ld /usr/local/bin/${{ inputs.builder-target }}-unknown-linux-${{ env.ABI }}-ld - rustup target add ${{ env.RUST_TARGET }}-unknown-linux-${{ env.ABI }} - LINKER="${{ inputs.builder-target }}-unknown-linux-${{ env.ABI }}-clang" + ln -s /usr/local/bin/clang /usr/local/bin/${{ inputs.builder-target }}-unknown-linux-${{ inputs.rust-toolchain-abi }}-clang + ln -s /usr/local/bin/clang++ /usr/local/bin/${{ inputs.builder-target }}-unknown-linux-${{ inputs.rust-toolchain-abi }}-clang++ + ln -s /usr/local/bin/ld /usr/local/bin/${{ inputs.builder-target }}-unknown-linux-${{ inputs.rust-toolchain-abi }}-ld + rustup target add ${{ env.RUST_TARGET }}-unknown-linux-${{ inputs.rust-toolchain-abi }} + LINKER="${{ inputs.builder-target }}-unknown-linux-${{ inputs.rust-toolchain-abi }}-clang" if [ "${{ inputs.builder-target }}" = "powerpc64" ]; then # LLD/clang does not support powerpc64 ELFv1 ABI - LINKER="${{ env.GCC_ARCH }}-linux-${{ env.ABI }}-gcc" + LINKER="${{ env.GCC_ARCH }}-linux-${{ inputs.rust-toolchain-abi }}-gcc" fi tee -a "$HOME/.cargo/config.toml" > /dev/null < Date: Sun, 10 Aug 2025 23:14:51 +0300 Subject: [PATCH 2/5] CI: sink linux vendor into matrix --- .github/workflows/CI-linux.yml | 27 +++++++++++++++------------ .github/workflows/CI.yml | 15 ++++++++------- .github/workflows/rustfmt.yml | 1 + 3 files changed, 24 insertions(+), 19 deletions(-) diff --git a/.github/workflows/CI-linux.yml b/.github/workflows/CI-linux.yml index 0a61dbb6..51e6aa1f 100644 --- a/.github/workflows/CI-linux.yml +++ b/.github/workflows/CI-linux.yml @@ -13,6 +13,9 @@ on: builder-target: required: true type: string + target-vendor: + required: true + type: string rust-toolchain-abi: required: true type: string @@ -199,17 +202,17 @@ jobs: qemu-user \ qemu-user-binfmt \ ; - ln -s /usr/local/bin/clang /usr/local/bin/${{ inputs.builder-target }}-unknown-linux-${{ inputs.rust-toolchain-abi }}-clang - ln -s /usr/local/bin/clang++ /usr/local/bin/${{ inputs.builder-target }}-unknown-linux-${{ inputs.rust-toolchain-abi }}-clang++ - ln -s /usr/local/bin/ld /usr/local/bin/${{ inputs.builder-target }}-unknown-linux-${{ inputs.rust-toolchain-abi }}-ld - rustup target add ${{ env.RUST_TARGET }}-unknown-linux-${{ inputs.rust-toolchain-abi }} - LINKER="${{ inputs.builder-target }}-unknown-linux-${{ inputs.rust-toolchain-abi }}-clang" + ln -s /usr/local/bin/clang /usr/local/bin/${{ inputs.builder-target }}-${{ inputs.target-vendor }}-linux-${{ inputs.rust-toolchain-abi }}-clang + ln -s /usr/local/bin/clang++ /usr/local/bin/${{ inputs.builder-target }}-${{ inputs.target-vendor }}-linux-${{ inputs.rust-toolchain-abi }}-clang++ + ln -s /usr/local/bin/ld /usr/local/bin/${{ inputs.builder-target }}-${{ inputs.target-vendor }}-linux-${{ inputs.rust-toolchain-abi }}-ld + rustup target add ${{ env.RUST_TARGET }}-${{ inputs.target-vendor }}-linux-${{ inputs.rust-toolchain-abi }} + LINKER="${{ inputs.builder-target }}-${{ inputs.target-vendor }}-linux-${{ inputs.rust-toolchain-abi }}-clang" if [ "${{ inputs.builder-target }}" = "powerpc64" ]; then # LLD/clang does not support powerpc64 ELFv1 ABI LINKER="${{ env.GCC_ARCH }}-linux-${{ inputs.rust-toolchain-abi }}-gcc" fi tee -a "$HOME/.cargo/config.toml" > /dev/null < Date: Sun, 10 Aug 2025 23:18:58 +0300 Subject: [PATCH 3/5] CI: sink triple os into matrix --- .github/workflows/CI-linux.yml | 33 ++++++++++++++++++--------------- .github/workflows/CI.yml | 15 ++++++++------- .github/workflows/rustfmt.yml | 1 + 3 files changed, 27 insertions(+), 22 deletions(-) diff --git a/.github/workflows/CI-linux.yml b/.github/workflows/CI-linux.yml index 51e6aa1f..3d7c41ce 100644 --- a/.github/workflows/CI-linux.yml +++ b/.github/workflows/CI-linux.yml @@ -16,6 +16,9 @@ on: target-vendor: required: true type: string + target-os: + required: true + type: string rust-toolchain-abi: required: true type: string @@ -197,24 +200,24 @@ jobs: . "$HOME/.cargo/env" eatmydata apt install \ - gcc-${{ env.GCC_ARCH }}-linux-${{ inputs.rust-toolchain-abi }} \ + gcc-${{ env.GCC_ARCH }}-${{ inputs.target-os }}-${{ inputs.rust-toolchain-abi }} \ libc6-dev-${{ env.LIBC6_ARCH }}-cross \ qemu-user \ qemu-user-binfmt \ ; - ln -s /usr/local/bin/clang /usr/local/bin/${{ inputs.builder-target }}-${{ inputs.target-vendor }}-linux-${{ inputs.rust-toolchain-abi }}-clang - ln -s /usr/local/bin/clang++ /usr/local/bin/${{ inputs.builder-target }}-${{ inputs.target-vendor }}-linux-${{ inputs.rust-toolchain-abi }}-clang++ - ln -s /usr/local/bin/ld /usr/local/bin/${{ inputs.builder-target }}-${{ inputs.target-vendor }}-linux-${{ inputs.rust-toolchain-abi }}-ld - rustup target add ${{ env.RUST_TARGET }}-${{ inputs.target-vendor }}-linux-${{ inputs.rust-toolchain-abi }} - LINKER="${{ inputs.builder-target }}-${{ inputs.target-vendor }}-linux-${{ inputs.rust-toolchain-abi }}-clang" + ln -s /usr/local/bin/clang /usr/local/bin/${{ inputs.builder-target }}-${{ inputs.target-vendor }}-${{ inputs.target-os }}-${{ inputs.rust-toolchain-abi }}-clang + ln -s /usr/local/bin/clang++ /usr/local/bin/${{ inputs.builder-target }}-${{ inputs.target-vendor }}-${{ inputs.target-os }}-${{ inputs.rust-toolchain-abi }}-clang++ + ln -s /usr/local/bin/ld /usr/local/bin/${{ inputs.builder-target }}-${{ inputs.target-vendor }}-${{ inputs.target-os }}-${{ inputs.rust-toolchain-abi }}-ld + rustup target add ${{ env.RUST_TARGET }}-${{ inputs.target-vendor }}-${{ inputs.target-os }}-${{ inputs.rust-toolchain-abi }} + LINKER="${{ inputs.builder-target }}-${{ inputs.target-vendor }}-${{ inputs.target-os }}-${{ inputs.rust-toolchain-abi }}-clang" if [ "${{ inputs.builder-target }}" = "powerpc64" ]; then # LLD/clang does not support powerpc64 ELFv1 ABI - LINKER="${{ env.GCC_ARCH }}-linux-${{ inputs.rust-toolchain-abi }}-gcc" + LINKER="${{ env.GCC_ARCH }}-${{ inputs.target-os }}-${{ inputs.rust-toolchain-abi }}-gcc" fi tee -a "$HOME/.cargo/config.toml" > /dev/null < Date: Sun, 10 Aug 2025 23:23:27 +0300 Subject: [PATCH 4/5] CI: fixup rest of jobs --- .github/workflows/CI.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index e42901c8..3cacacd8 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -17,8 +17,8 @@ jobs: matrix: os: [ linux ] stack: - - { runs-on: "ubuntu-latest", host: "x86_64", target: "x86_64" } - - { runs-on: "ubuntu-24.04-arm", host: "aarch64", target: "aarch64" } + - { runs-on: "ubuntu-latest", host: "x86_64", target: "x86_64", vendor: "unknown", os: "linux", abi: "gnu" } + - { runs-on: "ubuntu-24.04-arm", host: "aarch64", target: "aarch64", vendor: "unknown", os: "linux", abi: "gnu" } distro: - { image: "debian:trixie-slim", LLVM: 19 } rust-toolchain-name: [ stable, nightly ] @@ -29,6 +29,9 @@ jobs: runs-on: ${{ matrix.stack.runs-on }} builder-host: ${{ matrix.stack.host }} builder-target: ${{ matrix.stack.target }} + target-vendor: ${{ matrix.stack.vendor }} + target-os: ${{ matrix.stack.os }} + rust-toolchain-abi: ${{ matrix.stack.abi }} distro-image: ${{ matrix.distro.image }} distro-LLVM: ${{ matrix.distro.LLVM }} rust-toolchain-name: ${{ matrix.rust-toolchain-name }} @@ -122,6 +125,9 @@ jobs: runs-on: ubuntu-latest builder-host: x86_64 builder-target: x86_64 + target-vendor: "unknown" + target-os: "linux" + rust-toolchain-abi: "gnu" distro-image: "debian:trixie-slim" distro-LLVM: 19 rust-toolchain-name: stable From 70e3c00cff35f50d306373698211af4a2e98850c Mon Sep 17 00:00:00 2001 From: Roman Lebedev Date: Mon, 11 Aug 2025 00:44:59 +0300 Subject: [PATCH 5/5] wip --- .github/workflows/CI-linux.yml | 45 ++++-- .github/workflows/CI.yml | 286 ++++++++++++++++++--------------- 2 files changed, 190 insertions(+), 141 deletions(-) diff --git a/.github/workflows/CI-linux.yml b/.github/workflows/CI-linux.yml index 3d7c41ce..294007ee 100644 --- a/.github/workflows/CI-linux.yml +++ b/.github/workflows/CI-linux.yml @@ -114,14 +114,16 @@ jobs: || [ "${{ inputs.builder-target }}" = "s390x" ] \ || [ "${{ inputs.builder-target }}" = "armv7" ]; then - RUST_TARGET=${{ inputs.builder-target }} + RUST_TARGET_ARCH=${{ inputs.builder-target }} elif [ "${{ inputs.builder-target }}" = "armv6" ]; then - RUST_TARGET=arm + RUST_TARGET_ARCH=arm elif [ "${{ inputs.builder-target }}" = "riscv64" ]; then - RUST_TARGET=riscv64gc + RUST_TARGET_ARCH=riscv64gc else exit 1 fi + echo "RUST_TARGET_ARCH=$(echo ${RUST_TARGET_ARCH})" >> $GITHUB_ENV + RUST_TARGET=${RUST_TARGET_ARCH}-${{ inputs.target-vendor }}-${{ inputs.target-os }}-${{ inputs.rust-toolchain-abi }} echo "RUST_TARGET=$(echo ${RUST_TARGET})" >> $GITHUB_ENV if [ "${{ inputs.builder-target }}" = "i686" ]; then LIBC6_ARCH=i386 @@ -167,6 +169,7 @@ jobs: . "$HOME/.cargo/env" eatmydata rustup toolchain install ${{ inputs.rust-toolchain-name }} --allow-downgrade --profile minimal eatmydata rustup default ${{ inputs.rust-toolchain-name }} + eatmydata rustup target add ${{ env.RUST_TARGET }} if [ "${{ inputs.flavor }}" = "RustFmt" ]; then eatmydata rustup component add rustfmt elif [ "${{ inputs.flavor }}" = "doc" ]; then @@ -192,9 +195,9 @@ jobs: else exit 1 fi - - name: Install necessary packages for cross-compilation + - name: Install necessary packages for same-os cross-arch compilation timeout-minutes: 2 - if: (inputs.flavor == 'dev' || inputs.flavor == 'release') && inputs.builder-host != inputs.builder-target + if: (inputs.flavor == 'dev' || inputs.flavor == 'release') && inputs.target-os == 'linux' && inputs.builder-host != inputs.builder-target run: | set -xe . "$HOME/.cargo/env" @@ -208,14 +211,28 @@ jobs: ln -s /usr/local/bin/clang /usr/local/bin/${{ inputs.builder-target }}-${{ inputs.target-vendor }}-${{ inputs.target-os }}-${{ inputs.rust-toolchain-abi }}-clang ln -s /usr/local/bin/clang++ /usr/local/bin/${{ inputs.builder-target }}-${{ inputs.target-vendor }}-${{ inputs.target-os }}-${{ inputs.rust-toolchain-abi }}-clang++ ln -s /usr/local/bin/ld /usr/local/bin/${{ inputs.builder-target }}-${{ inputs.target-vendor }}-${{ inputs.target-os }}-${{ inputs.rust-toolchain-abi }}-ld - rustup target add ${{ env.RUST_TARGET }}-${{ inputs.target-vendor }}-${{ inputs.target-os }}-${{ inputs.rust-toolchain-abi }} LINKER="${{ inputs.builder-target }}-${{ inputs.target-vendor }}-${{ inputs.target-os }}-${{ inputs.rust-toolchain-abi }}-clang" if [ "${{ inputs.builder-target }}" = "powerpc64" ]; then # LLD/clang does not support powerpc64 ELFv1 ABI LINKER="${{ env.GCC_ARCH }}-${{ inputs.target-os }}-${{ inputs.rust-toolchain-abi }}-gcc" fi tee -a "$HOME/.cargo/config.toml" > /dev/null < /dev/null <