diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-11-11 16:38:23 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-11-11 16:38:23 +0000 |
| commit | 55fa667e7d303e7f2dcd9a5088fa24b3231e3b33 (patch) | |
| tree | a15b8a80e8a21e40c50d0d1a5eeaab48a6e421b0 /src | |
| parent | 06ce6f5fc4883c18495f3662553a0bfe3eb7c1ee (diff) | |
Extract WasmBackend.link()
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/backends/wasm/WasmBackend.java | 31 | ||||
| -rw-r--r-- | src/test/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGenTests.java | 21 |
2 files changed, 24 insertions, 28 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) { diff --git a/src/test/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGenTests.java b/src/test/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGenTests.java index c356dc09..20221870 100644 --- a/src/test/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGenTests.java +++ b/src/test/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGenTests.java @@ -1,6 +1,5 @@ package org.shedlang.compiler.backends.wasm; -import org.shedlang.compiler.testing.ExecutionResult; import org.shedlang.compiler.backends.wasm.structure.WasmBinaryFormat; import org.shedlang.compiler.backends.wasm.structure.ast.instructions.WasmCall; import org.shedlang.compiler.backends.wasm.structure.ast.instructions.WasmExpression; @@ -10,20 +9,17 @@ import org.shedlang.compiler.backends.wasm.structure.ast.modules.WasmImport; import org.shedlang.compiler.backends.wasm.structure.ast.modules.WasmImportDescriptor; import org.shedlang.compiler.backends.wasm.structure.ast.types.WasmFuncType; import org.shedlang.compiler.backends.wasm.structure.ast.types.WasmValueType; -import org.shedlang.compiler.filesystem.ShedCompilerFiles; import org.shedlang.compiler.patio.PatioExampleTests; import org.shedlang.compiler.patio.ast.PatioCompilationUnit; +import org.shedlang.compiler.testing.ExecutionResult; import org.shedlang.compiler.testing.TestProcessRunner; import java.io.FileOutputStream; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -import java.util.ArrayList; import java.util.List; -import static org.shedlang.compiler.util.processes.ProcessRunner.runInheritIo; - public class WasmPatioCodeGenTests extends PatioExampleTests { @Override protected ExecutionResult run(PatioCompilationUnit patio) throws IOException, InterruptedException { @@ -57,18 +53,11 @@ public class WasmPatioCodeGenTests extends PatioExampleTests { WasmBinaryFormat.serializeModule(wasmModule, outputStream); } - var ldArgs = new ArrayList<String>(); - ldArgs.add("wasm-ld"); - - ldArgs.add("-o"); var executablePath = workingDirectory.resolve("main.wasm"); - ldArgs.add(executablePath.toString()); - - ldArgs.add(objectPath.toString()); - - ldArgs.add(ShedCompilerFiles.getRoot().resolve("runtime/target/wasm/libshed.a").toString()); - - runInheritIo(ldArgs); + WasmBackend.link( + List.of(objectPath), + executablePath + ); return TestProcessRunner.runCaptureOutput(List.of("wasmtime", executablePath.toString())); } |
