diff options
author | ODuzhar <59564676+ODuzhar@users.noreply.github.com> | 2022-03-22 03:14:03 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-21 22:14:03 -0500 |
commit | df3042f29b26e5ec2e080119156bf1c725d07d95 (patch) | |
tree | 8e3e4bb19d2c3d1ba0bb99af36ae97b1fdb4ca1c /lib/compilers | |
parent | 5f01821eb40450284a92fc4fa066772743b2a697 (diff) | |
download | compiler-explorer-df3042f29b26e5ec2e080119156bf1c725d07d95.tar.gz compiler-explorer-df3042f29b26e5ec2e080119156bf1c725d07d95.zip |
Added TypeScript Native compiler (#3448)gh-2193
* progress
* added some config
Co-authored-by: Alex D <duzhar@gmail.com>
Diffstat (limited to 'lib/compilers')
-rw-r--r-- | lib/compilers/_all.js | 1 | ||||
-rw-r--r-- | lib/compilers/argument-parsers.js | 7 | ||||
-rw-r--r-- | lib/compilers/typescript.js | 98 |
3 files changed, 106 insertions, 0 deletions
diff --git a/lib/compilers/_all.js b/lib/compilers/_all.js index b2c8142bf..d587abc1a 100644 --- a/lib/compilers/_all.js +++ b/lib/compilers/_all.js @@ -75,6 +75,7 @@ export { SPIRVCompiler } from './spirv'; export { SwiftCompiler } from './swift'; export { TenDRACompiler } from './tendra'; export { TinyCCompiler } from './tinyc'; +export { TypeScriptCompiler } from './typescript'; export { VBCompiler } from './dotnet'; export { Win32Compiler } from './win32'; export { Win32VcCompiler } from './win32-vc'; diff --git a/lib/compilers/argument-parsers.js b/lib/compilers/argument-parsers.js index aeed08a50..2ff065a59 100644 --- a/lib/compilers/argument-parsers.js +++ b/lib/compilers/argument-parsers.js @@ -345,3 +345,10 @@ export class CrystalParser extends BaseParser { return compiler; } } + +export class TypeScriptNativeParser extends BaseParser { + static async parse(compiler) { + await TypeScriptNativeParser.getOptions(compiler, '--help'); + return compiler; + } +} diff --git a/lib/compilers/typescript.js b/lib/compilers/typescript.js new file mode 100644 index 000000000..13c87d585 --- /dev/null +++ b/lib/compilers/typescript.js @@ -0,0 +1,98 @@ +import _ from 'underscore'; + +import { BaseCompiler } from '../base-compiler'; +import { logger } from '../logger'; +import { TypeScriptNativeParser } from './argument-parsers'; + +export class TypeScriptCompiler extends BaseCompiler { + static get key() { + return 'typescript'; + } + + constructor(compilerInfo, env) { + super(compilerInfo, env); + + this.compiler.supportsIntel = false; + this.compiler.supportsIrView = true; + + this.tscJit = this.compilerProps(`compiler.${this.compiler.id}.exe`); + this.tscSharedLib = this.compilerProps(`compiler.${this.compiler.id}.sharedlibs`); + } + + getSharedLibraryPathsAsArguments() { + return []; + } + + optionsForFilter(filters, outputFilename) { + return [this.filename(outputFilename)]; + } + + async handleInterpreting(key, executeParameters) { + executeParameters.args = [ + '--emit=jit', + this.tscSharedLib ? '--shared-libs=' + this.tscSharedLib : '-nogc', + ...executeParameters.args, + ]; + + return await super.handleInterpreting(key, executeParameters); + } + + async runCompiler(compiler, options, inputFilename, execOptions) { + // These options make Clang produce an IR + const newOptions = [ + '--emit=mlir-llvm', + inputFilename, + ]; + + if (!this.tscSharedLib) + { + newOptions.push('-nogc'); + } + + const output = await this.runCompilerRawOutput( + this.tscJit, newOptions, this.filename(inputFilename), execOptions); + if (output.code !== 0) { + return [{ text: 'Failed to run compiler to get MLIR code' }]; + } + + return { code: 0 }; + } + + async generateIR(inputFilename, options, filters) { + // These options make Clang produce an IR + const newOptions = [ + '--emit=llvm', + inputFilename, + ]; + + if (!this.tscSharedLib) + { + newOptions.push('-nogc'); + } + + const execOptions = this.getDefaultExecOptions(); + // A higher max output is needed for when the user includes headers + execOptions.maxOutput = 1024 * 1024 * 1024; + + const output = await this.runCompilerRawOutput( + this.tscJit, newOptions, this.filename(inputFilename), execOptions); + if (output.code !== 0) { + return [{ text: 'Failed to run compiler to get IR code' }]; + } + + filters.commentOnly = false; + filters.libraryCode = true; + filters.directives = true; + + const ir = await this.llvmIr.process(output.stderr, filters); + return ir.asm; + } + + isCfgCompiler() { + return true; + } + + getArgumentParser() { + return TypeScriptNativeParser; + } +} |