summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cmake/QtFeature.cmake40
-rw-r--r--cmake/QtInternalTargets.cmake10
-rw-r--r--cmake/QtProcessConfigureArgs.cmake2
-rw-r--r--configure.cmake6
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"
)