aboutsummaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
authorDenis Shienkov <denis.shienkov@gmail.com>2019-05-10 12:27:28 +0300
committerDenis Shienkov <denis.shienkov@gmail.com>2019-05-10 13:20:54 +0000
commitb59edb3e2e67453318f5f2f48c86c3f45e8b1e46 (patch)
tree5f58dbc0a7928632ff4f92063ef16147f9428ed8 /share
parentdb4a3f1f91a5ddec9c6447e28ced46e6e381ac18 (diff)
bare-metal: Implement cpp.compilerDefinesByLanguage for IAR toolchain
Change-Id: Id18528b1f6f6a98bec3f877e70c660180078a66c Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com> Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'share')
-rw-r--r--share/qbs/imports/qbs/Probes/IarProbe.qbs17
-rw-r--r--share/qbs/modules/cpp/iar.js12
-rw-r--r--share/qbs/modules/cpp/iar.qbs3
3 files changed, 25 insertions, 7 deletions
diff --git a/share/qbs/imports/qbs/Probes/IarProbe.qbs b/share/qbs/imports/qbs/Probes/IarProbe.qbs
index 12b3c46eb..04d338268 100644
--- a/share/qbs/imports/qbs/Probes/IarProbe.qbs
+++ b/share/qbs/imports/qbs/Probes/IarProbe.qbs
@@ -34,6 +34,7 @@ import "../../../modules/cpp/iar.js" as IAR
PathProbe {
// Inputs
property string compilerFilePath;
+ property stringList enableDefinesByLanguage;
property string _nullDevice: qbs.nullDevice
@@ -43,14 +44,28 @@ PathProbe {
property int versionMajor;
property int versionMinor;
property int versionPatch;
+ property var compilerDefinesByLanguage;
configure: {
+ compilerDefinesByLanguage = {};
+
if (!File.exists(compilerFilePath)) {
found = false;
return;
}
- var macros = IAR.dumpMacros(compilerFilePath, qbs, _nullDevice);
+ var languages = enableDefinesByLanguage;
+ if (!languages || languages.length === 0)
+ languages = ["c"];
+
+ for (var i = 0; i < languages.length; ++i) {
+ var tag = languages[i];
+ compilerDefinesByLanguage[tag] = IAR.dumpMacros(
+ compilerFilePath, tag);
+ }
+
+ var macros = compilerDefinesByLanguage["c"]
+ || compilerDefinesByLanguage["cpp"];
architecture = IAR.guessArchitecture(macros);
endianness = IAR.guessEndianness(macros);
diff --git a/share/qbs/modules/cpp/iar.js b/share/qbs/modules/cpp/iar.js
index 35ed29da3..cf4577c6a 100644
--- a/share/qbs/modules/cpp/iar.js
+++ b/share/qbs/modules/cpp/iar.js
@@ -56,16 +56,18 @@ function guessEndianness(macros)
return "big"
}
-function dumpMacros(compilerFilePath, qbs, nullDevice) {
+function dumpMacros(compilerFilePath, tag) {
var tempDir = new TemporaryDir();
var inFilePath = FileInfo.fromNativeSeparators(tempDir.path() + "/empty-source.c");
var inFile = new TextFile(inFilePath, TextFile.WriteOnly);
var outFilePath = FileInfo.fromNativeSeparators(tempDir.path() + "/iar-macros.predef");
- var p = new Process();
- p.exec(compilerFilePath,
- [ inFilePath, "--predef_macros", outFilePath ],
- true);
+ var args = [ inFilePath, "--predef_macros", outFilePath ];
+ if (tag && tag === "cpp")
+ args.push("--ec++");
+
+ var p = new Process();
+ p.exec(compilerFilePath, args, true);
var outFile = new TextFile(outFilePath, TextFile.ReadOnly);
var map = {};
outFile.readAll().trim().split(/\r?\n/g).map(function (line) {
diff --git a/share/qbs/modules/cpp/iar.qbs b/share/qbs/modules/cpp/iar.qbs
index 3dea255db..05a76c6b5 100644
--- a/share/qbs/modules/cpp/iar.qbs
+++ b/share/qbs/modules/cpp/iar.qbs
@@ -50,6 +50,7 @@ CppModule {
id: iarProbe
condition: !_skipAllChecks
compilerFilePath: compilerPath
+ enableDefinesByLanguage: enableCompilerDefinesByLanguage
}
qbs.architecture: iarProbe.found ? iarProbe.architecture : original
@@ -59,7 +60,7 @@ CppModule {
compilerVersionPatch: iarProbe.versionPatch
endianness: iarProbe.endianness
- compilerDefinesByLanguage: []
+ compilerDefinesByLanguage: iarProbe.compilerDefinesByLanguage
property string toolchainInstallPath: compilerPathProbe.found
? compilerPathProbe.path : undefined