Kotlin/Nativeのターゲットサポート
Kotlin/Nativeコンパイラは非常に多くの異なるターゲットをサポートしていますが、それらすべてに対して同じレベルのサポートを提供することは困難です。このドキュメントでは、Kotlin/Nativeがサポートするターゲットと、コンパイラによるサポートの度合いに応じてそれらをいくつかのティアに分類する方法について説明します。
ティアの数、サポートされるターゲットのリスト、およびその機能は、必要に応じて調整される可能性があります。
以下のティアテーブルで使用される用語にご注意ください。
Gradleターゲット名は、Kotlin Multiplatform Gradleプラグインでターゲットを有効にするために使用されるターゲット名です。
ターゲットトリプルは、コンパイラで一般的に使用される
<architecture>-<vendor>-<system>-<abi>
構造に基づくターゲット名です。テストの実行は、GradleおよびIDEでのテスト実行の「すぐに使える(out of the box)」サポートを示します。
これは、特定のターゲットに対するネイティブホストでのみ利用可能です。例えば、
macosX64
およびiosX64
のテストは、macOS x86-64ホスト上でのみ実行できます。
ティア1
- ターゲットは、コンパイルおよび実行可能であるかCIで定期的にテストされます。
- コンパイラのリリース間でのソースおよびバイナリ互換性を提供します。
Gradleターゲット名 | ターゲットトリプル | テストの実行 | 説明 |
---|---|---|---|
Apple macOSホストのみ: | |||
macosX64 | x86_64-apple-macos | ✅ | x86_64プラットフォーム上のApple macOS |
macosArm64 | aarch64-apple-macos | ✅ | Apple Siliconプラットフォーム上のApple macOS |
iosSimulatorArm64 | aarch64-apple-ios-simulator | ✅ | Apple Siliconプラットフォーム上のApple iOSシミュレーター |
iosX64 | x86_64-apple-ios-simulator | ✅ | x86-64プラットフォーム上のApple iOSシミュレーター |
iosArm64 | aarch64-apple-ios | ARM64プラットフォーム上のApple iOSおよびiPadOS |
ティア2
- ターゲットは、コンパイル可能であるかCIで定期的にテストされますが、実行可能であるかの自動テストは行われない場合があります。
- コンパイラのリリース間でのソースおよびバイナリ互換性を提供するよう最善を尽くしています。
Gradleターゲット名 | ターゲットトリプル | テストの実行 | 説明 |
---|---|---|---|
linuxX64 | x86_64-unknown-linux-gnu | ✅ | x86_64プラットフォーム上のLinux |
linuxArm64 | aarch64-unknown-linux-gnu | ARM64プラットフォーム上のLinux | |
Apple macOSホストのみ: | |||
watchosSimulatorArm64 | aarch64-apple-watchos-simulator | ✅ | Apple Siliconプラットフォーム上のApple watchOSシミュレーター |
watchosX64 | x86_64-apple-watchos-simulator | ✅ | x86_64プラットフォーム上のApple watchOS 64ビットシミュレーター |
watchosArm32 | armv7k-apple-watchos | ARM32プラットフォーム上のApple watchOS | |
watchosArm64 | arm64_32-apple-watchos | ILP32を持つARM64プラットフォーム上のApple watchOS | |
tvosSimulatorArm64 | aarch64-apple-tvos-simulator | ✅ | Apple Siliconプラットフォーム上のApple tvOSシミュレーター |
tvosX64 | x86_64-apple-tvos-simulator | ✅ | x86_64プラットフォーム上のApple tvOSシミュレーター |
tvosArm64 | aarch64-apple-tvos | ARM64プラットフォーム上のApple tvOS |
ティア3
- ターゲットはCIでテストされることを保証しません。
- これらのターゲットに対する変更は非常にまれですが、異なるコンパイラのリリース間でのソースおよびバイナリ互換性を約束することはできません。
Gradleターゲット名 | ターゲットトリプル | テストの実行 | 説明 |
---|---|---|---|
androidNativeArm32 | arm-unknown-linux-androideabi | ARM32プラットフォーム上のAndroid NDK | |
androidNativeArm64 | aarch64-unknown-linux-android | ARM64プラットフォーム上のAndroid NDK | |
androidNativeX86 | i686-unknown-linux-android | x86プラットフォーム上のAndroid NDK | |
androidNativeX64 | x86_64-unknown-linux-android | x86_64プラットフォーム上のAndroid NDK | |
mingwX64 | x86_64-pc-windows-gnu | ✅ | MinGW互換性レイヤーを使用する64ビットWindows 10以降 |
Apple macOSホストのみ: | |||
watchosDeviceArm64 | aarch64-apple-watchos | ARM64プラットフォーム上のApple watchOS |
linuxArm32Hfp
ターゲットは非推奨であり、将来のリリースで削除される予定です。
ライブラリ作者向け
ライブラリ作者がKotlin/Nativeコンパイラよりも多くのターゲットをテストしたり、より厳格な保証を提供したりすることはお勧めしません。ネイティブターゲットのサポートを検討する際には、以下の¹アプローチを使用できます。
- ティア1、2、3のすべてのターゲットをサポートします。
- ティア1および2で、すぐにテスト実行をサポートするターゲットを定期的にテストします。
Kotlinチームは、公式のKotlinライブラリ(例: kotlinx.coroutinesやkotlinx.serialization)でこのアプローチを使用しています。