Skip to content

Commit cfbf581

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 80a49b3 commit cfbf581

File tree

65 files changed

+755
-141
lines changed

Some content is hidden

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

65 files changed

+755
-141
lines changed

.changes/1112.json

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

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

7474
rm -rf "${td}"
75-
76-
return
7775
fi
7876

7977
# `cross build` test for the other targets
@@ -83,7 +81,7 @@ main() {
8381
pushd "${td}"
8482
cargo init --lib --name foo .
8583
retry cargo fetch
86-
"${CROSS[@]}" build --target "${TARGET}" ${CROSS_FLAGS}
84+
cross_build --target "${TARGET}"
8785
popd
8886

8987
rm -rf "${td}"
@@ -94,7 +92,7 @@ main() {
9492
# test that linking works
9593
cargo init --bin --name hello .
9694
retry cargo fetch
97-
"${CROSS[@]}" build --target "${TARGET}" ${CROSS_FLAGS}
95+
cross_build --target "${TARGET}"
9896
popd
9997

10098
rm -rf "${td}"
@@ -166,18 +164,32 @@ main() {
166164

167165
fi
168166

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

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

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

@@ -193,11 +205,44 @@ main() {
193205
cargo init --bin --name hello .
194206
retry cargo fetch
195207
RUSTFLAGS="-C target-feature=-crt-static" \
196-
"${CROSS[@]}" build --target "${TARGET}" ${CROSS_FLAGS}
208+
cross_build --target "${TARGET}"
197209
popd
198210

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

203248
cross_run() {

docker/Dockerfile.aarch64-linux-android

+10-2
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,18 @@ 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 /
42+
COPY android.cmake /opt/toolchain.cmake
4143

4244
# Libz is distributed in the android ndk, but for some unknown reason it is not
4345
# found in the build process of some crates, so we explicit set the DEP_Z_ROOT
46+
ENV CROSS_TARGET_RUNNER="/android-runner aarch64"
4447
ENV CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
45-
CARGO_TARGET_AARCH64_LINUX_ANDROID_RUNNER="/android-runner aarch64" \
48+
CARGO_TARGET_AARCH64_LINUX_ANDROID_RUNNER="$CROSS_TARGET_RUNNER" \
4649
AR_aarch64_linux_android="$CROSS_TOOLCHAIN_PREFIX"ar \
4750
AS_aarch64_linux_android="$CROSS_TOOLCHAIN_PREFIX"as \
4851
CC_aarch64_linux_android="$CROSS_TOOLCHAIN_PREFIX"gcc \
@@ -56,11 +59,16 @@ ENV CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
5659
SIZE_aarch64_linux_android="$CROSS_TOOLCHAIN_PREFIX"size \
5760
STRINGS_aarch64_linux_android="$CROSS_TOOLCHAIN_PREFIX"strings \
5861
STRIP_aarch64_linux_android="$CROSS_TOOLCHAIN_PREFIX"strip \
62+
CMAKE_TOOLCHAIN_FILE_aarch64_linux_android=/opt/toolchain.cmake \
5963
BINDGEN_EXTRA_CLANG_ARGS_aarch64_linux_android="--sysroot=$CROSS_SYSROOT" \
6064
DEP_Z_INCLUDE="$CROSS_SYSROOT/usr/include"/ \
6165
RUST_TEST_THREADS=1 \
6266
HOME=/tmp/ \
6367
TMPDIR=/tmp/ \
6468
ANDROID_DATA=/ \
6569
ANDROID_DNS_MODE=local \
66-
ANDROID_ROOT=/system
70+
ANDROID_ROOT=/system \
71+
CROSS_CMAKE_SYSTEM_NAME=Android \
72+
CROSS_CMAKE_SYSTEM_PROCESSOR=aarch64 \
73+
CROSS_CMAKE_CRT=android \
74+
CROSS_CMAKE_OBJECT_FLAGS="-DANDROID -ffunction-sections -fdata-sections -fPIC"

docker/Dockerfile.aarch64-unknown-linux-gnu

+9-2
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,22 @@ COPY linux-image.sh /
2929
RUN /linux-image.sh aarch64
3030

3131
COPY linux-runner base-runner.sh /
32+
COPY toolchain.cmake /opt/toolchain.cmake
3233

3334
ENV CROSS_TOOLCHAIN_PREFIX=aarch64-linux-gnu-
3435
ENV CROSS_SYSROOT=/usr/aarch64-linux-gnu
36+
ENV CROSS_TARGET_RUNNER="/linux-runner aarch64"
3537
ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
36-
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUNNER="/linux-runner aarch64" \
38+
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUNNER="$CROSS_TARGET_RUNNER" \
3739
AR_aarch64_unknown_linux_gnu="$CROSS_TOOLCHAIN_PREFIX"ar \
3840
CC_aarch64_unknown_linux_gnu="$CROSS_TOOLCHAIN_PREFIX"gcc \
3941
CXX_aarch64_unknown_linux_gnu="$CROSS_TOOLCHAIN_PREFIX"g++ \
42+
CMAKE_TOOLCHAIN_FILE_aarch64_unknown_linux_gnu=/opt/toolchain.cmake \
4043
BINDGEN_EXTRA_CLANG_ARGS_aarch64_unknown_linux_gnu="--sysroot=$CROSS_SYSROOT" \
4144
QEMU_LD_PREFIX="$CROSS_SYSROOT" \
4245
RUST_TEST_THREADS=1 \
43-
PKG_CONFIG_PATH="/usr/lib/aarch64-linux-gnu/pkgconfig/:${PKG_CONFIG_PATH}"
46+
PKG_CONFIG_PATH="/usr/lib/aarch64-linux-gnu/pkgconfig/:${PKG_CONFIG_PATH}" \
47+
CROSS_CMAKE_SYSTEM_NAME=Linux \
48+
CROSS_CMAKE_SYSTEM_PROCESSOR=aarch64 \
49+
CROSS_CMAKE_CRT=gnu \
50+
CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC"

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

+10-2
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,21 @@ 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+
3335
ENV CROSS_TOOLCHAIN_PREFIX=aarch64-linux-gnu-
3436
ENV CROSS_SYSROOT=/usr/aarch64-linux-gnu
37+
ENV CROSS_TARGET_RUNNER="/linux-runner aarch64"
3538
ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
36-
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUNNER="/linux-runner aarch64" \
39+
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUNNER="$CROSS_TARGET_RUNNER" \
3740
AR_aarch64_unknown_linux_gnu="$CROSS_TOOLCHAIN_PREFIX"ar \
3841
CC_aarch64_unknown_linux_gnu="$CROSS_TOOLCHAIN_PREFIX"gcc \
3942
CXX_aarch64_unknown_linux_gnu="$CROSS_TOOLCHAIN_PREFIX"g++ \
43+
CMAKE_TOOLCHAIN_FILE_aarch64_unknown_linux_gnu=/opt/toolchain.cmake \
4044
BINDGEN_EXTRA_CLANG_ARGS_aarch64_unknown_linux_gnu="--sysroot=$CROSS_SYSROOT" \
4145
QEMU_LD_PREFIX="$CROSS_SYSROOT" \
42-
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 \
50+
CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC"

docker/Dockerfile.aarch64-unknown-linux-musl

+8-1
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,20 @@ RUN /musl-symlink.sh $CROSS_SYSROOT aarch64
2323

2424
COPY musl-gcc.sh /usr/bin/"$CROSS_TOOLCHAIN_PREFIX"gcc.sh
2525
COPY qemu-runner base-runner.sh /
26+
COPY toolchain.cmake /opt/toolchain.cmake
2627

28+
ENV CROSS_TARGET_RUNNER="/qemu-runner aarch64"
2729
ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc.sh \
28-
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_RUNNER="/qemu-runner aarch64" \
30+
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_RUNNER="$CROSS_TARGET_RUNNER" \
2931
AR_aarch64_unknown_linux_musl="$CROSS_TOOLCHAIN_PREFIX"ar \
3032
CC_aarch64_unknown_linux_musl="$CROSS_TOOLCHAIN_PREFIX"gcc \
3133
CXX_aarch64_unknown_linux_musl="$CROSS_TOOLCHAIN_PREFIX"g++ \
34+
CMAKE_TOOLCHAIN_FILE_aarch64_unknown_linux_musl=/opt/toolchain.cmake \
3235
BINDGEN_EXTRA_CLANG_ARGS_aarch64_unknown_linux_musl="--sysroot=$CROSS_SYSROOT" \
3336
QEMU_LD_PREFIX="$CROSS_SYSROOT" \
3437
RUST_TEST_THREADS=1 \
38+
CROSS_CMAKE_SYSTEM_NAME=Linux \
39+
CROSS_CMAKE_SYSTEM_PROCESSOR=aarch64 \
40+
CROSS_CMAKE_CRT=musl \
41+
CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC" \
3542
CROSS_BUILTINS_PATCHED_MINOR_VERSION=48

docker/Dockerfile.arm-linux-androideabi

+10-2
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,18 @@ 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 /
42+
COPY android.cmake /opt/toolchain.cmake
4143

4244
# Libz is distributed in the android ndk, but for some unknown reason it is not
4345
# found in the build process of some crates, so we explicit set the DEP_Z_ROOT
46+
ENV CROSS_TARGET_RUNNER="/android-runner arm"
4447
ENV CARGO_TARGET_ARM_LINUX_ANDROIDEABI_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
45-
CARGO_TARGET_ARM_LINUX_ANDROIDEABI_RUNNER="/android-runner arm" \
48+
CARGO_TARGET_ARM_LINUX_ANDROIDEABI_RUNNER="$CROSS_TARGET_RUNNER" \
4649
AR_arm_linux_androideabi="$CROSS_TOOLCHAIN_PREFIX"ar \
4750
AS_arm_linux_androideabi="$CROSS_TOOLCHAIN_PREFIX"as \
4851
CC_arm_linux_androideabi="$CROSS_TOOLCHAIN_PREFIX"gcc \
@@ -56,11 +59,16 @@ ENV CARGO_TARGET_ARM_LINUX_ANDROIDEABI_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
5659
SIZE_arm_linux_androideabi="$CROSS_TOOLCHAIN_PREFIX"size \
5760
STRINGS_arm_linux_androideabi="$CROSS_TOOLCHAIN_PREFIX"strings \
5861
STRIP_arm_linux_androideabi="$CROSS_TOOLCHAIN_PREFIX"strip \
62+
CMAKE_TOOLCHAIN_FILE_arm_linux_androideabi=/opt/toolchain.cmake \
5963
BINDGEN_EXTRA_CLANG_ARGS_arm_linux_androideabi="--sysroot=$CROSS_SYSROOT" \
6064
DEP_Z_INCLUDE="$CROSS_SYSROOT/usr/include/" \
6165
RUST_TEST_THREADS=1 \
6266
HOME=/tmp/ \
6367
TMPDIR=/tmp/ \
6468
ANDROID_DATA=/ \
6569
ANDROID_DNS_MODE=local \
66-
ANDROID_ROOT=/system
70+
ANDROID_ROOT=/system \
71+
CROSS_CMAKE_SYSTEM_NAME=Android \
72+
CROSS_CMAKE_SYSTEM_PROCESSOR=armv5te \
73+
CROSS_CMAKE_CRT=android \
74+
CROSS_CMAKE_OBJECT_FLAGS="--target=arm-linux-androideabi -DANDROID -ffunction-sections -fdata-sections -fPIC --target=arm-linux-androideabi"

docker/Dockerfile.arm-unknown-linux-gnueabi

+9-2
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,22 @@ COPY qemu.sh /
2323
RUN /qemu.sh arm
2424

2525
COPY qemu-runner base-runner.sh /
26+
COPY toolchain.cmake /opt/toolchain.cmake
2627

2728
ENV CROSS_TOOLCHAIN_PREFIX=arm-linux-gnueabi-
2829
ENV CROSS_SYSROOT=/usr/arm-linux-gnueabi
30+
ENV CROSS_TARGET_RUNNER="/qemu-runner arm"
2931
ENV CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABI_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
30-
CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABI_RUNNER="/qemu-runner arm" \
32+
CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABI_RUNNER="$CROSS_TARGET_RUNNER" \
3133
AR_arm_unknown_linux_gnueabi="$CROSS_TOOLCHAIN_PREFIX"ar \
3234
CC_arm_unknown_linux_gnueabi="$CROSS_TOOLCHAIN_PREFIX"gcc \
3335
CXX_arm_unknown_linux_gnueabi="$CROSS_TOOLCHAIN_PREFIX"g++ \
36+
CMAKE_TOOLCHAIN_FILE_arm_unknown_linux_gnueabi=/opt/toolchain.cmake \
3437
BINDGEN_EXTRA_CLANG_ARGS_arm_unknown_linux_gnueabi="--sysroot=$CROSS_SYSROOT" \
3538
QEMU_LD_PREFIX="$CROSS_SYSROOT" \
3639
RUST_TEST_THREADS=1 \
37-
PKG_CONFIG_PATH="/usr/lib/arm-linux-gnueabi/pkgconfig/:${PKG_CONFIG_PATH}"
40+
PKG_CONFIG_PATH="/usr/lib/arm-linux-gnueabi/pkgconfig/:${PKG_CONFIG_PATH}" \
41+
CROSS_CMAKE_SYSTEM_NAME=Linux \
42+
CROSS_CMAKE_SYSTEM_PROCESSOR=arm \
43+
CROSS_CMAKE_CRT=gnu \
44+
CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC -march=armv6 -marm -mfloat-abi=soft"

docker/Dockerfile.arm-unknown-linux-gnueabihf

+9-2
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,21 @@ COPY qemu.sh /
2424
RUN /qemu.sh arm
2525

2626
COPY qemu-runner base-runner.sh /
27+
COPY toolchain.cmake /opt/toolchain.cmake
2728

2829
ENV CROSS_TOOLCHAIN_PREFIX=arm-unknown-linux-gnueabihf-
2930
ENV CROSS_SYSROOT=/x-tools/arm-unknown-linux-gnueabihf/arm-unknown-linux-gnueabihf/sysroot/
31+
ENV CROSS_TARGET_RUNNER="/qemu-runner armhf"
3032
ENV CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABIHF_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
31-
CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABIHF_RUNNER="/qemu-runner armhf" \
33+
CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABIHF_RUNNER="$CROSS_TARGET_RUNNER" \
3234
AR_arm_unknown_linux_gnueabihf="$CROSS_TOOLCHAIN_PREFIX"ar \
3335
CC_arm_unknown_linux_gnueabihf="$CROSS_TOOLCHAIN_PREFIX"gcc \
3436
CXX_arm_unknown_linux_gnueabihf="$CROSS_TOOLCHAIN_PREFIX"g++ \
37+
CMAKE_TOOLCHAIN_FILE_arm_unknown_linux_gnueabihf=/opt/toolchain.cmake \
3538
BINDGEN_EXTRA_CLANG_ARGS_arm_unknown_linux_gnueabihf="--sysroot=$CROSS_SYSROOT" \
3639
QEMU_LD_PREFIX="$CROSS_SYSROOT" \
37-
RUST_TEST_THREADS=1
40+
RUST_TEST_THREADS=1 \
41+
CROSS_CMAKE_SYSTEM_NAME=Linux \
42+
CROSS_CMAKE_SYSTEM_PROCESSOR=arm \
43+
CROSS_CMAKE_CRT=gnu \
44+
CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC -march=armv6 -marm -mfpu=vfp"

docker/Dockerfile.arm-unknown-linux-musleabi

+9-2
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,19 @@ COPY musl-symlink.sh /
2626
RUN /musl-symlink.sh $CROSS_SYSROOT arm
2727

2828
COPY qemu-runner base-runner.sh /
29+
COPY toolchain.cmake /opt/toolchain.cmake
2930

31+
ENV CROSS_TARGET_RUNNER="/qemu-runner arm"
3032
ENV CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABI_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
31-
CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABI_RUNNER="/qemu-runner arm" \
33+
CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABI_RUNNER="$CROSS_TARGET_RUNNER" \
3234
AR_arm_unknown_linux_musleabi="$CROSS_TOOLCHAIN_PREFIX"ar \
3335
CC_arm_unknown_linux_musleabi="$CROSS_TOOLCHAIN_PREFIX"gcc \
3436
CXX_arm_unknown_linux_musleabi="$CROSS_TOOLCHAIN_PREFIX"g++ \
37+
CMAKE_TOOLCHAIN_FILE_arm_unknown_linux_musleabi=/opt/toolchain.cmake \
3538
BINDGEN_EXTRA_CLANG_ARGS_arm_unknown_linux_musleabi="--sysroot=$CROSS_SYSROOT" \
3639
QEMU_LD_PREFIX="$CROSS_SYSROOT" \
37-
RUST_TEST_THREADS=1
40+
RUST_TEST_THREADS=1 \
41+
CROSS_CMAKE_SYSTEM_NAME=Linux \
42+
CROSS_CMAKE_SYSTEM_PROCESSOR=arm \
43+
CROSS_CMAKE_CRT=musl \
44+
CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC -march=armv6 -marm -mfloat-abi=soft"

docker/Dockerfile.arm-unknown-linux-musleabihf

+9-2
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,19 @@ COPY musl-symlink.sh /
2727
RUN /musl-symlink.sh $CROSS_SYSROOT armhf
2828

2929
COPY qemu-runner base-runner.sh /
30+
COPY toolchain.cmake /opt/toolchain.cmake
3031

32+
ENV CROSS_TARGET_RUNNER="/qemu-runner armhf"
3133
ENV CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABIHF_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
32-
CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABIHF_RUNNER="/qemu-runner armhf" \
34+
CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABIHF_RUNNER="$CROSS_TARGET_RUNNER" \
3335
AR_arm_unknown_linux_musleabihf="$CROSS_TOOLCHAIN_PREFIX"ar \
3436
CC_arm_unknown_linux_musleabihf="$CROSS_TOOLCHAIN_PREFIX"gcc \
3537
CXX_arm_unknown_linux_musleabihf="$CROSS_TOOLCHAIN_PREFIX"g++ \
38+
CMAKE_TOOLCHAIN_FILE_arm_unknown_linux_musleabihf=/opt/toolchain.cmake \
3639
BINDGEN_EXTRA_CLANG_ARGS_arm_unknown_linux_musleabihf="--sysroot=$CROSS_SYSROOT" \
3740
QEMU_LD_PREFIX="$CROSS_SYSROOT" \
38-
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=musl \
45+
CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC -march=armv6 -marm -mfpu=vfp"

docker/Dockerfile.armv5te-unknown-linux-gnueabi

+9-2
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,22 @@ COPY qemu.sh /
2424
RUN /qemu.sh arm
2525

2626
COPY qemu-runner base-runner.sh /
27+
COPY toolchain.cmake /opt/toolchain.cmake
2728

2829
ENV CROSS_TOOLCHAIN_PREFIX=arm-linux-gnueabi-
2930
ENV CROSS_SYSROOT=/usr/arm-linux-gnueabi
31+
ENV CROSS_TARGET_RUNNER="/qemu-runner arm"
3032
ENV CARGO_TARGET_ARMV5TE_UNKNOWN_LINUX_GNUEABI_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
31-
CARGO_TARGET_ARMV5TE_UNKNOWN_LINUX_GNUEABI_RUNNER="/qemu-runner arm" \
33+
CARGO_TARGET_ARMV5TE_UNKNOWN_LINUX_GNUEABI_RUNNER="$CROSS_TARGET_RUNNER" \
3234
AR_armv5te_unknown_linux_gnueabi="$CROSS_TOOLCHAIN_PREFIX"ar \
3335
CC_armv5te_unknown_linux_gnueabi="$CROSS_TOOLCHAIN_PREFIX"gcc \
3436
CXX_armv5te_unknown_linux_gnueabi="$CROSS_TOOLCHAIN_PREFIX"g++ \
37+
CMAKE_TOOLCHAIN_FILE_armv5te_unknown_linux_gnueabi=/opt/toolchain.cmake \
3538
BINDGEN_EXTRA_CLANG_ARGS_armv5te_unknown_linux_gnueabi="--sysroot=$CROSS_SYSROOT" \
3639
QEMU_LD_PREFIX="$CROSS_SYSROOT" \
3740
RUST_TEST_THREADS=1 \
38-
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 \
45+
CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC -march=armv5te -marm -mfloat-abi=soft"

0 commit comments

Comments
 (0)