used native LTO support from cmake 3.9.6 (#2625)
authorIlya Lavrenov <ilya.lavrenov@intel.com>
Wed, 14 Oct 2020 07:43:24 +0000 (10:43 +0300)
committerGitHub <noreply@github.com>
Wed, 14 Oct 2020 07:43:24 +0000 (10:43 +0300)
* used native LTO support from cmake 3.9.6

* Removed compilation flags push / pop

* Fixes

* Fixes for VPU unit tests

* Temp WA for old gcc

35 files changed:
CMakeLists.txt
cmake/developer_package.cmake
cmake/features.cmake
cmake/os_flags.cmake
docs/template_plugin/CMakeLists.txt
docs/template_plugin/src/CMakeLists.txt
docs/template_plugin/tests/functional/CMakeLists.txt
inference-engine/cmake/developer_package_config.cmake.in
inference-engine/ie_bridges/c/src/CMakeLists.txt
inference-engine/src/cldnn_engine/CMakeLists.txt
inference-engine/src/gna_plugin/CMakeLists.txt
inference-engine/src/hetero_plugin/CMakeLists.txt
inference-engine/src/inference_engine/CMakeLists.txt
inference-engine/src/legacy_api/CMakeLists.txt
inference-engine/src/low_precision_transformations/CMakeLists.txt
inference-engine/src/mkldnn_plugin/CMakeLists.txt
inference-engine/src/multi_device/CMakeLists.txt
inference-engine/src/preprocessing/CMakeLists.txt
inference-engine/src/readers/ir_reader/CMakeLists.txt
inference-engine/src/readers/ir_reader_v7/CMakeLists.txt
inference-engine/src/readers/onnx_reader/CMakeLists.txt
inference-engine/src/transformations/CMakeLists.txt
inference-engine/src/vpu/CMakeLists.txt
inference-engine/src/vpu/common/CMakeLists.txt
inference-engine/src/vpu/graph_transformer/CMakeLists.txt
inference-engine/src/vpu/myriad_plugin/CMakeLists.txt
inference-engine/tests/CMakeLists.txt
inference-engine/tests/functional/plugin/myriad/CMakeLists.txt
inference-engine/tests/unit/CMakeLists.txt
inference-engine/tests/unit/vpu/CMakeLists.txt
inference-engine/tests_deprecated/CMakeLists.txt
inference-engine/tests_deprecated/unit/CMakeLists.txt
inference-engine/thirdparty/CMakeLists.txt
inference-engine/thirdparty/movidius/CMakeLists.txt
ngraph/cmake/external_protobuf.cmake

index 9035509..cf0c632 100644 (file)
@@ -89,15 +89,8 @@ function(build_ngraph)
         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4308 /wd4146 /wd4703 /wd4244 /wd4819")
     endif()
     
-    # Preserve the original flags for further use
-    set(CMAKE_ORIGINAL_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
-    set(CMAKE_ORIGINAL_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
-    set(CMAKE_ORIGINAL_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}")
-    set(CMAKE_ORIGINAL_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}")
-    set(CMAKE_ORIGINAL_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS_RELEASE}")
-
     if(ENABLE_LTO)
-        ie_enable_lto()
+        set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE ON)
     endif()
 
     ie_cpack_add_component(ngraph)
index 0c6a857..8a21786 100644 (file)
@@ -2,6 +2,8 @@
 # SPDX-License-Identifier: Apache-2.0
 #
 
+cmake_minimum_required(VERSION 3.13)
+
 list(APPEND CMAKE_MODULE_PATH
         "${OpenVINO_MAIN_SOURCE_DIR}/cmake/download"
         "${OpenVINO_MAIN_SOURCE_DIR}/cmake/cross_compile"
@@ -214,6 +216,22 @@ set_property(GLOBAL PROPERTY USE_FOLDERS ON)
 
 set(CMAKE_POLICY_DEFAULT_CMP0054 NEW)
 
+# LTO
+
+set(CMAKE_POLICY_DEFAULT_CMP0069 NEW)
+include(CheckIPOSupported)
+
+check_ipo_supported(RESULT IPO_SUPPORTED
+                    OUTPUT OUTPUT_MESSAGE
+                    LANGUAGES C CXX)
+
+if(NOT IPO_SUPPORTED)
+    set(ENABLE_LTO "OFF" CACHE STRING "Enable Link Time Optmization" FORCE)
+    message(WARNING "IPO / LTO is not supported: ${OUTPUT_MESSAGE}")
+endif()
+
+# General flags
+
 include(sdl)
 include(os_flags)
 include(sanitizer)
index 10a4d66..804e75a 100644 (file)
@@ -21,7 +21,7 @@ ie_dependent_option (ENABLE_CLDNN "clDnn based plugin for inference engine" ON "
 
 # FIXME: there are compiler failures with LTO and Cross-Compile toolchains. Disabling for now, but
 #        this must be addressed in a proper way
-ie_dependent_option (ENABLE_LTO "Enable Link Time Optimization" OFF "LINUX OR WIN32;NOT CMAKE_CROSSCOMPILING" OFF)
+ie_dependent_option (ENABLE_LTO "Enable Link Time Optimization" OFF "LINUX OR WIN32;NOT CMAKE_CROSSCOMPILING; CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.9" OFF)
 
 ie_option (OS_FOLDER "create OS dedicated folder in output" OFF)
 
index 4387e13..8353bd7 100644 (file)
@@ -130,40 +130,7 @@ endfunction()
 # Enables Link Time Optimization compilation
 #
 macro(ie_enable_lto)
-    if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel" AND OFF)
-        ProcessorCount(N)
-        if(UNIX)
-            set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -ipo")
-            set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -ipo")
-            set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -ipo-jobs${N}")
-            set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} -ipo-jobs${N}")
-            set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS_RELEASE} -ipo-jobs${N}")
-        else()
-            set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Qipo")
-            set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /Qipo")
-            set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /Qipo-jobs:${N}")
-            set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /Qipo-jobs:${N}")
-            set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS_RELEASE} /Qipo-jobs:${N}")
-        endif()
-    elseif(UNIX)
-        set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -flto")
-        # LTO causes issues with gcc 4.8.5 during cmake pthread check
-        if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.9)
-            set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -flto")
-        endif()
-
-        # modify runlib and ar tools
-        if(LINUX)
-            set(CMAKE_AR  "gcc-ar")
-            set(CMAKE_RANLIB "gcc-ranlib")
-        endif()
-    elseif(MSVC AND OFF)
-        set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /GL")
-        set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /GL")
-        set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG:STATUS")
-        set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /LTCG:STATUS")
-        set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS_RELEASE} /LTCG:STATUS")
-    endif()
+    set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE ON)
 endmacro()
 
 #
