Files
kotlin-fork/kotlin-native
Ilya Matveev e56ac775ca [K/N][tests] Do not propagate user.dir property to compiler/cinterop
In a Gradle process, the user.dir property is set to the directory
where the build was started. By default, if we start a child process
via project.javaexec, Gradle sets its working directory to the
directory of the current project. But passing Gradle's value of user.dir
to that process overrides this setting.

This makes tools started in a such way sensitive to directory the build
is started from. Thus a test using relative paths may fail if it is
started from a wrong directory.

This patch fixes this issue for Kotlin/Native tests.
2021-03-26 12:38:27 +03:00
..
2021-03-24 17:37:50 +03: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 11 or newer.

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
  • on macOS install Xcode 12 or newer
  • on Fedora 26+ yum install ncurses-compat-libs may be needed
  • on recent Ubuntu apt install libncurses5 is needed

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.

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.

Running tests

For tests, use:

./gradlew :kotlin-native:backend.native:tests:run