Skip to content

Commit 047eb57

Browse files
authored
set QEMU_LD_PREFIX in the runners in order to be able to use env -i (#1420)
I'm working on making assert_cmd working with cross. There is one case a bit more difficult: when using `clear_env()` on a process, or `env -i`, the binary is not able to run anymore because the `QEMU_LD_PREFIX` envvar is not set anymore. A (relatively) easy fix might be to ensure in `linux-runner` — and in any other runner — that the necessary environment is configured before running the executable. Something as proposed in this PR for `aarch64-unknown-linux-gnu`. Would that be an acceptable solution? assert-rs/assert_cmd#193
2 parents ed73ace + 0beab02 commit 047eb57

File tree

43 files changed

+121
-3
lines changed

Some content is hidden

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

43 files changed

+121
-3
lines changed

.changes/1420.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"description": "set the required environment variables in the runner",
3+
"type": "fixed"
4+
}

ci/test.sh

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,38 @@ main() {
243243
popd
244244

245245
rm -rf "${td}"
246+
247+
# test running binaries with cleared environment
248+
# Command is not implemented for wasm32-unknown-emscripten
249+
if (( ${RUN:-0} )) && [[ "${TARGET}" != "wasm32-unknown-emscripten" ]]; then
250+
td="$(mkcargotemp -d)"
251+
pushd "${td}"
252+
cargo init --bin --name foo .
253+
mkdir src/bin
254+
upper_target=$(echo "${TARGET}" | tr '[:lower:]' '[:upper:]' | tr '-' '_')
255+
cat <<EOF > src/bin/launch.rs
256+
fn main() {
257+
let runner = std::env::var("CARGO_TARGET_${upper_target}_RUNNER");
258+
let mut command = if let Ok(runner) = runner {
259+
runner.split(' ').map(str::to_string).collect()
260+
} else {
261+
vec![]
262+
};
263+
let executable = format!("/target/${TARGET}/debug/foo{}", std::env::consts::EXE_SUFFIX);
264+
command.push(executable.to_string());
265+
let status = dbg!(std::process::Command::new(&command[0])
266+
.args(&command[1..])
267+
.env_clear()) // drop all environment variables
268+
.status()
269+
.unwrap();
270+
std::process::exit(status.code().unwrap());
271+
}
272+
EOF
273+
cross_build --target "${TARGET}"
274+
cross_run --target "${TARGET}" --bin launch
275+
popd
276+
rm -rf "${td}"
277+
fi
246278
}
247279

248280
cross_build() {

docker/Dockerfile.aarch64-unknown-linux-gnu

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,3 +51,5 @@ ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
5151
CROSS_CMAKE_SYSTEM_PROCESSOR=aarch64 \
5252
CROSS_CMAKE_CRT=gnu \
5353
CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC"
54+
55+
RUN sed -e "s#@DEFAULT_QEMU_LD_PREFIX@#$QEMU_LD_PREFIX#g" -i /linux-runner

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,5 @@ ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
4646
CROSS_CMAKE_SYSTEM_PROCESSOR=aarch64 \
4747
CROSS_CMAKE_CRT=gnu \
4848
CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC"
49+
50+
RUN sed -e "s#@DEFAULT_QEMU_LD_PREFIX@#$QEMU_LD_PREFIX#g" -i /linux-runner

docker/Dockerfile.aarch64-unknown-linux-musl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,5 @@ ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc.
4242
CROSS_CMAKE_CRT=musl \
4343
CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC" \
4444
CROSS_BUILTINS_PATCHED_MINOR_VERSION=48
45+
46+
RUN sed -e "s#@DEFAULT_QEMU_LD_PREFIX@#$QEMU_LD_PREFIX#g" -i /qemu-runner

docker/Dockerfile.arm-unknown-linux-gnueabi

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,5 @@ ENV CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABI_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
4545
CROSS_CMAKE_SYSTEM_PROCESSOR=arm \
4646
CROSS_CMAKE_CRT=gnu \
4747
CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC -march=armv6 -marm -mfloat-abi=soft"
48+
49+
RUN sed -e "s#@DEFAULT_QEMU_LD_PREFIX@#$QEMU_LD_PREFIX#g" -i /qemu-runner

docker/Dockerfile.arm-unknown-linux-gnueabihf

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,5 @@ ENV CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABIHF_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc
4646
CROSS_CMAKE_SYSTEM_PROCESSOR=arm \
4747
CROSS_CMAKE_CRT=gnu \
4848
CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC -march=armv6 -marm -mfpu=vfp"
49+
50+
RUN sed -e "s#@DEFAULT_QEMU_LD_PREFIX@#$QEMU_LD_PREFIX#g" -i /qemu-runner

docker/Dockerfile.arm-unknown-linux-musleabi

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,5 @@ ENV CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABI_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc
4444
CROSS_CMAKE_SYSTEM_PROCESSOR=arm \
4545
CROSS_CMAKE_CRT=musl \
4646
CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC -march=armv6 -marm -mfloat-abi=soft"
47+
48+
RUN sed -e "s#@DEFAULT_QEMU_LD_PREFIX@#$QEMU_LD_PREFIX#g" -i /qemu-runner

docker/Dockerfile.arm-unknown-linux-musleabihf

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,5 @@ ENV CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABIHF_LINKER="$CROSS_TOOLCHAIN_PREFIX"gc
4545
CROSS_CMAKE_SYSTEM_PROCESSOR=arm \
4646
CROSS_CMAKE_CRT=musl \
4747
CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC -march=armv6 -marm -mfpu=vfp"
48+
49+
RUN sed -e "s#@DEFAULT_QEMU_LD_PREFIX@#$QEMU_LD_PREFIX#g" -i /qemu-runner

docker/Dockerfile.armv5te-unknown-linux-gnueabi

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,5 @@ ENV CARGO_TARGET_ARMV5TE_UNKNOWN_LINUX_GNUEABI_LINKER="$CROSS_TOOLCHAIN_PREFIX"g
4646
CROSS_CMAKE_SYSTEM_PROCESSOR=arm \
4747
CROSS_CMAKE_CRT=gnu \
4848
CROSS_CMAKE_OBJECT_FLAGS="-ffunction-sections -fdata-sections -fPIC -march=armv5te -marm -mfloat-abi=soft"
49+
50+
RUN sed -e "s#@DEFAULT_QEMU_LD_PREFIX@#$QEMU_LD_PREFIX#g" -i /qemu-runner

0 commit comments

Comments
 (0)