Fixes for multi-config generators (#16097)

This commit is contained in:
Ilya Lavrenov 2023-03-05 10:46:53 +04:00 committed by GitHub
parent 9c4c559909
commit e1fbb7d768
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 115 additions and 58 deletions

View File

@ -19,10 +19,6 @@ endif()
project(OpenVINO DESCRIPTION "OpenVINO toolkit")
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "CMake build type" FORCE)
endif()
find_package(IEDevScripts REQUIRED
PATHS "${OpenVINO_SOURCE_DIR}/cmake/developer_package"
NO_CMAKE_FIND_ROOT_PATH
@ -39,7 +35,6 @@ if(ENABLE_COVERAGE)
endif()
# resolving dependencies for the project
message (STATUS "PROJECT ............................... " ${PROJECT_NAME})
message (STATUS "CMAKE_VERSION ......................... " ${CMAKE_VERSION})
message (STATUS "CMAKE_BINARY_DIR ...................... " ${CMAKE_BINARY_DIR})
message (STATUS "CMAKE_SOURCE_DIR ...................... " ${CMAKE_SOURCE_DIR})
@ -48,10 +43,28 @@ message (STATUS "OpenVINO_BINARY_DIR ................... " ${OpenVINO_BINARY_DIR
message (STATUS "CMAKE_GENERATOR ....................... " ${CMAKE_GENERATOR})
message (STATUS "CMAKE_C_COMPILER_ID ................... " ${CMAKE_C_COMPILER_ID})
message (STATUS "CMAKE_CXX_COMPILER_ID ................. " ${CMAKE_CXX_COMPILER_ID})
message (STATUS "CMAKE_BUILD_TYPE ...................... " ${CMAKE_BUILD_TYPE})
message (STATUS "CMAKE_TOOLCHAIN_FILE .................. " ${CMAKE_TOOLCHAIN_FILE})
message (STATUS "GLIBC_VERSION.......................... " ${OV_GLIBC_VERSION})
if(OV_GENERATOR_MULTI_CONFIG)
string(REPLACE ";" " " config_types "${CMAKE_CONFIGURATION_TYPES}")
message (STATUS "CMAKE_CONFIGURATION_TYPES ............. " ${config_types})
unset(config_types)
if(CMAKE_GENERATOR MATCHES "^Ninja Multi-Config$")
message (STATUS "CMAKE_DEFAULT_BUILD_TYPE .............. " ${CMAKE_DEFAULT_BUILD_TYPE})
endif()
else()
message (STATUS "CMAKE_BUILD_TYPE ...................... " ${CMAKE_BUILD_TYPE})
endif()
if(CMAKE_GENERATOR_PLATFORM)
message (STATUS "CMAKE_GENERATOR_PLATFORM .............. " ${CMAKE_GENERATOR_PLATFORM})
endif()
if(CMAKE_GENERATOR_TOOLSET)
message (STATUS "CMAKE_GENERATOR_TOOLSET ............... " ${CMAKE_GENERATOR_TOOLSET})
endif()
if(CMAKE_TOOLCHAIN_FILE)
message (STATUS "CMAKE_TOOLCHAIN_FILE .................. " ${CMAKE_TOOLCHAIN_FILE})
endif()
if(OV_GLIBC_VERSION)
message (STATUS "GLIBC_VERSION ......................... " ${OV_GLIBC_VERSION})
endif()
# remove file with exported developer targets to force its regeneration
file(REMOVE "${CMAKE_BINARY_DIR}/ngraphTargets.cmake")

View File

@ -111,10 +111,13 @@ else()
set(BIN_FOLDER "bin/${ARCH_FOLDER}")
endif()
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "CMake build type")
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Release;Debug;RelWithDebInfo;MinSizeRel")
if(CMAKE_GENERATOR MATCHES "^Ninja Multi-Config$")
# Ninja-Multi specific, see:
# https://cmake.org/cmake/help/latest/variable/CMAKE_DEFAULT_BUILD_TYPE.html
set(CMAKE_DEFAULT_BUILD_TYPE "Release" CACHE STRING "CMake default build type")
elseif(NOT OV_GENERATOR_MULTI_CONFIG)
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "CMake build type")
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Release;Debug;RelWithDebInfo;MinSizeRel")
endif()
if(USE_BUILD_TYPE_SUBFOLDER)
@ -152,10 +155,10 @@ set(CMAKE_DEBUG_POSTFIX ${IE_DEBUG_POSTFIX})
set(CMAKE_RELEASE_POSTFIX ${IE_RELEASE_POSTFIX})
# Support CMake multi-configuration for Visual Studio / Ninja or Xcode build
if (OV_GENERATOR_MULTI_CONFIG)
if(OV_GENERATOR_MULTI_CONFIG)
set(IE_BUILD_POSTFIX $<$<CONFIG:Debug>:${IE_DEBUG_POSTFIX}>$<$<CONFIG:Release>:${IE_RELEASE_POSTFIX}>)
else ()
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
else()
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(IE_BUILD_POSTFIX ${IE_DEBUG_POSTFIX})
else()
set(IE_BUILD_POSTFIX ${IE_RELEASE_POSTFIX})

View File

@ -63,6 +63,15 @@ function(ov_native_compile_external_project)
set(ARG_NATIVE_SOURCE_SUBDIR SOURCE_SUBDIR ${ARG_NATIVE_SOURCE_SUBDIR})
endif()
if(OV_GENERATOR_MULTI_CONFIG)
if(CMAKE_GENERATOR MATCHES "^Ninja Multi-Config$")
list(APPEND ARG_CMAKE_ARGS "-DCMAKE_CONFIGURATION_TYPES=${CMAKE_DEFAULT_BUILD_TYPE}")
list(APPEND ARG_CMAKE_ARGS "-DCMAKE_DEFAULT_BUILD_TYPE=${CMAKE_DEFAULT_BUILD_TYPE}")
endif()
else()
list(APPEND ARG_CMAKE_ARGS "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}")
endif()
ExternalProject_Add(${ARG_TARGET_NAME}
# Directory Options
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}"
@ -81,7 +90,6 @@ function(ov_native_compile_external_project)
"-DCMAKE_C_FLAGS=${compile_flags}"
"-DCMAKE_POLICY_DEFAULT_CMP0069=NEW"
"-DCMAKE_INSTALL_PREFIX=${ARG_NATIVE_INSTALL_DIR}"
"-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}"
${ARG_CMAKE_ARGS}
CMAKE_GENERATOR "${CMAKE_GENERATOR}"
${ARG_NATIVE_SOURCE_SUBDIR}

View File

@ -194,7 +194,7 @@ macro(ie_cpack)
set(CPACK_STRIP_FILES ON)
endif()
# TODO: replace with openvino
# TODO: replace with openvino and handle multi-config generators case
if(WIN32)
set(CPACK_PACKAGE_NAME inference-engine_${CMAKE_BUILD_TYPE})
else()
@ -202,6 +202,7 @@ macro(ie_cpack)
endif()
set(CPACK_PACKAGE_VERSION "${OpenVINO_VERSION}")
# build version can be empty in case we are running cmake out of git repository
if(NOT OpenVINO_VERSION_BUILD STREQUAL "000")
set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION}.${OpenVINO_VERSION_BUILD}")
endif()

