aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDenis Shienkov <denis.shienkov@gmail.com>2020-07-02 19:24:42 +0300
committerDenis Shienkov <denis.shienkov@gmail.com>2020-07-03 09:20:00 +0000
commite7f970758bf6f821c27522d46ff0c89c540179d4 (patch)
treeae797883afd08bd20e5391dd54f0953d0eeb1079
parente4ec60065c4adddd774c05c6fcc219f5c7bfbe70 (diff)
baremetal: Simplify cpp.prefixHeaders handling using KEIL ARM toolchains
It seems it makes no sense to add the 'pre-include' flags before the 'defines' and 'includes', because all pre-includes will be pre-processed after the 'defines' and 'includes'. At least this note belongs to the 'armclang' compiler: * http://www.keil.com/support/man/docs/armclang_ref/armclang_ref_sam1452772182261.htm So, we can simplify the cpp.prefixHeaders handling to minimize the JS code duplication. Change-Id: I7c6dd7b5545294ff6aba866c2be9ebbcff190f6f Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
-rw-r--r--share/qbs/modules/cpp/keil.js34
-rw-r--r--share/qbs/modules/cpp/keil.qbs2
2 files changed, 18 insertions, 18 deletions
diff --git a/share/qbs/modules/cpp/keil.js b/share/qbs/modules/cpp/keil.js
index 2462fd754..441b49213 100644
--- a/share/qbs/modules/cpp/keil.js
+++ b/share/qbs/modules/cpp/keil.js
@@ -175,6 +175,13 @@ function imageFormat(qbs) {
+ architecture + "'";
}
+function preincludeFlag(compilerPath) {
+ if (isArmCCCompiler(compilerPath))
+ return "--preinclude";
+ else if (isArmClangCompiler(compilerPath))
+ return "-include";
+}
+
function guessArmCCArchitecture(targetArchArm, targetArchThumb) {
var arch = "arm";
if (targetArchArm === "4" && targetArchThumb === "0")
@@ -675,8 +682,6 @@ function compilerFlags(project, product, input, outputs, explicitlyDependsOn) {
var tag = ModUtils.fileTagForTargetLanguage(input.fileTags.concat(outputs.obj[0].fileTags));
var args = [];
- var prefixHeaders = input.cpp.prefixHeaders;
-
var allDefines = [];
var platformDefines = input.cpp.platformDefines;
if (platformDefines)
@@ -754,16 +759,17 @@ function compilerFlags(project, product, input, outputs, explicitlyDependsOn) {
// Output.
args.push("-o", outputs.obj[0].filePath);
- var compilerPath = input.cpp.compilerPath;
- if (isArmCCCompiler(compilerPath)) {
- for (var i in prefixHeaders)
- args.push("--preinclude", prefixHeaders[i]);
+ // Defines.
+ args = args.concat(allDefines.map(function(define) { return '-D' + define }));
+ // Includes.
+ args = args.concat(allIncludePaths.map(function(include) { return '-I' + include }));
- // Defines.
- args = args.concat(allDefines.map(function(define) { return '-D' + define }));
- // Includes.
- args = args.concat(allIncludePaths.map(function(include) { return '-I' + include }));
+ var prefixHeaders = input.cpp.prefixHeaders;
+ for (var i in prefixHeaders)
+ args.push(input.cpp.preincludeFlag, prefixHeaders[i]);
+ var compilerPath = input.cpp.compilerPath;
+ if (isArmCCCompiler(compilerPath)) {
// Debug information flags.
if (input.cpp.debugInformation) {
args.push("--debug");
@@ -838,14 +844,6 @@ function compilerFlags(project, product, input, outputs, explicitlyDependsOn) {
args.push("--list_dir", FileInfo.path(outputs.lst[0].filePath));
}
} else if (isArmClangCompiler(compilerPath)) {
- for (var i in prefixHeaders)
- args.push("-include", prefixHeaders[i]);
-
- // Defines.
- args = args.concat(allDefines.map(function(define) { return '-D' + define }));
- // Includes.
- args = args.concat(allIncludePaths.map(function(include) { return '-I' + include }));
-
// Debug information flags.
if (input.cpp.debugInformation)
args.push("-g");
diff --git a/share/qbs/modules/cpp/keil.qbs b/share/qbs/modules/cpp/keil.qbs
index 357052777..c57eb6751 100644
--- a/share/qbs/modules/cpp/keil.qbs
+++ b/share/qbs/modules/cpp/keil.qbs
@@ -95,6 +95,8 @@ CppModule {
enableExceptions: false
enableRtti: false
+ property string preincludeFlag: KEIL.preincludeFlag(compilerPath)
+
Rule {
id: assembler
inputs: ["asm"]