Skip to content

Kotlin/Native 지원 타겟 및 호스트

이 문서는 Kotlin/Native 컴파일러가 지원하는 타겟과 호스트에 대해 설명합니다.

지원되는 타겟 및 호스트 목록, 티어(tier) 수 및 해당 기능은 진행 상황에 따라 조정될 수 있습니다.

타겟 티어

Kotlin/Native 컴파일러는 다양한 타겟을 지원하지만, 지원 수준은 각기 다릅니다. 이러한 수준을 명확히 하기 위해 컴파일러의 지원 정도에 따라 타겟을 여러 티어로 나누었습니다.

티어 표는 다음과 같은 열로 구성됩니다:

  • Gradle 타겟 이름은 Kotlin 멀티플랫폼 Gradle 플러그인에서 타겟을 활성화하는 데 사용되는 타겟 이름입니다.

  • 타겟 트리플(Target triple)컴파일러가 일반적으로 사용하는 <architecture>-<vendor>-<system>-<abi> 구조에 따른 타겟 이름입니다.

  • 테스트 실행(Running tests)은 타겟이 Gradle 및 IDE에서 별도의 설정 없이(out of the box) 테스트를 실행할 수 있는지 여부를 나타냅니다 (타겟 자체를 위해 실행되는 CI 테스트와 혼동하지 마세요).

    이는 특정 타겟에 대한 네이티브 호스트에서만 가능합니다. 예를 들어, macosArm64iosArm64 테스트는 macOS ARM64 호스트에서만 실행할 수 있습니다.

티어 1

  • 타겟이 컴파일 및 실행 가능한지 CI에서 정기적으로 테스트됩니다.
  • 컴파일러 릴리스 간에 소스 및 바이너리 호환성을 제공합니다.
Gradle 타겟 이름타겟 트리플테스트 실행설명
Apple macOS 호스트 전용:
macosArm64aarch64-apple-macosApple Silicon 플랫폼의 Apple macOS 11.0 이상
iosSimulatorArm64aarch64-apple-ios-simulatorApple Silicon 플랫폼의 Apple iOS 시뮬레이터 14.0 이상
iosArm64aarch64-apple-iosARM64 플랫폼의 Apple iOS 및 iPadOS 14.0 이상

티어 2

  • 타겟이 컴파일 가능한지 CI에서 정기적으로 테스트되지만, 실행 가능 여부는 자동으로 테스트되지 않을 수 있습니다.
  • 컴파일러 릴리스 간의 소스 및 바이너리 호환성을 제공하기 위해 최선을 다하고 있습니다.
Gradle 타겟 이름타겟 트리플테스트 실행설명
linuxX64x86_64-unknown-linux-gnux86_64 플랫폼의 Linux
linuxArm64aarch64-unknown-linux-gnuARM64 플랫폼의 Linux
Apple macOS 호스트 전용:
watchosSimulatorArm64aarch64-apple-watchos-simulatorApple Silicon 플랫폼의 Apple watchOS 시뮬레이터 7.0 이상
watchosArm32armv7k-apple-watchosARM32 플랫폼의 Apple watchOS 7.0 이상
watchosArm64arm64_32-apple-watchosILP32를 사용하는 ARM64 플랫폼의 Apple watchOS 7.0 이상
tvosSimulatorArm64aarch64-apple-tvos-simulatorApple Silicon 플랫폼의 Apple tvOS 시뮬레이터 14.0 이상
tvosArm64aarch64-apple-tvosARM64 플랫폼의 Apple tvOS 14.0 이상

티어 3

  • 타겟이 CI에서 테스트되는 것을 보장하지 않습니다.
  • 서로 다른 컴파일러 릴리스 간의 소스 및 바이너리 호환성을 약속할 수 없지만, 이러한 타겟에 대한 변경 사항은 매우 드뭅니다.

티어 3 타겟은 활발히 개발 중이지 않으며 중대한 문제가 발생할 수 있습니다. 주의해서 사용하세요.

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 7.0 이상
iosX64x86_64-apple-ios-simulatorx86-64 플랫폼의 Apple iOS 시뮬레이터 14.0 이상

linuxArm32Hfp 타겟은 더 이상 사용되지 않으며(deprecated) 향후 릴리스에서 제거될 예정입니다.

더 이상 사용되지 않는 타겟(Deprecated targets)

Kotlin 2.3.20부터 다음 타겟은 더 이상 사용되지 않습니다:

  • macosX64 (x86_64 플랫폼의 Apple macOS 11.0 이상)
  • watchosX64 (x86_64 플랫폼의 Apple watchOS 7.0 이상 64비트 시뮬레이터)
  • tvosX64 (x86_64 플랫폼의 Apple tvOS 14.0 이상 시뮬레이터)

라이브러리 작성자 가이드

라이브러리 작성자가 Kotlin/Native 컴파일러보다 더 많은 타겟을 테스트하거나 더 엄격한 보장을 제공하는 것은 권장하지 않습니다. 네이티브 타겟 지원을 고려할 때 다음 접근 방식을 사용할 수 있습니다:

  • 티어 1, 2, 3의 모든 타겟을 지원합니다.
  • 테스트 실행을 기본적으로 지원하는 티어 1 및 2의 타겟을 정기적으로 테스트합니다.

Kotlin 팀은 kotlinx.coroutineskotlinx.serialization과 같은 공식 Kotlin 라이브러리에서 이 접근 방식을 사용합니다.

호스트

Kotlin/Native 컴파일러는 다음 호스트를 지원합니다:

호스트 OS최종 바이너리 빌드.klib 아티팩트 생성
Apple Silicon 기반 macOS (ARM64)모든 지원되는 타겟모든 지원되는 타겟
Intel 칩 기반 macOS (x86_64)모든 지원되는 타겟모든 지원되는 타겟
x86_64 아키텍처 기반 LinuxApple 타겟을 제외한 모든 지원되는 타겟모든 지원되는 타겟, Apple 타겟은 cinterop 의존성이 없는 경우만
x86_64 아키텍처 기반 Windows (MinGW 툴체인)Apple 타겟을 제외한 모든 지원되는 타겟모든 지원되는 타겟, Apple 타겟은 cinterop 의존성이 없는 경우만

최종 바이너리 빌드

최종 바이너리를 생성하려면 지원되는 호스트에서만 지원되는 타겟에 대해 컴파일할 수 있습니다. 예를 들어, FreeBSD나 ARM64 아키텍처에서 실행되는 Linux 머신에서는 이 작업을 수행할 수 없습니다.

Linux 및 Windows에서 Apple 타겟용 최종 바이너리를 빌드하는 것도 불가능합니다.

.klib 아티팩트 생성

일반적으로 Kotlin/Native는 지원되는 모든 호스트에서 지원되는 타겟을 위한 .klib 아티팩트를 생성할 수 있도록 허용합니다.

하지만 Linux 및 Windows에서 Apple 타겟에 대한 아티팩트 생성에는 여전히 몇 가지 제한 사항이 있습니다. 프로젝트에서 cinterop 의존성(CocoaPods 포함)을 사용하는 경우 macOS 호스트를 사용해야 합니다.

예를 들어, x86_64 아키텍처에서 실행되는 Windows 머신에서 macosArm64 타겟용 .klib를 생성하려면 cinterop 의존성이 없어야 합니다.

다음 단계