summaryrefslogtreecommitdiffstats
path: root/configure.cmake
diff options
context:
space:
mode:
authorAlexandru Croitor <alexandru.croitor@qt.io>2021-12-16 13:25:43 +0100
committerAlexandru Croitor <alexandru.croitor@qt.io>2022-01-20 19:01:27 +0100
commit158287c726b9ee7031c6e832dc159d02473e34d7 (patch)
tree7de695cf1ba1fa7af310b0f56cafefd0662cf3dd /configure.cmake
parentf0371487ce4398e99943bd7dae0944941ef0d505 (diff)
CMake: Add support building Qt with the 'mold' linker
The mold linker is a new linker for Linux that provides faster link times compared to BFD ld, ld.gold and lld. It can be found at https://github.com/rui314/mold To build Qt with mold, ensure that the binary in your PATH and then configure Qt with with either cmake /path/to/qtbase -DINPUT_linker=mold or /path/to/qtbase/configure --linker mold The change was tested with gcc 9, clang 10, clang 12, mold 1.0.0. Only qtbase and qtdeclarative (and dependencies) were tested. Pick-to: 6.2 6.3 Task-number: QTBUG-99270 Change-Id: I2e64a1f4257c37ff5b64a9326e548b9b46e07c80 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'configure.cmake')
-rw-r--r--configure.cmake30
1 files changed, 29 insertions, 1 deletions
diff --git a/configure.cmake b/configure.cmake
index 6cb93ad918..2818db7281 100644
--- a/configure.cmake
+++ b/configure.cmake
@@ -39,6 +39,18 @@ qt_internal_check_if_linker_is_available(use_lld_linker
FLAG "-fuse-ld=lld"
)
+# We set an invalid flag as a default flag so the compile test fails
+# in case if no mold is found in PATH.
+set(__qt_internal_mold_linker_flags "-Wl,-invalid-flag")
+if(NOT QT_CONFIGURE_RUNNING)
+ qt_internal_get_mold_linker_flags(__qt_internal_mold_linker_flags)
+endif()
+qt_internal_check_if_linker_is_available(use_mold_linker
+ LABEL "mold linker"
+ FLAG "${__qt_internal_mold_linker_flags}"
+ )
+unset(__qt_internal_mold_linker_flags)
+
qt_feature("use_bfd_linker"
PRIVATE
LABEL "bfd"
@@ -46,6 +58,7 @@ qt_feature("use_bfd_linker"
CONDITION NOT WIN32 AND NOT INTEGRITY AND NOT WASM AND TEST_use_bfd_linker
ENABLE INPUT_linker STREQUAL 'bfd'
DISABLE INPUT_linker STREQUAL 'gold' OR INPUT_linker STREQUAL 'lld'
+ OR INPUT_linker STREQUAL 'mold'
)
qt_feature_config("use_bfd_linker" QMAKE_PRIVATE_CONFIG)
@@ -60,6 +73,7 @@ qt_feature("use_gold_linker"
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'
+ OR INPUT_linker STREQUAL 'mold'
)
qt_feature_config("use_gold_linker" QMAKE_PRIVATE_CONFIG)
@@ -70,14 +84,27 @@ qt_feature("use_lld_linker"
CONDITION NOT WIN32 AND NOT INTEGRITY AND NOT WASM AND TEST_use_lld_linker
ENABLE INPUT_linker STREQUAL 'lld'
DISABLE INPUT_linker STREQUAL 'bfd' OR INPUT_linker STREQUAL 'gold'
+ OR INPUT_linker STREQUAL 'mold'
)
qt_feature_config("use_lld_linker" QMAKE_PRIVATE_CONFIG)
+qt_feature("use_mold_linker"
+ PRIVATE
+ LABEL "mold"
+ AUTODETECT FALSE
+ CONDITION NOT WIN32 AND NOT INTEGRITY AND NOT WASM AND TEST_use_mold_linker
+ ENABLE INPUT_linker STREQUAL 'mold'
+ DISABLE INPUT_linker STREQUAL 'bfd' OR INPUT_linker STREQUAL 'gold'
+ OR INPUT_linker STREQUAL 'lld'
+)
+qt_feature_config("use_mold_linker" QMAKE_PRIVATE_CONFIG)
+
if(NOT QT_CONFIGURE_RUNNING)
qt_evaluate_feature(use_bfd_linker)
qt_evaluate_feature(use_gold_linker_alias)
qt_evaluate_feature(use_gold_linker)
qt_evaluate_feature(use_lld_linker)
+ qt_evaluate_feature(use_mold_linker)
endif()
@@ -1004,9 +1031,10 @@ qt_configure_add_summary_entry(
)
qt_configure_add_summary_entry(
TYPE "firstAvailableFeature"
- ARGS "use_bfd_linker use_gold_linker use_lld_linker"
+ ARGS "use_bfd_linker use_gold_linker use_lld_linker use_mold_linker"
MESSAGE "Linker"
CONDITION QT_FEATURE_use_bfd_linker OR QT_FEATURE_use_gold_linker OR QT_FEATURE_use_lld_linker
+ OR QT_FEATURE_use_mold_linker
)
qt_configure_add_summary_entry(
ARGS "enable_new_dtags"