Skip to content

Commit 39f82b4

Browse files
committed
debug
1 parent c020e4c commit 39f82b4

10 files changed

Lines changed: 598 additions & 5 deletions

File tree

.github/workflows/ibm-ci.yaml

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,28 @@ jobs:
2828
# version: [11, 17, 21]
2929
version: [21]
3030
steps:
31+
- name: Checkout sources
32+
uses: actions/checkout@v5
33+
- name: Set up Java
34+
uses: actions/setup-java@v5
35+
with:
36+
distribution: 'semeru'
37+
java-version: '${{ matrix.version }}'
38+
cache: maven
39+
- name: Test Java and Check Style
40+
run: mvn -B clean install -X
41+
env:
42+
MAVEN_OPTS: "-ea"
3143
- name: Debug
44+
if: always()
3245
run: |
33-
curl -L https://github.com/bytecodealliance/wasm-tools/releases/download/v1.227.1/wasm-tools-1.227.1-wasm32-wasip1.tar.gz -o wasm-tools-curl.tar.gz
34-
wget https://github.com/bytecodealliance/wasm-tools/releases/download/v1.227.1/wasm-tools-1.227.1-wasm32-wasip1.tar.gz
35-
ls -alh
46+
echo "1"
47+
ls -alh ./debug-z
48+
echo "2"
49+
ls -alh ./debug-z/target
50+
51+
# - name: Debug
52+
# run: |
53+
# curl -L https://github.com/bytecodealliance/wasm-tools/releases/download/v1.227.1/wasm-tools-1.227.1-wasm32-wasip1.tar.gz -o wasm-tools-curl.tar.gz
54+
# wget https://github.com/bytecodealliance/wasm-tools/releases/download/v1.227.1/wasm-tools-1.227.1-wasm32-wasip1.tar.gz
55+
# ls -alh

