From c4a0bd08af209a647f272f9d061bc6b266c06f93 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 27 Dec 2023 23:59:04 +0000 Subject: Parameterise LlvmBackend with target --- .../org/shedlang/compiler/backends/Backends.java | 3 ++- .../compiler/backends/llvm/LlvmBackend.java | 24 +++++++++++++++++----- .../compiler/backends/llvm/LlvmTarget.java | 16 +++++++++++++++ 3 files changed, 37 insertions(+), 6 deletions(-) create mode 100644 src/main/java/org/shedlang/compiler/backends/llvm/LlvmTarget.java (limited to 'src/main/java') 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 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 inputs, Path target) throws ProcessError, InterruptedException { + public void link(List inputs, Path target) throws ProcessError, InterruptedException { var clangArgs = new ArrayList(); 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; + } +} -- cgit v1.2.3