diff options
Diffstat (limited to 'lib/compilers')
-rw-r--r-- | lib/compilers/argument-parsers.js | 45 | ||||
-rw-r--r-- | lib/compilers/ldc.js | 9 |
2 files changed, 47 insertions, 7 deletions
diff --git a/lib/compilers/argument-parsers.js b/lib/compilers/argument-parsers.js index caa1e4166..235d6b94a 100644 --- a/lib/compilers/argument-parsers.js +++ b/lib/compilers/argument-parsers.js @@ -199,6 +199,51 @@ export class ClangParser extends BaseParser { } } +export class LDCParser extends BaseParser { + static setCompilerSettingsFromOptions(compiler, options) { + if (BaseParser.hasSupport(options, '--fsave-optimization-record')) { + compiler.compiler.optArg = '--fsave-optimization-record'; + compiler.compiler.supportsOptOutput = true; + } + + if ( + BaseParser.hasSupport(options, '--print-before-all') && + BaseParser.hasSupport(options, '--print-after-all') + ) { + compiler.compiler.supportsLLVMOptPipelineView = true; + compiler.compiler.llvmOptArg = ['--print-before-all', '--print-after-all']; + compiler.compiler.llvmOptModuleScopeArg = []; + compiler.compiler.llvmOptNoDiscardValueNamesArg = []; + if (BaseParser.hasSupport(options, '--print-module-scope')) { + compiler.compiler.llvmOptModuleScopeArg = ['--print-module-scope']; + } + if (BaseParser.hasSupport(options, '--fno-discard-value-names')) { + compiler.compiler.llvmOptNoDiscardValueNamesArg = ['--fno-discard-value-names']; + } + } + + if (BaseParser.hasSupport(options, '--enable-color')) { + compiler.compiler.options += ' --enable-color'; + } + } + + static async parse(compiler) { + const options = await LDCParser.getOptions(compiler, '--help-hidden'); + this.setCompilerSettingsFromOptions(compiler, options); + return compiler; + } + + static async getOptions(compiler, helpArg, populate = true) { + const optionFinder = /^\s*(--?[\d+,<=>[\]a-z|-]*)\s*(.*)/i; + const result = await compiler.execCompilerCached(compiler.compiler.exe, helpArg.split(' ')); + const options = result.code === 0 ? BaseParser.parseLines(result.stdout + result.stderr, optionFinder) : {}; + if (populate) { + compiler.possibleArguments.populateOptions(options); + } + return options; + } +} + export class ErlangParser extends BaseParser { static async parse(compiler) { await ErlangParser.getOptions(compiler, '-help'); diff --git a/lib/compilers/ldc.js b/lib/compilers/ldc.js index 15bbd584f..0583a0284 100644 --- a/lib/compilers/ldc.js +++ b/lib/compilers/ldc.js @@ -30,7 +30,7 @@ import semverParser from 'semver'; import {BaseCompiler} from '../base-compiler'; import {logger} from '../logger'; -import {ClangParser} from './argument-parsers'; +import {LDCParser} from './argument-parsers'; export class LDCCompiler extends BaseCompiler { static get key() { @@ -43,11 +43,6 @@ export class LDCCompiler extends BaseCompiler { this.compiler.supportsIrView = true; this.compiler.irArg = ['-output-ll']; - this.compiler.supportsLLVMOptPipelineView = true; - this.compiler.llvmOptArg = ['--print-after-all', '--print-before-all']; - this.compiler.llvmOptModuleScopeArg = ['--print-module-scope']; - this.compiler.llvmOptNoDiscardValueNamesArg = []; // LDC does not have a flag for this yet. - this.asanSymbolizerPath = this.compilerProps('llvmSymbolizer'); } @@ -73,7 +68,7 @@ export class LDCCompiler extends BaseCompiler { } getArgumentParser() { - return ClangParser; + return LDCParser; } filterUserOptions(userOptions) { |