Skip to content

Commit 95d5d61

Browse files
JamesbarfordAmanieu
authored andcommitted
Update CI to facilitate big endian at some point
1 parent 7294081 commit 95d5d61

File tree

2 files changed

+78
-15
lines changed

2 files changed

+78
-15
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
FROM ubuntu:24.04
2+
3+
RUN apt-get update && apt-get install -y --no-install-recommends \
4+
gcc \
5+
g++ \
6+
ca-certificates \
7+
libc6-dev \
8+
libc6-dev-arm64-cross \
9+
qemu-user \
10+
make \
11+
file \
12+
clang-18 \
13+
lld

library/stdarch/ci/run.sh

Lines changed: 65 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ if [ "$NOSTD" != "1" ]; then
108108
cargo_test "${STDARCH_EXAMPLES} ${PROFILE}"
109109
fi
110110

111+
111112
# Test targets compiled with extra features.
112113
case ${TARGET} in
113114
x86*)
@@ -138,26 +139,75 @@ case ${TARGET} in
138139
export RUSTFLAGS="${OLD_RUSTFLAGS} -C target-feature=+vsx"
139140
cargo_test "${PROFILE}"
140141
;;
142+
143+
# Setup aarch64 & armv7 specific variables, the runner, along with some
144+
# tests to skip
145+
aarch64-unknown-linux-gnu*)
146+
TEST_CPPFLAGS="-fuse-ld=lld -I/usr/aarch64-linux-gnu/include/ -I/usr/aarch64-linux-gnu/include/c++/9/aarch64-linux-gnu/"
147+
TEST_SKIP_INTRINSICS=crates/intrinsic-test/missing_aarch64.txt
148+
TEST_CXX_COMPILER="clang++-15"
149+
TEST_RUNNER="${CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUNNER}"
150+
;;
151+
armv7-unknown-linux-gnueabihf*)
152+
TEST_CPPFLAGS="-fuse-ld=lld -I/usr/arm-linux-gnueabihf/include/ -I/usr/arm-linux-gnueabihf/include/c++/9/arm-linux-gnueabihf/"
153+
TEST_SKIP_INTRINSICS=crates/intrinsic-test/missing_arm.txt
154+
TEST_CXX_COMPILER="clang++-15"
155+
TEST_RUNNER="${CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_RUNNER}"
156+
;;
141157
*)
142158
;;
143159

144160
esac
145161

146-
if [ "${TARGET}" = "aarch64-unknown-linux-gnu" ]; then
147-
(
148-
CPPFLAGS="-fuse-ld=lld -I/usr/aarch64-linux-gnu/include/ -I/usr/aarch64-linux-gnu/include/c++/9/aarch64-linux-gnu/" \
149-
RUSTFLAGS="$HOST_RUSTFLAGS" \
150-
RUST_LOG=warn \
151-
cargo run ${INTRINSIC_TEST} "${PROFILE}" --bin intrinsic-test -- intrinsics_data/arm_intrinsics.json --runner "${CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUNNER}" --cppcompiler "clang++-15" --skip crates/intrinsic-test/missing_aarch64.txt
152-
)
153-
elif [ "${TARGET}" = "armv7-unknown-linux-gnueabihf" ]; then
154-
(
155-
CPPFLAGS="-fuse-ld=lld -I/usr/arm-linux-gnueabihf/include/ -I/usr/arm-linux-gnueabihf/include/c++/9/arm-linux-gnueabihf/" \
156-
RUSTFLAGS="$HOST_RUSTFLAGS" \
157-
RUST_LOG=warn \
158-
cargo run ${INTRINSIC_TEST} "${PROFILE}" --bin intrinsic-test -- intrinsics_data/arm_intrinsics.json --runner "${CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_RUNNER}" --cppcompiler "clang++-15" --skip crates/intrinsic-test/missing_arm.txt --a32
159-
)
160-
fi
162+
# Arm specific
163+
case "${TARGET}" in
164+
aarch64-unknown-linux-gnu*|armv7-unknown-linux-gnueabihf*)
165+
CPPFLAGS="${TEST_CPPFLAGS}" RUSTFLAGS="${HOST_RUSTFLAGS}" RUST_LOG=warn \
166+
cargo run "${INTRINSIC_TEST}" "${PROFILE}" \
167+
--bin intrinsic-test -- intrinsics_data/arm_intrinsics.json \
168+
--runner "${TEST_RUNNER}" \
169+
--cppcompiler "${TEST_CXX_COMPILER}" \
170+
--skip "${TEST_SKIP_INTRINSICS}" \
171+
--target "${TARGET}"
172+
;;
173+
174+
aarch64_be-unknown-linux-gnu)
175+
# get the aarch64_be toolchain
176+
TOOLCHAIN="arm-gnu-toolchain-14.2.rel1-x86_64-aarch64_be-none-linux-gnu"
177+
178+
# Download the aarch64_be gcc toolchain
179+
curl -L "https://developer.arm.com/-/media/Files/downloads/gnu/14.2.rel1/binrel/${TOOLCHAIN}.tar.xz" \
180+
-o "${TOOLCHAIN}.tar.xz" && \
181+
tar -xzvf "./${TOOLCHAIN}".tar.xz && \
182+
mdkir /toolchains &&
183+
mv "./${TOOLCHAIN}" /toolchains
184+
185+
# Build the test suite
186+
AARCH64_BE_TOOLCHAIN="/toolchains/${TOOLCHAIN}"
187+
AARCH64_BE_LIBC="${AARCH64_BE_TOOLCHAIN}/aarch64_be-none-linux-gnu/libc"
188+
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER="${AARCH64_BE_TOOLCHAIN}/bin/aarch64_be-none-linux-gnu-gcc" \
189+
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUNNER="qemu-aarch64_be -L ${AARCH64_BE_LIBC}" \
190+
CPPFLAGS="-fuse-ld=lld" \
191+
RUSTFLAGS="-C linker=${AARCH64_BE}/bin/aarch64_be-none-linux-gnu-gcc -C link-args=-static" \
192+
cargo build \
193+
--target="${TARGET}" \
194+
--manifest-path=crates/intrinsic-test/Cargo.toml \
195+
--profile=release
196+
197+
# Now run it
198+
qemu-aarch64_be -L "${AARCH64_BE_LIBC}" \
199+
"./target/${TARGET}/release/intrinsic-test" \
200+
"./intrinsics_data/arm_intrinsics.json" \
201+
--target "${TARGET}" \
202+
--cppcompiler "clang++-18" \
203+
--skip crates/intrinsic-test/missing_aarch64.txt \
204+
--runner "${CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUNNER}" \
205+
--linker "${CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER}" \
206+
--cxx-toolchain-dir "${AARCH64_BE_TOOLCHAIN}"
207+
;;
208+
*)
209+
;;
210+
esac
161211

162212
if [ "$NORUN" != "1" ] && [ "$NOSTD" != 1 ]; then
163213
# Test examples

0 commit comments

Comments
 (0)