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