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 { kotlin("multiplatform") version "1.6.21" id("org.jetbrains.compose") version "1.2.0-alpha01-dev716" } version = "1.0-SNAPSHOT" repositories { mavenLocal() mavenCentral() maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") google() } kotlin { 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")) } } val desktopMain by getting { dependencies { implementation(compose.desktop.currentOs) } } val jsMain by getting { dependencies { implementation(compose.web.core) } } 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 = "Minesweeper" packageVersion = "1.0.0" windows { menuGroup = "Compose Examples" // see https://wixtoolset.org/documentation/manual/v3/howtos/general/generate_guids.html upgradeUuid = "2bf169f9-d851-49f0-b3a1-308966d473ca" } } } } compose.experimental { web.application {} uikit.application { bundleIdPrefix = "org.jetbrains" projectName = "ComposeMinesweeper" deployConfigurations { simulator("IPhone8") { //Usage: ./gradlew iosDeployIPhone8Debug device = IOSDevices.IPHONE_8 } simulator("IPad") { //Usage: ./gradlew iosDeployIPadDebug device = IOSDevices.IPAD_MINI_6th_Gen } // connectedDevice("Device") { //todo lazy init (compose.ios.teamId=*** in local.properties) //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" } } } // 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" } }