View File

@ -16,7 +16,8 @@ set(ie_options "@IE_OPTIONS@")
list(APPEND ie_options CMAKE_CXX_COMPILER_LAUNCHER CMAKE_C_COMPILER_LAUNCHER
CMAKE_CXX_LINKER_LAUNCHER CMAKE_C_LINKER_LAUNCHER
CMAKE_BUILD_TYPE CMAKE_SKIP_RPATH CMAKE_INSTALL_PREFIX
CMAKE_OSX_ARCHITECTURES CMAKE_OSX_DEPLOYMENT_TARGET)
CMAKE_OSX_ARCHITECTURES CMAKE_OSX_DEPLOYMENT_TARGET
CMAKE_CONFIGURATION_TYPES CMAKE_DEFAULT_BUILD_TYPE)
file(TO_CMAKE_PATH "${CMAKE_CURRENT_LIST_DIR}" cache_path)
message(STATUS "The following CMake options are exported from Inference Engine Developer package")

View File

@ -14,7 +14,8 @@ set(ov_options "@IE_OPTIONS@")
list(APPEND ov_options CMAKE_CXX_COMPILER_LAUNCHER CMAKE_C_COMPILER_LAUNCHER
CMAKE_CXX_LINKER_LAUNCHER CMAKE_C_LINKER_LAUNCHER
CMAKE_BUILD_TYPE CMAKE_SKIP_RPATH CMAKE_INSTALL_PREFIX
CMAKE_OSX_ARCHITECTURES CMAKE_OSX_DEPLOYMENT_TARGET)
CMAKE_OSX_ARCHITECTURES CMAKE_OSX_DEPLOYMENT_TARGET
CMAKE_CONFIGURATION_TYPES CMAKE_DEFAULT_BUILD_TYPE)
file(TO_CMAKE_PATH "${CMAKE_CURRENT_LIST_DIR}" cache_path)
message(STATUS "The following CMake options are exported from OpenVINO Developer package")

