From 7962d0a789a2bfbea52bfbc33d3aacbf1df4d74c Mon Sep 17 00:00:00 2001 From: cebtenzzre Date: Tue, 14 Nov 2023 00:04:01 -0500 Subject: [PATCH] detect linker version instead of compiler version --- CMakeLists.txt | 9 +++++++++ Makefile | 5 +++++ ggml-quants.c | 4 ++-- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7b4eb1840..d36797f6c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -458,6 +458,15 @@ if (LLAMA_LTO) endif() endif() +# this version of Apple ld64 is buggy +execute_process( + COMMAND ${CMAKE_C_COMPILER} ${CMAKE_EXE_LINKER_FLAGS} -Wl,-v + ERROR_VARIABLE output +) +if (output MATCHES "dyld-1015\.7") + add_compile_definitions(-DBUGGY_APPLE_LINKER) +endif() + # Architecture specific # TODO: probably these flags need to be tweaked on some architectures # feel free to update the Makefile for your architecture and send a pull request or issue diff --git a/Makefile b/Makefile index d6be254a0..785060c14 100644 --- a/Makefile +++ b/Makefile @@ -239,6 +239,11 @@ else endif endif +# this version of Apple ld64 is buggy +ifneq '' '$(findstring dyld-1015.7,$(shell $(CC) $(LDFLAGS) -Wl,-v 2>&1))' + MK_CPPFLAGS += -DBUGGY_APPLE_LINKER +endif + # OS specific # TODO: support Windows ifneq '' '$(filter $(UNAME_S),Linux Darwin FreeBSD NetBSD OpenBSD Haiku)' diff --git a/ggml-quants.c b/ggml-quants.c index 720045086..8ea22548a 100644 --- a/ggml-quants.c +++ b/ggml-quants.c @@ -1273,8 +1273,8 @@ static float make_qkx2_quants(int n, int nmax, const float * restrict x, const f float max = x[0]; float sum_w = weights[0]; float sum_x = sum_w * x[0]; -#if defined(__APPLE__) && defined(__clang_major__) && __clang_major__ >= 15 - // use 'volatile' to prevent unroll and work around a bug in Apple clang 15.x.x with -O3 flag +#ifdef BUGGY_APPLE_LINKER + // use 'volatile' to prevent unroll and work around a bug in Apple ld64 1015.7 for (volatile int i = 1; i < n; ++i) { #else for (int i = 1; i < n; ++i) {