Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 47 additions & 29 deletions .github/workflows/CI-linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,15 @@ on:
builder-target:
required: true
type: string
target-vendor:
required: true
type: string
target-os:
required: true
type: string
rust-toolchain-abi:
required: true
type: string
distro-image:
required: true
type: string
Expand Down Expand Up @@ -105,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
Expand All @@ -136,14 +147,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
Expand All @@ -166,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
Expand All @@ -191,32 +195,46 @@ 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"

eatmydata apt install \
gcc-${{ env.GCC_ARCH }}-linux-${{ env.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 }}-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 }}-${{ 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
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-${{ env.ABI }}-gcc"
LINKER="${{ env.GCC_ARCH }}-${{ inputs.target-os }}-${{ inputs.rust-toolchain-abi }}-gcc"
fi
tee -a "$HOME/.cargo/config.toml" > /dev/null <<EOT
[target.${{ env.RUST_TARGET }}-unknown-linux-${{ env.ABI }}]
[target.${{ env.RUST_TARGET }}]
linker = "${LINKER}"
runner = "qemu-${{ env.LIBC6_ARCH }} -L /usr/${{ env.GCC_ARCH }}-${{ inputs.target-os }}-${{ inputs.rust-toolchain-abi }}"
EOT
- name: Install necessary packages for cross-os same-arch compilation
timeout-minutes: 2
if: (inputs.flavor == 'dev' || inputs.flavor == 'release') && inputs.target-os == 'windows' && inputs.builder-host == inputs.builder-target
run: |
set -xe
. "$HOME/.cargo/env"
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
LINKER="${{ inputs.builder-target }}-${{ inputs.target-vendor }}-${{ inputs.target-os }}-${{ inputs.rust-toolchain-abi }}-clang"
tee -a "$HOME/.cargo/config.toml" > /dev/null <<EOT
[target.${{ env.RUST_TARGET }}]
linker = "${LINKER}"
runner = "qemu-${{ env.LIBC6_ARCH }} -L /usr/${{ env.GCC_ARCH }}-linux-${{ env.ABI }}"
runner = "qemu-${{ env.LIBC6_ARCH }} -L /usr/${{ env.GCC_ARCH }}-${{ inputs.target-os }}-${{ inputs.rust-toolchain-abi }}"
EOT
- name: Install necessary packages for code coverage
if: inputs.flavor != 'RustFmt' && inputs.flavor != 'doc' && (inputs.builder-host == inputs.builder-target || (env.ENDIANNESS == 'big' && inputs.builder-target != 's390x')) && (github.event_name == 'pull_request' || env.CODECOV_TOKEN_EXISTS == 'true')
Expand Down Expand Up @@ -272,31 +290,31 @@ jobs:
set -xe
. "$HOME/.cargo/env"
cd "$SRC_DIR"
cargo check --target ${{ env.RUST_TARGET }}-unknown-linux-${{ env.ABI }} --profile ${{ inputs.flavor }} --all-targets --all-features
cargo check --target ${{ env.RUST_TARGET }} --profile ${{ inputs.flavor }} --all-targets --all-features
- name: Run Clippy
timeout-minutes: 1
if: inputs.flavor != 'RustFmt' && inputs.flavor != 'doc'
run: |
set -xe
. "$HOME/.cargo/env"
cd "$SRC_DIR"
cargo clippy --target ${{ env.RUST_TARGET }}-unknown-linux-${{ env.ABI }} --profile ${{ inputs.flavor }} --all-targets --all-features
cargo clippy --target ${{ env.RUST_TARGET }} --profile ${{ inputs.flavor }} --all-targets --all-features
- name: Build
timeout-minutes: 1
if: inputs.flavor != 'RustFmt' && inputs.flavor != 'doc'
run: |
set -xe
. "$HOME/.cargo/env"
cd "$SRC_DIR"
cargo build --target ${{ env.RUST_TARGET }}-unknown-linux-${{ env.ABI }} --profile ${{ inputs.flavor }}
cargo build --target ${{ env.RUST_TARGET }} --profile ${{ inputs.flavor }}
- name: Run tests
timeout-minutes: 2
if: inputs.flavor != 'RustFmt' && inputs.flavor != 'doc'
run: |
set -xe
. "$HOME/.cargo/env"
cd "$SRC_DIR"
cargo test --target ${{ env.RUST_TARGET }}-unknown-linux-${{ env.ABI }} --profile ${{ inputs.flavor }}
cargo test --target ${{ env.RUST_TARGET }} --profile ${{ inputs.flavor }}
- name: Run tests to collect code coverage
timeout-minutes: 2
if: inputs.flavor != 'RustFmt' && inputs.flavor != 'doc' && (inputs.builder-host == inputs.builder-target || (env.ENDIANNESS == 'big' && inputs.builder-target != 's390x')) && (github.event_name == 'pull_request' || env.CODECOV_TOKEN_EXISTS == 'true')
Expand All @@ -307,15 +325,15 @@ jobs:
. "$HOME/.cargo/env"
cd "$SRC_DIR"
cargo clean
cargo llvm-cov --no-report --target ${{ env.RUST_TARGET }}-unknown-linux-${{ env.ABI }} --profile ${{ inputs.flavor }}
cargo llvm-cov --no-report --target ${{ env.RUST_TARGET }} --profile ${{ inputs.flavor }}
- name: Aggregate code coverage
timeout-minutes: 1
if: inputs.flavor != 'RustFmt' && inputs.flavor != 'doc' && (inputs.builder-host == inputs.builder-target || (env.ENDIANNESS == 'big' && inputs.builder-target != 's390x')) && (github.event_name == 'pull_request' || env.CODECOV_TOKEN_EXISTS == 'true')
run: |
set -xe
. "$HOME/.cargo/env"
cd "$SRC_DIR"
cargo llvm-cov report --codecov --output-path $SRC_DIR/codecov.json --target ${{ env.RUST_TARGET }}-unknown-linux-${{ env.ABI }} --profile ${{ inputs.flavor }}
cargo llvm-cov report --codecov --output-path $SRC_DIR/codecov.json --target ${{ env.RUST_TARGET }} --profile ${{ inputs.flavor }}
- name: Upload coverage reports to Codecov
timeout-minutes: 1
if: inputs.flavor != 'RustFmt' && inputs.flavor != 'doc' && (inputs.builder-host == inputs.builder-target || (env.ENDIANNESS == 'big' && inputs.builder-target != 's390x')) && (github.event_name == 'pull_request' || env.CODECOV_TOKEN_EXISTS == 'true')
Expand All @@ -324,7 +342,7 @@ jobs:
OS: ${{ inputs.os }}
BUILDER_HOST: ${{ inputs.builder-host }}
BUILDER_TARGET: ${{ inputs.builder-target }}
RUST_TOOLCHAIN: ${{ inputs.rust-toolchain-name }}
RUST_TOOLCHAIN: ${{ env.RUST_TARGET }}
LLVM_VER: ${{ inputs.distro-LLVM }}
RUST_PROFILE: ${{ inputs.flavor }}
with:
Expand Down
Loading
Loading