diff --git a/kotlin-native/konan/konan.properties b/kotlin-native/konan/konan.properties index c2419bc6a2f..2fb9c788e14 100644 --- a/kotlin-native/konan/konan.properties +++ b/kotlin-native/konan/konan.properties @@ -38,7 +38,8 @@ reducedLlvmAppendix = compact predefinedLlvmDistributions = \ clang-llvm-8.0.0-linux-x86-64 \ msys2-mingw-w64-x86_64-clang-llvm-lld-compiler_rt-8.0.1 \ - clang-llvm-apple-8.0.0-darwin-macos + clang-llvm-apple-8.0.0-darwin-macos \ + clang-llvm-apple-8.0.0-darwin-macos-aarch64 llvm.linux_x64.dev = clang-llvm-8.0.0-linux-x86-64 llvm.linux_x64.user = clang-llvm-8.0.0-linux-x86-64 @@ -49,6 +50,9 @@ llvm.mingw_x64.user = msys2-mingw-w64-x86_64-clang-llvm-lld-compiler_rt-8.0.1 llvm.macos_x64.dev = clang-llvm-apple-8.0.0-darwin-macos llvm.macos_x64.user = clang-llvm-apple-8.0.0-darwin-macos +llvm.macos_arm64.dev = clang-llvm-apple-8.0.0-darwin-macos-aarch64 +llvm.macos_arm64.user = clang-llvm-apple-8.0.0-darwin-macos-aarch64 + # By default LLVM uses 250 for -03 builds. # We use a smaller value since default value leads to # unreasonably bloated runtime code without any measurable @@ -62,6 +66,7 @@ linkerGccFlags = -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed llvmVersion.linux_x64 = 8.0.0 llvmVersion.mingw_x64 = 8.0.1 llvmVersion.macos_x64 = 8.0.0 +llvmVersion.macos_arm64 = 8.0.0 cacheableTargets.macos_x64 = \ macos_x64 \ @@ -73,6 +78,8 @@ cacheableTargets.linux_x64 = \ cacheableTargets.mingw_x64 = +cacheableTargets.macos_arm64 = + # Mac OS X. # Can be an absolute path instead of predefined value. llvmHome.macos_x64 = $llvm.macos_x64.dev @@ -113,6 +120,11 @@ xcode-addon-xcode_12_2-macos_x64.default = \ remote:internal # macOS Apple Silicon +llvmHome.macos_arm64 = $llvm.macos_arm64.dev +targetToolchain.macos_arm64 = target-toolchain-xcode_12_2-macos_x64 +libffiDir.macos_arm64 = libffi-3.3-1-macos-arm64 +additionalToolsDir.macos_arm64 = xcode-addon-xcode_12_2-macos_x64 + targetToolchain.macos_x64-macos_arm64 = target-toolchain-xcode_12_2-macos_x64 arch.macos_arm64 = arm64 targetSysRoot.macos_arm64 = target-sysroot-xcode_12_2-macos_x64 @@ -136,12 +148,21 @@ osVersionMinFlagClang.macos_arm64 = -mmacosx-version-min osVersionMin.macos_arm64 = 11.0 runtimeDefinitions.macos_arm64 = KONAN_OSX=1 KONAN_MACOSX=1 KONAN_ARM64=1 KONAN_OBJC_INTEROP=1 \ KONAN_CORE_SYMBOLICATION=1 +dependencies.macos_arm64 = \ + libffi-3.3-1-macos-arm64 + dependencies.macos_x64-macos_arm64 = \ libffi-3.2.1-3-darwin-macos target-sysroot-xcode_12_2-macos_arm64.default = \ remote:internal +target-toolchain-xcode_12_2-macos_arm64.default = \ + remote:internal + +xcode-addon-xcode_12_2-macos_arm64.default = \ + remote:internal + # Apple's 32-bit iOS. targetToolchain.macos_x64-ios_arm32 = target-toolchain-xcode_12_2-macos_x64 dependencies.macos_x64-ios_arm32 = \ @@ -180,6 +201,10 @@ targetToolchain.macos_x64-ios_arm64 = target-toolchain-xcode_12_2-macos_x64 dependencies.macos_x64-ios_arm64 = \ libffi-3.2.1-3-darwin-macos +targetToolchain.macos_arm64-ios_arm64 = target-toolchain-xcode_12_2-macos_x64 +dependencies.macos_arm64-ios_arm64 = \ + libffi-3.3-1-macos-arm64 + target-sysroot-xcode_12_2-ios_arm64.default = \ remote:internal diff --git a/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ClangArgs.kt b/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ClangArgs.kt index df342b35565..70aa98409a1 100644 --- a/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ClangArgs.kt +++ b/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ClangArgs.kt @@ -43,7 +43,8 @@ class ClangArgs(private val configurables: Configurables) : Configurables by con private val binDir = when (HostManager.host) { KonanTarget.LINUX_X64 -> "$absoluteTargetToolchain/bin" KonanTarget.MINGW_X64 -> "$absoluteTargetToolchain/bin" - KonanTarget.MACOS_X64 -> "$absoluteTargetToolchain/usr/bin" + KonanTarget.MACOS_X64, + KonanTarget.MACOS_ARM64 -> "$absoluteTargetToolchain/usr/bin" else -> throw TargetSupportException("Unexpected host platform") } // TODO: Use buildList diff --git a/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/KonanProperties.kt b/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/KonanProperties.kt index 2008075ba5b..dc100c15023 100644 --- a/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/KonanProperties.kt +++ b/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/KonanProperties.kt @@ -88,8 +88,9 @@ abstract class KonanPropertiesLoader(override val target: KonanTarget, } private fun defaultArchiveTypeByHost(host: KonanTarget): ArchiveType = when (host) { - KonanTarget.LINUX_X64 -> ArchiveType.TAR_GZ - KonanTarget.MACOS_X64 -> ArchiveType.TAR_GZ + KonanTarget.LINUX_X64, + KonanTarget.MACOS_X64, + KonanTarget.MACOS_ARM64 -> ArchiveType.TAR_GZ KonanTarget.MINGW_X64 -> ArchiveType.ZIP else -> error("$host can't be a host platform!") } \ No newline at end of file diff --git a/native/utils/src/org/jetbrains/kotlin/konan/target/HostManager.kt b/native/utils/src/org/jetbrains/kotlin/konan/target/HostManager.kt index fb9fdc903a3..33d7a851912 100644 --- a/native/utils/src/org/jetbrains/kotlin/konan/target/HostManager.kt +++ b/native/utils/src/org/jetbrains/kotlin/konan/target/HostManager.kt @@ -91,13 +91,19 @@ open class HostManager( ANDROID_ARM32, ANDROID_ARM64, WASM32 + ), + MACOS_ARM64 to setOf( + // TODO: More targets will be added later after additional testing. + MACOS_ARM64, + IOS_ARM64 ) ) private val enabledExperimentalByHost: Map> = mapOf( LINUX_X64 to setOf(MINGW_X86, MINGW_X64) + zephyrSubtargets, MACOS_X64 to setOf(MINGW_X86, MINGW_X64) + zephyrSubtargets, - MINGW_X64 to setOf() + zephyrSubtargets + MINGW_X64 to setOf() + zephyrSubtargets, + MACOS_ARM64 to emptySet() ) val enabledByHost: Map> by lazy { @@ -146,7 +152,8 @@ open class HostManager( val jniHostPlatformIncludeDir: String get() = when (host) { - MACOS_X64 -> "darwin" + MACOS_X64, + MACOS_ARM64 -> "darwin" LINUX_X64 -> "linux" MINGW_X64 -> "win32" else -> throw TargetSupportException("Unknown host: $host.") @@ -160,13 +167,15 @@ open class HostManager( return when (val javaArch = System.getProperty("os.arch")) { "x86_64" -> "x86_64" "amd64" -> "x86_64" - "arm64" -> "arm64" + "arm64" -> "aarch64" + "aarch64" -> "aarch64" else -> throw TargetSupportException("Unknown hardware platform: $javaArch") } } private val hostMapping: Map, KonanTarget> = mapOf( Pair("osx", "x86_64") to MACOS_X64, + Pair("osx", "aarch64") to MACOS_ARM64, Pair("linux", "x86_64") to LINUX_X64, Pair("windows", "x86_64") to MINGW_X64 )