Skip to content

Commit db90975

Browse files
committed
Update CI to facilitate big endian at some point
1 parent 1879995 commit db90975

File tree

2 files changed

+78
-15
lines changed

2 files changed

+78
-15
lines changed

Diff for: ci/docker/aarch64_be-none-linux-gnu/Dockerfile

+13
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

Diff for: ci/run.sh

+65-15
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*)
@@ -134,26 +135,75 @@ case ${TARGET} in
134135
export RUSTFLAGS="${OLD_RUSTFLAGS} -C target-feature=+vsx"
135136
cargo_test "${PROFILE}"
136137
;;
138+
139+
# Setup aarch64 & armv7 specific variables, the runner, along with some
140+
# tests to skip
141+
aarch64-unknown-linux-gnu*)
142+
TEST_CPPFLAGS="-fuse-ld=lld -I/usr/aarch64-linux-gnu/include/ -I/usr/aarch64-linux-gnu/include/c++/9/aarch64-linux-gnu/"
143+
TEST_SKIP_INTRINSICS=crates/intrinsic-test/missing_aarch64.txt
144+
TEST_CXX_COMPILER="clang++-15"
145+
TEST_RUNNER="${CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUNNER}"
146+
;;
147+
armv7-unknown-linux-gnueabihf*)
148+
TEST_CPPFLAGS="-fuse-ld=lld -I/usr/arm-linux-gnueabihf/include/ -I/usr/arm-linux-gnueabihf/include/c++/9/arm-linux-gnueabihf/"
149+
TEST_SKIP_INTRINSICS=crates/intrinsic-test/missing_arm.txt
150+
TEST_CXX_COMPILER="clang++-15"
151+
TEST_RUNNER="${CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_RUNNER}"
152+
;;
137153
*)
138154
;;
139155

140156
esac
141157

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

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

0 commit comments

Comments
 (0)