Skip to content

Commit 9f1e817

Browse files
committed
Fix CMake Support and Enhance Newlib Targets
Fixes CMake support for all targets, ensuring support for C11, C++11, `try_run`, and more features. To do so, we've included tests with a CMake test suite that compiles for a bare-metal target, one that compiles against [re2](https://github.com/google/re2), and one using CMake's `try_run` (checking [CMAKE_CROSSCOMPILING_EMULATOR](https://cmake.org/cmake/help/latest/variable/CMAKE_CROSSCOMPILING_EMULATOR.html) is set for any cross-compiled targets). CMake support for Android targets was fixed by providing a toolchain file that specifies the API level and the standalone toolchain path, and ensuring that compiler detection is forcibly disabled. For other targets, a default toolchain file is provided that ensures the correct system name, processor, cross-compiling emulator, binutils, and cross-compilers are used. For bare-metal (newlib) targets, this ensures that `try_compile` uses a static library rather than an executable to avoid requiring a linker script to detect if the compiler works. This also adds a few minor changes for newlib targets: - Adds C++ support to bare-metal newlib targets by installing `libstdc++-arm-none-eabi-newlib`. - Updates `targets.toml` to specify that newlib targets do not have `std` support. - Use the Cortex-M1 CPU for `thumbv6m-none-eabi` rather than the Cortex-M3 (an ARMv7-M CPU) for the Qemu runner.
1 parent 5108b9f commit 9f1e817

File tree

63 files changed

+750
-163
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+750
-163
lines changed

.changes/1112.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
[
2+
{
3+
"description": "fixed CMake support for Android and newlib targets.",
4+
"type": "fixed",
5+
"issues": [1110]
6+
},
7+
{
8+
"description": "added C++ support for newlib targets.",
9+
"type": "added"
10+
}
11+
]

ci/test.sh

Lines changed: 53 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,10 @@ main() {
6767
retry cargo fetch
6868
# don't use xargo: should have native support just from rustc
6969
rustup toolchain add nightly
70-
"${CROSS[@]}" build --lib --target "${TARGET}" ${CROSS_FLAGS}
70+
cross_build --lib --target "${TARGET}"
7171
popd
7272

7373
rm -rf "${td}"
74-
75-
return
7674
fi
7775

7876
# `cross build` test for the other targets
@@ -82,7 +80,7 @@ main() {
8280
pushd "${td}"
8381
cargo init --lib --name foo .
8482
retry cargo fetch
85-
"${CROSS[@]}" build --target "${TARGET}" ${CROSS_FLAGS}
83+
cross_build --target "${TARGET}"
8684
popd
8785

8886
rm -rf "${td}"
@@ -93,7 +91,7 @@ main() {
9391
# test that linking works
9492
cargo init --bin --name hello .
9593
retry cargo fetch
96-
"${CROSS[@]}" build --target "${TARGET}" ${CROSS_FLAGS}
94+
cross_build --target "${TARGET}"
9795
popd
9896

9997
rm -rf "${td}"
@@ -165,18 +163,32 @@ main() {
165163

166164
fi
167165

168-
# Test C++ support
166+
# Test C++ support in a no_std context
169167
if (( ${CPP:-0} )); then
170168
td="$(mkcargotemp -d)"
171169

170+
git clone --depth 1 https://github.com/cross-rs/rust-cpp-accumulate "${td}"
171+
172+
pushd "${td}"
173+
retry cargo fetch
174+
cross_build --target "${TARGET}"
175+
popd
176+
177+
rm -rf "${td}"
178+
fi
179+
180+
# Test C++ support
181+
if (( ${STD:-0} )) && (( ${CPP:-0} )); then
182+
td="$(mkcargotemp -d)"
183+
172184
git clone --depth 1 https://github.com/cross-rs/rust-cpp-hello-word "${td}"
173185

174186
pushd "${td}"
175187
retry cargo fetch
176188
if (( ${RUN:-0} )); then
177189
cross_run --target "${TARGET}"
178190
else
179-
"${CROSS[@]}" build --target "${TARGET}" ${CROSS_FLAGS}
191+
cross_build --target "${TARGET}"
180192
fi
181193
popd
182194

@@ -192,11 +204,44 @@ main() {
192204
cargo init --bin --name hello .
193205
retry cargo fetch
194206
RUSTFLAGS="-C target-feature=-crt-static" \
195-
"${CROSS[@]}" build --target "${TARGET}" ${CROSS_FLAGS}
207+
cross_build --target "${TARGET}"
196208
popd
197209

198210
rm -rf "${td}"
199211
fi
212+
213+
# test cmake support
214+
td="$(mkcargotemp -d)"
215+
216+
git clone \
217+
--recursive \
218+
--depth 1 \
219+
https://github.com/cross-rs/rust-cmake-hello-world "${td}"
220+
221+
pushd "${td}"
222+
retry cargo fetch
223+
if [[ "${TARGET}" == "arm-linux-androideabi" ]]; then
224+
# ARMv5te isn't supported anymore by Android, which produces missing
225+
# symbol errors with re2 like `__libcpp_signed_lock_free`.
226+
cross_run --target "${TARGET}" --features=tryrun
227+
elif (( ${STD:-0} )) && (( ${RUN:-0} )) && (( ${CPP:-0} )); then
228+
cross_run --target "${TARGET}" --features=re2,tryrun
229+
elif (( ${STD:-0} )) && (( ${CPP:-0} )); then
230+
cross_build --target "${TARGET}" --features=re2
231+
elif (( ${STD:-0} )) && (( ${RUN:-0} )); then
232+
cross_run --target "${TARGET}" --features=tryrun
233+
elif (( ${STD:-0} )); then
234+
cross_build --target "${TARGET}" --features=tryrun
235+
else
236+
cross_build --lib --target "${TARGET}"
237+
fi
238+
popd
239+
240+
rm -rf "${td}"
241+
}
242+
243+
cross_build() {
244+
"${CROSS[@]}" build "$@" ${CROSS_FLAGS}
200245
}
201246

202247
cross_run() {

docker/Dockerfile.aarch64-linux-android

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,21 @@ RUN /android-system.sh arm64
3434

3535
ENV CROSS_TOOLCHAIN_PREFIX=aarch64-linux-android-
3636
ENV CROSS_SYSROOT=/android-ndk/sysroot
37+
ENV CROSS_ANDROID_SDK=$ANDROID_SDK
3738
COPY android-symlink.sh /
3839
RUN /android-symlink.sh aarch64 aarch64-linux-android
3940

4041
COPY android-runner /
4142

43+
COPY android.cmake /opt/android.cmake
44+
ENV CMAKE_TOOLCHAIN_FILE=/opt/android.cmake
45+
ENV CROSS_CMAKE_OBJECT_FLAGS="-DANDROID -ffunction-sections -fdata-sections -fPIC"
46+
4247
# Libz is distributed in the android ndk, but for some unknown reason it is not
4348
# found in the build process of some crates, so we explicit set the DEP_Z_ROOT
49+
ENV CROSS_TARGET_RUNNER="/android-runner aarch64"
4450
ENV CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
45-
CARGO_TARGET_AARCH64_LINUX_ANDROID_RUNNER="/android-runner aarch64" \
51+
CARGO_TARGET_AARCH64_LINUX_ANDROID_RUNNER="$CROSS_TARGET_RUNNER" \
4652
AR_aarch64_linux_android="$CROSS_TOOLCHAIN_PREFIX"ar \
4753
AS_aarch64_linux_android="$CROSS_TOOLCHAIN_PREFIX"as \
4854
CC_aarch64_linux_android="$CROSS_TOOLCHAIN_PREFIX"gcc \
@@ -63,4 +69,7 @@ ENV CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
6369
TMPDIR=/tmp/ \
6470
ANDROID_DATA=/ \
6571
ANDROID_DNS_MODE=local \
66-
ANDROID_ROOT=/system
72+
ANDROID_ROOT=/system \
73+
CROSS_CMAKE_SYSTEM_NAME=Android \
74+
CROSS_CMAKE_SYSTEM_PROCESSOR=aarch64 \
75+
CROSS_CMAKE_CRT=android

docker/Dockerfile.aarch64-unknown-linux-gnu

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,21 @@ RUN /linux-image.sh aarch64
3030

3131
COPY linux-runner base-runner.sh /
3232

33+
COPY toolchain.cmake /opt/toolchain.cmake
34+
ENV CMAKE_TOOLCHAIN_FILE=/opt/toolchain.cmake
35+
ENV CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC"
36+
3337
ENV CROSS_TOOLCHAIN_PREFIX=aarch64-linux-gnu-
3438
ENV CROSS_SYSROOT=/usr/aarch64-linux-gnu
39+
ENV CROSS_TARGET_RUNNER="/linux-runner aarch64"
3540
ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
36-
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUNNER="/linux-runner aarch64" \
41+
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUNNER="$CROSS_TARGET_RUNNER" \
3742
CC_aarch64_unknown_linux_gnu="$CROSS_TOOLCHAIN_PREFIX"gcc \
3843
CXX_aarch64_unknown_linux_gnu="$CROSS_TOOLCHAIN_PREFIX"g++ \
3944
BINDGEN_EXTRA_CLANG_ARGS_aarch64_unknown_linux_gnu="--sysroot=$CROSS_SYSROOT" \
4045
QEMU_LD_PREFIX="$CROSS_SYSROOT" \
4146
RUST_TEST_THREADS=1 \
42-
PKG_CONFIG_PATH="/usr/lib/aarch64-linux-gnu/pkgconfig/:${PKG_CONFIG_PATH}"
47+
PKG_CONFIG_PATH="/usr/lib/aarch64-linux-gnu/pkgconfig/:${PKG_CONFIG_PATH}" \
48+
CROSS_CMAKE_SYSTEM_NAME=Linux \
49+
CROSS_CMAKE_SYSTEM_PROCESSOR=aarch64 \
50+
CROSS_CMAKE_CRT=gnu

docker/Dockerfile.aarch64-unknown-linux-gnu.centos

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,20 @@ COPY linux-runner base-runner.sh /
3030
COPY aarch64-linux-gnu-glibc.sh /
3131
RUN /aarch64-linux-gnu-glibc.sh
3232

33+
COPY toolchain.cmake /opt/toolchain.cmake
34+
ENV CMAKE_TOOLCHAIN_FILE=/opt/toolchain.cmake
35+
ENV CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC"
36+
3337
ENV CROSS_TOOLCHAIN_PREFIX=aarch64-linux-gnu-
3438
ENV CROSS_SYSROOT=/usr/aarch64-linux-gnu
39+
ENV CROSS_TARGET_RUNNER="/linux-runner aarch64"
3540
ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
36-
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUNNER="/linux-runner aarch64" \
41+
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUNNER="$CROSS_TARGET_RUNNER" \
3742
CC_aarch64_unknown_linux_gnu="$CROSS_TOOLCHAIN_PREFIX"gcc \
3843
CXX_aarch64_unknown_linux_gnu="$CROSS_TOOLCHAIN_PREFIX"g++ \
3944
BINDGEN_EXTRA_CLANG_ARGS_aarch64_unknown_linux_gnu="--sysroot=$CROSS_SYSROOT" \
4045
QEMU_LD_PREFIX="$CROSS_SYSROOT" \
41-
RUST_TEST_THREADS=1
46+
RUST_TEST_THREADS=1 \
47+
CROSS_CMAKE_SYSTEM_NAME=Linux \
48+
CROSS_CMAKE_SYSTEM_PROCESSOR=aarch64 \
49+
CROSS_CMAKE_CRT=gnu

docker/Dockerfile.aarch64-unknown-linux-musl

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,18 @@ COPY rustc_info.sh /
2626

2727
COPY qemu-runner base-runner.sh /
2828

29+
COPY toolchain.cmake /opt/toolchain.cmake
30+
ENV CMAKE_TOOLCHAIN_FILE=/opt/toolchain.cmake
31+
ENV CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC"
32+
33+
ENV CROSS_TARGET_RUNNER="/qemu-runner aarch64"
2934
ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc.sh \
30-
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_RUNNER="/qemu-runner aarch64" \
35+
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_RUNNER="$CROSS_TARGET_RUNNER" \
3136
CC_aarch64_unknown_linux_musl="$CROSS_TOOLCHAIN_PREFIX"gcc \
3237
CXX_aarch64_unknown_linux_musl="$CROSS_TOOLCHAIN_PREFIX"g++ \
3338
BINDGEN_EXTRA_CLANG_ARGS_aarch64_unknown_linux_musl="--sysroot=$CROSS_SYSROOT" \
3439
QEMU_LD_PREFIX="$CROSS_SYSROOT" \
35-
RUST_TEST_THREADS=1
40+
RUST_TEST_THREADS=1 \
41+
CROSS_CMAKE_SYSTEM_NAME=Linux \
42+
CROSS_CMAKE_SYSTEM_PROCESSOR=aarch64 \
43+
CROSS_CMAKE_CRT=musl

docker/Dockerfile.arm-linux-androideabi

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,21 @@ RUN /android-system.sh arm
3434

3535
ENV CROSS_TOOLCHAIN_PREFIX=arm-linux-androideabi-
3636
ENV CROSS_SYSROOT=/android-ndk/sysroot
37+
ENV CROSS_ANDROID_SDK=$ANDROID_SDK
3738
COPY android-symlink.sh /
3839
RUN /android-symlink.sh arm arm-linux-androideabi
3940

4041
COPY android-runner /
4142

43+
COPY android.cmake /opt/android.cmake
44+
ENV CMAKE_TOOLCHAIN_FILE=/opt/android.cmake
45+
ENV CROSS_CMAKE_OBJECT_FLAGS="-DANDROID -ffunction-sections -fdata-sections -fPIC"
46+
4247
# Libz is distributed in the android ndk, but for some unknown reason it is not
4348
# found in the build process of some crates, so we explicit set the DEP_Z_ROOT
49+
ENV CROSS_TARGET_RUNNER="/android-runner arm"
4450
ENV CARGO_TARGET_ARM_LINUX_ANDROIDEABI_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
45-
CARGO_TARGET_ARM_LINUX_ANDROIDEABI_RUNNER="/android-runner arm" \
51+
CARGO_TARGET_ARM_LINUX_ANDROIDEABI_RUNNER="$CROSS_TARGET_RUNNER" \
4652
AR_arm_linux_androideabi="$CROSS_TOOLCHAIN_PREFIX"ar \
4753
AS_arm_linux_androideabi="$CROSS_TOOLCHAIN_PREFIX"as \
4854
CC_arm_linux_androideabi="$CROSS_TOOLCHAIN_PREFIX"gcc \
@@ -63,4 +69,7 @@ ENV CARGO_TARGET_ARM_LINUX_ANDROIDEABI_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
6369
TMPDIR=/tmp/ \
6470
ANDROID_DATA=/ \
6571
ANDROID_DNS_MODE=local \
66-
ANDROID_ROOT=/system
72+
ANDROID_ROOT=/system \
73+
CROSS_CMAKE_SYSTEM_NAME=Android \
74+
CROSS_CMAKE_SYSTEM_PROCESSOR=armv5te \
75+
CROSS_CMAKE_CRT=android

docker/Dockerfile.arm-unknown-linux-gnueabi

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,21 @@ RUN /qemu.sh arm
2424

2525
COPY qemu-runner base-runner.sh /
2626

27+
COPY toolchain.cmake /opt/toolchain.cmake
28+
ENV CMAKE_TOOLCHAIN_FILE=/opt/toolchain.cmake
29+
ENV CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC -march=armv6 -marm -mfloat-abi=soft"
30+
2731
ENV CROSS_TOOLCHAIN_PREFIX=arm-linux-gnueabi-
2832
ENV CROSS_SYSROOT=/usr/arm-linux-gnueabi
33+
ENV CROSS_TARGET_RUNNER="/qemu-runner arm"
2934
ENV CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABI_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
30-
CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABI_RUNNER="/qemu-runner arm" \
35+
CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABI_RUNNER="$CROSS_TARGET_RUNNER" \
3136
CC_arm_unknown_linux_gnueabi="$CROSS_TOOLCHAIN_PREFIX"gcc \
3237
CXX_arm_unknown_linux_gnueabi="$CROSS_TOOLCHAIN_PREFIX"g++ \
3338
BINDGEN_EXTRA_CLANG_ARGS_arm_unknown_linux_gnueabi="--sysroot=$CROSS_SYSROOT" \
3439
QEMU_LD_PREFIX="$CROSS_SYSROOT" \
3540
RUST_TEST_THREADS=1 \
36-
PKG_CONFIG_PATH="/usr/lib/arm-linux-gnueabi/pkgconfig/:${PKG_CONFIG_PATH}"
41+
PKG_CONFIG_PATH="/usr/lib/arm-linux-gnueabi/pkgconfig/:${PKG_CONFIG_PATH}" \
42+
CROSS_CMAKE_SYSTEM_NAME=Linux \
43+
CROSS_CMAKE_SYSTEM_PROCESSOR=arm \
44+
CROSS_CMAKE_CRT=gnu

docker/Dockerfile.arm-unknown-linux-gnueabihf

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,20 @@ RUN /qemu.sh arm
2525

2626
COPY qemu-runner base-runner.sh /
2727

28+
COPY toolchain.cmake /opt/toolchain.cmake
29+
ENV CMAKE_TOOLCHAIN_FILE=/opt/toolchain.cmake
30+
ENV CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC -march=armv6 -marm -mfpu=vfp"
31+
2832
ENV CROSS_TOOLCHAIN_PREFIX=arm-unknown-linux-gnueabihf-
2933
ENV CROSS_SYSROOT=/x-tools/arm-unknown-linux-gnueabihf/arm-unknown-linux-gnueabihf/sysroot/
34+
ENV CROSS_TARGET_RUNNER="/qemu-runner armhf"
3035
ENV CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABIHF_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
31-
CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABIHF_RUNNER="/qemu-runner armhf" \
36+
CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABIHF_RUNNER="$CROSS_TARGET_RUNNER" \
3237
CC_arm_unknown_linux_gnueabihf="$CROSS_TOOLCHAIN_PREFIX"gcc \
3338
CXX_arm_unknown_linux_gnueabihf="$CROSS_TOOLCHAIN_PREFIX"g++ \
3439
BINDGEN_EXTRA_CLANG_ARGS_arm_unknown_linux_gnueabihf="--sysroot=$CROSS_SYSROOT" \
3540
QEMU_LD_PREFIX="$CROSS_SYSROOT" \
36-
RUST_TEST_THREADS=1
41+
RUST_TEST_THREADS=1 \
42+
CROSS_CMAKE_SYSTEM_NAME=Linux \
43+
CROSS_CMAKE_SYSTEM_PROCESSOR=arm \
44+
CROSS_CMAKE_CRT=gnu

docker/Dockerfile.arm-unknown-linux-musleabi

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,18 @@ COPY qemu-runner base-runner.sh /
2929

3030
COPY musl-gcc.sh /usr/bin/"$CROSS_TOOLCHAIN_PREFIX"gcc.sh
3131

32+
COPY toolchain.cmake /opt/toolchain.cmake
33+
ENV CMAKE_TOOLCHAIN_FILE=/opt/toolchain.cmake
34+
ENV CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC -march=armv6 -marm -mfloat-abi=soft"
35+
36+
ENV CROSS_TARGET_RUNNER="/qemu-runner arm"
3237
ENV CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABI_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc.sh \
33-
CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABI_RUNNER="/qemu-runner arm" \
38+
CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABI_RUNNER="$CROSS_TARGET_RUNNER" \
3439
CC_arm_unknown_linux_musleabi="$CROSS_TOOLCHAIN_PREFIX"gcc \
3540
CXX_arm_unknown_linux_musleabi="$CROSS_TOOLCHAIN_PREFIX"g++ \
3641
BINDGEN_EXTRA_CLANG_ARGS_arm_unknown_linux_musleabi="--sysroot=$CROSS_SYSROOT" \
3742
QEMU_LD_PREFIX="$CROSS_SYSROOT" \
38-
RUST_TEST_THREADS=1
43+
RUST_TEST_THREADS=1 \
44+
CROSS_CMAKE_SYSTEM_NAME=Linux \
45+
CROSS_CMAKE_SYSTEM_PROCESSOR=arm \
46+
CROSS_CMAKE_CRT=musl

docker/Dockerfile.arm-unknown-linux-musleabihf

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,18 @@ COPY qemu-runner base-runner.sh /
3030

3131
COPY musl-gcc.sh /usr/bin/"$CROSS_TOOLCHAIN_PREFIX"gcc.sh
3232

33+
COPY toolchain.cmake /opt/toolchain.cmake
34+
ENV CMAKE_TOOLCHAIN_FILE=/opt/toolchain.cmake
35+
ENV CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC -march=armv6 -marm -mfpu=vfp"
36+
37+
ENV CROSS_TARGET_RUNNER="/qemu-runner armhf"
3338
ENV CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABIHF_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc.sh \
34-
CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABIHF_RUNNER="/qemu-runner armhf" \
39+
CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABIHF_RUNNER="$CROSS_TARGET_RUNNER" \
3540
CC_arm_unknown_linux_musleabihf="$CROSS_TOOLCHAIN_PREFIX"gcc \
3641
CXX_arm_unknown_linux_musleabihf="$CROSS_TOOLCHAIN_PREFIX"g++ \
3742
BINDGEN_EXTRA_CLANG_ARGS_arm_unknown_linux_musleabihf="--sysroot=$CROSS_SYSROOT" \
3843
QEMU_LD_PREFIX="$CROSS_SYSROOT" \
39-
RUST_TEST_THREADS=1
44+
RUST_TEST_THREADS=1 \
45+
CROSS_CMAKE_SYSTEM_NAME=Linux \
46+
CROSS_CMAKE_SYSTEM_PROCESSOR=arm \
47+
CROSS_CMAKE_CRT=musl

docker/Dockerfile.armv5te-unknown-linux-gnueabi

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,21 @@ RUN /qemu.sh arm
2525

2626
COPY qemu-runner base-runner.sh /
2727

28+
COPY toolchain.cmake /opt/toolchain.cmake
29+
ENV CMAKE_TOOLCHAIN_FILE=/opt/toolchain.cmake
30+
ENV CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC -march=armv5te -marm -mfloat-abi=soft"
31+
2832
ENV CROSS_TOOLCHAIN_PREFIX=arm-linux-gnueabi-
2933
ENV CROSS_SYSROOT=/usr/arm-linux-gnueabi
34+
ENV CROSS_TARGET_RUNNER="/qemu-runner arm"
3035
ENV CARGO_TARGET_ARMV5TE_UNKNOWN_LINUX_GNUEABI_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
31-
CARGO_TARGET_ARMV5TE_UNKNOWN_LINUX_GNUEABI_RUNNER="/qemu-runner arm" \
36+
CARGO_TARGET_ARMV5TE_UNKNOWN_LINUX_GNUEABI_RUNNER="$CROSS_TARGET_RUNNER" \
3237
CC_armv5te_unknown_linux_gnueabi="$CROSS_TOOLCHAIN_PREFIX"gcc \
3338
CXX_armv5te_unknown_linux_gnueabi="$CROSS_TOOLCHAIN_PREFIX"g++ \
3439
BINDGEN_EXTRA_CLANG_ARGS_armv5te_unknown_linux_gnueabi="--sysroot=$CROSS_SYSROOT" \
3540
QEMU_LD_PREFIX="$CROSS_SYSROOT" \
3641
RUST_TEST_THREADS=1 \
37-
PKG_CONFIG_PATH="/usr/lib/arm-linux-gnueabi/pkgconfig/:${PKG_CONFIG_PATH}"
42+
PKG_CONFIG_PATH="/usr/lib/arm-linux-gnueabi/pkgconfig/:${PKG_CONFIG_PATH}" \
43+
CROSS_CMAKE_SYSTEM_NAME=Linux \
44+
CROSS_CMAKE_SYSTEM_PROCESSOR=arm \
45+
CROSS_CMAKE_CRT=gnu

docker/Dockerfile.armv5te-unknown-linux-musleabi

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,18 @@ COPY qemu-runner base-runner.sh /
3030
COPY rust-1-65-musl-gcc.sh /usr/bin/"$CROSS_TOOLCHAIN_PREFIX"gcc.sh
3131
COPY rustc_info.sh /
3232

33+
COPY toolchain.cmake /opt/toolchain.cmake
34+
ENV CMAKE_TOOLCHAIN_FILE=/opt/toolchain.cmake
35+
ENV CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC -march=armv5te -marm -mfloat-abi=soft"
36+
37+
ENV CROSS_TARGET_RUNNER="/qemu-runner arm"
3338
ENV CARGO_TARGET_ARMV5TE_UNKNOWN_LINUX_MUSLEABI_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc.sh \
34-
CARGO_TARGET_ARMV5TE_UNKNOWN_LINUX_MUSLEABI_RUNNER="/qemu-runner arm" \
39+
CARGO_TARGET_ARMV5TE_UNKNOWN_LINUX_MUSLEABI_RUNNER="$CROSS_TARGET_RUNNER" \
3540
CC_armv5te_unknown_linux_musleabi="$CROSS_TOOLCHAIN_PREFIX"gcc \
3641
CXX_armv5te_unknown_linux_musleabi="$CROSS_TOOLCHAIN_PREFIX"g++ \
3742
BINDGEN_EXTRA_CLANG_ARGS_armv5te_unknown_linux_musleabi="--sysroot=$CROSS_SYSROOT" \
3843
QEMU_LD_PREFIX="$CROSS_SYSROOT" \
39-
RUST_TEST_THREADS=1
44+
RUST_TEST_THREADS=1 \
45+
CROSS_CMAKE_SYSTEM_NAME=Linux \
46+
CROSS_CMAKE_SYSTEM_PROCESSOR=arm \
47+
CROSS_CMAKE_CRT=musl

0 commit comments

Comments
 (0)