Files
kotlin-fork/kotlin-native
Dmitriy Dolovov 60c88b010d [Native] Add missing dependencies to platform lib DEF files
There are a lot of cases when a DEF file for a K/N platform library
has incomplete set of dependencies in 'depends=' property in
the manifest file. This leads to use of "KLIB resolver" - the
component inside the compiler that is responsible for finding the
missing libraries and implicitly (i.e. invisibly for the end user)
adding them to the set of dependencies of the compiler invocation.

The goal of this commit is to fix 'depends=' in manifest files so that
they should reflect the REAL set of dependencies, and as a result don't
trigger use of "KLIB resolver". This way we could be more prepared to
removed in the "KLIB resolver" in the future.

^KT-61098
2023-11-15 19:38:25 +00:00
..
2023-02-01 15:13:34 +01:00
2023-10-02 10:13:56 +00:00
2023-11-14 09:47:25 +00:00
2023-11-14 17:34:27 +00:00
2023-10-02 10:13:56 +00:00
2022-10-04 16:26:45 +00:00

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.

Using published Kotlin/Native versions

The most complete experience with Kotlin/Native can be achieved by using Gradle, IntelliJ IDEA or Android Studio with KMM plugin if you target iOS.

If you are interested in using Kotlin/Native for iOS, then Kotlin Multiplatform Mobile portal might be useful for you.

Command line compiler is also available.

More information can be found in the overviews of Kotlin/Native and Kotlin Multiplatform.

On macOS Kotlin/Native requires Xcode 12.5 or newer.

Contributing

You can contribute to Kotlin/Native in many ways. See the relevant page on the website.

See also the general contribution guidelines for this repository.

Building from source

Prerequisites:

  • configure Kotlin build as specified in main readme
  • at the root directory of the repository, create local.properties file with kotlin.native.enabled=true line
  • macOS: Xcode 15.0 or newer
    • on MacOS aarch64, CInterop functionality is available only using aarch64 JDK builds, e.g. Eclipse Temurin 17.0.5 or Azul Zulu JDK8

      Note: using JDK x86_64 on MacOS aarch64 will cause java.lang.UnsatisfiedLinkError for libclang.dylib

  • Linux: glibc 2.23 or newer
  • Windows:
    • Microsoft C++ build tools for Visual Studio 2019 14.29. It might work with other VS2019 versions, but this was never tested.
    • Windows SDK 10.0.18362.0 or newer

The commands below should be run from either repository root or this (kotlin-native/) directory. For the latter, :kotlin-native: task name prefix can be omitted.

To compile the basic compiler distribution from sources, run following command:

./gradlew :kotlin-native:dist

It will build compiler and stdlib for host target, without platform libraries.

To get platform libraries, add distPlatformLibs task, e.g.

./gradlew :kotlin-native:dist :kotlin-native:distPlatformLibs

To run the full build:

./gradlew :kotlin-native:bundle

This will produce compiler and libraries for all supported targets. The full build can take about an hour on a Macbook Pro, but the duration can vary based on your system configuration.

After any of the commands above, ./dist will contain Kotlin/Native distribution. You can use it like a distribution of command-line compiler.

Or configure Gradle to use it -- just add the following line to gradle.properties in your Gradle project:

kotlin.native.home=/path/to/kotlin/kotlin-native/dist

To compile your programs with command-line compiler, use:

./dist/bin/kotlinc-native hello.kt -o hello

For an optimized compilation, use -opt:

./dist/bin/kotlinc-native hello.kt -o hello -opt

Interoperability

To import a C or Objective-C library, use ./dist/bin/cinterop tool. See the documentation for more details.

Note: on MacOS aarch64, JDK aarch64 is required

Running tests

For tests, use ./gradlew :native:native.tests:codegenBoxTest and ./gradlew :kotlin-native:backend.native:tests:run.

Note: on MacOS aarch64, for target-specific tests, JDK aarch64 is required

For more details see Testing.

More tips and tricks

More tips and tricks that might be useful when developing or debugging Kotlin/Native can be found in HACKING.md