-
Notifications
You must be signed in to change notification settings - Fork 198
Use Rust in the Windows CI jobs #2213
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: js/mingw-build-updates
Are you sure you want to change the base?
Changes from all commits
b6a094d
6754d49
12f6474
ec90274
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -959,7 +959,7 @@ RUST_LIB_NAME = gitcore.lib | |
| else | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Junio C Hamano wrote on the Git mailing list (how to reply to this email): "Johannes Schindelin via GitGitGadget" <gitgitgadget@gmail.com>
writes:
> + ifneq (,$(filter %ARM64, $(MSYSTEM)))
> + HOST_CPU = aarch64
> + else ifneq (,$(filter %32, $(MSYSTEM)))
> + HOST_CPU = i686
> + else
> + HOST_CPU = x86_64
> + endif
> + ifneq (,$(filter CLANG%, $(MSYSTEM)))
> + CARGO_TARGET = $(HOST_CPU)-pc-windows-gnullvm
> + else
> + CARGO_TARGET = $(HOST_CPU)-pc-windows-gnu
> + endif
Assuming HOST_CPU is x86_64 in the above, as UCRT64, unlike
CLANG{ARM64,64,32}, does not match CLANG%, I presume that the above
gives "x86_64-pc-windows-gnu" to builds with MSYSTEM set to UCRT64.
There is this "we only need MINGW64 but the switch to UCRT64 is
imminent, and others are for documentation" part we see in the
[PATCH 2/2]
+ case "$MSYSTEM" in
+ CLANGARM64) target=aarch64-pc-windows-gnullvm ;;
+ CLANG64) target=x86_64-pc-windows-gnullvm ;;
+ CLANG32) target=i686-pc-windows-gnullvm ;;
+ UCRT64) target=x86_64-pc-windows-gnullvm ;;
+ MINGW64) target=x86_64-pc-windows-gnu ;;
+ MINGW32) target=i686-pc-windows-gnu ;;
+ *) echo "::error::Unsupported MSYSTEM: $MSYSTEM"; exit 1 ;;
+ esac &&
+ rustup target add "$target" &&
that maps UCRT64 to "x86_64-pc-windows-gnullvm"
I do not know if it is intended. If so, please ignore.
Thanks.There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Johannes Schindelin wrote on the Git mailing list (how to reply to this email): Hi Junio,
On Tue, 1 Sep 2026, Junio C Hamano wrote:
> "Johannes Schindelin via GitGitGadget" <gitgitgadget@gmail.com>
> writes:
>
> > + ifneq (,$(filter %ARM64, $(MSYSTEM)))
> > + HOST_CPU = aarch64
> > + else ifneq (,$(filter %32, $(MSYSTEM)))
> > + HOST_CPU = i686
> > + else
> > + HOST_CPU = x86_64
> > + endif
> > + ifneq (,$(filter CLANG%, $(MSYSTEM)))
> > + CARGO_TARGET = $(HOST_CPU)-pc-windows-gnullvm
> > + else
> > + CARGO_TARGET = $(HOST_CPU)-pc-windows-gnu
> > + endif
>
> Assuming HOST_CPU is x86_64 in the above, as UCRT64, unlike
> CLANG{ARM64,64,32}, does not match CLANG%, I presume that the above
> gives "x86_64-pc-windows-gnu" to builds with MSYSTEM set to UCRT64.
Correct.
> There is this "we only need MINGW64 but the switch to UCRT64 is
> imminent, and others are for documentation" part we see in the
> [PATCH 2/2]
>
> + case "$MSYSTEM" in
> + CLANGARM64) target=aarch64-pc-windows-gnullvm ;;
> + CLANG64) target=x86_64-pc-windows-gnullvm ;;
> + CLANG32) target=i686-pc-windows-gnullvm ;;
> + UCRT64) target=x86_64-pc-windows-gnullvm ;;
> + MINGW64) target=x86_64-pc-windows-gnu ;;
> + MINGW32) target=i686-pc-windows-gnu ;;
> + *) echo "::error::Unsupported MSYSTEM: $MSYSTEM"; exit 1 ;;
> + esac &&
> + rustup target add "$target" &&
>
> that maps UCRT64 to "x86_64-pc-windows-gnullvm"
>
> I do not know if it is intended. If so, please ignore.
Since UCRT64 is still using GCC, it should be `-gnu`. Thanks for catching.
Ciao,
JohannesThere was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Junio C Hamano wrote on the Git mailing list (how to reply to this email): "Johannes Schindelin via GitGitGadget" <gitgitgadget@gmail.com>
writes:
> @@ -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.
Author: James Le Cuirot <chewi@gentoo.org>
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 <chewi@gentoo.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
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"
fiThere was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. James Le Cuirot wrote on the Git mailing list (how to reply to this email): On Fri, 2026-09-11 at 14:09 -0700, Junio C Hamano wrote:
> "Johannes Schindelin via GitGitGadget" <gitgitgadget@gmail.com>
> writes:
>
> > @@ -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
> Author: James Le Cuirot <chewi@gentoo.org>
> 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 <chewi@gentoo.org>
> Signed-off-by: Junio C Hamano <gitster@pobox.com>
>
> 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 |
||
| 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) | ||
|
|
@@ -993,6 +993,7 @@ endif | |
| ifndef DEBUG | ||
| CARGO_ARGS += --release | ||
| endif | ||
| CARGO_ARGS += $(if $(CARGO_BUILD_TARGET),--target $(CARGO_BUILD_TARGET)) | ||
|
|
||
| # For the 'sparse' target | ||
| SPARSE_FLAGS ?= -std=gnu99 -D__STDC_NO_VLA__ | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
{
Edgar_Manuel_Ruiz_Arias_217596670, title={Edgar Manuel Ruiz Arias mr ed}, journal=