diff --git a/GRADLE_PLUGIN.md b/GRADLE_PLUGIN.md index 58e981b8a74..7b5b32d312a 100644 --- a/GRADLE_PLUGIN.md +++ b/GRADLE_PLUGIN.md @@ -218,6 +218,41 @@ and set dependencies between building tasks. } ``` +## Multiplatform build + +Kotlin/Native, as well as Kotlin/JVM and Kotlin/JS, supports multiplatform projects. Such a support is included in the +Kotlin/Native Gradle plugin by default and there is no need to apply additional plugins to use it. By default +multiplatform support is turned off, and could be enabled with the `enableMultiplatform` DSL method: + + apply 'konan' + + konanArtifacts { + program('foo') { + enableMultiplatform true + } + } + +The Gradle plugin adds an `expectedBy` dependency configuration that is used to specify a dependency from Kotlin/Native +project to a common project: + + apply 'konan' + + dependencies { + expectedBy project('commonProject') + } + +When a common project is added as an `expectedBy` dependency, all the artifacts with the multiplatform support enabled +will use it's `main` source set as a common module. One may specify a custom source set for each artifact using the +`commonSourceSet` DSL method. In this case the multiplatform support will be also enabled for this artifact. + + konanArtifacts { + program('foo') { + commonSourceSet 'customSourceSet' + } + } + +See more about multiplatform projects [here](https://kotlinlang.org/docs/reference/multiplatform.html). + ## Tasks The Kotlin/Native plugin creates the following tasks: @@ -243,6 +278,8 @@ for each an artifact defined in a `konanArtifacts` block. Such a task may have d |`enableOptimizations`|`boolean` |Are the optimizations enabled | |`enableAssertions `|`boolean` |Is the assertion support enabled | |`measureTime `|`boolean` |Does the compiler print phase time | + |`enableMultiplatform`|`boolean` |Is multiplatform support enabled for this artifact | + |`commonSourceSet` |`String` |Name of a source set used as a common module | ##### Properties available for a cinterop task (task building an interoperability library): @@ -359,7 +396,7 @@ tables below. // Language and API version. konan.languageVersion = 'version' konan.apiVersion = 'version' - + konanArtifacts { // Targets to build this artifact for (optional, override the konan.targets list) program('foo', targets: ['android_arm32', 'android_arm64']) { @@ -532,3 +569,26 @@ tables below. } } +## Multiplatform DSL + + apply plugin: 'konan' + + // In this example common code is located in 'bar' source set of ':common' project. + + konanArtifacts { + // All the artifact types except interop libraries may use common modules. + program('foo') { + // All artifact settings described above are available here. + + // Enable multiplatform support for this artifact. + enableMultiplatform true + + // Set a custom name for a source set used as a common module. + commonSourceSet 'bar' + } + } + + dependencies { + // Use the ':foo' project as a common project for multiplatform build. + expectedBy project(':common') + } diff --git a/tools/kotlin-native-gradle-plugin/build.gradle b/tools/kotlin-native-gradle-plugin/build.gradle index ead7643ff64..6a6d171acd5 100644 --- a/tools/kotlin-native-gradle-plugin/build.gradle +++ b/tools/kotlin-native-gradle-plugin/build.gradle @@ -121,7 +121,7 @@ processResources { from(file("$rootBuildDirectory/utilities/env_blacklist")) } -// TODO: Get rid of manual pom generation +// TODO: Get rid of manual pom generation. publishing { publications { gradlePlugin(MavenPublication) {