shared/build.gradle.kts (145 lines of code) (raw):

@file:OptIn(ExperimentalKotlinGradlePluginApi::class) import com.mikepenz.aboutlibraries.plugin.DuplicateMode import com.mikepenz.aboutlibraries.plugin.DuplicateRule import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi plugins { alias(libs.plugins.aboutLibraries) alias(libs.plugins.androidLibrary) alias(libs.plugins.composeMultiplatform) alias(libs.plugins.kotlinParcelize) alias(libs.plugins.composeCompiler) alias(libs.plugins.kotlinMultiplatform) alias(libs.plugins.kotlinSerialization) } kotlin { compilerOptions { freeCompilerArgs.add("-Xexpect-actual-classes") } androidTarget { compilerOptions { freeCompilerArgs.addAll( "-P", "plugin:org.jetbrains.kotlin.parcelize:additionalAnnotation=org.jetbrains.kotlinconf.zoomable.internal.AndroidParcelize" ) } } jvm() @OptIn(org.jetbrains.kotlin.gradle.ExperimentalWasmDsl::class) wasmJs { binaries.executable() browser { val projectDir = project.projectDir.path val rootDir = project.rootDir.path commonWebpackConfig { outputFileName = "kotlinconf-app.js" } } } js { binaries.executable() browser { commonWebpackConfig { outputFileName = "kotlinconf-app.js" } } } listOf( iosX64(), iosArm64(), iosSimulatorArm64() ).forEach { it.binaries.framework { baseName = "shared" isStatic = true } } applyDefaultHierarchyTemplate() sourceSets { commonMain.dependencies { api(projects.core) api(projects.uiComponents) api(libs.compose.runtime) api(libs.compose.foundation) api(libs.compose.animation) api(libs.compose.components.resources) api(libs.koin.compose.viewmodel.navigation) api(libs.ktor.client.logging) api(libs.ktor.serialization.kotlinx.json) api(libs.ktor.client.content.negotiation) api(libs.ktor.utils) implementation(libs.kotlinx.datetime) implementation(libs.androidx.lifecycle.runtime.compose) implementation(libs.androidx.navigation3.ui) implementation(libs.androidx.lifecycle.viewmodel.navigation3) implementation(libs.ktor.client.core) implementation(libs.aboutlibraries.core) // Multiplatform Settings implementation(libs.settings) implementation(libs.settings.serialization) implementation(libs.settings.observable) implementation(libs.settings.coroutines) api(libs.kmpnotifier) implementation(libs.doistx.normalize) } commonTest.dependencies { implementation(libs.kotlin.test) implementation(libs.settings.test) implementation(libs.kotlinx.coroutines.test) } val nonAndroidMain by creating { dependsOn(commonMain.get()) } configure(listOf(iosMain, jvmMain, webMain)) { get().dependsOn(nonAndroidMain) } androidMain.dependencies { implementation(libs.android.svg) implementation(libs.androidx.core.ktx) implementation(libs.androidx.preference) implementation(libs.compose.ui.tooling.preview) implementation(libs.ktor.client.okhttp) } iosMain.dependencies { implementation(libs.kotlinx.coroutines.core) implementation(libs.ktor.client.darwin) } jvmMain.dependencies { implementation(libs.ktor.client.okhttp) implementation(compose.desktop.currentOs) implementation(libs.android.svg) implementation(libs.kotlinx.coroutines.swing) implementation(libs.slf4j.nop) } webMain.dependencies { implementation(libs.ktor.client.js) implementation(npm("@js-joda/timezone", "2.22.0")) } } jvmToolchain(21) } android { namespace = "org.jetbrains.kotlinconf" compileSdk = libs.versions.android.compileSdk.get().toInt() defaultConfig { minSdk = libs.versions.android.minSdk.get().toInt() } compileOptions { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } } // Android preview support dependencies { debugImplementation(libs.compose.ui.tooling) } compose.desktop { application { mainClass = "org.jetbrains.kotlinconf.MainKt" } } compose.resources { packageOfResClass = "org.jetbrains.kotlinconf.generated.resources" } aboutLibraries { library.duplicationMode = DuplicateMode.MERGE library.duplicationRule = DuplicateRule.SIMPLE export.outputFile = File("src/commonMain/composeResources/files") }