Files
CMake/Tests/RunCMake/AppleSDK/RunCMakeTest.cmake
Brad King bf1bb62e74 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
2025-05-02 13:49:40 -04:00

48 lines
1.4 KiB
CMake

include(RunCMake)
# Isolate from caller's environment.
unset(ENV{CMAKE_OSX_ARCHITECTURES})
unset(ENV{CMAKE_OSX_DEPLOYMENT_TARGET})
unset(ENV{SDKROOT})
function(run_xcode_cc)
set(RunCMake_TEST_VARIANT_DESCRIPTION "-xcode")
if(EXISTS "/usr/include/AvailabilityMacros.h")
run_cmake(SDK)
else()
run_cmake(NoSDK)
endif()
endfunction()
if(RunCMake_GENERATOR STREQUAL "Xcode")
run_xcode_cc()
else()
set(system_cc "/usr/bin/cc")
set(system_cxx "/usr/bin/c++")
if(EXISTS "${system_cc}" AND EXISTS "${system_cxx}")
set(ENV{CC} "${system_cc}")
set(ENV{CXX} "${system_cxx}")
set(ENV{OBJC} "${system_cc}")
set(ENV{OBJCXX} "${system_cxx}")
set(RunCMake_TEST_VARIANT_DESCRIPTION "-system")
run_cmake(SDK)
endif()
execute_process(COMMAND xcrun --find cc OUTPUT_VARIABLE xcode_cc OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND xcrun --find c++ OUTPUT_VARIABLE xcode_cxx OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND xcrun --show-sdk-path OUTPUT_VARIABLE xcode_sdk OUTPUT_STRIP_TRAILING_WHITESPACE)
if(EXISTS "${xcode_cc}" AND EXISTS "${xcode_cxx}")
set(ENV{CC} "${xcode_cc}")
set(ENV{CXX} "${xcode_cxx}")
set(ENV{OBJC} "${xcode_cc}")
set(ENV{OBJCXX} "${xcode_cxx}")
run_xcode_cc()
if(EXISTS "${xcode_sdk}")
set(RunCMake_TEST_VARIANT_DESCRIPTION "-xcode-SDKROOT")
set(ENV{SDKROOT} "${xcode_sdk}")
run_cmake(SDK)
unset(ENV{SDKROOT})
endif()
endif()
endif()