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.
15 # =================================== Name / Output settings from parent ===============================
17 set(CLDNN_BUILD__PROJ "cldnn_kernel_selector")
18 set(CLDNN_BUILD__PROJ_LABEL "${CLDNN_BUILD__PROJ}")
19 set(CLDNN_BUILD__PROJ_OUTPUT_NAME "${CLDNN_BUILD__PROJ}${CLDNN__OUT_CPU_SUFFIX}")
21 # ========================================== Compiler options ==========================================
23 intel_config_flag_apply_settings(
31 # ================================== Compiler preprocessor definitions =================================
33 if (CLDNN__ENABLE_PERSISTENT_CACHE)
34 set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS CLDNN_ENABLE_PERSISTENT_CACHE)
37 # ========================================= Source/Header files ========================================
39 set(__CLDNN_Directory__main "${CMAKE_CURRENT_SOURCE_DIR}")
40 set(__CLDNN_Label__main "")
41 file(GLOB __CLDNN_Sources__main
42 "${__CLDNN_Directory__main}/*.h"
43 "${__CLDNN_Directory__main}/*.hpp"
44 "${__CLDNN_Directory__main}/*.cpp"
47 set(__CLDNN_Directory__core "${__CLDNN_Directory__main}/core")
48 set(__CLDNN_Label__core "core")
49 file(GLOB __CLDNN_Sources__core
50 "${__CLDNN_Directory__core}/*.h"
51 "${__CLDNN_Directory__core}/*.hpp"
52 "${__CLDNN_Directory__core}/*.cpp"
55 set(__CLDNN_Directory__common "${__CLDNN_Directory__main}/common")
56 set(__CLDNN_Label__common "common")
57 file(GLOB __CLDNN_Sources__common
58 "${__CLDNN_Directory__common}/*.h"
59 "${__CLDNN_Directory__common}/*.hpp"
60 "${__CLDNN_Directory__common}/*.cpp"
63 set(__CLDNN_Directory__core_common "${__CLDNN_Directory__core}/common")
64 set(__CLDNN_Label__core_common "${__CLDNN_Label__core}\\common")
65 file(GLOB __CLDNN_Sources__core_common
66 "${__CLDNN_Directory__core_common}/*.h"
67 "${__CLDNN_Directory__core_common}/*.hpp"
68 "${__CLDNN_Directory__core_common}/*.cpp"
71 set(__CLDNN_Directory__actual_kernels "${__CLDNN_Directory__core}/actual_kernels")
72 set(__CLDNN_Label__actual_kernels "${__CLDNN_Label__core}\\actual_kernels")
73 file(GLOB_RECURSE __CLDNN_Sources__actual_kernels
74 "${__CLDNN_Directory__actual_kernels}/*.h"
75 "${__CLDNN_Directory__actual_kernels}/*.hpp"
76 "${__CLDNN_Directory__actual_kernels}/*.cpp"
78 foreach(__CLDNN_FilePath ${__CLDNN_Sources__actual_kernels})
79 string(REPLACE ";" "\;" __CLDNN_FilePath "${__CLDNN_FilePath}") # [WA#1] Must escape ; again if occurred in item.
80 get_filename_component(__CLDNN_FileDir "${__CLDNN_FilePath}" DIRECTORY)
81 get_filename_component(__CLDNN_DirName "${__CLDNN_FileDir}" NAME)
83 set(__CLDNN_FileLabel "${__CLDNN_Label__actual_kernels}\\${__CLDNN_DirName}")
84 source_group("${__CLDNN_FileLabel}" FILES ${__CLDNN_FilePath})
87 set(__CLDNN_Directory__cl_kernels "${__CLDNN_Directory__core}/cl_kernels")
88 set(__CLDNN_Label__cl_kernels "${__CLDNN_Label__core}\\cl_kernels")
89 file(GLOB_RECURSE __CLDNN_Sources__cl_kernels
90 "${__CLDNN_Directory__cl_kernels}/*.cl"
93 set(__CLDNN_Directory__cg_cache "${CLDNN__CODEGEN_INCDIR}")
94 set(__CLDNN_CGDirectory__cg_cache "${CLDNN__CODEGEN_DIR}/cache")
95 set(__CLDNN_Label__cg_cache "${__CLDNN_Label__core}\\codegen")
96 set(__CLDNN_File__cg_cache__prim_db "ks_primitive_db.inc")
97 set(__CLDNN_Sources__cg_cache
98 "${__CLDNN_Directory__cg_cache}/${__CLDNN_File__cg_cache__prim_db}"
102 set(__CLDNN_AllSources
103 ${__CLDNN_Sources__main}
104 ${__CLDNN_Sources__core}
105 ${__CLDNN_Sources__common}
106 ${__CLDNN_Sources__core_common}
107 ${__CLDNN_Sources__actual_kernels}
108 ${__CLDNN_Sources__cl_kernels}
109 ${__CLDNN_Sources__cg_cache}
111 # Helping with some generators.
112 set_property(SOURCE ${__CLDNN_Sources__cg_cache} PROPERTY GENERATED TRUE)
114 # =============================================== Filters ==============================================
116 source_group("${__CLDNN_Label__main}" FILES ${__CLDNN_Sources__main})
117 source_group("${__CLDNN_Label__core}" FILES ${__CLDNN_Sources__core})
118 source_group("${__CLDNN_Label__common}" FILES ${__CLDNN_Sources__common})
119 source_group("${__CLDNN_Label__core_common}" FILES ${__CLDNN_Sources__core_common})
120 #source_group("${__CLDNN_Label__actual_kernels}" FILES ${__CLDNN_Sources__actual_kernels})
121 source_group("${__CLDNN_Label__cl_kernels}" FILES ${__CLDNN_Sources__cl_kernels})
122 source_group("${__CLDNN_Label__cg_cache}" FILES ${__CLDNN_Sources__cg_cache})
124 # ===================================== Include/Link directories =======================================
127 "${__CLDNN_Directory__main}"
128 "${__CLDNN_Directory__core}"
129 "${__CLDNN_Directory__core}/common"
130 "${__CLDNN_Directory__actual_kernels}"
131 "${__CLDNN_Directory__common}"
134 # =================================== Link targets and dependencies ====================================
136 # Main shared library.
137 add_library("${CLDNN_BUILD__PROJ}" STATIC
138 ${__CLDNN_AllSources}
141 set_property(TARGET "${CLDNN_BUILD__PROJ}" PROPERTY PROJECT_LABEL "${CLDNN_BUILD__PROJ_LABEL}")
142 set_property(TARGET "${CLDNN_BUILD__PROJ}" PROPERTY OUTPUT_NAME "${CLDNN_BUILD__PROJ_OUTPUT_NAME}")
145 target_link_libraries("${CLDNN_BUILD__PROJ}"
150 target_link_libraries("${CLDNN_BUILD__PROJ}" setupapi)
151 elseif((NOT ANDROID) AND (UNIX))
152 target_link_libraries("${CLDNN_BUILD__PROJ}" pthread)
154 target_link_libraries("${CLDNN_BUILD__PROJ}" ${CLDNN__SYSTEM_LINK_LIBRARIES})
156 # =================================== Custom pre- and post-steps =======================================
158 add_custom_command(OUTPUT "${__CLDNN_CGDirectory__cg_cache}/${__CLDNN_File__cg_cache__prim_db}"
159 COMMAND "${CMAKE_COMMAND}" -E make_directory "${__CLDNN_CGDirectory__cg_cache}"
160 COMMAND "${PYTHON_EXECUTABLE}" "${__CLDNN_Directory__core_common}/primitive_db_gen.py" -out_path "${__CLDNN_CGDirectory__cg_cache}" -out_file_name "${__CLDNN_File__cg_cache__prim_db}" -kernels "${__CLDNN_Directory__cl_kernels}"
161 DEPENDS ${__CLDNN_Sources__cl_kernels} "${__CLDNN_Directory__core_common}/primitive_db_gen.py"
162 COMMENT "Generating ${__CLDNN_File__cg_cache__prim_db} ..."
164 add_custom_command(OUTPUT "${__CLDNN_Directory__cg_cache}/${__CLDNN_File__cg_cache__prim_db}"
165 COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${__CLDNN_CGDirectory__cg_cache}/${__CLDNN_File__cg_cache__prim_db}" "${__CLDNN_Directory__cg_cache}/${__CLDNN_File__cg_cache__prim_db}"
166 DEPENDS "${__CLDNN_CGDirectory__cg_cache}/${__CLDNN_File__cg_cache__prim_db}" ${__CLDNN_Sources__cl_kernels} "${__CLDNN_Directory__core_common}/primitive_db_gen.py"
167 COMMENT "Updating file if the file changed (${__CLDNN_File__cg_cache__prim_db}) ..."
170 # ======================================================================================================