1cmake_minimum_required(VERSION 3.14.0) 2project(MindSpore) 3 4if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") 5 if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.3.0) 6 message(FATAL_ERROR "GCC version must be 7.3.0 and above, but found ${CMAKE_CXX_COMPILER_VERSION}") 7 elseif(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 11.3.0) 8 message(WARNING "GCC version ${CMAKE_CXX_COMPILER_VERSION} is greater than 11.3.0, may cause unknown problems.") 9 endif() 10endif() 11 12include(${CMAKE_SOURCE_DIR}/cmake/options.cmake) 13include(${CMAKE_SOURCE_DIR}/cmake/check_requirements.cmake) 14include(${CMAKE_SOURCE_DIR}/cmake/ascend_variables.cmake) 15 16#generate code 17if(DEFINED ENV{ENABLE_GEN_CODE}) 18 set(ENABLE_GEN_CODE $ENV{ENABLE_GEN_CODE}) 19endif() 20set(ENABLE_GEN_CODE on) 21set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DENABLE_GEN_CODE") 22 23set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules/") 24if(CMAKE_SYSTEM_NAME MATCHES "Linux") 25 if(NOT ENABLE_GLIBCXX) 26 add_compile_definitions(_GLIBCXX_USE_CXX11_ABI=0) 27 endif() 28endif() 29 30if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") 31 set(MACOSX_CXX_WARNING_FLAGS "-Wno-inconsistent-missing-override \ 32 -Wno-unused-lambda-capture -Wno-unneeded-internal-declaration -Wno-unused-variable \ 33 -Wno-return-std-move") 34 if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 13.1) 35 set(MACOSX_CXX_WARNING_FLAGS "${MACOSX_CXX_WARNING_FLAGS} -Wno-unused-but-set-variable") 36 endif() 37 set(CMAKE_CXX_FLAGS_RELEASE 38 "$ENV{CXXFLAGS} -O2 ${MACOSX_CXX_WARNING_FLAGS} -DHALF_ENABLE_CPP11_USER_LITERALS=0 -D_FORTIFY_SOURCE=2") 39elseif(ENABLE_SYM_FILE) 40 set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O2 -g -ggdb -Wl,--build-id=uuid -Wl,--allow-shlib-undefined \ 41 -DHALF_ENABLE_CPP11_USER_LITERALS=0 -D_FORTIFY_SOURCE=2") 42else() 43 if(NOT MSVC) 44 set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O2 -Wl,--allow-shlib-undefined -s \ 45 -DHALF_ENABLE_CPP11_USER_LITERALS=0 -D_FORTIFY_SOURCE=2") 46 endif() 47endif() 48 49if(ENABLE_PYTHON) 50 add_compile_definitions(ENABLE_PYTHON) 51 add_compile_definitions(ENABLE_MINDDATA_PYTHON) 52endif() 53 54if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") 55 set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -g2 -ggdb -fno-inline-functions -fno-omit-frame-pointer \ 56 -D_LIBCPP_INLINE_VISIBILITY='' -D_LIBCPP_DISABLE_EXTERN_TEMPLATE=1 -DHALF_ENABLE_CPP11_USER_LITERALS=0 \ 57 -D_FORTIFY_SOURCE=2 -Wno-cpp ${MACOSX_CXX_WARNING_FLAGS}") 58else() 59 if(NOT MSVC) 60 set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -g2 -ggdb -fno-inline-functions -fno-omit-frame-pointer \ 61 -Wl,--allow-shlib-undefined -D_LIBCPP_INLINE_VISIBILITY='' -D_LIBCPP_DISABLE_EXTERN_TEMPLATE=1 \ 62 -DHALF_ENABLE_CPP11_USER_LITERALS=0 -D_FORTIFY_SOURCE=2 -Wno-cpp") 63 endif() 64endif() 65 66if(NOT MSVC) 67set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I/usr/local/include -std=c++17 \ 68 -Werror -Wall -Wno-deprecated-declarations -fPIC") 69else() 70set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++17") 71endif() 72set(CMAKE_EXPORT_COMPILE_COMMANDS ON) 73 74set(PYBIND11_CPP_STANDARD -std=c++17) 75set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OPTION_CXX_FLAGS}") 76 77if(ENABLE_AKG AND CMAKE_SYSTEM_NAME MATCHES "Linux") 78 add_subdirectory("${CMAKE_SOURCE_DIR}/akg") 79endif() 80 81include(${CMAKE_SOURCE_DIR}/cmake/mind_expression.cmake) 82include_directories(${CMAKE_CURRENT_SOURCE_DIR}) 83include_directories(${CMAKE_CURRENT_SOURCE_DIR}/third_party/securec/include) 84include_directories(${CMAKE_CURRENT_SOURCE_DIR}/third_party/flatbuffers/include) 85include_directories(${CMAKE_CURRENT_SOURCE_DIR}/third_party/flatbuffers/include/flatbuffers) 86 87if(MSVC AND NOT ENABLE_GPU) 88 find_program(CCACHE_EXE ccache) 89 if(CCACHE_EXE) 90 message(STATUS "using ccache to speed windows compilation.") 91 file(COPY ${CCACHE_EXE} DESTINATION ${CMAKE_BINARY_DIR}/cl.exe) 92 set(CMAKE_VS_GLOBALS 93 "CLToolExe=cl.exe" 94 "CLToolPath=${CMAKE_BINARY_DIR}" 95 "TrackFileAccess=false" 96 "UseMultiToolTask=true" 97 "DebugInformationFormat=OldStyle" 98 ) 99 endif() 100endif() 101 102if(ENABLE_FAST_HASH_TABLE) 103set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DENABLE_FAST_HASH_TABLE=1") 104include_directories(${CMAKE_CURRENT_SOURCE_DIR}/third_party/robin_hood/include) 105endif() 106 107include(${CMAKE_SOURCE_DIR}/cmake/dependency_utils.cmake) 108find_package(Python3 COMPONENTS Interpreter Development) 109if(Python3_FOUND) 110 set(PYTHON_INCLUDE_DIRS "${Python3_INCLUDE_DIRS}") 111 set(PYTHON_LIBRARIES "${Python3_LIBRARIES}") 112 if(WIN32) 113 if(Python3_DIR) 114 message("Python3_DIR set already: " ${Python3_DIR}) 115 else() 116 string(LENGTH ${PYTHON_LIBRARIES} PYTHON_LIBRARIES_LEN) 117 string(LENGTH "libpythonxx.a" Python3_NAME_LEN) 118 math(EXPR Python3_DIR_LEN ${PYTHON_LIBRARIES_LEN}-${Python3_NAME_LEN}) 119 string(SUBSTRING ${Python3_LIBRARIES} 0 ${Python3_DIR_LEN} Python3_DIR) 120 message("Python3_DIR: " ${Python3_DIR}) 121 endif() 122 link_directories(${Python3_DIR}) 123 endif() 124else() 125 find_python_package(py_inc py_lib) 126 set(PYTHON_INCLUDE_DIRS "${py_inc}") 127 set(PYTHON_LIBRARIES "${py_lib}") 128endif() 129message("PYTHON_INCLUDE_DIRS = ${PYTHON_INCLUDE_DIRS}") 130message("PYTHON_LIBRARIES = ${PYTHON_LIBRARIES}") 131include_directories(${PYTHON_INCLUDE_DIRS}) 132 133include(${CMAKE_SOURCE_DIR}/cmake/utils.cmake) 134find_and_use_mold() 135 136set(MS_CCSRC_PATH ${CMAKE_SOURCE_DIR}/mindspore/ccsrc) 137set(MS_CCSRC_BUILD_PATH ${BUILD_PATH}/mindspore/mindspore/ccsrc) 138 139if(NOT MSVC) 140set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden") 141endif() 142 143include(${CMAKE_SOURCE_DIR}/cmake/init.cmake) 144add_subdirectory(mindspore/core) 145if(ENABLE_D OR ENABLE_ACL OR ENABLE_TESTCASES) 146 include(${CMAKE_SOURCE_DIR}/cmake/dependency_graphengine.cmake) 147endif() 148 149add_subdirectory_with_faster_option(mindspore/ccsrc) 150 151if(ENABLE_TESTCASES OR ENABLE_CPP_ST) 152 add_subdirectory(tests) 153endif() 154 155# packaging 156file(READ ${CMAKE_SOURCE_DIR}/version.txt VERSION_NUMBER) 157string(REPLACE "\n" "" VERSION_NUMBER ${VERSION_NUMBER}) 158if(${VERSION_NUMBER} MATCHES ".*dev.*") 159 message("building dev mode") 160 set(BUILD_DEV_MODE ON) 161endif() 162 163if(ONLY_BUILD_DEVICE_PLUGINS) 164 include(cmake/package_plugin.cmake) 165elseif(MODE_ASCEND_ACL) 166 include(cmake/package_tar.cmake) 167elseif(CMAKE_SYSTEM_NAME MATCHES "Windows") 168 include(cmake/package_win.cmake) 169elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin") 170 include(cmake/package_mac.cmake) 171else() 172 include(cmake/package.cmake) 173endif() 174