From 07f659df1466934fb129df8145cc1a3565dd55e2 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Tue, 20 Jun 2023 18:33:14 +0100 Subject: Separate target directory by backend --- src/main/java/org/shedlang/compiler/ShedCompiler.java | 2 +- src/main/java/org/shedlang/compiler/backends/Backend.java | 6 +++++- .../compiler/backends/GenerateInstructionsBackend.java | 9 ++++++++- .../org/shedlang/compiler/backends/llvm/LlvmBackend.java | 14 ++++++++++---- .../org/shedlang/compiler/backends/wasm/WasmBackend.java | 9 ++++++++- 5 files changed, 32 insertions(+), 8 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/org/shedlang/compiler/ShedCompiler.java b/src/main/java/org/shedlang/compiler/ShedCompiler.java index ebf97bdc..3aedc946 100644 --- a/src/main/java/org/shedlang/compiler/ShedCompiler.java +++ b/src/main/java/org/shedlang/compiler/ShedCompiler.java @@ -70,7 +70,7 @@ public class ShedCompiler { namespaces.put(namespaceName, instructions); } - backend.compile(config, namespaces, typeCheckerContext.toTypeInfo()); + backend.compile(config, namespaces, typeCheckerContext.toTypeInfo(), config.targetDir().resolve(backend.name())); } private List collectSourceFilePaths(Path sourceRoot) throws IOException { diff --git a/src/main/java/org/shedlang/compiler/backends/Backend.java b/src/main/java/org/shedlang/compiler/backends/Backend.java index aaf73bf9..54abde81 100644 --- a/src/main/java/org/shedlang/compiler/backends/Backend.java +++ b/src/main/java/org/shedlang/compiler/backends/Backend.java @@ -6,6 +6,7 @@ import org.shedlang.compiler.typechecker.TypeInfo; import org.shedlang.compiler.types.NamespaceName; import java.io.IOException; +import java.nio.file.Path; import java.util.List; import java.util.Map; @@ -13,6 +14,9 @@ public interface Backend { void compile( ProjectConfig config, Map> namespaces, - TypeInfo typeInfo + TypeInfo typeInfo, + Path targetDir ) throws IOException; + + String name(); } diff --git a/src/main/java/org/shedlang/compiler/backends/GenerateInstructionsBackend.java b/src/main/java/org/shedlang/compiler/backends/GenerateInstructionsBackend.java index ed980e77..88cfa631 100644 --- a/src/main/java/org/shedlang/compiler/backends/GenerateInstructionsBackend.java +++ b/src/main/java/org/shedlang/compiler/backends/GenerateInstructionsBackend.java @@ -6,6 +6,7 @@ import org.shedlang.compiler.stackir.instructions.Instruction; import org.shedlang.compiler.typechecker.TypeInfo; import org.shedlang.compiler.types.NamespaceName; +import java.nio.file.Path; import java.util.List; import java.util.Map; @@ -13,7 +14,8 @@ public class GenerateInstructionsBackend implements Backend { public void compile( ProjectConfig config, Map> namespaces, - TypeInfo typeInfo + TypeInfo typeInfo, + Path targetDir ) { System.out.println("main: " + config.main()); @@ -31,4 +33,9 @@ public class GenerateInstructionsBackend implements Backend { System.out.println(); } } + + @Override + public String name() { + return "generate-instructions"; + } } 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 f26de6dd..49b55160 100644 --- a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmBackend.java +++ b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmBackend.java @@ -24,7 +24,8 @@ public class LlvmBackend implements Backend { public void compile( ProjectConfig config, Map> namespaces, - TypeInfo typeInfo + TypeInfo typeInfo, + Path targetDir ) throws IOException { var objectFilePaths = new ArrayList(); for (var namespace : namespaces.entrySet()) { @@ -35,20 +36,20 @@ public class LlvmBackend implements Backend { typeInfo ); - var objectPath = compileLlvmModule(llvmModule, config.targetDir().resolve("namespaces"), String.join("_", namespaceName.parts())); + var objectPath = compileLlvmModule(llvmModule, targetDir.resolve("namespaces"), String.join("_", namespaceName.parts())); objectFilePaths.add(objectPath); } for (var bin : config.bins()) { var mainModule = LlvmCompiler.compileMain(config.main(), typeInfo); - var objectPath = compileLlvmModule(mainModule, config.targetDir().resolve("bins"), bin.name()); + var objectPath = compileLlvmModule(mainModule, targetDir.resolve("bins"), bin.name()); objectFilePaths.add(objectPath); var gccArgs = new ArrayList(); gccArgs.add("gcc"); gccArgs.add("-o"); - gccArgs.add(config.targetDir().resolve(bin.name()).toString()); + gccArgs.add(targetDir.resolve(bin.name()).toString()); for (var objectFilePath : objectFilePaths) { gccArgs.add(objectFilePath.toString()); @@ -60,6 +61,11 @@ public class LlvmBackend implements Backend { } } + @Override + public String name() { + return "llvm"; + } + private static Path compileLlvmModule( LlvmModule llvmModule, Path workingDirectory, 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 85541f6e..89ca9189 100644 --- a/src/main/java/org/shedlang/compiler/backends/wasm/WasmBackend.java +++ b/src/main/java/org/shedlang/compiler/backends/wasm/WasmBackend.java @@ -7,6 +7,7 @@ import org.shedlang.compiler.typechecker.TypeInfo; import org.shedlang.compiler.types.NamespaceName; import java.io.IOException; +import java.nio.file.Path; import java.util.List; import java.util.Map; @@ -15,8 +16,14 @@ public class WasmBackend implements Backend { public void compile( ProjectConfig config, Map> namespaces, - TypeInfo typeInfo + TypeInfo typeInfo, + Path targetDir ) throws IOException { } + + @Override + public String name() { + return "wasm"; + } } -- cgit v1.2.3