diff options
Diffstat (limited to 'lib/compilers/argument-parsers.js')
-rw-r--r-- | lib/compilers/argument-parsers.js | 25 |
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 { |