Kotlin/Native 지원 타깃과 호스트

Kotlin/Native 지원 타깃과 호스트

이 문서는 Kotlin/Native 컴파일러가 지원하는 타깃과 호스트가 무엇인지 설명해요.

출처: Supported targets and hosts

본문

타깃 티어(tier)

Kotlin/Native 컴파일러는 여러 타깃을 지원하지만, 지원 수준은 타깃마다 달라요. 이 수준을 정리하기 위해 컴파일러가 각 타깃을 얼마나 잘 지원하는지에 따라 여러 티어로 나눴어요.

티어 표에는 다음 열이 있어요.

  • Gradle target name — Kotlin Multiplatform Gradle 플러그인에서 해당 타깃을 활성화할 때 쓰는 타깃 이름이에요.
  • Target triple — 컴파일러가 흔히 쓰는 <architecture>-<vendor>-<system>-<abi> 구조에 따른 타깃 이름이에요.
  • Running tests — 해당 타깃에서 Gradle과 IDE로 곧바로 테스트를 실행할 수 있는지를 나타내요(타깃 자체를 위해 돌아가는 CI 테스트와는 구분돼요). 이는 그 특정 타깃에 대해 네이티브 호스트에서만 가능해요. 예를 들어 macosArm64iosArm64 테스트는 macOS ARM64 호스트에서만 실행할 수 있어요.

Tier 1

  • 이 타깃은 컴파일·실행이 가능한지 CI에서 정기적으로 테스트돼요.
  • 컴파일러 릴리스 사이의 소스·바이너리 호환성을 제공해요.
Gradle target name Target triple Running tests Description
Apple macOS 호스트 전용:
macosArm64 aarch64-apple-macos Apple Silicon 플랫폼의 Apple macOS 12.0 이상
iosSimulatorArm64 aarch64-apple-ios-simulator Apple Silicon 플랫폼의 Apple iOS 시뮬레이터 15.0 이상
iosArm64 aarch64-apple-ios ARM64 플랫폼의 Apple iOS 및 iPadOS 15.0 이상

Tier 2

  • 이 타깃은 컴파일이 가능한지 CI에서 정기적으로 테스트되지만, 실행 가능 여부는 자동 테스트되지 않을 수 있어요.
  • 컴파일러 릴리스 사이의 소스·바이너리 호환성을 제공하기 위해 최선을 다해요.
Gradle target name Target triple Running tests Description
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 시뮬레이터 8.0 이상
watchosArm64 arm64_32-apple-watchos ILP32를 쓰는 ARM64 플랫폼의 Apple watchOS 8.0 이상
tvosSimulatorArm64 aarch64-apple-tvos-simulator Apple Silicon 플랫폼의 Apple tvOS 시뮬레이터 15.0 이상
tvosArm64 aarch64-apple-tvos ARM64 플랫폼의 Apple tvOS 15.0 이상

Tier 3

  • 이 타깃은 CI에서 테스트된다는 보장이 없어요.
  • 컴파일러 릴리스 사이의 소스·바이너리 호환성을 약속할 수 없어요. 다만 이런 타깃들의 변경은 꽤 드물어요.
Gradle target name Target triple Running tests Description
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 8.0 이상
iosX64 x86_64-apple-ios-simulator x86-64 플랫폼의 Apple iOS 시뮬레이터 15.0 이상

Deprecated 타깃

다음 타깃은 deprecated 처리되어 제거가 예정돼 있어요.

Target Deprecation start Description
watchosArm32 Kotlin 2.4.20 ARM32 플랫폼의 Apple watchOS 기기
macosX64 Kotlin 2.3.20 x86_64 플랫폼의 Apple macOS
watchosX64 Kotlin 2.3.20 x86_64 플랫폼의 Apple watchOS 64비트 시뮬레이터
tvosX64 Kotlin 2.3.20 x86_64 플랫폼의 Apple tvOS 시뮬레이터
linuxArm32Hfp Kotlin 1.8.20 ARM32 플랫폼의 Linux

더 낮은 Apple 타깃 버전 지원하기

현재 Apple 타깃의 기본 최소 지원 버전은 다음과 같아요.

  • iOS와 tvOS는 15.0.
  • macOS는 12.0.
  • watchOS는 8.0.

기본값보다 낮은 버전을 지원해야 하는 프로젝트라면, 빌드 파일에서 freeCompilerArgs 옵션을 사용하세요.

라이브러리 작성자를 위해

라이브러리 작성자분들은 Kotlin/Native 컴파일러가 제공하는 것보다 더 많은 타깃을 테스트하거나 더 엄격한 보장을 제공하는 걸 권장하지 않아요. 네이티브 타깃 지원을 고려할 때는 다음 방식을 쓸 수 있어요.

  • Tier 1, 2, 3의 모든 타깃을 지원하세요.
  • 기본으로 테스트 실행을 지원하는 Tier 1, 2 타깃은 정기적으로 테스트하세요.

코틀린 팀은 공식 코틀린 라이브러리(예: kotlinx.coroutines, kotlinx.serialization)에서 이 방식을 사용해요.

호스트

Kotlin/Native 컴파일러는 다음 호스트를 지원해요.

Host OS Building final binaries Producing .klib artifacts
Apple 실리콘(ARM64)의 macOS 지원되는 모든 타깃 지원되는 모든 타깃
Intel 칩(x86_64)의 macOS 지원되는 모든 타깃 지원되는 모든 타깃
x86_64 아키텍처의 Linux Apple 타깃을 제외한 모든 타깃 지원되는 모든 타깃. 단, Apple 타깃은 cinterop 의존성 없이만 가능
x86_64 아키텍처의 Windows(MinGW 툴체인) Apple 타깃을 제외한 모든 타깃 지원되는 모든 타깃. 단, Apple 타깃은 cinterop 의존성 없이만 가능

최종 바이너리 빌드하기

최종 바이너리를 만들려면 지원되는 호스트에서만 지원 타깃으로 컴파일할 수 있어요. 예를 들어 FreeBSD나 ARM64 아키텍처에서 도는 Linux 머신에서는 할 수 없어요.

Linux와 Windows에서 Apple 타깃용 최종 바이너리를 빌드하는 것도 불가능해요.

.klib 아티팩트 생성하기

일반적으로 Kotlin/Native는 지원되는 호스트라면 어디서든 지원 타깃용 .klib 아티팩트를 만들 수 있어요.

다만 Apple 타깃의 아티팩트 생성은 Linux와 Windows에서 여전히 몇 가지 제한이 있어요. 프로젝트가 cinterop 의존성(CocoaPods 포함)을 쓴다면 macOS 호스트를 사용해야 해요.

예를 들어 x86_64 아키텍처의 Windows 머신에서 macosArm64 타깃용 .klib를 만들 수 있는 건 cinterop 의존성이 없을 때뿐이에요.

다음 단계

  • 최종 네이티브 바이너리 빌드하기
  • Apple 타깃용 컴파일

더 알아보기

  • Kotlin/Native 개요
  • Kotlin Multiplatform 타깃 설정
  • Apple 플랫폼용 Kotlin 이중 프레임워크 설정