diff --git a/CMakeLists.txt b/CMakeLists.txt index fbbeff379cd..2a9f0aedc22 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,47 +19,6 @@ if(NOT CMAKE_SYSTEM_NAME MATCHES "Windows") endif() if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - # find appropriate macosx SDK and set SDKROOT - if(NOT DEFINED ENV{SDKROOT}) - # arm64: macosx11.x - # x86_64: macosx10.x, macosx11.x - if(${CMAKE_HOST_SYSTEM_PROCESSOR} MATCHES "arm64") - set(MACOSX_SDK_REGEX "MacOSX11(\\.\\d+)?") - else() - set(MACOSX_SDK_REGEX "MacOSX1[01](\\.\\d+)?") - endif() - exec_program(xcrun ARGS --show-sdk-path OUTPUT_VARIABLE MACOSX_SDK_PATH) - get_filename_component(MACOSX_SDK_PATH ${MACOSX_SDK_PATH} DIRECTORY) - file(GLOB ALL_SDK_NAME RELATIVE ${MACOSX_SDK_PATH} ${MACOSX_SDK_PATH}/*) - # get highest SDK version meets the requirements - execute_process( - COMMAND bash -c "echo '${ALL_SDK_NAME}' | grep -Eo '${MACOSX_SDK_REGEX}' | sort -n | tail -1 | tr -d '\\n'" - OUTPUT_VARIABLE MACOSX_FIND_SDK_NAME - ) - if(NOT MACOSX_FIND_SDK_NAME) - message(FATAL_ERROR "can not find appropriate macosx SDK, you may need upgrade xcode") - endif() - set(ENV{SDKROOT} "${MACOSX_SDK_PATH}/${MACOSX_FIND_SDK_NAME}.sdk") - endif() - message("macosx sdkroot: $ENV{SDKROOT}") - # set macosx deployment target based on SDK - if(NOT DEFINED ENV{MACOSX_DEPLOYMENT_TARGET}) - execute_process( - COMMAND bash -c "cat $ENV{SDKROOT}/SDKSettings.json | \ - grep -Eo 'MACOSX_DEPLOYMENT_TARGET\\\":\\\"\\d{2}\\.\\d+' | cut -d '\"' -f 3 | tr -d '\\n'" - OUTPUT_VARIABLE MACOSX_FIND_SDK_VERSION - ) - if(NOT MACOSX_FIND_SDK_VERSION) - message(FATAL_ERROR "can not find MACOSX_DEPLOYMENT_TARGET in SDKROOT, \ - please check whether it's a valid SDK path") - endif() - set(CMAKE_OSX_DEPLOYMENT_TARGET ${MACOSX_FIND_SDK_VERSION} CACHE STRING - "minimum macosx deployment target version" FORCE) - if(${CMAKE_HOST_SYSTEM_PROCESSOR} MATCHES "arm64") - set(CMAKE_OSX_DEPLOYMENT_TARGET "11.0") - endif() - endif() - message("macosx deployment target version: ${CMAKE_OSX_DEPLOYMENT_TARGET}") set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O2 -Winconsistent-missing-override -Wno-user-defined-warnings \ -Wno-return-std-move -Wno-unused-private-field -Wno-unused-lambda-capture -Wno-sign-compare \ -Wno-overloaded-virtual -Wno-unneeded-internal-declaration -Wno-unused-variable -Wno-pessimizing-move \ diff --git a/cmake/check_requirements.cmake b/cmake/check_requirements.cmake index a4c41fe3bb2..b842e699ddf 100644 --- a/cmake/check_requirements.cmake +++ b/cmake/check_requirements.cmake @@ -84,3 +84,58 @@ if(NOT CMAKE_SYSTEM_NAME MATCHES "Windows") find_required_package(FLEX) endif() endif() + +# for macos, find appropriate macosx SDK then set SDKROOT and MACOSX_DEPLOYMENT_TARGET +if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + if(NOT DEFINED ENV{SDKROOT}) + # arm64: macosx11.x + # x86_64: macosx10.x, macosx11.x + if(${CMAKE_HOST_SYSTEM_PROCESSOR} MATCHES "arm64") + set(MACOSX_SDK_REGEX "MacOSX11(\\.\\d+)?") + else() + set(MACOSX_SDK_REGEX "MacOSX1[01](\\.\\d+)?") + endif() + set(MACOSX_XCODE_SDK_PATH "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs") + set(MACOSX_CLT_SDK_PATH "/Library/Developer/CommandLineTools/SDKs") + set(MACOSX_SDK_SEARCH_PATHS "${MACOSX_XCODE_SDK_PATH}/*" "${MACOSX_CLT_SDK_PATH}/*") + file(GLOB ALL_SDK_NAME ${MACOSX_SDK_SEARCH_PATHS}) + # get highest SDK version meets the requirements + execute_process( + COMMAND bash -c "echo '${ALL_SDK_NAME}' | grep -Eo '${MACOSX_SDK_REGEX}' | sort -n | tail -1 | tr -d '\\n'" + OUTPUT_VARIABLE MACOSX_FIND_SDK_NAME + ) + if(NOT MACOSX_FIND_SDK_NAME) + message(FATAL_ERROR + "can not find appropriate macosx SDK, find in ${ALL_SDK_NAME}, you may set SDKROOT manually" + ) + endif() + if(IS_DIRECTORY "${MACOSX_XCODE_SDK_PATH}/${MACOSX_FIND_SDK_NAME}.sdk") + set(ENV{SDKROOT} "${MACOSX_XCODE_SDK_PATH}/${MACOSX_FIND_SDK_NAME}.sdk") + else() + set(ENV{SDKROOT} "${MACOSX_CLT_SDK_PATH}/${MACOSX_FIND_SDK_NAME}.sdk") + endif() + endif() + message("macosx sdkroot: $ENV{SDKROOT}") + # set macosx deployment target based on SDK + if(NOT DEFINED ENV{MACOSX_DEPLOYMENT_TARGET}) + execute_process( + COMMAND bash -c "cat $ENV{SDKROOT}/SDKSettings.json | \ + grep -Eo 'MACOSX_DEPLOYMENT_TARGET\\\":\\\"\\d{2}\\.\\d+' | cut -d '\"' -f 3 | tr -d '\\n'" + OUTPUT_VARIABLE MACOSX_FIND_SDK_VERSION + ) + if(NOT MACOSX_FIND_SDK_VERSION) + message(FATAL_ERROR "can not find MACOSX_DEPLOYMENT_TARGET in SDKROOT, \ + please check whether it's a valid SDK path") + endif() + + if(${CMAKE_HOST_SYSTEM_PROCESSOR} MATCHES "arm64") + set(CMAKE_OSX_DEPLOYMENT_TARGET "11.0") + elseif(${MACOSX_FIND_SDK_VERSION} VERSION_LESS "10.15") + set(CMAKE_OSX_DEPLOYMENT_TARGET ${MACOSX_FIND_SDK_VERSION} CACHE STRING + "minimum macosx deployment target version" FORCE) + else() + set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15") + endif() + endif() + message("macosx deployment target version: ${CMAKE_OSX_DEPLOYMENT_TARGET}") +endif()