2023-01-16 11:02:17 +04:00
|
|
|
# Copyright (C) 2018-2023 Intel Corporation
|
2018-10-16 13:45:03 +03:00
|
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
|
#
|
2019-01-21 21:31:31 +03:00
|
|
|
|
2023-04-29 01:31:42 +04:00
|
|
|
if(NOT ENABLE_INTEL_CPU)
|
2022-08-16 23:19:10 +04:00
|
|
|
return()
|
|
|
|
|
endif()
|
|
|
|
|
|
2022-02-03 20:03:41 +03:00
|
|
|
set(TARGET_NAME "openvino_intel_cpu_plugin")
|
2018-10-16 13:45:03 +03:00
|
|
|
|
2023-05-31 15:58:29 +08:00
|
|
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
2023-04-17 20:37:10 +04:00
|
|
|
# C4267, 4244 issues from oneDNN headers conversion from 'XXX' to 'YYY', possible loss of data
|
2023-09-15 06:53:32 +04:00
|
|
|
ov_add_compiler_flags(/wd4018)
|
2023-09-14 16:22:50 +04:00
|
|
|
ov_add_compiler_flags(/wd4267)
|
|
|
|
|
ov_add_compiler_flags(/wd4244)
|
2022-10-06 13:44:21 +04:00
|
|
|
# mkldnn headers: '<<': result of 32-bit shift implicitly converted to 64 bits
|
2023-09-14 16:22:50 +04:00
|
|
|
ov_add_compiler_flags(/wd4334)
|
2023-04-17 20:37:10 +04:00
|
|
|
# oneDNN arm64: unary minus operator applied to unsigned type, result still unsigned
|
2023-09-14 16:22:50 +04:00
|
|
|
ov_add_compiler_flags(/wd4146)
|
2023-03-29 14:19:30 +04:00
|
|
|
elseif(OV_COMPILER_IS_CLANG)
|
2023-09-14 16:22:50 +04:00
|
|
|
ov_add_compiler_flags(-Wno-delete-non-abstract-non-virtual-dtor)
|
2022-10-06 13:44:21 +04:00
|
|
|
endif()
|
|
|
|
|
|
2023-10-26 16:40:45 +02:00
|
|
|
set(OV_CPU_ARM_TARGET_GENERIC_ARCHS armv8a
|
|
|
|
|
armv8.2-a
|
|
|
|
|
armv8.6-a armv8.6-a-sve armv8.6-a-sve2 armv8.6-a-sve2-sme2
|
|
|
|
|
armv8r64 # the same as armv8.4-a
|
|
|
|
|
)
|
2023-07-31 08:34:22 +02:00
|
|
|
if(ARM)
|
|
|
|
|
set(OV_CPU_ARM_TARGET_ARCH_DEFAULT armv7a)
|
2023-10-26 16:40:45 +02:00
|
|
|
set(OV_CPU_ARM_TARGET_ARCHS armv7a armv7a-hf
|
|
|
|
|
# requires estate=32
|
|
|
|
|
${OV_CPU_ARM_TARGET_GENERIC_ARCHS})
|
2023-08-14 20:22:39 +02:00
|
|
|
elseif(AARCH64)
|
2023-07-31 08:34:22 +02:00
|
|
|
if(APPLE)
|
|
|
|
|
# Apple M1 / M2 is assumed
|
|
|
|
|
set(OV_CPU_ARM_TARGET_ARCH_DEFAULT arm64-v8.2-a)
|
|
|
|
|
else()
|
|
|
|
|
set(OV_CPU_ARM_TARGET_ARCH_DEFAULT arm64-v8a)
|
|
|
|
|
endif()
|
2023-10-26 16:40:45 +02:00
|
|
|
set(OV_CPU_ARM_TARGET_ARCHS arm64-v8a
|
|
|
|
|
arm64-v8.2-a arm64-v8.2-a-sve arm64-v8.2-a-sve2
|
|
|
|
|
# used with estate=64
|
|
|
|
|
${OV_CPU_ARM_TARGET_GENERIC_ARCHS})
|
|
|
|
|
endif()
|
|
|
|
|
set(OV_CPU_ARM_TARGET_ARCH ${OV_CPU_ARM_TARGET_ARCH_DEFAULT} CACHE STRING "Architecture for ARM ComputeLibrary")
|
|
|
|
|
set_property(CACHE OV_CPU_ARM_TARGET_ARCH PROPERTY STRINGS ${OV_CPU_ARM_TARGET_ARCHS})
|
|
|
|
|
if(OV_CPU_ARM_TARGET_ARCH MATCHES "(armv|arm64-v)[8-9]\\.")
|
|
|
|
|
add_definitions(-DOV_CPU_ARM_ENABLE_FP16)
|
2023-07-31 08:34:22 +02:00
|
|
|
endif()
|
|
|
|
|
|
2023-08-02 14:48:09 +02:00
|
|
|
if(X86 OR X86_64 OR AARCH64)
|
2023-08-07 13:19:42 +08:00
|
|
|
# disable mlas with webassembly
|
2023-09-28 11:26:10 +05:30
|
|
|
if(EMSCRIPTEN OR (WIN32 AND AARCH64) OR MINGW OR (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7))
|
2023-08-02 14:48:09 +02:00
|
|
|
set(ENABLE_MLAS_FOR_CPU_DEFAULT OFF)
|
|
|
|
|
else()
|
|
|
|
|
set(ENABLE_MLAS_FOR_CPU_DEFAULT ON)
|
|
|
|
|
endif()
|
|
|
|
|
else()
|
|
|
|
|
set(ENABLE_MLAS_FOR_CPU_DEFAULT OFF)
|
|
|
|
|
endif()
|
2023-10-09 22:30:32 +04:00
|
|
|
ov_option(ENABLE_MLAS_FOR_CPU "Enable MLAS for OpenVINO CPU Plugin" ${ENABLE_MLAS_FOR_CPU_DEFAULT})
|
2023-08-02 14:48:09 +02:00
|
|
|
|
2023-04-29 01:31:42 +04:00
|
|
|
add_subdirectory(thirdparty)
|
2018-10-16 13:45:03 +03:00
|
|
|
|
2023-04-29 01:31:42 +04:00
|
|
|
if(WIN32)
|
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNOMINMAX")
|
2021-05-04 14:36:28 +03:00
|
|
|
endif()
|
|
|
|
|
|
2023-04-29 01:31:42 +04:00
|
|
|
if(ENABLE_CPU_DEBUG_CAPS)
|
|
|
|
|
add_definitions(-DCPU_DEBUG_CAPS)
|
2022-08-25 09:30:40 +08:00
|
|
|
endif()
|
2018-10-16 13:45:03 +03:00
|
|
|
|
2023-04-12 18:42:05 +04:00
|
|
|
set(OV_CPU_WITH_DNNL ON)
|
2023-04-29 01:31:42 +04:00
|
|
|
if(OV_CPU_WITH_DNNL)
|
|
|
|
|
add_definitions(-DOV_CPU_WITH_DNNL)
|
|
|
|
|
endif()
|
2023-04-12 18:42:05 +04:00
|
|
|
|
2023-04-26 13:50:10 +04:00
|
|
|
if(DNNL_USE_ACL)
|
2023-04-12 18:42:05 +04:00
|
|
|
add_definitions(-DOV_CPU_WITH_ACL)
|
|
|
|
|
set(OV_CPU_WITH_ACL ON)
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
if(OV_CPU_WITH_ACL)
|
|
|
|
|
set(CMAKE_CXX_STANDARD 14)
|
|
|
|
|
endif()
|
|
|
|
|
|
2023-04-29 01:31:42 +04:00
|
|
|
file(GLOB_RECURSE SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
|
|
|
|
|
file(GLOB_RECURSE HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/*.h
|
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/*.hpp)
|
2023-04-12 18:42:05 +04:00
|
|
|
|
2023-04-29 01:31:42 +04:00
|
|
|
if(NOT OV_CPU_WITH_ACL)
|
|
|
|
|
list(APPEND EXCLUDE_PATHS ${CMAKE_CURRENT_SOURCE_DIR}/src/nodes/executors/acl/*)
|
2023-04-12 18:42:05 +04:00
|
|
|
endif()
|
|
|
|
|
|
2023-04-29 01:31:42 +04:00
|
|
|
if(NOT X86_64)
|
|
|
|
|
list(APPEND EXCLUDE_PATHS ${CMAKE_CURRENT_SOURCE_DIR}/src/nodes/executors/x64/*
|
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/nodes/kernels/x64/*
|
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/emitters/x64/*
|
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/transformations/cpu_opset/x64/*
|
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/transformations/snippets/x64/*)
|
2023-04-12 18:42:05 +04:00
|
|
|
endif()
|
|
|
|
|
|
2023-04-29 01:31:42 +04:00
|
|
|
if(NOT (AARCH64 OR ARM))
|
|
|
|
|
list(APPEND EXCLUDE_PATHS ${CMAKE_CURRENT_SOURCE_DIR}/src/transformations/cpu_opset/arm/*)
|
2023-04-12 18:42:05 +04:00
|
|
|
endif()
|
|
|
|
|
|
2023-07-26 15:40:34 +08:00
|
|
|
if (NOT ENABLE_MLAS_FOR_CPU)
|
2023-08-02 14:48:09 +02:00
|
|
|
list(APPEND EXCLUDE_PATHS ${CMAKE_CURRENT_SOURCE_DIR}/src/nodes/executors/mlas/*)
|
2023-07-26 15:40:34 +08:00
|
|
|
list(APPEND EXCLUDE_PATHS ${CMAKE_CURRENT_SOURCE_DIR}/src/mlas/*)
|
|
|
|
|
endif()
|
|
|
|
|
|
2023-04-12 18:42:05 +04:00
|
|
|
file(GLOB_RECURSE FILES_TO_REMOVE ${EXCLUDE_PATHS})
|
|
|
|
|
list(REMOVE_ITEM SOURCES ${FILES_TO_REMOVE})
|
|
|
|
|
list(REMOVE_ITEM HEADERS ${FILES_TO_REMOVE})
|
|
|
|
|
|
2020-02-11 22:48:49 +03:00
|
|
|
# create plugin
|
|
|
|
|
|
2023-04-24 14:48:45 +04:00
|
|
|
ov_add_plugin(NAME ${TARGET_NAME}
|
2020-02-11 22:48:49 +03:00
|
|
|
DEVICE_NAME "CPU"
|
2021-11-02 16:07:45 +03:00
|
|
|
AS_EXTENSION
|
2023-04-06 11:02:28 +04:00
|
|
|
VERSION_DEFINES_FOR src/plugin.cpp
|
2020-02-11 22:48:49 +03:00
|
|
|
SOURCES ${SOURCES} ${HEADERS})
|
|
|
|
|
|
2023-04-12 23:02:57 +04:00
|
|
|
# give a different file name depending on target platform architecture
|
|
|
|
|
if(ARM OR AARCH64)
|
|
|
|
|
set_target_properties(${TARGET_NAME} PROPERTIES OUTPUT_NAME "openvino_arm_cpu_plugin")
|
|
|
|
|
elseif(RISCV64)
|
2023-04-17 20:37:10 +04:00
|
|
|
set_target_properties(${TARGET_NAME} PROPERTIES OUTPUT_NAME "openvino_riscv_cpu_plugin")
|
2023-04-12 23:02:57 +04:00
|
|
|
endif()
|
|
|
|
|
|
2023-09-05 21:31:52 +04:00
|
|
|
ov_mark_target_as_cc(${TARGET_NAME})
|
2021-02-17 15:41:54 +03:00
|
|
|
|
2022-04-05 01:10:53 +03:00
|
|
|
target_link_libraries(${TARGET_NAME} PRIVATE dnnl
|
2023-08-13 11:31:44 +04:00
|
|
|
openvino::shape_inference
|
|
|
|
|
openvino::snippets)
|
2020-10-23 13:22:55 +03:00
|
|
|
|
2021-09-14 16:02:47 +03:00
|
|
|
target_compile_definitions(${TARGET_NAME} PRIVATE IMPLEMENT_INFERENCE_EXTENSION_API)
|
2021-12-23 11:49:25 +03:00
|
|
|
target_include_directories(${TARGET_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
|
2023-07-26 15:40:34 +08:00
|
|
|
if (ENABLE_MLAS_FOR_CPU)
|
|
|
|
|
target_link_libraries(${TARGET_NAME} PRIVATE mlas)
|
|
|
|
|
target_include_directories(${TARGET_NAME} SYSTEM PRIVATE $<TARGET_PROPERTY:mlas,INCLUDE_DIRECTORIES>)
|
|
|
|
|
add_definitions(-DOV_CPU_WITH_MLAS)
|
|
|
|
|
endif()
|
2023-04-29 01:31:42 +04:00
|
|
|
target_include_directories(${TARGET_NAME} SYSTEM PRIVATE $<TARGET_PROPERTY:dnnl,INCLUDE_DIRECTORIES>)
|
2020-09-18 17:13:27 +03:00
|
|
|
# Cross compiled function
|
|
|
|
|
# TODO: The same for proposal, proposalONNX, topk
|
2020-05-20 01:13:06 +03:00
|
|
|
cross_compiled_file(${TARGET_NAME}
|
|
|
|
|
ARCH AVX2 ANY
|
2021-12-23 11:49:25 +03:00
|
|
|
src/nodes/proposal_imp.cpp
|
|
|
|
|
API src/nodes/proposal_imp.hpp
|
2020-05-20 01:13:06 +03:00
|
|
|
NAME proposal_exec
|
|
|
|
|
NAMESPACE InferenceEngine::Extensions::Cpu::XARCH
|
|
|
|
|
)
|
|
|
|
|
|
2023-08-02 16:28:00 +04:00
|
|
|
# system dependencies must go last
|
|
|
|
|
target_link_libraries(${TARGET_NAME} PRIVATE openvino::pugixml)
|
2023-09-05 21:31:52 +04:00
|
|
|
ov_set_threading_interface_for(${TARGET_NAME})
|
2023-08-02 16:28:00 +04:00
|
|
|
|
2023-02-25 01:11:50 +04:00
|
|
|
# must be called after all target_link_libraries
|
2023-09-14 16:22:50 +04:00
|
|
|
ov_add_api_validator_post_build_step(TARGET ${TARGET_NAME})
|
2020-10-16 10:58:38 +03:00
|
|
|
|
2023-04-29 01:31:42 +04:00
|
|
|
# LTO
|
|
|
|
|
set_target_properties(${TARGET_NAME} PROPERTIES INTERPROCEDURAL_OPTIMIZATION_RELEASE ${ENABLE_LTO})
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
# add test object library
|
|
|
|
|
#
|
2020-02-11 22:48:49 +03:00
|
|
|
|
2022-01-12 20:23:18 +03:00
|
|
|
if(BUILD_SHARED_LIBS)
|
|
|
|
|
add_library(${TARGET_NAME}_obj OBJECT ${SOURCES} ${HEADERS})
|
2023-09-14 16:22:50 +04:00
|
|
|
ov_link_system_libraries(${TARGET_NAME}_obj PUBLIC dnnl openvino::pugixml)
|
2020-02-11 22:48:49 +03:00
|
|
|
|
2023-04-06 11:02:28 +04:00
|
|
|
ov_add_version_defines(src/plugin.cpp ${TARGET_NAME}_obj)
|
|
|
|
|
|
2022-03-31 18:05:59 +03:00
|
|
|
target_include_directories(${TARGET_NAME}_obj
|
|
|
|
|
PRIVATE
|
|
|
|
|
$<TARGET_PROPERTY:openvino::runtime::dev,INTERFACE_INCLUDE_DIRECTORIES>
|
|
|
|
|
$<TARGET_PROPERTY:openvino::itt,INTERFACE_INCLUDE_DIRECTORIES>
|
2023-08-13 11:31:44 +04:00
|
|
|
$<TARGET_PROPERTY:openvino::shape_inference,INTERFACE_INCLUDE_DIRECTORIES>
|
|
|
|
|
$<TARGET_PROPERTY:openvino::snippets,INTERFACE_INCLUDE_DIRECTORIES>
|
2022-03-31 18:05:59 +03:00
|
|
|
PUBLIC
|
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src
|
|
|
|
|
$<TARGET_PROPERTY:openvino::conditional_compilation,INTERFACE_INCLUDE_DIRECTORIES>)
|
2021-10-25 10:23:04 +03:00
|
|
|
|
2022-04-05 01:10:53 +03:00
|
|
|
target_include_directories(${TARGET_NAME}_obj SYSTEM PUBLIC $<TARGET_PROPERTY:dnnl,INCLUDE_DIRECTORIES>)
|
2023-07-26 15:40:34 +08:00
|
|
|
|
|
|
|
|
if(ENABLE_MLAS_FOR_CPU)
|
|
|
|
|
target_include_directories(${TARGET_NAME}_obj SYSTEM PUBLIC $<TARGET_PROPERTY:mlas,INCLUDE_DIRECTORIES>)
|
|
|
|
|
endif()
|
2020-10-26 14:10:17 +03:00
|
|
|
|
2023-09-05 21:31:52 +04:00
|
|
|
ov_set_threading_interface_for(${TARGET_NAME}_obj)
|
2018-10-16 13:45:03 +03:00
|
|
|
|
2022-01-12 20:23:18 +03:00
|
|
|
target_compile_definitions(${TARGET_NAME}_obj PRIVATE
|
|
|
|
|
USE_STATIC_IE IMPLEMENT_INFERENCE_ENGINE_PLUGIN IMPLEMENT_INFERENCE_EXTENSION_API
|
|
|
|
|
$<TARGET_PROPERTY:ngraph,INTERFACE_COMPILE_DEFINITIONS>
|
2022-03-31 18:05:59 +03:00
|
|
|
$<TARGET_PROPERTY:inference_engine_plugin_api,INTERFACE_COMPILE_DEFINITIONS>)
|
2020-11-18 12:24:30 +03:00
|
|
|
|
2022-01-12 20:23:18 +03:00
|
|
|
set_target_properties(${TARGET_NAME}_obj PROPERTIES EXCLUDE_FROM_ALL ON)
|
2020-10-14 10:43:24 +03:00
|
|
|
|
2022-01-12 20:23:18 +03:00
|
|
|
# LTO
|
2022-04-04 20:22:22 +03:00
|
|
|
set_target_properties(${TARGET_NAME}_obj PROPERTIES INTERPROCEDURAL_OPTIMIZATION_RELEASE ${ENABLE_LTO})
|
2022-01-12 20:23:18 +03:00
|
|
|
endif()
|
2022-04-04 20:22:22 +03:00
|
|
|
|
2023-04-29 01:31:42 +04:00
|
|
|
if(ENABLE_TESTS)
|
|
|
|
|
add_subdirectory(tests)
|
|
|
|
|
endif()
|