1 # Copyright (C) 2018-2020 Intel Corporation
2 # SPDX-License-Identifier: Apache-2.0
5 if(CMAKE_VERSION VERSION_GREATER 3.9.6)
8 if(__CURRENT_FILE_VAR__)
11 set(__CURRENT_FILE_VAR__ TRUE)
14 include(dependency_solver)
16 set(VPU_SUPPORTED_FIRMWARES usb-ma2x8x pcie-ma248x)
22 set(FIRMWARE_PACKAGE_VERSION 1508)
23 set(VPU_CLC_MA2X8X_VERSION "movi-cltools-20.09.2")
26 # CMake variables to override default firmware files
29 foreach(firmware_name IN LISTS VPU_SUPPORTED_FIRMWARES)
30 string(TOUPPER "${firmware_name}" firmware_name_upper)
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)
38 reset_deps_cache(VPU_FIRMWARE_${firmware_name_upper}_FILE)
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"
45 debug_message(STATUS "${firmware_name}=" ${VPU_FIRMWARE_${firmware_name_upper}})
48 VPU_FIRMWARE_${firmware_name_upper}_FILE
49 "${VPU_FIRMWARE_${firmware_name_upper}}/mvnc/${firmware_name_full}"
50 "[VPU] ${firmware_name_full} firmware")
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")
62 # `vpu_copy_firmware` CMake target
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)
69 set(firmware_out_file "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/${firmware_name}.mvcmd")
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")
76 list(APPEND all_firmware_files ${firmware_out_file})
78 OUTPUT ${firmware_out_file}
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}"
85 install(FILES ${${var_name}}
86 DESTINATION ${IE_CPACK_RUNTIME_PATH}
90 add_custom_target(vpu_copy_firmware
91 DEPENDS ${all_firmware_files}
92 COMMENT "[VPU] Copy firmware files")
99 RESOLVE_DEPENDENCY(LIBUSB
100 ARCHIVE_ANDROID "libusb_39409_android.tgz"
101 TARGET_PATH "${TEMP}/vpu/libusb")
102 debug_message(STATUS "LIBUSB=" ${LIBUSB})
104 set(LIBUSB_INCLUDE_DIR "${LIBUSB}/include")
105 set(LIBUSB_LIBRARY "${LIBUSB}/libs/${ANDROID_ABI}/libusb1.0.so")
107 log_rpath_from_dir(LIBUSB "${LIBUSB}/libs/${ANDROID_ABI}")
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}")
120 message(WARNING "VPU_OCL_COMPILER is not found. Some tests will skipped")
123 if(DEFINED IE_PATH_TO_DEPS)
124 message(STATUS "THIRDPARTY_SERVER_PATH=${IE_PATH_TO_DEPS}")
126 reset_deps_cache(VPU_CLC_MA2X8X_ROOT)
127 reset_deps_cache(VPU_CLC_MA2X8X_COMMAND)
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})
138 "[VPU] Root directory of OpenCL compiler")
141 VPU_CLC_MA2X8X_COMMAND
142 "${VPU_CLC_MA2X8X}/bin/clc"
143 "[VPU] OpenCL compiler")
145 find_program(VPU_CLC_MA2X8X_COMMAND clc)
146 unset (IE_PATH_TO_DEPS)
151 # `vpu_custom_kernels` CMake target
154 add_library(vpu_custom_kernels INTERFACE)
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")
160 file(MAKE_DIRECTORY "${DST_DIR}")
162 file(GLOB XML_FILES "${SRC_DIR}/*.xml")
163 file(GLOB CL_FILES "${SRC_DIR}/*.cl")
165 foreach(xml_file IN LISTS XML_FILES)
166 get_filename_component(xml_file_name ${xml_file} NAME)
168 set(out_file "${DST_DIR}/${xml_file_name}")
169 list(APPEND all_output_files ${out_file})
174 ${CMAKE_COMMAND} -E copy ${xml_file} ${out_file}
175 MAIN_DEPENDENCY ${xml_file}
176 COMMENT "[VPU] Copy ${xml_file} to ${DST_DIR}"
180 foreach(cl_file IN LISTS CL_FILES)
181 get_filename_component(cl_file_name ${cl_file} NAME_WE)
183 set(out_file "${DST_DIR}/${cl_file_name}.bin")
184 list(APPEND all_output_files ${out_file})
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}"
201 add_custom_target(vpu_compile_custom_kernels
202 DEPENDS ${all_output_files}
203 COMMENT "[VPU] Compile custom kernels")
205 add_dependencies(vpu_custom_kernels vpu_compile_custom_kernels)
206 target_compile_definitions(vpu_custom_kernels INTERFACE "VPU_HAS_CUSTOM_KERNELS")
209 if(VPU_CLC_MA2X8X_COMMAND)
210 add_vpu_compile_custom_kernels()