From 55fa667e7d303e7f2dcd9a5088fa24b3231e3b33 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 11 Nov 2023 16:38:23 +0000 Subject: Extract WasmBackend.link() --- .../compiler/backends/wasm/WasmBackend.java | 31 +++++++++++++--------- 1 file changed, 19 insertions(+), 12 deletions(-) (limited to 'src/main/java') 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(); - 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 inputs, Path target) throws ProcessError, InterruptedException { + var ldArgs = new ArrayList(); + 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) { -- cgit v1.2.3