mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-07-25 19:48:11 +00:00
CMake fixes/tweaks for minimal builds and MinSizeRel builds (#5112)
* Fix places where MinSizeRel wasn't having relevant flags added in the same way as Release and RelWithDebInfo Enable LTO for minimal build. Cleanups onnx_minimal.cmake to remove some things handled when LTO is enabled in CMakeLists.txt * Only enable LTO for MSVC in a minimal build
This commit is contained in:
parent
a5530358c9
commit
fae5915d76
4 changed files with 38 additions and 23 deletions
|
|
@ -39,7 +39,7 @@ enable_testing()
|
|||
|
||||
if(NOT CMAKE_BUILD_TYPE)
|
||||
message(STATUS "Build type not set - using RelWithDebInfo")
|
||||
set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "Choose build type: Debug Release RelWithDebInfo." FORCE)
|
||||
set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "Choose build type: Debug Release RelWithDebInfo MinSizeRel." FORCE)
|
||||
endif()
|
||||
|
||||
# Options
|
||||
|
|
@ -198,17 +198,6 @@ if(onnxruntime_USE_OPENMP)
|
|||
endif()
|
||||
endif()
|
||||
|
||||
if(onnxruntime_ENABLE_LTO)
|
||||
include(CheckIPOSupported)
|
||||
check_ipo_supported(RESULT ipo_enabled OUTPUT ipo_output)
|
||||
if(NOT ipo_enabled)
|
||||
message(WARNING "IPO is not supported by this compiler")
|
||||
set(onnxruntime_ENABLE_LTO OFF)
|
||||
else()
|
||||
set (CMAKE_INTERPROCEDURAL_OPTIMIZATION ON)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# ORT build with as much excluded as possible. Supports ORT flatbuffers models only.
|
||||
# Will expose option in build.py when all pieces are available
|
||||
if(onnxruntime_MINIMAL_BUILD)
|
||||
|
|
@ -221,8 +210,11 @@ if(onnxruntime_MINIMAL_BUILD)
|
|||
endif()
|
||||
|
||||
if (MSVC)
|
||||
# add MSVC specific flags to reduce build size here if needed
|
||||
|
||||
# turn on LTO (which adds some compiler flags and turns on LTCG) unless it's a Debug build to minimize binary size
|
||||
if (NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
set (onnxruntime_ENABLE_LTO ON)
|
||||
endif()
|
||||
|
||||
# undocumented internal flag to allow analysis of a minimal build binary size
|
||||
if (ADD_DEBUG_INFO_TO_MINIMAL_BUILD)
|
||||
string(APPEND CMAKE_CXX_FLAGS " /Zi")
|
||||
|
|
@ -236,9 +228,25 @@ if(onnxruntime_MINIMAL_BUILD)
|
|||
else()
|
||||
add_link_options(-Wl,--gc-sections)
|
||||
endif()
|
||||
|
||||
if (ADD_DEBUG_INFO_TO_MINIMAL_BUILD)
|
||||
string(APPEND CMAKE_CXX_FLAGS " -g")
|
||||
string(APPEND CMAKE_C_FLAGS " -g")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(onnxruntime_ENABLE_LTO)
|
||||
include(CheckIPOSupported)
|
||||
check_ipo_supported(RESULT ipo_enabled OUTPUT ipo_output)
|
||||
if(NOT ipo_enabled)
|
||||
message(WARNING "IPO is not supported by this compiler")
|
||||
set(onnxruntime_ENABLE_LTO OFF)
|
||||
else()
|
||||
set (CMAKE_INTERPROCEDURAL_OPTIMIZATION ON)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (onnxruntime_REDUCED_OPS_BUILD)
|
||||
add_compile_definitions(REDUCED_OPS_BUILD)
|
||||
endif()
|
||||
|
|
@ -352,6 +360,7 @@ if (MSVC)
|
|||
if (onnxruntime_ENABLE_LTO AND NOT onnxruntime_USE_CUDA)
|
||||
SET (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Gw /GL")
|
||||
SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Gw /GL")
|
||||
SET (CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} /Gw /GL")
|
||||
endif()
|
||||
|
||||
# The WinML build tool chain builds ARM/ARM64, and the internal tool chain does not have folders for spectre mitigation libs.
|
||||
|
|
@ -370,6 +379,8 @@ if (MSVC)
|
|||
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /guard:cf")
|
||||
SET(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} /guard:cf")
|
||||
SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /guard:cf")
|
||||
SET(CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} /guard:cf")
|
||||
SET(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} /guard:cf")
|
||||
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /guard:cf")
|
||||
endif()
|
||||
else()
|
||||
|
|
@ -563,7 +574,6 @@ get_filename_component(ORTTRAINING_ROOT "${ORTTRAINING_ROOT}" ABSOLUTE)
|
|||
get_filename_component(REPO_ROOT "${REPO_ROOT}" ABSOLUTE)
|
||||
set(ONNXRUNTIME_INCLUDE_DIR ${REPO_ROOT}/include/onnxruntime)
|
||||
|
||||
|
||||
add_subdirectory(external/date EXCLUDE_FROM_ALL)
|
||||
|
||||
if(onnxruntime_PREFER_SYSTEM_LIB)
|
||||
|
|
@ -819,13 +829,17 @@ if (WIN32)
|
|||
if (MSVC)
|
||||
foreach(type EXE STATIC SHARED)
|
||||
if (NOT type MATCHES STATIC)
|
||||
set(CMAKE_${type}_LINKER_FLAGS_RELEASE "${CMAKE_${type}_LINKER_FLAGS_RELEASE} /OPT:REF,ICF,LBR")
|
||||
set(CMAKE_${type}_LINKER_FLAGS_RELEASE "${CMAKE_${type}_LINKER_FLAGS_RELEASE} /INCREMENTAL:NO")
|
||||
set(CMAKE_${type}_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_${type}_LINKER_FLAGS_RELWITHDEBINFO} /OPT:REF,ICF,LBR")
|
||||
set(CMAKE_${type}_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_${type}_LINKER_FLAGS_RELWITHDEBINFO} /INCREMENTAL:NO")
|
||||
#TODO: the "/LTCG" switch should be controlled by onnxruntime_ENABLE_LTO
|
||||
set(CMAKE_${type}_LINKER_FLAGS_MINSIZEREL "${CMAKE_${type}_LINKER_FLAGS_MINSIZEREL} /OPT:REF,ICF,LBR")
|
||||
set(CMAKE_${type}_LINKER_FLAGS_MINSIZEREL "${CMAKE_${type}_LINKER_FLAGS_MINSIZEREL} /INCREMENTAL:NO")
|
||||
endif()
|
||||
if (onnxruntime_ENABLE_LTO AND NOT onnxruntime_USE_CUDA)
|
||||
set(CMAKE_${type}_LINKER_FLAGS_RELEASE "${CMAKE_${type}_LINKER_FLAGS_RELEASE} /LTCG")
|
||||
set(CMAKE_${type}_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_${type}_LINKER_FLAGS_RELWITHDEBINFO} /LTCG")
|
||||
set(CMAKE_${type}_LINKER_FLAGS_MINSIZEREL "${CMAKE_${type}_LINKER_FLAGS_MINSIZEREL} /LTCG")
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
|
|
|
|||
5
cmake/external/onnx_minimal.cmake
vendored
5
cmake/external/onnx_minimal.cmake
vendored
|
|
@ -51,11 +51,6 @@ file(GLOB onnx_src CONFIGURE_DEPENDS
|
|||
"${ONNX_SOURCE_ROOT}/onnx/defs/data_type_utils.*"
|
||||
)
|
||||
|
||||
if (MSVC)
|
||||
SET (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Gw /GL")
|
||||
SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Gw /GL")
|
||||
endif()
|
||||
|
||||
add_library(onnx ${onnx_src})
|
||||
add_dependencies(onnx onnx_proto)
|
||||
target_include_directories(onnx PUBLIC "${ONNX_SOURCE_ROOT}")
|
||||
|
|
|
|||
|
|
@ -71,8 +71,12 @@ endif()
|
|||
|
||||
# strip binary on Android, or for a minimal build on Unix
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Android" OR (onnxruntime_MINIMAL_BUILD AND UNIX))
|
||||
set_target_properties(onnxruntime PROPERTIES LINK_FLAGS_RELEASE -s)
|
||||
set_target_properties(onnxruntime PROPERTIES LINK_FLAGS_MINSIZEREL -s)
|
||||
if (onnxruntime_MINIMAL_BUILD AND ADD_DEBUG_INFO_TO_MINIMAL_BUILD)
|
||||
# don't strip
|
||||
else()
|
||||
set_target_properties(onnxruntime PROPERTIES LINK_FLAGS_RELEASE -s)
|
||||
set_target_properties(onnxruntime PROPERTIES LINK_FLAGS_MINSIZEREL -s)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
target_link_libraries(onnxruntime PRIVATE
|
||||
|
|
@ -109,6 +113,7 @@ set_target_properties(onnxruntime PROPERTIES LINK_DEPENDS ${SYMBOL_FILE})
|
|||
if(onnxruntime_ENABLE_LTO)
|
||||
set_target_properties(onnxruntime PROPERTIES INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE)
|
||||
set_target_properties(onnxruntime PROPERTIES INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO TRUE)
|
||||
set_target_properties(onnxruntime PROPERTIES INTERPROCEDURAL_OPTIMIZATION_MINSIZEREL TRUE)
|
||||
endif()
|
||||
install(TARGETS onnxruntime
|
||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
|
|
|
|||
|
|
@ -147,6 +147,7 @@ set_target_properties(onnxruntime_pybind11_state PROPERTIES FOLDER "ONNXRuntime"
|
|||
if(onnxruntime_ENABLE_LTO)
|
||||
set_target_properties(onnxruntime_pybind11_state PROPERTIES INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE)
|
||||
set_target_properties(onnxruntime_pybind11_state PROPERTIES INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO TRUE)
|
||||
set_target_properties(onnxruntime_pybind11_state PROPERTIES INTERPROCEDURAL_OPTIMIZATION_MINSIZEREL TRUE)
|
||||
endif()
|
||||
if (MSVC)
|
||||
set_target_properties(onnxruntime_pybind11_state PROPERTIES SUFFIX ".pyd")
|
||||
|
|
|
|||
Loading…
Reference in a new issue