diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2017-08-24 13:03:54 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2017-08-25 08:20:45 +0000 |
commit | 5a63dbea4ab87f0cb9ba0ee7eff072ad3629388d (patch) | |
tree | ed3f10c120b7ebbd9bdaf1d48984b2df84e0cab1 /share | |
parent | 5d359df47ecd3297fa349ba22b08430e1422e7a3 (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.qbs | 1 | ||||
-rw-r--r-- | share/qbs/modules/cpp/gcc.js | 12 | ||||
-rw-r--r-- | share/qbs/modules/cpp/msvc.js | 9 |
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) |