diff --git a/maven-helmchartgen-wasm/README.md b/maven-helmchartgen-wasm/README.md index 21c3c14..6371676 100644 --- a/maven-helmchartgen-wasm/README.md +++ b/maven-helmchartgen-wasm/README.md @@ -1,6 +1,6 @@ # How to build this WASM Transformer -1. Ensure you have the [TinyGo](https://tinygo.org/) compiler installed. Move2Kube WASM modules currently do not support WASI modules built by the Go compiler. +1. Ensure you have the [TinyGo](https://tinygo.org/) compiler installed. The official Golang compiler doesn't fully support WASM exports yet https://github.com/golang/go/issues/65199 2. Run the following command: ``` $ tinygo build -o helmchartgen.wasm -target=wasi transformer.go diff --git a/maven-helmchartgen-wasm/helmchartgen.wasm b/maven-helmchartgen-wasm/helmchartgen.wasm index ad4ce64..33519cc 100755 Binary files a/maven-helmchartgen-wasm/helmchartgen.wasm and b/maven-helmchartgen-wasm/helmchartgen.wasm differ diff --git a/maven-helmchartgen-wasm/transformer.go b/maven-helmchartgen-wasm/transformer.go index 97caa89..0010b66 100644 --- a/maven-helmchartgen-wasm/transformer.go +++ b/maven-helmchartgen-wasm/transformer.go @@ -16,27 +16,25 @@ const PomFile = "pom.xml" var input []byte = make([]byte, 2048) -// Reads a null-terminated string (ala C strings) from the provided pointer -func readPtr(dataPointer *int32) string { - nth := 0 - var dataStr strings.Builder - pointer := uintptr(unsafe.Pointer(dataPointer)) - for { - s := *(*int32)(unsafe.Pointer(pointer + uintptr(nth))) - if byte(s) == 0 { - break - } +func unpack(combined uint64) (uint32, uint32) { + pointer := uint32(combined >> 32) // Extracts the upper 32 bits + size := uint32(combined) // Extracts the lower 32 bits + return pointer, size +} - dataStr.WriteByte(byte(s)) - nth++ - } +func pack(pointer uint32, size uint32) uint64 { + return (uint64(pointer) << 32) | uint64(size) +} - return dataStr.String() +func readData(dataPointer uint64) string { + pointer, size := unpack(dataPointer) + dataStr := unsafe.String((*byte)(unsafe.Pointer(uintptr(pointer))), size) + return strings.Clone(dataStr) } //export directoryDetect -func directoryDetect(dataPointer *int32) *int32 { - dir := readPtr(dataPointer) +func directoryDetect(dataPointer uint64) uint64 { + dir := readData(dataPointer) dataFilePath := filepath.Join(dir, PomFile) transform_return_data := make(map[string]interface{}) @@ -58,11 +56,11 @@ func directoryDetect(dataPointer *int32) *int32 { fmt.Println(err) os.Exit(1) } - r := make([]int32, 2) - r[0] = int32(uintptr(unsafe.Pointer(&(transform_return_data_byt[0])))) - r[1] = int32(len(transform_return_data_byt)) - return &r[0] + DDptr := uint32(uintptr(unsafe.Pointer(&(transform_return_data_byt[0])))) + DDsize := uint32(len(transform_return_data_byt)) + + return pack(DDptr, DDsize) } else { fmt.Printf("wasm stat failed: %v\n", err) } @@ -73,16 +71,15 @@ func directoryDetect(dataPointer *int32) *int32 { fmt.Println(err) os.Exit(1) } - r := make([]int32, 2) - r[0] = int32(uintptr(unsafe.Pointer(&(transform_return_data_byt[0])))) - r[1] = int32(len(transform_return_data_byt)) + DDptr := uint32(uintptr(unsafe.Pointer(&(transform_return_data_byt[0])))) + DDsize := uint32(len(transform_return_data_byt)) - return &r[0] + return pack(DDptr, DDsize) } //export transform -func transform(dataPointer *int32) *int32 { - rawData := readPtr(dataPointer) +func transform(dataPointer uint64) uint64 { + rawData := readData(dataPointer) var data map[string]interface{} err := json.Unmarshal([]byte(rawData), &data) @@ -138,11 +135,10 @@ func transform(dataPointer *int32) *int32 { fmt.Println(err) os.Exit(1) } - r := make([]int32, 2) - r[0] = int32(uintptr(unsafe.Pointer(&(transform_return_data_byt[0])))) - r[1] = int32(len(transform_return_data_byt)) + TTptr := uint32(uintptr(unsafe.Pointer(&(transform_return_data_byt[0])))) + TTsize := uint32(len(transform_return_data_byt)) - return &r[0] + return pack(TTptr, TTsize) } // getServiceName extracts service name from pom file diff --git a/maven-helmchartgen-wasm/transformer.yaml b/maven-helmchartgen-wasm/transformer.yaml index 4ab84d1..92a2fff 100644 --- a/maven-helmchartgen-wasm/transformer.yaml +++ b/maven-helmchartgen-wasm/transformer.yaml @@ -16,3 +16,4 @@ spec: move2kube.konveyor.io/built-in: "true" config: wasm_module: helmchartgen.wasm + compile_aot: true \ No newline at end of file