Skip to content

Commit

Permalink
Migration from wabt to wasm-tools (#28)
Browse files Browse the repository at this point in the history
* migrate sweet to use wasm-tools for test generation
  • Loading branch information
CharlieTap authored Sep 10, 2024
1 parent 70af207 commit 070718a
Show file tree
Hide file tree
Showing 12 changed files with 168 additions and 153 deletions.
4 changes: 2 additions & 2 deletions chasm/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -69,12 +69,12 @@ configure<PublishingConventionsExtension> {
}

configure<WasmTestSuiteGenPluginExtension> {
wabtVersion = "1.0.36"
wasmToolsVersion = "1.216.0"
testSuiteCommit = "7c3ec23ab19b37c68976b555f9491752cbda6d5f"
scriptRunner = "io.github.charlietap.chasm.script.ChasmScriptRunner"
testPackageName = "io.github.charlietap.chasm"
proposals = listOf("tail-call", "extended-const", "multi-memory")
excludes = listOf("simd_*/**", "**/simd_*", "align.wast", "binary.wast", "global.wast", "imports.wast", "memory.wast")
excludes = listOf("simd_*/**", "**/simd_*", "align.wast", "binary.wast", "global.wast", "imports.wast", "memory.wast", "comments.wast")
}

tasks.withType<KotlinCompile>().configureEach {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ package io.github.charlietap.chasm.script.command
import io.github.charlietap.chasm.script.ScriptContext
import io.github.charlietap.chasm.script.action.ActionResult
import io.github.charlietap.chasm.script.action.ActionRunner
import io.github.charlietap.chasm.script.ext.mismatchTemplate
import io.github.charlietap.chasm.script.value.ValueMapper
import io.github.charlietap.sweet.lib.command.ActionCommand

typealias ActionCommandRunner = (ScriptContext, ActionCommand) -> CommandResult
Expand All @@ -16,24 +14,16 @@ fun ActionCommandRunner(
context = context,
command = command,
actionRunner = ::ActionRunner,
valueMapper = ::ValueMapper,
)

private fun ActionCommandRunner(
context: ScriptContext,
command: ActionCommand,
actionRunner: ActionRunner,
valueMapper: ValueMapper,
): CommandResult {
return when (val result = actionRunner(context, command, command.action)) {
is ActionResult.Success -> {
val expected = command.expected.map(valueMapper)
if (result.value == expected) {
CommandResult.Success
} else {
val mismatch = mismatchTemplate(expected, result.value)
CommandResult.Failure(command, mismatch)
}
CommandResult.Success
}
is ActionResult.Failure -> {
CommandResult.Failure(command, result.reason)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package io.github.charlietap.sweet.lib.command

import io.github.charlietap.sweet.lib.action.Action
import io.github.charlietap.sweet.lib.value.Value
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

Expand All @@ -10,5 +9,4 @@ import kotlinx.serialization.Serializable
data class ActionCommand(
override val line: Int,
val action: Action,
val expected: List<Value>,
): Command
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package io.github.charlietap.sweet.lib.command

import io.github.charlietap.sweet.lib.action.Action
import io.github.charlietap.sweet.lib.value.Value
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

Expand All @@ -10,6 +9,5 @@ import kotlinx.serialization.Serializable
data class AssertExhaustionCommand(
override val line: Int,
val action: Action,
val expected: List<Value>,
val text: String,
): Command
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package io.github.charlietap.sweet.lib.command

import io.github.charlietap.sweet.lib.action.Action
import io.github.charlietap.sweet.lib.value.Value
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

Expand All @@ -10,6 +9,5 @@ import kotlinx.serialization.Serializable
data class AssertTrapCommand(
override val line: Int,
val action: Action,
val expected: List<Value>,
val text: String,
): Command
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package io.github.charlietap.sweet.plugin

import io.github.charlietap.sweet.plugin.task.DownloadWabtTask
import io.github.charlietap.sweet.plugin.task.DownloadWasmToolsTask
import io.github.charlietap.sweet.plugin.task.GenerateTestsTask
import io.github.charlietap.sweet.plugin.task.PrepareTestSuiteTask
import io.github.charlietap.sweet.plugin.task.ResolveWast2JsonTask
import io.github.charlietap.sweet.plugin.task.ResolveWasmToolsTask
import io.github.charlietap.sweet.plugin.task.SyncRepositoryTask
import org.gradle.api.Plugin
import org.gradle.api.Project
Expand All @@ -29,26 +29,26 @@ class WasmTestSuiteGenPlugin : Plugin<Project> {
outputDirectory.set(extension.testSuiteDirectory)
}

val downloadWabtTask = project.tasks.register<DownloadWabtTask>(
TASK_NAME_DOWNLOAD_WABT,
val downloadWasmToolsTask = project.tasks.register<DownloadWasmToolsTask>(
TASK_NAME_DOWNLOAD_WASM_TOOLS,
) {
description = TASK_DESCRIPTION_DOWNLOAD_WABT
group = GROUP

wabtVersion.set(extension.wabtVersion)
outputDirectory.set(project.layout.buildDirectory.dir("wabt"))
wasmToolsVersion.set(extension.wasmToolsVersion)
outputDirectory.set(project.layout.buildDirectory.dir("wasm-tools"))
}

val resolveWast2JsonTask = project.tasks.register<ResolveWast2JsonTask>(
TASK_NAME_RESOLVE_W2J,
val resolveWasmToolsTask = project.tasks.register<ResolveWasmToolsTask>(
TASK_NAME_RESOLVE_WASM_TOOLS,
) {
description = TASK_DESCRIPTION_RESOLVE_W2J
group = GROUP

wabtVersion.set(extension.wabtVersion)
wabtDirectory.set(downloadWabtTask.flatMap { it.outputDirectory })
outputFile.set(wabtVersion.zip(wabtDirectory) { version, dir ->
dir.dir(version).file("wast2json")
wasmToolsVersion.set(extension.wasmToolsVersion)
wasmToolsDirectory.set(downloadWasmToolsTask.flatMap { it.outputDirectory })
outputFile.set(wasmToolsVersion.zip(wasmToolsDirectory) { version, dir ->
dir.dir(version).file("wasm-tools")
})
}

Expand All @@ -70,7 +70,7 @@ class WasmTestSuiteGenPlugin : Plugin<Project> {

excludes.set(extension.excludes)
proposals.set(extension.proposals)
wast2Json.set(resolveWast2JsonTask.flatMap { it.outputFile })
wast2Json.set(resolveWasmToolsTask.flatMap { it.outputFile })
outputDirectory.set(extension.testSuiteIntermediateDirectory)
}

Expand Down Expand Up @@ -111,8 +111,8 @@ class WasmTestSuiteGenPlugin : Plugin<Project> {
const val GROUP = "testsuite"

const val TASK_NAME_SYNC_SUITE = "syncWasmTestSuite"
const val TASK_NAME_DOWNLOAD_WABT = "downloadWabt"
const val TASK_NAME_RESOLVE_W2J = "resolveWast2Json"
const val TASK_NAME_DOWNLOAD_WASM_TOOLS = "downloadWasmTools"
const val TASK_NAME_RESOLVE_WASM_TOOLS = "resolveWasmTools"
const val TASK_NAME_PREPARE_SUITE = "prepareTestSuite"
const val TASK_NAME_GENERATE_TESTS = "generateTests"

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ open class WasmTestSuiteGenPluginExtension @Inject constructor(
layout: ProjectLayout,
objects: ObjectFactory,
) {
val wabtVersion: Property<String> = objects.property(String::class.java)
val wasmToolsVersion: Property<String> = objects.property(String::class.java)

val testSuiteCommit: Property<String> = objects.property(String::class.java)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
package io.github.charlietap.sweet.plugin.action

import java.io.File
import javax.inject.Inject
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.file.RegularFileProperty
import org.gradle.process.ExecOperations
import org.gradle.workers.WorkAction
import org.gradle.workers.WorkParameters
import javax.inject.Inject

interface Wast2JsonParams: WorkParameters {
val wast2JsonFile: RegularFileProperty
interface WasmToolsParams: WorkParameters {
val wasmToolsFile: RegularFileProperty
val inputFile: RegularFileProperty
val outputDirectory: DirectoryProperty
}

abstract class Wast2JsonAction : WorkAction<Wast2JsonParams> {
abstract class WasmToolsAction : WorkAction<WasmToolsParams> {

@get:Inject
abstract val cli: ExecOperations
Expand All @@ -27,18 +28,20 @@ abstract class Wast2JsonAction : WorkAction<Wast2JsonParams> {

cli.exec {
workingDir = outputDir
executable = parameters.wast2JsonFile.get().asFile.absolutePath
executable = parameters.wasmToolsFile.get().asFile.absolutePath
args = listOf(
CLI_ARG_J2W,
CLI_OPTION_DIR, outputDir.absolutePath,
CLI_OPTION_OUTPUT, outputDir.absolutePath + File.separator + outputDir.nameWithoutExtension + ".json",
parameters.inputFile.get().asFile.absolutePath,
) + ADDITIONAL_FLAGS
)
}
}

private companion object {
val ADDITIONAL_FLAGS = setOf(
"--enable-tail-call",
"--enable-extended-const",
"--enable-multi-memory",
)
const val CLI_ARG_J2W = "json-from-wast"

const val CLI_OPTION_DIR = "--wasm-dir"
const val CLI_OPTION_OUTPUT = "-o"
}
}

This file was deleted.

Loading

0 comments on commit 070718a

Please sign in to comment.