From: Daniel Arndt Date: Thu, 20 Apr 2023 20:28:37 +0000 (-0400) Subject: CMake: Test link inteface again X-Git-Tag: v9.5.0-rc1~275^2~3 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=273758f6c7918fb9e1683c4281ccf679352e45ea;p=dealii.git CMake: Test link inteface again --- diff --git a/CMakeLists.txt b/CMakeLists.txt index d63ad2b955..183c858f9e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -111,8 +111,6 @@ foreach(_file ${_check_files}) verbose_include(${_file}) endforeach() -verbose_include(${CMAKE_SOURCE_DIR}/cmake/setup_finalize.cmake) - # # Feature configuration: # @@ -122,6 +120,8 @@ foreach(_file ${_configure_files}) verbose_include(${_file}) endforeach() +verbose_include(${CMAKE_SOURCE_DIR}/cmake/setup_finalize.cmake) + verbose_include(${CMAKE_SOURCE_DIR}/cmake/setup_cpack.cmake) verbose_include(${CMAKE_SOURCE_DIR}/cmake/setup_custom_targets.cmake) diff --git a/cmake/macros/macro_define_interface_target.cmake b/cmake/macros/macro_define_interface_target.cmake index d4b908f667..9569c79447 100644 --- a/cmake/macros/macro_define_interface_target.cmake +++ b/cmake/macros/macro_define_interface_target.cmake @@ -144,10 +144,14 @@ function(define_interface_target _feature) # Future FIXME: change to block(PARENT_SCOPE)/endblock() (CMake 3.25) list(APPEND DEAL_II_TARGETS_${_build} "${_interface_target}") set(DEAL_II_TARGETS_${_build} ${DEAL_II_TARGETS_${_build}} PARENT_SCOPE) + list(APPEND DEAL_II_LIBRARIES_${_build} "${_libraries}") + set(DEAL_II_LIBRARIES_${build} ${DEAL_II_LIBRARIES_${build}} PARENT_SCOPE) else() # Future FIXME: change to block(PARENT_SCOPE)/endblock() (CMake 3.25) list(APPEND DEAL_II_TARGETS "${_interface_target}") set(DEAL_II_TARGETS ${DEAL_II_TARGETS} PARENT_SCOPE) + list(APPEND DEAL_II_LIBRARIES "${_libraries}") + set(DEAL_II_LIBRARIES ${DEAL_II_LIBRARIES} PARENT_SCOPE) endif() endforeach() diff --git a/cmake/setup_finalize.cmake b/cmake/setup_finalize.cmake index 6ab2f2890f..20600b3952 100644 --- a/cmake/setup_finalize.cmake +++ b/cmake/setup_finalize.cmake @@ -55,12 +55,64 @@ endforeach() # foreach(build ${DEAL_II_BUILD_TYPES}) - check_compiler_setup( - "${DEAL_II_CXX_FLAGS} ${DEAL_II_CXX_FLAGS_${build}}" - "${DEAL_II_LINKER_FLAGS} ${DEAL_II_LINKER_FLAGS_${build}}" - DEAL_II_HAVE_USABLE_FLAGS_${build} - ${DEAL_II_LIBRARIES} ${DEAL_II_LIBRARIES_${build}} - ) + macro(_check_linker_flags) + check_compiler_setup( + "${DEAL_II_CXX_FLAGS} ${DEAL_II_CXX_FLAGS_${build}}" + "${DEAL_II_LINKER_FLAGS} ${DEAL_II_LINKER_FLAGS_${build}}" + DEAL_II_HAVE_USABLE_FLAGS_${build} + ${DEAL_II_LIBRARIES} ${DEAL_II_LIBRARIES_${build}} + ) + endmacro() + + macro(_drop_linker_flag _linker_flag _replacement_flag _variable) + message(STATUS + "Unable to compile a simple test program. " + "Trying to drop \"${_linker_flag}\" from the linker flags." + ) + foreach(_flags + DEAL_II_LINKER_FLAGS DEAL_II_LINKER_FLAGS_${build} + BASE_LINKER_FLAGS BASE_LINKER_FLAGS_${build} + ) + string(REPLACE "${_linker_flag}" "${_replacement_flag}" + ${_flags} "${${_flags}}" + ) + endforeach() + set(${_variable} FALSE CACHE INTERNAL "" FORCE) + set(${_variable} FALSE) + endmacro() + + _check_linker_flags() + + if(NOT DEAL_II_HAVE_USABLE_FLAGS_${build} AND DEAL_II_COMPILER_HAS_FUSE_LD_LLD) + set(_replacement "") + if(DEAL_II_COMPILER_HAS_FUSE_LD_GOLD) + set(_replacement "-fuse-ld=gold") + endif() + _drop_linker_flag( + "-fuse-ld=lld" ${_replacement} + DEAL_II_COMPILER_HAS_FUSE_LD_LLD + ) + _check_linker_flags() + endif() + + if(NOT DEAL_II_HAVE_USABLE_FLAGS_${build} AND DEAL_II_COMPILER_HAS_FUSE_LD_GOLD) + _drop_linker_flag( + "-fuse-ld=gold" "" + DEAL_II_COMPILER_HAS_FUSE_LD_GOLD + ) + _check_linker_flags() + endif() + + if(NOT DEAL_II_HAVE_USABLE_FLAGS_${build}) + message(FATAL_ERROR " + Configuration error: Cannot compile a test program with the final set of + compiler and linker flags: + CXX flags (${build}): ${DEAL_II_CXX_FLAGS} ${DEAL_II_CXX_FLAGS_${build}} + LD flags (${build}): ${DEAL_II_LINKER_FLAGS} ${DEAL_II_LINKER_FLAGS_${build}} + LIBRARIES (${build}): ${DEAL_II_LIBRARIES};${DEAL_II_LIBRARIES_${build}} + \n\n" + ) + endif() endforeach() #