Skip to content

Commit 4a588db

Browse files
authored
Try #1112:
2 parents 5108b9f + 9e67d8b commit 4a588db

File tree

68 files changed

+806
-303
lines changed

Some content is hidden

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

68 files changed

+806
-303
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
@@ -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

+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,14 +29,21 @@ 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
CC_aarch64_unknown_linux_gnu="$CROSS_TOOLCHAIN_PREFIX"gcc \
3840
CXX_aarch64_unknown_linux_gnu="$CROSS_TOOLCHAIN_PREFIX"g++ \
41+
CMAKE_TOOLCHAIN_FILE_aarch64_unknown_linux_gnu=/opt/toolchain.cmake \
3942
BINDGEN_EXTRA_CLANG_ARGS_aarch64_unknown_linux_gnu="--sysroot=$CROSS_SYSROOT" \
4043
QEMU_LD_PREFIX="$CROSS_SYSROOT" \
4144
RUST_TEST_THREADS=1 \
42-
PKG_CONFIG_PATH="/usr/lib/aarch64-linux-gnu/pkgconfig/:${PKG_CONFIG_PATH}"
45+
PKG_CONFIG_PATH="/usr/lib/aarch64-linux-gnu/pkgconfig/:${PKG_CONFIG_PATH}" \
46+
CROSS_CMAKE_SYSTEM_NAME=Linux \
47+
CROSS_CMAKE_SYSTEM_PROCESSOR=aarch64 \
48+
CROSS_CMAKE_CRT=gnu \
49+
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,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+
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
CC_aarch64_unknown_linux_gnu="$CROSS_TOOLCHAIN_PREFIX"gcc \
3841
CXX_aarch64_unknown_linux_gnu="$CROSS_TOOLCHAIN_PREFIX"g++ \
42+
CMAKE_TOOLCHAIN_FILE_aarch64_unknown_linux_gnu=/opt/toolchain.cmake \
3943
BINDGEN_EXTRA_CLANG_ARGS_aarch64_unknown_linux_gnu="--sysroot=$CROSS_SYSROOT" \
4044
QEMU_LD_PREFIX="$CROSS_SYSROOT" \
41-
RUST_TEST_THREADS=1
45+
RUST_TEST_THREADS=1 \
46+
CROSS_CMAKE_SYSTEM_NAME=Linux \
47+
CROSS_CMAKE_SYSTEM_PROCESSOR=aarch64 \
48+
CROSS_CMAKE_CRT=gnu \
49+
CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC"

docker/Dockerfile.aarch64-unknown-linux-musl

+11-5
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,21 @@ ENV CROSS_SYSROOT=/usr/local/aarch64-linux-musl
2121
COPY musl-symlink.sh /
2222
RUN /musl-symlink.sh $CROSS_SYSROOT aarch64
2323

24-
COPY aarch64-linux-musl-gcc.sh /usr/bin/
25-
COPY rustc_info.sh /
26-
24+
COPY musl-gcc.sh /usr/bin/"$CROSS_TOOLCHAIN_PREFIX"gcc.sh
2725
COPY qemu-runner base-runner.sh /
26+
COPY toolchain.cmake /opt/toolchain.cmake
2827

28+
ENV CROSS_TARGET_RUNNER="/qemu-runner aarch64"
2929
ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc.sh \
30-
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_RUNNER="/qemu-runner aarch64" \
30+
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_RUNNER="$CROSS_TARGET_RUNNER" \
3131
CC_aarch64_unknown_linux_musl="$CROSS_TOOLCHAIN_PREFIX"gcc \
3232
CXX_aarch64_unknown_linux_musl="$CROSS_TOOLCHAIN_PREFIX"g++ \
33+
CMAKE_TOOLCHAIN_FILE_aarch64_unknown_linux_musl=/opt/toolchain.cmake \
3334
BINDGEN_EXTRA_CLANG_ARGS_aarch64_unknown_linux_musl="--sysroot=$CROSS_SYSROOT" \
3435
QEMU_LD_PREFIX="$CROSS_SYSROOT" \
35-
RUST_TEST_THREADS=1
36+
RUST_TEST_THREADS=1 \
37+
CROSS_CMAKE_SYSTEM_NAME=Linux \
38+
CROSS_CMAKE_SYSTEM_PROCESSOR=aarch64 \
39+
CROSS_CMAKE_CRT=musl \
40+
CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC" \
41+
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="-DANDROID -ffunction-sections -fdata-sections -fPIC"

docker/Dockerfile.arm-unknown-linux-gnueabi

