aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDenis Shienkov <denis.shienkov@gmail.com>2019-05-14 22:02:52 +0300
committerDenis Shienkov <denis.shienkov@gmail.com>2019-05-15 09:41:13 +0000
commit6d32d72df0879887a1a4cf1b5794550bfb0deeb5 (patch)
tree1f03b75a86aad406d4d751bbf9e1f6b30f826e64
parentbf56ef80ef3827d98be3bddf5a32477fc8a79647 (diff)
bare-metal: Implement cpp.compilerDefinesByLanguage for KEIL toolchain
Change-Id: Id689c4e0290ba83e8755b6787601338a01af07c9 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
-rw-r--r--share/qbs/imports/qbs/Probes/KeilProbe.qbs17
-rw-r--r--share/qbs/modules/cpp/keil.js22
-rw-r--r--share/qbs/modules/cpp/keil.qbs3
3 files changed, 32 insertions, 10 deletions
diff --git a/share/qbs/imports/qbs/Probes/KeilProbe.qbs b/share/qbs/imports/qbs/Probes/KeilProbe.qbs
index 70712ab61..9862a682a 100644
--- a/share/qbs/imports/qbs/Probes/KeilProbe.qbs
+++ b/share/qbs/imports/qbs/Probes/KeilProbe.qbs
@@ -34,6 +34,7 @@ import "../../../modules/cpp/keil.js" as KEIL
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 = KEIL.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] = KEIL.dumpMacros(
+ compilerFilePath, tag, _nullDevice);
+ }
+
+ var macros = compilerDefinesByLanguage["c"]
+ || compilerDefinesByLanguage["cpp"];
architecture = KEIL.guessArchitecture(macros);
endianness = KEIL.guessEndianness(macros);
diff --git a/share/qbs/modules/cpp/keil.js b/share/qbs/modules/cpp/keil.js
index 314d84c69..fbdc0e9fb 100644
--- a/share/qbs/modules/cpp/keil.js
+++ b/share/qbs/modules/cpp/keil.js
@@ -81,7 +81,11 @@ function guessVersion(macros)
// Note: The KEIL 8051 compiler does not support the predefined
// macros dumping. So, we do it with following trick where we try
// to compile a temporary file and to parse the console output.
-function dumpC51CompilerMacros(compilerFilePath, qbs) {
+function dumpC51CompilerMacros(compilerFilePath, tag) {
+ // C51 compiler support only C language.
+ if (tag === "cpp")
+ return {};
+
function createDumpMacrosFile() {
var td = new TemporaryDir();
var fn = FileInfo.fromNativeSeparators(td.path() + "/dump-macros.c");
@@ -107,11 +111,13 @@ function dumpC51CompilerMacros(compilerFilePath, qbs) {
return map;
}
-function dumpArmCompilerMacros(compilerFilePath, qbs, nullDevice) {
+function dumpArmCompilerMacros(compilerFilePath, tag, nullDevice) {
+ var args = [ "-E", "--list-macros", nullDevice ];
+ if (tag === "cpp")
+ args.push("--cpp");
+
var p = new Process();
- p.exec(compilerFilePath,
- [ "-E", "--list-macros", nullDevice ],
- false);
+ p.exec(compilerFilePath, args, false);
var map = {};
p.readStdOut().trim().split(/\r?\n/g).map(function (line) {
if (!line.startsWith("#define"))
@@ -122,9 +128,9 @@ function dumpArmCompilerMacros(compilerFilePath, qbs, nullDevice) {
return map;
}
-function dumpMacros(compilerFilePath, qbs, nullDevice) {
- var map1 = dumpC51CompilerMacros(compilerFilePath, qbs);
- var map2 = dumpArmCompilerMacros(compilerFilePath, qbs, nullDevice);
+function dumpMacros(compilerFilePath, tag, nullDevice) {
+ var map1 = dumpC51CompilerMacros(compilerFilePath, tag, nullDevice);
+ var map2 = dumpArmCompilerMacros(compilerFilePath, tag, nullDevice);
var map = {};
for (var attrname in map1)
map[attrname] = map1[attrname];
diff --git a/share/qbs/modules/cpp/keil.qbs b/share/qbs/modules/cpp/keil.qbs
index dab37801a..3d03f9112 100644
--- a/share/qbs/modules/cpp/keil.qbs
+++ b/share/qbs/modules/cpp/keil.qbs
@@ -50,6 +50,7 @@ CppModule {
id: keilProbe
condition: !_skipAllChecks
compilerFilePath: compilerPath
+ enableDefinesByLanguage: enableCompilerDefinesByLanguage
}
qbs.architecture: keilProbe.found ? keilProbe.architecture : original
@@ -59,7 +60,7 @@ CppModule {
compilerVersionPatch: keilProbe.versionPatch
endianness: keilProbe.endianness
- compilerDefinesByLanguage: []
+ compilerDefinesByLanguage: keilProbe.compilerDefinesByLanguage
property string toolchainInstallPath: compilerPathProbe.found
? compilerPathProbe.path : undefined