aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-11-11 16:42:47 +0000
committerMichael Williamson <mike@zwobble.org>2023-11-11 16:42:47 +0000
commitaeb5658434d8090ec8e5cfc054ba6b13758c4da2 (patch)
treebb7547d98a174af322c8e93d1f39ec2413458464 /src/main/java
parent55fa667e7d303e7f2dcd9a5088fa24b3231e3b33 (diff)
Extract LlvmBackend.link()
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/LlvmBackend.java29
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) {