• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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