diff options
author | V3n3RiX <venerix@koprulu.sector> | 2021-10-30 19:43:03 +0100 |
---|---|---|
committer | V3n3RiX <venerix@koprulu.sector> | 2021-10-30 19:43:03 +0100 |
commit | 162945d2a91899b637bbb9e163b406350de12906 (patch) | |
tree | 49cc2cc66f724a7c6f033f93aaba4ae3be1f2259 /dev-cpp/tbb/files/tbb-2021.4.0-lto.patch | |
parent | f660c6de84558324d784218831d8f0782ee41e2e (diff) |
gentoo resync : 30.10.2021
Diffstat (limited to 'dev-cpp/tbb/files/tbb-2021.4.0-lto.patch')
-rw-r--r-- | dev-cpp/tbb/files/tbb-2021.4.0-lto.patch | 247 |
1 files changed, 247 insertions, 0 deletions
diff --git a/dev-cpp/tbb/files/tbb-2021.4.0-lto.patch b/dev-cpp/tbb/files/tbb-2021.4.0-lto.patch new file mode 100644 index 000000000000..5be97b90605d --- /dev/null +++ b/dev-cpp/tbb/files/tbb-2021.4.0-lto.patch @@ -0,0 +1,247 @@ +From 6feeba8035ea2bdf652d473a35730b19427752db Mon Sep 17 00:00:00 2001 +From: Ivan Kochin <kochin.ivan@intel.com> +Date: Wed, 27 Oct 2021 17:23:32 +0300 +Subject: [PATCH] Use native CMake way to detect the IPO support (#608) + +* Use native CMake way to detect the IPO support + +Signed-off-by: Kochin Ivan <kochin.ivan@intel.com> +--- + CMakeLists.txt | 17 +++++++++++++++++ + cmake/README.md | 1 + + cmake/compilers/Clang.cmake | 8 ++------ + cmake/compilers/GNU.cmake | 8 +++----- + cmake/compilers/MSVC.cmake | 1 + + cmake/utils.cmake | 13 +++++++++++++ + src/tbb/CMakeLists.txt | 5 ++--- + src/tbbbind/CMakeLists.txt | 6 +++--- + src/tbbmalloc/CMakeLists.txt | 5 ++--- + 9 files changed, 44 insertions(+), 20 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 13b1dbc2c..4dbdadb97 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -103,6 +103,7 @@ option(TBBMALLOC_BUILD "Enable tbbmalloc build" ON) + option(TBB_CPF "Enable preview features of the library" OFF) + option(TBB_FIND_PACKAGE "Enable search for external oneTBB using find_package instead of build from sources" OFF) + option(TBB_DISABLE_HWLOC_AUTOMATIC_SEARCH "Disable HWLOC automatic search by pkg-config tool" OFF) ++option(TBB_ENABLE_IPO "Enable Interprocedural Optimization (IPO) during the compilation" ON) + + if (NOT DEFINED BUILD_SHARED_LIBS) + set(BUILD_SHARED_LIBS ON) +@@ -181,6 +182,22 @@ foreach(FILE_WITH_EXTRA_TARGETS ${FILES_WITH_EXTRA_TARGETS}) + include(${FILE_WITH_EXTRA_TARGETS}) + endforeach() + ++# - Enabling LTO on Android causes the NDK bug. ++# NDK throws the warning: "argument unused during compilation: '-Wa,--noexecstack'" ++# - For some reason GCC does not instrument code with Thread Sanitizer when lto is enabled and C linker is used. ++if (TBB_ENABLE_IPO AND BUILD_SHARED_LIBS AND NOT ANDROID_PLATFORM AND NOT TBB_SANITIZE MATCHES "thread") ++ if (NOT CMAKE_VERSION VERSION_LESS 3.9) ++ cmake_policy(SET CMP0069 NEW) ++ include(CheckIPOSupported) ++ check_ipo_supported(RESULT TBB_IPO_PROPERTY) ++ else() ++ set(TBB_IPO_FLAGS TRUE) ++ endif() ++ if (TBB_IPO_PROPERTY OR TBB_IPO_FLAGS) ++ message(STATUS "IPO enabled") ++ endif() ++endif() ++ + set(TBB_COMPILER_SETTINGS_FILE ${CMAKE_CURRENT_SOURCE_DIR}/cmake/compilers/${CMAKE_CXX_COMPILER_ID}.cmake) + if (EXISTS ${TBB_COMPILER_SETTINGS_FILE}) + include(${TBB_COMPILER_SETTINGS_FILE}) +diff --git a/cmake/README.md b/cmake/README.md +index ec56e423c..ed1631de3 100644 +--- a/cmake/README.md ++++ b/cmake/README.md +@@ -16,6 +16,7 @@ TBB_CPF:BOOL - Enable preview features of the library (OFF by default) + TBB_INSTALL_VARS:BOOL - Enable auto-generated vars installation(packages generated by `cpack` and `make install` will also include the vars script)(OFF by default) + TBB_VALGRIND_MEMCHECK:BOOL - Enable scan for memory leaks using Valgrind (OFF by default) + TBB_DISABLE_HWLOC_AUTOMATIC_SEARCH - Disable HWLOC automatic search by pkg-config tool (OFF by default) ++TBB_ENABLE_IPO - Enable Interprocedural Optimization (IPO) during the compilation (ON by default) + ``` + + ## Configure, build and test +diff --git a/cmake/compilers/Clang.cmake b/cmake/compilers/Clang.cmake +index 183341fcc..69aa51932 100644 +--- a/cmake/compilers/Clang.cmake ++++ b/cmake/compilers/Clang.cmake +@@ -58,12 +58,8 @@ if (MINGW) + list(APPEND TBB_COMMON_COMPILE_FLAGS -U__STRICT_ANSI__) + endif() + +-# Enabling LTO on Android causes the NDK bug. +-# NDK throws the warning: "argument unused during compilation: '-Wa,--noexecstack'" +-if (NOT ANDROID_PLATFORM AND BUILD_SHARED_LIBS) +- set(TBB_IPO_COMPILE_FLAGS $<$<NOT:$<CONFIG:Debug>>:-flto>) +- set(TBB_IPO_LINK_FLAGS $<$<NOT:$<CONFIG:Debug>>:-flto>) +-endif() ++set(TBB_IPO_COMPILE_FLAGS $<$<NOT:$<CONFIG:Debug>>:-flto>) ++set(TBB_IPO_LINK_FLAGS $<$<NOT:$<CONFIG:Debug>>:-flto>) + + # TBB malloc settings + set(TBBMALLOC_LIB_COMPILE_FLAGS -fno-rtti -fno-exceptions) +diff --git a/cmake/compilers/GNU.cmake b/cmake/compilers/GNU.cmake +index fa14c869e..a9cfa8927 100644 +--- a/cmake/compilers/GNU.cmake ++++ b/cmake/compilers/GNU.cmake +@@ -63,11 +63,9 @@ if (MINGW) + list(APPEND TBB_COMMON_COMPILE_FLAGS -U__STRICT_ANSI__) + endif() + +-# For some reason GCC does not instrument code with Thread Sanitizer when lto is enabled and C linker is used. +-if (NOT TBB_SANITIZE MATCHES "thread") +- set(TBB_IPO_COMPILE_FLAGS $<$<NOT:$<CONFIG:Debug>>:-flto>) +- set(TBB_IPO_LINK_FLAGS $<$<NOT:$<CONFIG:Debug>>:-flto>) +-endif() ++set(TBB_IPO_COMPILE_FLAGS $<$<NOT:$<CONFIG:Debug>>:-flto>) ++set(TBB_IPO_LINK_FLAGS $<$<NOT:$<CONFIG:Debug>>:-flto>) ++ + + # TBB malloc settings + set(TBBMALLOC_LIB_COMPILE_FLAGS -fno-rtti -fno-exceptions) +diff --git a/cmake/compilers/MSVC.cmake b/cmake/compilers/MSVC.cmake +index 3447418cc..5767235a0 100644 +--- a/cmake/compilers/MSVC.cmake ++++ b/cmake/compilers/MSVC.cmake +@@ -77,6 +77,7 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "(Clang|IntelLLVM)") + endif() + set(TBB_OPENMP_NO_LINK_FLAG TRUE) + set(TBB_IPO_COMPILE_FLAGS $<$<NOT:$<CONFIG:Debug>>:-flto>) ++ set(TBB_IPO_LINK_FLAGS $<$<NOT:$<CONFIG:Debug>>:-flto>) + else() + set(TBB_IPO_COMPILE_FLAGS $<$<NOT:$<CONFIG:Debug>>:/GL>) + set(TBB_IPO_LINK_FLAGS $<$<NOT:$<CONFIG:Debug>>:-LTCG> $<$<NOT:$<CONFIG:Debug>>:-INCREMENTAL:NO>) +diff --git a/cmake/utils.cmake b/cmake/utils.cmake +index 06d3a9aee..f74abfcf9 100644 +--- a/cmake/utils.cmake ++++ b/cmake/utils.cmake +@@ -44,3 +44,16 @@ macro(tbb_install_target target) + COMPONENT devel) + endif() + endmacro() ++ ++macro(tbb_handle_ipo target) ++ if (TBB_IPO_PROPERTY) ++ set_target_properties(${target} PROPERTIES INTERPROCEDURAL_OPTIMIZATION TRUE) ++ elseif (TBB_IPO_FLAGS) ++ target_compile_options(${target} PRIVATE ${TBB_IPO_COMPILE_FLAGS}) ++ if (COMMAND target_link_options) ++ target_link_options(${target} PRIVATE ${TBB_IPO_LINK_FLAGS}) ++ else() ++ target_link_libraries(${target} PRIVATE ${TBB_IPO_LINK_FLAGS}) ++ endif() ++ endif() ++endmacro() +diff --git a/src/tbb/CMakeLists.txt b/src/tbb/CMakeLists.txt +index 80fdcdcde..021392d89 100644 +--- a/src/tbb/CMakeLists.txt ++++ b/src/tbb/CMakeLists.txt +@@ -79,7 +79,6 @@ target_compile_options(tbb + ${TBB_WARNING_SUPPRESS} + ${TBB_LIB_COMPILE_FLAGS} + ${TBB_COMMON_COMPILE_FLAGS} +- ${TBB_IPO_COMPILE_FLAGS} + ) + + # Avoid use of target_link_libraries here as it changes /DEF option to \DEF on Windows. +@@ -89,6 +88,8 @@ set_target_properties(tbb PROPERTIES + SOVERSION ${TBB_BINARY_VERSION} + ) + ++tbb_handle_ipo(tbb) ++ + if (TBB_DEF_FILE_PREFIX) # If there's no prefix, assume we're using export directives + set_target_properties(tbb PROPERTIES + LINK_FLAGS ${TBB_LINK_DEF_FILE_FLAG}${CMAKE_CURRENT_SOURCE_DIR}/def/${TBB_DEF_FILE_PREFIX}-tbb.def +@@ -103,14 +104,12 @@ if (COMMAND target_link_options) + PRIVATE + ${TBB_LIB_LINK_FLAGS} + ${TBB_COMMON_LINK_FLAGS} +- ${TBB_IPO_LINK_FLAGS} + ) + else() + target_link_libraries(tbb + PRIVATE + ${TBB_LIB_LINK_FLAGS} + ${TBB_COMMON_LINK_FLAGS} +- ${TBB_IPO_LINK_FLAGS} + ) + endif() + +diff --git a/src/tbbbind/CMakeLists.txt b/src/tbbbind/CMakeLists.txt +index 99b7ccaac..3233ec718 100644 +--- a/src/tbbbind/CMakeLists.txt ++++ b/src/tbbbind/CMakeLists.txt +@@ -46,7 +46,6 @@ function(tbbbind_build TBBBIND_NAME REQUIRED_HWLOC_TARGET) + ${TBB_WARNING_LEVEL} + ${TBB_LIB_COMPILE_FLAGS} + ${TBB_COMMON_COMPILE_FLAGS} +- ${TBB_IPO_COMPILE_FLAGS} + ) + + # Avoid use of target_link_libraries here as it changes /DEF option to \DEF on Windows. +@@ -55,6 +54,9 @@ function(tbbbind_build TBBBIND_NAME REQUIRED_HWLOC_TARGET) + VERSION ${TBBBIND_BINARY_VERSION}.${TBB_BINARY_MINOR_VERSION} + SOVERSION ${TBBBIND_BINARY_VERSION} + ) ++ ++ tbb_handle_ipo(${TBBBIND_NAME}) ++ + if (TBB_DEF_FILE_PREFIX) # If there's no prefix, assume we're using export directives + set_target_properties(${TBBBIND_NAME} PROPERTIES + LINK_FLAGS ${TBB_LINK_DEF_FILE_FLAG}${CMAKE_CURRENT_SOURCE_DIR}/def/${TBB_DEF_FILE_PREFIX}-tbbbind.def +@@ -69,14 +71,12 @@ function(tbbbind_build TBBBIND_NAME REQUIRED_HWLOC_TARGET) + PRIVATE + ${TBB_LIB_LINK_FLAGS} + ${TBB_COMMON_LINK_FLAGS} +- ${TBB_IPO_LINK_FLAGS} + ) + else() + target_link_libraries(${TBBBIND_NAME} + PRIVATE + ${TBB_LIB_LINK_FLAGS} + ${TBB_COMMON_LINK_FLAGS} +- ${TBB_IPO_LINK_FLAGS} + ) + endif() + +diff --git a/src/tbbmalloc/CMakeLists.txt b/src/tbbmalloc/CMakeLists.txt +index f77bc8f10..5a851851f 100644 +--- a/src/tbbmalloc/CMakeLists.txt ++++ b/src/tbbmalloc/CMakeLists.txt +@@ -59,7 +59,6 @@ target_compile_options(tbbmalloc + ${TBB_LIB_COMPILE_FLAGS} + ${TBBMALLOC_LIB_COMPILE_FLAGS} + ${TBB_COMMON_COMPILE_FLAGS} +- ${TBB_IPO_COMPILE_FLAGS} + ) + + enable_language(C) +@@ -72,6 +71,8 @@ set_target_properties(tbbmalloc PROPERTIES + LINKER_LANGUAGE C + ) + ++tbb_handle_ipo(tbbmalloc) ++ + if (TBB_DEF_FILE_PREFIX) # If there's no prefix, assume we're using export directives + set_target_properties(tbbmalloc PROPERTIES + LINK_FLAGS ${TBB_LINK_DEF_FILE_FLAG}${CMAKE_CURRENT_SOURCE_DIR}/def/${TBB_DEF_FILE_PREFIX}-tbbmalloc.def +@@ -88,14 +89,12 @@ if (COMMAND target_link_options) + PRIVATE + ${TBB_LIB_LINK_FLAGS} + ${TBB_COMMON_LINK_FLAGS} +- ${TBB_IPO_LINK_FLAGS} + ) + else() + target_link_libraries(tbbmalloc + PRIVATE + ${TBB_LIB_LINK_FLAGS} + ${TBB_COMMON_LINK_FLAGS} +- ${TBB_IPO_LINK_FLAGS} + ) + endif() + |