From b4ca1ba192fe068310344d7fcdb4def80875f699 Mon Sep 17 00:00:00 2001 From: DRC Date: Thu, 12 Dec 2024 15:39:26 -0500 Subject: [PATCH] Build: Fix float test errors with Xcode 14.2/Arm Unlike other versions of Clang 14.0.0, AppleClang 14.0.0 in Xcode 14.2 retains the old -ffp-contract=off default. Apple didn't adopt -ffp-contract=on as the default until Xcode 14.3 (AppleClang 14.0.3.) This has been confirmed in the Xcode 14.3 release notes. --- CMakeLists.txt | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ebc10909..8a1562f6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -935,8 +935,14 @@ if(CPU_TYPE STREQUAL "x86_64" OR CPU_TYPE STREQUAL "i386") endif() elseif(CPU_TYPE STREQUAL "powerpc" OR CPU_TYPE STREQUAL "arm64") if(CMAKE_C_COMPILER_ID MATCHES "Clang") - if(CMAKE_C_COMPILER_VERSION VERSION_EQUAL 14.0.0 OR - CMAKE_C_COMPILER_VERSION VERSION_GREATER 14.0.0) + if(CMAKE_C_COMPILER_ID MATCHES "AppleClang") + # Xcode 14.3 and later + set(MIN_FP_CONTRACT_VERSION 14.0.1) + else() + set(MIN_FP_CONTRACT_VERSION 14.0.0) + endif() + if(CMAKE_C_COMPILER_VERSION VERSION_EQUAL ${MIN_FP_CONTRACT_VERSION} OR + CMAKE_C_COMPILER_VERSION VERSION_GREATER ${MIN_FP_CONTRACT_VERSION}) set(DEFAULT_FLOATTEST8 fp-contract) else() set(DEFAULT_FLOATTEST8 no-fp-contract) @@ -977,8 +983,14 @@ if(CPU_TYPE STREQUAL "x86_64") set(DEFAULT_FLOATTEST12 no-fp-contract) elseif(CPU_TYPE STREQUAL "powerpc" OR CPU_TYPE STREQUAL "arm64") if(CMAKE_C_COMPILER_ID MATCHES "Clang") - if(CMAKE_C_COMPILER_VERSION VERSION_EQUAL 14.0.0 OR - CMAKE_C_COMPILER_VERSION VERSION_GREATER 14.0.0) + if(CMAKE_C_COMPILER_ID MATCHES "AppleClang") + # Xcode 14.3 and later + set(MIN_FP_CONTRACT_VERSION 14.0.1) + else() + set(MIN_FP_CONTRACT_VERSION 14.0.0) + endif() + if(CMAKE_C_COMPILER_VERSION VERSION_EQUAL ${MIN_FP_CONTRACT_VERSION} OR + CMAKE_C_COMPILER_VERSION VERSION_GREATER ${MIN_FP_CONTRACT_VERSION}) set(DEFAULT_FLOATTEST12 fp-contract) else() set(DEFAULT_FLOATTEST12 no-fp-contract)