mirror of
https://github.com/Kitware/CMake.git
synced 2026-04-27 01:19:31 -05:00
macOS: Restore support for LLVM/Clang without explicit CMAKE_OSX_SYSROOT
In commit 7b19531291 (macOS: Do not pass any SDK/-isysroot to compilers
by default, 2024-11-06, v4.0.0-rc1~511^2) we broke support for using
upstream LLVM/Clang to build for macOS because the compiler has no
default sysroot. Handle empty `CMAKE_OSX_SYSROOT` with LLVM/Clang by
falling back to the macOS SDK reported by `xcrun --show-sdk-path` .
Fixes: #26863
This commit is contained in:
@@ -17,6 +17,7 @@ set(CMAKE_C23_COMPILE_FEATURES "@CMAKE_C23_COMPILE_FEATURES@")
|
||||
set(CMAKE_C_PLATFORM_ID "@CMAKE_C_PLATFORM_ID@")
|
||||
set(CMAKE_C_SIMULATE_ID "@CMAKE_C_SIMULATE_ID@")
|
||||
set(CMAKE_C_COMPILER_FRONTEND_VARIANT "@CMAKE_C_COMPILER_FRONTEND_VARIANT@")
|
||||
set(CMAKE_C_COMPILER_APPLE_SYSROOT "@CMAKE_C_COMPILER_APPLE_SYSROOT@")
|
||||
set(CMAKE_C_SIMULATE_VERSION "@CMAKE_C_SIMULATE_VERSION@")
|
||||
@_SET_CMAKE_C_COMPILER_ARCHITECTURE_ID@
|
||||
@_SET_CMAKE_C_COMPILER_SYSROOT@
|
||||
|
||||
@@ -19,6 +19,7 @@ set(CMAKE_CXX26_COMPILE_FEATURES "@CMAKE_CXX26_COMPILE_FEATURES@")
|
||||
set(CMAKE_CXX_PLATFORM_ID "@CMAKE_CXX_PLATFORM_ID@")
|
||||
set(CMAKE_CXX_SIMULATE_ID "@CMAKE_CXX_SIMULATE_ID@")
|
||||
set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "@CMAKE_CXX_COMPILER_FRONTEND_VARIANT@")
|
||||
set(CMAKE_CXX_COMPILER_APPLE_SYSROOT "@CMAKE_CXX_COMPILER_APPLE_SYSROOT@")
|
||||
set(CMAKE_CXX_SIMULATE_VERSION "@CMAKE_CXX_SIMULATE_VERSION@")
|
||||
@_SET_CMAKE_CXX_COMPILER_ARCHITECTURE_ID@
|
||||
@_SET_CMAKE_CXX_COMPILER_SYSROOT@
|
||||
|
||||
@@ -256,6 +256,46 @@ function(CMAKE_DETERMINE_COMPILER_ID lang flagvar src)
|
||||
set(CMAKE_${lang}_CL_SHOWINCLUDES_PREFIX "")
|
||||
endif()
|
||||
|
||||
if(CMAKE_EFFECTIVE_SYSTEM_NAME STREQUAL "Apple" AND CMAKE_${lang}_COMPILER_ID MATCHES "Clang$")
|
||||
cmake_path(GET src EXTENSION LAST_ONLY ext)
|
||||
set(apple_sdk_dir "${CMAKE_${lang}_COMPILER_ID_DIR}")
|
||||
set(apple_sdk_src "apple-sdk${ext}")
|
||||
file(WRITE "${apple_sdk_dir}/${apple_sdk_src}" "#include <AvailabilityMacros.h>\n")
|
||||
set(apple_sdk_cmd
|
||||
"${CMAKE_${lang}_COMPILER}"
|
||||
${CMAKE_${lang}_COMPILER_ID_ARG1}
|
||||
${CMAKE_${lang}_COMPILER_ID_FLAGS_LIST}
|
||||
-E ${apple_sdk_src}
|
||||
)
|
||||
execute_process(
|
||||
COMMAND ${apple_sdk_cmd}
|
||||
WORKING_DIRECTORY ${apple_sdk_dir}
|
||||
OUTPUT_VARIABLE apple_sdk_out
|
||||
ERROR_VARIABLE apple_sdk_out
|
||||
RESULT_VARIABLE apple_sdk_res
|
||||
)
|
||||
string(JOIN "\" \"" apple_sdk_cmd ${apple_sdk_cmd})
|
||||
if(apple_sdk_res EQUAL 0 AND apple_sdk_out MATCHES [["([^"]*)/usr/include/AvailabilityMacros\.h"]])
|
||||
if(CMAKE_MATCH_1)
|
||||
set(CMAKE_${lang}_COMPILER_APPLE_SYSROOT "${CMAKE_MATCH_1}")
|
||||
else()
|
||||
set(CMAKE_${lang}_COMPILER_APPLE_SYSROOT "/")
|
||||
endif()
|
||||
set(apple_sdk_msg "Found apple sysroot: ${CMAKE_${lang}_COMPILER_APPLE_SYSROOT}")
|
||||
else()
|
||||
set(CMAKE_${lang}_COMPILER_APPLE_SYSROOT "")
|
||||
set(apple_sdk_msg "No apple sysroot found.")
|
||||
endif()
|
||||
string(REPLACE "\n" "\n " apple_sdk_out " ${apple_sdk_out}")
|
||||
message(CONFIGURE_LOG
|
||||
"Detecting ${lang} compiler apple sysroot: \"${apple_sdk_cmd}\"\n"
|
||||
"${apple_sdk_out}\n"
|
||||
"${apple_sdk_msg}"
|
||||
)
|
||||
else()
|
||||
set(CMAKE_${lang}_COMPILER_APPLE_SYSROOT "")
|
||||
endif()
|
||||
|
||||
set(_variant "")
|
||||
if("x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xClang"
|
||||
OR "x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xIntelLLVM")
|
||||
@@ -392,6 +432,7 @@ function(CMAKE_DETERMINE_COMPILER_ID lang flagvar src)
|
||||
set(CMAKE_${lang}_COMPILER_PRODUCED_FILES "${COMPILER_${lang}_PRODUCED_FILES}" PARENT_SCOPE)
|
||||
set(CMAKE_${lang}_COMPILER_CLANG_RESOURCE_DIR "${CMAKE_${lang}_COMPILER_CLANG_RESOURCE_DIR}" PARENT_SCOPE)
|
||||
set(CMAKE_${lang}_STANDARD_LIBRARY "${CMAKE_${lang}_STANDARD_LIBRARY}" PARENT_SCOPE)
|
||||
set(CMAKE_${lang}_COMPILER_APPLE_SYSROOT "${CMAKE_${lang}_COMPILER_APPLE_SYSROOT}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
include(CMakeCompilerIdDetection)
|
||||
|
||||
@@ -17,6 +17,7 @@ set(CMAKE_OBJC23_COMPILE_FEATURES "@CMAKE_OBJC23_COMPILE_FEATURES@")
|
||||
set(CMAKE_OBJC_PLATFORM_ID "@CMAKE_OBJC_PLATFORM_ID@")
|
||||
set(CMAKE_OBJC_SIMULATE_ID "@CMAKE_OBJC_SIMULATE_ID@")
|
||||
set(CMAKE_OBJC_COMPILER_FRONTEND_VARIANT "@CMAKE_OBJC_COMPILER_FRONTEND_VARIANT@")
|
||||
set(CMAKE_OBJC_COMPILER_APPLE_SYSROOT "@CMAKE_OBJC_COMPILER_APPLE_SYSROOT@")
|
||||
set(CMAKE_OBJC_SIMULATE_VERSION "@CMAKE_OBJC_SIMULATE_VERSION@")
|
||||
@_SET_CMAKE_OBJC_COMPILER_ARCHITECTURE_ID@
|
||||
@SET_CMAKE_XCODE_ARCHS@
|
||||
|
||||
@@ -18,6 +18,7 @@ set(CMAKE_OBJCXX23_COMPILE_FEATURES "@CMAKE_OBJCXX23_COMPILE_FEATURES@")
|
||||
set(CMAKE_OBJCXX_PLATFORM_ID "@CMAKE_OBJCXX_PLATFORM_ID@")
|
||||
set(CMAKE_OBJCXX_SIMULATE_ID "@CMAKE_OBJCXX_SIMULATE_ID@")
|
||||
set(CMAKE_OBJCXX_COMPILER_FRONTEND_VARIANT "@CMAKE_OBJCXX_COMPILER_FRONTEND_VARIANT@")
|
||||
set(CMAKE_OBJCXX_COMPILER_APPLE_SYSROOT "@CMAKE_OBJCXX_COMPILER_APPLE_SYSROOT@")
|
||||
set(CMAKE_OBJCXX_SIMULATE_VERSION "@CMAKE_OBJCXX_SIMULATE_VERSION@")
|
||||
@_SET_CMAKE_OBJCXX_COMPILER_ARCHITECTURE_ID@
|
||||
@SET_CMAKE_XCODE_ARCHS@
|
||||
|
||||
@@ -26,6 +26,10 @@ macro(__apple_compiler_clang lang)
|
||||
set(CMAKE_${lang}_USING_LINKER_MOLD "-fuse-ld=mold")
|
||||
set(CMAKE_${lang}_USING_LINKER_SOLD "-fuse-ld=sold")
|
||||
|
||||
if(NOT CMAKE_${lang}_COMPILER_APPLE_SYSROOT)
|
||||
set(CMAKE_${lang}_COMPILER_APPLE_SYSROOT_REQUIRED 1)
|
||||
endif()
|
||||
|
||||
if(_CMAKE_OSX_SYSROOT_PATH MATCHES "/iPhoneOS")
|
||||
set(CMAKE_${lang}_OSX_DEPLOYMENT_TARGET_FLAG "-miphoneos-version-min=")
|
||||
elseif(_CMAKE_OSX_SYSROOT_PATH MATCHES "/iPhoneSimulator")
|
||||
|
||||
Reference in New Issue
Block a user