* [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>
278 lines
9.4 KiB
CMake
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})
|