diff options
Diffstat (limited to 'lib/compilers/clangcl.ts')
-rw-r--r-- | lib/compilers/clangcl.ts | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/lib/compilers/clangcl.ts b/lib/compilers/clangcl.ts index 0d1866bc2..6b65a4f85 100644 --- a/lib/compilers/clangcl.ts +++ b/lib/compilers/clangcl.ts @@ -29,6 +29,7 @@ import type {ParseFiltersAndOutputOptions} from '../../types/features/filters.in import {Win32Compiler} from './win32.js'; import {unwrap} from '../assert.js'; +import {LLVMIrBackendOptions} from '../../types/compilation/ir.interfaces.js'; export class ClangCLCompiler extends Win32Compiler { static override get key() { @@ -40,11 +41,18 @@ export class ClangCLCompiler extends Win32Compiler { this.compiler.supportsIrView = true; this.compiler.irArg = ['-Xclang', '-emit-llvm']; + this.compiler.minIrArgs = ['-emit-llvm']; this.compiler.supportsIntel = false; this.compiler.includeFlag = '/clang:-isystem'; } - override async generateIR(inputFilename: string, options: string[], filters: ParseFiltersAndOutputOptions) { + override async generateIR( + inputFilename: string, + options: string[], + irOptions: LLVMIrBackendOptions, + produceCfg: boolean, + filters: ParseFiltersAndOutputOptions, + ) { // These options make Clang produce an IR const newOptions = options .filter(option => option !== '/FA' && !option.startsWith('/Fa')) @@ -56,13 +64,17 @@ export class ClangCLCompiler extends Win32Compiler { const output = await this.runCompiler(this.compiler.exe, newOptions, this.filename(inputFilename), execOptions); if (output.code !== 0) { - return [{text: 'Failed to run compiler to get IR code'}]; + return { + asm: [{text: 'Failed to run compiler to get IR code'}], + }; } - const ir = await this.processIrOutput(output, filters); - return ir.asm; + const ir = await this.processIrOutput(output, irOptions, filters); + return { + asm: ir.asm, + }; } - override getIrOutputFilename(inputFilename: string, filters: ParseFiltersAndOutputOptions): string { + override getIrOutputFilename(inputFilename: string): string { return this.filename(path.dirname(inputFilename) + '/output.s.obj'); } |