diff options
Diffstat (limited to 'share')
-rw-r--r-- | share/qbs/imports/qbs/Probes/path-probe.js | 24 | ||||
-rw-r--r-- | share/qbs/modules/cpp/GenericGCC.qbs | 3 | ||||
-rw-r--r-- | share/qbs/modules/cpp/MingwBaseModule.qbs | 2 | ||||
-rw-r--r-- | share/qbs/modules/cpp/UnixGCC.qbs | 2 | ||||
-rw-r--r-- | share/qbs/modules/cpp/android-gcc.qbs | 1 | ||||
-rw-r--r-- | share/qbs/modules/cpp/iar.js | 16 | ||||
-rw-r--r-- | share/qbs/modules/cpp/iar.qbs | 1 | ||||
-rw-r--r-- | share/qbs/modules/cpp/keil.js | 37 | ||||
-rw-r--r-- | share/qbs/modules/cpp/keil.qbs | 2 | ||||
-rw-r--r-- | share/qbs/modules/cpp/msvc.js | 3 | ||||
-rw-r--r-- | share/qbs/modules/cpp/sdcc.js | 54 | ||||
-rw-r--r-- | share/qbs/modules/cpp/sdcc.qbs | 6 | ||||
-rw-r--r-- | share/qbs/modules/cpp/windows-msvc-base.qbs | 14 |
13 files changed, 115 insertions, 50 deletions
diff --git a/share/qbs/imports/qbs/Probes/path-probe.js b/share/qbs/imports/qbs/Probes/path-probe.js index b4d745428..b1bdf9930 100644 --- a/share/qbs/imports/qbs/Probes/path-probe.js +++ b/share/qbs/imports/qbs/Probes/path-probe.js @@ -60,6 +60,17 @@ function canonicalSelectors(selectors, nameSuffixes) { return selectors.map(mapper); } +function pathsFromEnvs(envs, pathListSeparator) { + envs = envs || []; + var result = []; + for (var i = 0; i < envs.length; ++i) { + var value = Environment.getEnv(envs[i]) || ''; + if (value.length > 0) + result = result.concat(value.split(pathListSeparator)); + } + return result; +} + function configure(selectors, names, nameSuffixes, nameFilter, candidateFilter, searchPaths, pathSuffixes, platformSearchPaths, environmentPaths, platformEnvironmentPaths, pathListSeparator) { @@ -90,14 +101,11 @@ function configure(selectors, names, nameSuffixes, nameFilter, candidateFilter, }); // FIXME: Suggest how to obtain paths from system - var _paths = ModUtils.concatAll(searchPaths, platformSearchPaths); - // FIXME: Add getenv support - var envs = ModUtils.concatAll(platformEnvironmentPaths, environmentPaths); - for (var i = 0; i < envs.length; ++i) { - var value = Environment.getEnv(envs[i]) || ''; - if (value.length > 0) - _paths = _paths.concat(value.split(pathListSeparator)); - } + var _paths = ModUtils.concatAll( + pathsFromEnvs(environmentPaths, pathListSeparator), + searchPaths, + pathsFromEnvs(platformEnvironmentPaths, pathListSeparator), + platformSearchPaths); var _suffixes = ModUtils.concatAll('', pathSuffixes); _paths = _paths.map(function(p) { return FileInfo.fromNativeSeparators(p); }); _suffixes = _suffixes.map(function(p) { return FileInfo.fromNativeSeparators(p); }); diff --git a/share/qbs/modules/cpp/GenericGCC.qbs b/share/qbs/modules/cpp/GenericGCC.qbs index 80de576a9..b69f26739 100644 --- a/share/qbs/modules/cpp/GenericGCC.qbs +++ b/share/qbs/modules/cpp/GenericGCC.qbs @@ -114,6 +114,9 @@ CppModule { compilerFrameworkPaths: gccProbe.frameworkPaths compilerLibraryPaths: gccProbe.libraryPaths + staticLibraryPrefix: "lib" + staticLibrarySuffix: ".a" + property bool compilerHasTargetOption: qbs.toolchain.contains("clang") && Utilities.versionCompare(compilerVersion, "3.1") >= 0 property bool assemblerHasTargetOption: qbs.toolchain.contains("xcode") diff --git a/share/qbs/modules/cpp/MingwBaseModule.qbs b/share/qbs/modules/cpp/MingwBaseModule.qbs index 60ad28b08..831512c5c 100644 --- a/share/qbs/modules/cpp/MingwBaseModule.qbs +++ b/share/qbs/modules/cpp/MingwBaseModule.qbs @@ -37,8 +37,6 @@ import "setuprunenv.js" as SetupRunEnv GenericGCC { condition: false - staticLibraryPrefix: "lib" - staticLibrarySuffix: ".a" dynamicLibrarySuffix: ".dll" executableSuffix: ".exe" debugInfoSuffix: ".debug" diff --git a/share/qbs/modules/cpp/UnixGCC.qbs b/share/qbs/modules/cpp/UnixGCC.qbs index 68eacea3f..94dfb1907 100644 --- a/share/qbs/modules/cpp/UnixGCC.qbs +++ b/share/qbs/modules/cpp/UnixGCC.qbs @@ -35,10 +35,8 @@ GenericGCC { && qbs.targetOS.contains("unix") priority: -50 - staticLibraryPrefix: "lib" dynamicLibraryPrefix: "lib" loadableModulePrefix: "lib" - staticLibrarySuffix: ".a" dynamicLibrarySuffix: ".so" debugInfoSuffix: ".debug" imageFormat: "elf" diff --git a/share/qbs/modules/cpp/android-gcc.qbs b/share/qbs/modules/cpp/android-gcc.qbs index f218a4991..bd58cbcca 100644 --- a/share/qbs/modules/cpp/android-gcc.qbs +++ b/share/qbs/modules/cpp/android-gcc.qbs @@ -74,6 +74,7 @@ LinuxGCC { property string toolchainTriple: [targetAbi === "androideabi" ? "arm" : targetArch, targetSystem, targetAbi].join("-") + internalVersion: undefined toolchainPrefix: undefined machineType: { diff --git a/share/qbs/modules/cpp/iar.js b/share/qbs/modules/cpp/iar.js index c1dea56ab..0c912d0aa 100644 --- a/share/qbs/modules/cpp/iar.js +++ b/share/qbs/modules/cpp/iar.js @@ -579,10 +579,10 @@ function compilerFlags(project, product, input, outputs, explicitlyDependsOn) { // Optimization flags. switch (input.cpp.optimization) { case "small": - args.push("-Ohs"); + args.push("-Ohz"); break; case "fast": - args.push("-Ohz"); + args.push("-Ohs"); break; case "none": args.push("-On"); @@ -661,7 +661,7 @@ function compilerFlags(project, product, input, outputs, explicitlyDependsOn) { } // Listing files generation flag. - if (product.cpp.generateCompilerListingFiles) + if (input.cpp.generateCompilerListingFiles) args.push("-l", outputs.lst[0].filePath); // Misc flags. @@ -721,7 +721,7 @@ function assemblerFlags(project, product, input, outputs, explicitlyDependsOn) { } // Listing files generation flag. - if (product.cpp.generateAssemblerListingFiles) + if (input.cpp.generateAssemblerListingFiles) args.push("-l", outputs.lst[0].filePath); // Misc flags. @@ -730,7 +730,7 @@ function assemblerFlags(project, product, input, outputs, explicitlyDependsOn) { return args; } -function linkerFlags(project, product, input, outputs) { +function linkerFlags(project, product, inputs, outputs) { var args = []; // Inputs. @@ -794,7 +794,7 @@ function linkerFlags(project, product, input, outputs) { return args; } -function archiverFlags(project, product, input, outputs) { +function archiverFlags(project, product, inputs, outputs) { var args = []; // Inputs. @@ -830,7 +830,7 @@ function prepareAssembler(project, product, inputs, outputs, input, output, expl function prepareLinker(project, product, inputs, outputs, input, output) { var primaryOutput = outputs.application[0]; - var args = linkerFlags(project, product, input, outputs); + var args = linkerFlags(project, product, inputs, outputs); var linkerPath = product.cpp.linkerPath; var cmd = new Command(linkerPath, args); cmd.description = "linking " + primaryOutput.fileName; @@ -839,7 +839,7 @@ function prepareLinker(project, product, inputs, outputs, input, output) { } function prepareArchiver(project, product, inputs, outputs, input, output) { - var args = archiverFlags(project, product, input, outputs); + var args = archiverFlags(project, product, inputs, outputs); var archiverPath = product.cpp.archiverPath; var cmd = new Command(archiverPath, args); cmd.description = "linking " + output.fileName; diff --git a/share/qbs/modules/cpp/iar.qbs b/share/qbs/modules/cpp/iar.qbs index bc226389b..519d30f2a 100644 --- a/share/qbs/modules/cpp/iar.qbs +++ b/share/qbs/modules/cpp/iar.qbs @@ -54,6 +54,7 @@ CppModule { } qbs.architecture: iarProbe.found ? iarProbe.architecture : original + qbs.targetPlatform: "none" compilerVersionMajor: iarProbe.versionMajor compilerVersionMinor: iarProbe.versionMinor diff --git a/share/qbs/modules/cpp/keil.js b/share/qbs/modules/cpp/keil.js index 4cb2946a6..fcea3c4b3 100644 --- a/share/qbs/modules/cpp/keil.js +++ b/share/qbs/modules/cpp/keil.js @@ -39,8 +39,17 @@ var TemporaryDir = require("qbs.TemporaryDir"); var TextFile = require("qbs.TextFile"); var Utilities = require("qbs.Utilities"); +function isMcs51Architecture(architecture) { + return architecture === "mcs51"; +} + +function isMcs251Architecture(architecture) { + return architecture === "mcs251"; +} + function isMcsArchitecture(architecture) { - return architecture === "mcs51" || architecture === "mcs251"; + return isMcs51Architecture(architecture) + || isMcs251Architecture(architecture); } function isC166Architecture(architecture) { @@ -156,7 +165,7 @@ function objectSuffix(qbs) { function mapFileSuffix(qbs) { var architecture = qbs.architecture; - if (isMcsArchitecture(architecture)) + if (isMcs51Architecture(architecture)) return ".m51"; if (isC166Architecture(architecture)) return ".m66"; @@ -204,6 +213,7 @@ function guessArmCCArchitecture(targetArchArm, targetArchThumb) { } function guessArmClangArchitecture(targetArchArm, targetArchProfile) { + targetArchProfile = targetArchProfile.replace(/'/g, ""); var arch = "arm"; if (targetArchArm !== "" && targetArchProfile !== "") arch += "v" + targetArchArm + targetArchProfile.toLowerCase(); @@ -643,7 +653,8 @@ function compilerOutputArtifacts(input, useListing) { artifacts.push({ fileTags: ["lst"], filePath: Utilities.getHash(input.baseDir) + "/" - + (isMcsArchitecture(input.cpp.architecture) + + ((isMcsArchitecture(input.cpp.architecture) + || isC166Architecture(input.cpp.architecture)) ? input.fileName : input.baseName) + ".lst" }); @@ -749,7 +760,7 @@ function compilerFlags(project, product, input, outputs, explicitlyDependsOn) { } // Listing files generation flag. - if (!product.cpp.generateCompilerListingFiles) + if (!input.cpp.generateCompilerListingFiles) args.push("NOPRINT"); else args.push("PRINT(" + FileInfo.toWindowsSeparators(outputs.lst[0].filePath) + ")"); @@ -839,7 +850,7 @@ function compilerFlags(project, product, input, outputs, explicitlyDependsOn) { } // Listing files generation flag. - if (product.cpp.generateCompilerListingFiles) { + if (input.cpp.generateCompilerListingFiles) { args.push("--list"); args.push("--list_dir", FileInfo.path(outputs.lst[0].filePath)); } @@ -963,7 +974,7 @@ function assemblerFlags(project, product, input, outputs, explicitlyDependsOn) { args.push("EP"); // Listing files generation flag. - if (!product.cpp.generateAssemblerListingFiles) + if (!input.cpp.generateAssemblerListingFiles) args.push("NOPRINT"); else args.push("PRINT(" + FileInfo.toWindowsSeparators(outputs.lst[0].filePath) + ")"); @@ -1005,7 +1016,7 @@ function assemblerFlags(project, product, input, outputs, explicitlyDependsOn) { args.push((endianness === "little") ? "--littleend" : "--bigend"); // Listing files generation flag. - if (product.cpp.generateAssemblerListingFiles) + if (input.cpp.generateAssemblerListingFiles) args.push("--list", outputs.lst[0].filePath); } @@ -1015,7 +1026,7 @@ function assemblerFlags(project, product, input, outputs, explicitlyDependsOn) { return args; } -function linkerFlags(project, product, input, outputs) { +function linkerFlags(project, product, inputs, outputs) { var args = []; var architecture = product.qbs.architecture; @@ -1048,7 +1059,9 @@ function linkerFlags(project, product, input, outputs) { // Map file generation flag. if (!product.cpp.generateLinkerMapFile) - args.push("NOMAP"); + args.push("NOPRINT"); + else + args.push("PRINT(" + FileInfo.toWindowsSeparators(outputs.mem_map[0].filePath) + ")"); } else if (isArmArchitecture(architecture)) { // Inputs. if (inputs.obj) @@ -1090,7 +1103,7 @@ function linkerFlags(project, product, input, outputs) { return args; } -function archiverFlags(project, product, input, outputs) { +function archiverFlags(project, product, inputs, outputs) { var args = []; var architecture = product.qbs.architecture; @@ -1170,7 +1183,7 @@ function prepareAssembler(project, product, inputs, outputs, input, output, expl function prepareLinker(project, product, inputs, outputs, input, output) { var primaryOutput = outputs.application[0]; - var args = linkerFlags(project, product, input, outputs); + var args = linkerFlags(project, product, inputs, outputs); var linkerPath = product.cpp.linkerPath; var architecture = product.cpp.architecture; var cmd = new Command(linkerPath, args); @@ -1187,7 +1200,7 @@ function prepareLinker(project, product, inputs, outputs, input, output) { } function prepareArchiver(project, product, inputs, outputs, input, output) { - var args = archiverFlags(project, product, input, outputs); + var args = archiverFlags(project, product, inputs, outputs); var archiverPath = product.cpp.archiverPath; var architecture = product.cpp.architecture; var cmd = new Command(archiverPath, args); diff --git a/share/qbs/modules/cpp/keil.qbs b/share/qbs/modules/cpp/keil.qbs index c57eb6751..7a994d7ea 100644 --- a/share/qbs/modules/cpp/keil.qbs +++ b/share/qbs/modules/cpp/keil.qbs @@ -52,6 +52,7 @@ CppModule { } qbs.architecture: keilProbe.found ? keilProbe.architecture : original + qbs.targetPlatform: "none" compilerVersionMajor: keilProbe.versionMajor compilerVersionMinor: keilProbe.versionMinor @@ -125,6 +126,7 @@ CppModule { id: applicationLinker multiplex: true inputs: ["obj", "linkerscript"] + inputsFromDependencies: ["staticlibrary"] outputFileTags: ["application", "mem_map"] outputArtifacts: KEIL.applicationLinkerOutputArtifacts(product) prepare: KEIL.prepareLinker.apply(KEIL, arguments) diff --git a/share/qbs/modules/cpp/msvc.js b/share/qbs/modules/cpp/msvc.js index 72ee08fe9..df1f5eb5b 100644 --- a/share/qbs/modules/cpp/msvc.js +++ b/share/qbs/modules/cpp/msvc.js @@ -245,6 +245,9 @@ function prepareCompiler(project, product, inputs, outputs, input, output, expli if (product.cpp.debugInformation && product.cpp.separateDebugInformation) args.push("/Fd" + product.targetName + ".cl" + product.cpp.debugInfoSuffix); + if (input.cpp.generateCompilerListingFiles) + args.push("/Fa" + FileInfo.toWindowsSeparators(outputs.lst[0].filePath)); + var objectMap = outputs.obj || outputs.intermediate_obj var objOutput = objectMap ? objectMap[0] : undefined args.push('/Fo' + FileInfo.toWindowsSeparators(objOutput.filePath)) diff --git a/share/qbs/modules/cpp/sdcc.js b/share/qbs/modules/cpp/sdcc.js index 49d74cb63..c34db1b22 100644 --- a/share/qbs/modules/cpp/sdcc.js +++ b/share/qbs/modules/cpp/sdcc.js @@ -238,14 +238,14 @@ function collectLibraryDependencies(product) { return result; } -function compilerOutputArtifacts(input) { +function compilerOutputArtifacts(input, useListing) { var obj = { fileTags: ["obj"], filePath: Utilities.getHash(input.baseDir) + "/" + input.fileName + input.cpp.objectSuffix }; - // We need to use the asm_adb, lst, asm_src, asm_sym and rst_data + // We need to use the asm_adb, asm_src, asm_sym and rst_data // artifacts without of any conditions. Because SDCC always generates // it (and seems, this behavior can not be disabled for SDCC). var asm_adb = { @@ -253,11 +253,6 @@ function compilerOutputArtifacts(input) { filePath: Utilities.getHash(input.baseDir) + "/" + input.fileName + ".adb" }; - var lst = { - fileTags: ["lst"], - filePath: Utilities.getHash(input.baseDir) + "/" - + input.fileName + ".lst" - }; var asm_src = { fileTags: ["asm_src"], filePath: Utilities.getHash(input.baseDir) + "/" @@ -273,7 +268,15 @@ function compilerOutputArtifacts(input) { filePath: Utilities.getHash(input.baseDir) + "/" + input.fileName + ".rst" }; - return [obj, asm_adb, lst, asm_src, asm_sym, rst_data]; + var artifacts = [obj, asm_adb, asm_src, asm_sym, rst_data]; + if (useListing) { + artifacts.push({ + fileTags: ["lst"], + filePath: Utilities.getHash(input.baseDir) + "/" + + input.fileName + ".lst" + }); + } + return artifacts; } function applicationLinkerOutputArtifacts(product) { @@ -455,7 +458,7 @@ function assemblerFlags(project, product, input, outputs, explicitlyDependsOn) { return args; } -function linkerFlags(project, product, input, outputs) { +function linkerFlags(project, product, inputs, outputs) { var args = []; // Target MCU flag. @@ -534,7 +537,7 @@ function linkerFlags(project, product, input, outputs) { return args; } -function archiverFlags(project, product, input, outputs) { +function archiverFlags(project, product, inputs, outputs) { var args = ["-rc"]; args.push(outputs.staticlibrary[0].filePath); if (inputs.obj) @@ -584,17 +587,42 @@ function prepareAssembler(project, product, inputs, outputs, input, output, expl } function prepareLinker(project, product, inputs, outputs, input, output) { + var cmds = []; var primaryOutput = outputs.application[0]; - var args = linkerFlags(project, product, input, outputs); + var args = linkerFlags(project, product, inputs, outputs); var linkerPath = effectiveLinkerPath(product); var cmd = new Command(linkerPath, args); cmd.description = "linking " + primaryOutput.fileName; cmd.highlight = "linker"; - return [cmd]; + cmds.push(cmd); + + // It is a workaround which removes the generated listing files + // if it is disabled by cpp.generateCompilerListingFiles property. + // Reason is that the SDCC compiler does not have an option to + // disable generation for a listing files. Besides, the SDCC + // compiler use this files and for the linking. So, we can to + // remove a listing files only after the linking completes. + if (!product.cpp.generateCompilerListingFiles) { + cmd = new JavaScriptCommand(); + cmd.objectPaths = inputs.obj.map(function(a) { return a.filePath; }); + cmd.objectSuffix = product.cpp.objectSuffix; + cmd.sourceCode = function() { + objectPaths.forEach(function(objectPath) { + if (!objectPath.endsWith(".c" + objectSuffix)) + return; // Skip the assembler objects. + var listingPath = FileInfo.joinPaths( + FileInfo.path(objectPath), + FileInfo.completeBaseName(objectPath) + ".lst"); + File.remove(listingPath); + }); + }; + cmds.push(cmd); + } + return cmds; } function prepareArchiver(project, product, inputs, outputs, input, output) { - var args = archiverFlags(project, product, input, outputs); + var args = archiverFlags(project, product, inputs, outputs); var archiverPath = product.cpp.archiverPath; var cmd = new Command(archiverPath, args); cmd.description = "linking " + output.fileName; diff --git a/share/qbs/modules/cpp/sdcc.qbs b/share/qbs/modules/cpp/sdcc.qbs index a8d0df3c9..3c5be7cdd 100644 --- a/share/qbs/modules/cpp/sdcc.qbs +++ b/share/qbs/modules/cpp/sdcc.qbs @@ -52,6 +52,7 @@ CppModule { } qbs.architecture: sdccProbe.found ? sdccProbe.architecture : original + qbs.targetPlatform: "none" compilerVersionMajor: sdccProbe.versionMajor compilerVersionMinor: sdccProbe.versionMinor @@ -100,7 +101,7 @@ CppModule { id: assembler inputs: ["asm"] outputFileTags: ["obj", "asm_adb", "lst", "asm_src", "asm_sym", "rst_data"] - outputArtifacts: SDCC.compilerOutputArtifacts(input) + outputArtifacts: SDCC.compilerOutputArtifacts(input, true) prepare: SDCC.prepareAssembler.apply(SDCC, arguments) } @@ -114,7 +115,8 @@ CppModule { inputs: ["cpp", "c"] auxiliaryInputs: ["hpp"] outputFileTags: ["obj", "asm_adb", "lst", "asm_src", "asm_sym", "rst_data"] - outputArtifacts: SDCC.compilerOutputArtifacts(input) + outputArtifacts: SDCC.compilerOutputArtifacts( + input, input.cpp.generateCompilerListingFiles) prepare: SDCC.prepareCompiler.apply(SDCC, arguments) } diff --git a/share/qbs/modules/cpp/windows-msvc-base.qbs b/share/qbs/modules/cpp/windows-msvc-base.qbs index 34132ac49..e88c3f15f 100644 --- a/share/qbs/modules/cpp/windows-msvc-base.qbs +++ b/share/qbs/modules/cpp/windows-msvc-base.qbs @@ -149,15 +149,23 @@ CppModule { auxiliaryInputs: ["hpp"] explicitlyDependsOn: ["c_pch", "cpp_pch"] - outputFileTags: ["obj", "intermediate_obj"] + outputFileTags: ["obj", "intermediate_obj", "lst"] outputArtifacts: { var tags = input.fileTags.contains("cpp_intermediate_object") ? ["intermediate_obj"] : ["obj"]; - return [{ + var artifacts = []; + artifacts.push({ fileTags: tags, filePath: Utilities.getHash(input.baseDir) + "/" + input.fileName + ".obj" - }]; + }); + if (input.cpp.generateCompilerListingFiles) { + artifacts.push({ + fileTags: ["lst"], + filePath: Utilities.getHash(input.baseDir) + "/" + input.fileName + ".lst" + }); + } + return artifacts; } prepare: { |