aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-03-24 15:04:11 +0000
committerMichael Williamson <mike@zwobble.org>2024-03-24 15:04:11 +0000
commitba1d43354da18aa473200fefde8316e8017841a7 (patch)
treeba43d81dc60463059faf91bda3471550de3d288a /src/main/java
parent85f9578fb680ab4ee959469133714acd908a7c10 (diff)
Handle options in GC config for custom runtimes
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/config/GcBumpConfig.java7
-rw-r--r--src/main/java/org/shedlang/compiler/config/GcConfig.java3
-rw-r--r--src/main/java/org/shedlang/compiler/config/GcMarkAndSweepConfig.java13
-rw-r--r--src/main/java/org/shedlang/compiler/runtime/ShedRuntime.java11
4 files changed, 31 insertions, 3 deletions
diff --git a/src/main/java/org/shedlang/compiler/config/GcBumpConfig.java b/src/main/java/org/shedlang/compiler/config/GcBumpConfig.java
index 02f39173..293c9c19 100644
--- a/src/main/java/org/shedlang/compiler/config/GcBumpConfig.java
+++ b/src/main/java/org/shedlang/compiler/config/GcBumpConfig.java
@@ -1,8 +1,15 @@
package org.shedlang.compiler.config;
+import java.util.List;
+
public record GcBumpConfig() implements GcConfig {
@Override
public String name() {
return "bump";
}
+
+ @Override
+ public List<String> runtimeBuildOptions() {
+ return List.of();
+ }
}
diff --git a/src/main/java/org/shedlang/compiler/config/GcConfig.java b/src/main/java/org/shedlang/compiler/config/GcConfig.java
index 12691658..76339f5a 100644
--- a/src/main/java/org/shedlang/compiler/config/GcConfig.java
+++ b/src/main/java/org/shedlang/compiler/config/GcConfig.java
@@ -2,6 +2,8 @@ package org.shedlang.compiler.config;
import org.tomlj.TomlTable;
+import java.util.List;
+
public sealed interface GcConfig permits GcBumpConfig, GcMarkAndSweepConfig {
GcConfig BUMP = new GcBumpConfig();
GcConfig DEFAULT = GcMarkAndSweepConfig.DEFAULT;
@@ -26,4 +28,5 @@ public sealed interface GcConfig permits GcBumpConfig, GcMarkAndSweepConfig {
}
String name();
+ List<String> runtimeBuildOptions();
}
diff --git a/src/main/java/org/shedlang/compiler/config/GcMarkAndSweepConfig.java b/src/main/java/org/shedlang/compiler/config/GcMarkAndSweepConfig.java
index b54add24..c0b6b9dd 100644
--- a/src/main/java/org/shedlang/compiler/config/GcMarkAndSweepConfig.java
+++ b/src/main/java/org/shedlang/compiler/config/GcMarkAndSweepConfig.java
@@ -2,6 +2,8 @@ package org.shedlang.compiler.config;
import org.tomlj.TomlTable;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Optional;
public record GcMarkAndSweepConfig(
@@ -20,4 +22,15 @@ public record GcMarkAndSweepConfig(
public String name() {
return "mark-and-sweep";
}
+
+ @Override
+ public List<String> runtimeBuildOptions() {
+ var options = new ArrayList<String>();
+
+ if (collectInterval.isPresent()) {
+ options.add("gc_collect_interval=" + collectInterval.get());
+ }
+
+ return options;
+ }
}
diff --git a/src/main/java/org/shedlang/compiler/runtime/ShedRuntime.java b/src/main/java/org/shedlang/compiler/runtime/ShedRuntime.java
index 25a81345..7c9dbddd 100644
--- a/src/main/java/org/shedlang/compiler/runtime/ShedRuntime.java
+++ b/src/main/java/org/shedlang/compiler/runtime/ShedRuntime.java
@@ -7,6 +7,7 @@ import org.shedlang.compiler.filesystem.ShedCompilerFiles;
import org.shedlang.compiler.util.processes.ProcessError;
import java.nio.file.Path;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@@ -46,16 +47,20 @@ public class ShedRuntime {
}
// TODO: deal with stale compiled runtimes (in build.py?)
- // TODO: handle GC config
var runtimeDir = targetDir.topLevel("runtime");
- var buildRuntimeCommand = List.of(
+ var buildRuntimeCommand = new ArrayList<>(List.of(
"python3",
ShedCompilerFiles.getRoot().resolve("runtime/build.py").toString(),
"custom",
"--target", targetName,
"--gc", gc.name(),
"--output-dir", runtimeDir.toString()
- );
+ ));
+
+ for (var option : gc.runtimeBuildOptions()) {
+ buildRuntimeCommand.add("-D" + option);
+ }
+
runInheritIo(buildRuntimeCommand);
return new ShedRuntime(runtimeDir);