Support execution of programs for JVM compilers (#2745)

* Bare execution for Java programs
* Support execution for Kotlin
This commit is contained in:
Mats Larsen
2021-07-06 15:11:32 +02:00
committed by GitHub
parent f8a51dc72f
commit e2a8e7c8ce
7 changed files with 53 additions and 5 deletions

View File

@@ -15,34 +15,40 @@ group.java11.compilers=java1102
group.java11.groupName=OpenJDK 11
group.java11.objdumper=/opt/compiler-explorer/jdk-11.0.2/bin/javap
compiler.java1102.exe=/opt/compiler-explorer/jdk-11.0.2/bin/javac
compiler.java1102.runtime=/opt/compiler-explorer/jdk-11.0.2/bin/java
compiler.java1102.semver=11.0.2
group.java12.compilers=java1201
group.java12.groupName=OpenJDK 12
group.java12.objdumper=/opt/compiler-explorer/jdk-12.0.1/bin/javap
compiler.java1201.exe=/opt/compiler-explorer/jdk-12.0.1/bin/javac
compiler.java1201.runtime=/opt/compiler-explorer/jdk-12.0.1/bin/java
compiler.java1201.semver=12.0.1
group.java13.compilers=java1302
group.java13.groupName=OpenJDK 13
group.java13.objdumper=/opt/compiler-explorer/jdk-13.0.2/bin/javap
compiler.java1302.exe=/opt/compiler-explorer/jdk-13.0.2/bin/javac
compiler.java1302.runtime=/opt/compiler-explorer/jdk-13.0.2/bin/java
compiler.java1302.semver=13.0.2
group.java14.compilers=java1402
group.java14.groupName=OpenJDK 14
group.java14.objdumper=/opt/compiler-explorer/jdk-14.0.2/bin/javap
compiler.java1402.exe=/opt/compiler-explorer/jdk-14.0.2/bin/javac
compiler.java1402.runtime=/opt/compiler-explorer/jdk-14.0.2/bin/java
compiler.java1402.semver=14.0.2
group.java15.compilers=java1502
group.java15.groupName=OpenJDK 15
group.java15.objdumper=/opt/compiler-explorer/jdk-15.0.2/bin/javap
compiler.java1502.exe=/opt/compiler-explorer/jdk-15.0.2/bin/javac
compiler.java1502.runtime=/opt/compiler-explorer/jdk-15.0.2/bin/java
compiler.java1502.semver=15.0.2
group.java16.compilers=java1601
group.java16.groupName=OpenJDK 16
group.java16.objdumper=/opt/compiler-explorer/jdk-16.0.1/bin/javap
compiler.java1601.exe=/opt/compiler-explorer/jdk-16.0.1/bin/javac
compiler.java1601.runtime=/opt/compiler-explorer/jdk-16.0.1/bin/java
compiler.java1601.semver=16.0.1

View File

@@ -7,6 +7,7 @@ instructionSet=java
group.java.compilers=javacdefault
compiler.javacdefault.exe=/usr/bin/javac
compiler.javacdefault.runtime=/usr/bin/java
compiler.javacdefault.name=javac default
defaultCompiler=javacdefault
@@ -15,4 +16,5 @@ postProcess=
options=
supportsBinary=false
needsMulti=false
supportsExecute=false
supportsExecute=true
interpreted=true

View File

@@ -9,7 +9,8 @@ postProcess=
options=
supportsBinary=false
needsMulti=false
supportsExecute=false
supportsExecute=true
interpreted=true
group.kotlin.compilers=kotlinc1400:kotlinc1410:kotlinc1420:kotlinc1421:kotlinc1430:kotlinc1431:kotlinc1432:kotlinc1500:kotlinc1510:kotlinc1520
group.kotlin.groupName=Kotlin
@@ -18,30 +19,40 @@ group.kotlin.isSemVer=true
compiler.kotlinc1400.exe=/opt/compiler-explorer/kotlin-jvm-1.4.0/bin/kotlinc-jvm
compiler.kotlinc1400.semver=1.4.0
compiler.kotlinc1400.java_home=/opt/compiler-explorer/jdk-15.0.2
compiler.kotlinc1400.runtime=/opt/compiler-explorer/jdk-15.0.2/bin/java
compiler.kotlinc1410.exe=/opt/compiler-explorer/kotlin-jvm-1.4.10/bin/kotlinc-jvm
compiler.kotlinc1410.semver=1.4.10
compiler.kotlinc1410.java_home=/opt/compiler-explorer/jdk-15.0.2
compiler.kotlinc1410.runtime=/opt/compiler-explorer/jdk-15.0.2/bin/java
compiler.kotlinc1420.exe=/opt/compiler-explorer/kotlin-jvm-1.4.20/bin/kotlinc-jvm
compiler.kotlinc1420.semver=1.4.20
compiler.kotlinc1420.java_home=/opt/compiler-explorer/jdk-15.0.2
compiler.kotlinc1420.runtime=/opt/compiler-explorer/jdk-15.0.2/bin/java
compiler.kotlinc1421.exe=/opt/compiler-explorer/kotlin-jvm-1.4.21/bin/kotlinc-jvm
compiler.kotlinc1421.semver=1.4.21
compiler.kotlinc1421.java_home=/opt/compiler-explorer/jdk-15.0.2
compiler.kotlinc1421.runtime=/opt/compiler-explorer/jdk-15.0.2/bin/java
compiler.kotlinc1430.exe=/opt/compiler-explorer/kotlin-jvm-1.4.30/bin/kotlinc-jvm
compiler.kotlinc1430.semver=1.4.30
compiler.kotlinc1430.java_home=/opt/compiler-explorer/jdk-15.0.2
compiler.kotlinc1430.runtime=/opt/compiler-explorer/jdk-15.0.2/bin/java
compiler.kotlinc1431.exe=/opt/compiler-explorer/kotlin-jvm-1.4.31/bin/kotlinc-jvm
compiler.kotlinc1431.semver=1.4.31
compiler.kotlinc1431.java_home=/opt/compiler-explorer/jdk-15.0.2
compiler.kotlinc1431.runtime=/opt/compiler-explorer/jdk-15.0.2/bin/java
compiler.kotlinc1432.exe=/opt/compiler-explorer/kotlin-jvm-1.4.32/bin/kotlinc-jvm
compiler.kotlinc1432.semver=1.4.32
compiler.kotlinc1432.java_home=/opt/compiler-explorer/jdk-15.0.2
compiler.kotlinc1432.runtime=/opt/compiler-explorer/jdk-15.0.2/bin/java
compiler.kotlinc1500.exe=/opt/compiler-explorer/kotlin-jvm-1.5.0/bin/kotlinc-jvm
compiler.kotlinc1500.semver=1.5.0
compiler.kotlinc1500.java_home=/opt/compiler-explorer/jdk-16.0.1
compiler.kotlinc1500.runtime=/opt/compiler-explorer/jdk-16.0.1/bin/java
compiler.kotlinc1510.exe=/opt/compiler-explorer/kotlin-jvm-1.5.10/bin/kotlinc-jvm
compiler.kotlinc1510.semver=1.5.10
compiler.kotlinc1510.java_home=/opt/compiler-explorer/jdk-16.0.1
compiler.kotlinc1510.runtime=/opt/compiler-explorer/jdk-16.0.1/bin/java
compiler.kotlinc1520.exe=/opt/compiler-explorer/kotlin-jvm-1.5.20/bin/kotlinc-jvm
compiler.kotlinc1520.semver=1.5.20
compiler.kotlinc1520.java_home=/opt/compiler-explorer/jdk-16.0.1
compiler.kotlinc1520.runtime=/opt/compiler-explorer/jdk-16.0.1/bin/java

View File

@@ -8,6 +8,7 @@ instructionSet=java
group.kotlin.compilers=kotlincdefault
compiler.kotlincdefault.exe=/usr/bin/kotlinc-jvm
compiler.kotlincdefault.name=kotlinc default
compiler.kotlincdefault.runtime=/usr/bin/java
defaultCompiler=kotlincdefault
demangler=
@@ -15,4 +16,5 @@ postProcess=
options=
supportsBinary=false
needsMulti=false
supportsExecute=false
supportsExecute=true
interpreted=true

View File

@@ -28,7 +28,7 @@ cgroup_net_cls_parent: "ce-sandbox"
cgroup_cpu_parent: "ce-sandbox"
cgroup_mem_max: 209715200 # 200 MiB
cgroup_pids_max: 4
cgroup_pids_max: 14
cgroup_cpu_ms_per_sec: 500
mount {

View File

@@ -42,8 +42,8 @@ export class JavaCompiler extends BaseCompiler {
if (!compilerInfo.disabledFilters) {
compilerInfo.disabledFilters = ['labels', 'directives', 'commentOnly', 'trim'];
}
super(compilerInfo, env);
this.javaRuntime = this.compilerProps(`compiler.${this.compiler.id}.runtime`);
}
getSharedLibraryPathsAsArguments() {
@@ -103,6 +103,29 @@ export class JavaCompiler extends BaseCompiler {
];
}
async handleInterpreting(key, executeParameters) {
executeParameters.args = [
'-Xss136K', // Reduce thread stack size
'-XX:CICompilerCount=2', // Reduce JIT compilation threads. 2 is minimum
'-XX:-UseDynamicNumberOfCompilerThreads',
'-XX:-UseDynamicNumberOfGCThreads',
'-XX:+UseSerialGC', // Disable parallell/concurrent garbage collector
this.getMainClassName(),
...executeParameters.args,
];
const buildResult = await this.getOrBuildExecutable(key);
const dirPath = path.dirname(buildResult.executableFilename);
const result = await this.runExecutable(this.javaRuntime, executeParameters, dirPath);
result.didExecute = true;
result.buildResult = buildResult;
return result;
}
getMainClassName() {
// TODO(supergrecko): The main class name is currently hardcoded
return 'Main';
}
getArgumentParser() {
return JavaParser;
}

View File

@@ -40,6 +40,10 @@ export class KotlinCompiler extends JavaCompiler {
return execOptions;
}
getMainClassName() {
return 'ExampleKt';
}
filterUserOptions(userOptions) {
// filter options without extra arguments
userOptions = userOptions.filter(option =>