aboutsummaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2017-08-24 13:03:54 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2017-08-25 08:20:45 +0000
commit5a63dbea4ab87f0cb9ba0ee7eff072ad3629388d (patch)
treeed3f10c120b7ebbd9bdaf1d48984b2df84e0cab1 /share
parent5d359df47ecd3297fa349ba22b08430e1422e7a3 (diff)
Introduce property cpp.discardUnusedData
Maps to linker options that strip unneeded symbols or sections. [ChangeLog] Added new property cpp.discardUnusedData. Change-Id: I2f2c7f449e9ac426af859fac4d1e3b941be2a2ab Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'share')
-rw-r--r--share/qbs/modules/cpp/CppModule.qbs1
-rw-r--r--share/qbs/modules/cpp/gcc.js12
-rw-r--r--share/qbs/modules/cpp/msvc.js9
3 files changed, 22 insertions, 0 deletions
diff --git a/share/qbs/modules/cpp/CppModule.qbs b/share/qbs/modules/cpp/CppModule.qbs
index 1517c3b32..f5adc27fc 100644
--- a/share/qbs/modules/cpp/CppModule.qbs
+++ b/share/qbs/modules/cpp/CppModule.qbs
@@ -183,6 +183,7 @@ Module {
property bool useRPaths: true
property bool useRPathLink
property string rpathLinkFlag
+ property bool discardUnusedData
property stringList assemblerFlags
PropertyOptions {
diff --git a/share/qbs/modules/cpp/gcc.js b/share/qbs/modules/cpp/gcc.js
index 06edce9c1..a0acc638a 100644
--- a/share/qbs/modules/cpp/gcc.js
+++ b/share/qbs/modules/cpp/gcc.js
@@ -437,6 +437,18 @@ function linkerFlags(project, product, inputs, output, linkerPath) {
Array.prototype.push.apply(args,
escapeLinkerFlags(product, inputs, ["--no-whole-archive"]));
}
+ var discardUnusedData = product.cpp.discardUnusedData;
+ if (discardUnusedData !== undefined) {
+ var flags = [];
+ if (discardUnusedData === true) {
+ if (isDarwin)
+ escapableLinkerFlags.push("-dead_strip");
+ else
+ escapableLinkerFlags.push("--gc-sections");
+ } else if (!isDarwin) {
+ escapableLinkerFlags.push("--no-gc-sections");
+ }
+ }
if (product.cpp.useRPathLink) {
if (!product.cpp.rpathLinkFlag)
diff --git a/share/qbs/modules/cpp/msvc.js b/share/qbs/modules/cpp/msvc.js
index 8279f591f..484d6475f 100644
--- a/share/qbs/modules/cpp/msvc.js
+++ b/share/qbs/modules/cpp/msvc.js
@@ -255,6 +255,14 @@ function linkerSupportsWholeArchive(product)
return Utilities.versionCompare(product.cpp.compilerVersion, "19.0.25123") >= 0
}
+function handleDiscardProperty(product, flags) {
+ var discardUnusedData = product.cpp.discardUnusedData;
+ if (discardUnusedData === true)
+ flags.push("/OPT:REF");
+ else if (discardUnusedData === false)
+ flags.push("/OPT:NOREF");
+}
+
function prepareLinker(project, product, inputs, outputs, input, output) {
var i;
var linkDLL = (outputs.dynamiclibrary ? true : false)
@@ -376,6 +384,7 @@ function prepareLinker(project, product, inputs, outputs, input, output) {
for (i in libraryPaths) {
args.push('/LIBPATH:' + FileInfo.toWindowsSeparators(libraryPaths[i]))
}
+ handleDiscardProperty(product, args);
var linkerFlags = product.cpp.platformLinkerFlags.concat(product.cpp.linkerFlags);
args = args.concat(linkerFlags);
if (product.cpp.allowUnresolvedSymbols)