CMake: Fix detection of linker availability
Previously we passed flags like -ld-fuse=lld only to compile calls, but not to the link call of a compile test project. Make sure to pass it to the link call instead by using check_cxx_source_compiles + CMAKE_REQUIRED_LINK_OPTIONS instead of check_cxx_compiler_flag. Note the flag that is passed is still via passed via the compiler launcher and not directly to the linker. Remove duplicate flag handling code. Pick-to: 6.2 6.3 Change-Id: I1bf90573904a9df83240b6debfee3cc9e425c6bb Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
This commit is contained in:
parent
461f68c5c9
commit
d6066d53fa
@ -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})
|
||||
|
@ -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")
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user