debug-z/pom.xml

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
5+
<parent>
6+
<groupId>com.dylibso.chicory</groupId>
7+
<artifactId>chicory</artifactId>
8+
<version>999-SNAPSHOT</version>
9+
</parent>
10+
<artifactId>wasm-tools</artifactId>
11+
<packaging>jar</packaging>
12+
13+
<name>Chicory - wasm-tools</name>
14+
<description>wasm tools compiled to pure Java with Chicory</description>
15+
16+
<properties>
17+
<wasm-tools.version>1.227.1</wasm-tools.version>
18+
</properties>
19+
20+
<dependencies>
21+
<dependency>
22+
<groupId>com.dylibso.chicory</groupId>
23+
<artifactId>log</artifactId>
24+
<version>1.5.1</version>
25+
</dependency>
26+
<dependency>
27+
<groupId>com.dylibso.chicory</groupId>
28+
<artifactId>runtime</artifactId>
29+
<version>1.5.1</version>
30+
</dependency>
31+
<dependency>
32+
<groupId>com.dylibso.chicory</groupId>
33+
<artifactId>wasi</artifactId>
34+
<version>1.5.1</version>
35+
</dependency>
36+
<dependency>
37+
<groupId>com.dylibso.chicory</groupId>
38+
<artifactId>wasm</artifactId>
39+
<version>1.5.1</version>
40+
</dependency>
41+
<dependency>
42+
<groupId>io.roastedroot</groupId>
43+
<artifactId>zerofs</artifactId>
44+
</dependency>
45+
<dependency>
46+
<groupId>org.junit.jupiter</groupId>
47+
<artifactId>junit-jupiter-api</artifactId>
48+
<scope>test</scope>
49+
</dependency>
50+
</dependencies>
51+
52+
<build>
53+
<plugins>
54+
<plugin>
55+
<groupId>com.dylibso.chicory</groupId>
56+
<artifactId>chicory-compiler-maven-plugin</artifactId>
57+
<version>1.5.1</version>
58+
<executions>
59+
<execution>
60+
<id>wasmtools</id>
61+
<goals>
62+
<goal>compile</goal>
63+
</goals>
64+
<configuration>
65+
<name>com.dylibso.chicory.tools.wasm.WasmToolsModule</name>
66+
<wasmFile>${project.basedir}/target/wasm-tools.wasm</wasmFile>
67+
<interpretedFunctions>
68+
<function>3938</function>
69+
<function>4116</function>
70+
<function>4614</function>
71+
<function>6771</function>
72+
<function>13564</function>
73+
</interpretedFunctions>
74+
</configuration>
75+
</execution>
76+
</executions>
77+
</plugin>
78+
<plugin>
79+
<artifactId>maven-antrun-plugin</artifactId>
80+
<executions>
81+
<execution>
82+
<goals>
83+
<goal>run</goal>
84+
</goals>
85+
<phase>initialize</phase>
86+
<configuration>
87+
<target>
88+
<untar compression="gzip" dest="${project.basedir}/target" src="${project.basedir}/wasm-tools-${wasm-tools.version}-wasm32-wasip1.tar.gz">
89+
<flattenmapper/>
90+
<patternset>
91+
<include name="**/*.wasm"/>
92+
</patternset>
93+
</untar>
94+
</target>
95+
</configuration>
96+
</execution>
97+
</executions>
98+
</plugin>
99+
<plugin>
100+
<groupId>org.codehaus.mojo</groupId>
101+
<artifactId>wagon-maven-plugin</artifactId>
102+
<version>${wagon-maven-plugin.version}</version>
103+
<executions>
104+
<execution>
105+
<id>download-wasm-tools</id>
106+
<goals>
107+
<goal>download-single</goal>
108+
</goals>
109+
<phase>validate</phase>
110+
<configuration>
111+
<url>https://github.com/bytecodealliance/wasm-tools/releases/download/v${wasm-tools.version}/wasm-tools-${wasm-tools.version}-wasm32-wasip1.tar.gz</url>
112+
<toDir>${project.basedir}</toDir>
113+
<skipIfExists>true</skipIfExists>
114+
</configuration>
115+
</execution>
116+
</executions>
117+
</plugin>
118+
</plugins>
119+
</build>
120+
</project>
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.dylibso.chicory.tools.wasm;
2+
3+
import static java.nio.file.Files.copy;
4+
import static java.nio.file.Files.walkFileTree;
5+
6+
import java.io.IOException;
7+
import java.nio.file.FileVisitResult;
8+
import java.nio.file.Path;
9+
import java.nio.file.SimpleFileVisitor;
10+
import java.nio.file.StandardCopyOption;
11+
import java.nio.file.attribute.BasicFileAttributes;
12+
13+
// TODO: refactor the little customizations done here in the wasi module
14+
public final class Files {
15+
private Files() {}
16+
17+
public static void copyDirectory(Path source, Path target) throws IOException {
18+
walkFileTree(
19+
source,
20+
new SimpleFileVisitor<>() {
21+
@Override
22+
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
23+
throws IOException {
24+
String relative = source.relativize(file).toString().replace("\\", "/");
25+
Path path = target.resolve(relative);
26+
copy(file, path, StandardCopyOption.REPLACE_EXISTING);
27+
return FileVisitResult.CONTINUE;
28+
}
29+
});
30+
}
31+
}
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
package com.dylibso.chicory.tools.wasm;
2+
3+
import static java.nio.file.Files.createDirectories;
4+
5+
import com.dylibso.chicory.log.Logger;
6+
import com.dylibso.chicory.log.SystemLogger;
7+
import com.dylibso.chicory.runtime.ByteArrayMemory;
8+
import com.dylibso.chicory.runtime.ImportValues;
9+
import com.dylibso.chicory.runtime.Instance;
10+
import com.dylibso.chicory.wasi.WasiOptions;
11+
import com.dylibso.chicory.wasi.WasiPreview1;
12+
import com.dylibso.chicory.wasm.WasmModule;
13+
import io.roastedroot.zerofs.Configuration;
14+
import io.roastedroot.zerofs.ZeroFs;
15+
import java.io.File;
16+
import java.io.FileInputStream;
17+
import java.io.IOException;
18+
import java.io.UncheckedIOException;
19+
import java.nio.file.FileSystem;
20+
import java.nio.file.Path;
21+
import java.nio.file.StandardCopyOption;
22+
import java.util.ArrayList;
23+
import java.util.List;
24+
import java.util.stream.Collectors;
25+
26+
public final class Wast2Json {
27+
private static final Logger logger =
28+
new SystemLogger() {
29+
@Override
30+
public boolean isLoggable(Logger.Level level) {
31+
return false;
32+
}
33+
};
34+
private static final WasmModule MODULE = WasmToolsModule.load();
35+
36+
private final File input;
37+
private final File output;
38+
private final String[] options;
39+
40+
private Wast2Json(File input, File output, String[] options) {
41+
this.input = input;
42+
this.output = output;
43+
this.options = options;
44+
}
45+
46+
public static Builder builder() {
47+
return new Builder();
48+
}
49+
50+
public void process() {
51+
try (FileInputStream fis = new FileInputStream(input);
52+
FileSystem fs =
53+
ZeroFs.newFileSystem(
54+
Configuration.unix().toBuilder()
55+
.setAttributeViews("unix")
56+
.build())) {
57+
58+
var wasiOpts = WasiOptions.builder();
59+
60+
wasiOpts.inheritSystem();
61+
62+
Path inputFolder = fs.getPath("input");
63+
java.nio.file.Files.createDirectory(inputFolder);
64+
Path inputPath = inputFolder.resolve("spec.wast");
65+
java.nio.file.Files.copy(fis, inputPath, StandardCopyOption.REPLACE_EXISTING);
66+
// copy(fis, inputPath, StandardCopyOption.REPLACE_EXISTING);
67+
wasiOpts.withDirectory(inputFolder.toString(), inputFolder);
68+
69+
Path outputFolder = fs.getPath("output");
70+
java.nio.file.Files.createDirectory(outputFolder);
71+
wasiOpts.withDirectory(outputFolder.toString(), outputFolder);
72+
java.nio.file.Files.createDirectory(outputFolder.resolve(output.getName()));
73+
74+
List<String> args = new ArrayList<>();
75+
args.add("wasm-tools");
76+
args.add("json-from-wast");
77+
args.add(inputPath.toString());
78+
args.add("--wasm-dir");
79+
args.add(outputFolder.resolve(output.getName()).toString());
80+
args.add("--output");
81+
args.add(outputFolder.resolve(output.getName()).resolve("spec.json").toString());
82+
args.addAll(List.of(options));
83+
logger.info("Running command: " + args.stream().collect(Collectors.joining(" ")));
84+
wasiOpts.withArguments(args);
85+
86+
try (var wasi =
87+
WasiPreview1.builder()
88+
.withLogger(logger)
89+
.withOptions(wasiOpts.build())
90+
.build()) {
91+
ImportValues imports =
92+
ImportValues.builder().addFunction(wasi.toHostFunctions()).build();
93+
94+
Instance.builder(MODULE)
95+
.withMachineFactory(WasmToolsModule::create)
96+
.withMemoryFactory(ByteArrayMemory::new)
97+
.withImportValues(imports)
98+
.build();
99+
}
100+
101+
createDirectories(output.toPath());
102+
Files.copyDirectory(outputFolder.resolve(output.getName()), output.toPath());
103+
} catch (IOException e) {
104+
throw new UncheckedIOException(e);
105+
}
106+
}
107+
108+
public static final class Builder {
109+
private File input;
110+
private File output;
111+
private String[] options = new String[0];
112+
113+
private Builder() {}
114+
115+
public Builder withFile(File f) {
116+
this.input = f;
117+
return this;
118+
}
119+
120+
public Builder withOutput(File f) {
121+
this.output = f;
122+
return this;
123+
}
124+
125+
public Builder withOptions(String[] opts) {
126+
this.options = opts;
127+
return this;
128+
}
129+
130+
public Wast2Json build() {
131+
return new Wast2Json(input, output, options);
132+
}
133+
}
134+
}

0 commit comments

Comments
 (0)