Skip to content

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ホストのみ:
macosX64x86_64-apple-macosx86_64プラットフォーム上のApple macOS
macosArm64aarch64-apple-macosApple Siliconプラットフォーム上のApple macOS
iosSimulatorArm64aarch64-apple-ios-simulatorApple Siliconプラットフォーム上のApple iOSシミュレーター
iosX64x86_64-apple-ios-simulatorx86-64プラットフォーム上のApple iOSシミュレーター
iosArm64aarch64-apple-iosARM64プラットフォーム上のApple iOSおよびiPadOS

ティア2

  • ターゲットは、コンパイル可能であるかCIで定期的にテストされますが、実行可能であるかの自動テストは行われない場合があります。
  • コンパイラのリリース間でのソースおよびバイナリ互換性を提供するよう最善を尽くしています。
Gradleターゲット名ターゲットトリプルテストの実行説明
linuxX64x86_64-unknown-linux-gnux86_64プラットフォーム上のLinux
linuxArm64aarch64-unknown-linux-gnuARM64プラットフォーム上のLinux
Apple macOSホストのみ:
watchosSimulatorArm64aarch64-apple-watchos-simulatorApple Siliconプラットフォーム上のApple watchOSシミュレーター
watchosX64x86_64-apple-watchos-simulatorx86_64プラットフォーム上のApple watchOS 64ビットシミュレーター
watchosArm32armv7k-apple-watchosARM32プラットフォーム上のApple watchOS
watchosArm64arm64_32-apple-watchosILP32を持つARM64プラットフォーム上のApple watchOS
tvosSimulatorArm64aarch64-apple-tvos-simulatorApple Siliconプラットフォーム上のApple tvOSシミュレーター
tvosX64x86_64-apple-tvos-simulatorx86_64プラットフォーム上のApple tvOSシミュレーター
tvosArm64aarch64-apple-tvosARM64プラットフォーム上のApple tvOS

ティア3

  • ターゲットはCIでテストされることを保証しません。
  • これらのターゲットに対する変更は非常にまれですが、異なるコンパイラのリリース間でのソースおよびバイナリ互換性を約束することはできません。
Gradleターゲット名ターゲットトリプルテストの実行説明
androidNativeArm32arm-unknown-linux-androideabiARM32プラットフォーム上のAndroid NDK
androidNativeArm64aarch64-unknown-linux-androidARM64プラットフォーム上のAndroid NDK
androidNativeX86i686-unknown-linux-androidx86プラットフォーム上のAndroid NDK
androidNativeX64x86_64-unknown-linux-androidx86_64プラットフォーム上のAndroid NDK
mingwX64x86_64-pc-windows-gnuMinGW互換性レイヤーを使用する64ビットWindows 10以降
Apple macOSホストのみ:
watchosDeviceArm64aarch64-apple-watchosARM64プラットフォーム上のApple watchOS

linuxArm32Hfpターゲットは非推奨であり、将来のリリースで削除される予定です。

ライブラリ作者向け

ライブラリ作者がKotlin/Nativeコンパイラよりも多くのターゲットをテストしたり、より厳格な保証を提供したりすることはお勧めしません。ネイティブターゲットのサポートを検討する際には、以下の¹アプローチを使用できます。

  • ティア1、2、3のすべてのターゲットをサポートします。
  • ティア1および2で、すぐにテスト実行をサポートするターゲットを定期的にテストします。

Kotlinチームは、公式のKotlinライブラリ(例: kotlinx.coroutineskotlinx.serialization)でこのアプローチを使用しています。