aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-03-20 19:55:12 +0000
committerMichael Williamson <mike@zwobble.org>2024-03-20 19:55:12 +0000
commit8875e6fb9b190f3db252aaaed54f4763c24906ab (patch)
tree2c5d26788aa34057e3660d1b8b1047f9ad66d00f /src/main/java
parent278deb5d24dc3a9d5ec2175c018c5b2eb91807da (diff)
Set profile on command line
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/ShedCompiler.java7
-rw-r--r--src/main/java/org/shedlang/compiler/backends/Backend.java1
-rw-r--r--src/main/java/org/shedlang/compiler/backends/PatioBackends.java14
-rw-r--r--src/main/java/org/shedlang/compiler/backends/PatioTextBackend.java5
-rw-r--r--src/main/java/org/shedlang/compiler/backends/ShidTextBackend.java2
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/LlvmBackend.java17
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/WasmBackend.java15
-rw-r--r--src/main/java/org/shedlang/compiler/cli/ShedCli.java6
8 files changed, 52 insertions, 15 deletions
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<ShidNamespace> 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<ShidNamespace> 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<ShidNamespace> 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<ShidNamespace> 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<ShidNamespace> 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<Path> inputs, Path target) throws ProcessError, InterruptedException {
+ public void link(
+ List<Path> inputs,
+ Path outputPath,
+ String profileName
+ ) throws ProcessError, InterruptedException {
var clangArgs = new ArrayList<String>();
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<ShidNamespace> 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<Path> inputs, Path outputPath) throws ProcessError, InterruptedException {
+ public void link(
+ List<Path> inputs,
+ Path outputPath,
+ String profileName
+ ) throws ProcessError, InterruptedException {
var ldArgs = new ArrayList<String>();
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.<Command>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);