plugins { alias(libs.plugins.kotlin.multiplatform) alias(libs.plugins.kotlin.serialization) alias(libs.plugins.android.kmp.library) } kotlin { jvmToolchain(21) jvm() androidLibrary { namespace = "coffee.liz.rookery.core" compileSdk = 37 minSdk = 26 } sourceSets { commonMain.dependencies { implementation(libs.coroutines.core) api(libs.serialization.json) implementation(libs.kable) // Bluetooth LE on desktop (macOS, Windows, Linux) and Android } commonTest.dependencies { implementation(kotlin("test")) implementation(libs.coroutines.test) } // Plain-JVM code that desktop and Android share: files, tnoodle, AES. val jvmShared by creating { dependsOn(commonMain.get()) dependencies { implementation(libs.tnoodle.scrambles) implementation(libs.tnoodle.min2phase) // two-phase solver, for smart-cube scramble corrections } } jvmMain { dependsOn(jvmShared) dependencies { // BlueZ over D-Bus: Linux desktop only implementation(libs.dbus.java.core) implementation(libs.dbus.java.transport.native) } } androidMain { dependsOn(jvmShared) } } } // Same heap cap as the desktop app, so tests catch scramblers that outgrow it. tasks.withType().configureEach { maxHeapSize = "256m" }