From 93574d49efa6ec5590ea878c93c73ca1ddc2a05f Mon Sep 17 00:00:00 2001 From: Igor Yakovlev Date: Wed, 15 Jun 2022 19:42:57 +0200 Subject: [PATCH] [WASM] Add binaryen dsl --- .../targets/js/dsl/KotlinWasmTargetDsl.kt | 10 ++++++++-- .../targets/js/ir/KotlinJsBinaryContainer.kt | 5 +++-- .../gradle/targets/js/ir/KotlinJsIrTarget.kt | 18 ++++++++++-------- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/dsl/KotlinWasmTargetDsl.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/dsl/KotlinWasmTargetDsl.kt index aad0c2a0f43..aa8a34719ec 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/dsl/KotlinWasmTargetDsl.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/dsl/KotlinWasmTargetDsl.kt @@ -18,7 +18,7 @@ interface KotlinWasmSubTargetContainerDsl : KotlinTarget { fun whenD8Configured(body: KotlinWasmD8Dsl.() -> Unit) - fun whenBinaryenApplied(body: () -> Unit) + fun whenBinaryenApplied(body: (BinaryenExec.() -> Unit) -> Unit) } interface KotlinWasmTargetDsl : KotlinJsTargetDsl { @@ -30,7 +30,13 @@ interface KotlinWasmTargetDsl : KotlinJsTargetDsl { } } - fun applyBinaryen() + fun applyBinaryen() = applyBinaryen { } + fun applyBinaryen(body: BinaryenExec.() -> Unit) + fun applyBinaryen(fn: Closure<*>) { + applyBinaryen { + ConfigureUtil.configure(fn, this) + } + } } interface KotlinWasmD8Dsl : KotlinJsSubTargetDsl { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsBinaryContainer.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsBinaryContainer.kt index 75536dae8cf..0a36791c46f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsBinaryContainer.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsBinaryContainer.kt @@ -40,7 +40,7 @@ constructor( private val defaultCompilation: KotlinJsCompilation get() = target.compilations.getByName(KotlinCompilation.MAIN_COMPILATION_NAME) - private fun configureBinaryen(binary: JsIrBinary) { + private fun configureBinaryen(binary: JsIrBinary, binaryenDsl: BinaryenExec.() -> Unit) { val linkTask = binary.linkTask val compiledMjsFile = linkTask.map { link -> @@ -56,6 +56,7 @@ constructor( val binaryenTask = BinaryenExec.create(binary.compilation, "${linkTask.name}Optimize") { inputFileProperty.fileProvider(compiledWasmFile) outputFileProperty.fileProvider(compiledWasmFile) + binaryenDsl() } binary.compilation.compileKotlinTask.finalizedBy(binaryenTask) @@ -203,7 +204,7 @@ constructor( if (compilation.platformType == KotlinPlatformType.wasm && target is KotlinJsIrTarget && binary is JsIrBinary) { target.whenBinaryenApplied { - configureBinaryen(binary) + configureBinaryen(binary, it) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTarget.kt index fd2af765f0d..7ada88b6406 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTarget.kt @@ -19,6 +19,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinTargetWithBinaries import org.jetbrains.kotlin.gradle.targets.js.JsAggregatingExecutionSource import org.jetbrains.kotlin.gradle.targets.js.KotlinJsReportAggregatingTestRun import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget +import org.jetbrains.kotlin.gradle.targets.js.binaryen.BinaryenExec import org.jetbrains.kotlin.gradle.targets.js.dsl.* import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask @@ -149,22 +150,23 @@ constructor( } //Binaryen - private val applyBinaryenHandlers = mutableListOf<() -> Unit>() + private val applyBinaryenHandlers = mutableListOf<(BinaryenExec.() -> Unit) -> Unit>() - private var binaryenApplied: Boolean = false + private var binaryenApplied: (BinaryenExec.() -> Unit)? = null - override fun whenBinaryenApplied(body: () -> Unit) { - if (binaryenApplied) { - body() + override fun whenBinaryenApplied(body: (BinaryenExec.() -> Unit) -> Unit) { + val binaryenApplied = binaryenApplied + if (binaryenApplied != null) { + body(binaryenApplied) } else { applyBinaryenHandlers += body } } - override fun applyBinaryen() { - binaryenApplied = true + override fun applyBinaryen(body: BinaryenExec.() -> Unit) { + binaryenApplied = body applyBinaryenHandlers.forEach { handler -> - handler() + handler(body) } browserConfiguredHandlers.clear() }