diff options
-rw-r--r-- | cmake/QtFeature.cmake | 40 | ||||
-rw-r--r-- | cmake/QtInternalTargets.cmake | 10 | ||||
-rw-r--r-- | cmake/QtProcessConfigureArgs.cmake | 2 | ||||
-rw-r--r-- | configure.cmake | 6 |
4 files changed, 39 insertions, 19 deletions
diff --git a/cmake/QtFeature.cmake b/cmake/QtFeature.cmake index 09a1c8361c..3ade942f17 100644 --- a/cmake/QtFeature.cmake +++ b/cmake/QtFeature.cmake @@ -1118,6 +1118,33 @@ function(qt_config_compiler_supports_flag_test name) set(TEST_${name} "${TEST_${name}}" CACHE INTERNAL "${label}") endfunction() +function(qt_internal_get_active_linker_flags out_var) + set(flags "") + if(GCC OR CLANG) + if(QT_FEATURE_use_gold_linker) + list(APPEND flags "-fuse-ld=gold") + elseif(QT_FEATURE_use_bfd_linker) + list(APPEND flags "-fuse-ld=bfd") + elseif(QT_FEATURE_use_lld_linker) + list(APPEND flags "-fuse-ld=lld") + endif() + endif() + set(${out_var} "${flags}" PARENT_SCOPE) +endfunction() + +function(qt_internal_check_if_linker_is_available name) + if(DEFINED "TEST_${name}") + return() + endif() + + cmake_parse_arguments(arg "" "LABEL;FLAG" "" ${ARGN}) + set(flags "${arg_FLAG}") + + set(CMAKE_REQUIRED_LINK_OPTIONS ${flags}) + check_cxx_source_compiles("int main() { return 0; }" TEST_${name}) + set(TEST_${name} "${TEST_${name}}" CACHE INTERNAL "${label}") +endfunction() + function(qt_config_linker_supports_flag_test name) if(DEFINED "TEST_${name}") return() @@ -1126,15 +1153,10 @@ function(qt_config_linker_supports_flag_test name) cmake_parse_arguments(arg "" "LABEL;FLAG" "" ${ARGN}) set(flags "-Wl,${arg_FLAG}") - # Select the right linker. - if(GCC OR CLANG) - if(QT_FEATURE_use_gold_linker) - list(PREPEND flags "-fuse-ld=gold") - elseif(QT_FEATURE_use_bfd_linker) - list(PREPEND flags "-fuse-ld=bfd") - elseif(QT_FEATURE_use_lld_linker) - list(PREPEND flags "-fuse-ld=lld") - endif() + # Pass the linker that the main project uses to the compile test. + qt_internal_get_active_linker_flags(linker_flags) + if(linker_flags) + list(PREPEND flags ${linker_flags}) endif() set(CMAKE_REQUIRED_LINK_OPTIONS ${flags}) diff --git a/cmake/QtInternalTargets.cmake b/cmake/QtInternalTargets.cmake index 0eefc63929..693c0eb83f 100644 --- a/cmake/QtInternalTargets.cmake +++ b/cmake/QtInternalTargets.cmake @@ -248,13 +248,11 @@ if(DEFINED QT_EXTRA_FRAMEWORKPATHS AND APPLE) unset(__qt_fw_flags) endif() -if(QT_FEATURE_use_gold_linker) - target_link_options(PlatformCommonInternal INTERFACE "-fuse-ld=gold") -elseif(QT_FEATURE_use_bfd_linker) - target_link_options(PlatformCommonInternal INTERFACE "-fuse-ld=bfd") -elseif(QT_FEATURE_use_lld_linker) - target_link_options(PlatformCommonInternal INTERFACE "-fuse-ld=lld") +qt_internal_get_active_linker_flags(__qt_internal_active_linker_flags) +if(__qt_internal_active_linker_flags) + target_link_options(PlatformCommonInternal INTERFACE "${__qt_internal_active_linker_flags}") endif() +unset(__qt_internal_active_linker_flags) if(QT_FEATURE_enable_gdb_index) target_link_options(PlatformCommonInternal INTERFACE "-Wl,--gdb-index") diff --git a/cmake/QtProcessConfigureArgs.cmake b/cmake/QtProcessConfigureArgs.cmake index 6342df93bd..2440f63627 100644 --- a/cmake/QtProcessConfigureArgs.cmake +++ b/cmake/QtProcessConfigureArgs.cmake @@ -151,7 +151,7 @@ defstub(qt_find_package) defstub(set_package_properties) defstub(qt_qml_find_python) defstub(qt_set01) - +defstub(qt_internal_check_if_linker_is_available) #################################################################################################### # Define functions/macros that are called in qt_cmdline.cmake files diff --git a/configure.cmake b/configure.cmake index 1d24d1d278..6cb93ad918 100644 --- a/configure.cmake +++ b/configure.cmake @@ -24,17 +24,17 @@ qt_find_package(Libudev PROVIDED_TARGETS PkgConfig::Libudev MODULE_NAME global Q #### Early-evaluated, Linker-related Tests and Features -qt_config_compiler_supports_flag_test(use_bfd_linker +qt_internal_check_if_linker_is_available(use_bfd_linker LABEL "bfd linker" FLAG "-fuse-ld=bfd" ) -qt_config_compiler_supports_flag_test(use_gold_linker +qt_internal_check_if_linker_is_available(use_gold_linker LABEL "gold linker" FLAG "-fuse-ld=gold" ) -qt_config_compiler_supports_flag_test(use_lld_linker +qt_internal_check_if_linker_is_available(use_lld_linker LABEL "lld linker" FLAG "-fuse-ld=lld" ) |