Publishing R3
[platform/upstream/dldt.git] / inference-engine / thirdparty / clDNN / kernel_selector / 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 # =================================== Name / Output settings from parent ===============================
16
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}")
20
21 # ========================================== Compiler options ==========================================
22
23 intel_config_flag_apply_settings(
24     CompilerOptions
25     CMAKE_CXX_FLAGS
26     ALL_PATTERN ""
27     SET
28       RttiEnabled
29   )
30
31 # ================================== Compiler preprocessor definitions =================================
32
33 if (CLDNN__ENABLE_PERSISTENT_CACHE)
34   set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS CLDNN_ENABLE_PERSISTENT_CACHE)
35 endif ()
36
37 # ========================================= Source/Header files ========================================
38
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"
45   )
46   
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"
53   )
54
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"
61   )
62   
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"
69   )
70
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"
77   )
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)
82   
83   set(__CLDNN_FileLabel "${__CLDNN_Label__actual_kernels}\\${__CLDNN_DirName}")
84   source_group("${__CLDNN_FileLabel}" FILES ${__CLDNN_FilePath})
85 endforeach()
86
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"
91   )
92
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}"
99   )
100
101
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}
110   )
111 # Helping with some generators.
112 set_property(SOURCE ${__CLDNN_Sources__cg_cache} PROPERTY GENERATED TRUE)
113
114 # =============================================== Filters ==============================================
115
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})
123
124 # ===================================== Include/Link directories =======================================
125
126 include_directories(
127     "${__CLDNN_Directory__main}"
128     "${__CLDNN_Directory__core}"
129     "${__CLDNN_Directory__core}/common"
130     "${__CLDNN_Directory__actual_kernels}"
131     "${__CLDNN_Directory__common}"
132   )
133
134 # =================================== Link targets and dependencies ====================================
135
136 # Main shared library.
137 add_library("${CLDNN_BUILD__PROJ}" STATIC
138     ${__CLDNN_AllSources}
139   )
140
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}")
143
144
145 target_link_libraries("${CLDNN_BUILD__PROJ}"
146     OpenCL
147   )
148
149 if(WIN32)
150   target_link_libraries("${CLDNN_BUILD__PROJ}" setupapi)
151 elseif((NOT ANDROID) AND (UNIX))
152   target_link_libraries("${CLDNN_BUILD__PROJ}" pthread)
153 endif()
154 target_link_libraries("${CLDNN_BUILD__PROJ}" ${CLDNN__SYSTEM_LINK_LIBRARIES})
155
156 # =================================== Custom pre- and post-steps =======================================
157
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} ..."
163   )
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}) ..."
168   )
169
170 # ======================================================================================================