aboutsummaryrefslogtreecommitdiff
path: root/lib/compilers
diff options
context:
space:
mode:
Diffstat (limited to 'lib/compilers')
-rw-r--r--lib/compilers/argument-parsers.js45
-rw-r--r--lib/compilers/ldc.js9
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) {