aboutsummaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
Diffstat (limited to 'share')
-rw-r--r--share/qbs/imports/qbs/Probes/path-probe.js24
-rw-r--r--share/qbs/modules/cpp/GenericGCC.qbs3
-rw-r--r--share/qbs/modules/cpp/MingwBaseModule.qbs2
-rw-r--r--share/qbs/modules/cpp/UnixGCC.qbs2
-rw-r--r--share/qbs/modules/cpp/android-gcc.qbs1
-rw-r--r--share/qbs/modules/cpp/iar.js16
-rw-r--r--share/qbs/modules/cpp/iar.qbs1
-rw-r--r--share/qbs/modules/cpp/keil.js37
-rw-r--r--share/qbs/modules/cpp/keil.qbs2
-rw-r--r--share/qbs/modules/cpp/msvc.js3
-rw-r--r--share/qbs/modules/cpp/sdcc.js54
-rw-r--r--share/qbs/modules/cpp/sdcc.qbs6
-rw-r--r--share/qbs/modules/cpp/windows-msvc-base.qbs14
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: {