From 102881d9f6c03634920dad15b81b904e387e37e8 Mon Sep 17 00:00:00 2001 From: Alex Huszagh Date: Fri, 30 Sep 2022 13:55:42 -0500 Subject: [PATCH 1/5] Fix tests, linkers, and specifications for various targets. This PR: - Fixes linking to libgcc for `armv5te-unknown-linux-musleabi`. - Adds C++ support for FreeBSD targets by linking to `libstdc++`. - Tests dynamic library support for Android targets in CI. - Tests C++ support for `mips64el-unknown-linux-muslabi64` in CI. - Convert mips64el-unknown-linux-muslabi64 to a hard-float toolchain to match the rust target. - Convert mips64el-unknown-linux-muslabi64 to use the mips64r2 architecture. - Convert mips-unknown-linux-musl and mipsel-unknown-linux-musl to use the mips32r2 architecture, identical to the rust targets. - Document whether MIPS musl targets are hard or soft float. --- .changes/1028.json | 37 +++++++++++++++++++ .../Dockerfile.armv5te-unknown-linux-musleabi | 4 +- docker/Dockerfile.i686-unknown-freebsd | 4 +- docker/Dockerfile.mips-unknown-linux-musl | 2 + .../Dockerfile.mips64-unknown-linux-muslabi64 | 2 + ...ockerfile.mips64el-unknown-linux-muslabi64 | 22 +++++++---- docker/Dockerfile.mipsel-unknown-linux-musl | 4 +- docker/Dockerfile.x86_64-unknown-freebsd | 4 +- docker/i686-unknown-freebsd12-gcc.sh | 17 +++++++++ docker/mips64el-linux-musl-gcc.sh | 20 ++++++++++ docker/x86_64-unknown-freebsd12-gcc.sh | 17 +++++++++ targets.toml | 10 +++++ 12 files changed, 132 insertions(+), 11 deletions(-) create mode 100644 .changes/1028.json create mode 100755 docker/i686-unknown-freebsd12-gcc.sh create mode 100755 docker/mips64el-linux-musl-gcc.sh create mode 100755 docker/x86_64-unknown-freebsd12-gcc.sh diff --git a/.changes/1028.json b/.changes/1028.json new file mode 100644 index 000000000..b7a7dd544 --- /dev/null +++ b/.changes/1028.json @@ -0,0 +1,37 @@ +[ + { + "description": "link to libgcc for armv5te-unknown-linux-musleabi.", + "type": "fixed" + }, + { + "description": "add C++ support for FreeBSD targets.", + "type": "added" + }, + { + "description": "test dynamic library support for Android targets in CI.", + "type": "internal" + }, + { + "description": "test partial C++ support for mips64el-unknown-linux-muslabi64 in CI.", + "type": "internal" + }, + { + "description": "convert mips64el-unknown-linux-muslabi64 to a hard-float toolchain to match the rust target.", + "type": "changed", + "breaking": true + }, + { + "description": "convert mips64el-unknown-linux-muslabi64 to use the mips64r2 architecture, identical to the rust target.", + "type": "changed", + "breaking": true + }, + { + "description": "document whether MIPS musl targets are hard or soft float.", + "type": "internal" + }, + { + "description": "convert mips-unknown-linux-musl and mipsel-unknown-linux-musl to use the mips32r2 architecture, identical to the rust targets.", + "type": "changed", + "breaking": true + } +] diff --git a/docker/Dockerfile.armv5te-unknown-linux-musleabi b/docker/Dockerfile.armv5te-unknown-linux-musleabi index 3d7cb1080..360de0a2b 100644 --- a/docker/Dockerfile.armv5te-unknown-linux-musleabi +++ b/docker/Dockerfile.armv5te-unknown-linux-musleabi @@ -26,7 +26,9 @@ RUN /musl-symlink.sh $CROSS_MUSL_SYSROOT arm COPY qemu-runner base-runner.sh / -ENV CARGO_TARGET_ARMV5TE_UNKNOWN_LINUX_MUSLEABI_LINKER=arm-linux-musleabi-gcc \ +COPY arm-linux-musleabi-gcc.sh /usr/bin/ + +ENV CARGO_TARGET_ARMV5TE_UNKNOWN_LINUX_MUSLEABI_LINKER=arm-linux-musleabi-gcc.sh \ CARGO_TARGET_ARMV5TE_UNKNOWN_LINUX_MUSLEABI_RUNNER="/qemu-runner arm" \ CC_armv5te_unknown_linux_musleabi=arm-linux-musleabi-gcc \ CXX_armv5te_unknown_linux_musleabi=arm-linux-musleabi-g++ \ diff --git a/docker/Dockerfile.i686-unknown-freebsd b/docker/Dockerfile.i686-unknown-freebsd index 2caef209b..b84b874aa 100644 --- a/docker/Dockerfile.i686-unknown-freebsd +++ b/docker/Dockerfile.i686-unknown-freebsd @@ -19,7 +19,9 @@ COPY freebsd-install.sh / COPY freebsd-extras.sh / RUN /freebsd-extras.sh -ENV CARGO_TARGET_I686_UNKNOWN_FREEBSD_LINKER=i686-unknown-freebsd12-gcc \ +COPY i686-unknown-freebsd12-gcc.sh /usr/bin + +ENV CARGO_TARGET_I686_UNKNOWN_FREEBSD_LINKER=i686-unknown-freebsd12-gcc.sh \ CC_i686_unknown_freebsd=i686-unknown-freebsd12-gcc \ CXX_i686_unknown_freebsd=i686-unknown-freebsd12-g++ \ BINDGEN_EXTRA_CLANG_ARGS_i686_unknown_freebsd="--sysroot=/usr/local/i686-unknown-freebsd12" \ diff --git a/docker/Dockerfile.mips-unknown-linux-musl b/docker/Dockerfile.mips-unknown-linux-musl index f722fcc70..a7c4eaaea 100644 --- a/docker/Dockerfile.mips-unknown-linux-musl +++ b/docker/Dockerfile.mips-unknown-linux-musl @@ -13,6 +13,8 @@ RUN /xargo.sh COPY qemu.sh / RUN /qemu.sh mips +# this is a soft-float target for the mips32r2 architecture +# https://github.com/rust-lang/rust/blob/75d3027fb5ce1af6712e4503c9574802212101bd/compiler/rustc_target/src/spec/mips_unknown_linux_musl.rs#L7 COPY musl.sh / RUN /musl.sh \ TARGET=mips-linux-muslsf \ diff --git a/docker/Dockerfile.mips64-unknown-linux-muslabi64 b/docker/Dockerfile.mips64-unknown-linux-muslabi64 index 0385fe9d5..634a4e71d 100644 --- a/docker/Dockerfile.mips64-unknown-linux-muslabi64 +++ b/docker/Dockerfile.mips64-unknown-linux-muslabi64 @@ -12,6 +12,8 @@ RUN /xargo.sh COPY qemu.sh / RUN /qemu.sh mips64 +# this is a hard-float target for the mips64r2 architecture +# https://github.com/rust-lang/rust/blob/75d3027fb5ce1af6712e4503c9574802212101bd/compiler/rustc_target/src/spec/mips64_unknown_linux_muslabi64.rs#L7 COPY musl.sh / RUN /musl.sh \ TARGET=mips64-linux-musl \ diff --git a/docker/Dockerfile.mips64el-unknown-linux-muslabi64 b/docker/Dockerfile.mips64el-unknown-linux-muslabi64 index 579a90dc5..3c51aeffa 100644 --- a/docker/Dockerfile.mips64el-unknown-linux-muslabi64 +++ b/docker/Dockerfile.mips64el-unknown-linux-muslabi64 @@ -12,21 +12,29 @@ RUN /xargo.sh COPY qemu.sh / RUN /qemu.sh mips64el +# this is a hard-float target for the mips64r2 architecture +# https://github.com/rust-lang/rust/blob/75d3027fb5ce1af6712e4503c9574802212101bd/compiler/rustc_target/src/spec/mips64el_unknown_linux_muslabi64.rs#L6 COPY musl.sh / RUN /musl.sh \ - TARGET=mips64el-linux-muslsf \ - "COMMON_CONFIG += -with-arch=mips64" + TARGET=mips64el-linux-musl \ + "COMMON_CONFIG += -with-arch=mips64r2" -ENV CROSS_MUSL_SYSROOT=/usr/local/mips64el-linux-muslsf +ENV CROSS_MUSL_SYSROOT=/usr/local/mips64el-linux-musl COPY musl-symlink.sh / -RUN /musl-symlink.sh $CROSS_MUSL_SYSROOT mips64el-sf +RUN /musl-symlink.sh $CROSS_MUSL_SYSROOT mips64el +RUN mkdir -p $CROSS_MUSL_SYSROOT/usr/lib64 +# needed for the C/C++ runners +RUN ln -s $CROSS_MUSL_SYSROOT/usr/lib/libc.so $CROSS_MUSL_SYSROOT/usr/lib64/libc.so +RUN ln -s $CROSS_MUSL_SYSROOT/usr/lib/libc.so.1 $CROSS_MUSL_SYSROOT/usr/lib64/libc.so.1 + +COPY mips64el-linux-musl-gcc.sh /usr/bin/ COPY qemu-runner base-runner.sh / -ENV CARGO_TARGET_MIPS64EL_UNKNOWN_LINUX_MUSLABI64_LINKER=mips64el-linux-muslsf-gcc \ +ENV CARGO_TARGET_MIPS64EL_UNKNOWN_LINUX_MUSLABI64_LINKER=mips64el-linux-musl-gcc.sh \ CARGO_TARGET_MIPS64EL_UNKNOWN_LINUX_MUSLABI64_RUNNER="/qemu-runner mips64el" \ - CC_mips64el_unknown_linux_muslabi64=mips64el-linux-muslsf-gcc \ - CXX_mips64el_unknown_linux_muslabi64=mips64el-linux-muslsf-g++ \ + CC_mips64el_unknown_linux_muslabi64=mips64el-linux-musl-gcc \ + CXX_mips64el_unknown_linux_muslabi64=mips64el-linux-musl-g++ \ BINDGEN_EXTRA_CLANG_ARGS_mips64el_unknown_linux_muslabi64="--sysroot=$CROSS_MUSL_SYSROOT" \ QEMU_LD_PREFIX=$CROSS_MUSL_SYSROOT \ RUST_TEST_THREADS=1 diff --git a/docker/Dockerfile.mipsel-unknown-linux-musl b/docker/Dockerfile.mipsel-unknown-linux-musl index 1769e78a5..ab34456df 100644 --- a/docker/Dockerfile.mipsel-unknown-linux-musl +++ b/docker/Dockerfile.mipsel-unknown-linux-musl @@ -13,10 +13,12 @@ RUN /xargo.sh COPY qemu.sh / RUN /qemu.sh mipsel +# this is a soft-float target for the mips32r2 architecture +# https://github.com/rust-lang/rust/blob/75d3027fb5ce1af6712e4503c9574802212101bd/compiler/rustc_target/src/spec/mipsel_unknown_linux_musl.rs#L6 COPY musl.sh / RUN /musl.sh \ TARGET=mipsel-linux-muslsf \ - "COMMON_CONFIG += -with-arch=mips32" + "COMMON_CONFIG += -with-arch=mips32r2" ENV CROSS_MUSL_SYSROOT=/usr/local/mipsel-linux-muslsf COPY musl-symlink.sh / diff --git a/docker/Dockerfile.x86_64-unknown-freebsd b/docker/Dockerfile.x86_64-unknown-freebsd index 5863e2ebf..ed901d87f 100644 --- a/docker/Dockerfile.x86_64-unknown-freebsd +++ b/docker/Dockerfile.x86_64-unknown-freebsd @@ -19,7 +19,9 @@ COPY freebsd-install.sh / COPY freebsd-extras.sh / RUN /freebsd-extras.sh -ENV CARGO_TARGET_X86_64_UNKNOWN_FREEBSD_LINKER=x86_64-unknown-freebsd12-gcc \ +COPY x86_64-unknown-freebsd12-gcc.sh /usr/bin + +ENV CARGO_TARGET_X86_64_UNKNOWN_FREEBSD_LINKER=x86_64-unknown-freebsd12-gcc.sh \ CC_x86_64_unknown_freebsd=x86_64-unknown-freebsd12-gcc \ CXX_x86_64_unknown_freebsd=x86_64-unknown-freebsd12-g++ \ BINDGEN_EXTRA_CLANG_ARGS_x86_64_unknown_freebsd="--sysroot=/usr/local/x86_64-unknown-freebsd12" \ diff --git a/docker/i686-unknown-freebsd12-gcc.sh b/docker/i686-unknown-freebsd12-gcc.sh new file mode 100755 index 000000000..edaee38df --- /dev/null +++ b/docker/i686-unknown-freebsd12-gcc.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +# the freebsd images need libstdc++ to be linked as well +# otherwise, we get `undefined reference to `std::ios_base::Init::Init()'` + +set -x +set -euo pipefail + +main() { + if [[ $# -eq 0 ]]; then + exec i686-unknown-freebsd12-gcc "${@}" + else + exec i686-unknown-freebsd12-gcc "${@}" -lc++ -lstdc++ + fi +} + +main "${@}" diff --git a/docker/mips64el-linux-musl-gcc.sh b/docker/mips64el-linux-musl-gcc.sh new file mode 100755 index 000000000..edbf088d8 --- /dev/null +++ b/docker/mips64el-linux-musl-gcc.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# this linker wrapper works around the missing soft-fp routine __trunctfsf2 +# this affects rust versions with compiler-builtins <= 0.1.77, +# which has not yet been merged into stable. this requires the `-lgcc` +# linker flag to provide the missing builtin. +# https://github.com/rust-lang/compiler-builtins/pull/483 + +set -x +set -euo pipefail + +main() { + if [[ $# -eq 0 ]]; then + exec mips64el-linux-musl-gcc "${@}" + else + exec mips64el-linux-musl-gcc "${@}" -lgcc -static-libgcc + fi +} + +main "${@}" diff --git a/docker/x86_64-unknown-freebsd12-gcc.sh b/docker/x86_64-unknown-freebsd12-gcc.sh new file mode 100755 index 000000000..77ed6ee40 --- /dev/null +++ b/docker/x86_64-unknown-freebsd12-gcc.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +# the freebsd images need libstdc++ to be linked as well +# otherwise, we get `undefined reference to `std::ios_base::Init::Init()'` + +set -x +set -euo pipefail + +main() { + if [[ $# -eq 0 ]]; then + exec x86_64-unknown-freebsd12-gcc "${@}" + else + exec x86_64-unknown-freebsd12-gcc "${@}" -lc++ -lstdc++ + fi +} + +main "${@}" diff --git a/targets.toml b/targets.toml index 3184adf86..01502f89e 100644 --- a/targets.toml +++ b/targets.toml @@ -157,6 +157,8 @@ run = true [[target]] target = "mips64el-unknown-linux-muslabi64" os = "ubuntu-latest" +# FIXME: Lacking partial C++ support due to missing compiler builtins. +cpp = true std = true run = true @@ -191,6 +193,7 @@ runners = "qemu-user qemu-system" target = "riscv64gc-unknown-linux-gnu" os = "ubuntu-latest" cpp = true +dylib = true std = true run = true runners = "qemu-user qemu-system" @@ -309,6 +312,7 @@ run = true target = "aarch64-linux-android" os = "ubuntu-latest" cpp = true +dylib = true std = true run = true @@ -316,6 +320,7 @@ run = true target = "arm-linux-androideabi" os = "ubuntu-latest" cpp = true +dylib = true std = true run = true @@ -323,6 +328,7 @@ run = true target = "armv7-linux-androideabi" os = "ubuntu-latest" cpp = true +dylib = true std = true run = true @@ -337,6 +343,7 @@ run = true target = "i686-linux-android" os = "ubuntu-latest" cpp = true +dylib = true std = true run = true @@ -344,6 +351,7 @@ run = true target = "x86_64-linux-android" os = "ubuntu-latest" cpp = true +dylib = true std = true run = true @@ -387,12 +395,14 @@ build-std = true [[target]] target = "i686-unknown-freebsd" os = "ubuntu-latest" +cpp = true dylib = true std = true [[target]] target = "x86_64-unknown-freebsd" os = "ubuntu-latest" +cpp = true dylib = true std = true From 187b6915e8e252129e726f3f567c49b4737ebc53 Mon Sep 17 00:00:00 2001 From: Alex Huszagh Date: Sat, 1 Oct 2022 08:51:42 -0500 Subject: [PATCH 2/5] Remove changelog for MIPS hard/soft float documentation. --- .changes/1028.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.changes/1028.json b/.changes/1028.json index b7a7dd544..61d1aaac9 100644 --- a/.changes/1028.json +++ b/.changes/1028.json @@ -25,10 +25,6 @@ "type": "changed", "breaking": true }, - { - "description": "document whether MIPS musl targets are hard or soft float.", - "type": "internal" - }, { "description": "convert mips-unknown-linux-musl and mipsel-unknown-linux-musl to use the mips32r2 architecture, identical to the rust targets.", "type": "changed", From 9311417f7d251103c21f547aa341e643f08a5fd8 Mon Sep 17 00:00:00 2001 From: Alex Huszagh Date: Sun, 2 Oct 2022 09:38:44 -0500 Subject: [PATCH 3/5] Add rustc versions to docker environment variables. --- docker/aarch64-linux-musl-gcc.sh | 8 +------- docker/arm-linux-musleabi-gcc.sh | 4 ++-- docker/mips64-linux-musl-gcc.sh | 4 ++-- docker/mips64el-linux-musl-gcc.sh | 4 ++-- src/docker/local.rs | 9 +-------- src/docker/remote.rs | 9 +-------- src/docker/shared.rs | 32 +++++++++++++++++++++++++------ src/lib.rs | 9 ++++++--- 8 files changed, 41 insertions(+), 38 deletions(-) diff --git a/docker/aarch64-linux-musl-gcc.sh b/docker/aarch64-linux-musl-gcc.sh index 868c8d628..570f5e42e 100755 --- a/docker/aarch64-linux-musl-gcc.sh +++ b/docker/aarch64-linux-musl-gcc.sh @@ -8,13 +8,7 @@ set -x set -euo pipefail main() { - local release= - release=$(rustc -Vv | grep '^release:' | cut -d ':' -f2) - # NOTE we assume `major` is always "1" - local minor= - minor=$(echo "$release" | cut -d '.' -f2) - - if (( minor >= 48 )) || [[ $# -eq 0 ]]; then + if (( CROSS_RUSTC_MINOR_VERSION >= 48 )) || [[ $# -eq 0 ]]; then # no workaround exec aarch64-linux-musl-gcc "${@}" else diff --git a/docker/arm-linux-musleabi-gcc.sh b/docker/arm-linux-musleabi-gcc.sh index c52b60b65..5575432a9 100755 --- a/docker/arm-linux-musleabi-gcc.sh +++ b/docker/arm-linux-musleabi-gcc.sh @@ -2,7 +2,7 @@ # this linker wrapper works around the missing sync `sync_X_and_fetch` # routines. this affects rust versions with compiler-builtins <= 0.1.77, -# which has not yet been merged into stable. this requires the `-lgcc` +# which affects toolchains older than 1.65 which require the `-lgcc` # linker flag to provide the missing builtin. # https://github.com/rust-lang/compiler-builtins/pull/484 @@ -10,7 +10,7 @@ set -x set -euo pipefail main() { - if [[ $# -eq 0 ]]; then + if (( CROSS_RUSTC_MINOR_VERSION >= 65 )) || [[ $# -eq 0 ]]; then exec arm-linux-musleabi-gcc "${@}" else exec arm-linux-musleabi-gcc "${@}" -lgcc -static-libgcc diff --git a/docker/mips64-linux-musl-gcc.sh b/docker/mips64-linux-musl-gcc.sh index 80358a7a4..85ce44e7d 100755 --- a/docker/mips64-linux-musl-gcc.sh +++ b/docker/mips64-linux-musl-gcc.sh @@ -2,7 +2,7 @@ # this linker wrapper works around the missing soft-fp routine __trunctfsf2 # this affects rust versions with compiler-builtins <= 0.1.77, -# which has not yet been merged into stable. this requires the `-lgcc` +# which affects toolchains older than 1.65 which require the `-lgcc` # linker flag to provide the missing builtin. # https://github.com/rust-lang/compiler-builtins/pull/483 @@ -10,7 +10,7 @@ set -x set -euo pipefail main() { - if [[ $# -eq 0 ]]; then + if (( CROSS_RUSTC_MINOR_VERSION >= 65 )) || [[ $# -eq 0 ]]; then exec mips64-linux-musl-gcc "${@}" else exec mips64-linux-musl-gcc "${@}" -lgcc -static-libgcc diff --git a/docker/mips64el-linux-musl-gcc.sh b/docker/mips64el-linux-musl-gcc.sh index edbf088d8..c3edb5f6d 100755 --- a/docker/mips64el-linux-musl-gcc.sh +++ b/docker/mips64el-linux-musl-gcc.sh @@ -2,7 +2,7 @@ # this linker wrapper works around the missing soft-fp routine __trunctfsf2 # this affects rust versions with compiler-builtins <= 0.1.77, -# which has not yet been merged into stable. this requires the `-lgcc` +# which affects toolchains older than 1.65 which require the `-lgcc` # linker flag to provide the missing builtin. # https://github.com/rust-lang/compiler-builtins/pull/483 @@ -10,7 +10,7 @@ set -x set -euo pipefail main() { - if [[ $# -eq 0 ]]; then + if (( CROSS_RUSTC_MINOR_VERSION >= 65 )) || [[ $# -eq 0 ]]; then exec mips64el-linux-musl-gcc "${@}" else exec mips64el-linux-musl-gcc "${@}" -lgcc -static-libgcc diff --git a/src/docker/local.rs b/src/docker/local.rs index 688de149c..a59e8628e 100644 --- a/src/docker/local.rs +++ b/src/docker/local.rs @@ -38,14 +38,7 @@ pub(crate) fn run( .image .platform .specify_platform(&options.engine, &mut docker); - docker_envvars( - &mut docker, - &options.config, - dirs, - &options.target, - options.cargo_variant, - msg_info, - )?; + docker_envvars(&mut docker, &options, dirs, msg_info)?; docker_mount( &mut docker, diff --git a/src/docker/remote.rs b/src/docker/remote.rs index 225095657..55860d674 100644 --- a/src/docker/remote.rs +++ b/src/docker/remote.rs @@ -1209,14 +1209,7 @@ symlink_recurse \"${{prefix}}\" // 6. execute our cargo command inside the container let mut docker = subcommand(engine, "exec"); docker_user_id(&mut docker, engine.kind); - docker_envvars( - &mut docker, - &options.config, - dirs, - target, - options.cargo_variant, - msg_info, - )?; + docker_envvars(&mut docker, &options, dirs, msg_info)?; docker_cwd(&mut docker, &paths)?; docker.arg(&container); docker.args(["sh", "-c", &build_command(dirs, &cmd)]); diff --git a/src/docker/shared.rs b/src/docker/shared.rs index 8ad202525..cb41d3a0d 100644 --- a/src/docker/shared.rs +++ b/src/docker/shared.rs @@ -18,6 +18,8 @@ use crate::rustc::QualifiedToolchain; use crate::shell::{MessageInfo, Verbosity}; use crate::{CargoVariant, Target}; +use rustc_version::Version as RustcVersion; + pub use super::custom::CROSS_CUSTOM_DOCKERFILE_IMAGE_PREFIX; pub const CROSS_IMAGE: &str = "ghcr.io/cross-rs"; @@ -37,6 +39,8 @@ pub struct DockerOptions { pub config: Config, pub image: Image, pub cargo_variant: CargoVariant, + // not all toolchains will provide this + pub rustc_version: Option, } impl DockerOptions { @@ -46,6 +50,7 @@ impl DockerOptions { config: Config, image: Image, cargo_variant: CargoVariant, + rustc_version: Option, ) -> DockerOptions { DockerOptions { engine, @@ -53,6 +58,7 @@ impl DockerOptions { config, image, cargo_variant, + rustc_version, } } @@ -514,13 +520,15 @@ fn add_cargo_configuration_envvars(docker: &mut Command) { pub(crate) fn docker_envvars( docker: &mut Command, - config: &Config, + options: &DockerOptions, dirs: &Directories, - target: &Target, - cargo_variant: CargoVariant, msg_info: &mut MessageInfo, ) -> Result<()> { - for ref var in config.env_passthrough(target)?.unwrap_or_default() { + for ref var in options + .config + .env_passthrough(&options.target)? + .unwrap_or_default() + { validate_env_var(var)?; // Only specifying the environment variable name in the "-e" @@ -528,7 +536,7 @@ pub(crate) fn docker_envvars( docker.args(["-e", var]); } - let runner = config.runner(target)?; + let runner = options.config.runner(&options.target)?; let cross_runner = format!("CROSS_RUNNER={}", runner.unwrap_or_default()); docker .args(["-e", "PKG_CONFIG_ALLOW_CROSS=1"]) @@ -536,7 +544,7 @@ pub(crate) fn docker_envvars( .args(["-e", &format!("CARGO_HOME={}", dirs.cargo_mount_path())]) .args(["-e", "CARGO_TARGET_DIR=/target"]) .args(["-e", &cross_runner]); - if cargo_variant.uses_zig() { + if options.cargo_variant.uses_zig() { // otherwise, zig has a permission error trying to create the cache docker.args(["-e", "XDG_CACHE_HOME=/target/.zig-cache"]); } @@ -564,6 +572,18 @@ pub(crate) fn docker_envvars( docker.args(&parse_docker_opts(&value)?); }; + let (major, minor, patch) = match options.rustc_version.as_ref() { + Some(version) => (version.major, version.minor, version.patch), + // no toolchain version available, always provide older + // compiler available. this isn't a major issue because + // linking will libgcc will not include symbols found in + // the builtins. + None => (1, 0, 0), + }; + docker.args(["-e", &format!("CROSS_RUSTC_MAJOR_VERSION={}", major)]); + docker.args(["-e", &format!("CROSS_RUSTC_MINOR_VERSION={}", minor)]); + docker.args(["-e", &format!("CROSS_RUSTC_PATCH_VERSION={}", patch)]); + Ok(()) } diff --git a/src/lib.rs b/src/lib.rs index 76071fb5f..ea647a147 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -595,17 +595,19 @@ To override the toolchain mounted in the image, set `target.{}.image.toolchain = } }; - if let Some((rustc_version, channel, rustc_commit)) = toolchain.rustc_version()? { + let mut rustc_version = None; + if let Some((version, channel, commit)) = toolchain.rustc_version()? { if toolchain.date.is_none() { warn_host_version_mismatch( &host_version_meta, &toolchain, - &rustc_version, - &rustc_commit, + &version, + &commit, msg_info, )?; } is_nightly = channel == Channel::Nightly; + rustc_version = Some(version); } let uses_build_std = config.build_std(&target).unwrap_or(false); @@ -711,6 +713,7 @@ To override the toolchain mounted in the image, set `target.{}.image.toolchain = config, image, cargo_variant, + rustc_version, ); let status = docker::run(options, paths, &filtered_args, msg_info) .wrap_err("could not run container")?; From 2184474ee012afd0c4a4cbd70ae08a07fd304a3b Mon Sep 17 00:00:00 2001 From: Alex Huszagh Date: Sun, 2 Oct 2022 09:50:41 -0500 Subject: [PATCH 4/5] Minor grammatical fix in comment. I am good at English. --- src/docker/shared.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/docker/shared.rs b/src/docker/shared.rs index cb41d3a0d..f9cfb15a3 100644 --- a/src/docker/shared.rs +++ b/src/docker/shared.rs @@ -574,7 +574,7 @@ pub(crate) fn docker_envvars( let (major, minor, patch) = match options.rustc_version.as_ref() { Some(version) => (version.major, version.minor, version.patch), - // no toolchain version available, always provide older + // no toolchain version available, always provide the oldest // compiler available. this isn't a major issue because // linking will libgcc will not include symbols found in // the builtins. From 6101ba4dee20db97a76dab9b6e99fc7e6306611c Mon Sep 17 00:00:00 2001 From: Alexander Huszagh Date: Sun, 2 Oct 2022 10:13:13 -0500 Subject: [PATCH 5/5] Update src/docker/shared.rs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix comment. Co-authored-by: Emil Gardström --- src/docker/shared.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/docker/shared.rs b/src/docker/shared.rs index f9cfb15a3..3101216a0 100644 --- a/src/docker/shared.rs +++ b/src/docker/shared.rs @@ -576,7 +576,7 @@ pub(crate) fn docker_envvars( Some(version) => (version.major, version.minor, version.patch), // no toolchain version available, always provide the oldest // compiler available. this isn't a major issue because - // linking will libgcc will not include symbols found in + // linking with libgcc will not include symbols found in // the builtins. None => (1, 0, 0), };