@@ -3,8 +3,10 @@ package io.github.gciatto.kt.mpp
33import org.gradle.api.Project
44import org.gradle.api.logging.LogLevel
55import org.gradle.kotlin.dsl.apply
6+ import org.gradle.kotlin.dsl.get
67import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
78import org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler
9+ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
810import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsTargetDsl
911import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
1012
@@ -17,6 +19,7 @@ class MultiplatformPlugin : AbstractKotlinProjectPlugin("multiplatform") {
1719 configureNodeVersionFromCatalogIfPossible()
1820 val ktTargetJvmDisable = getBooleanProperty(" ktTargetJvmDisable" )
1921 val ktTargetJsDisable = getBooleanProperty(" ktTargetJsDisable" )
22+ val ktTargetNativeDisable = getBooleanProperty(" ktTargetNativeDisable" )
2023 configure(KotlinMultiplatformExtension ::class ) {
2124 if (ktTargetJvmDisable) {
2225 log(" disable JVM target" , LogLevel .WARN )
@@ -28,6 +31,11 @@ class MultiplatformPlugin : AbstractKotlinProjectPlugin("multiplatform") {
2831 } else {
2932 js { configureJs() }
3033 }
34+ if (ktTargetNativeDisable) {
35+ log(" disable Native target" , LogLevel .WARN )
36+ } else {
37+ configureNative()
38+ }
3139 dependenciesFor(" commonMain" ) {
3240 addMainDependencies(project, " common" , skipBom = false )
3341 }
@@ -46,7 +54,7 @@ class MultiplatformPlugin : AbstractKotlinProjectPlugin("multiplatform") {
4654
4755 private fun KotlinMultiplatformExtension.dependenciesFor (
4856 sourceSet : String ,
49- action : KotlinDependencyHandler .() -> Unit
57+ action : KotlinDependencyHandler .() -> Unit ,
5058 ) = sourceSets.getByName(sourceSet).dependencies(action)
5159
5260 context(Project , KotlinMultiplatformExtension )
@@ -82,6 +90,29 @@ class MultiplatformPlugin : AbstractKotlinProjectPlugin("multiplatform") {
8290 }
8391 }
8492
93+ private fun KotlinMultiplatformExtension.configureNative () {
94+ // TODO: Setup nativeMain and nativeTest source sets
95+ val nativeSetup: KotlinNativeTarget .() -> Unit = {
96+ compilations[" main" ].defaultSourceSet.dependsOn(sourceSets[" nativeMain" ])
97+ compilations[" test" ].defaultSourceSet.dependsOn(sourceSets[" nativeTest" ])
98+ binaries {
99+ sharedLib()
100+ staticLib()
101+ }
102+ }
103+ // TODO: enable selectively the targets based on properties
104+ linuxX64(nativeSetup)
105+ linuxArm64(nativeSetup)
106+
107+ mingwX64(nativeSetup)
108+
109+ macosX64(nativeSetup)
110+ macosArm64(nativeSetup)
111+ ios(nativeSetup)
112+ watchos(nativeSetup)
113+ tvos(nativeSetup)
114+ }
115+
85116 override fun PropertiesHelperExtension.declareProperties () {
86117 addProperty(allWarningsAsErrors)
87118 addProperty(ktCompilerArgs)
@@ -90,6 +121,7 @@ class MultiplatformPlugin : AbstractKotlinProjectPlugin("multiplatform") {
90121 addProperty(mochaTimeout)
91122 addProperty(ktTargetJvmDisable)
92123 addProperty(ktTargetJsDisable)
124+ addProperty(ktTargetNativeDisable)
93125 addProperty(versionsFromCatalog)
94126 addProperty(nodeVersion)
95127 }
0 commit comments