Files
com.kgurgul.cpuinfo/shared/build.gradle.kts
T

214 lines
6.4 KiB
Kotlin

import com.kgurgul.AndroidVersions
import com.kgurgul.KoverConfig
import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl
plugins {
alias(libs.plugins.kotlin.multiplatform)
alias(libs.plugins.android.kotlin.multiplatform.library)
alias(libs.plugins.compose.multiplatform)
alias(libs.plugins.compose.compiler)
alias(libs.plugins.kover)
alias(libs.plugins.licenses)
alias(libs.plugins.serialization)
id("kotlin-parcelize")
}
version = "1.0"
kotlin {
jvmToolchain(17)
android {
namespace = "com.kgurgul.cpuinfo.shared"
compileSdk = AndroidVersions.COMPILE_SDK
minSdk = AndroidVersions.MIN_SDK
androidResources {
enable = true
}
withHostTestBuilder {}.configure {}
withDeviceTestBuilder {
sourceSetTreeName = "test"
}
}
val iosTargets = listOf(iosArm64(), iosSimulatorArm64())
iosTargets.forEach { iosTarget ->
iosTarget.binaries.framework {
baseName = "shared"
isStatic = true
binaryOption("bundleId", "com.kgurgul.cpuinfo.shared")
}
}
jvm("desktop")
@OptIn(ExperimentalWasmDsl::class)
wasmJs {
browser {
testTask {
enabled = false
}
}
}
applyDefaultHierarchyTemplate()
sourceSets {
all {
languageSettings {
optIn("org.jetbrains.compose.resources.ExperimentalResourceApi")
optIn("androidx.compose.material3.ExperimentalMaterial3Api")
optIn("androidx.compose.foundation.ExperimentalFoundationApi")
optIn("kotlinx.cinterop.ExperimentalForeignApi")
optIn("kotlinx.coroutines.ExperimentalCoroutinesApi")
optIn("kotlin.js.ExperimentalWasmJsInterop")
}
}
commonMain {
dependencies {
api(libs.coil)
implementation(libs.jetbrains.compose.adaptive)
implementation(libs.jetbrains.compose.adaptive.navigationSuit)
api(libs.jetbrains.compose.componentsResources)
api(libs.jetbrains.compose.foundation)
implementation(libs.jetbrains.compose.lifecycle.viewmodel)
implementation(libs.jetbrains.compose.lifecycle.runtime)
implementation(libs.jetbrains.compose.material.iconsExtended)
api(libs.jetbrains.compose.material3)
api(libs.jetbrains.compose.navigation)
implementation(libs.jetbrains.compose.runtime)
implementation(libs.jetbrains.compose.ui)
implementation(libs.jetbrains.compose.uiToolingPreview)
implementation(libs.kermit.kermit)
api(libs.koin.compose.viewodel)
implementation(libs.koin.core)
implementation(libs.kotlinx.coroutines.core)
api(libs.kotlinx.immutable)
api(libs.kotlinx.serialization)
}
}
val mobileMain by creating {
dependsOn(commonMain.get())
dependencies {
implementation(libs.androidx.datastore.preferences)
}
}
androidMain {
dependsOn(mobileMain)
dependencies {
implementation(projects.nativeAndroid)
api(libs.androidx.activity.compose)
implementation(libs.androidx.core)
api(libs.androidx.core.splashscreen)
api(libs.androidx.tv)
api(libs.koin.android)
implementation(libs.relinker)
}
}
iosMain {
dependsOn(mobileMain)
}
val desktopMain by getting {
dependsOn(mobileMain)
dependencies {
implementation(compose.desktop.currentOs)
implementation(libs.imageio.icns)
implementation(libs.jna)
implementation(libs.jna.platform)
implementation(libs.kotlinx.coroutines.swing)
implementation(libs.oshi)
}
}
val wasmJsMain by getting {
dependencies {
implementation(libs.kotlinx.browser)
implementation(npm("cross-spawn", "7.0.6"))
implementation(npm("path-to-regexp", "0.1.12"))
}
}
commonTest.dependencies {
implementation(kotlin("test"))
implementation(kotlin("test-common"))
implementation(kotlin("test-annotations-common"))
implementation(libs.kotlinx.coroutines.test)
implementation(libs.turbine)
}
val desktopTest by getting {
dependencies {
implementation(libs.jetbrains.compose.uiTest)
}
}
getByName("androidHostTest") {
dependencies {
implementation(kotlin("test"))
implementation(kotlin("test-junit"))
implementation(libs.androidx.test.core)
implementation(libs.androidx.arch.core.testing)
implementation(libs.koin.test)
implementation(libs.kotlinx.coroutines.test)
}
}
}
targets.configureEach {
compilations.configureEach {
compileTaskProvider.get().compilerOptions {
freeCompilerArgs.add("-Xexpect-actual-classes")
}
}
}
}
compose.resources {
publicResClass = true
packageOfResClass = "com.kgurgul.cpuinfo.shared"
generateResClass = always
}
composeCompiler {
reportsDestination = layout.buildDirectory.dir("compose_compiler")
metricsDestination = layout.buildDirectory.dir("compose_compiler")
}
dependencies {
"androidRuntimeClasspath"(libs.jetbrains.compose.uiTooling)
}
kover {
reports {
total {
filters {
includes {
packages(KoverConfig.includedPackages)
}
excludes {
packages(KoverConfig.excludedPackages)
classes(KoverConfig.excludedClasses)
annotatedBy(KoverConfig.excludedAnnotations)
}
}
html {
htmlDir = layout.buildDirectory.dir("coverage-report/html")
}
xml {
xmlFile = layout.buildDirectory.file("coverage-report/result.xml")
}
}
}
}