index 088525d..9dc58d8 100644 (file)
@@ -14,12 +14,12 @@ find_package(InferenceEngineDeveloperPackage REQUIRED)
 add_subdirectory(src)
 
 if(ENABLE_TESTS)
-       include(CTest)
-       enable_testing()
+    include(CTest)
+    enable_testing()
 
-       if(ENABLE_FUNCTIONAL_TESTS)
-           add_subdirectory(tests/functional)
-       endif()
+    if(ENABLE_FUNCTIONAL_TESTS)
+        add_subdirectory(tests/functional)
+    endif()
 endif()
 # [cmake:main]
 
index ea3a1a3..18f5449 100644 (file)
@@ -5,10 +5,6 @@
 # [cmake:plugin]
 set(TARGET_NAME "templatePlugin")
 
-if(ENABLE_LTO)
-    ie_enable_lto()
-endif()
-
 file(GLOB SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
 file(GLOB_RECURSE HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp)
 
@@ -20,9 +16,7 @@ ie_add_plugin(NAME ${TARGET_NAME}
               VERSION_DEFINES_FOR template_plugin.cpp)
 
 target_include_directories(${TARGET_NAME} PRIVATE
-    "${CMAKE_CURRENT_SOURCE_DIR}")
-
-target_include_directories(${TARGET_NAME} PRIVATE
+    "${CMAKE_CURRENT_SOURCE_DIR}"
     "${IE_MAIN_TEMPLATE_PLUGIN_SOURCE_DIR}/include")
 
 # link common Inference Engine libraries
@@ -36,6 +30,8 @@ target_link_libraries(${TARGET_NAME} PRIVATE
     IE::ngraph_backend
     IE::interpreter_backend)
 
+set_target_properties(${TARGET_NAME} PROPERTIES INTERPROCEDURAL_OPTIMIZATION ${ENABLE_LTO})
+
 # ATTENTION: uncomment to register a plugin in the plugins.xml file
 # ie_register_plugins(MAIN_TARGET ${TARGET_NAME}
 #                     POSSIBLE_PLUGINS ${TARGET_NAME})
index e005539..627e112 100644 (file)
@@ -3,10 +3,6 @@
 # SPDX-License-Identifier: Apache-2.0
 #
 
-if(ENABLE_LTO AND CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 9.0)
-    ie_enable_lto()
-endif()
-
 # [cmake:functional_tests]
 set(TARGET_NAME templateFuncTests)
 
index a20b334..db157eb 100644 (file)
@@ -20,7 +20,7 @@ endforeach()
 message(STATUS "The following CMake options are exported from Inference Engine Developer package")
 message("")
 foreach(option IN LISTS ie_options)
-       message("    ${option}: ${${option}}")
+    message("    ${option}: ${${option}}")
 endforeach()
 message("")
 
@@ -50,7 +50,7 @@ list(APPEND CMAKE_MODULE_PATH "${OpenVINO_MAIN_SOURCE_DIR}/cmake")
 list(APPEND CMAKE_MODULE_PATH "${IE_MAIN_SOURCE_DIR}/cmake")
 
 # generic stuff from developer package
-include(developer_package)
+include(developer_package NO_POLICY_SCOPE)
 include(developer_package_ie)
 
 # Don't threat deprecated API warnings as errors in 3rd party apps
@@ -68,4 +68,4 @@ if (THREADING STREQUAL "TBB" OR THREADING STREQUAL "TBB_AUTO")
     find_package(TBB)
 endif()
 
-find_package(Threads REQUIRED)
\ No newline at end of file
+find_package(Threads REQUIRED)
index ef8527a..4ebf7cc 100644 (file)
@@ -2,10 +2,6 @@
 # SPDX-License-Identifier: Apache-2.0
 #
 
-if(ENABLE_LTO)
-    ie_enable_lto()
-endif()
-
 set(TARGET_NAME inference_engine_c_api)
 
 file(GLOB SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
@@ -21,6 +17,8 @@ target_include_directories(${TARGET_NAME} PUBLIC "${InferenceEngine_C_API_SOURCE
 
 add_cpplint_target(${TARGET_NAME}_cpplint FOR_TARGETS ${TARGET_NAME})
 
+set_target_properties(${TARGET_NAME} PROPERTIES INTERPROCEDURAL_OPTIMIZATION ${ENABLE_LTO})
+
 # export
 
 export(TARGETS ${TARGET_NAME} NAMESPACE IE:: APPEND FILE "${CMAKE_BINARY_DIR}/targets.cmake")
index cdc0de4..03475ba 100644 (file)
@@ -11,10 +11,6 @@ if (LINUX)
     endif()
 endif()
 
-if(ENABLE_LTO)
-    ie_enable_lto()
-endif()
-
 file(GLOB MAIN_SRC ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
 file(GLOB LIBRARY_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/*.h)
 
@@ -35,6 +31,8 @@ target_include_directories(${TARGET_NAME} PRIVATE
         ${CLDNN__IOCL_ICD_INCDIRS}
         ${CLDNN_TOP_FOLDER})
 
+set_target_properties(${TARGET_NAME} PROPERTIES INTERPROCEDURAL_OPTIMIZATION ${ENABLE_LTO})
+
 # install
 
 install(FILES "${clDNN_SOURCE_DIR}/kernel_selector/core/cache/cache.json"
index 8164990..ae0cbbd 100644 (file)
@@ -3,10 +3,6 @@
 
 set(TARGET_NAME "GNAPlugin")
 
-if(ENABLE_LTO)
-    ie_enable_lto()
-endif()
-
 file(GLOB_RECURSE SOURCES
         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
 
@@ -53,11 +49,8 @@ target_link_libraries(${TARGET_NAME}_test_static PUBLIC inference_engine_preproc
 target_include_directories(${TARGET_NAME}_test_static PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
 set_target_properties(${TARGET_NAME}_test_static PROPERTIES COMPILE_PDB_NAME ${TARGET_NAME}_test_static)
 
-if(WIN32)
-    # Correct 'jnl' macro/jit issue
-    target_compile_options(${TARGET_NAME} PRIVATE $<$<CXX_COMPILER_ID:MSVC>:/bigobj> )
-    target_compile_options(${TARGET_NAME}_test_static PRIVATE $<$<CXX_COMPILER_ID:MSVC>:/bigobj> )
-endif()
+set_target_properties(${TARGET_NAME} ${TARGET_NAME}_test_static
+                      PROPERTIES INTERPROCEDURAL_OPTIMIZATION ${ENABLE_LTO})
 
 # install
 
index 7dabc8a..3777a0e 100644 (file)
@@ -4,16 +4,8 @@
 
 set (TARGET_NAME "HeteroPlugin")
 
-if(ENABLE_LTO)
-    ie_enable_lto()
-endif()
-
-file(GLOB SOURCES
-    ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-)
-
-file(GLOB_RECURSE HEADERS
-        ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp)
+file(GLOB SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
+file(GLOB_RECURSE HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp)
 
 ie_add_plugin(NAME ${TARGET_NAME}
               DEVICE_NAME "HETERO"
@@ -25,3 +17,5 @@ ie_faster_build(${TARGET_NAME}
 )
 
 target_link_libraries(${TARGET_NAME} PRIVATE inference_engine ade pugixml ${NGRAPH_LIBRARIES} inference_engine_transformations)
+
+set_target_properties(${TARGET_NAME} PROPERTIES INTERPROCEDURAL_OPTIMIZATION ${ENABLE_LTO})
index 7de2e76..ae0e2b0 100644 (file)
@@ -4,10 +4,6 @@
 
 set (TARGET_NAME "inference_engine")
 
-if(ENABLE_LTO)
-    ie_enable_lto()
-endif()
-
 file (GLOB LIBRARY_SRC
         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/threading/*.cpp
@@ -215,6 +211,11 @@ target_link_libraries(${TARGET_NAME}_s PRIVATE ${CMAKE_DL_LIBS} ${NGRAPH_LIBRARI
 
 target_compile_definitions(${TARGET_NAME}_s PUBLIC USE_STATIC_IE)
 
+# LTO
+
+set_target_properties(${TARGET_NAME} ${TARGET_NAME}_obj ${TARGET_NAME}_s ${TARGET_NAME}_common_obj
+                      PROPERTIES INTERPROCEDURAL_OPTIMIZATION ${ENABLE_LTO})
+
 # export targets
 
 export(TARGETS ${TARGET_NAME} NAMESPACE IE:: APPEND FILE "${CMAKE_BINARY_DIR}/targets.cmake")
index 3cc4851..6ae6289 100644 (file)
@@ -4,10 +4,6 @@
 
 set(TARGET_NAME "inference_engine_legacy")
 
-if(ENABLE_LTO)
-    ie_enable_lto()
-endif()
-
 file(GLOB_RECURSE LIBRARY_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
 file(GLOB_RECURSE PUBLIC_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/include/*.hpp ${CMAKE_CURRENT_SOURCE_DIR}/include/*.h)
 
@@ -58,6 +54,11 @@ target_link_libraries(${TARGET_NAME} PRIVATE ${CMAKE_DL_LIBS} ${NGRAPH_LIBRARIES
 
 add_cpplint_target(${TARGET_NAME}_cpplint FOR_TARGETS ${TARGET_NAME})
 
+# LTO
+
+set_target_properties(${TARGET_NAME} ${TARGET_NAME}_obj
+                      PROPERTIES INTERPROCEDURAL_OPTIMIZATION ${ENABLE_LTO})
+
 # export targets
 
 export(TARGETS ${TARGET_NAME} NAMESPACE IE:: APPEND FILE "${CMAKE_BINARY_DIR}/targets.cmake")
index 518c0e2..fac1666 100644 (file)
@@ -4,10 +4,6 @@
 
 set (TARGET_NAME "inference_engine_lp_transformations")
 
-if(ENABLE_LTO)
-    ie_enable_lto()
-endif()
-
 set(PUBLIC_HEADERS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include")
 
 file(GLOB_RECURSE LIBRARY_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
@@ -35,10 +31,14 @@ target_compile_definitions(${TARGET_NAME} PRIVATE IMPLEMENT_INFERENCE_ENGINE_API
 target_link_libraries(${TARGET_NAME} PRIVATE inference_engine openvino::itt)
 
 target_include_directories(${TARGET_NAME} PUBLIC ${PUBLIC_HEADERS_DIR}
-       $<TARGET_PROPERTY:inference_engine_plugin_api,INTERFACE_INCLUDE_DIRECTORIES>)
+    $<TARGET_PROPERTY:inference_engine_plugin_api,INTERFACE_INCLUDE_DIRECTORIES>)
 
 add_cpplint_target(${TARGET_NAME}_cpplint FOR_TARGETS ${TARGET_NAME})
 
+# LTO
+
+set_target_properties(${TARGET_NAME} PROPERTIES INTERPROCEDURAL_OPTIMIZATION ${ENABLE_LTO})
+
 # developer package
 
 ie_developer_export_targets(${TARGET_NAME})
index 74efb3d..5f19256 100644 (file)
@@ -4,10 +4,6 @@
 
 set(TARGET_NAME "MKLDNNPlugin")
 
-if(ENABLE_LTO)
-    ie_enable_lto()
-endif()
-
 if (WIN32)
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNOMINMAX")
 endif()
@@ -205,6 +201,11 @@ set_ie_threading_interface_for(${TARGET_NAME}_obj)
 target_compile_definitions(${TARGET_NAME}_obj PUBLIC -DMKLDNN_THR=${MKLDNN_THR}
                                               PRIVATE USE_STATIC_IE IMPLEMENT_INFERENCE_ENGINE_PLUGIN)
 
+# LTO
+
+set_target_properties(${TARGET_NAME} ${TARGET_NAME}_obj
+                      PROPERTIES INTERPROCEDURAL_OPTIMIZATION ${ENABLE_LTO})
+
 # install
 
 if(GEMM STREQUAL "MKL")
index d38f952..65fc808 100644 (file)
@@ -4,17 +4,8 @@
 
 set (TARGET_NAME "MultiDevicePlugin")
 
-if(ENABLE_LTO)
-    ie_enable_lto()
-endif()
-
-file(GLOB SOURCES
-    ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-)
-
-file(GLOB HEADERS
-    ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp
-)
+file(GLOB SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
+file(GLOB HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp)
 
 ie_add_plugin(NAME ${TARGET_NAME}
               DEVICE_NAME "MULTI"
@@ -24,3 +15,5 @@ ie_add_plugin(NAME ${TARGET_NAME}
 target_link_libraries(${TARGET_NAME} PRIVATE inference_engine)
 
 set_ie_threading_interface_for(${TARGET_NAME})
+
+set_target_properties(${TARGET_NAME} PROPERTIES INTERPROCEDURAL_OPTIMIZATION ${ENABLE_LTO})
\ No newline at end of file
index edb3d4e..b39bf1b 100644 (file)
@@ -4,10 +4,6 @@
 
 set (TARGET_NAME "inference_engine_preproc")
 
-if(ENABLE_LTO)
-    ie_enable_lto()
-endif()
-
 file(GLOB LIBRARY_SRC ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
 file(GLOB LIBRARY_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp)
 
@@ -187,6 +183,11 @@ target_link_libraries(${TARGET_NAME}_s PRIVATE fluid openvino::itt
 
 target_compile_definitions(${TARGET_NAME}_s INTERFACE USE_STATIC_IE)
 
+# LTO
+
+set_target_properties(${TARGET_NAME} ${TARGET_NAME}_obj ${TARGET_NAME}_s
+                      PROPERTIES INTERPROCEDURAL_OPTIMIZATION ${ENABLE_LTO})
+
 # developer package
 
 ie_developer_export_targets(${TARGET_NAME})
index 16e0249..ff8ac49 100644 (file)
@@ -4,10 +4,6 @@
 
 set(TARGET_NAME "inference_engine_ir_reader")
 
-if(ENABLE_LTO)
-    ie_enable_lto()
-endif()
-
 file(GLOB_RECURSE LIBRARY_SRC ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
                               ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp)
 
@@ -37,6 +33,8 @@ target_link_libraries(${TARGET_NAME} PRIVATE ${NGRAPH_LIBRARIES}
                                              pugixml
                                              openvino::itt)
 
+set_target_properties(${TARGET_NAME} PROPERTIES INTERPROCEDURAL_OPTIMIZATION ${ENABLE_LTO})
+
 # code style
 
 add_cpplint_target(${TARGET_NAME}_cpplint FOR_TARGETS ${TARGET_NAME})
index 5dda93e..f3e281e 100644 (file)
@@ -4,10 +4,6 @@
 
 set(TARGET_NAME "inference_engine_ir_v7_reader")
 
-if(ENABLE_LTO)
-    ie_enable_lto()
-endif()
-
 file(GLOB_RECURSE LIBRARY_SRC ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
                               ${CMAKE_CURRENT_SOURCE_DIR}/*.h
                               ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp)
@@ -35,6 +31,8 @@ target_include_directories(${TARGET_NAME} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/"
 target_link_libraries(${TARGET_NAME} PRIVATE inference_engine_reader_api inference_engine_plugin_api
                                              inference_engine pugixml openvino::itt)
 
+set_target_properties(${TARGET_NAME} PROPERTIES INTERPROCEDURAL_OPTIMIZATION ${ENABLE_LTO})
+
 # code style
 
 add_cpplint_target(${TARGET_NAME}_cpplint FOR_TARGETS ${TARGET_NAME})
index 084ae3b..5aaffa9 100644 (file)
@@ -4,10 +4,6 @@
 
 set(TARGET_NAME "inference_engine_onnx_reader")
 
-if(ENABLE_LTO)
-    ie_enable_lto()
-endif()
-
 file(GLOB_RECURSE LIBRARY_SRC ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
                               ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp)
 
@@ -26,6 +22,8 @@ target_compile_definitions(${TARGET_NAME} PRIVATE IMPLEMENT_INFERENCE_ENGINE_PLU
 
 target_link_libraries(${TARGET_NAME} PRIVATE inference_engine_reader_api onnx_importer inference_engine)
 
+set_target_properties(${TARGET_NAME} PROPERTIES INTERPROCEDURAL_OPTIMIZATION ${ENABLE_LTO})
+
 # code style
 
 add_cpplint_target(${TARGET_NAME}_cpplint FOR_TARGETS ${TARGET_NAME})
index 7300d2a..f855db9 100644 (file)
@@ -4,10 +4,6 @@
 
 set(TARGET_NAME "inference_engine_transformations")
 
-if(ENABLE_LTO)
-    ie_enable_lto()
-endif()
-
 file(GLOB_RECURSE LIBRARY_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
 file(GLOB_RECURSE PUBLIC_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/include/*.hpp)
 
@@ -36,6 +32,10 @@ target_include_directories(${TARGET_NAME} PUBLIC ${PUBLIC_HEADERS_DIR}
 
 add_cpplint_target(${TARGET_NAME}_cpplint FOR_TARGETS ${TARGET_NAME})
 
+# LTO
+
+set_target_properties(${TARGET_NAME} PROPERTIES INTERPROCEDURAL_OPTIMIZATION ${ENABLE_LTO})
+
 # developer package
 
 ie_developer_export_targets(${TARGET_NAME})
index db848a2..3814c23 100644 (file)
@@ -14,9 +14,9 @@ if(ENABLE_MYRIAD)
             "${IE_MAIN_SOURCE_DIR}/thirdparty/movidius"
             "${CMAKE_CURRENT_BINARY_DIR}/thirdparty/movidius")
 
-       #
-       # Build plugins
-       #
+    #
+    # Build plugins
+    #
 
     add_subdirectory(myriad_plugin)
 
index 996c839..24c7740 100644 (file)
@@ -2,10 +2,6 @@
 # SPDX-License-Identifier: Apache-2.0
 #
 
-if(ENABLE_LTO)
-    ie_enable_lto()
-endif()
-
 file(GLOB_RECURSE SOURCES *.cpp *.hpp *.h)
 
 function(add_common_target TARGET_NAME STATIC_IE)
@@ -51,6 +47,8 @@ function(add_common_target TARGET_NAME STATIC_IE)
         add_cpplint_target(${TARGET_NAME}_cpplint FOR_TARGETS ${TARGET_NAME} CUSTOM_FILTERS "+runtime/explicit")
     endif()
 
+    set_target_properties(${TARGET_NAME} PROPERTIES INTERPROCEDURAL_OPTIMIZATION ${ENABLE_LTO})
+
     ie_developer_export_targets(${TARGET_NAME})
 
     target_link_libraries(${TARGET_NAME} PUBLIC ${NGRAPH_LIBRARIES} inference_engine_transformations
index a454374..546d3a6 100644 (file)
@@ -2,10 +2,6 @@
 # SPDX-License-Identifier: Apache-2.0
 #
 
-if(ENABLE_LTO)
-    ie_enable_lto()
-endif()
-
 file(GLOB_RECURSE SOURCES *.cpp *.hpp *.h *.inc)
 
 function(add_graph_transformer_target TARGET_NAME STATIC_IE)
@@ -59,6 +55,8 @@ function(add_graph_transformer_target TARGET_NAME STATIC_IE)
 
         ie_developer_export_targets(${TARGET_NAME})
     endif()
+
+    set_target_properties(${TARGET_NAME} PROPERTIES INTERPROCEDURAL_OPTIMIZATION ${ENABLE_LTO})
 endfunction()
 
 add_graph_transformer_target("vpu_graph_transformer" FALSE)
index aeebe4e..bbbf546 100644 (file)
@@ -2,10 +2,6 @@
 # SPDX-License-Identifier: Apache-2.0
 #
 
-if(ENABLE_LTO)
-    ie_enable_lto()
-endif()
-
 set(TARGET_NAME "myriadPlugin")
 
 file(GLOB_RECURSE SOURCES *.cpp *.hpp *.h)
@@ -45,6 +41,10 @@ target_link_libraries(${TARGET_NAME}
     PRIVATE
         mvnc inference_engine vpu_graph_transformer)
 
+# LTO
+
+set_target_properties(${TARGET_NAME} PROPERTIES INTERPROCEDURAL_OPTIMIZATION ${ENABLE_LTO})
+
 # install
 
 install(FILES ${IE_MAIN_SOURCE_DIR}/thirdparty/movidius/mvnc/src/97-myriad-usbboot.rules
index c9a336d..69942e3 100644 (file)
@@ -2,10 +2,6 @@
 # SPDX-License-Identifier: Apache-2.0
 #
 
-if(ENABLE_LTO AND CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 9.0)
-    ie_enable_lto()
-endif()
-
 set(IE_TESTS_ROOT ${CMAKE_CURRENT_SOURCE_DIR})
 
 enable_testing()
index 19aba37..4bab584 100644 (file)
@@ -23,3 +23,8 @@ addIeTargetTest(
             VPU
             MYRIAD
 )
+
+# because vpu_common_lib and vpu_graph_transformer are compiled with LTO
+if(CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 9.0)
+    set_target_properties(${TARGET_NAME} PROPERTIES INTERPROCEDURAL_OPTIMIZATION ${ENABLE_LTO})
+endif()
index 853e53a..7d5ed25 100644 (file)
@@ -5,6 +5,11 @@
 # RPATH is always enabled for unit tests
 set(CMAKE_SKIP_RPATH OFF)
 
+# because unit tests use plugins object files compiled with LTO
+if(CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 9.0)
+    set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE ${ENABLE_LTO})
+endif()
+
 add_subdirectory(inference_engine)
 
 if (ENABLE_MKL_DNN)
index a410675..c213051 100644 (file)
@@ -2,29 +2,35 @@
 # SPDX-License-Identifier: Apache-2.0
 #
 
-disable_deprecated_warnings()
-
 set(TARGET_NAME vpuUnitTests)
 
+disable_deprecated_warnings()
+
 include(${XLINK_DIR}/XLink.cmake)
 
 addIeTargetTest(
         NAME ${TARGET_NAME}
         ROOT ${CMAKE_CURRENT_SOURCE_DIR}
+        ADDITIONAL_SOURCE_DIRS
+            # because ngraphFunctions sources need to be compiled with LTO as well
+            "${IE_TESTS_ROOT}/ngraph_functions/src"
         INCLUDES
-            ${IE_MAIN_SOURCE_DIR}/src/vpu/myriad_plugin
-            ${IE_MAIN_SOURCE_DIR}/thirdparty/movidius
-            ${IE_MAIN_SOURCE_DIR}/thirdparty/movidius/mvnc/include/watchdog
-            ${XLINK_INCLUDE}
-            ${XLINK_PLATFORM_INCLUDE}
-            ${CMAKE_CURRENT_SOURCE_DIR}/base/
+            "${IE_MAIN_SOURCE_DIR}/src/vpu/myriad_plugin"
+            "${IE_MAIN_SOURCE_DIR}/thirdparty/movidius"
+            "${IE_MAIN_SOURCE_DIR}/thirdparty/movidius/mvnc/include/watchdog"
+            "${XLINK_INCLUDE}"
+            "${XLINK_PLATFORM_INCLUDE}"
+            "${CMAKE_CURRENT_SOURCE_DIR}/base"
+            $<TARGET_PROPERTY:ngraphFunctions,INTERFACE_INCLUDE_DIRECTORIES>
         LINK_LIBRARIES
             vpu_graph_transformer_test_static
             unitTestUtils
-            ngraphFunctions
             mvnc
+            ${NGRAPH_LIBRARIES}
+            ngraph_backend
+            interpreter_backend
         ADD_CPPLINT
         LABELS
             VPU
             MYRIAD
-)
\ No newline at end of file
+)
index 3fa96a7..b369c1b 100644 (file)
@@ -2,10 +2,6 @@
 # SPDX-License-Identifier: Apache-2.0
 #
 
-if(ENABLE_LTO AND CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 9.0)
-    ie_enable_lto()
-endif()
-
 enable_testing()
 
 add_subdirectory(helpers)
@@ -22,8 +18,6 @@ if (ENABLE_BEH_TESTS)
     add_subdirectory(behavior)
 endif()
 
-disable_deprecated_warnings()
-
 if(ENABLE_TESTS)
     add_subdirectory(unit)
 endif()
index 6262795..6f3b63d 100644 (file)
@@ -6,6 +6,8 @@ cmake_policy(SET CMP0054 NEW)
 
 set(TARGET_NAME InferenceEngineUnitTests)
 
+disable_deprecated_warnings()
+
 # rpath enabled for unit tests only
 SET (CMAKE_SKIP_RPATH OFF)
 
@@ -118,6 +120,11 @@ target_include_directories(${TARGET_NAME} PRIVATE
 
 set_target_properties(${TARGET_NAME} PROPERTIES COMPILE_PDB_NAME ${TARGET_NAME})
 
+# because IE unit tests use plugin and IE object files compiled with LTO
+if(CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 9.0)
+    set_target_properties(${TARGET_NAME} PROPERTIES INTERPROCEDURAL_OPTIMIZATION ${ENABLE_LTO})
+endif()
+
 ## Mock macros doesn't use "override" specificator
 target_compile_options(${TARGET_NAME} PRIVATE $<$<CXX_COMPILER_ID:Clang>: -Wno-error=inconsistent-missing-override >)
 target_compile_options(${TARGET_NAME} PRIVATE $<$<CXX_COMPILER_ID:AppleClang>: -Wno-error=inconsistent-missing-override >)
index 86b0dad..fa2a4d0 100644 (file)
@@ -2,90 +2,85 @@
 # SPDX-License-Identifier: Apache-2.0
 #
 
-if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
+if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=unknown-warning-option -Wno-error=inconsistent-missing-override -Wno-error=pass-failed")
   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error=unknown-warning-option -Wno-error=inconsistent-missing-override -Wno-error=pass-failed")
 elseif(CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 9.1)
     # On g++ 9.3.0 (Ubuntu 20.04) the ADE library raises "redundant-move" warnings
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=redundant-move")
     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error=redundant-move")
-elseif(("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") AND ("${MSVC_VERSION}" VERSION_GREATER_EQUAL "1920"))
+elseif((CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") AND (MSVC_VERSION VERSION_GREATER_EQUAL "1920"))
     # 1920 version of MSVC 2019
     # This flagis needed for enabling SIMD vectorization with command '#pragma omp simd'.
     # Compilation with '/openmp:experimental' key allow us to enable vectorizatikon capability in MSVC.
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /openmp:experimental")
 endif()
 
-function(build_with_lto)
-    if(ENABLE_LTO)
-        ie_enable_lto()
-    endif()
+if(ENABLE_LTO)
+    set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE ON)
+endif()
 
-    if (ENABLE_CLDNN)
-        set(CLDNN__OUTPUT_BIN_DIR ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
-        set(CLDNN__OUTPUT_LIB_DIR ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
-        if (ENABLE_TESTS AND ENABLE_CLDNN_TESTS)
-            set(CLDNN__INCLUDE_TESTS ON CACHE BOOL "" FORCE)
-            set(CLDNN__INCLUDE_CORE_INTERNAL_TESTS ON CACHE BOOL "" FORCE)
-        else()
-            set(CLDNN__INCLUDE_TESTS OFF CACHE BOOL "" FORCE)
-            set(CLDNN__INCLUDE_CORE_INTERNAL_TESTS OFF CACHE BOOL "" FORCE)
-        endif()
-        set(CLDNN__INCLUDE_EXAMPLES OFF CACHE BOOL "" FORCE)
-        set(CLDNN__INCLUDE_TUTORIAL OFF CACHE BOOL "" FORCE)
-        if (WIN32)
-            set(CLDNN__ARCHITECTURE_TARGET "Windows64" CACHE STRING "" FORCE)
-        elseif (ANDROID)
-            set(CLDNN__ARCHITECTURE_TARGET "Android64" CACHE STRING "" FORCE)
-        else()
-            set(CLDNN__ARCHITECTURE_TARGET "Linux64" CACHE STRING "" FORCE)
-        endif()
+if (ENABLE_CLDNN)
+    set(CLDNN__OUTPUT_BIN_DIR ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
+    set(CLDNN__OUTPUT_LIB_DIR ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
+    if (ENABLE_TESTS AND ENABLE_CLDNN_TESTS)
+        set(CLDNN__INCLUDE_TESTS ON CACHE BOOL "" FORCE)
+        set(CLDNN__INCLUDE_CORE_INTERNAL_TESTS ON CACHE BOOL "" FORCE)
+    else()
+        set(CLDNN__INCLUDE_TESTS OFF CACHE BOOL "" FORCE)
+        set(CLDNN__INCLUDE_CORE_INTERNAL_TESTS OFF CACHE BOOL "" FORCE)
+    endif()
+    set(CLDNN__INCLUDE_EXAMPLES OFF CACHE BOOL "" FORCE)
+    set(CLDNN__INCLUDE_TUTORIAL OFF CACHE BOOL "" FORCE)
+    if (WIN32)
+        set(CLDNN__ARCHITECTURE_TARGET "Windows64" CACHE STRING "" FORCE)
+    elseif (ANDROID)
+        set(CLDNN__ARCHITECTURE_TARGET "Android64" CACHE STRING "" FORCE)
+    else()
+        set(CLDNN__ARCHITECTURE_TARGET "Linux64" CACHE STRING "" FORCE)
+    endif()
 
-        add_subdirectory(clDNN)
+    add_subdirectory(clDNN)
 
-        # disable CLDNN docs build
-        set_target_properties(docs PROPERTIES EXCLUDE_FROM_ALL ON
-                                              FOLDER docs)
-    endif()
+    # disable CLDNN docs build
+    set_target_properties(docs PROPERTIES EXCLUDE_FROM_ALL ON FOLDER docs)
+endif()
 
-    function(ie_build_pugixml)
-        set(BUILD_TESTS_current ${BUILD_TESTS})
-        set(BUILD_TESTS OFF CACHE BOOL "Build tests" FORCE)
-        add_subdirectory(pugixml)
-        set(BUILD_TESTS ${BUILD_TESTS_current} CACHE BOOL "Build tests" FORCE)
-    endfunction()
+function(ie_build_pugixml)
+    set(BUILD_TESTS_current ${BUILD_TESTS})
+    set(BUILD_TESTS OFF CACHE BOOL "Build tests" FORCE)
+    add_subdirectory(pugixml)
+    set(BUILD_TESTS ${BUILD_TESTS_current} CACHE BOOL "Build tests" FORCE)
+endfunction()
 
-    if (USE_SYSTEM_PUGIXML)
-        find_package(PugiXML REQUIRED)
-        set_property(TARGET pugixml PROPERTY IMPORTED_GLOBAL TRUE)
-    else()
-        ie_build_pugixml()
-        target_include_directories(pugixml INTERFACE "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/pugixml/src>")
-    endif()
-    add_subdirectory(stb_lib)
-    add_subdirectory(ade)
-    add_subdirectory(fluid/modules/gapi)
+if (USE_SYSTEM_PUGIXML)
+    find_package(PugiXML REQUIRED)
+    set_property(TARGET pugixml PROPERTY IMPORTED_GLOBAL TRUE)
+else()
+    ie_build_pugixml()
+    target_include_directories(pugixml INTERFACE "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/pugixml/src>")
+endif()
 
-    set_target_properties(ade fluid stb_image
-                          PROPERTIES FOLDER thirdparty)
+add_subdirectory(stb_lib)
+add_subdirectory(ade)
+add_subdirectory(fluid/modules/gapi)
 
-    # developer package
+set_target_properties(ade fluid stb_image PROPERTIES FOLDER thirdparty)
 
-    ie_developer_export_targets(ade fluid)
+# developer package
 
-    if (NOT USE_SYSTEM_PUGIXML)
-        set_target_properties(pugixml PROPERTIES FOLDER thirdparty)
-        ie_developer_export_targets(pugixml)
-        if(TARGET pugixml_mt)
-            ie_developer_export_targets(pugixml_mt)
-            set_target_properties(pugixml_mt PROPERTIES FOLDER thirdparty)
-        endif()
-    endif()
+ie_developer_export_targets(ade fluid)
 
-    if(ENABLE_MKL_DNN)
-        set(SDL_cmake_included ON)
-        include(mkldnn.cmake)
+if (NOT USE_SYSTEM_PUGIXML)
+    set_target_properties(pugixml PROPERTIES FOLDER thirdparty)
+    ie_developer_export_targets(pugixml)
+    if(TARGET pugixml_mt)
+        ie_developer_export_targets(pugixml_mt)
+        set_target_properties(pugixml_mt PROPERTIES FOLDER thirdparty)
     endif()
-endfunction()
+endif()
 
-build_with_lto()
+if(ENABLE_MKL_DNN)
+    set(SDL_cmake_included ON)
+    include(mkldnn.cmake)
+endif()
index 8dacbc1..e18cab6 100644 (file)
@@ -10,7 +10,7 @@ if (ENABLE_MYRIAD)
     endif()
     # LTO usage leads to a linker fail on CentOS with the old 4.8.5 compiler during XLinkTests
     if(ENABLE_LTO AND NOT ENABLE_TESTS AND NOT XLINK_OLD_48_COMPILER)
-           ie_enable_lto()
+        set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE ${ENABLE_LTO})
     endif()
 
     set(XLINK_DIR "${IE_MAIN_SOURCE_DIR}/thirdparty/movidius/XLink" CACHE PATH "path to Xlink")
index 2059e87..7140689 100644 (file)
@@ -20,27 +20,13 @@ include(FetchContent)
 # Download and install Google Protobuf ...
 #------------------------------------------------------------------------------
 
-# Since this file is going to be modifying CMAKE_*_FLAGS we need to preserve
-# it so we won't overwrite the caller's CMAKE_*_FLAGS
-set(PUSH_CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
-set(PUSH_CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
-set(PUSH_CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
-set(PUSH_CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}")
-set(PUSH_CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}")
-set(PUSH_CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS_RELEASE}")
-
-set(CMAKE_CXX_FLAGS ${CMAKE_ORIGINAL_CXX_FLAGS})
-set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_ORIGINAL_CXX_FLAGS_RELEASE}")
-set(CMAKE_C_FLAGS_RELEASE "${CMAKE_ORIGINAL_C_FLAGS_RELEASE}")
-set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_ORIGINAL_EXE_LINKER_FLAGS_RELEASE}")
-set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_ORIGINAL_SHARED_LINKER_FLAGS_RELEASE}")
-set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_ORIGINAL_MODULE_LINKER_FLAGS_RELEASE}")
+set(PUSH_CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE "${CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE}")
+set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE OFF)
 
 if (MSVC)
-    string(REPLACE "/W3" "/W0" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
     set(protobuf_MSVC_STATIC_RUNTIME OFF CACHE BOOL "")
 else()
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error -fno-lto")
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error")
 endif()
 
 # This version of PROTOBUF is required by Microsoft ONNX Runtime.
@@ -168,10 +154,5 @@ else()
     endif()
 endif()
 
-# Now make sure we restore the original CMAKE_*_FLAGS for the caller
-set(CMAKE_CXX_FLAGS ${PUSH_CMAKE_CXX_FLAGS})
-set(CMAKE_CXX_FLAGS_RELEASE "${PUSH_CMAKE_CXX_FLAGS_RELEASE}")
-set(CMAKE_C_FLAGS_RELEASE "${PUSH_CMAKE_C_FLAGS_RELEASE}")
-set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${PUSH_CMAKE_EXE_LINKER_FLAGS_RELEASE}")
-set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${PUSH_CMAKE_SHARED_LINKER_FLAGS_RELEASE}")
-set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${PUSH_CMAKE_MODULE_LINKER_FLAGS_RELEASE}")
+# Now make sure we restore the original flags
+set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE "${PUSH_CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE}")