diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-11-11 16:42:47 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-11-11 16:42:47 +0000 |
| commit | aeb5658434d8090ec8e5cfc054ba6b13758c4da2 (patch) | |
| tree | bb7547d98a174af322c8e93d1f39ec2413458464 /src/main/java | |
| parent | 55fa667e7d303e7f2dcd9a5088fa24b3231e3b33 (diff) | |
Extract LlvmBackend.link()
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/backends/llvm/LlvmBackend.java | 29 |
1 files changed, 18 insertions, 11 deletions
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 e55b1bb2..c1575a31 100644 --- a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmBackend.java +++ b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmBackend.java @@ -18,6 +18,7 @@ import org.shedlang.compiler.sources.Sources; import org.shedlang.compiler.stackir.StackIrNamespace; import org.shedlang.compiler.typechecker.TypeInfos; import org.shedlang.compiler.types.NamespaceName; +import org.shedlang.compiler.util.processes.ProcessError; import java.io.IOException; import java.nio.file.Path; @@ -64,24 +65,30 @@ public class LlvmBackend implements Backend { } for (var bin : config.bins()) { + var linkInputs = new ArrayList<>(objectFilePaths); + var mainModule = this.generateMain(bin.mainNamespace(), typeInfos); var mainObjectPath = compileLlvmModule(mainModule, targetDir.resolve("bins"), bin.name()); + linkInputs.add(mainObjectPath); - var gccArgs = new ArrayList<String>(); - gccArgs.add("gcc"); - - gccArgs.add("-o"); - gccArgs.add(targetDir.resolve(bin.name()).toString()); + link(linkInputs, targetDir.resolve(bin.name())); + } + } - for (var objectFilePath : objectFilePaths) { - gccArgs.add(objectFilePath.toString()); - } - gccArgs.add(mainObjectPath.toString()); + public static void link(List<Path> inputs, Path target) throws ProcessError, InterruptedException { + var gccArgs = new ArrayList<String>(); + gccArgs.add("gcc"); - gccArgs.add(ShedCompilerFiles.getRoot().resolve("runtime/target/amd64/libshed.a").toString()); + gccArgs.add("-o"); + gccArgs.add(target.toString()); - runInheritIo(gccArgs); + for (var input : inputs) { + gccArgs.add(input.toString()); } + + gccArgs.add(ShedCompilerFiles.getRoot().resolve("runtime/target/amd64/libshed.a").toString()); + + runInheritIo(gccArgs); } private LlvmModule generateMain(NamespaceName main, TypeInfos typeInfos) { |
