@@ -108,6 +108,7 @@ if [ "$NOSTD" != "1" ]; then
108108 cargo_test " ${STDARCH_EXAMPLES} ${PROFILE} "
109109fi
110110
111+
111112# Test targets compiled with extra features.
112113case ${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
144160esac
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
162212if [ " $NORUN " != " 1" ] && [ " $NOSTD " != 1 ]; then
163213 # Test examples
0 commit comments