aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2025-05-05 14:56:24 -0700
committerJunio C Hamano <gitster@pobox.com>2025-05-05 14:56:24 -0700
commitb50795db7969712ef937906d548fe9eb58cb9fb5 (patch)
treeaf44dbda9c227254aea1e7cd656a95362adbd6c6
parent6c0bd1fc70efaf053abe4e57c976afdc72d15377 (diff)
parent436a42215e51fa2f8b74d128472d7d9bfe2595e1 (diff)
downloadgit-b50795db7969712ef937906d548fe9eb58cb9fb5.tar.gz
Merge branch 'js/windows-arm64'
Update to arm64 Windows port. * js/windows-arm64: max_tree_depth: lower it for clangarm64 on Windows mingw(arm64): do move the `/etc/git*` location msvc: do handle builds on Windows/ARM64 mingw: do not use nedmalloc on Windows/ARM64 config.mak.uname: add support for clangarm64 bswap.h: add support for built-in bswap functions
-rw-r--r--compat/bswap.h14
-rw-r--r--config.mak.uname18
-rw-r--r--environment.c10
3 files changed, 37 insertions, 5 deletions
diff --git a/compat/bswap.h b/compat/bswap.h
index b34054f2bd..9e0f98e00b 100644
--- a/compat/bswap.h
+++ b/compat/bswap.h
@@ -35,7 +35,19 @@ static inline uint64_t default_bswap64(uint64_t val)
#undef bswap32
#undef bswap64
-#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
+/**
+ * __has_builtin is available since Clang 10 and GCC 10.
+ * Below is a fallback for older compilers.
+ */
+#ifndef __has_builtin
+ #define __has_builtin(x) 0
+#endif
+
+#if __has_builtin(__builtin_bswap32) && __has_builtin(__builtin_bswap64)
+#define bswap32(x) __builtin_bswap32((x))
+#define bswap64(x) __builtin_bswap64((x))
+
+#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
#define bswap32 git_bswap32
static inline uint32_t git_bswap32(uint32_t x)
diff --git a/config.mak.uname b/config.mak.uname
index db22a8fb31..df172d5871 100644
--- a/config.mak.uname
+++ b/config.mak.uname
@@ -439,7 +439,11 @@ ifeq ($(uname_S),Windows)
ifeq (MINGW32,$(MSYSTEM))
prefix = /mingw32
else
- prefix = /mingw64
+ ifeq (CLANGARM64,$(MSYSTEM))
+ prefix = /clangarm64
+ else
+ prefix = /mingw64
+ endif
endif
# Prepend MSVC 64-bit tool-chain to PATH.
#
@@ -492,7 +496,7 @@ ifeq ($(uname_S),Windows)
NO_POSIX_GOODIES = UnfortunatelyYes
NATIVE_CRLF = YesPlease
DEFAULT_HELP_FORMAT = html
-ifeq (/mingw64,$(subst 32,64,$(prefix)))
+ifeq (/mingw64,$(subst 32,64,$(subst clangarm,mingw,$(prefix))))
# Move system config into top-level /etc/
ETC_GITCONFIG = ../etc/gitconfig
ETC_GITATTRIBUTES = ../etc/gitattributes
@@ -731,6 +735,10 @@ ifeq ($(uname_S),MINGW)
prefix = /mingw64
HOST_CPU = x86_64
BASIC_LDFLAGS += -Wl,--pic-executable,-e,mainCRTStartup
+ else ifeq (CLANGARM64,$(MSYSTEM))
+ prefix = /clangarm64
+ HOST_CPU = aarch64
+ BASIC_LDFLAGS += -Wl,--pic-executable,-e,mainCRTStartup
else
COMPAT_CFLAGS += -D_USE_32BIT_TIME_T
BASIC_LDFLAGS += -Wl,--large-address-aware
@@ -745,8 +753,10 @@ ifeq ($(uname_S),MINGW)
HAVE_LIBCHARSET_H = YesPlease
USE_GETTEXT_SCHEME = fallthrough
USE_LIBPCRE = YesPlease
- USE_NED_ALLOCATOR = YesPlease
- ifeq (/mingw64,$(subst 32,64,$(prefix)))
+ ifneq (CLANGARM64,$(MSYSTEM))
+ USE_NED_ALLOCATOR = YesPlease
+ endif
+ ifeq (/mingw64,$(subst 32,64,$(subst clangarm,mingw,$(prefix))))
# Move system config into top-level /etc/
ETC_GITCONFIG = ../etc/gitconfig
ETC_GITATTRIBUTES = ../etc/gitattributes
diff --git a/environment.c b/environment.c
index 970a407753..c61d773e7e 100644
--- a/environment.c
+++ b/environment.c
@@ -81,6 +81,16 @@ int max_allowed_tree_depth =
* the stack overflow can occur.
*/
512;
+#elif defined(GIT_WINDOWS_NATIVE) && defined(__clang__) && defined(__aarch64__)
+ /*
+ * Similar to Visual C, it seems that on Windows/ARM64 the clang-based
+ * builds have a smaller stack space available. When running out of
+ * that stack space, a `STATUS_STACK_OVERFLOW` is produced. When the
+ * Git command was run from an MSYS2 Bash, this unfortunately results
+ * in an exit code 127. Let's prevent that by lowering the maximal
+ * tree depth; This value seems to be low enough.
+ */
+ 1280;
#else
2048;
#endif