Kotlin/Native 지원 타깃과 호스트
Kotlin/Native 지원 타깃과 호스트
이 문서는 Kotlin/Native 컴파일러가 지원하는 타깃과 호스트가 무엇인지 설명해요.
본문
타깃 티어(tier)
Kotlin/Native 컴파일러는 여러 타깃을 지원하지만, 지원 수준은 타깃마다 달라요. 이 수준을 정리하기 위해 컴파일러가 각 타깃을 얼마나 잘 지원하는지에 따라 여러 티어로 나눴어요.
티어 표에는 다음 열이 있어요.
- Gradle target name — Kotlin Multiplatform Gradle 플러그인에서 해당 타깃을 활성화할 때 쓰는 타깃 이름이에요.
- Target triple — 컴파일러가 흔히 쓰는
<architecture>-<vendor>-<system>-<abi>구조에 따른 타깃 이름이에요. - Running tests — 해당 타깃에서 Gradle과 IDE로 곧바로 테스트를 실행할 수 있는지를 나타내요(타깃 자체를 위해 돌아가는 CI 테스트와는 구분돼요). 이는 그 특정 타깃에 대해 네이티브 호스트에서만 가능해요. 예를 들어
macosArm64와iosArm64테스트는 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 이중 프레임워크 설정