1 #===============================================================================
2 # Copyright 2016-2018 Intel Corporation
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at
8 # http://www.apache.org/licenses/LICENSE-2.0
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
15 #===============================================================================
17 file(GLOB_RECURSE HEADERS
18 ${PROJECT_BINARY_DIR}/include/*.h
19 ${CMAKE_CURRENT_SOURCE_DIR}/../include/*.h
20 ${CMAKE_CURRENT_SOURCE_DIR}/../include/*.hpp
22 file(GLOB_RECURSE SOURCES
23 ${CMAKE_CURRENT_SOURCE_DIR}/*.c
24 ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
25 ${CMAKE_CURRENT_SOURCE_DIR}/*.h
26 ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp
29 ${PROJECT_BINARY_DIR}/include
30 ${CMAKE_CURRENT_SOURCE_DIR}
31 ${CMAKE_CURRENT_SOURCE_DIR}/common
32 ${CMAKE_CURRENT_SOURCE_DIR}/cpu
33 ${CMAKE_CURRENT_SOURCE_DIR}/cpu/xbyak
36 # propagate SRC specific flags
37 append(CMAKE_C_FLAGS "${CMAKE_SRC_CCXX_FLAGS}")
38 append(CMAKE_CXX_FLAGS "${CMAKE_SRC_CCXX_FLAGS}")
40 # propagate no warning flags
41 append(CMAKE_C_FLAGS "${CMAKE_CCXX_NOWARN_FLAGS}")
42 append(CMAKE_CXX_FLAGS "${CMAKE_CCXX_NOWARN_FLAGS}")
44 # propagate sanitizer flags
45 append(CMAKE_C_FLAGS "${CMAKE_CCXX_SANITIZER_FLAGS}")
46 append(CMAKE_CXX_FLAGS "${CMAKE_CCXX_SANITIZER_FLAGS}")
48 if(NOT MKLDNN_VERBOSE)
49 add_definitions(-DDISABLE_VERBOSE)
52 if(MKLDNN_ENABLE_CONCURRENT_EXEC)
53 add_definitions(-DMKLDNN_ENABLE_CONCURRENT_EXEC)
57 include_directories(${VTUNEROOT}/include)
58 add_definitions(-DJIT_PROFILING_VTUNE)
62 add_definitions(-D_WIN)
63 add_definitions(-DNOMINMAX)
64 # Correct 'jnl' macro/jit issue
65 if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel")
66 append(CMAKE_CXX_FLAGS "/Qlong-double")
70 if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
71 # to make computations more stable and to align the jitted code
72 # with the reference one use precise division and square root
74 file(GLOB FILES_REQUIRED_PREC_SQRT
75 ${CMAKE_CURRENT_SOURCE_DIR}/cpu/*normalization*.cpp)
76 file(GLOB FILES_REQUIRED_PREC_DIV
77 ${CMAKE_CURRENT_SOURCE_DIR}/cpu/*normalization*.cpp
78 ${CMAKE_CURRENT_SOURCE_DIR}/cpu/ref_rnn.cpp)
80 set_source_files_properties(${FILES_REQUIRED_PREC_SQRT}
81 PROPERTIES COMPILE_FLAGS "/Qprec-sqrt")
82 set_source_files_properties(${FILES_REQUIRED_PREC_DIV}
83 PROPERTIES COMPILE_FLAGS "/Qprec-div")
85 set_source_files_properties(${FILES_REQUIRED_PREC_SQRT}
86 PROPERTIES COMPILE_FLAGS "-prec-sqrt")
87 set_source_files_properties(${FILES_REQUIRED_PREC_DIV}
88 PROPERTIES COMPILE_FLAGS "-prec-div")
92 add_library(${LIB_NAME} ${MKLDNN_LIBRARY_TYPE} ${HEADERS} ${SOURCES})
93 set_property(TARGET ${LIB_NAME} PROPERTY CXX_STANDARD 11)
94 set_property(TARGET ${LIB_NAME} PROPERTY CXX_STANDARD_REQUIRED ON)
95 set_property(TARGET ${LIB_NAME} PROPERTY VERSION "${PROJECT_VERSION}.0")
96 set_property(TARGET ${LIB_NAME} PROPERTY SOVERSION "0")
97 set_property(TARGET ${LIB_NAME} PROPERTY PUBLIC_HEADER ${HEADERS})
99 target_include_directories(${LIB_NAME} PUBLIC
100 $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include>
101 $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/../include>
102 # $<INSTALL_PREFIX> is required for compatibility with cmake 2.8
103 $<INSTALL_INTERFACE:$<INSTALL_PREFIX>/${CMAKE_INSTALL_INCLUDEDIR}>
106 target_link_libraries_private(${LIB_NAME}
107 "${EXTRA_SHARED_LIBS};${EXTRA_STATIC_LIBS}")
108 target_link_libraries_public(${LIB_NAME} "${EXTRA_SHARED_LIBS}")
109 if(MKLDNN_LIBRARY_TYPE STREQUAL "STATIC")
110 target_link_libraries_public(${LIB_NAME} "${EXTRA_STATIC_LIBS}")
113 set(LIB_EXPORT_NAME "${LIB_NAME}-targets")
114 install(TARGETS ${LIB_NAME}
115 EXPORT "${LIB_EXPORT_NAME}"
116 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
117 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
118 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
119 PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
121 # Write version and package config files
122 set(LIB_CONFIG_GENERATE_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated")
123 set(LIB_CONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/${LIB_NAME}")
125 "${LIB_CONFIG_GENERATE_DIR}/${LIB_NAME}-config-version.cmake")
127 "${LIB_CONFIG_GENERATE_DIR}/${LIB_NAME}-config.cmake")
128 write_basic_package_version_file(
129 "${LIB_VERSION_FILE}"
130 VERSION ${PROJECT_VERSION}
131 COMPATIBILITY SameMajorVersion)
132 configure_package_config_file(
133 "../cmake/config.cmake.in"
135 INSTALL_DESTINATION ${LIB_CONFIG_INSTALL_DIR})
136 install(FILES ${LIB_CONFIG_FILE} ${LIB_VERSION_FILE}
137 DESTINATION ${LIB_CONFIG_INSTALL_DIR})
138 string(TOUPPER "${LIB_NAME}::" LIB_NAMESPACE)
139 install(EXPORT ${LIB_EXPORT_NAME}
140 NAMESPACE ${LIB_NAMESPACE}
141 DESTINATION ${LIB_CONFIG_INSTALL_DIR})
143 # On Windows we need to add mkldnn.dll path to CTESTCONFIG_PATH which is later
144 # passed to ctest and Visual Studio solutions
147 foreach(BUILD_TYPE Release Debug RelWithDebInfo MinSizeRel)
148 append_to_windows_path_list(CTESTCONFIG_PATH
149 "${CMAKE_CURRENT_BINARY_DIR}/${BUILD_TYPE}")
152 append_to_windows_path_list(CTESTCONFIG_PATH
153 "${CMAKE_CURRENT_BINARY_DIR}")
155 set(CTESTCONFIG_PATH "${CTESTCONFIG_PATH}" PARENT_SCOPE)