diff --git a/etc/nsjail/execute.cfg b/etc/nsjail/execute.cfg index c241d68a07d..912c24fde1c 100644 --- a/etc/nsjail/execute.cfg +++ b/etc/nsjail/execute.cfg @@ -28,7 +28,7 @@ cgroup_net_cls_parent: "ce-compile" cgroup_cpu_parent: "ce-compile" cgroup_mem_max: 1342177280 # 1.25 GiB -cgroup_pids_max: 64 # go uses a bunch (probably one per CPU, on my desktop) +cgroup_pids_max: 72 cgroup_cpu_ms_per_sec: 1000 mount { diff --git a/lib/compilers/dotnet.ts b/lib/compilers/dotnet.ts index 9549138d060..3a229d541d0 100644 --- a/lib/compilers/dotnet.ts +++ b/lib/compilers/dotnet.ts @@ -46,7 +46,6 @@ class DotNetCompiler extends BaseCompiler { private buildConfig: string; private clrBuildDir: string; private langVersion: string; - private compileToBinary = false; constructor(compilerInfo, env) { super(compilerInfo, env); @@ -94,6 +93,44 @@ class DotNetCompiler extends BaseCompiler { ]; } + async writeProjectfile(programDir: string, compileToBinary: boolean, sourceFile: string) { + const projectFileContent = ` + + ${this.targetFramework} + true + CompilerExplorer + ${this.langVersion} + false + enable + ${compileToBinary ? 'Exe' : 'Library'} + + + + + + `; + + const projectFilePath = path.join(programDir, `CompilerExplorer${this.lang.extensions[0]}proj`); + await fs.writeFile(projectFilePath, projectFileContent); + } + + override async buildExecutable(compiler, options, inputFilename, execOptions) { + const dirPath = path.dirname(inputFilename); + const inputFilenameSafe = this.filename(inputFilename); + const sourceFile = path.basename(inputFilenameSafe); + await this.writeProjectfile(dirPath, true, sourceFile); + + return super.buildExecutable(compiler, options, inputFilename, execOptions); + } + + override async doCompilation(inputFilename, dirPath, key, options, filters, backendOptions, libraries, tools) { + const inputFilenameSafe = this.filename(inputFilename); + const sourceFile = path.basename(inputFilenameSafe); + await this.writeProjectfile(dirPath, filters.binary, sourceFile); + + return super.doCompilation(inputFilename, dirPath, key, options, filters, backendOptions, libraries, tools); + } + override async runCompiler( compiler: string, options: string[], @@ -105,29 +142,15 @@ class DotNetCompiler extends BaseCompiler { } const programDir = path.dirname(inputFilename); - const sourceFile = path.basename(inputFilename); - const projectFilePath = path.join(programDir, `CompilerExplorer${this.lang.extensions[0]}proj`); const crossgen2Path = path.join(this.clrBuildDir, 'crossgen2', 'crossgen2.dll'); const nugetConfigPath = path.join(programDir, 'nuget.config'); const programOutputPath = path.join(programDir, 'bin', this.buildConfig, this.targetFramework); const programDllPath = path.join(programOutputPath, 'CompilerExplorer.dll'); - const projectFileContent = ` - - ${this.targetFramework} - true - CompilerExplorer - ${this.langVersion} - false - enable - ${this.compileToBinary ? 'Exe' : 'Library'} - - - - - - `; + + const sdkBaseDir = path.join(path.dirname(compiler), 'sdk'); + const sdkVersions = await fs.readdir(sdkBaseDir); const nugetConfigFileContent = ` @@ -158,7 +181,6 @@ class DotNetCompiler extends BaseCompiler { execOptions.env.DOTNET_NOLOGO = 'true'; execOptions.customCwd = programDir; - await fs.writeFile(projectFilePath, projectFileContent); await fs.writeFile(nugetConfigPath, nugetConfigFileContent); const crossgen2Options: string[] = []; @@ -211,10 +233,6 @@ class DotNetCompiler extends BaseCompiler { } override optionsForFilter(filters: ParseFiltersAndOutputOptions) { - if (filters.binary) { - this.compileToBinary = true; - } - return this.compilerOptions; }