From: Matthias Maier Date: Fri, 3 Feb 2017 08:35:32 +0000 (-0600) Subject: CMake: Disable -Wl,--as-needed in DEAL_II_HAVE_USABLE_FLAGS X-Git-Tag: v8.5.0-rc1~153^2 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F3916%2Fhead;p=dealii.git CMake: Disable -Wl,--as-needed in DEAL_II_HAVE_USABLE_FLAGS This works around a serious regression with ld.bfd in combination with -Wl,--as-needed when compiling a simple int main () { return 0; } and linking against a *huge* list of (entirely unused) libraries. See #3686 --- diff --git a/cmake/macros/macro_check_compiler_setup.cmake b/cmake/macros/macro_check_compiler_setup.cmake index 32c33a77aa..70ba2d38af 100644 --- a/cmake/macros/macro_check_compiler_setup.cmake +++ b/cmake/macros/macro_check_compiler_setup.cmake @@ -26,11 +26,29 @@ # MACRO(CHECK_COMPILER_SETUP _compiler_flags_unstr _linker_flags_unstr _var) + # + # Strip -Wl,--as-needed from the list of linker flags. This works around + # a serious regression with ld.bfd in combination with -Wl,--as-needed + # when compiling a simple + # + # int main () { return 0; } + # + # and linking against a *huge* list of (entirely unused) libraries. + # + # Ideally, one should use ld.gold [1] instead of ld.bfd - but because + # this is not always possible, simply disable -Wl,--as-needed. + # + # See https://github.com/dealii/dealii/issues/3686 + # + # [1] https://lwn.net/Articles/274859/ + # + STRING(REPLACE "-Wl,--as-needed" "" _linker_flags "${_linker_flags_unstr}") + # # Strip leading and trailing whitespace to make CMake 2.8.8 happy # STRING(STRIP "${_compiler_flags_unstr}" _compiler_flags) - STRING(STRIP "${_linker_flags_unstr}" _linker_flags) + STRING(STRIP "${_linker_flags}" _linker_flags) # # Rerun this test if flags have changed: