diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2019-10-08 12:26:24 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2019-10-08 12:26:24 +0200 |
commit | c84f4c258ef91c76e19198d7eeb64291d0171938 (patch) | |
tree | cae0c810b276483edeef26baf71bd38a92a0a2a9 | |
parent | f69cd3ef989b77fce08a421190c549c4341f1e02 (diff) | |
parent | ad11bb7383bf730ca0241af24a8b4179af157c7f (diff) |
Merge 1.14 into master
Change-Id: Ief78bb9d82344e31135faca42a422c23951e87ec
-rw-r--r-- | share/qbs/imports/qbs/DarwinTools/darwin-tools.js | 31 | ||||
-rw-r--r-- | share/qbs/modules/bundle/BundleModule.qbs | 6 | ||||
-rw-r--r-- | share/qbs/modules/cpp/keil.js | 49 | ||||
-rw-r--r-- | share/qbs/modules/cpp/keil.qbs | 62 | ||||
-rw-r--r-- | share/qbs/modules/cpp/sdcc.js | 110 | ||||
-rw-r--r-- | share/qbs/modules/cpp/sdcc.qbs | 57 | ||||
-rw-r--r-- | tests/auto/blackbox/tst_blackbox.cpp | 3 |
7 files changed, 192 insertions, 126 deletions
diff --git a/share/qbs/imports/qbs/DarwinTools/darwin-tools.js b/share/qbs/imports/qbs/DarwinTools/darwin-tools.js index 889720fcd..5f9076004 100644 --- a/share/qbs/imports/qbs/DarwinTools/darwin-tools.js +++ b/share/qbs/imports/qbs/DarwinTools/darwin-tools.js @@ -162,17 +162,17 @@ var PropertyListVariableExpander = (function () { * Finds the first index of a replacement starting with one of the supported syntaxes * This is needed so we don't do recursive substitutions */ - function indexOfReplacementStart(syntaxes, str, offset) { + function indexOfReplacementStart(syntaxes, str) { var syntax; - var idx = str.length; + var idx = -1; for (var i in syntaxes) { - var j = str.indexOf(syntaxes[i].open, offset); - if (j !== -1 && j < idx) { + var j = str.lastIndexOf(syntaxes[i].open); + if (j > idx) { syntax = syntaxes[i]; idx = j; } } - return { "syntax": syntax, "index": idx === str.length ? -1 : idx }; + return { "syntax": syntax, "index": idx }; } function expandRecursive(obj, env, checked) { @@ -202,19 +202,16 @@ var PropertyListVariableExpander = (function () { // skip replacement if ($this.undefinedVariableFunction) $this.undefinedVariableFunction(key, varName); - i = j + repl.syntax.close.length; - } else { - changes = true; - varValue = String(varValue); - if (varFormatter !== undefined) - varFormatter = varFormatter.toLowerCase(); - if (varFormatter === "rfc1034identifier") - varValue = Utilities.rfc1034Identifier(varValue); - value = value.slice(0, i) + varValue + value.slice(j + repl.syntax.close.length); - // avoid recursive substitutions to avoid potentially infinite loops - i += varValue.length; + varValue = ""; } - repl = indexOfReplacementStart(syntaxes, value, i); + varValue = String(varValue); + if (varFormatter !== undefined) + varFormatter = varFormatter.toLowerCase(); + if (varFormatter === "rfc1034identifier") + varValue = Utilities.rfc1034Identifier(varValue); + value = value.slice(0, i) + varValue + value.slice(j + repl.syntax.close.length); + changes = true; + repl = indexOfReplacementStart(syntaxes, value); i = repl.index; } if (changes) diff --git a/share/qbs/modules/bundle/BundleModule.qbs b/share/qbs/modules/bundle/BundleModule.qbs index f1845fe30..1e83dc458 100644 --- a/share/qbs/modules/bundle/BundleModule.qbs +++ b/share/qbs/modules/bundle/BundleModule.qbs @@ -63,9 +63,13 @@ Module { "GENERATE_PKGINFO_FILE": generatePackageInfo !== undefined ? (generatePackageInfo ? "YES" : "NO") : undefined, + "IS_MACCATALYST": "NO", + "LD_RUNPATH_SEARCH_PATHS_NO": [], "PRODUCT_NAME": product.targetName, "LOCAL_APPS_DIR": Environment.getEnv("HOME") + "/Applications", "LOCAL_LIBRARY_DIR": Environment.getEnv("HOME") + "/Library", + "SWIFT_PLATFORM_TARGET_PREFIX": isMacOs ? "macos" + : qbs.targetOS.contains("ios") ? "ios" : "", "TARGET_BUILD_DIR": product.buildDirectory, "WRAPPER_NAME": bundleName, "WRAPPER_EXTENSION": extension @@ -427,7 +431,7 @@ Module { || {}; for (key in partialInfoPlist) { if (partialInfoPlist.hasOwnProperty(key) - && !aggregatePlist.hasOwnProperty(key)) + && aggregatePlist[key] === undefined) aggregatePlist[key] = partialInfoPlist[key]; } } diff --git a/share/qbs/modules/cpp/keil.js b/share/qbs/modules/cpp/keil.js index fc485373b..ceee3f0d2 100644 --- a/share/qbs/modules/cpp/keil.js +++ b/share/qbs/modules/cpp/keil.js @@ -33,6 +33,7 @@ var Environment = require("qbs.Environment"); var File = require("qbs.File"); var FileInfo = require("qbs.FileInfo"); var ModUtils = require("qbs.ModUtils"); +var PathTools = require("qbs.PathTools"); var Process = require("qbs.Process"); var TemporaryDir = require("qbs.TemporaryDir"); var TextFile = require("qbs.TextFile"); @@ -322,6 +323,51 @@ function filterStdOutput(cmd) { }; } +function compilerOutputArtifacts(input) { + var obj = { + fileTags: ["obj"], + filePath: Utilities.getHash(input.baseDir) + "/" + + input.fileName + input.cpp.objectSuffix + }; + return [obj]; +} + +function applicationLinkerOutputArtifacts(product) { + var app = { + fileTags: ["application"], + filePath: FileInfo.joinPaths( + product.destinationDirectory, + PathTools.applicationFilePath(product)) + }; + var mem_map = { + fileTags: ["mem_map"], + filePath: FileInfo.joinPaths( + product.destinationDirectory, + product.targetName + + (product.cpp.architecture === "mcs51" ? ".m51" : ".map")) + }; + var artifacts = [app, mem_map]; + if (product.cpp.generateLinkerMapFile) { + artifacts.push({ + fileTags: ["map_file"], + filePath: FileInfo.joinPaths( + product.destinationDirectory, + product.targetName + ".map") + }); + } + return artifacts; +} + +function staticLibraryLinkerOutputArtifacts(product) { + var staticLib = { + fileTags: ["staticlibrary"], + filePath: FileInfo.joinPaths( + product.destinationDirectory, + PathTools.staticLibraryFilePath(product)) + }; + return [staticLib] +} + function compilerFlags(project, product, input, output, explicitlyDependsOn) { // Determine which C-language we're compiling. var tag = ModUtils.fileTagForTargetLanguage(input.fileTags.concat(output.fileTags)); @@ -614,6 +660,9 @@ function linkerFlags(project, product, input, outputs) { // Output. args.push("--output", outputs.application[0].filePath); + if (product.cpp.generateMapFile) + args.push("--list", outputs.mem_map[0].filePath); + // Library paths. var libraryPaths = product.cpp.libraryPaths; if (libraryPaths) diff --git a/share/qbs/modules/cpp/keil.qbs b/share/qbs/modules/cpp/keil.qbs index 75eb323e3..1a1792118 100644 --- a/share/qbs/modules/cpp/keil.qbs +++ b/share/qbs/modules/cpp/keil.qbs @@ -32,9 +32,7 @@ import qbs 1.0 import qbs.File import qbs.FileInfo import qbs.ModUtils -import qbs.PathTools import qbs.Probes -import qbs.Utilities import "keil.js" as KEIL CppModule { @@ -99,18 +97,20 @@ CppModule { Rule { id: assembler inputs: ["asm"] - - Artifact { - fileTags: ["obj"] - filePath: Utilities.getHash(input.baseDir) + "/" - + input.fileName + input.cpp.objectSuffix - } - + outputFileTags: ["obj"] + outputArtifacts: KEIL.compilerOutputArtifacts(input) prepare: KEIL.prepareAssembler.apply(KEIL, arguments) } FileTagger { - patterns: ["*.s", "*.a51", ".asm"] + condition: qbs.architecture === "mcs51"; + patterns: ["*.a51", "*.A51"] + fileTags: ["asm"] + } + + FileTagger { + condition: qbs.architecture === "arm"; + patterns: ["*.s", ".asm"] fileTags: ["asm"] } @@ -118,13 +118,8 @@ CppModule { id: compiler inputs: ["cpp", "c"] auxiliaryInputs: ["hpp"] - - Artifact { - fileTags: ["obj"] - filePath: Utilities.getHash(input.baseDir) + "/" - + input.fileName + input.cpp.objectSuffix - } - + outputFileTags: ["obj"] + outputArtifacts: KEIL.compilerOutputArtifacts(input) prepare: KEIL.prepareCompiler.apply(KEIL, arguments) } @@ -132,32 +127,13 @@ CppModule { id: applicationLinker multiplex: true inputs: ["obj", "linkerscript"] - outputFileTags: { - var tags = ["application"]; + var tags = ["application", "mem_map"]; if (product.moduleProperty("cpp", "generateLinkerMapFile")) tags.push("map_file"); return tags; } - outputArtifacts: { - var app = { - fileTags: ["application"], - filePath: FileInfo.joinPaths( - product.destinationDirectory, - PathTools.applicationFilePath(product)) - }; - var artifacts = [app]; - if (product.cpp.generateLinkerMapFile) { - artifacts.push({ - fileTags: ["map_file"], - filePath: FileInfo.joinPaths( - product.destinationDirectory, - product.targetName + ".map") - }); - } - return artifacts; - } - + outputArtifacts: KEIL.applicationLinkerOutputArtifacts(product) prepare: KEIL.prepareLinker.apply(KEIL, arguments) } @@ -166,14 +142,8 @@ CppModule { multiplex: true inputs: ["obj"] inputsFromDependencies: ["staticlibrary"] - - Artifact { - fileTags: ["staticlibrary"] - filePath: FileInfo.joinPaths( - product.destinationDirectory, - PathTools.staticLibraryFilePath(product)) - } - + outputFileTags: ["staticlibrary"] + outputArtifacts: KEIL.staticLibraryLinkerOutputArtifacts(product) prepare: KEIL.prepareArchiver.apply(KEIL, arguments) } } diff --git a/share/qbs/modules/cpp/sdcc.js b/share/qbs/modules/cpp/sdcc.js index cc76d4ebd..0d656ef17 100644 --- a/share/qbs/modules/cpp/sdcc.js +++ b/share/qbs/modules/cpp/sdcc.js @@ -33,6 +33,7 @@ var Environment = require("qbs.Environment"); var File = require("qbs.File"); var FileInfo = require("qbs.FileInfo"); var ModUtils = require("qbs.ModUtils"); +var PathTools = require("qbs.PathTools"); var Process = require("qbs.Process"); var TemporaryDir = require("qbs.TemporaryDir"); var TextFile = require("qbs.TextFile"); @@ -217,9 +218,90 @@ function collectLibraryDependencies(product) { return result; } -function compilerFlags(project, product, input, output, explicitlyDependsOn) { +function compilerOutputArtifacts(input) { + var obj = { + fileTags: ["obj"], + filePath: Utilities.getHash(input.baseDir) + "/" + + input.fileName + input.cpp.objectSuffix + }; + var asm_adb = { + fileTags: ["asm_adb"], + filePath: Utilities.getHash(input.baseDir) + "/" + + input.fileName + ".adb" + }; + var asm_lst = { + fileTags: ["asm_lst"], + filePath: Utilities.getHash(input.baseDir) + "/" + + input.fileName + ".lst" + }; + var asm_src = { + fileTags: ["asm_src"], + filePath: Utilities.getHash(input.baseDir) + "/" + + input.fileName + ".asm" + }; + var asm_sym = { + fileTags: ["asm_sym"], + filePath: Utilities.getHash(input.baseDir) + "/" + + input.fileName + ".sym" + }; + var rst_data = { + fileTags: ["rst_data"], + filePath: Utilities.getHash(input.baseDir) + "/" + + input.fileName + ".rst" + }; + return [obj, asm_adb, asm_lst, asm_src, asm_sym, rst_data]; +} + +function applicationLinkerOutputArtifacts(product) { + var app = { + fileTags: ["application"], + filePath: FileInfo.joinPaths( + product.destinationDirectory, + PathTools.applicationFilePath(product)) + }; + var lk_cmd = { + fileTags: ["lk_cmd"], + filePath: FileInfo.joinPaths( + product.destinationDirectory, + product.targetName + ".lk") + }; + var mem_summary = { + fileTags: ["mem_summary"], + filePath: FileInfo.joinPaths( + product.destinationDirectory, + product.targetName + ".mem") + }; + var mem_map = { + fileTags: ["mem_map"], + filePath: FileInfo.joinPaths( + product.destinationDirectory, + product.targetName + ".map") + }; + var artifacts = [app, lk_cmd, mem_summary, mem_map]; + if (product.cpp.generateLinkerMapFile) { + artifacts.push({ + fileTags: ["map_file"], + filePath: FileInfo.joinPaths( + product.destinationDirectory, + product.targetName + ".map") + }); + } + return artifacts; +} + +function staticLibraryLinkerOutputArtifacts(product) { + var staticLib = { + fileTags: ["staticlibrary"], + filePath: FileInfo.joinPaths( + product.destinationDirectory, + PathTools.staticLibraryFilePath(product)) + }; + return [staticLib] +} + +function compilerFlags(project, product, input, outputs, explicitlyDependsOn) { // Determine which C-language we"re compiling. - var tag = ModUtils.fileTagForTargetLanguage(input.fileTags.concat(output.fileTags)); + var tag = ModUtils.fileTagForTargetLanguage(input.fileTags.concat(outputs.obj[0].fileTags)); var args = []; @@ -228,7 +310,7 @@ function compilerFlags(project, product, input, output, explicitlyDependsOn) { // Output. args.push("-c"); - args.push("-o", output.filePath); + args.push("-o", outputs.obj[0].filePath); // Defines. var allDefines = []; @@ -305,18 +387,12 @@ function compilerFlags(project, product, input, output, explicitlyDependsOn) { return args; } -function assemblerFlags(project, product, input, output, explicitlyDependsOn) { +function assemblerFlags(project, product, input, outputs, explicitlyDependsOn) { // Determine which C-language we"re compiling - var tag = ModUtils.fileTagForTargetLanguage(input.fileTags.concat(output.fileTags)); + var tag = ModUtils.fileTagForTargetLanguage(input.fileTags.concat(outputs.obj[0].fileTags)); var args = []; - // Input. - args.push(input.filePath); - - // Output. - args.push("-o", output.filePath); - // Includes. var allIncludePaths = []; var systemIncludePaths = input.cpp.systemIncludePaths; @@ -331,6 +407,10 @@ function assemblerFlags(project, product, input, output, explicitlyDependsOn) { args = args.concat(ModUtils.moduleProperty(input, "platformFlags", tag), ModUtils.moduleProperty(input, "flags", tag), ModUtils.moduleProperty(input, "driverFlags", tag)); + + args.push("-ol"); + args.push(outputs.obj[0].filePath); + args.push(input.filePath); return args; } @@ -407,7 +487,9 @@ function linkerFlags(project, product, input, outputs) { var escapedLinkerFlags = escapeLinkerFlags(product, escapableLinkerFlags); if (escapedLinkerFlags) Array.prototype.push.apply(args, escapedLinkerFlags); - + var driverLinkerFlags = useCompilerDriver ? product.cpp.driverLinkerFlags : undefined; + if (driverLinkerFlags) + Array.prototype.push.apply(args, driverLinkerFlags); return args; } @@ -420,7 +502,7 @@ function archiverFlags(project, product, input, outputs) { } function prepareCompiler(project, product, inputs, outputs, input, output, explicitlyDependsOn) { - var args = compilerFlags(project, product, input, output, explicitlyDependsOn); + var args = compilerFlags(project, product, input, outputs, explicitlyDependsOn); var compilerPath = input.cpp.compilerPath; var cmd = new Command(compilerPath, args); cmd.description = "compiling " + input.fileName; @@ -429,7 +511,7 @@ function prepareCompiler(project, product, inputs, outputs, input, output, expli } function prepareAssembler(project, product, inputs, outputs, input, output, explicitlyDependsOn) { - var args = assemblerFlags(project, product, input, output, explicitlyDependsOn); + var args = assemblerFlags(project, product, input, outputs, explicitlyDependsOn); var assemblerPath = input.cpp.assemblerPath; var cmd = new Command(assemblerPath, args); cmd.description = "assembling " + input.fileName; diff --git a/share/qbs/modules/cpp/sdcc.qbs b/share/qbs/modules/cpp/sdcc.qbs index 6bcbc2580..e4a040439 100644 --- a/share/qbs/modules/cpp/sdcc.qbs +++ b/share/qbs/modules/cpp/sdcc.qbs @@ -32,9 +32,7 @@ import qbs 1.0 import qbs.File import qbs.FileInfo import qbs.ModUtils -import qbs.PathTools import qbs.Probes -import qbs.Utilities import "sdcc.js" as SDCC CppModule { @@ -101,14 +99,9 @@ CppModule { Rule { id: assembler inputs: ["asm"] - - Artifact { - fileTags: ["obj"] - filePath: Utilities.getHash(input.baseDir) + "/" - + input.fileName + input.cpp.objectSuffix - } - - prepare: SDCC.prepareAssembler.apply(SDCC, arguments) + outputFileTags: ["obj", "asm_adb", "asm_lst", "asm_src", "asm_sym", "rst_data"] + outputArtifacts: SDCC.compilerOutputArtifacts(input) + prepare: SDCC.prepareAssembler.apply(SDCC, arguments); } FileTagger { @@ -127,13 +120,8 @@ CppModule { id: compiler inputs: ["cpp", "c"] auxiliaryInputs: ["hpp"] - - Artifact { - fileTags: ["obj"] - filePath: Utilities.getHash(input.baseDir) + "/" - + input.fileName + input.cpp.objectSuffix - } - + outputFileTags: ["obj", "asm_adb", "asm_lst", "asm_src", "asm_sym", "rst_data"] + outputArtifacts: SDCC.compilerOutputArtifacts(input) prepare: SDCC.prepareCompiler.apply(SDCC, arguments) } @@ -142,33 +130,14 @@ CppModule { multiplex: true inputs: ["obj", "linkerscript"] inputsFromDependencies: ["staticlibrary"] - outputFileTags: { - var tags = ["application"]; + var tags = ["application", "lk_cmd", "mem_summary", "mem_map"]; if (product.moduleProperty("cpp", "generateLinkerMapFile")) tags.push("map_file"); return tags; } - outputArtifacts: { - var app = { - fileTags: ["application"], - filePath: FileInfo.joinPaths( - product.destinationDirectory, - PathTools.applicationFilePath(product)) - }; - var artifacts = [app]; - if (product.cpp.generateLinkerMapFile) { - artifacts.push({ - fileTags: ["map_file"], - filePath: FileInfo.joinPaths( - product.destinationDirectory, - product.targetName + ".map") - }); - } - return artifacts; - } - - prepare: SDCC.prepareLinker.apply(SDCC, arguments) + outputArtifacts: SDCC.applicationLinkerOutputArtifacts(product) + prepare:SDCC.prepareLinker.apply(SDCC, arguments) } Rule { @@ -176,14 +145,8 @@ CppModule { multiplex: true inputs: ["obj"] inputsFromDependencies: ["staticlibrary"] - - Artifact { - fileTags: ["staticlibrary"] - filePath: FileInfo.joinPaths( - product.destinationDirectory, - PathTools.staticLibraryFilePath(product)) - } - + outputFileTags: ["staticlibrary"] + outputArtifacts: SDCC.staticLibraryLinkerOutputArtifacts(product) prepare: SDCC.prepareArchiver.apply(SDCC, arguments) } } diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp index 3a90d8ccb..dd877637e 100644 --- a/tests/auto/blackbox/tst_blackbox.cpp +++ b/tests/auto/blackbox/tst_blackbox.cpp @@ -4267,7 +4267,8 @@ void TestBlackbox::symbolLinkMode() rmDirR(relativeBuildDir()); params.arguments = QStringList() << commonArgs << "project.lazy:true"; QCOMPARE(runQbs(params), 0); - QVERIFY2(m_qbsStdout.contains("meow\nLib was loaded!\n"), m_qbsStdout.constData()); + QVERIFY2(m_qbsStdout.contains("meow\n") && m_qbsStdout.contains("Lib was loaded!\n"), + m_qbsStdout.constData()); } } |