diff --git a/gradle-plugin/src/main/kotlin/io/github/pumpkinmc/gradle/PumpkinPlugin.kt b/gradle-plugin/src/main/kotlin/io/github/pumpkinmc/gradle/PumpkinPlugin.kt index fa70246..8cd3ca5 100644 --- a/gradle-plugin/src/main/kotlin/io/github/pumpkinmc/gradle/PumpkinPlugin.kt +++ b/gradle-plugin/src/main/kotlin/io/github/pumpkinmc/gradle/PumpkinPlugin.kt @@ -14,8 +14,11 @@ import org.gradle.kotlin.dsl.create import org.gradle.kotlin.dsl.named import org.gradle.kotlin.dsl.register import org.gradle.process.CommandLineArgumentProvider +import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension +import org.jetbrains.kotlin.gradle.targets.wasm.binaryen.BinaryenEnvSpec import org.jetbrains.kotlin.gradle.targets.wasm.binaryen.BinaryenExec +import org.jetbrains.kotlin.gradle.targets.wasm.binaryen.BinaryenPlugin import java.net.URI abstract class PumpkinExtension @Inject constructor(objects: ObjectFactory) { @@ -23,6 +26,7 @@ abstract class PumpkinExtension @Inject constructor(objects: ObjectFactory) { val apiArtifact: Property = objects.property(String::class.java).convention("pumpkin-api-kt") val apiVersion: Property = objects.property(String::class.java).convention("0.1.0-dev") val wasmToolsVersion: Property = objects.property(String::class.java).convention("1.258.0") + val binaryenVersion: Property = objects.property(String::class.java).convention("130") val pluginClass: Property = objects.property(String::class.java) } @@ -41,6 +45,7 @@ class PumpkinPlugin : Plugin { } } + @OptIn(ExperimentalWasmDsl::class) private fun configurePlugin( project: Project, extension: PumpkinExtension, @@ -50,6 +55,11 @@ class PumpkinPlugin : Plugin { "io.github.pumpkin-mc.plugin requires org.jetbrains.kotlin.multiplatform." } + // Binaryen 130 fixes Linux release stack overflows on Kotlin-generated Wasm. + // https://github.com/WebAssembly/binaryen/pull/8595 + project.plugins.apply(BinaryenPlugin::class.java) + project.extensions.getByType(BinaryenEnvSpec::class.java).version.set(extension.binaryenVersion) + project.dependencies.add( apiSources.name, "${extension.apiGroup.get()}:${extension.apiArtifact.get()}-wasm-wasi:${extension.apiVersion.get()}:sources@jar",