aboutsummaryrefslogtreecommitdiff
path: root/lib/compilers/argument-parsers.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/compilers/argument-parsers.js')
-rw-r--r--lib/compilers/argument-parsers.js46
1 files changed, 31 insertions, 15 deletions
diff --git a/lib/compilers/argument-parsers.js b/lib/compilers/argument-parsers.js
index a7fd8d822..6c05a4d12 100644
--- a/lib/compilers/argument-parsers.js
+++ b/lib/compilers/argument-parsers.js
@@ -81,13 +81,7 @@ export class BaseParser {
}
export class GCCParser extends BaseParser {
- static async parse(compiler) {
- const results = await Promise.all([
- GCCParser.getOptions(compiler, '-fsyntax-only --target-help'),
- GCCParser.getOptions(compiler, '-fsyntax-only --help=common'),
- GCCParser.getOptions(compiler, '-fsyntax-only --help=optimizers'),
- ]);
- const options = Object.assign({}, ...results);
+ static async setCompilerSettingsFromOptions(compiler, options) {
const keys = _.keys(options);
logger.debug(`gcc-like compiler options: ${keys.join(' ')}`);
if (BaseParser.hasSupport(options, '-masm=')) {
@@ -107,6 +101,16 @@ export class GCCParser extends BaseParser {
if (_.find(keys, key => key.startsWith('-fdump-'))) {
compiler.compiler.supportsGccDump = true;
}
+ }
+
+ static async parse(compiler) {
+ const results = await Promise.all([
+ GCCParser.getOptions(compiler, '-fsyntax-only --target-help'),
+ GCCParser.getOptions(compiler, '-fsyntax-only --help=common'),
+ GCCParser.getOptions(compiler, '-fsyntax-only --help=optimizers'),
+ ]);
+ const options = Object.assign({}, ...results);
+ this.setCompilerSettingsFromOptions(compiler, options);
return compiler;
}
@@ -121,8 +125,7 @@ export class GCCParser extends BaseParser {
}
export class ClangParser extends BaseParser {
- static async parse(compiler) {
- const options = await ClangParser.getOptions(compiler, '--help');
+ static async setCompilerSettingsFromOptions(compiler, options) {
logger.debug(`clang-like compiler options: ${_.keys(options).join(' ')}`);
if (BaseParser.hasSupport(options, '-fsave-optimization-record')) {
compiler.compiler.optArg = '-fsave-optimization-record';
@@ -140,6 +143,11 @@ export class ClangParser extends BaseParser {
if (compiler.compiler.options) compiler.compiler.options += ' ';
compiler.compiler.options += '-fno-crash-diagnostics';
}
+ }
+
+ static async parse(compiler) {
+ const options = await ClangParser.getOptions(compiler, '--help');
+ this.setCompilerSettingsFromOptions(compiler, options);
return compiler;
}
}
@@ -152,12 +160,16 @@ export class PascalParser extends BaseParser {
}
export class ISPCParser extends BaseParser {
- static async parse(compiler) {
- const options = await ISPCParser.getOptions(compiler, '--help');
+ static async setCompilerSettingsFromOptions(compiler, options) {
if (BaseParser.hasSupport(options, '--x86-asm-syntax')) {
compiler.compiler.intelAsm = '--x86-asm-syntax=intel';
compiler.compiler.supportsIntel = true;
}
+ }
+
+ static async parse(compiler) {
+ const options = await ISPCParser.getOptions(compiler, '--help');
+ this.setCompilerSettingsFromOptions(compiler, options);
return compiler;
}
@@ -264,6 +276,13 @@ export class VCParser extends BaseParser {
}
export class RustParser extends BaseParser {
+ static async setCompilerSettingsFromOptions(compiler, options) {
+ if (BaseParser.hasSupport(options, '--color')) {
+ if (compiler.compiler.options) compiler.compiler.options += ' ';
+ compiler.compiler.options += '--color=always';
+ }
+ }
+
static async parse(compiler) {
const results = await Promise.all([
RustParser.getOptions(compiler, '--help'),
@@ -271,10 +290,7 @@ export class RustParser extends BaseParser {
RustParser.getOptions(compiler, '--help -v'),
]);
const options = Object.assign({}, ...results);
- if (BaseParser.hasSupport(options, '--color')) {
- if (compiler.compiler.options) compiler.compiler.options += ' ';
- compiler.compiler.options += '--color=always';
- }
+ this.setCompilerSettingsFromOptions(compiler, options);
return compiler;
}