blob: 72cc490c5a10dbcb9b1cd69feeeaca80268d17e8 [file] [log] [blame]
macro(xcrun_find VARIABLE NAME)
execute_process(COMMAND xcrun ${XCRUN_FLAGS} -f ${NAME}
OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE ${VARIABLE})
endmacro()
macro(xcrun_find_update_cache VARIABLE NAME)
xcrun_find(${VARIABLE} ${NAME})
set(${VARIABLE} "${${VARIABLE}}" CACHE STRING "")
endmacro()
execute_process(COMMAND xcrun ${XCRUN_FLAGS} --show-sdk-path
OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE SDK_PATH)
xcrun_find(LINKER_PATH ld)
get_filename_component(LINKER_DIR ${LINKER_PATH} DIRECTORY)
xcrun_find_update_cache(CMAKE_C_COMPILER clang)
# Note that we do not search CMAKE_CXX_COMPILER to not disturb cmakes
# convenient way to defaulting to xxx/clang++ if the c compiler is xxx/clang.
xcrun_find_update_cache(CMAKE_RANLIB ranlib)
xcrun_find_update_cache(CMAKE_AR ar)
xcrun_find_update_cache(CMAKE_STRIP strip)
xcrun_find_update_cache(CMAKE_NM nm)
xcrun_find_update_cache(CMAKE_LINKER ld)
set(CMAKE_OSX_SYSROOT "${SDK_PATH}" CACHE STRING "")
# Append -B so clang picks up the linker coming with the SDK instead of the
# one in $PATH.
set(TEST_SUITE_ARCH_FLAGS "${TEST_SUITE_ARCH_FLAGS} -B ${LINKER_DIR}" CACHE STRING "")
# The problem with TEST_SUITE_ARCH_FLAGS is that they will not be used when
# cmake is testing for features with try_compile().
#
# This is a work around for this: try_compile() does honor toolchain files which
# can chane CMAKE_C_FLAGS.
#
# Note that CMAKE_TRY_COMPILE_PLATFORM_VARIABLES used by this is only available
# in cmake >=3.6
set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_LIST_DIR}/arch_flags_toolchain.cmake CACHE STRING "")
set(CMAKE_TRY_COMPILE_PLATFORM_VARIABLES "TEST_SUITE_ARCH_FLAGS_FORWARD" CACHE STRING "")
set(TEST_SUITE_ARCH_FLAGS_FORWARD "${TEST_SUITE_ARCH_FLAGS}" CACHE STRING "")