mirror of
https://github.com/compiler-explorer/compiler-explorer.git
synced 2025-12-27 09:23:52 -05:00
Support execution of programs for JVM compilers (#2745)
* Bare execution for Java programs * Support execution for Kotlin
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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 =>
|
||||
|
||||
Reference in New Issue
Block a user