blob: 1b2a75e8dd58580f657a541152d66c7754bbe725 [file] [log] [blame]
/*
* Copyright 2017-2024 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
*/
@file:OptIn(ExperimentalWasmDsl::class)
import org.gradle.kotlin.dsl.*
import org.jetbrains.kotlin.gradle.*
import org.jetbrains.kotlin.gradle.dsl.*
import org.jetbrains.kotlin.gradle.plugin.mpp.*
import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension
import org.jetbrains.kotlin.gradle.targets.native.tasks.*
import org.jetbrains.kotlin.gradle.tasks.*
import org.jetbrains.kotlin.gradle.testing.*
plugins {
kotlin("multiplatform")
}
tasks.withType<JavaCompile>().configureEach {
options.release = 8
}
internal fun Project.versionCatalog(): VersionCatalog = versionCatalogs.named("libs")
kotlin {
explicitApi()
jvm {
withJava()
@OptIn(ExperimentalKotlinGradlePluginApi::class)
compilerOptions {
jvmTarget = JvmTarget.JVM_1_8
freeCompilerArgs.add("-Xjdk-release=1.8")
}
}
jvmToolchain(jdkToolchainVersion)
js {
nodejs {
testTask {
useMocha {
timeout = "10s"
}
}
}
@OptIn(ExperimentalKotlinGradlePluginApi::class)
compilerOptions {
sourceMap = true
moduleKind = JsModuleKind.MODULE_UMD
}
}
wasmJs {
nodejs()
}
wasmWasi {
nodejs()
}
sourceSets.all {
kotlin.srcDirs("$name/src")
resources.srcDirs("$name/resources")
languageSettings {
progressiveMode = true
optIn("kotlin.ExperimentalMultiplatform")
optIn("kotlinx.serialization.InternalSerializationApi")
}
}
sourceSets {
commonMain {
dependencies {
api(versionCatalog().findLibrary("kotlin.stdlib").get())
}
}
commonTest {
dependencies {
api(versionCatalog().findLibrary("kotlin.test").get())
}
}
register("wasmMain") {
dependsOn(commonMain.get())
}
register("wasmTest") {
dependsOn(commonTest.get())
}
named("wasmJsMain") {
dependsOn(named("wasmMain").get())
}
named("wasmJsTest") {
dependsOn(named("wasmTest").get())
}
named("wasmWasiMain") {
dependsOn(named("wasmMain").get())
}
named("wasmWasiTest") {
dependsOn(named("wasmTest").get())
}
}
sourceSets.matching({ it.name.contains("Test") }).configureEach {
languageSettings {
optIn("kotlinx.serialization.InternalSerializationApi")
optIn("kotlinx.serialization.ExperimentalSerializationApi")
}
}
}
tasks.withType(KotlinCompilationTask::class).configureEach {
compilerOptions {
val isMainTaskName = name.startsWith("compileKotlin")
if (isMainTaskName) {
allWarningsAsErrors = true
}
if (overriddenLanguageVersion != null) {
languageVersion = KotlinVersion.fromVersion(overriddenLanguageVersion!!)
freeCompilerArgs.add("-Xsuppress-version-warnings")
}
freeCompilerArgs.add("-Xexpect-actual-classes")
}
}