+9-2
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,21 @@ 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
CC_arm_unknown_linux_gnueabi="$CROSS_TOOLCHAIN_PREFIX"gcc \
3234
CXX_arm_unknown_linux_gnueabi="$CROSS_TOOLCHAIN_PREFIX"g++ \
35+
CMAKE_TOOLCHAIN_FILE_arm_unknown_linux_gnueabi=/opt/toolchain.cmake \
3336
BINDGEN_EXTRA_CLANG_ARGS_arm_unknown_linux_gnueabi="--sysroot=$CROSS_SYSROOT" \
3437
QEMU_LD_PREFIX="$CROSS_SYSROOT" \
3538
RUST_TEST_THREADS=1 \
36-
PKG_CONFIG_PATH="/usr/lib/arm-linux-gnueabi/pkgconfig/:${PKG_CONFIG_PATH}"
39+
PKG_CONFIG_PATH="/usr/lib/arm-linux-gnueabi/pkgconfig/:${PKG_CONFIG_PATH}" \
40+
CROSS_CMAKE_SYSTEM_NAME=Linux \
41+
CROSS_CMAKE_SYSTEM_PROCESSOR=arm \
42+
CROSS_CMAKE_CRT=gnu \
43+
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,13 +24,20 @@ 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
CC_arm_unknown_linux_gnueabihf="$CROSS_TOOLCHAIN_PREFIX"gcc \
3335
CXX_arm_unknown_linux_gnueabihf="$CROSS_TOOLCHAIN_PREFIX"g++ \
36+
CMAKE_TOOLCHAIN_FILE_arm_unknown_linux_gnueabihf=/opt/toolchain.cmake \
3437
BINDGEN_EXTRA_CLANG_ARGS_arm_unknown_linux_gnueabihf="--sysroot=$CROSS_SYSROOT" \
3538
QEMU_LD_PREFIX="$CROSS_SYSROOT" \
36-
RUST_TEST_THREADS=1
39+
RUST_TEST_THREADS=1 \
40+
CROSS_CMAKE_SYSTEM_NAME=Linux \
41+
CROSS_CMAKE_SYSTEM_PROCESSOR=arm \
42+
CROSS_CMAKE_CRT=gnu \
43+
CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC -march=armv6 -marm -mfpu=vfp"

docker/Dockerfile.arm-unknown-linux-musleabi

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

2828
COPY qemu-runner base-runner.sh /
29-
3029
COPY musl-gcc.sh /usr/bin/"$CROSS_TOOLCHAIN_PREFIX"gcc.sh
30+
COPY toolchain.cmake /opt/toolchain.cmake
3131

32+
ENV CROSS_TARGET_RUNNER="/qemu-runner arm"
3233
ENV CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABI_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc.sh \
33-
CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABI_RUNNER="/qemu-runner arm" \
34+
CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABI_RUNNER="$CROSS_TARGET_RUNNER" \
3435
CC_arm_unknown_linux_musleabi="$CROSS_TOOLCHAIN_PREFIX"gcc \
3536
CXX_arm_unknown_linux_musleabi="$CROSS_TOOLCHAIN_PREFIX"g++ \
37+
CMAKE_TOOLCHAIN_FILE_arm_unknown_linux_musleabi=/opt/toolchain.cmake \
3638
BINDGEN_EXTRA_CLANG_ARGS_arm_unknown_linux_musleabi="--sysroot=$CROSS_SYSROOT" \
3739
QEMU_LD_PREFIX="$CROSS_SYSROOT" \
38-
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-3
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,19 @@ COPY musl-symlink.sh /
2727
RUN /musl-symlink.sh $CROSS_SYSROOT armhf
2828

2929
COPY qemu-runner base-runner.sh /
30-
3130
COPY musl-gcc.sh /usr/bin/"$CROSS_TOOLCHAIN_PREFIX"gcc.sh
31+
COPY toolchain.cmake /opt/toolchain.cmake
3232

33+
ENV CROSS_TARGET_RUNNER="/qemu-runner armhf"
3334
ENV CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABIHF_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc.sh \
34-
CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABIHF_RUNNER="/qemu-runner armhf" \
35+
CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABIHF_RUNNER="$CROSS_TARGET_RUNNER" \
3536
CC_arm_unknown_linux_musleabihf="$CROSS_TOOLCHAIN_PREFIX"gcc \
3637
CXX_arm_unknown_linux_musleabihf="$CROSS_TOOLCHAIN_PREFIX"g++ \
38+
CMAKE_TOOLCHAIN_FILE_arm_unknown_linux_musleabihf=/opt/toolchain.cmake \
3739
BINDGEN_EXTRA_CLANG_ARGS_arm_unknown_linux_musleabihf="--sysroot=$CROSS_SYSROOT" \
3840
QEMU_LD_PREFIX="$CROSS_SYSROOT" \
39-
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,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-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
CC_armv5te_unknown_linux_gnueabi="$CROSS_TOOLCHAIN_PREFIX"gcc \
3335
CXX_armv5te_unknown_linux_gnueabi="$CROSS_TOOLCHAIN_PREFIX"g++ \
36+
CMAKE_TOOLCHAIN_FILE_armv5te_unknown_linux_gnueabi=/opt/toolchain.cmake \
3437
BINDGEN_EXTRA_CLANG_ARGS_armv5te_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=armv5te -marm -mfloat-abi=soft"

0 commit comments

Comments
 (0)