[IE][VPU]: Update call signature with the fw from R14 develop branch (#3241)
[platform/upstream/dldt.git] / inference-engine / cmake / vpu_dependencies.cmake
1 # Copyright (C) 2018-2020 Intel Corporation
2 # SPDX-License-Identifier: Apache-2.0
3 #
4
5 if(CMAKE_VERSION VERSION_GREATER 3.9.6)
6     include_guard(GLOBAL)
7 else()
8     if(__CURRENT_FILE_VAR__)
9       return()
10     endif()
11     set(__CURRENT_FILE_VAR__ TRUE)
12 endif()
13
14 include(dependency_solver)
15
16 set(VPU_SUPPORTED_FIRMWARES usb-ma2x8x pcie-ma248x)
17
18 #
19 # Default packages
20 #
21
22 set(FIRMWARE_PACKAGE_VERSION 1508)
23 set(VPU_CLC_MA2X8X_VERSION "movi-cltools-20.09.2")
24
25 #
26 # CMake variables to override default firmware files
27 #
28
29 foreach(firmware_name IN LISTS VPU_SUPPORTED_FIRMWARES)
30     string(TOUPPER "${firmware_name}" firmware_name_upper)
31
32     set(firmware_name_full ${firmware_name}.mvcmd)
33     # Handle PCIe elf firmware for Windows
34     if (WIN32 AND "${firmware_name}" STREQUAL "pcie-ma248x")
35         set(firmware_name_full ${firmware_name}.elf)
36     endif ()
37
38     reset_deps_cache(VPU_FIRMWARE_${firmware_name_upper}_FILE)
39
40     RESOLVE_DEPENDENCY(VPU_FIRMWARE_${firmware_name_upper}
41         ARCHIVE_UNIFIED VPU/${firmware_name}/firmware_${firmware_name}_${FIRMWARE_PACKAGE_VERSION}.zip
42         TARGET_PATH "${TEMP}/vpu/firmware/${firmware_name}"
43         ENVIRONMENT "VPU_FIRMWARE_${firmware_name_upper}_FILE"
44         FOLDER)
45     debug_message(STATUS "${firmware_name}=" ${VPU_FIRMWARE_${firmware_name_upper}})
46
47     update_deps_cache(
48         VPU_FIRMWARE_${firmware_name_upper}_FILE
49         "${VPU_FIRMWARE_${firmware_name_upper}}/mvnc/${firmware_name_full}"
50         "[VPU] ${firmware_name_full} firmware")
51
52     find_file(
53         VPU_FIRMWARE_${firmware_name_upper}_FILE
54         NAMES ${firmware_name_full}
55         NO_CMAKE_FIND_ROOT_PATH)
56     if(NOT VPU_FIRMWARE_${firmware_name_upper}_FILE)
57         message(FATAL_ERROR "[VPU] Missing ${firmware_name_full} firmware")
58     endif()
59 endforeach()
60
61 #
62 # `vpu_copy_firmware` CMake target
63 #
64
65 foreach(firmware_name IN LISTS VPU_SUPPORTED_FIRMWARES)
66     string(TOUPPER "${firmware_name}" firmware_name_upper)
67     set(var_name VPU_FIRMWARE_${firmware_name_upper}_FILE)
68
69     set(firmware_out_file "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/${firmware_name}.mvcmd")
70
71     # Handle PCIe elf firmware for Windows
72     if (WIN32 AND "${firmware_name}" STREQUAL "pcie-ma248x")
73         set(firmware_out_file "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/${firmware_name}.elf")
74     endif ()
75
76     list(APPEND all_firmware_files ${firmware_out_file})
77     add_custom_command(
78         OUTPUT ${firmware_out_file}
79         COMMAND
80             ${CMAKE_COMMAND} -E copy ${${var_name}} ${firmware_out_file}
81         MAIN_DEPENDENCY ${${var_name}}
82         COMMENT "[VPU] Copy ${${var_name}} to ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}"
83         VERBATIM)
84
85     install(FILES ${${var_name}}
86         DESTINATION ${IE_CPACK_RUNTIME_PATH}
87         COMPONENT myriad)
88 endforeach()
89
90 add_custom_target(vpu_copy_firmware
91     DEPENDS ${all_firmware_files}
92     COMMENT "[VPU] Copy firmware files")
93
94 #
95 # libusb
96 #
97
98 if(ANDROID)
99     RESOLVE_DEPENDENCY(LIBUSB
100         ARCHIVE_ANDROID "libusb_39409_android.tgz"
101         TARGET_PATH "${TEMP}/vpu/libusb")
102     debug_message(STATUS "LIBUSB=" ${LIBUSB})
103
104     set(LIBUSB_INCLUDE_DIR "${LIBUSB}/include")
105     set(LIBUSB_LIBRARY "${LIBUSB}/libs/${ANDROID_ABI}/libusb1.0.so")
106
107     log_rpath_from_dir(LIBUSB "${LIBUSB}/libs/${ANDROID_ABI}")
108 endif()
109
110 #
111 # OpenCL compiler
112 #
113
114 if(LINUX AND LINUX_OS_NAME MATCHES "Ubuntu")
115     if(DEFINED ENV{THIRDPARTY_SERVER_PATH})
116         set(IE_PATH_TO_DEPS "$ENV{THIRDPARTY_SERVER_PATH}")
117     elseif(DEFINED THIRDPARTY_SERVER_PATH)
118         set(IE_PATH_TO_DEPS "${THIRDPARTY_SERVER_PATH}")
119     else()
120         message(WARNING "VPU_OCL_COMPILER is not found. Some tests will skipped")
121     endif()
122
123     if(DEFINED IE_PATH_TO_DEPS)
124         message(STATUS "THIRDPARTY_SERVER_PATH=${IE_PATH_TO_DEPS}")
125
126         reset_deps_cache(VPU_CLC_MA2X8X_ROOT)
127         reset_deps_cache(VPU_CLC_MA2X8X_COMMAND)
128
129         RESOLVE_DEPENDENCY(VPU_CLC_MA2X8X
130             ARCHIVE_LIN "VPU_OCL_compiler/${VPU_CLC_MA2X8X_VERSION}.tar.gz"
131             TARGET_PATH "${TEMP}/vpu/clc/ma2x8x/${VPU_CLC_MA2X8X_VERSION}"
132             ENVIRONMENT "VPU_CLC_MA2X8X_COMMAND")
133         debug_message(STATUS "VPU_CLC_MA2X8X=" ${VPU_CLC_MA2X8X})
134
135         update_deps_cache(
136             VPU_CLC_MA2X8X_ROOT
137             "${VPU_CLC_MA2X8X}"
138             "[VPU] Root directory of OpenCL compiler")
139
140         update_deps_cache(
141             VPU_CLC_MA2X8X_COMMAND
142             "${VPU_CLC_MA2X8X}/bin/clc"
143             "[VPU] OpenCL compiler")
144
145         find_program(VPU_CLC_MA2X8X_COMMAND clc)
146         unset (IE_PATH_TO_DEPS)
147     endif()
148 endif()
149
150 #
151 # `vpu_custom_kernels` CMake target
152 #
153
154 add_library(vpu_custom_kernels INTERFACE)
155
156 function(add_vpu_compile_custom_kernels)
157     set(SRC_DIR "${IE_MAIN_SOURCE_DIR}/src/vpu/custom_kernels")
158     set(DST_DIR "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/vpu_custom_kernels")
159
160     file(MAKE_DIRECTORY "${DST_DIR}")
161
162     file(GLOB XML_FILES "${SRC_DIR}/*.xml")
163     file(GLOB CL_FILES "${SRC_DIR}/*.cl")
164
165     foreach(xml_file IN LISTS XML_FILES)
166         get_filename_component(xml_file_name ${xml_file} NAME)
167
168         set(out_file "${DST_DIR}/${xml_file_name}")
169         list(APPEND all_output_files ${out_file})
170
171         add_custom_command(
172             OUTPUT ${out_file}
173             COMMAND
174                 ${CMAKE_COMMAND} -E copy ${xml_file} ${out_file}
175             MAIN_DEPENDENCY ${xml_file}
176             COMMENT "[VPU] Copy ${xml_file} to ${DST_DIR}"
177             VERBATIM)
178     endforeach()
179
180     foreach(cl_file IN LISTS CL_FILES)
181         get_filename_component(cl_file_name ${cl_file} NAME_WE)
182
183         set(out_file "${DST_DIR}/${cl_file_name}.bin")
184         list(APPEND all_output_files ${out_file})
185
186         add_custom_command(
187             OUTPUT ${out_file}
188             COMMAND
189                 ${CMAKE_COMMAND} -E env
190                     "SHAVE_LDSCRIPT_DIR=${VPU_CLC_MA2X8X}/ldscripts/ma2x8x"
191                     "SHAVE_MA2X8XLIBS_DIR=${VPU_CLC_MA2X8X}/lib"
192                     "SHAVE_MOVIASM_DIR=${VPU_CLC_MA2X8X}/bin"
193                     "SHAVE_MYRIAD_LD_DIR=${VPU_CLC_MA2X8X}/bin"
194                 ${VPU_CLC_MA2X8X_COMMAND} --strip-binary-header -d ma2x8x ${cl_file} -o ${out_file}
195             MAIN_DEPENDENCY ${cl_file}
196             DEPENDS ${VPU_CLC_MA2X8X_COMMAND}
197             COMMENT "[VPU] Compile ${cl_file}"
198             VERBATIM)
199     endforeach()
200
201     add_custom_target(vpu_compile_custom_kernels
202         DEPENDS ${all_output_files}
203         COMMENT "[VPU] Compile custom kernels")
204
205     add_dependencies(vpu_custom_kernels vpu_compile_custom_kernels)
206     target_compile_definitions(vpu_custom_kernels INTERFACE "VPU_HAS_CUSTOM_KERNELS")
207 endfunction()
208
209 if(VPU_CLC_MA2X8X_COMMAND)
210     add_vpu_compile_custom_kernels()
211 endif()