import org.jetbrains.compose.compose import org.jetbrains.compose.desktop.application.dsl.TargetFormat import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension import org.jetbrains.compose.experimental.dsl.IOSDevices buildscript { repositories { mavenLocal() mavenCentral() google() maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") } } plugins { id("com.android.application") kotlin("multiplatform") id("org.jetbrains.compose") } version = "1.0-SNAPSHOT" repositories { mavenLocal() mavenCentral() gradlePluginPortal() maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") google()} kotlin { android() jvm("desktop") js(IR) { browser() binaries.executable() } macosX64 { binaries { executable { entryPoint = "main" freeCompilerArgs += listOf( "-linker-option", "-framework", "-linker-option", "Metal" ) } } } macosArm64 { binaries { executable { entryPoint = "main" freeCompilerArgs += listOf( "-linker-option", "-framework", "-linker-option", "Metal" ) } } } iosX64("uikitX64") { binaries { executable() { entryPoint = "main" freeCompilerArgs += listOf( "-linker-option", "-framework", "-linker-option", "Metal", "-linker-option", "-framework", "-linker-option", "CoreText", "-linker-option", "-framework", "-linker-option", "CoreGraphics" ) } } } iosArm64("uikitArm64") { binaries { executable() { entryPoint = "main" freeCompilerArgs += listOf( "-linker-option", "-framework", "-linker-option", "Metal", "-linker-option", "-framework", "-linker-option", "CoreText", "-linker-option", "-framework", "-linker-option", "CoreGraphics" ) // TODO: the current compose binary surprises LLVM, so disable checks for now. freeCompilerArgs += "-Xdisable-phases=VerifyBitcode" } } } sourceSets { val commonMain by getting { dependencies { implementation(compose.ui) implementation(compose.foundation) implementation(compose.material) implementation(compose.runtime) } } val commonTest by getting { dependencies { implementation(kotlin("test-common")) implementation(kotlin("test-annotations-common")) } } val androidMain by getting { dependsOn(commonMain) kotlin.srcDirs("src/jvmMain/kotlin") dependencies { api("androidx.appcompat:appcompat:1.4.1") implementation("androidx.activity:activity-compose:1.4.0") } } val desktopMain by getting { dependencies { implementation(compose.desktop.currentOs) } } val jsMain by getting { } val nativeMain by creating { dependsOn(commonMain) } val macosMain by creating { dependsOn(nativeMain) } val macosX64Main by getting { dependsOn(macosMain) } val macosArm64Main by getting { dependsOn(macosMain) } val uikitMain by creating { dependsOn(nativeMain) } val uikitX64Main by getting { dependsOn(uikitMain) } val uikitArm64Main by getting { dependsOn(uikitMain) } } } compose.desktop { application { mainClass = "Main_desktopKt" nativeDistributions { targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb) packageName = "Falling Balls" packageVersion = "1.0.0" windows { menuGroup = "Compose Examples" // see https://wixtoolset.org/documentation/manual/v3/howtos/general/generate_guids.html upgradeUuid = "18159995-d967-4CD2-8885-77BFA97CFA9F" } } } } compose.experimental { web.application {} uikit.application { bundleIdPrefix = "org.jetbrains" projectName = "FallingBalls" deployConfigurations { simulator("IPhone8") { //Usage: ./gradlew iosDeployIPhone8Debug device = IOSDevices.IPHONE_8 } simulator("IPad") { //Usage: ./gradlew iosDeployIPadDebug device = IOSDevices.IPAD_MINI_6th_Gen } connectedDevice("Device") { //First need specify your teamId here, or in local.properties (compose.ios.teamId=***) //teamId="***" //Usage: ./gradlew iosDeployDeviceRelease } } } } tasks.withType { kotlinOptions.jvmTarget = "11" } kotlin { targets.withType { binaries.all { // TODO: the current compose binary surprises LLVM, so disable checks for now. freeCompilerArgs += "-Xdisable-phases=VerifyBitcode" } } } compose.desktop.nativeApplication { targets(kotlin.targets.getByName("macosX64")) distributions { targetFormats(TargetFormat.Dmg) packageName = "FallingBalls" packageVersion = "1.0.0" } } // a temporary workaround for a bug in jsRun invocation - see https://youtrack.jetbrains.com/issue/KT-48273 afterEvaluate { rootProject.extensions.configure { versions.webpackDevServer.version = "4.0.0" versions.webpackCli.version = "4.9.0" nodeVersion = "16.0.0" } } // TODO: remove when https://youtrack.jetbrains.com/issue/KT-50778 fixed project.tasks.withType(org.jetbrains.kotlin.gradle.dsl.KotlinJsCompile::class.java).configureEach { kotlinOptions.freeCompilerArgs += listOf( "-Xir-dce-runtime-diagnostic=log" ) } android { compileSdk = 31 defaultConfig { minSdk = 21 targetSdk = 31 } compileOptions { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } sourceSets { named("main") { manifest.srcFile("src/androidMain/AndroidManifest.xml") res.srcDirs("src/androidMain/res", "src/commonMain/resources") } } }