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.js25
1 files changed, 20 insertions, 5 deletions
diff --git a/lib/compilers/argument-parsers.js b/lib/compilers/argument-parsers.js
index 03ddc30c1..660995ab5 100644
--- a/lib/compilers/argument-parsers.js
+++ b/lib/compilers/argument-parsers.js
@@ -82,16 +82,22 @@ class BaseParser {
class GCCParser extends BaseParser {
static async parse(compiler) {
const results = await Promise.all([
- GCCParser.getOptions(compiler, "--target-help"),
- GCCParser.getOptions(compiler, "--help=common"),
- GCCParser.getOptions(compiler, "--help=optimizers")
+ 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);
const keys = _.keys(options);
logger.debug(`gcc-like compiler options: ${keys.join(" ")}`);
if (BaseParser.hasSupport(options, "-masm=")) {
- compiler.compiler.intelAsm = "-masm=intel";
- compiler.compiler.supportsIntel = true;
+ // -masm= may be available but unsupported by the compiler.
+ compiler.exec(compiler.compiler.exe, ["-fsyntax-only", "--target-help", "-masm=intel"])
+ .then(result => {
+ if (result.code === 0) {
+ compiler.compiler.intelAsm = "-masm=intel";
+ compiler.compiler.supportsIntel = true;
+ }
+ });
}
if (BaseParser.hasSupport(options, "-fdiagnostics-color")) {
if (compiler.compiler.options) compiler.compiler.options += " ";
@@ -103,6 +109,15 @@ class GCCParser extends BaseParser {
}
return compiler;
}
+
+ static async getOptions(compiler, helpArg) {
+ const optionFinder = /^\s*(--?[a-z0-9=+,[\]<>|-]*)\s*(.*)/i;
+ const result = await compiler.execCompilerCached(compiler.compiler.exe, helpArg.split(' '));
+ const options = result.code === 0
+ ? BaseParser.parseLines(result.stdout + result.stderr, optionFinder) : {};
+ compiler.possibleArguments.populateOptions(options);
+ return options;
+ }
}
class ClangParser extends BaseParser {