Re: [PATCH v2 1/2] rust: pick a GCC-compatible Cargo target under MSYS2/MinGW
From: Johannes Schindelin <hidden>
Date: 2026-09-13 10:30:17
Hi Junio & James, On Fri, 11 Sep 2026, James Le Cuirot wrote:
On Fri, 2026-09-11 at 14:09 -0700, Junio C Hamano wrote:quoted
"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.
Sure.
quoted
Thanks.Yes, without explicitly setting --target at all.
Cool! My first experiment failed because I missed that Makefile does not automatically export `CARGO_BUILD_TARGET`... 🤦 But now that I explicitly export it, it works as you claimed it would. Thank you! Johannes
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, Chewiquoted
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