1 # Copyright (c) 2016 Intel Corporation
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
7 # http://www.apache.org/licenses/LICENSE-2.0
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.
16 # ====================================== Helper constant variables =====================================
18 # Order of scan for special capabilities files (.inc files with capabilities description).
19 set(CLDNN__CAPS_SCAN_ORDER
25 # =================================== Name / Output settings from parent ===============================
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}")
31 # ========================================== Compiler options ==========================================
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}")
39 intel_config_flag_apply_settings(
47 # ================================== Compiler preprocessor definitions =================================
49 set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS
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}"
58 # ========================================= Source/Header files ========================================
60 set(__CLDNN_Label__api "api")
61 file(GLOB __CLDNN_Headers__api
62 "${CLDNN__API_DIR}/*.h"
63 "${CLDNN__API_DIR}/*.hpp"
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"
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"
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"
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"
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"
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"
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"
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"
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}")
135 if(NOT (__CLDNN_CapsScanDirFileCount GREATER 0))
136 message(FATAL_ERROR "[clDNN] Cannot locate any capabilities files in \"${__CLDNN_Directory__caps}\" subdirectories.")
138 unset(__CLDNN_CapsScanDir)
139 unset(__CLDNN_CapsScanDirFileCount)
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"
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"
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"
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")
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")
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}
191 # Helping with some generators.
192 set_property(SOURCE ${__CLDNN_Sources__cg_cache} PROPERTY GENERATED TRUE)
194 # =============================================== Filters ==============================================
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})
211 # ===================================== Include/Link directories =======================================
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}"
224 # =================================== Link targets and dependencies ====================================
226 # Main shared library.
227 add_library("${CLDNN_BUILD__PROJ}" SHARED
228 ${__CLDNN_AllSources}
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}")
234 target_link_libraries("${CLDNN_BUILD__PROJ}" PRIVATE
236 cldnn_kernel_selector
240 target_link_libraries("${CLDNN_BUILD__PROJ}" PRIVATE setupapi)
241 elseif((NOT ANDROID) AND (UNIX))
242 target_link_libraries("${CLDNN_BUILD__PROJ}" PRIVATE pthread)
244 target_link_libraries("${CLDNN_BUILD__PROJ}" PRIVATE ${CLDNN__SYSTEM_LINK_LIBRARIES})
246 # ========================================== Installation ==============================================
249 install(DIRECTORY "${CLDNN__API_DIR}/"
250 DESTINATION "include/clDNN"
251 FILE_PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ
254 install(TARGETS "${CLDNN_BUILD__PROJ}"
255 ARCHIVE DESTINATION "lib"
256 LIBRARY DESTINATION "lib"
257 RUNTIME DESTINATION "bin"
258 INCLUDES DESTINATION "include/clDNN"
261 # ======================================================================================================