diff --git a/ci/test.sh b/ci/test.sh index 474d61a12..d51aee000 100755 --- a/ci/test.sh +++ b/ci/test.sh @@ -71,8 +71,6 @@ main() { popd rm -rf "${td}" - - return fi # `cross build` test for the other targets @@ -166,7 +164,7 @@ main() { fi # Test C++ support - if (( ${CPP:-0} )); then + if (( ${STD:-0} )) && (( ${CPP:-0} )); then td="$(mkcargotemp -d)" git clone --depth 1 https://github.com/cross-rs/rust-cpp-hello-word "${td}" @@ -197,6 +195,22 @@ main() { rm -rf "${td}" fi + + # tst cmake support + td="$(mkcargotemp -d)" + + git clone --depth 1 https://github.com/cross-rs/rust-cmake-hello-world "${td}" + + pushd "${td}" + retry cargo fetch + if (( ${STD:-0} )) && (( ${RUN:-0} )); then + cross_run --target "${TARGET}" + else + "${CROSS[@]}" build --lib --target "${TARGET}" ${CROSS_FLAGS} + fi + popd + + rm -rf "${td}" } cross_run() { diff --git a/docker/Dockerfile.aarch64-linux-android b/docker/Dockerfile.aarch64-linux-android index 8c63e6afc..43629deee 100644 --- a/docker/Dockerfile.aarch64-linux-android +++ b/docker/Dockerfile.aarch64-linux-android @@ -33,28 +33,34 @@ COPY android $PYTHON_TMPDIR RUN /android-system.sh arm64 ENV CROSS_SYSROOT=/android-ndk/sysroot +ENV CROSS_ANDROID_SDK=$ANDROID_SDK +ENV CROSS_ANDROID_ARCH=aarch64 +ENV CROSS_ANDROID_TARGET=aarch64-linux-android COPY android-symlink.sh / -RUN /android-symlink.sh aarch64 aarch64-linux-android +RUN /android-symlink.sh aarch64 $CROSS_ANDROID_TARGET COPY android-runner / +COPY android.cmake /opt/android.cmake +ENV CMAKE_TOOLCHAIN_FILE=/opt/android.cmake + # Libz is distributed in the android ndk, but for some unknown reason it is not # found in the build process of some crates, so we explicit set the DEP_Z_ROOT -ENV CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER=aarch64-linux-android-gcc \ +ENV CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER="$CROSS_ANDROID_TARGET-gcc" \ CARGO_TARGET_AARCH64_LINUX_ANDROID_RUNNER="/android-runner aarch64" \ - AR_aarch64_linux_android=aarch64-linux-android-ar \ - AS_aarch64_linux_android=aarch64-linux-android-as \ - CC_aarch64_linux_android=aarch64-linux-android-gcc \ - CXX_aarch64_linux_android=aarch64-linux-android-g++ \ - LD_aarch64_linux_android=aarch64-linux-android-ld \ - NM_aarch64_linux_android=aarch64-linux-android-nm \ - OBJCOPY_aarch64_linux_android=aarch64-linux-android-objcopy \ - OBJDUMP_aarch64_linux_android=aarch64-linux-android-objdump \ - RANLIB_aarch64_linux_android=aarch64-linux-android-ranlib \ - READELF_aarch64_linux_android=aarch64-linux-android-readelf \ - SIZE_aarch64_linux_android=aarch64-linux-android-size \ - STRINGS_aarch64_linux_android=aarch64-linux-android-strings \ - STRIP_aarch64_linux_android=aarch64-linux-android-strip \ + AR_aarch64_linux_android="$CROSS_ANDROID_TARGET-ar" \ + AS_aarch64_linux_android="$CROSS_ANDROID_TARGET-as" \ + CC_aarch64_linux_android="$CROSS_ANDROID_TARGET-gcc" \ + CXX_aarch64_linux_android="$CROSS_ANDROID_TARGET-g++" \ + LD_aarch64_linux_android="$CROSS_ANDROID_TARGET-ld" \ + NM_aarch64_linux_android="$CROSS_ANDROID_TARGET-nm" \ + OBJCOPY_aarch64_linux_android="$CROSS_ANDROID_TARGET-objcopy" \ + OBJDUMP_aarch64_linux_android="$CROSS_ANDROID_TARGET-objdump" \ + RANLIB_aarch64_linux_android="$CROSS_ANDROID_TARGET-ranlib" \ + READELF_aarch64_linux_android="$CROSS_ANDROID_TARGET-readelf" \ + SIZE_aarch64_linux_android="$CROSS_ANDROID_TARGET-size" \ + STRINGS_aarch64_linux_android="$CROSS_ANDROID_TARGET-strings" \ + STRIP_aarch64_linux_android="$CROSS_ANDROID_TARGET-strip" \ BINDGEN_EXTRA_CLANG_ARGS_aarch64_linux_android="--sysroot=$CROSS_SYSROOT" \ DEP_Z_INCLUDE="$CROSS_SYSROOT/usr/include"/ \ RUST_TEST_THREADS=1 \ diff --git a/docker/Dockerfile.arm-linux-androideabi b/docker/Dockerfile.arm-linux-androideabi index 2951ce5d7..778cbc352 100644 --- a/docker/Dockerfile.arm-linux-androideabi +++ b/docker/Dockerfile.arm-linux-androideabi @@ -33,28 +33,34 @@ COPY android $PYTHON_TMPDIR RUN /android-system.sh arm ENV CROSS_SYSROOT=/android-ndk/sysroot +ENV CROSS_ANDROID_SDK=$ANDROID_SDK +ENV CROSS_ANDROID_ARCH=armv5te +ENV CROSS_ANDROID_TARGET=arm-linux-androideabi COPY android-symlink.sh / -RUN /android-symlink.sh arm arm-linux-androideabi +RUN /android-symlink.sh arm $CROSS_ANDROID_TARGET COPY android-runner / +COPY android.cmake /opt/android.cmake +ENV CMAKE_TOOLCHAIN_FILE=/opt/android.cmake + # Libz is distributed in the android ndk, but for some unknown reason it is not # found in the build process of some crates, so we explicit set the DEP_Z_ROOT -ENV CARGO_TARGET_ARM_LINUX_ANDROIDEABI_LINKER=arm-linux-androideabi-gcc \ +ENV CARGO_TARGET_ARM_LINUX_ANDROIDEABI_LINKER="$CROSS_ANDROID_TARGET-gcc" \ CARGO_TARGET_ARM_LINUX_ANDROIDEABI_RUNNER="/android-runner arm" \ - AR_arm_linux_androideabi=arm-linux-androideabi-ar \ - AS_arm_linux_androideabi=arm-linux-androideabi-as \ - CC_arm_linux_androideabi=arm-linux-androideabi-gcc \ - CXX_arm_linux_androideabi=arm-linux-androideabi-g++ \ - LD_arm_linux_androideabi=arm-linux-androideabi-ld \ - NM_arm_linux_androideabi=arm-linux-androideabi-nm \ - OBJCOPY_arm_linux_androideabi=arm-linux-androideabi-objcopy \ - OBJDUMP_arm_linux_androideabi=arm-linux-androideabi-objdump \ - RANLIB_arm_linux_androideabi=arm-linux-androideabi-ranlib \ - READELF_arm_linux_androideabi=arm-linux-androideabi-readelf \ - SIZE_arm_linux_androideabi=arm-linux-androideabi-size \ - STRINGS_arm_linux_androideabi=arm-linux-androideabi-strings \ - STRIP_arm_linux_androideabi=arm-linux-androideabi-strip \ + AR_arm_linux_androideabi="$CROSS_ANDROID_TARGET-ar" \ + AS_arm_linux_androideabi="$CROSS_ANDROID_TARGET-as" \ + CC_arm_linux_androideabi="$CROSS_ANDROID_TARGET-gcc" \ + CXX_arm_linux_androideabi="$CROSS_ANDROID_TARGET-g++" \ + LD_arm_linux_androideabi="$CROSS_ANDROID_TARGET-ld" \ + NM_arm_linux_androideabi="$CROSS_ANDROID_TARGET-nm" \ + OBJCOPY_arm_linux_androideabi="$CROSS_ANDROID_TARGET-objcopy" \ + OBJDUMP_arm_linux_androideabi="$CROSS_ANDROID_TARGET-objdump" \ + RANLIB_arm_linux_androideabi="$CROSS_ANDROID_TARGET-ranlib" \ + READELF_arm_linux_androideabi="$CROSS_ANDROID_TARGET-readelf" \ + SIZE_arm_linux_androideabi="$CROSS_ANDROID_TARGET-size" \ + STRINGS_arm_linux_androideabi="$CROSS_ANDROID_TARGET-strings" \ + STRIP_arm_linux_androideabi="$CROSS_ANDROID_TARGET-strip" \ BINDGEN_EXTRA_CLANG_ARGS_arm_linux_androideabi="--sysroot=$CROSS_SYSROOT" \ DEP_Z_INCLUDE="$CROSS_SYSROOT/usr/include/" \ RUST_TEST_THREADS=1 \ diff --git a/docker/Dockerfile.armv7-linux-androideabi b/docker/Dockerfile.armv7-linux-androideabi index 87e36ea1e..6848fa964 100644 --- a/docker/Dockerfile.armv7-linux-androideabi +++ b/docker/Dockerfile.armv7-linux-androideabi @@ -33,28 +33,34 @@ COPY android $PYTHON_TMPDIR RUN /android-system.sh arm ENV CROSS_SYSROOT=/android-ndk/sysroot +ENV CROSS_ANDROID_SDK=$ANDROID_SDK +ENV CROSS_ANDROID_ARCH=armv7-a +ENV CROSS_ANDROID_TARGET=arm-linux-androideabi COPY android-symlink.sh / -RUN /android-symlink.sh arm arm-linux-androideabi +RUN /android-symlink.sh arm $CROSS_ANDROID_TARGET COPY android-runner / +COPY android.cmake /opt/android.cmake +ENV CMAKE_TOOLCHAIN_FILE=/opt/android.cmake + # Libz is distributed in the android ndk, but for some unknown reason it is not # found in the build process of some crates, so we explicit set the DEP_Z_ROOT -ENV CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER=arm-linux-androideabi-gcc \ +ENV CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER="$CROSS_ANDROID_TARGET-gcc" \ CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_RUNNER="/android-runner arm" \ - AR_armv7_linux_androideabi=arm-linux-androideabi-ar \ - AS_armv7_linux_androideabi=arm-linux-androideabi-as \ - CC_armv7_linux_androideabi=arm-linux-androideabi-gcc \ - CXX_armv7_linux_androideabi=arm-linux-androideabi-g++ \ - LD_armv7_linux_androideabi=arm-linux-androideabi-ld \ - NM_armv7_linux_androideabi=arm-linux-androideabi-nm \ - OBJCOPY_armv7_linux_androideabi=arm-linux-androideabi-objcopy \ - OBJDUMP_armv7_linux_androideabi=arm-linux-androideabi-objdump \ - RANLIB_armv7_linux_androideabi=arm-linux-androideabi-ranlib \ - READELF_armv7_linux_androideabi=arm-linux-androideabi-readelf \ - SIZE_armv7_linux_androideabi=arm-linux-androideabi-size \ - STRINGS_armv7_linux_androideabi=arm-linux-androideabi-strings \ - STRIP_armv7_linux_androideabi=arm-linux-androideabi-strip \ + AR_armv7_linux_androideabi="$CROSS_ANDROID_TARGET-ar" \ + AS_armv7_linux_androideabi="$CROSS_ANDROID_TARGET-as" \ + CC_armv7_linux_androideabi="$CROSS_ANDROID_TARGET-gcc" \ + CXX_armv7_linux_androideabi="$CROSS_ANDROID_TARGET-g++" \ + LD_armv7_linux_androideabi="$CROSS_ANDROID_TARGET-ld" \ + NM_armv7_linux_androideabi="$CROSS_ANDROID_TARGET-nm" \ + OBJCOPY_armv7_linux_androideabi="$CROSS_ANDROID_TARGET-objcopy" \ + OBJDUMP_armv7_linux_androideabi="$CROSS_ANDROID_TARGET-objdump" \ + RANLIB_armv7_linux_androideabi="$CROSS_ANDROID_TARGET-ranlib" \ + READELF_armv7_linux_androideabi="$CROSS_ANDROID_TARGET-readelf" \ + SIZE_armv7_linux_androideabi="$CROSS_ANDROID_TARGET-size" \ + STRINGS_armv7_linux_androideabi="$CROSS_ANDROID_TARGET-strings" \ + STRIP_armv7_linux_androideabi="$CROSS_ANDROID_TARGET-strip" \ BINDGEN_EXTRA_CLANG_ARGS_armv7_linux_androideabi="--sysroot=$CROSS_SYSROOT" \ DEP_Z_INCLUDE="$CROSS_SYSROOT/usr/include/" \ RUST_TEST_THREADS=1 \ diff --git a/docker/Dockerfile.i686-linux-android b/docker/Dockerfile.i686-linux-android index a9617fce8..176ca08d4 100644 --- a/docker/Dockerfile.i686-linux-android +++ b/docker/Dockerfile.i686-linux-android @@ -41,28 +41,34 @@ COPY android $PYTHON_TMPDIR RUN /android-system.sh x86 ENV CROSS_SYSROOT=/android-ndk/sysroot +ENV CROSS_ANDROID_SDK=$ANDROID_SDK +ENV CROSS_ANDROID_ARCH=i686 +ENV CROSS_ANDROID_TARGET=i686-linux-android COPY android-symlink.sh / -RUN /android-symlink.sh i386 i686-linux-android +RUN /android-symlink.sh i386 $CROSS_ANDROID_TARGET COPY android-runner / +COPY android.cmake /opt/android.cmake +ENV CMAKE_TOOLCHAIN_FILE=/opt/android.cmake + # Libz is distributed in the android ndk, but for some unknown reason it is not # found in the build process of some crates, so we explicit set the DEP_Z_ROOT -ENV CARGO_TARGET_I686_LINUX_ANDROID_LINKER=i686-linux-android-gcc \ +ENV CARGO_TARGET_I686_LINUX_ANDROID_LINKER="$CROSS_ANDROID_TARGET-gcc" \ CARGO_TARGET_I686_LINUX_ANDROID_RUNNER="/android-runner i686" \ - AR_i686_linux_android=i686-linux-android-ar \ - AS_i686_linux_android=i686-linux-android-as \ - CC_i686_linux_android=i686-linux-android-gcc \ - CXX_i686_linux_android=i686-linux-android-g++ \ - LD_i686_linux_android=i686-linux-android-ld \ - NM_i686_linux_android=i686-linux-android-nm \ - OBJCOPY_i686_linux_android=i686-linux-android-objcopy \ - OBJDUMP_i686_linux_android=i686-linux-android-objdump \ - RANLIB_i686_linux_android=i686-linux-android-ranlib \ - READELF_i686_linux_android=i686-linux-android-readelf \ - SIZE_i686_linux_android=i686-linux-android-size \ - STRINGS_i686_linux_android=i686-linux-android-strings \ - STRIP_i686_linux_android=i686-linux-android-strip \ + AR_i686_linux_android="$CROSS_ANDROID_TARGET-ar" \ + AS_i686_linux_android="$CROSS_ANDROID_TARGET-as" \ + CC_i686_linux_android="$CROSS_ANDROID_TARGET-gcc" \ + CXX_i686_linux_android="$CROSS_ANDROID_TARGET-g++" \ + LD_i686_linux_android="$CROSS_ANDROID_TARGET-ld" \ + NM_i686_linux_android="$CROSS_ANDROID_TARGET-nm" \ + OBJCOPY_i686_linux_android="$CROSS_ANDROID_TARGET-objcopy" \ + OBJDUMP_i686_linux_android="$CROSS_ANDROID_TARGET-objdump" \ + RANLIB_i686_linux_android="$CROSS_ANDROID_TARGET-ranlib" \ + READELF_i686_linux_android="$CROSS_ANDROID_TARGET-readelf" \ + SIZE_i686_linux_android="$CROSS_ANDROID_TARGET-size" \ + STRINGS_i686_linux_android="$CROSS_ANDROID_TARGET-strings" \ + STRIP_i686_linux_android="$CROSS_ANDROID_TARGET-strip" \ BINDGEN_EXTRA_CLANG_ARGS_i686_linux_android="--sysroot=$CROSS_SYSROOT" \ DEP_Z_INCLUDE="$CROSS_SYSROOT/usr/include/" \ LIBZ_SYS_STATIC=1 \ diff --git a/docker/Dockerfile.thumbv6m-none-eabi b/docker/Dockerfile.thumbv6m-none-eabi index 95a738c9e..0ab20f9f0 100644 --- a/docker/Dockerfile.thumbv6m-none-eabi +++ b/docker/Dockerfile.thumbv6m-none-eabi @@ -10,14 +10,22 @@ RUN /cmake.sh COPY xargo.sh / RUN /xargo.sh -COPY qemu.sh / RUN apt-get update && apt-get install --assume-yes --no-install-recommends \ gcc-arm-none-eabi \ - libnewlib-arm-none-eabi && \ - /qemu.sh arm + libnewlib-arm-none-eabi \ + libstdc++-arm-none-eabi-newlib + +COPY qemu.sh / +RUN /qemu.sh arm + +COPY newlib.cmake /opt/newlib.cmake +ENV CMAKE_TOOLCHAIN_FILE=/opt/newlib.cmake +ENV CROSS_NEWLIB_OBJECT_FLAGS="-ffunction-sections -fdata-sections -mthumb -march=armv6s-m" -ENV QEMU_CPU=cortex-m3 \ +ENV QEMU_CPU=cortex-m1 \ AR_thumbv6m_none_eabi=arm-none-eabi-ar \ CC_thumbv6m_none_eabi=arm-none-eabi-gcc \ CXX_thumbv6m_none_eabi=arm-none-eabi-g++ \ - CARGO_TARGET_THUMBV6M_NONE_EABI_RUNNER=qemu-arm + CARGO_TARGET_THUMBV6M_NONE_EABI_RUNNER=qemu-arm \ + CROSS_NEWLIB_ARCH=armv6-m \ + CROSS_NEWLIB_TARGET=arm-none-eabi diff --git a/docker/Dockerfile.thumbv7em-none-eabi b/docker/Dockerfile.thumbv7em-none-eabi index 4664c8d2d..2da100753 100644 --- a/docker/Dockerfile.thumbv7em-none-eabi +++ b/docker/Dockerfile.thumbv7em-none-eabi @@ -10,14 +10,22 @@ RUN /cmake.sh COPY xargo.sh / RUN /xargo.sh -COPY qemu.sh / RUN apt-get update && apt-get install --assume-yes --no-install-recommends \ gcc-arm-none-eabi \ - libnewlib-arm-none-eabi && \ - /qemu.sh arm + libnewlib-arm-none-eabi \ + libstdc++-arm-none-eabi-newlib + +COPY qemu.sh / +RUN /qemu.sh arm + +COPY newlib.cmake /opt/newlib.cmake +ENV CMAKE_TOOLCHAIN_FILE=/opt/newlib.cmake +ENV CROSS_NEWLIB_OBJECT_FLAGS="-ffunction-sections -fdata-sections -mthumb -march=armv7e-m" ENV QEMU_CPU=cortex-m4 \ AR_thumbv7em_none_eabi=arm-none-eabi-ar \ CC_thumbv7em_none_eabi=arm-none-eabi-gcc \ CXX_thumbv7em_none_eabi=arm-none-eabi-g++ \ - CARGO_TARGET_THUMBV7EM_NONE_EABI_RUNNER=qemu-arm + CARGO_TARGET_THUMBV7EM_NONE_EABI_RUNNER=qemu-arm \ + CROSS_NEWLIB_ARCH=armv7e-m \ + CROSS_NEWLIB_TARGET=arm-none-eabi diff --git a/docker/Dockerfile.thumbv7em-none-eabihf b/docker/Dockerfile.thumbv7em-none-eabihf index ed9f202ec..ccbfc0f44 100644 --- a/docker/Dockerfile.thumbv7em-none-eabihf +++ b/docker/Dockerfile.thumbv7em-none-eabihf @@ -10,14 +10,22 @@ RUN /cmake.sh COPY xargo.sh / RUN /xargo.sh -COPY qemu.sh / RUN apt-get update && apt-get install --assume-yes --no-install-recommends \ gcc-arm-none-eabi \ - libnewlib-arm-none-eabi && \ - /qemu.sh arm + libnewlib-arm-none-eabi \ + libstdc++-arm-none-eabi-newlib + +COPY qemu.sh / +RUN /qemu.sh arm + +COPY newlib.cmake /opt/newlib.cmake +ENV CMAKE_TOOLCHAIN_FILE=/opt/newlib.cmake +ENV CROSS_NEWLIB_OBJECT_FLAGS="-ffunction-sections -fdata-sections -mthumb -mfloat-abi=hard -march=armv7e-m -mfpu=fpv4-sp-d16" ENV QEMU_CPU=cortex-m4 \ AR_thumbv7em_none_eabihf=arm-none-eabi-ar \ CC_thumbv7em_none_eabihf=arm-none-eabi-gcc \ CXX_thumbv7em_none_eabihf=arm-none-eabi-g++ \ - CARGO_TARGET_THUMBV7EM_NONE_EABIHF_RUNNER=qemu-arm + CARGO_TARGET_THUMBV7EM_NONE_EABIHF_RUNNER=qemu-arm \ + CROSS_NEWLIB_ARCH=armv7e-m \ + CROSS_NEWLIB_TARGET=arm-none-eabi diff --git a/docker/Dockerfile.thumbv7m-none-eabi b/docker/Dockerfile.thumbv7m-none-eabi index cbd469896..21f42c336 100644 --- a/docker/Dockerfile.thumbv7m-none-eabi +++ b/docker/Dockerfile.thumbv7m-none-eabi @@ -10,14 +10,22 @@ RUN /cmake.sh COPY xargo.sh / RUN /xargo.sh -COPY qemu.sh / RUN apt-get update && apt-get install --assume-yes --no-install-recommends \ gcc-arm-none-eabi \ - libnewlib-arm-none-eabi && \ - /qemu.sh arm + libnewlib-arm-none-eabi \ + libstdc++-arm-none-eabi-newlib + +COPY qemu.sh / +RUN /qemu.sh arm + +COPY newlib.cmake /opt/newlib.cmake +ENV CMAKE_TOOLCHAIN_FILE=/opt/newlib.cmake +ENV CROSS_NEWLIB_OBJECT_FLAGS="-ffunction-sections -fdata-sections -mthumb -march=armv7-m" ENV QEMU_CPU=cortex-m3 \ AR_thumbv7m_none_eabi=arm-none-eabi-ar \ CC_thumbv7m_none_eabi=arm-none-eabi-gcc \ CXX_thumbv7m_none_eabi=arm-none-eabi-g++ \ - CARGO_TARGET_THUMBV7M_NONE_EABI_RUNNER=qemu-arm + CARGO_TARGET_THUMBV7M_NONE_EABI_RUNNER=qemu-arm \ + CROSS_NEWLIB_ARCH=armv7-m \ + CROSS_NEWLIB_TARGET=arm-none-eabi diff --git a/docker/Dockerfile.thumbv7neon-linux-androideabi b/docker/Dockerfile.thumbv7neon-linux-androideabi index db2ec1e07..cb0804086 100644 --- a/docker/Dockerfile.thumbv7neon-linux-androideabi +++ b/docker/Dockerfile.thumbv7neon-linux-androideabi @@ -33,31 +33,37 @@ COPY android $PYTHON_TMPDIR RUN /android-system.sh arm ENV CROSS_SYSROOT=/android-ndk/sysroot +ENV CROSS_ANDROID_SDK=$ANDROID_SDK +ENV CROSS_ANDROID_ARCH=armv7-a +ENV CROSS_ANDROID_TARGET=arm-linux-androideabi COPY android-symlink.sh / -RUN /android-symlink.sh arm arm-linux-androideabi +RUN /android-symlink.sh arm $CROSS_ANDROID_TARGET COPY android-runner / +COPY android.cmake /opt/android.cmake +ENV CMAKE_TOOLCHAIN_FILE=/opt/android.cmake + # Libz is distributed in the android ndk, but for some unknown reason it is not # found in the build process of some crates, so we explicit set the DEP_Z_ROOT # likewise, the toolchains expect the prefix `thumbv7neon-linux-androideabi`, # which we don't have, so just export every possible variable, such as AR. # Also export all target binutils just in case required. -ENV CARGO_TARGET_THUMBV7NEON_LINUX_ANDROIDEABI_LINKER=arm-linux-androideabi-gcc \ +ENV CARGO_TARGET_THUMBV7NEON_LINUX_ANDROIDEABI_LINKER="$CROSS_ANDROID_TARGET-gcc" \ CARGO_TARGET_THUMBV7NEON_LINUX_ANDROIDEABI_RUNNER="/android-runner arm" \ - AR_thumbv7neon_linux_androideabi=arm-linux-androideabi-ar \ - AS_thumbv7neon_linux_androideabi=arm-linux-androideabi-as \ - CC_thumbv7neon_linux_androideabi=arm-linux-androideabi-gcc \ - CXX_thumbv7neon_linux_androideabi=arm-linux-androideabi-g++ \ - LD_thumbv7neon_linux_androideabi=arm-linux-androideabi-ld \ - NM_thumbv7neon_linux_androideabi=arm-linux-androideabi-nm \ - OBJCOPY_thumbv7neon_linux_androideabi=arm-linux-androideabi-objcopy \ - OBJDUMP_thumbv7neon_linux_androideabi=arm-linux-androideabi-objdump \ - RANLIB_thumbv7neon_linux_androideabi=arm-linux-androideabi-ranlib \ - READELF_thumbv7neon_linux_androideabi=arm-linux-androideabi-readelf \ - SIZE_thumbv7neon_linux_androideabi=arm-linux-androideabi-size \ - STRINGS_thumbv7neon_linux_androideabi=arm-linux-androideabi-strings \ - STRIP_thumbv7neon_linux_androideabi=arm-linux-androideabi-strip \ + AR_thumbv7neon_linux_androideabi="$CROSS_ANDROID_TARGET-ar" \ + AS_thumbv7neon_linux_androideabi="$CROSS_ANDROID_TARGET-as" \ + CC_thumbv7neon_linux_androideabi="$CROSS_ANDROID_TARGET-gcc" \ + CXX_thumbv7neon_linux_androideabi="$CROSS_ANDROID_TARGET-g++" \ + LD_thumbv7neon_linux_androideabi="$CROSS_ANDROID_TARGET-ld" \ + NM_thumbv7neon_linux_androideabi="$CROSS_ANDROID_TARGET-nm" \ + OBJCOPY_thumbv7neon_linux_androideabi="$CROSS_ANDROID_TARGET-objcopy" \ + OBJDUMP_thumbv7neon_linux_androideabi="$CROSS_ANDROID_TARGET-objdump" \ + RANLIB_thumbv7neon_linux_androideabi="$CROSS_ANDROID_TARGET-ranlib" \ + READELF_thumbv7neon_linux_androideabi="$CROSS_ANDROID_TARGET-readelf" \ + SIZE_thumbv7neon_linux_androideabi="$CROSS_ANDROID_TARGET-size" \ + STRINGS_thumbv7neon_linux_androideabi="$CROSS_ANDROID_TARGET-strings" \ + STRIP_thumbv7neon_linux_androideabi="$CROSS_ANDROID_TARGET-strip" \ BINDGEN_EXTRA_CLANG_ARGS_thumbv7neon_linux_androideabi="--sysroot=$CROSS_SYSROOT" \ DEP_Z_INCLUDE="$CROSS_SYSROOT/usr/include/" \ RUST_TEST_THREADS=1 \ diff --git a/docker/Dockerfile.x86_64-linux-android b/docker/Dockerfile.x86_64-linux-android index 54a74791e..9a466c7e8 100644 --- a/docker/Dockerfile.x86_64-linux-android +++ b/docker/Dockerfile.x86_64-linux-android @@ -34,28 +34,34 @@ COPY android $PYTHON_TMPDIR RUN /android-system.sh x86_64 ENV CROSS_SYSROOT=/android-ndk/sysroot +ENV CROSS_ANDROID_SDK=$ANDROID_SDK +ENV CROSS_ANDROID_ARCH=x86_64 +ENV CROSS_ANDROID_TARGET=x86_64-linux-android COPY android-symlink.sh / -RUN /android-symlink.sh x86_64 x86_64-linux-android +RUN /android-symlink.sh x86_64 $CROSS_ANDROID_TARGET COPY android-runner / +COPY android.cmake /opt/android.cmake +ENV CMAKE_TOOLCHAIN_FILE=/opt/android.cmake + # Libz is distributed in the android ndk, but for some unknown reason it is not # found in the build process of some crates, so we explicit set the DEP_Z_ROOT -ENV CARGO_TARGET_X86_64_LINUX_ANDROID_LINKER=x86_64-linux-android-gcc \ +ENV CARGO_TARGET_X86_64_LINUX_ANDROID_LINKER="$CROSS_ANDROID_TARGET-gcc" \ CARGO_TARGET_X86_64_LINUX_ANDROID_RUNNER="/android-runner x86_64" \ - AR_x86_64_linux_android=x86_64-linux-android-ar \ - AS_x86_64_linux_android=x86_64-linux-android-as \ - CC_x86_64_linux_android=x86_64-linux-android-gcc \ - CXX_x86_64_linux_android=x86_64-linux-android-g++ \ - LD_x86_64_linux_android=x86_64-linux-android-ld \ - NM_x86_64_linux_android=x86_64-linux-android-nm \ - OBJCOPY_x86_64_linux_android=x86_64-linux-android-objcopy \ - OBJDUMP_x86_64_linux_android=x86_64-linux-android-objdump \ - RANLIB_x86_64_linux_android=x86_64-linux-android-ranlib \ - READELF_x86_64_linux_android=x86_64-linux-android-readelf \ - SIZE_x86_64_linux_android=x86_64-linux-android-size \ - STRINGS_x86_64_linux_android=x86_64-linux-android-strings \ - STRIP_x86_64_linux_android=x86_64-linux-android-strip \ + AR_x86_64_linux_android="$CROSS_ANDROID_TARGET-ar" \ + AS_x86_64_linux_android="$CROSS_ANDROID_TARGET-as" \ + CC_x86_64_linux_android="$CROSS_ANDROID_TARGET-gcc" \ + CXX_x86_64_linux_android="$CROSS_ANDROID_TARGET-g++" \ + LD_x86_64_linux_android="$CROSS_ANDROID_TARGET-ld" \ + NM_x86_64_linux_android="$CROSS_ANDROID_TARGET-nm" \ + OBJCOPY_x86_64_linux_android="$CROSS_ANDROID_TARGET-objcopy" \ + OBJDUMP_x86_64_linux_android="$CROSS_ANDROID_TARGET-objdump" \ + RANLIB_x86_64_linux_android="$CROSS_ANDROID_TARGET-ranlib" \ + READELF_x86_64_linux_android="$CROSS_ANDROID_TARGET-readelf" \ + SIZE_x86_64_linux_android="$CROSS_ANDROID_TARGET-size" \ + STRINGS_x86_64_linux_android="$CROSS_ANDROID_TARGET-strings" \ + STRIP_x86_64_linux_android="$CROSS_ANDROID_TARGET-strip" \ BINDGEN_EXTRA_CLANG_ARGS_x86_64_linux_android="--sysroot=$CROSS_SYSROOT" \ DEP_Z_INCLUDE="$CROSS_SYSROOT/usr/include/" \ RUST_TEST_THREADS=1 \ diff --git a/docker/android.cmake b/docker/android.cmake new file mode 100644 index 000000000..0393997d5 --- /dev/null +++ b/docker/android.cmake @@ -0,0 +1,33 @@ +# toolchain file for android targets, see #1110 + +set(CMAKE_SYSTEM_NAME Android) +set(CMAKE_SYSTEM_PROCESSOR "$ENV{CROSS_ANDROID_ARCH}") +set(CMAKE_ANDROID_STANDALONE_TOOLCHAIN /android-ndk) +set(CMAKE_ANDROID_API "$ENV{CROSS_ANDROID_SDK}") + +# not all of these are standard, however, they're common enough +# that it's good practice to define them. +set(prefix "$ENV{CROSS_ANDROID_TARGET}") +set(CMAKE_C_COMPILER "${prefix}-gcc") +set(CMAKE_ASM_COMPILER "${prefix}-gcc") +set(CMAKE_CXX_COMPILER "${prefix}-g++") +set(CMAKE_AR "${prefix}-ar") +set(CMAKE_LINKER "${prefix}-ld") +set(CMAKE_NM "${prefix}-nm") +set(CMAKE_OBJCOPY "${prefix}-objcopy") +set(CMAKE_OBJDUMP "${prefix}-objdump") +set(CMAKE_RANLIB "${prefix}-ranlib") +set(CMAKE_STRIP "${prefix}-strip") + +# required because otherwise it tries to detect compiler features +# from `/android-ndk/bin/clang`, which fails. these macros are +# technically deprecated, but required for proper function +include(CMakeForceCompiler) +set(CMAKE_WARN_DEPRECATED FALSE) +CMAKE_FORCE_C_COMPILER("${CMAKE_C_COMPILER}" GNU) +CMAKE_FORCE_CXX_COMPILER("${CMAKE_CXX_COMPILER}" GNU) + +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH) diff --git a/docker/newlib.cmake b/docker/newlib.cmake new file mode 100644 index 000000000..b6e46c0b2 --- /dev/null +++ b/docker/newlib.cmake @@ -0,0 +1,35 @@ +# toolchain file for newlib targets, see #1110 + +# if we don't set generic, it tries to test the compiler which fails +set(CMAKE_SYSTEM_NAME Generic) +set(CMAKE_SYSTEM_PROCESSOR "$ENV{CROSS_NEWLIB_ARCH}") + +# not all of these are standard, however, they're common enough +# that it's good practice to define them. +set(prefix "$ENV{CROSS_NEWLIB_TARGET}") +set(CMAKE_C_COMPILER "${prefix}-gcc") +set(CMAKE_ASM_COMPILER "${prefix}-gcc") +set(CMAKE_CXX_COMPILER "${prefix}-g++") +set(CMAKE_AR "${prefix}-ar") +set(CMAKE_LINKER "${prefix}-ld") +set(CMAKE_NM "${prefix}-nm") +set(CMAKE_OBJCOPY "${prefix}-objcopy") +set(CMAKE_OBJDUMP "${prefix}-objdump") +set(CMAKE_RANLIB "${prefix}-ranlib") +set(CMAKE_STRIP "${prefix}-strip") + +set(CMAKE_FIND_ROOT_PATH "/usr/lib/${CROSS_NEWLIB_TARGET}" "${CMAKE_PREFIX_PATH}") +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + +# these are cached so any build system that compiled outside of the rust +# build system, such as a third-party cmake build and install of a shared +# library, will still work. however, cmake-rs can override these values +set(CMAKE_C_FLAGS "$ENV{CROSS_NEWLIB_OBJECT_FLAGS}" CACHE INTERNAL "C Compiler options") +set(CMAKE_CXX_FLAGS "$ENV{CROSS_NEWLIB_OBJECT_FLAGS}" CACHE INTERNAL "C++ Compiler options") +set(CMAKE_ASM_FLAGS "$ENV{CROSS_NEWLIB_OBJECT_FLAGS}" CACHE INTERNAL "ASM Compiler options") + +# bare-metal and missing start files, make a static library +set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) diff --git a/targets.toml b/targets.toml index da0bf6331..dde517d52 100644 --- a/targets.toml +++ b/targets.toml @@ -440,22 +440,26 @@ std = true [[target]] target = "thumbv6m-none-eabi" os = "ubuntu-latest" -std = true +cpp = true +std = false [[target]] target = "thumbv7em-none-eabi" os = "ubuntu-latest" -std = true +cpp = true +std = false [[target]] target = "thumbv7em-none-eabihf" os = "ubuntu-latest" -std = true +cpp = true +std = false [[target]] target = "thumbv7m-none-eabi" os = "ubuntu-latest" -std = true +cpp = true +std = false [[target]] target = "cross"