diff --git a/CMakeLists.txt b/CMakeLists.txt index bd5bd1c2..04856291 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -243,25 +243,21 @@ else() option(BUILD_FOR_NATIVE_CPU "Generate code for the compiling machine CPU" OFF) endif() - if((CMAKE_CONFIGURATION_TYPES OR NOT CMAKE_BUILD_TYPE_UPPERCASE STREQUAL "DEBUG") - AND (NOT CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 6.0) - AND (NOT CMAKE_COMPILER_IS_CLANG OR CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.0)) - set(INTERPROCEDURAL_OPTIMIZATION_DEFAULT ON) - else() - set(INTERPROCEDURAL_OPTIMIZATION_DEFAULT OFF) - endif() - if(CMAKE_INTERPROCEDURAL_OPTIMIZATION_AVAILABLE OR GCC_LTO_AVAILABLE OR MSVC_LTO_AVAILABLE OR CLANG_LTO_AVAILABLE) - option(INTERPROCEDURAL_OPTIMIZATION "Enable interprocedural/LTO optimization" ${INTERPROCEDURAL_OPTIMIZATION_DEFAULT}) - else() - set(INTERPROCEDURAL_OPTIMIZATION OFF) + if((CMAKE_CONFIGURATION_TYPES OR NOT CMAKE_BUILD_TYPE_UPPERCASE STREQUAL "DEBUG") AND + ((MSVC_LTO_AVAILABLE AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 19) OR + (GCC_LTO_AVAILABLE AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 7) OR + (CLANG_LTO_AVAILABLE AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 5))) + set(INTERPROCEDURAL_OPTIMIZATION_DEFAULT ON) + else() + set(INTERPROCEDURAL_OPTIMIZATION_DEFAULT OFF) + endif() + option(INTERPROCEDURAL_OPTIMIZATION "Enable interprocedural/LTO optimization." ${INTERPROCEDURAL_OPTIMIZATION_DEFAULT}) endif() if(INTERPROCEDURAL_OPTIMIZATION) - if(GCC_LTO_AVAILABLE AND - # Отключаем LTO для G++ < 7.0, ибо падает: lto1: internal compiler error: in splice_child_die, at dwarf2out.c:5030 - (NOT CMAKE_CXX_COMPILER_LOADED OR NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7)) + if(GCC_LTO_AVAILABLE) set(LTO_ENABLED TRUE) set(CMAKE_AR ${CMAKE_GCC_AR} CACHE PATH "Path to ar program with LTO-plugin" FORCE) set(CMAKE_C_COMPILER_AR ${CMAKE_AR} CACHE PATH "Path to ar program with LTO-plugin" FORCE)