From: Hajin Jang Date: Sun, 10 Sep 2023 09:28:28 +0000 (+0900) Subject: Support llvm-mingw toolchain X-Git-Tag: 2.1.4~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f9228d8475100d280f416d4ce606d3d56d2a8708;p=thirdparty%2Fzlib-ng.git Support llvm-mingw toolchain zlib-ng requires some patches to make it compilable on LLVM-mingw. 1. Add -Wno-pedantic-ms-format only if a toolchain is MinGW GCC. - llvm-mingw does not support it, causing build to break. 2. Include arm_neon.h instead of arm64_neon.h (aarch64 only). - arm64_neon.h is MSVC only. - GCC, Clang does not have arm64_neon.h but arm_neon.h on aarch64. - Also applied to configure and detect-instrinsics.cmake --- diff --git a/CMakeLists.txt b/CMakeLists.txt index b7dc46be..6b53e8c8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -239,7 +239,11 @@ elseif(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang") endif() endif() if(MINGW) - list(APPEND WARNFLAGS_DISABLE -Wno-pedantic-ms-format) + # Add `-Wno-pedantic-ms-format` only if the toolchain is GCC MinGW-w64 + # llvm-mingw does not support '-Wno-pedantic-ms-format' + if(CMAKE_C_COMPILER_ID MATCHES "GNU") + list(APPEND WARNFLAGS_DISABLE -Wno-pedantic-ms-format) + endif() endif() endif() diff --git a/arch/arm/neon_intrins.h b/arch/arm/neon_intrins.h index 478697a6..51df77db 100644 --- a/arch/arm/neon_intrins.h +++ b/arch/arm/neon_intrins.h @@ -1,7 +1,8 @@ #ifndef ARM_NEON_INTRINS_H #define ARM_NEON_INTRINS_H -#if defined(_M_ARM64) || defined(_M_ARM64EC) +#if defined(_MSC_VER) && (defined(_M_ARM64) || defined(_M_ARM64EC)) +/* arm64_neon.h is MSVC specific */ # include #else # include diff --git a/cmake/detect-intrinsics.cmake b/cmake/detect-intrinsics.cmake index fe1848e6..250ee44e 100644 --- a/cmake/detect-intrinsics.cmake +++ b/cmake/detect-intrinsics.cmake @@ -222,7 +222,7 @@ macro(check_neon_ld4_intrinsics) # Check whether compiler supports loading 4 neon vecs into a register range set(CMAKE_REQUIRED_FLAGS "${NEONFLAG}") check_c_source_compiles( - "#if defined(_M_ARM64) || defined(_M_ARM64EC) + "#if defined(_MSC_VER) && (defined(_M_ARM64) || defined(_M_ARM64EC)) # include #else # include diff --git a/configure b/configure index 29de72ce..a660a17e 100755 --- a/configure +++ b/configure @@ -1164,7 +1164,7 @@ EOF check_neon_ld4_intrinsics() { cat > $test.c << EOF -#if defined(_M_ARM64) || defined(_M_ARM64EC) +#if defined(_MSC_VER) && (defined(_M_ARM64) || defined(_M_ARM64EC)) # include #else # include