aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2018-12-19 17:37:58 +0100
committerChristian Kandeler <christian.kandeler@qt.io>2019-01-14 13:48:58 +0000
commit893b4dc56c7e2ef21f4e253ccbbb20643d18cadf (patch)
tree8d467b2fe7e3580f38f00cd359c37b53cada8c60
parent90588a6a719aa143500d480582ae2de733ac7c0d (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.cpp5
-rw-r--r--src/lib/qtprofilesetup/qtmoduleinfo.h1
-rw-r--r--src/lib/qtprofilesetup/qtprofilesetup.cpp1
-rw-r--r--src/lib/qtprofilesetup/templates/QtModule.qbs1
-rw-r--r--src/lib/qtprofilesetup/templates/core.qbs6
-rw-r--r--src/lib/qtprofilesetup/templates/dbus.qbs1
-rw-r--r--src/lib/qtprofilesetup/templates/module.qbs1
-rw-r--r--src/lib/qtprofilesetup/templates/qml.qbs1
-rw-r--r--src/lib/qtprofilesetup/templates/quick.qbs1
-rw-r--r--src/lib/qtprofilesetup/templates/scxml.qbs1
-rw-r--r--tests/auto/blackbox/testdata-qt/linker-variant/main.cpp6
-rw-r--r--tests/auto/blackbox/testdata-qt/linker-variant/qt-linker-variant.qbs10
-rw-r--r--tests/auto/blackbox/tst_blackboxqt.cpp10
-rw-r--r--tests/auto/blackbox/tst_blackboxqt.h1
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();