Thread (19 messages) flat view 19 messages, 4 authors, 2d ago

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,
Chewi
quoted
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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help