From 8875e6fb9b190f3db252aaaed54f4763c24906ab Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 20 Mar 2024 19:55:12 +0000 Subject: Set profile on command line --- src/main/java/org/shedlang/compiler/ShedCompiler.java | 7 ++++++- .../java/org/shedlang/compiler/backends/Backend.java | 1 + .../org/shedlang/compiler/backends/PatioBackends.java | 14 +++++++++++--- .../shedlang/compiler/backends/PatioTextBackend.java | 5 ++++- .../org/shedlang/compiler/backends/ShidTextBackend.java | 2 ++ .../shedlang/compiler/backends/llvm/LlvmBackend.java | 17 ++++++++++++----- .../shedlang/compiler/backends/wasm/WasmBackend.java | 15 +++++++++++---- src/main/java/org/shedlang/compiler/cli/ShedCli.java | 6 +++++- 8 files changed, 52 insertions(+), 15 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/org/shedlang/compiler/ShedCompiler.java b/src/main/java/org/shedlang/compiler/ShedCompiler.java index 177f6fd5..1f04c0fa 100644 --- a/src/main/java/org/shedlang/compiler/ShedCompiler.java +++ b/src/main/java/org/shedlang/compiler/ShedCompiler.java @@ -31,7 +31,11 @@ import static org.shedlang.compiler.parser.Tokeniser.tokenise; import static org.shedlang.compiler.typechecker.NamespaceDependencyLineariser.orderNamespaces; public class ShedCompiler { - public void compile(Path projectRoot, Backend backend) throws IOException, InterruptedException { + public void compile( + Path projectRoot, + Backend backend, + String profileName + ) throws IOException, InterruptedException { var config = ProjectConfig.read(projectRoot); var sourceRoot = projectRoot.resolve("src"); @@ -73,6 +77,7 @@ public class ShedCompiler { backend.compile( config, + profileName, namespaces, typeInfos, new TargetDir(config.targetDir().resolve(backend.targetName())) diff --git a/src/main/java/org/shedlang/compiler/backends/Backend.java b/src/main/java/org/shedlang/compiler/backends/Backend.java index 9b610dce..17b8400f 100644 --- a/src/main/java/org/shedlang/compiler/backends/Backend.java +++ b/src/main/java/org/shedlang/compiler/backends/Backend.java @@ -13,6 +13,7 @@ public interface Backend { void compile( ProjectConfig config, + String profileName, List namespaces, TypeInfos typeInfos, TargetDir targetDir diff --git a/src/main/java/org/shedlang/compiler/backends/PatioBackends.java b/src/main/java/org/shedlang/compiler/backends/PatioBackends.java index 55af5716..8bdc15e0 100644 --- a/src/main/java/org/shedlang/compiler/backends/PatioBackends.java +++ b/src/main/java/org/shedlang/compiler/backends/PatioBackends.java @@ -23,12 +23,14 @@ public class PatioBackends { void bin( String binName, PatioCompilationUnit patioCompilationUnit, - String mainFunctionName + String mainFunctionName, + String profileName ) throws IOException, InterruptedException; } public static void compile( ProjectConfig config, + String profileName, List namespaces, TypeInfos typeInfos, PatioToTarget patioToTarget @@ -47,11 +49,12 @@ public class PatioBackends { } for (var bin : config.bins()) { - generateMain(bin, shidToPatioContext, patioToTarget); + generateMain(profileName, bin, shidToPatioContext, patioToTarget); } } private static void generateMain( + String profileName, BinConfig binConfig, ShidToPatioContext shidToPatioContext, PatioToTarget patioToTarget @@ -76,6 +79,11 @@ public class PatioBackends { var patioCompilationUnit = patioCompilationUnitResult.value(); shidToPatioContext = patioCompilationUnitResult.context(); - patioToTarget.bin(binConfig.name(), patioCompilationUnit, mainFunctionName); + patioToTarget.bin( + binConfig.name(), + patioCompilationUnit, + mainFunctionName, + profileName + ); } } diff --git a/src/main/java/org/shedlang/compiler/backends/PatioTextBackend.java b/src/main/java/org/shedlang/compiler/backends/PatioTextBackend.java index 9a34d6e5..929feac3 100644 --- a/src/main/java/org/shedlang/compiler/backends/PatioTextBackend.java +++ b/src/main/java/org/shedlang/compiler/backends/PatioTextBackend.java @@ -26,12 +26,14 @@ public class PatioTextBackend implements Backend { public void compile( ProjectConfig config, + String profileName, List namespaces, TypeInfos typeInfos, TargetDir targetDir ) throws IOException, InterruptedException { PatioBackends.compile( config, + profileName, namespaces, typeInfos, new PatioToText(targetDir) @@ -63,7 +65,8 @@ public class PatioTextBackend implements Backend { public void bin( String binName, PatioCompilationUnit patioCompilationUnit, - String mainFunctionName + String mainFunctionName, + String profileName ) throws IOException, InterruptedException { serializeToDisk( targetDir.bin(binName), diff --git a/src/main/java/org/shedlang/compiler/backends/ShidTextBackend.java b/src/main/java/org/shedlang/compiler/backends/ShidTextBackend.java index bdc5e61d..36af4357 100644 --- a/src/main/java/org/shedlang/compiler/backends/ShidTextBackend.java +++ b/src/main/java/org/shedlang/compiler/backends/ShidTextBackend.java @@ -16,8 +16,10 @@ public class ShidTextBackend implements Backend { private ShidTextBackend() { } + @Override public void compile( ProjectConfig config, + String profileName, List namespaces, TypeInfos typeInfos, TargetDir targetDir diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmBackend.java b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmBackend.java index e000ccaf..70430da7 100644 --- a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmBackend.java +++ b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmBackend.java @@ -54,12 +54,14 @@ public class LlvmBackend implements Backend { @Override public void compile( ProjectConfig config, + String profileName, List namespaces, TypeInfos typeInfos, TargetDir targetDir ) throws IOException, InterruptedException { PatioBackends.compile( config, + profileName, namespaces, typeInfos, new PatioToBinary( @@ -118,7 +120,8 @@ public class LlvmBackend implements Backend { public void bin( String binName, PatioCompilationUnit patioCompilationUnit, - String mainFunctionName + String mainFunctionName, + String profileName ) throws IOException, InterruptedException { var linkInputs = new ArrayList<>(objectFilePaths); @@ -130,16 +133,20 @@ public class LlvmBackend implements Backend { var mainObjectPath = llvmCompiler.compileLlvmModule(mainModule, targetDir.bin(binName)); linkInputs.add(mainObjectPath); - link(linkInputs, targetDir.topLevel(binName)); + link(linkInputs, targetDir.topLevel(binName), profileName); } } - public void link(List inputs, Path target) throws ProcessError, InterruptedException { + public void link( + List inputs, + Path outputPath, + String profileName + ) throws ProcessError, InterruptedException { var clangArgs = new ArrayList(); clangArgs.add("clang"); clangArgs.add("-o"); - clangArgs.add(target.toString()); + clangArgs.add(outputPath.toString()); for (var input : inputs) { clangArgs.add(input.toString()); @@ -147,7 +154,7 @@ public class LlvmBackend implements Backend { var runtimeDir = ShedCompilerFiles.targetDir( this.target.targetName(), - "mark-and-sweep" + profileName ); clangArgs.add(runtimeDir.resolve("libpatio.a").toString()); clangArgs.add(runtimeDir.resolve("libshed.a").toString()); diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/WasmBackend.java b/src/main/java/org/shedlang/compiler/backends/wasm/WasmBackend.java index a9fb5c53..6069563f 100644 --- a/src/main/java/org/shedlang/compiler/backends/wasm/WasmBackend.java +++ b/src/main/java/org/shedlang/compiler/backends/wasm/WasmBackend.java @@ -52,12 +52,14 @@ public class WasmBackend implements Backend { @Override public void compile( ProjectConfig config, + String profileName, List namespaces, TypeInfos typeInfos, TargetDir targetDir ) throws IOException, InterruptedException { PatioBackends.compile( config, + profileName, namespaces, typeInfos, new PatioToWasmBinary(targetDir, P.vector()) @@ -98,7 +100,8 @@ public class WasmBackend implements Backend { public void bin( String binName, PatioCompilationUnit patioCompilationUnit, - String mainFunctionName + String mainFunctionName, + String profileName ) throws IOException, InterruptedException { var linkInputs = new ArrayList<>(objectFilePaths); @@ -107,12 +110,16 @@ public class WasmBackend implements Backend { linkInputs.add(mainObjectPath); var outputBinPath = targetDir.topLevel(binName + ".wasm"); - link(linkInputs, outputBinPath); + link(linkInputs, outputBinPath, profileName); validate(outputBinPath); } } - public void link(List inputs, Path outputPath) throws ProcessError, InterruptedException { + public void link( + List inputs, + Path outputPath, + String profileName + ) throws ProcessError, InterruptedException { var ldArgs = new ArrayList(); ldArgs.add("wasm-ld-17"); @@ -127,7 +134,7 @@ public class WasmBackend implements Backend { var runtimeDir = ShedCompilerFiles.targetDir( this.target.targetName(), - "mark-and-sweep" + profileName ); ldArgs.add(runtimeDir.resolve("libpatio.a").toString()); ldArgs.add(runtimeDir.resolve("libshed.a").toString()); diff --git a/src/main/java/org/shedlang/compiler/cli/ShedCli.java b/src/main/java/org/shedlang/compiler/cli/ShedCli.java index ef643c75..5d7baf63 100644 --- a/src/main/java/org/shedlang/compiler/cli/ShedCli.java +++ b/src/main/java/org/shedlang/compiler/cli/ShedCli.java @@ -29,7 +29,9 @@ public class ShedCli { switch (args.get("command")) { case COMPILE -> { - compiler.compile(sourcePath, Backends.backendForTarget(args.getString("target"))); + var backend = Backends.backendForTarget(args.getString("target")); + var profile = args.getString("profile"); + compiler.compile(sourcePath, backend, profile); } } } @@ -44,6 +46,8 @@ public class ShedCli { compileSubParser.setDefault("command", Command.COMPILE); compileSubParser.addArgument("source").required(true); compileSubParser.addArgument("--target").choices(Backends.targetNames()).required(true); + // TODO: support profiles properly (define profile, allow GC as an option) + compileSubParser.addArgument("--profile").setDefault("mark-and-sweep").required(false); try { return parser.parseArgs(args); -- cgit v1.2.3