Files
openvino/samples/cpp/benchmark_app/CMakeLists.txt

161 lines
6.2 KiB
CMake

# Copyright (C) 2018-2023 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
#
set(TARGET_NAME "benchmark_app")
file (GLOB SRC ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
file (GLOB HDR ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp)
ie_add_sample(NAME ${TARGET_NAME}
SOURCES ${SRC}
HEADERS ${HDR}
DEPENDENCIES ${GFLAGS_TARGET} format_reader ie_samples_utils)
# Required nlohmann_json dependency
if(NOT ANDROID)
find_package(PkgConfig QUIET)
endif()
if(NOT TARGET nlohmann_json::nlohmann_json)
find_package(nlohmann_json QUIET
# exception for Ubuntu 18.04, where cmake files for nlohmann_json
# are located in a wrong directory
HINTS /usr/lib/cmake)
if(TARGET nlohmann_json)
# Ubuntu 18.04 case where target 'nlohmann_json' is here, but nlohmann_json_FOUND is OFF
if(NOT TARGET nlohmann_json::nlohmann_json)
add_library(nlohmann_json::nlohmann_json ALIAS nlohmann_json)
endif()
set(nlohmann_json_FOUND ON)
endif()
if(nlohmann_json_FOUND)
message(STATUS "nlohmann_json (${nlohmann_json_VERSION}) is found at ${nlohmann_json_DIR}")
elseif(PkgConfig_FOUND)
pkg_search_module(nlohmann_json QUIET
IMPORTED_TARGET GLOBAL
nlohmann_json)
if(nlohmann_json_FOUND)
add_library(nlohmann_json::nlohmann_json ALIAS PkgConfig::nlohmann_json)
endif()
endif()
if(NOT nlohmann_json_FOUND)
# try to find header file json.hpp
# for example, on debian 9 there is no cmake / pkgconfig files
find_file(nlohmann_include_file
NAMES "json.hpp"
"Path to json.hpp (nlohmann-json-dev)")
if(nlohmann_include_file)
add_library(nlohmann_json::nlohmann_json INTERFACE IMPORTED)
get_filename_component(nlohmann_include_dir "${nlohmann_include_file}" PATH)
set_target_properties(nlohmann_json::nlohmann_json PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${nlohmann_include_dir}"
INTERFACE_COMPILE_DEFINITIONS JSON_HEADER)
set(nlohmann_json_FOUND ON)
endif()
endif()
if(NOT nlohmann_json_FOUND)
if(EXISTS "${Samples_SOURCE_DIR}/thirdparty/nlohmann_json")
# OpenVINO package puts thirdparty to samples dir
# suppress shadowing names warning
set(JSON_SystemInclude ON CACHE BOOL "" FORCE)
add_subdirectory("${Samples_SOURCE_DIR}/thirdparty/nlohmann_json"
"${Samples_BINARY_DIR}/thirdparty/nlohmann_json" EXCLUDE_FROM_ALL)
elseif(EXISTS "${Samples_SOURCE_DIR}../../thirdparty/nlohmann_json")
# Allow running samples CMakeLists.txt as stand alone from openvino sources
# suppress shadowing names warning
set(JSON_SystemInclude ON CACHE BOOL "" FORCE)
add_subdirectory("${Samples_SOURCE_DIR}../../thirdparty/nlohmann_json"
"${Samples_BINARY_DIR}/thirdparty/nlohmann_json" EXCLUDE_FROM_ALL)
else()
message(FATAL_ERROR "Failed to find / build nlohmann_json library")
endif()
endif()
endif()
target_link_libraries(${TARGET_NAME} PRIVATE nlohmann_json::nlohmann_json)
# Optional OpenCL dependnency
if(DEFINED ENABLE_INTEL_GPU AND NOT ENABLE_INTEL_GPU)
# Intel GPU plugin is turned off explicitly
option(SAMPLES_ENABLE_OPENCL "Use OpenCL in benchmark_app" OFF)
else()
option(SAMPLES_ENABLE_OPENCL "Use OpenCL in benchmark_app" ON)
endif()
if(SAMPLES_ENABLE_OPENCL)
find_package(OpenCL QUIET)
if(NOT OpenCL_FOUND)
message(WARNING "OpenCL is disabled or not found, ${TARGET_NAME} will be built without OpenCL support. Install OpenCL.")
endif()
set(opencl_header_search_params
HINTS
${opencl_root_hints}
PATHS
ENV "PROGRAMFILES(X86)"
ENV AMDAPPSDKROOT
ENV INTELOCLSDKROOT
ENV NVSDKCOMPUTE_ROOT
ENV CUDA_PATH
ENV ATISTREAMSDKROOT
ENV OCL_ROOT
PATH_SUFFIXES
"include"
"OpenCL/common/inc"
"AMD APP/include")
find_path(OpenCL_HPP_INCLUDE_DIR
NAMES
CL/opencl.hpp OpenCL/opencl.hpp
${opencl_header_search_params})
find_path(CL2_HPP_INCLUDE_DIR
NAMES
CL/cl2.hpp OpenCL/cl2.hpp
${opencl_header_search_params})
if(OpenCL_FOUND AND (OpenCL_HPP_INCLUDE_DIR OR CL2_HPP_INCLUDE_DIR))
set(OpenCL_DEFINITIONS HAVE_GPU_DEVICE_MEM_SUPPORT)
# Append OpenCL CPP headers to C headers and use both
if(OpenCL_HPP_INCLUDE_DIR)
list(APPEND OpenCL_HEADERS ${OpenCL_HPP_INCLUDE_DIR})
# the macro below is defined when opencl.hpp is found to suppress deprecation message from cl2.hpp
list(APPEND OpenCL_DEFINITIONS OV_GPU_USE_OPENCL_HPP)
endif()
if(CL2_HPP_INCLUDE_DIR)
list(APPEND OpenCL_HEADERS ${CL2_HPP_INCLUDE_DIR})
endif()
# cmake cannot set properties for imported targets
get_target_property(opencl_target OpenCL::OpenCL ALIASED_TARGET)
if(NOT TARGET ${opencl_target})
set(opencl_target OpenCL::OpenCL)
endif()
set_property(TARGET ${opencl_target} APPEND PROPERTY
INTERFACE_INCLUDE_DIRECTORIES ${OpenCL_HEADERS})
set_property(TARGET ${opencl_target} APPEND PROPERTY
INTERFACE_COMPILE_DEFINITIONS ${OpenCL_DEFINITIONS})
target_link_libraries(${TARGET_NAME} PRIVATE OpenCL::OpenCL)
else()
message(WARNING "OpenCL CPP header is not found, ${TARGET_NAME} will be built without OpenCL support. Download it from: https://github.com/KhronosGroup/OpenCL-CLHPP and set -Dopencl_root_hints=[PATH]/OpenCL-CLHPP/include to cmake.")
endif()
endif()
# Optional OpenCV dependency
find_package(OpenCV QUIET COMPONENTS core)
if(NOT OpenCV_FOUND)
message(WARNING "OpenCV is disabled or not found, ${TARGET_NAME} will be built without OpenCV support. Set OpenCV_DIR")
else()
target_compile_definitions(${TARGET_NAME} PRIVATE USE_OPENCV)
target_link_libraries(${TARGET_NAME} PRIVATE opencv_core)
endif()