From 6fa5e8cb9864d21ee29ab4e25bf64b8d3672cbdf Mon Sep 17 00:00:00 2001 From: Denis Shienkov Date: Wed, 16 Oct 2019 14:43:01 +0300 Subject: Implement cpp.generateLinkerMapFile for GCC-like toolchains Now it is possible to generate a linker map file from the GCC, MinGW and CLang toolchains. Change-Id: I69b07e907129daac0ff29bd62034d8807cd5fdf1 Reviewed-by: Christian Kandeler Reviewed-by: Richard Weickelt --- doc/reference/modules/cpp-module.qdoc | 2 -- share/qbs/modules/cpp/GenericGCC.qbs | 9 ++++++++- share/qbs/modules/cpp/gcc.js | 7 +++++++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/doc/reference/modules/cpp-module.qdoc b/doc/reference/modules/cpp-module.qdoc index 4ef1e4e5b..2f7f06698 100644 --- a/doc/reference/modules/cpp-module.qdoc +++ b/doc/reference/modules/cpp-module.qdoc @@ -1673,8 +1673,6 @@ \qmlproperty bool cpp::generateLinkerMapFile \since Qbs 1.13 - \baremetalproperty - Whether to auto-generate a linker map file. \defaultvalue \c{false} diff --git a/share/qbs/modules/cpp/GenericGCC.qbs b/share/qbs/modules/cpp/GenericGCC.qbs index 5ededc512..63d5db7b8 100644 --- a/share/qbs/modules/cpp/GenericGCC.qbs +++ b/share/qbs/modules/cpp/GenericGCC.qbs @@ -561,7 +561,7 @@ CppModule { inputsFromDependencies: ["dynamiclibrary_symbols", "dynamiclibrary_import", "staticlibrary"] outputFileTags: ["bundle.input", "application", "debuginfo_app","debuginfo_bundle", - "debuginfo_plist"] + "debuginfo_plist", "mem_map"] outputArtifacts: { var app = { filePath: FileInfo.joinPaths(product.destinationDirectory, @@ -575,6 +575,13 @@ CppModule { var artifacts = [app]; if (!product.aggregate) artifacts = artifacts.concat(Gcc.debugInfoArtifacts(product, undefined, "app")); + if (product.cpp.generateLinkerMapFile) { + artifacts.push({ + filePath: FileInfo.joinPaths(product.destinationDirectory, + product.targetName + ".map"), + fileTags: ["mem_map"] + }); + } return artifacts; } diff --git a/share/qbs/modules/cpp/gcc.js b/share/qbs/modules/cpp/gcc.js index 0913b27d0..639191da6 100644 --- a/share/qbs/modules/cpp/gcc.js +++ b/share/qbs/modules/cpp/gcc.js @@ -514,6 +514,13 @@ function linkerFlags(project, product, inputs, outputs, primaryOutput, linkerPat if (importLibs) escapableLinkerFlags.push("--out-implib", importLibs[0].filePath); + if (outputs.application && product.cpp.generateLinkerMapFile) { + if (isDarwin) + escapableLinkerFlags.push("-map", outputs.mem_map[0].filePath); + else + escapableLinkerFlags.push("-Map=" + outputs.mem_map[0].filePath); + } + var escapedLinkerFlags = escapeLinkerFlags(product, inputs, escapableLinkerFlags); Array.prototype.push.apply(escapedLinkerFlags, args); var driverLinkerFlags = useCompilerDriver ? product.cpp.driverLinkerFlags : undefined; -- cgit v1.2.3