konanArtifacts extension
Because `KonanArtifactContainer` inherits from Gradle's `DefaultPolymorphicDomainObjectContainer`, it inherits its implementation of [`HasPublicType`](https://github.com/gradle/gradle/blob/283a513257628b93a0b092f78385e2b42fec6da3/subprojects/model-core/src/main/java/org/gradle/api/reflect/HasPublicType.java#L29). This default implementation tells Gradle to expose the extension as a `NamedDomainObjectContainer<ElementType>` where `ElementType` is inferred in a best-effort manner. This means that any additional members of `KonanArtifactContainer` wouldn't be easily accessible in a Gradle Kotlin build script. This commit explicitly declares the public extension type to be `KonanArtifactContainer` by using the appropriate [`ExtensionContainer#create` overload](https://docs.gradle.org/current/javadoc/org/gradle/api/plugins/ExtensionContainer.html#create(java.lang.Class,%20java.lang.String,%20java.lang.Class,%20java.lang.Object...)).
Kotlin/Native
Kotlin/Native is an LLVM backend for the Kotlin compiler, runtime implementation, and native code generation facility using the LLVM toolchain.
Kotlin/Native is primarily designed to allow compilation for platforms where virtual machines are not desirable or possible (such as iOS or embedded targets), or where a developer is willing to produce a reasonably-sized self-contained program without the need to ship an additional execution runtime.
Prerequisites:
install JDK for your platform, instead of JRE. The build requires tools.jar, which is not included in JRE.
To compile from sources use following steps:
First, download dependencies:
./gradlew dependencies:update
Then, build the compiler and libraries:
./gradlew bundle
The build can take about an hour on a Macbook Pro. To run a shorter build with only the host compiler and libraries, run:
./gradlew dist distPlatformLibs
After that, you should be able to compile your programs like this:
export PATH=./dist/bin:$PATH
kotlinc hello.kt -o hello
For an optimized compilation, use -opt:
kotlinc hello.kt -o hello -opt
For tests, use:
./gradlew backend.native:tests:run
To generate interoperability stubs, create a library definition file
(refer to samples/tetris/.../sdl.def), and run the cinterop tool like this:
cinterop -def lib.def
See the provided samples and INTEROP.md for more details.
The Interop tool generates a library in the .klib library format. See LIBRARIES.md
for more details on this file format.