aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-12-27 23:59:04 +0000
committerMichael Williamson <mike@zwobble.org>2023-12-27 23:59:04 +0000
commitc4a0bd08af209a647f272f9d061bc6b266c06f93 (patch)
tree5aa210fe43ce6e0d1eb3f2223f8ed820cc1eeda8 /src/main/java
parent59174be900affba30a1dd3c4368e48e637d4d945 (diff)
Parameterise LlvmBackend with target
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/Backends.java3
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/LlvmBackend.java24
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/LlvmTarget.java16
3 files changed, 37 insertions, 6 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/Backends.java b/src/main/java/org/shedlang/compiler/backends/Backends.java
index be0a512d..f1d0abc4 100644
--- a/src/main/java/org/shedlang/compiler/backends/Backends.java
+++ b/src/main/java/org/shedlang/compiler/backends/Backends.java
@@ -15,7 +15,8 @@ public class Backends {
private static final OrderedPMap<String, Backend> BACKENDS =
Stream.of(
- LlvmBackend.INSTANCE,
+ LlvmBackend.AMD64,
+ LlvmBackend.I686,
PatioTextBackend.INSTANCE,
ShidTextBackend.INSTANCE,
WasmBackend.WASM32,
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 f3de3755..89b48b5c 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmBackend.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmBackend.java
@@ -33,14 +33,22 @@ import static org.shedlang.compiler.backends.llvm.LlvmCompiler.compileLlvmModule
import static org.shedlang.compiler.util.processes.ProcessRunner.runInheritIo;
public class LlvmBackend implements Backend {
- public static final LlvmBackend INSTANCE = new LlvmBackend();
+ public static final LlvmBackend AMD64 = new LlvmBackend(LlvmTarget.AMD64);
+ public static final LlvmBackend I686 = new LlvmBackend(LlvmTarget.I686);
- private LlvmBackend() {
+ public static LlvmBackend forTarget(LlvmTarget target) {
+ return new LlvmBackend(target);
+ }
+
+ private final LlvmTarget target;
+
+ private LlvmBackend(LlvmTarget target) {
+ this.target = target;
}
@Override
public String targetName() {
- return "amd64";
+ return this.target.targetName();
}
@Override
@@ -85,7 +93,7 @@ public class LlvmBackend implements Backend {
}
}
- public static void link(List<Path> inputs, Path target) throws ProcessError, InterruptedException {
+ public void link(List<Path> inputs, Path target) throws ProcessError, InterruptedException {
var clangArgs = new ArrayList<String>();
clangArgs.add("clang");
@@ -96,7 +104,13 @@ public class LlvmBackend implements Backend {
clangArgs.add(input.toString());
}
- clangArgs.add(ShedCompilerFiles.getRoot().resolve("runtime/target/amd64/libshed.a").toString());
+ clangArgs.add(
+ ShedCompilerFiles.getRoot()
+ .resolve("runtime/target")
+ .resolve(this.target.targetName())
+ .resolve("libshed.a")
+ .toString()
+ );
runInheritIo(clangArgs);
}
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmTarget.java b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmTarget.java
new file mode 100644
index 00000000..ee0ddb18
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmTarget.java
@@ -0,0 +1,16 @@
+package org.shedlang.compiler.backends.llvm;
+
+public enum LlvmTarget {
+ AMD64("amd64"),
+ I686("i686");
+
+ private final String targetName;
+
+ LlvmTarget(String targetName) {
+ this.targetName = targetName;
+ }
+
+ public String targetName() {
+ return targetName;
+ }
+}