diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2018-12-19 17:37:58 +0100 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2019-01-14 13:48:58 +0000 |
commit | 893b4dc56c7e2ef21f4e253ccbbb20643d18cadf (patch) | |
tree | 8d467b2fe7e3580f38f00cd359c37b53cada8c60 | |
parent | 90588a6a719aa143500d480582ae2de733ac7c0d (diff) |
Qt support: Use gold linker if Qt is configured that way
Fixes: QBS-1421
Change-Id: I1f6d749eba38c9a4caa60341f19ee5e89e89d28a
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
-rw-r--r-- | src/lib/qtprofilesetup/qtmoduleinfo.cpp | 5 | ||||
-rw-r--r-- | src/lib/qtprofilesetup/qtmoduleinfo.h | 1 | ||||
-rw-r--r-- | src/lib/qtprofilesetup/qtprofilesetup.cpp | 1 | ||||
-rw-r--r-- | src/lib/qtprofilesetup/templates/QtModule.qbs | 1 | ||||
-rw-r--r-- | src/lib/qtprofilesetup/templates/core.qbs | 6 | ||||
-rw-r--r-- | src/lib/qtprofilesetup/templates/dbus.qbs | 1 | ||||
-rw-r--r-- | src/lib/qtprofilesetup/templates/module.qbs | 1 | ||||
-rw-r--r-- | src/lib/qtprofilesetup/templates/qml.qbs | 1 | ||||
-rw-r--r-- | src/lib/qtprofilesetup/templates/quick.qbs | 1 | ||||
-rw-r--r-- | src/lib/qtprofilesetup/templates/scxml.qbs | 1 | ||||
-rw-r--r-- | tests/auto/blackbox/testdata-qt/linker-variant/main.cpp | 6 | ||||
-rw-r--r-- | tests/auto/blackbox/testdata-qt/linker-variant/qt-linker-variant.qbs | 10 | ||||
-rw-r--r-- | tests/auto/blackbox/tst_blackboxqt.cpp | 10 | ||||
-rw-r--r-- | tests/auto/blackbox/tst_blackboxqt.h | 1 |
14 files changed, 46 insertions, 0 deletions
diff --git a/src/lib/qtprofilesetup/qtmoduleinfo.cpp b/src/lib/qtprofilesetup/qtmoduleinfo.cpp index c225bde67..bc3d25911 100644 --- a/src/lib/qtprofilesetup/qtmoduleinfo.cpp +++ b/src/lib/qtprofilesetup/qtmoduleinfo.cpp @@ -399,6 +399,11 @@ void QtModuleInfo::setupLibraries(const QtEnvironment &qtEnv, bool debugBuild, } continue; } + if (simplifiedLine.startsWith("QMAKE_PRL_CONFIG")) { + config = QString::fromLatin1(simplifiedLine.mid(equalsOffset + 1).trimmed()) + .split(QLatin1Char(' '), QString::SkipEmptyParts); + continue; + } if (!simplifiedLine.startsWith("QMAKE_PRL_LIBS")) continue; diff --git a/src/lib/qtprofilesetup/qtmoduleinfo.h b/src/lib/qtprofilesetup/qtmoduleinfo.h index 078e08a19..38a654edf 100644 --- a/src/lib/qtprofilesetup/qtmoduleinfo.h +++ b/src/lib/qtprofilesetup/qtmoduleinfo.h @@ -86,6 +86,7 @@ public: QStringList frameworkPathsDebug; QStringList frameworkPathsRelease; QStringList libraryPaths; + QStringList config; bool isPrivate; bool hasLibrary; bool isStaticLibrary; diff --git a/src/lib/qtprofilesetup/qtprofilesetup.cpp b/src/lib/qtprofilesetup/qtprofilesetup.cpp index f97b12f2c..7fabcb5c9 100644 --- a/src/lib/qtprofilesetup/qtprofilesetup.cpp +++ b/src/lib/qtprofilesetup/qtprofilesetup.cpp @@ -467,6 +467,7 @@ static void replaceSpecialValues(QByteArray *content, const Profile &profile, dict.insert("libNameForLinkerDebug", utf8JSLiteral(module.libNameForLinker(qtEnvironment, true))); dict.insert("pluginTypes", utf8JSLiteral(module.supportedPluginTypes)); + dict.insert("moduleConfig", utf8JSLiteral(module.config)); dict.insert("libNameForLinkerRelease", utf8JSLiteral(module.libNameForLinker(qtEnvironment, false))); dict.insert("entryPointLibsDebug", utf8JSLiteral(qtEnvironment.entryPointLibsDebug)); diff --git a/src/lib/qtprofilesetup/templates/QtModule.qbs b/src/lib/qtprofilesetup/templates/QtModule.qbs index 04820ee29..aa7c1d15a 100644 --- a/src/lib/qtprofilesetup/templates/QtModule.qbs +++ b/src/lib/qtprofilesetup/templates/QtModule.qbs @@ -73,6 +73,7 @@ Module { cpp.linkerFlags: Qt.core.qtBuildVariant === "debug" ? linkerFlagsDebug : linkerFlagsRelease property bool enableLinking: qtModuleName != undefined && hasLibrary + property stringList moduleConfig Properties { condition: enableLinking diff --git a/src/lib/qtprofilesetup/templates/core.qbs b/src/lib/qtprofilesetup/templates/core.qbs index 7abd7aa02..b2f05d8e9 100644 --- a/src/lib/qtprofilesetup/templates/core.qbs +++ b/src/lib/qtprofilesetup/templates/core.qbs @@ -99,6 +99,12 @@ Module { property string qmBaseName: product.targetName property bool lreleaseMultiplexMode: false + property stringList moduleConfig: @moduleConfig@ + Properties { + condition: moduleConfig.contains("use_gold_linker") + cpp.linkerVariant: "gold" + } + cpp.entryPoint: qbs.targetOS.containsAny(["ios", "tvos"]) && Utilities.versionCompare(version, "5.6.0") >= 0 ? "_qt_main_wrapper" diff --git a/src/lib/qtprofilesetup/templates/dbus.qbs b/src/lib/qtprofilesetup/templates/dbus.qbs index 9245a63e3..6556e2c9b 100644 --- a/src/lib/qtprofilesetup/templates/dbus.qbs +++ b/src/lib/qtprofilesetup/templates/dbus.qbs @@ -63,6 +63,7 @@ QtModule { libFilePathDebug: @libFilePathDebug@ libFilePathRelease: @libFilePathRelease@ pluginTypes: @pluginTypes@ + moduleConfig: @moduleConfig@ cpp.defines: @defines@ cpp.includePaths: @includes@ diff --git a/src/lib/qtprofilesetup/templates/module.qbs b/src/lib/qtprofilesetup/templates/module.qbs index 60ad106e5..b09f79a87 100644 --- a/src/lib/qtprofilesetup/templates/module.qbs +++ b/src/lib/qtprofilesetup/templates/module.qbs @@ -22,6 +22,7 @@ QtModule { libFilePathDebug: @libFilePathDebug@ libFilePathRelease: @libFilePathRelease@ pluginTypes: @pluginTypes@ + moduleConfig: @moduleConfig@ cpp.defines: @defines@ cpp.includePaths: @includes@ cpp.libraryPaths: @libraryPaths@ diff --git a/src/lib/qtprofilesetup/templates/qml.qbs b/src/lib/qtprofilesetup/templates/qml.qbs index 51bb5faa2..2b11abbd5 100644 --- a/src/lib/qtprofilesetup/templates/qml.qbs +++ b/src/lib/qtprofilesetup/templates/qml.qbs @@ -43,6 +43,7 @@ QtModule { libFilePathDebug: @libFilePathDebug@ libFilePathRelease: @libFilePathRelease@ pluginTypes: @pluginTypes@ + moduleConfig: @moduleConfig@ cpp.defines: @defines@ cpp.includePaths: @includes@ cpp.libraryPaths: @libraryPaths@ diff --git a/src/lib/qtprofilesetup/templates/quick.qbs b/src/lib/qtprofilesetup/templates/quick.qbs index 67394cabb..5968949c8 100644 --- a/src/lib/qtprofilesetup/templates/quick.qbs +++ b/src/lib/qtprofilesetup/templates/quick.qbs @@ -58,6 +58,7 @@ QtModule { libFilePathDebug: @libFilePathDebug@ libFilePathRelease: @libFilePathRelease@ pluginTypes: @pluginTypes@ + moduleConfig: @moduleConfig@ cpp.defines: @defines@ cpp.includePaths: @includes@ cpp.libraryPaths: @libraryPaths@ diff --git a/src/lib/qtprofilesetup/templates/scxml.qbs b/src/lib/qtprofilesetup/templates/scxml.qbs index b02a49246..7125ec53c 100644 --- a/src/lib/qtprofilesetup/templates/scxml.qbs +++ b/src/lib/qtprofilesetup/templates/scxml.qbs @@ -70,6 +70,7 @@ QtModule { libFilePathDebug: @libFilePathDebug@ libFilePathRelease: @libFilePathRelease@ pluginTypes: @pluginTypes@ + moduleConfig: @moduleConfig@ cpp.defines: @defines@ cpp.includePaths: @includes@ diff --git a/tests/auto/blackbox/testdata-qt/linker-variant/main.cpp b/tests/auto/blackbox/testdata-qt/linker-variant/main.cpp new file mode 100644 index 000000000..d1c118fa9 --- /dev/null +++ b/tests/auto/blackbox/testdata-qt/linker-variant/main.cpp @@ -0,0 +1,6 @@ +#include <QtDebug> + +int main() +{ + qDebug() << "Tach."; +} diff --git a/tests/auto/blackbox/testdata-qt/linker-variant/qt-linker-variant.qbs b/tests/auto/blackbox/testdata-qt/linker-variant/qt-linker-variant.qbs new file mode 100644 index 000000000..ab5889007 --- /dev/null +++ b/tests/auto/blackbox/testdata-qt/linker-variant/qt-linker-variant.qbs @@ -0,0 +1,10 @@ +QtApplication { + Probe { + id: qtConfigProbe + property stringList moduleConfig: Qt.core.moduleConfig + configure: { + console.info("Qt requires gold: " + moduleConfig.contains("use_gold_linker")); + } + } + files: "main.cpp" +} diff --git a/tests/auto/blackbox/tst_blackboxqt.cpp b/tests/auto/blackbox/tst_blackboxqt.cpp index 3441255e2..88e1aa5ec 100644 --- a/tests/auto/blackbox/tst_blackboxqt.cpp +++ b/tests/auto/blackbox/tst_blackboxqt.cpp @@ -160,6 +160,16 @@ void TestBlackboxQt::includedMocCpp() QVERIFY2(!m_qbsStdout.contains("compiling moc_myobject.cpp"), m_qbsStdout.constData()); } +void TestBlackboxQt::linkerVariant() +{ + QDir::setCurrent(testDataDir + "/linker-variant"); + QCOMPARE(runQbs(QStringList{"--command-echo-mode", "command-line"}), 0); + const bool goldRequired = m_qbsStdout.contains("Qt requires gold: true"); + const bool goldNotRequired = m_qbsStdout.contains("Qt requires gold: false"); + QVERIFY2(goldRequired != goldNotRequired, m_qbsStdout.constData()); + QCOMPARE(m_qbsStdout.contains("-fuse-ld=gold"), goldRequired ? 1 : 0); +} + void TestBlackboxQt::lrelease() { QDir::setCurrent(testDataDir + QLatin1String("/lrelease")); diff --git a/tests/auto/blackbox/tst_blackboxqt.h b/tests/auto/blackbox/tst_blackboxqt.h index f42c225d8..0240312a0 100644 --- a/tests/auto/blackbox/tst_blackboxqt.h +++ b/tests/auto/blackbox/tst_blackboxqt.h @@ -50,6 +50,7 @@ private slots: void dbusAdaptors(); void dbusInterfaces(); void includedMocCpp(); + void linkerVariant(); void lrelease(); void mixedBuildVariants(); void mocAndCppCombining(); |