Skip to content

Commit

Permalink
WABT 1.0.35 (#9)
Browse files Browse the repository at this point in the history
* upgrade to wabt 1.0.35
  • Loading branch information
CharlieTap authored May 22, 2024
1 parent 16e8aca commit a0bacbd
Show file tree
Hide file tree
Showing 6 changed files with 124 additions and 35 deletions.
11 changes: 0 additions & 11 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,16 +35,5 @@ jobs:
with:
cache-encryption-key: ${{ secrets.GRADLE_ENCRYPTION_KEY }}

- name: Setup WABT
if: runner.os != 'macOS'
uses: mwilliamson/setup-wabt-action@v2
with:
wabt-version: "1.0.34"

- name: Setup WABT on macOS
if: runner.os == 'macOS'
run: |
brew install wabt
- name: Execute Gradle build
run: ./gradlew build
4 changes: 2 additions & 2 deletions chasm/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -66,12 +66,12 @@ configure<PublishingConventionsExtension> {
}

configure<WasmTestSuiteGenPluginExtension> {
wabtVersion = "1.0.34"
wabtVersion = "1.0.35"
testSuiteCommit = "16a839d5601c283541a84572b47637f035b51437"
scriptRunner = "io.github.charlietap.chasm.script.ChasmScriptRunner"
testPackageName = "io.github.charlietap.chasm"
proposals = listOf("tail-call", "extended-const")
excludes = listOf("**/comments.wast","**/if.wast", "**/float_exprs.wast", "**/f64.wast", "**/float_misc.wast", "simd_*/**")
excludes = listOf("**/float_exprs.wast", "**/f64.wast", "**/float_misc.wast", "simd_*/**")
}

tasks.withType<KotlinCompile>().configureEach {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package io.github.charlietap.sweet.plugin

import io.github.charlietap.sweet.plugin.task.DownloadWabtTask
import io.github.charlietap.sweet.plugin.task.GenerateTestsTask
import io.github.charlietap.sweet.plugin.task.PrepareTestSuiteTask
import io.github.charlietap.sweet.plugin.task.ResolveWast2JsonTask
Expand Down Expand Up @@ -28,14 +29,27 @@ class WasmTestSuiteGenPlugin : Plugin<Project> {
outputDirectory.set(extension.testSuiteDirectory)
}

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

wabtVersion.set(extension.wabtVersion)
outputDirectory.set(project.layout.buildDirectory.dir("wabt"))
}

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

wabtVersion.set(extension.wabtVersion)
outputFile.set(project.layout.buildDirectory.file("wast2json"))
wabtDirectory.set(downloadWabtTask.flatMap { it.outputDirectory })
outputFile.set(wabtVersion.zip(wabtDirectory) { version, dir ->
dir.dir(version).file("wast2json")
})
}

