From 015920257f5e519277249246cc781820256e2d39 Mon Sep 17 00:00:00 2001 From: Elena Lepilkina Date: Fri, 4 Feb 2022 18:30:18 +0300 Subject: [PATCH] [K/N][perf] Adopt benchmarks plugins and tools to support both macosX64 and macosArm64 --- .../src/main/kotlin/org/jetbrains/kotlin/Internals.kt | 3 +++ .../src/main/kotlin/org/jetbrains/kotlin/MPPTools.kt | 7 +++++-- .../src/main/kotlin/org/jetbrains/kotlin/PlatformInfo.kt | 4 ++++ .../jetbrains/kotlin/benchmark/SwiftBenchmarkingPlugin.kt | 5 ++++- kotlin-native/performance/build.gradle | 6 +++++- kotlin-native/tools/benchmarksAnalyzer/build.gradle | 2 +- 6 files changed, 22 insertions(+), 5 deletions(-) diff --git a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/Internals.kt b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/Internals.kt index 0df8446ec62..8affb1e43f8 100644 --- a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/Internals.kt +++ b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/Internals.kt @@ -33,6 +33,9 @@ internal val Project.kotlin: KotlinMultiplatformExtension internal val NamedDomainObjectCollection>.macosX64: KotlinTargetPreset<*> get() = getByName(::macosX64.name) +internal val NamedDomainObjectCollection>.macosArm64: KotlinTargetPreset<*> + get() = getByName(::macosArm64.name) + internal val NamedDomainObjectCollection>.linuxX64: KotlinTargetPreset<*> get() = getByName(::linuxX64.name) diff --git a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/MPPTools.kt b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/MPPTools.kt index f3c6185dbad..282e30a7052 100644 --- a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/MPPTools.kt +++ b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/MPPTools.kt @@ -44,14 +44,17 @@ val kotlinNativeDataPath by lazy { @JvmOverloads fun defaultHostPreset( subproject: Project, - whitelist: List> = listOf(subproject.kotlin.presets.macosX64, subproject.kotlin.presets.linuxX64, subproject.kotlin.presets.mingwX64) + whitelist: List> = listOf(subproject.kotlin.presets.macosX64, subproject.kotlin.presets.macosArm64, + subproject.kotlin.presets.linuxX64, subproject.kotlin.presets.mingwX64) ): KotlinTargetPreset<*> { if (whitelist.isEmpty()) throw Exception("Preset whitelist must not be empty in Kotlin/Native ${subproject.displayName}.") val presetCandidate = when { - PlatformInfo.isMac() -> subproject.kotlin.presets.macosX64 + PlatformInfo.isMac() -> if (PlatformInfo.hostName.endsWith("x64")) + subproject.kotlin.presets.macosX64 + else subproject.kotlin.presets.macosArm64 PlatformInfo.isLinux() -> subproject.kotlin.presets.linuxX64 PlatformInfo.isWindows() -> subproject.kotlin.presets.mingwX64 else -> null diff --git a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/PlatformInfo.kt b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/PlatformInfo.kt index 96809fba532..0471867d1cc 100644 --- a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/PlatformInfo.kt +++ b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/PlatformInfo.kt @@ -12,6 +12,10 @@ object PlatformInfo { @JvmStatic fun isLinux() = HostManager.hostIsLinux + @JvmStatic + val hostName: String + get() = HostManager.hostName + @JvmStatic fun isAppleTarget(project: Project): Boolean { val target = getTarget(project) diff --git a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/benchmark/SwiftBenchmarkingPlugin.kt b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/benchmark/SwiftBenchmarkingPlugin.kt index 551cfb6e9be..54f8c280b51 100644 --- a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/benchmark/SwiftBenchmarkingPlugin.kt +++ b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/benchmark/SwiftBenchmarkingPlugin.kt @@ -64,7 +64,10 @@ open class SwiftBenchmarkingPlugin : BenchmarkingPlugin() { } } - override fun Project.determinePreset(): AbstractKotlinNativeTargetPreset<*> = kotlin.presets.macosX64 as AbstractKotlinNativeTargetPreset<*> + override fun Project.determinePreset(): AbstractKotlinNativeTargetPreset<*> = + defaultHostPreset(this).also { preset -> + logger.quiet("$project has been configured for ${preset.name} platform.") + } as AbstractKotlinNativeTargetPreset<*> override fun KotlinNativeTarget.configureNativeOutput(project: Project) { binaries.framework(nativeFrameworkName, listOf(project.benchmark.buildType)) { diff --git a/kotlin-native/performance/build.gradle b/kotlin-native/performance/build.gradle index 16f0490a50e..0017d1f4b8c 100644 --- a/kotlin-native/performance/build.gradle +++ b/kotlin-native/performance/build.gradle @@ -140,7 +140,11 @@ private static String getAnalyzerTargetName() { String target = System.getProperty("os.name") if (target == 'Linux') return 'linux' if (target.startsWith('Windows')) return 'windows' - if (target.startsWith('Mac')) return 'macos' + if (target.startsWith('Mac')) + if (System.getProperty("os.arch") == "aarch64") + return 'macosArm64' + else + return 'macosX64' return 'unknown' } diff --git a/kotlin-native/tools/benchmarksAnalyzer/build.gradle b/kotlin-native/tools/benchmarksAnalyzer/build.gradle index 85cc471d933..9360125b53d 100644 --- a/kotlin-native/tools/benchmarksAnalyzer/build.gradle +++ b/kotlin-native/tools/benchmarksAnalyzer/build.gradle @@ -45,7 +45,7 @@ def getHostName() { if (target == 'Linux') return 'linux' if (target.startsWith('Windows')) return 'windows' if (target.startsWith('Mac')) - if (System.getProperty("os.name") == "aarch64") + if (System.getProperty("os.arch") == "aarch64") return 'macosArm64' else return 'macosX64'