From ba1d43354da18aa473200fefde8316e8017841a7 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 24 Mar 2024 15:04:11 +0000 Subject: Handle options in GC config for custom runtimes --- .../java/org/shedlang/compiler/config/GcBumpConfig.java | 7 +++++++ src/main/java/org/shedlang/compiler/config/GcConfig.java | 3 +++ .../org/shedlang/compiler/config/GcMarkAndSweepConfig.java | 13 +++++++++++++ .../java/org/shedlang/compiler/runtime/ShedRuntime.java | 11 ++++++++--- 4 files changed, 31 insertions(+), 3 deletions(-) (limited to 'src/main/java') 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 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 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 runtimeBuildOptions() { + var options = new ArrayList(); + + 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); -- cgit v1.2.3