Publishing 2019 R1 content
[platform/upstream/dldt.git] / inference-engine / thirdparty / mkl-dnn / src / CMakeLists.txt
1 #===============================================================================
2 # Copyright 2016-2018 Intel Corporation
3 #
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
7 #
8 #     http://www.apache.org/licenses/LICENSE-2.0
9 #
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 #===============================================================================
16
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
21     )
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
27     )
28 include_directories(
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
34     )
35
36 # propagate SRC specific flags
37 append(CMAKE_C_FLAGS "${CMAKE_SRC_CCXX_FLAGS}")
38 append(CMAKE_CXX_FLAGS "${CMAKE_SRC_CCXX_FLAGS}")
39
40 # propagate no warning flags
41 append(CMAKE_C_FLAGS "${CMAKE_CCXX_NOWARN_FLAGS}")
42 append(CMAKE_CXX_FLAGS "${CMAKE_CCXX_NOWARN_FLAGS}")
43
44 # propagate sanitizer flags
45 append(CMAKE_C_FLAGS "${CMAKE_CCXX_SANITIZER_FLAGS}")
46 append(CMAKE_CXX_FLAGS "${CMAKE_CCXX_SANITIZER_FLAGS}")
47
48 if(NOT MKLDNN_VERBOSE)
49     add_definitions(-DDISABLE_VERBOSE)
50 endif()
51
52 if(MKLDNN_ENABLE_CONCURRENT_EXEC)
53     add_definitions(-DMKLDNN_ENABLE_CONCURRENT_EXEC)
54 endif()
55
56 if(VTUNEROOT)
57     include_directories(${VTUNEROOT}/include)
58     add_definitions(-DJIT_PROFILING_VTUNE)
59 endif()
60
61 if(WIN32)
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")
67     endif()
68 endif()
69
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
73     # by default
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)
79     if(WIN32)
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")
84     else()
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")
89     endif()
90 endif()
91
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})
98
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}>
104     )
105
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}")
111 endif()
112
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}")
120
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}")
124 set(LIB_VERSION_FILE
125     "${LIB_CONFIG_GENERATE_DIR}/${LIB_NAME}-config-version.cmake")
126 set(LIB_CONFIG_FILE
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"
134     "${LIB_CONFIG_FILE}"
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})
142
143 # On Windows we need to add mkldnn.dll path to CTESTCONFIG_PATH which is later
144 # passed to ctest and Visual Studio solutions
145 if(WIN32)
146     if(NOT(MINGW))
147         foreach(BUILD_TYPE Release Debug RelWithDebInfo MinSizeRel)
148             append_to_windows_path_list(CTESTCONFIG_PATH
149                 "${CMAKE_CURRENT_BINARY_DIR}/${BUILD_TYPE}")
150         endforeach()
151     else()
152         append_to_windows_path_list(CTESTCONFIG_PATH
153             "${CMAKE_CURRENT_BINARY_DIR}")
154     endif()
155     set(CTESTCONFIG_PATH "${CTESTCONFIG_PATH}" PARENT_SCOPE)
156 endif()