Files
openvino/samples/cpp/CMakeLists.txt
River Li cbbac125f8 [C API] Refine OV 2.0 C APIs for better expansibility and compatibility (#12187)
* [C API 2.0]Redifine partial shape and property wrapper

1. Use dimension object to initialize partial_shape rather than string
2. Use void* to unify property value rather than union
3. rename some C api name to strict align with C++ method.

Change-Id: I64b5c521461264dba2d23543808584632fbd6d4b

* [C API 2.0]Memory check and implement all reshape interface

1. Memory safe create and free
2. Implement all reshape interface align with C++ interface
3. rename some api to align with C++ interface

Change-Id: Ib5e4192bdbd8a11cdd7e30b1dc84881ba3f2d505

* Rename prepostprocess to strict align with C++ name

Change-Id: I7a4d0a6e835b2d6ed01cd218ac81b1b621f600bf

* [C API 2.0]redefine ov_node and ov_model interface

1. redefine ov_node and ov_model interface
2. rename some api to aligne with C++ interface
3. remove some redundant code
4. align CMakeLists.txt with OpenVINO 2.0 convention

Change-Id: I4d5e92157e7891319c9754da8e70b9c6150ae2e3

* Redefine ov_layout to support more than one char

Change-Id: I39e5389246cf3edcc2f4734d13157457773d89b8

* Add interface to get partial_shape from node

Change-Id: I8cef77db581b43d2f0a9ac48cfdc09a86e39b694

* Use unique_ptr prevent memory leaks in case of exception

Change-Id: I150b375108a3eded400bdde087ab5c858958c25f

* Put legacy C API and 2.0 C API into a library

Change-Id: I067a55a00e78b80cdede5ae7adad316ee98cabd1

* Only keep OV 2.0 C sample and move legacy C sample to legacy directory

1. Move legacy C samples to tools/legacy/c directory
2. Keep OV 2.0 C samples in samples/c directory

Change-Id: I05880d17ee7cb7eafc6853ebb5394f3969258592

* Fix format and log issues

Change-Id: I05d909b3d7046d41b807e35808a993bb09672e68

* Restore documents update

Change-Id: I82dd92081c0aa1a2d7dca7f114cf6a35131d6f92

* Change config map data be const

Change-Id: I9043859e8308c01d80794dc8280ae236947f3bbb

* Update api document

Change-Id: I35bc149bad0de17424d95f48c3027030b708e147

* Add clang enable

Change-Id: I335639c05fb5fb38e682dbb72bfaf78380c0adaf

* Fix clang issue after enable clang for ie_c_api.c

Change-Id: Idcb4dda9d66e47a169eb79a9c4fe7a7d4df838db

* split header file and c file into multiple files

Change-Id: I7c3398966809ef70d7fcb799f2d612a33b471e31

* Fix clang format issue

Change-Id: Ibd18b45537c8f3bcbb5b995c90ae28999161d54d

* Add single ov_dimension_create method

Change-Id: Icd06b50e4f4df8f7897c7c4327edb67178162544

* Remove all legacy c samples completely

Change-Id: I098360a0d9002340e8769074181f7997b43bce8f

* Update ov_property_value to replace only ptr

Change-Id: I9f5a11b4cf07e759c1998e78e2624f0a1266d9b0

* Split more header files, add static dimension api

Change-Id: I14e4fb8585fc629480c06b86bd8219e75a9682f7

* Change ov_dimensions_create to be ov_dimensions_create_dynamic

Change-Id: I50c02749cea96f12bcea702b53a89c65b289550e

* rename status and get_out_tensor

Change-Id: I762c1d0c5a069454506fe3c04283c63ddbfacf31

* Split ov_c_api_test.cpp

* Split OV2.0 CAPI tests

* move var into Setup

* Merge legacy and 2.0 C API test

* Merge InferenceEngineCAPITests into openvino_capi_test

1. put InferenceEngineCAPITests into openvino_capi_test
2. resolve some format issues

Change-Id: I47bbba6bd70a871ee063becbd80eb57919fa9fb0

* legacy api test skips clang format

Change-Id: Id54ecdba827cf98c99b92295c0a0772123098b63

* Fix clang format issue

Change-Id: I7ed510d8178971fe04a895e812c261db99d8b9f2

* Restore InferenceEngineCAPITests

Change-Id: I4d641ffb1de9ce4d20ebecf35fc036fa7bd73e55

* rename openvino_capi_test to ov_capi_test

Change-Id: I6b6fe0cdb89aab7210abb17f32dbfdcdce72ba25

* unify list size name and refine ov_core_version_t

Change-Id: I137fc6d990c7b07f597ee94fa3b98d07ae843cb6

* align header file path to be openvino/c/openvino.h

Change-Id: I1a4552e1d558098af704942fe45488b0d6d53a90

* Fix path issue

Change-Id: I84d425d25e3b08c1516cbcc842fb9cb75574bf17

* move ov_color_format and remove opencv depenency

Change-Id: I486145f9e92e8bbf2e937d3572334aa9f0e68841

* Resolve some memory allocation error handling issues and read model with empty weight issue

Change-Id: Icd8e3b6de9741147993fa215a0c7cfd7debd5500

* Add GPU test cases

Change-Id: I13324ef019b5b1af79259ca932a36a0cec792c27

* Fix clang issue

Change-Id: I9bb4c47de301d142b5e2a77a39f667689ad9fe38

* Resolve CI test failure

Change-Id: Ia327d5edab19d8dd44ac369670f190d5c57aca79

* Redefine ov_shape and add default ov_core_create

Change-Id: I3e47d607f8aad65cb99cdddacaecf7bf34b1361b

* Remove some unnecessary api of node

Remove the unnecessary node api:
     ov_node_get_any_name(ov_output_const_node_t* node, char** tensor_name)
     ov_node_get_element_type(ov_output_const_node_t* node, ov_element_type_e* tensor_type)

Change-Id: I80a3243676800263a9e56afa3cfffce7b4bd2ae7

* Rename reshape api

ov_model_reshape should be common case which allow to reshape any models with different number of input.

Change-Id: I26bafeeb8a3dda7cd5164cda15fdb338db8668cb

* Rename ov_node api

Change-Id: I03114ecb6de5c46b6d02c909b6f6fb6c8bfd5cba

* Remove subfolder out of source code

Change-Id: Ib033ae7712cc0460d6fc21a0f89818381ae503c0

* apply absolute path for all header files

Change-Id: I8024c897d424b407025e21460ed4b62829b853d2

* Fix CI issue ov_capi_test failed to find libgna

Change-Id: I166e79a818498c6721fe956f43873f36d9ae1e07

* Resolve build issue to align with PR12214

Change-Id: I9e6094db213b431ee1b46e0d64199131db33bb36

Co-authored-by: ruiqi <ruiqi.yang@intel.com>
2022-08-14 19:51:34 +04:00

278 lines
9.4 KiB
CMake

# Copyright (C) 2018-2022 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
#
cmake_minimum_required (VERSION 3.10)
# Enable CMAKE_<LANG>_COMPILER_ID AppleClang
cmake_policy(SET CMP0025 NEW)
project(Samples)
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "CMake build type")
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Release" "Debug" "RelWithDebInfo" "MinSizeRel")
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
if (NOT BIN_FOLDER)
string(TOLOWER ${CMAKE_SYSTEM_PROCESSOR} ARCH)
if(ARCH STREQUAL "x86_64" OR ARCH STREQUAL "amd64") # Windows detects Intel's 64-bit CPU as AMD64
set(ARCH intel64)
elseif(ARCH STREQUAL "i386")
set(ARCH ia32)
endif()
set (BIN_FOLDER ${ARCH})
if(UNIX)
set(BIN_FOLDER "${BIN_FOLDER}/${CMAKE_BUILD_TYPE}")
endif()
endif()
if(OpenVINO_SOURCE_DIR)
# in case if samples are built from IE repo
set(IE_MAIN_SAMPLES_DIR "${OpenVINO_SOURCE_DIR}")
set(OpenVINO_DIR "${CMAKE_BINARY_DIR}")
else()
# in case if samples are built out of IE repo
set(IE_MAIN_SAMPLES_DIR ${CMAKE_CURRENT_BINARY_DIR})
endif()
set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${IE_MAIN_SAMPLES_DIR}/${BIN_FOLDER})
set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${IE_MAIN_SAMPLES_DIR}/${BIN_FOLDER})
set (CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY ${IE_MAIN_SAMPLES_DIR}/${BIN_FOLDER})
set (CMAKE_PDB_OUTPUT_DIRECTORY ${IE_MAIN_SAMPLES_DIR}/${BIN_FOLDER})
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${IE_MAIN_SAMPLES_DIR}/${BIN_FOLDER})
if (WIN32)
set_property (DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS _CRT_SECURE_NO_WARNINGS)
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_SCL_SECURE_NO_WARNINGS")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc") # no asynchronous structured exception handling
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE")
if (TREAT_WARNING_AS_ERROR)
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX") # treating warnings as errors
endif ()
if (CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Qdiag-disable:177")
endif()
# disable some noisy warnings
if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4251 /wd4275 /wd4267 /wd4819")
endif()
else()
# treating warnings as errors
if(TREAT_WARNING_AS_ERROR)
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
endif()
if (CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -diag-disable:177")
endif()
endif()
if(APPLE)
set(CMAKE_MACOSX_RPATH ON)
endif()
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm64.*|aarch64.*|AARCH64.*)")
set(AARCH64 ON)
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm.*|ARM.*)")
set(ARM ON)
endif()
if(ARM AND NOT CMAKE_CROSSCOMPILING)
add_compile_options(-march=armv7-a)
endif()
if(NOT COMMAND find_host_package)
macro(find_host_package)
find_package(${ARGN})
endmacro()
endif()
set(CMAKE_POLICY_DEFAULT_CMP0063 NEW)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
set(CMAKE_C_VISIBILITY_PRESET hidden)
set(CMAKE_VISIBILITY_INLINES_HIDDEN ON)
####################################
## to use C++11; can overwritten via cmake command line
if(NOT DEFINED CMAKE_CXX_STANDARD)
set (CMAKE_CXX_STANDARD 11)
set (CMAKE_CXX_EXTENSIONS OFF)
set (CMAKE_CXX_STANDARD_REQUIRED ON)
endif()
####################################
if(NOT TARGET gflags)
if(NOT APPLE)
# on Apple only dynamic libraries are available
find_package(gflags QUIET COMPONENTS nothreads_static)
endif()
if(gflags_FOUND)
message(STATUS "gflags (${gflags_VERSION}) is found at ${gflags_DIR}")
elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/gflags")
add_subdirectory(thirdparty/gflags EXCLUDE_FROM_ALL)
endif()
endif()
if(NOT TARGET zlib::zlib)
if(NOT CMAKE_CROSSCOMPILING)
find_host_package(PkgConfig QUIET)
if(PkgConfig_FOUND)
pkg_search_module(zlib QUIET
IMPORTED_TARGET
zlib)
if(zlib_FOUND)
set_target_properties(PkgConfig::zlib PROPERTIES IMPORTED_GLOBAL ON)
add_library(zlib::zlib ALIAS PkgConfig::zlib)
endif()
endif()
endif()
if(zlib_FOUND)
message(STATUS "zlib (${zlib_VERSION}) is found at ${zlib_PREFIX}")
elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/zlib")
add_subdirectory(thirdparty/zlib EXCLUDE_FROM_ALL)
endif()
endif()
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/cnpy")
add_subdirectory(thirdparty/cnpy EXCLUDE_FROM_ALL)
endif()
if(NOT TARGET nlohmann_json::nlohmann_json)
find_package(nlohmann_json QUIET)
if(nlohmann_json_FOUND)
message(STATUS "nlohmann_json (${nlohmann_json_VERSION}) is found at ${nlohmann_json_DIR}")
elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/nlohmann_json")
# suppress shadowing names warning
set(JSON_SystemInclude ON CACHE BOOL "" FORCE)
add_subdirectory(thirdparty/nlohmann_json EXCLUDE_FROM_ALL)
endif()
endif()
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/common/utils")
add_subdirectory(common/utils)
endif()
# format reader must be added after find_package(OpenVINO) to get
# exactly the same OpenCV_DIR path which was used for the OpenVINO build
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/common/format_reader")
add_subdirectory(common/format_reader)
elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/common/opencv_c_wrapper")
add_subdirectory(common/opencv_c_wrapper)
endif()
# samples build can be switched off during whole IE build
if (DEFINED OpenVINO_SOURCE_DIR AND NOT ENABLE_SAMPLES)
return()
endif()
function(add_samples_to_build)
# check each passed sample subdirectory
foreach (dir ${ARGN})
if (IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${dir})
# check if a subdirectory contains CMakeLists.txt. In this case we can build it.
file(GLOB is_sample_dir "${CMAKE_CURRENT_SOURCE_DIR}/${dir}/CMakeLists.txt")
if(is_sample_dir)
# check if specified sample/demo is found.
if (BUILD_SAMPLE_NAME)
list(FIND BUILD_SAMPLE_NAME ${dir} index)
endif()
if (index EQUAL -1)
message(STATUS "${dir} SKIPPED")
else()
# Include subdirectory to the project.
add_subdirectory(${dir})
endif()
endif()
endif()
endforeach()
endfunction(add_samples_to_build)
include(CMakeParseArguments)
#
# ie_add_sample(NAME <target name>
# SOURCES <source files>
# [HEADERS <header files>]
# [INCLUDE_DIRECTORIES <include dir>]
# [DEPENDENCIES <dependencies>]
# [EXCLUDE_CLANG_FORMAT]
#
macro(ie_add_sample)
set(options EXCLUDE_CLANG_FORMAT)
set(oneValueArgs NAME)
set(multiValueArgs SOURCES HEADERS DEPENDENCIES INCLUDE_DIRECTORIES)
cmake_parse_arguments(IE_SAMPLE "${options}" "${oneValueArgs}"
"${multiValueArgs}" ${ARGN} )
# Create named folders for the sources within the .vcproj
# Empty name lists them directly under the .vcproj
source_group("src" FILES ${IE_SAMPLE_SOURCES})
if(IE_SAMPLE_HEADERS)
source_group("include" FILES ${IE_SAMPLE_HEADERS})
endif()
# Create executable file from sources
add_executable(${IE_SAMPLE_NAME} ${IE_SAMPLE_SOURCES} ${IE_SAMPLE_HEADERS})
set(folder_name cpp_samples)
if(IE_SAMPLE_NAME MATCHES ".*_c$")
set(c_sample ON)
set(folder_name c_samples)
endif()
find_package(OpenVINO REQUIRED COMPONENTS Runtime)
if(c_sample)
set(ov_link_libraries openvino::runtime::c)
else()
set(ov_link_libraries openvino::runtime)
endif()
set_target_properties(${IE_SAMPLE_NAME} PROPERTIES FOLDER ${folder_name}
COMPILE_PDB_NAME ${IE_SAMPLE_NAME})
if(IE_SAMPLE_INCLUDE_DIRECTORIES)
target_include_directories(${IE_SAMPLE_NAME} PRIVATE ${IE_SAMPLE_INCLUDE_DIRECTORIES})
endif()
target_include_directories(${IE_SAMPLE_NAME} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../common")
target_link_libraries(${IE_SAMPLE_NAME} PRIVATE ${ov_link_libraries} ${IE_SAMPLE_DEPENDENCIES})
if(NOT c_sample)
target_link_libraries(${IE_SAMPLE_NAME} PRIVATE gflags)
endif()
install(TARGETS ${IE_SAMPLE_NAME}
RUNTIME DESTINATION samples_bin/
COMPONENT samples_bin
EXCLUDE_FROM_ALL)
# create global target with all samples / demo apps
if(NOT TARGET ie_samples)
add_custom_target(ie_samples ALL)
endif()
add_dependencies(ie_samples ${IE_SAMPLE_NAME})
if(COMMAND add_clang_format_target AND NOT IE_SAMPLE_EXCLUDE_CLANG_FORMAT)
add_clang_format_target(${IE_SAMPLE_NAME}_clang FOR_SOURCES ${IE_SAMPLE_SOURCES} ${IE_SAMPLE_HEADERS})
endif()
if(COMMAND ov_ncc_naming_style AND NOT c_sample)
ov_ncc_naming_style(FOR_TARGET "${IE_SAMPLE_NAME}"
SOURCE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
endif()
endmacro()
# collect all samples subdirectories
file(GLOB samples_dirs RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *)
# skip building of unnecessary subdirectories
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/thirdparty")
list(REMOVE_ITEM samples_dirs common thirdparty)
endif()
add_samples_to_build(${samples_dirs})