diff --git a/GRADLE_PLUGIN.md b/GRADLE_PLUGIN.md
index b83a1297b7f..75b6be93a98 100644
--- a/GRADLE_PLUGIN.md
+++ b/GRADLE_PLUGIN.md
@@ -1,36 +1,16 @@
# Kotlin/Native Gradle plugin
-_Note: For the experimental DSL see the [corresponding section](#experimental-plugin)_.
+### Overview
-## Overview
-
-You may use the Gradle plugin to build _Kotlin/Native_ projects. Since version 0.8 release builds of the plugin are
-[available](https://plugins.gradle.org/plugin/org.jetbrains.kotlin.konan) at the Gradle plugin portal, so you can apply it
+You may use the Gradle plugin to build _Kotlin/Native_ projects. Builds of the plugin are
+[available](https://plugins.gradle.org/plugin/org.jetbrains.kotlin.platform.native) at the Gradle plugin portal, so you can apply it
using Gradle plugin DSL:
```groovy
plugins {
- id "org.jetbrains.kotlin.konan" version "0.9"
-}
-```
-
-
-
-__Note__: The 0.9 version of Kotlin/Native is based on Kotlin 1.3-M1 which is an EAP version and isn't available on
-the plugin portal. In this case you need to add a Kotlin EAP repository in your `settings.gradle`:
-
-
-
-```groovy
-pluginManagement {
- repositories {
- gradlePluginPortal()
- maven {
- url = 'https://dl.bintray.com/kotlin/kotlin-eap'
- }
- }
+ id "org.jetbrains.kotlin.platform.native" version "1.3.0-rc-146"
}
```
@@ -49,25 +29,18 @@ buildscript {
maven {
url "https://dl.bintray.com/jetbrains/kotlin-native-dependencies"
}
- maven {
- url "https://dl.bintray.com/kotlin/kotlin-eap"
- }
}
dependencies {
- classpath "org.jetbrains.kotlin:kotlin-native-gradle-plugin:0.8-dev-*"
+ classpath "org.jetbrains.kotlin:kotlin-native-gradle-plugin:1.3.0-rc-146"
}
}
-apply plugin: 'konan'
+apply plugin: 'org.jetbrains.kotlin.platform.native'
```
-The Kotlin/Native plugin depends on `org.jetbrains.kotlin:kotlin-gradle-plugin`. So if a build contains both these
-plugins as buildscript dependencies, it's recommended to **declare them in the same `build.gradle`** to avoid issues with
-plugin classpath.
-
By default the plugin downloads the Kotlin/Native compiler during the first run. If you have already downloaded the compiler
manually you can specify the path to its root directory using `konan.home` project property (e.g. in `gradle.properties`).
@@ -81,769 +54,13 @@ konan.home=/home/user/kotlin-native-0.8
In this case the compiler will not be downloaded by the plugin.
-## Building artifacts
-
-The Kotlin/Native Gradle plugin allows building artifacts of the following types:
-
-* Executable
-* KLibrary - a library used by Kotlin/Native compiler (`*.klib`)
-* Interoperability library - a special type of library providing an interoperability with some native API. See [INTEROP.md](INTEROP.md) for details
-* Dynamic library (`*.so`/`*.dylib`/`*.dll`)
-* Objective-C framework
-* LLVM bitcode
-
-All Kotlin/Native artifacts should be declared in the `konanArtifacts` block. Note that the `konanInterop` script block was removed in
-v0.3.4. Use the `interop` method of the `konanArtifact` block instead:
-
-
-
-
-```groovy
-konanArtifacts {
- program('foo') // executable 'foo'
- library('bar') // library 'bar'
- bitcode('baz') // bitcode file 'baz'
- interop('qux') // interoperability library 'qux'. Use it instead of konanInterop block.
- dynamic('quux') // dynamic library
- framework ('quuux') // Objective-C framework
-}
-```
-
-
-
-All artifacts except interop libraries are built by the Kotlin/Native compiler. Such an artifact may be configured using its script block.
-It is here that you can specify source directories, used libraries, and compilation flags (see [**Plugin DSL**](#plugin-dsl) section for details). The plugin
-uses `src/main/kotlin/` as a default source directory for all compiler artifacts:
-
-
-
-```groovy
-konanArtifacts {
- // Build foo.klib
- library('foo') {
- srcDir 'src/foo/kotlin' // Use custom source path
- }
-
- // Build executable 'bar'
- program('bar') {
- // The default source path is used (src/main/kotlin)
-
- // Optimize the output code
- enableOptimizations true
-
- libraries {
- // Use foo.klib as a library
- artifact 'foo'
- }
- }
-}
-```
-
-
-
-Interop libraries are built using the `cinterop` tool. They also may have configuration blocks but the options available in these blocks
-differ from ones available for compiler artifacts. The input for such an artifact is a def-file describing a native API. By default the
-def-file path is `src/main/c_interop/.def` but it may be changed using the `defFile` method of the configuration block of
-an interoperability library:
-
-
-
-```groovy
-konanArtifacts {
- // Interoperability library stdio.klib
- // Use the default def-file path: src/main/c_interop/stdio.def
- interop('stdio')
-
- // Interoperability library openal.klib
- interop('openal') {
- defFile 'src/openal/openal.def'
- }
-
- program('main') {
- libraries {
- // Link with stdio.klib
- artifact 'stdio'
- }
- }
-}
-```
-
-
-
-## Building for different targets
-
-All the artifacts declared in a project may be built for different targets. By default they are built only for the `host` target i.e. a
-computer used for building. One may change the default target list using the `konan.targets` project extension:
-
-
-
-```groovy
-konan.targets = [ 'linux', 'android_arm64', 'android_arm32' ]
-```
-
-
-
-One may specify a custom target set for each particular artifact using the `targets` parameter of an artifact declaration:
-
-
-
-```groovy
-konan.targets = [ 'linux', 'android_arm64' ]
-
-konanArtifacts {
- // This artifact has no custom targets and will be built
- // for all the default ones: 'linux', 'android_arm64'
- program('foo') { /* ... */ }
-
- // This artifact will be built only for Linux and Wasm32
- program('bar', targets: ['linux', 'wasm32']) { /* ... */ }
-
- // An Objective-C framework cannot be built for Linux and Wasm32 thus
- // these targets will be skipped and the artifact will be built only for iOS
- framework('baz', targets: [ 'linux', 'wasm32', 'iphone' ]) { /* ... */ }
-}
-```
-
-
-
-
-The plugin creates tasks to compile each artifact for all the targets supported by the current host and declared in the `konan.targets` list.
-You can perform additional configuration for a target using the `target` method of an artifact configuration block:
-
-
-
-```groovy
-konan.targets = [ 'linux', 'macbook', 'wasm32' ]
-
-konanArtifacts {
- program('foo') {
- // This source file is used for all targets
- srcFiles 'common.kt'
-
- target('linux') {
- // For Linux common.kt and linux.kt will be compiled
- srcFiles 'linux.kt'
- }
-
- target('macbook') {
- // For MacOS common.kt and macbook.kt will be compiled
- srcFiles 'macbook.kt'
- }
-
- // Only common.kt will be compiled for wasm32
- }
-}
-```
-
-
-
-One may access to a task for some target via artifact methods or properties:
-
-
-
-```groovy
-// Both of them return a task building artifact 'foo' for MacOS
-konanArtifacts.foo.getByTarget("macbook")
-konanArtifacts.foo.macbook
-```
-
-
-
-## Using libraries
-
-You can specify used libraries for artifacts of all types using the `libraries` script block:
-
-
-
-```groovy
-program('foo') {
- libraries {
- // configure the libraries used
- }
-}
-```
-
-
-
-There are several ways to describe a library used by an artifact:
-
-* Specify a library file directly. You can specify it using the `file` method of the `libraries` script block. All the objects accepted by
-the [`Project.file`](https://docs.gradle.org/current/dsl/org.gradle.api.Project.html#org.gradle.api.Project:file(java.lang.Object))
-method may be passed there:
-
-
-
- ```groovy
- libraries {
- file 'libs/foo.klib'
- files 'lib1.klib', 'lib2.klib'
- }
- ```
-
-
-
-* Specify a Kotlin/Native artifact object or its name. In this case the plugin automatically chooses a library with the correct target
-and sets dependencies between building tasks.
-
-
-
- ```groovy
- libraries {
- // Artifact object or just its name may be used
- artifact 'foo'
- artifact kotlinArtifacts.bar
-
- // Artifacts from other projects are also allowed
- artifact project(':bazProject'), 'bazLibrary'
-
- // Interopability libraries are also allowed
- // Use it instead of the `useInterop` method available in versions before 0.3.4
- artifact 'stdio'
- }
- ```
-
-
-
-* Specify a project containing libraries. In this case all libraries built by the project specified will be used:
-
-
-
- ```groovy
- libraries {
- allLibrariesFrom project(':subproject')
-
- // If we need only interoperability libraries
- allInteropLibrariesFrom project(':interop')
- }
- ```
-
-
-
-* Specify only the name of a library. In this case the compiler will look for the library in its repositories.
-
-
-
- ```groovy
- libraries {
- klib 'foo'
- klibs 'lib1', 'lib2'
-
- // One may specify additional repositories
- // All objects accepted by the Project.file method may be used here
- useRepo 'build/libraries'
- }
- ```
-
-
-
-## Multiplatform build
-
-Kotlin/Native, Kotlin/JVM, and Kotlin/JS, support multiplatform projects. Such support is included in the
-Kotlin/Native Gradle plugin by default and there is no need to apply any additional plugins to use it. By default
-multiplatform support is turned off, and can be enabled with the `enableMultiplatform` DSL method:
-
-
-
-```groovy
-apply 'konan'
-
-konanArtifacts {
- program('foo') {
- enableMultiplatform true
- }
-}
-```
-
-
-
-The Gradle plugin adds an `expectedBy` dependency configuration that is used to specify a dependency from a Kotlin/Native
-project to a common project:
-
-
-
-```groovy
-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 its `main` source set as a common module. One may specify custom source sets for each artifact using the
-`commonSourceSets` DSL method. In this case the multiplatform support will be also enabled for this artifact.
-
-
-
-```groovy
-konanArtifacts {
- program('foo') {
- commonSourceSets 'customSourceSet', 'anotherCustomSourceSet'
- }
-}
-```
-
-
-
-
-See more about multiplatform projects [here](https://kotlinlang.org/docs/reference/multiplatform.html).
-
-## Tasks
-
-The Kotlin/Native plugin creates the following tasks:
-
-* __compileKonan\\__. The plugin creates a task for each target declared in the `konan.targets` list and
-for each an artifact is defined in a `konanArtifacts` block. Such a task may have different properties depending on the artifact type:
-
- **Properties available for a compiler task (executable, library or bitcode building task):**
-
- |Property |Type |Description |
- |---------------------|----------------------------|----------------------------------------------------------|
- |`target `|`String` |Target the artifact is built for. Read only |
- |`artifactName `|`String` |Base name for the output file (without an extension) |
- |`destinationDir `|`File` |Directory to place the output artifact |
- |`artifact `|`File` |The output artifact. Read only |
- |`headerFile `|`File` |The output C header. Only for dynamic libraries, read only|
- |`srcFiles `|`Collection`|Compiled files |
- |`nativeLibraries `|`Collection`|*.bc libraries used by the artifact |
- |`linkerOpts `|`List` |Additional options passed to the linker |
- |`enableDebug `|`boolean` |Is the debugging support enabled |
- |`noStdLib `|`boolean` |Is the artifact not linked with stdlib |
- |`noMain `|`boolean` |Is the `main` function provided by a library used |
- |`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 |
- |`commonSourceSets` |`Collection` |Names of source sets used as a common module |
-
- **Properties available for a cinterop task (task building an interoperability library):**
-
- |Property |Type |Description |
- |----------------|----------------------------|---------------------------------------------------------|
- |`target `|`String` |Target the artifact is built for. Read only. |
- |`artifactName `|`String` |Base name for the output file (without an extension) |
- |`destinationDir`|`File` |Directory to place the output artifact |
- |`artifact `|`File` |The output artifact. Read only. |
- |`defFile `|`File` |Def-file used by the interop |
- |`compilerOpts `|`List` |Additional options passed to clang |
- |`linkerOpts `|`List` |Additional options passed to a linker |
- |`headers `|`Collection`|Additional headers used for stub generation |
- |`linkFiles `|`Collection`|Additional files linked with the stubs |
-
-
-* __compileKonan\__. Aggregate task allowing you to build an artifact for several targets. By default it builds
-the artifact for all the supported targets declared for the project. You can change this behavior by specifying the space-separated
-target list in the `konan.build.targets` project property:
-
-
-
- ```bash
- ./gradlew compileKonanFoo -Pkonan.build.targets='android_arm32 android_arm64'
- ```
-
-
-
- The task has no properties to use by a build script.
-
-* __compileKonan__. Aggregate task to build all the Kotlin/Native artifacts for all available targets. `konan.build.targets` project
-property also may be used to override the target list. The task has no properties that can be used by a build script.
-
-* __run\__. Such a task is created for each executable supported by the current host and allows you to run this
-executable. The task is an instance of Gradle's [`Exec`](https://docs.gradle.org/current/dsl/org.gradle.api.tasks.Exec.html)
-so it supports all the settings provided by `Exec`. Additionally, run parameters may be passed to the task using the `runArgs`
-project property:
-
-
-
- ```bash
- ./gradlew runFoo -PrunArgs='foo bar'
- ```
-
-
-
-
-The plugin also edits the default `build` and `clean` tasks so that the first one allows you to build all the artifacts supported
-(it's dependent on the `compileKonan` task) and the second one removes the files created by the Kotlin/Native build.
-
-## Building dynamic libraries and frameworks
-
-Kotlin/Native supports building artifacts to be used by other native languages. There are two types of such artifacts:
-Objective-C framework and dynamic library.
-
-### Dynamic library
-
-A dynamic library may be built using the `dynamic` artifact block. This block contains the same
-options as the other ones (except `interop`) allowing you to specify source files, compiler options, and the libraries used.
-Each task building a dynamic library produces two files: the library itself (a `*.so`/`*.dylib`/`*.dll` file depending
-on the target platform) and a C language header. Both of them may be accessed via properties of a building task
-(both properties have type `File`):
-
-
-
-```groovy
-konanArtifacts {
- // Build a dynamic library
- dynamic('foo') { /* ... */ }
-}
-
-konanArtifacts.foo.getByTarget('host').artifact // Points to the library file
-konanArtifacts.foo.getByTarget('host').headerFile // Points to the header file
-```
-
-
-
-Using a dynamic library is shown in the [python extension sample](https://github.com/JetBrains/kotlin-native/tree/master/samples/python_extension).
-
-### Framework
-
-An Objective-C framework can be built using the `framework` artifact block. This block contains the
-same options as other ones. One may access the framework built using `artifact` property of the building task
-(see the [**Tasks**](#tasks) section). Unlike other artifacts this property points to a directory instead of a regular file.
-
-
-
-```groovy
-konanArtifacts {
- // Build an Objective-C framework
- framework('foo') { /* ... */ }
-}
-
-konanArtifacts.foo.getByTarget('host').artifact // Points to the framework directory
-```
-
-
-
-Using a framework is shown in the [calculator sample](https://github.com/JetBrains/kotlin-native/tree/master/samples/calculator).
-
-## Additional options
-
-You can also pass additional command line keys to the compiler or cinterop tool using the `extraOpts` expression
-available in the artifact configuration script block. For example this sample enables a verbose output for a link and bitcode
-generation stages and prints the execution time for all the compiler phases:
-
-
-
-```groovy
-konanArtifacts {
- program('foo') {
- extraOpts '--verbose', 'linker', '--verbose', 'bitcode', '--time'
- }
-}
-```
-
-
-
-Any command line key supported by the according tool (compiler or cinterop) can be used. Some of them are listed in the
-tables below.
-
-##### Compiler additional options
-
-|Key |Description |
-|-------------------|-----------------------------------------|
-|`--disable `|Disable backend phase |
-|`--enable `|Enable backend phase |
-|`--list_phases `|List all backend phases |
-|`--time `|Report execution time for compiler phases|
-|`--verbose `|Trace phase execution |
-|`-verbose `|Enable verbose logging output |
-
-##### Cinterop additional options
-
-|Key |Description |
-|--------------------|----------------------------------------------------|
-|`-verbose `|Increase verbosity |
-|`-shims ` |Add generation of shims tracing native library calls|
-
-## Plugin DSL
-
-
-
-```groovy
-// Default targets to build for.
-konan.targets = ['macbook', 'linux', 'wasm32']
-
-// 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']) {
-
- // Directory with source files. The default path is src/main/kotlin.
- srcDir 'src/other'
-
- // Source files.
- srcFiles project.fileTree('src')
- srcFiles 'foo.kt', 'bar.kt'
-
- // Custom output artifact name (without extension).
- // The default is a name of the artifact
- artifactName 'customName'
-
- // Base Directory for the output artifacts.
- // Separate subdirectories for each target will be created
- // The default is build/konan/bin
- baseDir 'path/to/output/dir'
-
- libraries {
- // Library files
- file 'foo.klib'
- files 'file1.klib', file2.klib
- files project.files('file3.klib', 'file4.klib')
-
- // An artifact from the current project
- artifact konanArtifacts.bar
- artifact 'baz'
-
- // An artifact from another project
- artifact project(':path:to:a:project'), 'artifactName'
-
- // All libraries from another project
- allLibrariesFrom project(':some:project')
-
- // Only interoperability libraries from another project
- allInteropLibrariesFrom project(':some:interop:project')
-
- // Named libraries for search in repositories
- klib 'foo'
- klib 'bar', 'baz'
-
- // Custom repository paths
- useRepo 'path/to/a/repo'
- useRepos 'another/repo/1', 'another/repo/2'
-
- }
-
- // A native library (*.bc) for linking.
- nativeLibrary project.file('path/to/native/library.bc')
- nativeLibraries 'library1.bc', 'library2.bc'
-
- noStdLib true // Don't link with stdlib (true/false).
- enableOptimizations true // Enable compiler optimizations (true/false).
- enableAssertions true // Enable assertions in binaries generated (true/false).
- enableDebug true // Enable debugging for binaries generated (true/false).
- noDefaultLibs true // Don't link with default libraries
-
- // Custom entry point
- entryPoint 'org.demo.foo'
-
- // Arguments to be passed to a linker.
- linkerOpts 'Some linker option', 'More linker options'
-
- // Print all parameters during the build.
- dumpParameters true
-
- // Print time of compilation phases (equivalent of the `--time` command line option).
- measureTime true
-
- // Add the `anotherTask` to the compilation task dependencies.
- dependsOn anotherTask
-
- // Pass additional command line options to the compiler.
- extraOpts '--time', '--verbose', 'linker'
-
- // Additional configuration for Linux.
- target('linux') {
- // Exact output directory for a file compile for the given target
- // The default is
/
- destinationDir 'exact/output/path'
-
- // Also all options described for this artifact above are available here.
- }
- }
-
- library('bar') {
- // Library has the same parameters as an executable
- // The default baseDir is build/konan/libs
- }
-
- bitcode('baz') {
- // Bitcode has the same parameters as an executable
- // The default baseDir is build/konan/bitcode
- }
-
- dynamic('quux') {
- // Dynamic library has the same parameters as an executable
- // The default baseDir is build/konan/bin
- }
-
- framework('quuux') {
- // Framework has the same parameters as an executable
- // The default baseDir is build/konan/bin
- }
-
- interop('qux') {
- // Def-file describing the native API.
- // The default path is src/main/c_interop/.def
- defFile project.file("deffile.def")
-
- // Custom output artifact name (without extension).
- // The default is a name of the artifact
- artifactName 'customName'
-
- // Base Directory for the output artifacts.
- // Separate subdirectories for each target will be created
- // The default is build/konan/libs
- baseDir 'path/to/output/dir'
-
- // Package to place the Kotlin API generated.
- packageName 'org.sample'
-
- libraries {
- // All library options from the executable example above are available here.
- }
-
- // Options to be passed to compiler and linker by cinterop tool.
- compilerOpts 'Options for native stubs compilation'
- linkerOpts 'Options for native stubs'
-
- // Additional headers to parse.
- headers project.files('header1.h', 'header2.h')
-
- // Directories to look for headers.
- includeDirs {
- // All objects accepted by the Project.file method may be used with both options.
-
- // Directories for header search (an analogue of the -I compiler option).
- allHeaders 'path1', 'path2'
-
- // Additional directories to search headers listed in the 'headerFilter' def-file option.
- // -headerFilterAdditionalSearchPrefix command line option analogue.
- headerFilterOnly 'path1', 'path2'
- }
- // A shortcut for includeDirs.allHeaders.
- includeDirs "include/directory" "another/directory"
-
- // Additional files to link with native stubs.
- link
-
- // Print all parameters during the build.
- dumpParameters true
-
- // Add the `anotherTask` to the stub generation task dependencies.
- dependsOn anotherTask
-
- // Pass additional command line options to the cinterop tool.
- extraOpts '-shims', 'true'
-
- // Additional configuration for Linux.
- target('linux') {
- // Exact output directory for a file compile for the given target
- // The default is /
- destinationDir 'exact/output/path'
-
- // Also all options described for this artifact above are available here.
- }
- }
-}
-
-```
-
-
-
-
-## Multiplatform DSL
-
-
-
-```groovy
-apply plugin: 'konan'
-
-// In this example common code is located in 'foo' and 'bar' source sets 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 names for source sets used as a common module.
- // The default source set is 'main'
- commonSourceSets 'foo', 'bar'
- }
-}
-
-dependencies {
- // Use the ':foo' project as a common project for multiplatform build.
- expectedBy project(':common')
-}
-```
-
-
-
-## Publishing to Maven
-
-Publishing the Kotlin/Native artifacts depends on mechanisms which were introduced in Gradle Native support, e.g. Gradle's
-metadata feature. So some additional steps are required. First of all, the gradle version shouldn't be less
-than the gradle version of kotlin native plugin that it depends on (currently Gradle 4.7). Before Gradle 5.0, the feature
-[GRADLE_METADATA](https://github.com/gradle/gradle/blob/master/subprojects/docs/src/docs/design/gradle-module-metadata-specification.md)
-should be enabled for the build. e.g. in settings.gradle
-
-
-
-```groovy
-enableFeaturePreview('GRADLE_METADATA')
-```
-
-
-
-
-Some Maven repositories require some declarations in the `pom` files, that should be present in all auxiliary `pom` files (
-platform x build types). To meet this requirement the Kotlin/Native plugin has the following syntax to do it:
-
-
-
-```groovy
-konanArtifacts {
- interop('libcurl') {
- target('linux') {
- includeDirs.headerFilterOnly '/usr/include'
- }
- target('macbook') {
- includeDirs.headerFilterOnly '/opt/local/include', '/usr/local/include'
- }
- pom {
- withXml {
- def root = asNode()
- root.appendNode('name', 'libcurl interop library')
- root.appendNode('description', 'A library providing interoperability with host libcurl')
- }
- }
- }
-}
-```
-
-
-
- In this example `name` and `description` tags will be added to each generated `pom` file for _libcurl_ published artifact.
-
-## Experimental plugin
-
-
-In the version 0.8 a new experimental plugin has been introduced. It is integrated with new Gradle support
-for native languages and provides a new DSL which is much closer to the DSL of Kotlin/JVM and Kotlin/JS
-plugins than the old one.
-The plugin is available at the Gradle plugin portal:
-
-
-
-```groovy
-plugins {
- id "org.jetbrains.kotlin.platform.native" version "0.9"
-}
-```
-
-
-
-
### Source management
-Source management in the `kotlin.platform.native` plugin is uniform with other Kotlin plugins and is based on source sets. A source set is a group of Kotlin/Native source which may contain both common and platform-specific code. The plugin provides a top-level script block `sourceSets` allowing you to configure source sets. Also it creates the default source sets `main` and `test` (for production and test code respectively).
+Source management in the `kotlin.platform.native` plugin is uniform with other Kotlin plugins and is based on source sets.
+A source set is a group of Kotlin/Native source which may contain both common and platform-specific code. The plugin
+provides a top-level script block `sourceSets` allowing you to configure source sets. Also it creates the default
+source sets `main` and `test` (for production and test code respectively).
+
By default the production sources are located in `src/main/kotlin` and the test sources - in `src/test/kotlin`.
@@ -862,7 +79,8 @@ sourceSets {
### Targets and output kinds
-By default the plugin creates software components for the main and test source sets. You can access them via the `components` container provided by Gradle or via the `component` property of a corresponding source set:
+By default the plugin creates software components for the main and test source sets. You can access them via the
+`components` container provided by Gradle or via the `component` property of a corresponding source set:
@@ -921,7 +139,9 @@ The plugin supports producing binaries of the following kinds:
* `DYNAMIC` - shared native library;
* `STATIC` - static native library.
-Also each binary is built in two variants (build types): `debug` (debuggable, not optimized) and `release` (not debuggable, optimized).
+Also each native binary is built in two variants (build types): `debug` (debuggable, not optimized) and `release` (not debuggable, optimized).
+Note that Kotlin/Native libraries have only `debug` variant because optimizations are preformed only during compilation
+of a final binary (executable, static lib etc) and affect all libraries used to build it.
### Compile tasks
@@ -1000,7 +220,7 @@ dependencies {
-`implementation`-dependencies are also available in the component block:
+Dependency declaraion is also possible in the component block:
@@ -1013,7 +233,7 @@ components.main {
components.test {
dependencies {
- implementation org.sample.test:testlibrary:1.0'
+ implementation 'org.sample.test:testlibrary:1.0'
}
}
```
@@ -1023,7 +243,7 @@ components.test {
### Using cinterop
-It's possible to declare a cinterop dependency for a component. The DSL here is similar to the one used in the `konan` plugin:
+It's possible to declare a cinterop dependency for a component:
@@ -1064,7 +284,7 @@ components.main {
-Also the `allTargets` block is available
+Also the `allTargets` block is available.
@@ -1127,7 +347,7 @@ See also the example projects that use this plugin, e.g.
```groovy
plugins {
- id "org.jetbrains.kotlin.platform.native" version "0.9"
+ id "org.jetbrains.kotlin.platform.native" version "1.3.0-rc-146"
}
sourceSets.main {