summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@qt.io>2020-08-20 09:06:16 +0200
committerJoerg Bornemann <joerg.bornemann@qt.io>2020-08-20 17:07:49 +0200
commit2f1a55c0b13ea02619f0d209a2b710fb7cbe8a1a (patch)
tree4659347755d9b009980e3847d1cfb92f3a9bc9ab
parentdf28355981e14c90dc0f214ceeba40be77401fb4 (diff)
CMake: Implement configure -linker [bfd,gold,lld]
Fixes: QTBUG-86155 Change-Id: I5ba2d3b52d9ca240b48904c492f7902a056c0292 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
-rw-r--r--cmake/QtInternalTargets.cmake8
-rw-r--r--cmake/configure-cmake-mapping.md3
-rw-r--r--configure.cmake14
-rwxr-xr-xutil/cmake/configurejson2cmake.py4
4 files changed, 26 insertions, 3 deletions
diff --git a/cmake/QtInternalTargets.cmake b/cmake/QtInternalTargets.cmake
index bd3d034f60..e59e075d32 100644
--- a/cmake/QtInternalTargets.cmake
+++ b/cmake/QtInternalTargets.cmake
@@ -213,6 +213,14 @@ 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")
+endif()
+
function(qt_get_implicit_sse2_genex_condition out_var)
set(is_shared_lib "$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>")
set(is_static_lib "$<STREQUAL:$<TARGET_PROPERTY:TYPE>,STATIC_LIBRARY>")
diff --git a/cmake/configure-cmake-mapping.md b/cmake/configure-cmake-mapping.md
index e0edfe98e7..cafe139ce8 100644
--- a/cmake/configure-cmake-mapping.md
+++ b/cmake/configure-cmake-mapping.md
@@ -66,7 +66,8 @@ The effort of this is tracked in QTBUG-85373 and QTBUG-85349.
| -static-runtime | -DFEATURE_static_runtime=ON | |
| -pch | -DBUILD_WITH_PCH=ON | |
| -ltcg | | |
-| -linker [bfd,gold,lld] | | |
+| -linker [bfd,gold,lld] | -DINPUT_linker=<name> or | |
+| | -DFEATURE_use_<name>_linker=ON | |
| -incredibuild-xge | | |
| -ccache | -DQT_USE_CCACHE=ON | |
| -make-tool <tool> | n/a | |
diff --git a/configure.cmake b/configure.cmake
index 0fb01ef4fb..d870e3a759 100644
--- a/configure.cmake
+++ b/configure.cmake
@@ -393,6 +393,14 @@ qt_feature("use_gold_linker_alias"
AUTODETECT false
CONDITION NOT WIN32 AND NOT INTEGRITY AND NOT WASM AND TEST_use_gold_linker
)
+qt_feature("use_gold_linker"
+ LABEL "gold"
+ AUTODETECT false
+ CONDITION NOT WIN32 AND NOT INTEGRITY AND NOT WASM AND NOT rtems AND TEST_use_gold_linker
+ ENABLE INPUT_linker STREQUAL 'gold' OR QT_FEATURE_use_gold_linker_alias
+ DISABLE INPUT_linker STREQUAL 'bfd' OR INPUT_linker STREQUAL 'lld'
+)
+qt_feature_config("use_gold_linker" QMAKE_PRIVATE_CONFIG)
qt_feature("use_lld_linker"
LABEL "lld"
AUTODETECT false
@@ -913,6 +921,12 @@ qt_configure_add_summary_entry(
CONDITION UNIX
)
qt_configure_add_summary_entry(
+ TYPE "firstAvailableFeature"
+ ARGS "use_bfd_linker use_gold_linker use_lld_linker"
+ MESSAGE "Linker"
+ CONDITION QT_FEATURE_use_bfd_linker OR QT_FEATURE_use_gold_linker OR QT_FEATURE_use_lld_linker
+)
+qt_configure_add_summary_entry(
ARGS "enable_new_dtags"
CONDITION LINUX
)
diff --git a/util/cmake/configurejson2cmake.py b/util/cmake/configurejson2cmake.py
index 86ebf4bae8..81181135ac 100755
--- a/util/cmake/configurejson2cmake.py
+++ b/util/cmake/configurejson2cmake.py
@@ -945,7 +945,6 @@ def get_feature_mapping():
"stl": None, # Do we really need to test for this in 2018?!
"strip": None,
"tiff": {"condition": "QT_FEATURE_imageformatplugin AND TIFF_FOUND"},
- "use_gold_linker": None,
"verifyspec": None, # qmake specific...
"warnings_are_errors": None, # FIXME: Do we need these?
"webp": {"condition": "QT_FEATURE_imageformatplugin AND WrapWebP_FOUND"},
@@ -1007,7 +1006,8 @@ def parseFeature(ctx, feature, data, cm_fh):
if isinstance(o, dict):
outputType = o["type"]
- if outputType in ["varAssign", "varAppend", "varRemove"]:
+ if outputType in ["varAssign", "varAppend", "varRemove",
+ "useBFDLinker", "useGoldLinker", "useLLDLinker"]:
continue
elif outputType == "define":
publicDefine = True