Kotlin/Native で Hello World してみます。
Kotlin なので IDEA を使いましょう。
Plugin 最新化
Kotlin Plugin を最新化しておきます。

Update ボタンで更新。プラグインのインストールが終わると再起動を求められる。

Restart IntelliJ IDEA で再起動。
プロジェクトの作成
Create New Project で Kotlin/Native を選択。

Next

Java 11 だと Gradle のビルドでエラー(sun.misc.Unsafe が変更された影響がここにも)になるので、ここでは GradleJVM は 1.8 を選択。

hello として Finish。
プロジェクト構成
以下のような感じになる。

Gradle タスクの runMainReleaseExecutableMacos を実行すると実行可能ファイルが作成される(初回はそれなりに時間がかかる)。

ビルド成功すれば main.kexe ができてるのでそのまま実行できる。
$ ./build/bin/macos/mainReleaseExecutable/main.kexe Hello, Kotlin/Native!
サンプルソース
プラグインが生成するデフォルトのサンプルソースは以下のようになっている。
package sample fun hello(): String = "Hello, Kotlin/Native!" fun main() { println(hello()) }
テストコードは以下の感じ。
package sample import kotlin.test.Test import kotlin.test.assertTrue class SampleTests { @Test fun testHello() { assertTrue("Kotlin/Native" in hello()) } }
build.gradle は以下。
plugins {
id 'kotlin-multiplatform' version '1.3.21'
}
repositories {
mavenCentral()
}
kotlin {
// For ARM, should be changed to iosArm32 or iosArm64
// For Linux, should be changed to e.g. linuxX64
// For MacOS, should be changed to e.g. macosX64
// For Windows, should be changed to e.g. mingwX64
macosX64("macos") {
compilations.main {
// Comment to generate Kotlin/Native library (KLIB) instead of executable file:
outputKinds("executable")
// Change to specify fully qualified name of your application's entry point:
entryPoint 'sample.main'
}
}
sourceSets {
// Note: To enable common source sets please comment out 'kotlin.import.noCommonSourceSets' property
// in gradle.properties file and re-import your project in IDE.
macosMain {
}
macosTest {
}
}
}
task runProgram {
def buildType = 'RELEASE' // Change to 'DEBUG' to run application with debug symbols.
dependsOn kotlin.targets.macos.compilations.main.linkTaskName('EXECUTABLE', buildType)
doLast {
def programFile = kotlin.targets.macos.compilations.main.getBinary('EXECUTABLE', buildType)
exec {
executable programFile
args ''
}
}
}
まとめ
最近の流れ通り Kotlin コンパイラが LLVM のフロントエンドとなり、LLVM IR を生成し、LLVM によりターゲットプラットフォームの実行バイナリを吐く流れです。
プラグイン使えば超お手軽ですね。
ただ、既存の Java ライブラリの jar などをを含めたネイティブアプリケーションの作成は現時点ではサポートされないので、微妙なところではあります。