diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-12-27 23:59:04 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-12-27 23:59:04 +0000 |
| commit | c4a0bd08af209a647f272f9d061bc6b266c06f93 (patch) | |
| tree | 5aa210fe43ce6e0d1eb3f2223f8ed820cc1eeda8 /src/main/java | |
| parent | 59174be900affba30a1dd3c4368e48e637d4d945 (diff) | |
Parameterise LlvmBackend with target
Diffstat (limited to 'src/main/java')
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; + } +} |
