Re: [PATCH v2 1/2] rust: pick a GCC-compatible Cargo target under MSYS2/MinGW
From: James Le Cuirot <hidden>
Date: 2026-09-11 22:26:21
On Fri, 2026-09-11 at 14:09 -0700, Junio C Hamano wrote:
"Johannes Schindelin via GitGitGadget" [off-list ref] writes:quoted
@@ -993,6 +993,7 @@ endif ifndef DEBUG CARGO_ARGS += --release endif +CARGO_ARGS += $(if $(CARGO_TARGET),--target $(CARGO_TARGET))Should this use CARGO_BUILD_TARGET (instead of CARGO_TARGET) to match what the officially supported Cargo environment variable is called? It would also help us work better with the changes from the jc/rust-cargo-build-target topic. Thanks.
Yes, without explicitly setting --target at all. This is how Gentoo Linux supports cross-compiling of its Rust packages. Just avoid setting CARGO_BUILD_TARGET (or passing --target) when you're not cross-compiling. It will cause Cargo to behave differently, even if you give the native tuple. For example, RUSTFLAGS is normally applied to both the build host binaries and the target host binaries, but when an explicit target is set, RUSTFLAGS is only applied to the target host binaries. Regards, Chewi
quoted hunk ↗ jump to hunk
Author: James Le Cuirot [off-list ref] Date: Thu Sep 10 11:20:14 2026 +0100 rust: respect CARGO_BUILD_TARGET when locating build output When cross-compiling, Cargo always writes to a target-tuple subdirectory determined by CARGO_BUILD_TARGET, even when it matches the native tuple. The build looked in $BUILD_DIR/$BUILD_TYPE directly, so it failed to locate the freshly built library. Respect CARGO_BUILD_TARGET in the output path so the correct artifact is located. Signed-off-by: James Le Cuirot [off-list ref] Signed-off-by: Junio C Hamano [off-list ref]diff --git a/Makefile b/Makefile index d4b775953d..f0ca2e4f72 100644 --- a/Makefile +++ b/Makefile@@ -959,7 +959,7 @@ RUST_LIB_NAME = gitcore.lib else RUST_LIB_NAME = libgitcore.a endif -RUST_LIB = target/$(RUST_BUILD_CONFIG)/$(RUST_LIB_NAME) +RUST_LIB = target/$(if $(CARGO_BUILD_TARGET),$(CARGO_BUILD_TARGET)/)$(RUST_BUILD_CONFIG)/$(RUST_LIB_NAME) endif GITLIBS = common-main.o $(LIB_FILE)diff --git a/src/cargo-meson.sh b/src/cargo-meson.sh index 75f3cd1265..83c7e7b79b 100755 --- a/src/cargo-meson.sh +++ b/src/cargo-meson.sh@@ -38,7 +38,7 @@ then exit $RET fi -if ! cmp "$BUILD_DIR/$BUILD_TYPE/$LIBNAME" "$BUILD_DIR/libgitcore.a" >/dev/null 2>&1 +if ! cmp "$BUILD_DIR/${CARGO_BUILD_TARGET:+$CARGO_BUILD_TARGET/}$BUILD_TYPE/$LIBNAME" "$BUILD_DIR/libgitcore.a" >/dev/null 2>&1 then - cp "$BUILD_DIR/$BUILD_TYPE/$LIBNAME" "$BUILD_DIR/libgitcore.a" + cp "$BUILD_DIR/${CARGO_BUILD_TARGET:+$CARGO_BUILD_TARGET/}$BUILD_TYPE/$LIBNAME" "$BUILD_DIR/libgitcore.a" fi
Attachments
- signature.asc [application/pgp-signature] 423 bytes