1## define customized find functions, print customized error messages 2function(find_required_package pkg_name) 3 find_package(${pkg_name}) 4 if(NOT ${pkg_name}_FOUND) 5 message(FATAL_ERROR "Required package ${pkg_name} not found, " 6 "please install the package and try building MindSpore again.") 7 endif() 8endfunction() 9 10function(find_required_program prog_name) 11 find_program(${prog_name}_EXE ${prog_name}) 12 if(NOT ${prog_name}_EXE) 13 message(FATAL_ERROR "Required program ${prog_name} not found, " 14 "please install the package and try building MindSpore again.") 15 endif() 16endfunction() 17 18 19## find python, quit if the found python is static 20if(CMAKE_SYSTEM_NAME MATCHES "Windows") 21 set(Python3_FIND_REGISTRY LAST) 22 set(Python3_FIND_STRATEGY LOCATION) 23endif() 24set(Python3_USE_STATIC_LIBS FALSE) 25set(Python3_FIND_VIRTUALENV ONLY) 26find_package(Python3 COMPONENTS Interpreter Development) 27if(Python3_FOUND) 28 message("Python3 found, version: ${Python3_VERSION}") 29 message("Python3 library path: ${Python3_LIBRARY}") 30 message("Python3 interpreter: ${Python3_EXECUTABLE}") 31elseif(Python3_LIBRARY AND Python3_EXECUTABLE AND 32 ${Python3_VERSION} VERSION_GREATER_EQUAL "3.7.0" AND ${Python3_VERSION} VERSION_LESS "3.10.15") 33 message(WARNING "Maybe python3 environment is broken.") 34 message("Python3 library path: ${Python3_LIBRARY}") 35 message("Python3 interpreter: ${Python3_EXECUTABLE}") 36else() 37 message(FATAL_ERROR "Python3 not found, please install Python>=3.7.5, and set --enable-shared " 38 "if you are building Python locally") 39endif() 40 41## packages used both on windows and linux 42if(DEFINED ENV{MS_PATCH_PATH}) 43 find_program(Patch_EXECUTABLE patch PATHS $ENV{MS_PATCH_PATH}) 44 set(Patch_FOUND ${Patch_EXECUTABLE}) 45else() 46 find_package(Patch) 47endif() 48if(NOT Patch_FOUND) 49 message(FATAL_ERROR "Patch not found, " 50 "please set environment variable MS_PATCH_PATH to path where Patch is located, " 51 "usually found in GIT_PATH/usr/bin on Windows") 52endif() 53message(PATCH_EXECUTABLE = ${Patch_EXECUTABLE}) 54 55find_required_package(Threads) 56 57# add openmp if the onednn use ms threadpool 58if(USE_MS_THREADPOOL_FOR_DNNL) 59 find_package(OpenMP) 60 # compiler `clang` on Darwin does not support option `-fopenmp` 61 if(OPENMP_FOUND AND (NOT CMAKE_SYSTEM_NAME MATCHES "Darwin")) 62 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp") 63 else() 64 message(WARNING "OpenMP not found") 65 endif() 66endif() 67 68## packages used on Linux 69if(NOT CMAKE_SYSTEM_NAME MATCHES "Windows") 70 if(ENABLE_MINDDATA) 71 find_required_program(tclsh) 72 endif() 73 74 ## packages used in GPU mode only 75 if(ENABLE_GPU) 76 find_required_program(automake) 77 find_required_program(autoconf) 78 find_required_program(libtoolize) 79 find_required_package(FLEX) 80 endif() 81endif() 82 83# for macos, find appropriate macosx SDK then set SDKROOT and MACOSX_DEPLOYMENT_TARGET 84if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") 85 if(NOT DEFINED ENV{SDKROOT}) 86 # arm64: macosx11.x 87 # x86_64: macosx10.x, macosx11.x 88 if(${CMAKE_HOST_SYSTEM_PROCESSOR} MATCHES "arm64") 89 set(MACOSX_SDK_REGEX "MacOSX11(\\.\\d+)?") 90 else() 91 set(MACOSX_SDK_REGEX "MacOSX1[01](\\.\\d+)?") 92 endif() 93 set(MACOSX_XCODE_SDK_PATH "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs") 94 set(MACOSX_CLT_SDK_PATH "/Library/Developer/CommandLineTools/SDKs") 95 set(MACOSX_SDK_SEARCH_PATHS "${MACOSX_XCODE_SDK_PATH}/*" "${MACOSX_CLT_SDK_PATH}/*") 96 file(GLOB ALL_SDK_NAME ${MACOSX_SDK_SEARCH_PATHS}) 97 # get highest SDK version meets the requirements 98 execute_process( 99 COMMAND bash -c "echo '${ALL_SDK_NAME}' | grep -Eo '${MACOSX_SDK_REGEX}' | sort -n | tail -1 | tr -d '\\n'" 100 OUTPUT_VARIABLE MACOSX_FIND_SDK_NAME 101 ) 102 if(NOT MACOSX_FIND_SDK_NAME) 103 message(FATAL_ERROR 104 "can not find appropriate macosx SDK, find in ${ALL_SDK_NAME}, you may set SDKROOT manually" 105 ) 106 endif() 107 if(IS_DIRECTORY "${MACOSX_XCODE_SDK_PATH}/${MACOSX_FIND_SDK_NAME}.sdk") 108 set(CMAKE_OSX_SYSROOT "${MACOSX_XCODE_SDK_PATH}/${MACOSX_FIND_SDK_NAME}.sdk") 109 else() 110 set(CMAKE_OSX_SYSROOT "${MACOSX_CLT_SDK_PATH}/${MACOSX_FIND_SDK_NAME}.sdk") 111 endif() 112 set(ENV{SDKROOT} ${CMAKE_OSX_SYSROOT}) 113 endif() 114 message("macosx sdkroot: $ENV{SDKROOT}") 115 # set macosx deployment target based on SDK 116 if(NOT DEFINED ENV{MACOSX_DEPLOYMENT_TARGET}) 117 execute_process( 118 COMMAND bash -c "cat $ENV{SDKROOT}/SDKSettings.json | \ 119 grep -Eo 'MACOSX_DEPLOYMENT_TARGET\\\":\\\"\\d{2}\\.\\d+' | cut -d '\"' -f 3 | tr -d '\\n'" 120 OUTPUT_VARIABLE MACOSX_FIND_SDK_VERSION 121 ) 122 if(NOT MACOSX_FIND_SDK_VERSION) 123 message(FATAL_ERROR "can not find MACOSX_DEPLOYMENT_TARGET in SDKROOT, \ 124 please check whether it's a valid SDK path") 125 endif() 126 127 if(${CMAKE_HOST_SYSTEM_PROCESSOR} MATCHES "arm64") 128 set(CMAKE_OSX_DEPLOYMENT_TARGET "11.0") 129 elseif(${MACOSX_FIND_SDK_VERSION} VERSION_LESS "10.15") 130 set(CMAKE_OSX_DEPLOYMENT_TARGET ${MACOSX_FIND_SDK_VERSION} CACHE STRING 131 "minimum macosx deployment target version" FORCE) 132 else() 133 set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15") 134 endif() 135 set(ENV{MACOSX_DEPLOYMENT_TARGET} ${CMAKE_OSX_DEPLOYMENT_TARGET}) 136 endif() 137 message("macosx deployment target version: $ENV{MACOSX_DEPLOYMENT_TARGET}") 138endif() 139