From e2a87d4a022edfa7a7f552af9117c1ac1669cf32 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 22 Jul 2023 11:32:38 +0100 Subject: Add stubbed llvm-patio backend --- .../org/shedlang/compiler/backends/Backends.java | 3 +- .../compiler/backends/llvm/LlvmBackend.java | 39 +++++++++++++++++++--- .../compiler/backends/llvm/LlvmPatioCodeGen.java | 10 ++++++ 3 files changed, 47 insertions(+), 5 deletions(-) create mode 100644 src/main/java/org/shedlang/compiler/backends/llvm/LlvmPatioCodeGen.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 f0a75510..02a3e60d 100644 --- a/src/main/java/org/shedlang/compiler/backends/Backends.java +++ b/src/main/java/org/shedlang/compiler/backends/Backends.java @@ -9,7 +9,8 @@ public class Backends { } public static final OrderedPMap BACKENDS = OrderedPMap.empty() - .plus("llvm", new LlvmBackend()) + .plus("llvm", LlvmBackend.DIRECT) + .plus("llvm-patio", LlvmBackend.PATIO) .plus("wasm", WasmBackend.DIRECT) .plus("wasm-patio", WasmBackend.PATIO); } 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 0dead3ac..97cbbf17 100644 --- a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmBackend.java +++ b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmBackend.java @@ -5,6 +5,8 @@ import org.shedlang.compiler.backends.llvm.ir.LlvmIrSerializer; import org.shedlang.compiler.backends.llvm.ir.ast.LlvmModule; import org.shedlang.compiler.config.ProjectConfig; import org.shedlang.compiler.filesystem.ShedCompilerFiles; +import org.shedlang.compiler.patio.PatioCodeGen; +import org.shedlang.compiler.patio.PatioCodeGenContext; import org.shedlang.compiler.stackir.StackIrNamespace; import org.shedlang.compiler.typechecker.TypeInfo; @@ -20,6 +22,38 @@ import java.util.List; import static org.shedlang.compiler.backends.ProcessRunner.runInheritIo; public class LlvmBackend implements Backend { + public static final LlvmBackend DIRECT = new LlvmBackend(new CodeGen() { + @Override + public LlvmModule generateNamespace(StackIrNamespace stackIrNamespace, TypeInfo typeInfo) { + return LlvmCodeGen.generateNamespace(stackIrNamespace, typeInfo); + } + }); + + public static final LlvmBackend PATIO = new LlvmBackend(new CodeGen() { + @Override + public LlvmModule generateNamespace(StackIrNamespace stackIrNamespace, TypeInfo typeInfo) { + var patioCompilationUnit = PatioCodeGen.generateNamespace( + stackIrNamespace, + PatioCodeGenContext.forTypeInfo(typeInfo) + ); + + return LlvmPatioCodeGen.generateCompilationUnit(patioCompilationUnit); + } + }); + + interface CodeGen { + LlvmModule generateNamespace( + StackIrNamespace stackIrNamespace, + TypeInfo typeInfo + ); + } + + private final CodeGen codeGen; + + private LlvmBackend(CodeGen codeGen) { + this.codeGen = codeGen; + } + @Override public void compile( ProjectConfig config, @@ -29,10 +63,7 @@ public class LlvmBackend implements Backend { ) throws IOException, InterruptedException { var objectFilePaths = new ArrayList(); for (var namespace : namespaces) { - var llvmModule = LlvmCodeGen.generateNamespace( - namespace, - typeInfo - ); + var llvmModule = this.codeGen.generateNamespace(namespace, typeInfo); var objectPath = compileLlvmModule( llvmModule, diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmPatioCodeGen.java b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmPatioCodeGen.java new file mode 100644 index 00000000..76b6a1b9 --- /dev/null +++ b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmPatioCodeGen.java @@ -0,0 +1,10 @@ +package org.shedlang.compiler.backends.llvm; + +import org.shedlang.compiler.backends.llvm.ir.ast.LlvmModule; +import org.shedlang.compiler.patio.ast.PatioCompilationUnit; + +public class LlvmPatioCodeGen { + public static LlvmModule generateCompilationUnit(PatioCompilationUnit patioCompilationUnit) { + throw new UnsupportedOperationException(); + } +} -- cgit v1.2.3