From b59edb3e2e67453318f5f2f48c86c3f45e8b1e46 Mon Sep 17 00:00:00 2001 From: Denis Shienkov Date: Fri, 10 May 2019 12:27:28 +0300 Subject: bare-metal: Implement cpp.compilerDefinesByLanguage for IAR toolchain Change-Id: Id18528b1f6f6a98bec3f877e70c660180078a66c Reviewed-by: Ivan Komissarov Reviewed-by: Christian Kandeler --- share/qbs/imports/qbs/Probes/IarProbe.qbs | 17 ++++++++++++++++- share/qbs/modules/cpp/iar.js | 12 +++++++----- share/qbs/modules/cpp/iar.qbs | 3 ++- 3 files changed, 25 insertions(+), 7 deletions(-) (limited to 'share') 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 -- cgit v1.2.3