Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migration from wabt to wasm-tools #28

Merged
merged 3 commits into from
Sep 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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