val prepareTestSuiteTask = project.tasks.register<PrepareTestSuiteTask>(
Expand Down Expand Up @@ -99,11 +113,13 @@ 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_PREPARE_SUITE = "prepareTestSuite"
const val TASK_NAME_GENERATE_TESTS = "generateTests"

const val TASK_DESCRIPTION_SYNC_SUITE = "Clones/Updates the wasm test suite to the given commit"
const val TASK_DESCRIPTION_DOWNLOAD_WABT = "Downloads and extracts the web assembly binary toolkit"
const val TASK_DESCRIPTION_RESOLVE_W2J = "Resolves for wastjson on the local filesystem"
const val TASK_DESCRIPTION_PREPARE_SUITE = "Prepare the wasm test suite for generation by running wast2json"
const val TASK_DESCRIPTION_GENERATE_TESTS = "Generate tests from the web assembly testsuite"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
package io.github.charlietap.sweet.plugin.task

import java.io.File
import java.net.URI
import java.net.URL
import javax.inject.Inject
import org.gradle.api.DefaultTask
import org.gradle.api.GradleException
import org.gradle.api.file.ArchiveOperations
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.file.FileSystemOperations
import org.gradle.api.provider.Property
import org.gradle.api.tasks.CacheableTask
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.TaskAction

@CacheableTask
abstract class DownloadWabtTask : DefaultTask() {

@get:Input
abstract val wabtVersion: Property<String>

@get:OutputDirectory
abstract val outputDirectory: DirectoryProperty

@get:Inject
abstract val archive: ArchiveOperations

@get:Inject
abstract val fs: FileSystemOperations

@TaskAction
fun downloadAndExtract() {
val osName = System.getProperty("os.name").lowercase()
val osArch = System.getProperty("os.arch").lowercase()
val tarFile = outputDirectory.file("${wabtVersion.get()}.tar.gz").get().asFile

val releaseUrl = when {
osName.contains("mac") -> {
when (osArch) {
"x86_64" -> "https://github.com/WebAssembly/wabt/releases/download/${wabtVersion.get()}/wabt-${wabtVersion.get()}-macos-12.tar.gz"
"aarch64" -> "https://github.com/WebAssembly/wabt/releases/download/${wabtVersion.get()}/wabt-${wabtVersion.get()}-macos-14.tar.gz"
else -> throw GradleException("Unsupported macOS architecture: $osArch")
}
}
osName.contains("nux") -> {
"https://github.com/WebAssembly/wabt/releases/download/${wabtVersion.get()}/wabt-${wabtVersion.get()}-ubuntu-20.04.tar.gz"
}
osName.contains("win") -> {
"https://github.com/WebAssembly/wabt/releases/download/${wabtVersion.get()}/wabt-${wabtVersion.get()}-windows.tar.gz"
}
else -> throw GradleException("Unsupported OS: ${System.getProperty("os.name")}")
}

wipeDirectory()
downloadRelease(URI(releaseUrl).toURL(), tarFile)

fs.copy {
from(archive.tarTree(archive.gzip(tarFile))) {
include("*/bin/**")
eachFile {
path = path
.replace("wabt-${wabtVersion.get()}", wabtVersion.get())
.replace("bin", "")
.replace(".exe", "")
includeEmptyDirs = false
}
}
into(outputDirectory)
}

val extractedDirectory = outputDirectory.dir("wabt-" + wabtVersion.get()).get()
val extractedBinDirectory = outputDirectory.dir(wabtVersion.get()).get().dir("bin")
extractedDirectory.asFile.deleteRecursively()
extractedBinDirectory.asFile.deleteRecursively()
tarFile.delete()
}

private fun downloadRelease(url: URL, destination: File) {
url.openStream().use { input ->
destination.outputStream().use { output ->
input.copyTo(output)
}
}
}

private fun wipeDirectory() {
outputDirectory.get().asFile.listFiles()?.forEach {
it.deleteRecursively()
}
}
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
package io.github.charlietap.sweet.plugin.task

import java.io.ByteArrayOutputStream
import java.io.File
import javax.inject.Inject
import org.gradle.api.DefaultTask
import org.gradle.api.GradleException
import org.gradle.api.file.FileSystemOperations
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.provider.Property
import org.gradle.api.tasks.CacheableTask
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.InputDirectory
import org.gradle.api.tasks.OutputFile
import org.gradle.api.tasks.PathSensitive
import org.gradle.api.tasks.PathSensitivity
import org.gradle.api.tasks.TaskAction
import org.gradle.process.ExecOperations

Expand All @@ -20,34 +22,23 @@ abstract class ResolveWast2JsonTask : DefaultTask() {
@get:Input
abstract val wabtVersion: Property<String>

@get:InputDirectory
@get:PathSensitive(PathSensitivity.RELATIVE)
abstract val wabtDirectory: DirectoryProperty

@get:OutputFile
abstract val outputFile: RegularFileProperty

@get:Inject
abstract val cli: ExecOperations

@get:Inject
abstract val fs: FileSystemOperations

@TaskAction
fun resolve() {
val osName = System.getProperty("os.name").lowercase()
val command = if (osName.contains("win")) "where" else "which"
val existingLocationBytes = ByteArrayOutputStream()

cli.exec {
commandLine = listOf(command, "wast2json")
standardOutput = existingLocationBytes
}

val existingLocation = File(existingLocationBytes.toString().trim())
val wast2JsonFile = outputFile.get().asFile

if(!outputFile.get().asFile.exists()) {
fs.copy {
from(existingLocation)
into(outputFile.get().asFile.parentFile)
rename{ "wast2json" }
}
if(!wast2JsonFile.exists()) {
throw GradleException("wast2json file does not exist: ${wast2JsonFile.absolutePath}")
}

val versionBytes = ByteArrayOutputStream()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ abstract class SyncRepositoryTask : DefaultTask() {
}

private fun wipeDirectory() {
outputDirectory.get().files().forEach {
outputDirectory.get().asFile.listFiles()?.forEach {
it.deleteRecursively()
}
}
Expand Down

0 comments on commit a0bacbd

Please sign in to comment.