diff options
author | Ivan Komissarov <abbapoh@gmail.com> | 2021-05-29 16:33:13 +0200 |
---|---|---|
committer | Ivan Komissarov <ABBAPOH@gmail.com> | 2021-06-03 09:09:28 +0000 |
commit | a98006288795848c91bddcecf72d654fc92b4330 (patch) | |
tree | b117ddb655d4641faab90bd816bd4386cd7a7261 /share/qbs/modules/cpp/gcc.js | |
parent | 2f8a1b03cb047d95b74aab4301f78eaf7cbdee12 (diff) |
Avoid copy&pasting code in gcc.js/darwin.js
Copy&paste leaded to 2 bugs in separating debug info, thus it makes
sense to avoid code duplication.
Change-Id: I031b9b7da937d35014f2c1c0a804ca13111dad12
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'share/qbs/modules/cpp/gcc.js')
-rw-r--r-- | share/qbs/modules/cpp/gcc.js | 96 |
1 files changed, 59 insertions, 37 deletions
diff --git a/share/qbs/modules/cpp/gcc.js b/share/qbs/modules/cpp/gcc.js index 010878d18..0df0b14cc 100644 --- a/share/qbs/modules/cpp/gcc.js +++ b/share/qbs/modules/cpp/gcc.js @@ -1228,6 +1228,59 @@ function createSymbolCheckingCommands(product, outputs) { return commands; } +function separateDebugInfoCommands(product, outputs, primaryOutput) { + var commands = []; + + var debugInfo = outputs.debuginfo_app || outputs.debuginfo_dll + || outputs.debuginfo_loadablemodule; + + if (debugInfo) { + var objcopy = product.cpp.objcopyPath; + + var cmd = new Command(objcopy, ["--only-keep-debug", primaryOutput.filePath, + debugInfo[0].filePath]); + cmd.silent = true; + commands.push(cmd); + + cmd = new Command(objcopy, ["--strip-debug", primaryOutput.filePath]); + cmd.silent = true; + commands.push(cmd); + + cmd = new Command(objcopy, ["--add-gnu-debuglink=" + debugInfo[0].filePath, + primaryOutput.filePath]); + cmd.silent = true; + commands.push(cmd); + } + + return commands; +} + +function separateDebugInfoCommandsDarwin(product, outputs, primaryOutputs) { + var commands = []; + + var debugInfo = outputs.debuginfo_app || outputs.debuginfo_dll + || outputs.debuginfo_loadablemodule; + if (debugInfo) { + var dsymPath = debugInfo[0].filePath; + if (outputs.debuginfo_bundle && outputs.debuginfo_bundle[0]) + dsymPath = outputs.debuginfo_bundle[0].filePath; + + var flags = product.cpp.dsymutilFlags || []; + var files = primaryOutputs.map(function (f) { return f.filePath; }); + var cmd = new Command(product.cpp.dsymutilPath, + flags.concat(["-o", dsymPath].concat(files))); + cmd.description = "generating dSYM for " + product.name; + commands.push(cmd); + + // strip debug info + cmd = new Command(product.cpp.stripPath, ["-S"].concat(files)); + cmd.silent = true; + commands.push(cmd); + } + + return commands; +} + function prepareLinker(project, product, inputs, outputs, input, output) { var i, primaryOutput, cmd, commands = []; @@ -1274,44 +1327,13 @@ function prepareLinker(project, product, inputs, outputs, input, output) { setResponseFileThreshold(cmd, product); commands.push(cmd); - var debugInfo = outputs.debuginfo_app || outputs.debuginfo_dll - || outputs.debuginfo_loadablemodule; - if (debugInfo) { - if (product.qbs.targetOS.contains("darwin")) { - if (!product.aggregate) { - var dsymPath = debugInfo[0].filePath; - if (outputs.debuginfo_bundle && outputs.debuginfo_bundle[0]) - dsymPath = outputs.debuginfo_bundle[0].filePath; - var flags = product.cpp.dsymutilFlags || []; - cmd = new Command(product.cpp.dsymutilPath, flags.concat([ - "-o", dsymPath, primaryOutput.filePath - ])); - cmd.description = "generating dSYM for " + product.name; - commands.push(cmd); - - // strip debug info - cmd = new Command(product.cpp.stripPath, - ["-S", primaryOutput.filePath]); - cmd.silent = true; - commands.push(cmd); - } - } else { - var objcopy = product.cpp.objcopyPath; - - cmd = new Command(objcopy, ["--only-keep-debug", primaryOutput.filePath, - debugInfo[0].filePath]); - cmd.silent = true; - commands.push(cmd); - - cmd = new Command(objcopy, ["--strip-debug", primaryOutput.filePath]); - cmd.silent = true; - commands.push(cmd); - - cmd = new Command(objcopy, ["--add-gnu-debuglink=" + debugInfo[0].filePath, - primaryOutput.filePath]); - cmd.silent = true; - commands.push(cmd); + if (product.qbs.targetOS.contains("darwin")) { + if (!product.aggregate) { + commands = commands.concat(separateDebugInfoCommandsDarwin( + product, outputs, [primaryOutput])); } + } else { + commands = commands.concat(separateDebugInfoCommands(product, outputs, primaryOutput)); } if (outputs.dynamiclibrary) { |