Publishing 2019 R1 content
[platform/upstream/dldt.git] / inference-engine / thirdparty / clDNN / src / CMakeLists.txt
1 # Copyright (c) 2016 Intel Corporation
2
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6
7 #      http://www.apache.org/licenses/LICENSE-2.0
8
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14
15
16 # ====================================== Helper constant variables =====================================
17
18 # Order of scan for special capabilities files (.inc files with capabilities description).
19 set(CLDNN__CAPS_SCAN_ORDER
20     "private"
21     "internal"
22     "public"
23   )
24
25 # =================================== Name / Output settings from parent ===============================
26
27 set(CLDNN_BUILD__PROJ             "${CLDNN_BUILD__PROJ__clDNN}")
28 set(CLDNN_BUILD__PROJ_LABEL       "${CLDNN_BUILD__PROJ_LABEL__clDNN}")
29 set(CLDNN_BUILD__PROJ_OUTPUT_NAME "${CLDNN_BUILD__PROJ_OUTPUT_NAME__clDNN}")
30
31 # ========================================== Compiler options ==========================================
32 find_package(OpenMP)
33 if (OPENMP_FOUND)
34     add_definitions(-DOPENMP_FOUND)
35     set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
36     set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
37 endif()
38
39 intel_config_flag_apply_settings(
40     CompilerOptions
41     CMAKE_CXX_FLAGS
42     ALL_PATTERN ""
43     SET
44       RttiEnabled
45   )
46
47 # ================================== Compiler preprocessor definitions =================================
48
49 set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS
50     CLDNN_EXPORTS
51     EXPORT_NEURAL_SYMBOLS
52     "CLDNN_VERSION_MAJOR=${CLDNN__VERSION_MAJOR}"
53     "CLDNN_VERSION_MINOR=${CLDNN__VERSION_MINOR}"
54     "CLDNN_VERSION_BUILD=${CLDNN__VERSION_BUILD}"
55     "CLDNN_VERSION_REVISION=${CLDNN__VERSION_REVISION}"
56   )
57
58 # ========================================= Source/Header files ========================================
59
60 set(__CLDNN_Label__api                 "api")
61 file(GLOB __CLDNN_Headers__api
62     "${CLDNN__API_DIR}/*.h"
63     "${CLDNN__API_DIR}/*.hpp"
64   )
65
66 set(__CLDNN_Directory__api__cpp "${CLDNN__API_DIR}/CPP")
67 set(__CLDNN_Label__api__cpp     "${__CLDNN_Label__api}\\CPP")
68 file(GLOB __CLDNN_Headers__api__cpp
69     "${__CLDNN_Directory__api__cpp}/*.h"
70     "${__CLDNN_Directory__api__cpp}/*.hpp"
71   )
72
73 set(__CLDNN_Directory__api__c "${CLDNN__API_DIR}/C")
74 set(__CLDNN_Label__api__c     "${__CLDNN_Label__api}\\C")
75 file(GLOB __CLDNN_Headers__api__c
76     "${__CLDNN_Directory__api__c}/*.h"
77     "${__CLDNN_Directory__api__c}/*.hpp"
78   )
79
80 set(__CLDNN_Label__api_extension       "api_extension")
81 file(GLOB __CLDNN_Headers__api_extension
82     "${CLDNN__API_EXTENSION_DIR}/*.h"
83     "${CLDNN__API_EXTENSION_DIR}/*.hpp"
84   )
85
86 set(__CLDNN_Directory__api_extension__cpp "${CLDNN__API_EXTENSION_DIR}/CPP")
87 set(__CLDNN_Label__api_extension__cpp     "${__CLDNN_Label__api_extension}\\CPP")
88 file(GLOB __CLDNN_Headers__api_extension__cpp
89     "${__CLDNN_Directory__api_extension__cpp}/*.h"
90     "${__CLDNN_Directory__api_extension__cpp}/*.hpp"
91   )
92
93 set(__CLDNN_Directory__api_extension__c "${CLDNN__API_EXTENSION_DIR}/C")
94 set(__CLDNN_Label__api_extension__c     "${__CLDNN_Label__api_extension}\\C")
95 file(GLOB __CLDNN_Headers__api_extension__c
96     "${__CLDNN_Directory__api_extension__c}/*.h"
97     "${__CLDNN_Directory__api_extension__c}/*.hpp"
98   )
99
100 set(__CLDNN_Label__main                "")
101 file(GLOB __CLDNN_Sources__main
102     "${CMAKE_CURRENT_SOURCE_DIR}/*.h"
103     "${CMAKE_CURRENT_SOURCE_DIR}/*.hpp"
104     "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp"
105   )
106
107 set(__CLDNN_Directory__graph_opt       "${CMAKE_CURRENT_SOURCE_DIR}/graph_optimizer")
108 set(__CLDNN_Label__graph_opt           "graph_optimizer")
109 file(GLOB __CLDNN_Sources__graph_opt
110     "${__CLDNN_Directory__graph_opt}/*.h"
111     "${__CLDNN_Directory__graph_opt}/*.hpp"
112     "${__CLDNN_Directory__graph_opt}/*.cpp"
113   )
114
115 set(__CLDNN_Directory__include         "${CMAKE_CURRENT_SOURCE_DIR}/include")
116 set(__CLDNN_Label__include             "include")
117 file(GLOB __CLDNN_Headers__include
118     "${__CLDNN_Directory__include}/*.h"
119     "${__CLDNN_Directory__include}/*.hpp"
120   )
121
122 # Special handling of capabilities files.
123 set(__CLDNN_Directory__caps            "${CMAKE_CURRENT_SOURCE_DIR}/caps")
124 set(__CLDNN_Label__caps                "caps")
125 foreach(__CLDNN_CapsScanDir ${CLDNN__CAPS_SCAN_ORDER})
126   string(REPLACE ";" "\;" __CLDNN_CapsScanDir "${__CLDNN_CapsScanDir}") # [WA#1] Must escape ; again if occurred in item.
127   file(GLOB __CLDNN_Sources__caps "${__CLDNN_Directory__caps}/${__CLDNN_CapsScanDir}/*.inc")
128   list(LENGTH __CLDNN_Sources__caps __CLDNN_CapsScanDirFileCount)
129   if(__CLDNN_CapsScanDirFileCount GREATER 0)
130     set(__CLDNN_IncDirectory__caps "${__CLDNN_Directory__caps}/${__CLDNN_CapsScanDir}")
131     message(STATUS "[clDNN] Selected capabilities: ${__CLDNN_CapsScanDir}")
132     break()
133   endif()
134 endforeach()
135 if(NOT (__CLDNN_CapsScanDirFileCount GREATER 0))
136   message(FATAL_ERROR "[clDNN] Cannot locate any capabilities files in \"${__CLDNN_Directory__caps}\" subdirectories.")
137 endif()
138 unset(__CLDNN_CapsScanDir)
139 unset(__CLDNN_CapsScanDirFileCount)
140
141 set(__CLDNN_Directory__gpu             "${CMAKE_CURRENT_SOURCE_DIR}/gpu")
142 set(__CLDNN_Label__gpu                 "gpu")
143 file(GLOB __CLDNN_Sources__gpu
144     "${__CLDNN_Directory__gpu}/*.h"
145     "${__CLDNN_Directory__gpu}/*.hpp"
146     "${__CLDNN_Directory__gpu}/*.cpp"
147     "${__CLDNN_Directory__gpu}/*.inc"
148   )
149
150 set(__CLDNN_Directory__cache           "${__CLDNN_Directory__gpu}/cache")
151 set(__CLDNN_Label__cache               "${__CLDNN_Label__gpu}\\cache")
152 file(GLOB __CLDNN_Sources__cache
153     "${__CLDNN_Directory__cache}/*.h"
154     "${__CLDNN_Directory__cache}/*.hpp"
155     "${__CLDNN_Directory__cache}/*.cpp"
156   )
157
158 set(__CLDNN_Directory__ch_kernels      "${__CLDNN_Directory__cache}/kernels")
159 set(__CLDNN_Label__ch_kernels          "${__CLDNN_Label__cache}\\kernels")
160 file(GLOB __CLDNN_Sources__ch_kernels
161     "${__CLDNN_Directory__ch_kernels}/*.cl"
162   )
163
164 set(__CLDNN_Directory__cg_cache        "${CLDNN__CODEGEN_INCDIR}")
165 set(__CLDNN_CGDirectory__cg_cache      "${CLDNN__CODEGEN_DIR}/cache")
166 set(__CLDNN_Label__cg_cache            "${__CLDNN_Label__cache}\\codegen")
167
168 set(__CLDNN_Directory__ks_main           "${CLDNN__KERNEL_SELECTOR_DIR}")
169 set(__CLDNN_Directory__ks_core           "${CLDNN__KERNEL_SELECTOR_DIR}/core")
170 set(__CLDNN_Directory__ks_common         "${CLDNN__KERNEL_SELECTOR_DIR}/common")
171 set(__CLDNN_Directory__ks_core_common    "${__CLDNN_Directory__ks_core}/common")
172 set(__CLDNN_Directory__ks_actual_kernels "${__CLDNN_Directory__ks_core}/actual_kernels")  
173 set(__CLDNN_Directory__ks_cache          "${__CLDNN_Directory__ks_core}/cache")
174
175 set(__CLDNN_AllSources
176     ${__CLDNN_Headers__api}
177     ${__CLDNN_Sources__graph_opt}
178     ${__CLDNN_Headers__include}
179     ${__CLDNN_Sources__caps}
180     ${__CLDNN_Headers__api__cpp}
181     ${__CLDNN_Headers__api__c}
182     ${__CLDNN_Headers__api_extension}
183     ${__CLDNN_Headers__api_extension__c}
184     ${__CLDNN_Headers__api_extension__cpp}
185     ${__CLDNN_Sources__main}
186     ${__CLDNN_Sources__gpu}
187     ${__CLDNN_Sources__cache}
188     ${__CLDNN_Sources__ch_kernels}
189     ${__CLDNN_Sources__cg_cache}
190   )
191 # Helping with some generators.
192 set_property(SOURCE ${__CLDNN_Sources__cg_cache} PROPERTY GENERATED TRUE)
193
194 # =============================================== Filters ==============================================
195
196 source_group("${__CLDNN_Label__api}"                  FILES ${__CLDNN_Headers__api})
197 source_group("${__CLDNN_Label__api__cpp}"             FILES ${__CLDNN_Headers__api__cpp})
198 source_group("${__CLDNN_Label__api__c}"               FILES ${__CLDNN_Headers__api__c})
199 source_group("${__CLDNN_Label__api_extension}"        FILES ${__CLDNN_Headers__api_extension})
200 source_group("${__CLDNN_Label__api_extension__cpp}"   FILES ${__CLDNN_Headers__api_extension__cpp})
201 source_group("${__CLDNN_Label__api_extension__c}"     FILES ${__CLDNN_Headers__api_extension__c})
202 source_group("${__CLDNN_Label__include}"              FILES ${__CLDNN_Headers__include})
203 source_group("${__CLDNN_Label__graph_opt}"            FILES ${__CLDNN_Sources__graph_opt})
204 source_group("${__CLDNN_Label__caps}"                 FILES ${__CLDNN_Sources__caps})
205 source_group("${__CLDNN_Label__main}"                 FILES ${__CLDNN_Sources__main})
206 source_group("${__CLDNN_Label__gpu}"                  FILES ${__CLDNN_Sources__gpu})
207 source_group("${__CLDNN_Label__cache}"                FILES ${__CLDNN_Sources__cache})
208 source_group("${__CLDNN_Label__ch_kernels}"           FILES ${__CLDNN_Sources__ch_kernels})
209 source_group("${__CLDNN_Label__cg_cache}"             FILES ${__CLDNN_Sources__cg_cache})
210
211 # ===================================== Include/Link directories =======================================
212
213 include_directories(
214     "${CLDNN__MAIN_DIR}"
215     "${CMAKE_CURRENT_SOURCE_DIR}"
216     "${__CLDNN_Directory__include}"
217     "${__CLDNN_IncDirectory__caps}"
218     "${__CLDNN_Directory__ks_core}"
219     "${__CLDNN_Directory__ks_core}/common"
220     "${__CLDNN_Directory__ks_actual_kernels}"
221     "${__CLDNN_Directory__ks_common}"
222   )
223
224 # =================================== Link targets and dependencies ====================================
225
226 # Main shared library.
227 add_library("${CLDNN_BUILD__PROJ}" SHARED
228     ${__CLDNN_AllSources}
229   )
230 set_property(TARGET "${CLDNN_BUILD__PROJ}" PROPERTY PROJECT_LABEL "${CLDNN_BUILD__PROJ_LABEL}")
231 set_property(TARGET "${CLDNN_BUILD__PROJ}" PROPERTY OUTPUT_NAME   "${CLDNN_BUILD__PROJ_OUTPUT_NAME}")
232
233
234 target_link_libraries("${CLDNN_BUILD__PROJ}" PRIVATE
235     OpenCL
236     cldnn_kernel_selector
237   )
238
239 if(WIN32)
240   target_link_libraries("${CLDNN_BUILD__PROJ}" PRIVATE setupapi)
241 elseif((NOT ANDROID) AND (UNIX))
242   target_link_libraries("${CLDNN_BUILD__PROJ}" PRIVATE pthread)
243 endif()
244 target_link_libraries("${CLDNN_BUILD__PROJ}" PRIVATE ${CLDNN__SYSTEM_LINK_LIBRARIES})
245
246 # ========================================== Installation ==============================================
247
248 # API headers.
249 install(DIRECTORY "${CLDNN__API_DIR}/"
250     DESTINATION "include/clDNN"
251     FILE_PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ
252   )
253 # Binaries.
254 install(TARGETS "${CLDNN_BUILD__PROJ}"
255     ARCHIVE DESTINATION "lib"
256     LIBRARY DESTINATION "lib"
257     RUNTIME DESTINATION "bin"
258     INCLUDES DESTINATION "include/clDNN"
259   )
260
261 # ======================================================================================================