aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-11-11 16:38:23 +0000
committerMichael Williamson <mike@zwobble.org>2023-11-11 16:38:23 +0000
commit55fa667e7d303e7f2dcd9a5088fa24b3231e3b33 (patch)
treea15b8a80e8a21e40c50d0d1a5eeaab48a6e421b0 /src/main/java
parent06ce6f5fc4883c18495f3662553a0bfe3eb7c1ee (diff)
Extract WasmBackend.link()
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/WasmBackend.java31
1 files changed, 19 insertions, 12 deletions
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 15b53278..3a2d134d 100644
--- a/src/main/java/org/shedlang/compiler/backends/wasm/WasmBackend.java
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/WasmBackend.java
@@ -13,6 +13,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.FileOutputStream;
import java.io.IOException;
@@ -56,24 +57,30 @@ public class WasmBackend implements Backend {
}
for (var bin : config.bins()) {
- var ldArgs = new ArrayList<String>();
- ldArgs.add("wasm-ld");
-
- ldArgs.add("-o");
- ldArgs.add(targetDir.resolve(bin.name() + ".wasm").toString());
-
- for (var objectFilePath : objectFilePaths) {
- ldArgs.add(objectFilePath.toString());
- }
+ var linkInputs = new ArrayList<>(objectFilePaths);
var mainModule = this.generateMain(bin.mainNamespace(), typeInfos);
var mainObjectPath = writeObjectFile(mainModule, targetDir.resolve("bins"), bin.name());
- ldArgs.add(mainObjectPath.toString());
+ linkInputs.add(mainObjectPath);
+
+ link(linkInputs, targetDir.resolve(bin.name() + ".wasm"));
+ }
+ }
+
+ public static void link(List<Path> inputs, Path target) throws ProcessError, InterruptedException {
+ var ldArgs = new ArrayList<String>();
+ ldArgs.add("wasm-ld");
- ldArgs.add(ShedCompilerFiles.getRoot().resolve("runtime/target/wasm/libshed.a").toString());
+ ldArgs.add("-o");
+ ldArgs.add(target.toString());
- runInheritIo(ldArgs);
+ for (var input : inputs) {
+ ldArgs.add(input.toString());
}
+
+ ldArgs.add(ShedCompilerFiles.getRoot().resolve("runtime/target/wasm/libshed.a").toString());
+
+ runInheritIo(ldArgs);
}
private WasmModule generateMain(NamespaceName main, TypeInfos typeInfos) {