View File

@ -5,12 +5,21 @@
cmake_minimum_required (VERSION 3.10)
# Enable CMAKE_<LANG>_COMPILER_ID AppleClang
cmake_policy(SET CMP0025 NEW)
if(POLICY CMP0025)
cmake_policy(SET CMP0025 NEW)
endif()
project(Samples)
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "CMake build type")
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Release" "Debug" "RelWithDebInfo" "MinSizeRel")
get_property(OV_GENERATOR_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if(CMAKE_GENERATOR MATCHES "^Ninja Multi-Config$")
# Ninja-Multi specific, see:
# https://cmake.org/cmake/help/latest/variable/CMAKE_DEFAULT_BUILD_TYPE.html
set(CMAKE_DEFAULT_BUILD_TYPE "Release" CACHE STRING "CMake default build type")
elseif(NOT OV_GENERATOR_MULTI_CONFIG)
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "CMake build type")
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Release;Debug;RelWithDebInfo;MinSizeRel")
endif()
set_property(GLOBAL PROPERTY USE_FOLDERS ON)

View File

@ -27,16 +27,16 @@ ie_shellcheck_process(DIRECTORY "${OpenVINO_SOURCE_DIR}"
ie_cpack_add_component(${OV_CPACK_COMP_SETUPVARS} HIDDEN)
if(UNIX)
set(_setupvars_file setupvars/setupvars.sh)
set(_setupvars_file "${CMAKE_CURRENT_SOURCE_DIR}/setupvars/setupvars.sh")
elseif(WIN32)
set(_setupvars_file setupvars/setupvars.bat)
if (USE_BUILD_TYPE_SUBFOLDER AND CMAKE_BUILD_TYPE AND NOT CMAKE_BUILD_TYPE STREQUAL "Debug" AND NOT CMAKE_BUILD_TYPE STREQUAL "Release")
set(_setupvars_file "${CMAKE_CURRENT_SOURCE_DIR}/setupvars/setupvars.bat")
if(USE_BUILD_TYPE_SUBFOLDER AND CMAKE_BUILD_TYPE AND NOT CMAKE_BUILD_TYPE MATCHES "^(Debug|Release)$")
# Patch primary configuration in setupvars.bat which is "Release" by default.
# Note setupvars secondary configuration is always "Debug".
message(STATUS "Patching content of ${_setupvars_file} for CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}")
file(READ "${_setupvars_file}" _setupvars_content)
string(REPLACE "Release" ${CMAKE_BUILD_TYPE} _setupvars_content "${_setupvars_content}")
set(_setupvars_file "${CMAKE_BINARY_DIR}/${_setupvars_file}")
set(_setupvars_file "${OpenVINO_BINARY_DIR}/${_setupvars_file}")
message(STATUS "Writing patched content to ${_setupvars_file}")
file(WRITE "${_setupvars_file}" "${_setupvars_content}")
endif()
@ -51,11 +51,7 @@ install(PROGRAMS "${_setupvars_file}"
if(LINUX)
ie_cpack_add_component(${OV_CPACK_COMP_INSTALL_DEPENDENCIES} HIDDEN)
set(install_dependencies_files install_openvino_dependencies.sh)
foreach(install_dependencies_file IN LISTS install_dependencies_files)
install(PROGRAMS "${CMAKE_CURRENT_SOURCE_DIR}/install_dependencies/${install_dependencies_file}"
DESTINATION install_dependencies/
COMPONENT ${OV_CPACK_COMP_INSTALL_DEPENDENCIES})
endforeach()
install(PROGRAMS "${CMAKE_CURRENT_SOURCE_DIR}/install_dependencies/install_openvino_dependencies.sh"
DESTINATION install_dependencies/
COMPONENT ${OV_CPACK_COMP_INSTALL_DEPENDENCIES})
endif()

View File

@ -91,7 +91,7 @@ function(ov_check_python_build_conditions)
endif()
endif()
if(CMAKE_BUILD_TYPE STREQUAL "Debug" AND CMAKE_DEBUG_POSTFIX)
if(NOT OV_GENERATOR_MULTI_CONFIG AND CMAKE_BUILD_TYPE STREQUAL "Debug" AND CMAKE_DEBUG_POSTFIX)
set(python_debug ON)
message(${message_mode} "Building python bindings in debug configuration is not supported on your platform (ENABLE_PYTHON is OFF)")
else()

View File

@ -79,11 +79,30 @@ else()
endif()
target_include_directories(${PROJECT_NAME} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/..")
target_link_libraries(${PROJECT_NAME} PRIVATE openvino::runtime::dev openvino::runtime ${OFFLINE_TRANSFORMATIONS_LIB})
set_target_properties(${PROJECT_NAME} PROPERTIES INTERPROCEDURAL_OPTIMIZATION_RELEASE ${ENABLE_LTO} OUTPUT_NAME "_pyopenvino")
target_link_libraries(${PROJECT_NAME} PRIVATE
openvino::runtime::dev openvino::runtime ${OFFLINE_TRANSFORMATIONS_LIB})
set_target_properties(${PROJECT_NAME} PROPERTIES
INTERPROCEDURAL_OPTIMIZATION_RELEASE ${ENABLE_LTO}
OUTPUT_NAME "_pyopenvino")
addVersionDefines(pyopenvino.cpp CI_BUILD_NUMBER)
if(OV_GENERATOR_MULTI_CONFIG)
string(APPEND _cmd_echo
"$<$<CONFIG:Debug>:"
"${CMAKE_COMMAND};-E;cmake_echo_color;--red;\"OpenVINO;Python;API;cannot;be;built;for;'Debug'\""
">")
string(APPEND cmd_error
"$<$<CONFIG:Debug>:"
"${CMAKE_COMMAND};-E;false"
">")
add_custom_command(TARGET ${PROJECT_NAME} PRE_BUILD
COMMAND "${_cmd_echo}"
COMMAND "${cmd_error}"
COMMAND_EXPAND_LISTS)
endif()
# perform copy
if(OpenVINO_SOURCE_DIR)
add_custom_command(TARGET ${PROJECT_NAME}

View File

@ -262,6 +262,7 @@ function(set_ie_threading_interface_for TARGET_NAME)
endif ()
if (NOT OpenVINO_SOURCE_DIR)
# TODO: dead code since ie_parallel.cmake is not used outside of OpenVINO build
if (WIN32)
set(lib_rel_path ${IE_LIB_REL_DIR})
set(lib_dbg_path ${IE_LIB_DBG_DIR})
@ -307,6 +308,7 @@ function(set_ie_threading_interface_for TARGET_NAME)
if (WIN32)
ie_target_link_libraries(${TARGET_NAME} ${LINK_TYPE} "$<$<CONFIG:DEBUG>:${OMP_LIBRARIES_DEBUG}>;$<$<NOT:$<CONFIG:DEBUG>>:${OMP_LIBRARIES_RELEASE}>")
else()
# TODO: handle multi-config generators case
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
ie_target_link_libraries(${TARGET_NAME} ${LINK_TYPE} ${OMP_LIBRARIES_DEBUG})
else()

View File

@ -19,12 +19,8 @@
#include "log/log.hpp"
#include "ops/util/util.hpp"
namespace ov {
namespace intel_gna {
using namespace common;
namespace limitations {
namespace {
std::ostream& operator<<(std::ostream& os, const std::set<ov::element::Type>& t) {
namespace std {
inline std::ostream& operator<<(std::ostream& os, const std::set<ov::element::Type>& t) {
for (auto it = t.begin(); it != t.end(); ++it) {
if (it != t.begin()) {
os << ", " << *it;
@ -34,7 +30,11 @@ std::ostream& operator<<(std::ostream& os, const std::set<ov::element::Type>& t)
}
return os;
}
} // namespace
} // namespace std
namespace ov {
namespace intel_gna {
namespace limitations {
const std::set<ov::element::Type> SupportedElementTypes::supported_parameter_types = {ov::element::u8,
ov::element::i16,
@ -629,11 +629,11 @@ bool Validator_35::ShouldUseOnlyConv2DGnaIface() const {
std::unique_ptr<AbstractValidator> AbstractValidator::Create(const common::DeviceVersion& target) {
switch (target) {
case DeviceVersion::GNA3_0:
case DeviceVersion::GNAEmbedded3_1:
case common::DeviceVersion::GNA3_0:
case common::DeviceVersion::GNAEmbedded3_1:
return tools::make_unique<Validator_30>();
case DeviceVersion::GNA3_5:
case DeviceVersion::GNAEmbedded3_5:
case common::DeviceVersion::GNA3_5:
case common::DeviceVersion::GNAEmbedded3_5:
return tools::make_unique<Validator_35>();
default:
return nullptr;
@ -658,7 +658,7 @@ bool AbstractValidator::ValidationSuccesful(const bool throwOnError,
return error.empty();
}
bool UseOnly16BitConvolutionWeights(const DeviceVersion& compile_target) {
bool UseOnly16BitConvolutionWeights(const common::DeviceVersion& compile_target) {
return (compile_target == common::DeviceVersion::GNA2_0 || compile_target == common::DeviceVersion::GNA3_0) ||
compile_target == common::DeviceVersion::GNAEmbedded3_1;
}

View File

@ -43,6 +43,15 @@ if(ENABLE_ONEDNN_FOR_GPU)
list(APPEND cmake_extra_args "-D${cmake_var}=${${cmake_var}}")
endforeach()
if(OV_GENERATOR_MULTI_CONFIG)
if(CMAKE_GENERATOR MATCHES "^Ninja Multi-Config$")
list(APPEND cmake_extra_args "-DCMAKE_CONFIGURATION_TYPES=${CMAKE_DEFAULT_BUILD_TYPE}")
list(APPEND cmake_extra_args "-DCMAKE_DEFAULT_BUILD_TYPE=${CMAKE_DEFAULT_BUILD_TYPE}")
endif()
else()
list(APPEND cmake_extra_args "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}")
endif()
ExternalProject_Add(onednn_gpu_build
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/onednn_gpu"
BINARY_DIR "${ONEDNN_BUILD_DIR}"
@ -73,7 +82,6 @@ if(ENABLE_ONEDNN_FOR_GPU)
"-DDNNL_LIBRARY_NAME=onednn_gpu"
"-DCMAKE_INSTALL_PREFIX=${ONEDNN_INSTALL_DIR}"
"-DCMAKE_INSTALL_LIBDIR=lib/$<CONFIG>"
"-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}"
"-DDNNL_ENABLE_CONCURRENT_EXEC=ON"
"-DDNNL_ENABLE_PRIMITIVE_CACHE=ON"
"-DDNNL_ENABLE_WORKLOAD=INFERENCE"

View File

@ -94,6 +94,7 @@ if(ENABLE_INTEL_GPU)
set(OpenCL_INCLUDE_DIR "${OpenCL_INCLUDE_DIR}" PARENT_SCOPE)
set(OpenCL_LIBRARY "${OpenCL_LIBRARY}" PARENT_SCOPE)
set(opencl_root_hints "${opencl_root_hints}" PARENT_SCOPE)
endif()
# cmake cannot set properties for imported targets

View File

@ -3,16 +3,10 @@
#
function(get_lib_name TARGET_NAME LIBRARY_NAME)
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
set(BUILD_SUFFIX ${IE_DEBUG_POSTFIX})
else()
set(BUILD_SUFFIX ${IE_RELEASE_POSTFIX})
endif()
if(WIN32)
set(LIB_SUFFIX "${BUILD_SUFFIX}${CMAKE_LINK_LIBRARY_SUFFIX}")
set(LIB_SUFFIX "${IE_BUILD_POSTFIX}${CMAKE_LINK_LIBRARY_SUFFIX}")
else()
set(LIB_SUFFIX "${BUILD_SUFFIX}${CMAKE_SHARED_LIBRARY_SUFFIX}")
set(LIB_SUFFIX "${IE_BUILD_POSTFIX}${CMAKE_SHARED_LIBRARY_SUFFIX}")
endif()
set("${LIBRARY_NAME}" "${CMAKE_SHARED_MODULE_PREFIX}${TARGET_NAME}${LIB_SUFFIX}" PARENT_SCOPE)
@ -20,7 +14,7 @@ endfunction()
function(get_lib_path OUTPUT_DIR FINAL_OUTPUT_DIR)
if(OV_GENERATOR_MULTI_CONFIG)
set(OUTPUT_DIR "${OUTPUT_DIR}/${CMAKE_BUILD_TYPE}")
set(OUTPUT_DIR "${OUTPUT_DIR}/$<CONFIG>")
endif()
set("${FINAL_OUTPUT_DIR}" "${OUTPUT_DIR}" PARENT_SCOPE)
@ -55,11 +49,12 @@ target_include_directories(OpenCL INTERFACE
# The following variables are needed to make find_package(OpenCL) work
get_lib_path("${OUTPUT_ROOT}/${BIN_FOLDER}" OPENCL_LIB_DIR)
get_lib_path("${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" OPENCL_LIB_DIR)
get_lib_name("OpenCL" OPENCL_LIB_NAME)
set(OpenCL_INCLUDE_DIR "${OPENCL_ICD_LOADER_HEADERS_DIR}" PARENT_SCOPE)
set(OpenCL_LIBRARY "${OPENCL_LIB_DIR}/${OPENCL_LIB_NAME}" PARENT_SCOPE)
set(opencl_root_hints "${OpenCL_INCLUDE_DIR}" PARENT_SCOPE)
# installation