From 3aeca1956e1aae9d6baca387db72a83640824b96 Mon Sep 17 00:00:00 2001 From: Johan Bay Date: Tue, 7 Nov 2023 12:10:14 +0000 Subject: [PATCH] [K/N] Consolidate toolchain paths between platforms The compiler had some code that looked for the same tools and files in toolchains at different relative paths depending on the platform. This commit improves that code by including `usr/` into the path to the toolchain on macOS, which allows to unify the relative paths inside the toolchains. Co-authored-by: Johan Bay --- .../jetbrains/kotlin/backend/konan/BitcodeCompiler.kt | 6 +----- .../src/org/jetbrains/kotlin/konan/target/Apple.kt | 2 +- .../src/org/jetbrains/kotlin/konan/target/ClangArgs.kt | 8 +------- .../src/org/jetbrains/kotlin/konan/target/Linker.kt | 10 +++++----- .../src/org/jetbrains/kotlin/konan/target/Xcode.kt | 2 +- 5 files changed, 9 insertions(+), 19 deletions(-) diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/BitcodeCompiler.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/BitcodeCompiler.kt index e5ae9853779..47c99ab0a1a 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/BitcodeCompiler.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/BitcodeCompiler.kt @@ -35,11 +35,7 @@ internal class BitcodeCompiler( .execute() private fun targetTool(tool: String, vararg arg: String) { - val absoluteToolName = if (platform.configurables is AppleConfigurables) { - "${platform.absoluteTargetToolchain}/usr/bin/$tool" - } else { - "${platform.absoluteTargetToolchain}/bin/$tool" - } + val absoluteToolName = "${platform.absoluteTargetToolchain}/bin/$tool" runTool(absoluteToolName, *arg) } diff --git a/native/utils/src/org/jetbrains/kotlin/konan/target/Apple.kt b/native/utils/src/org/jetbrains/kotlin/konan/target/Apple.kt index c92afbd9f54..110266b0c71 100644 --- a/native/utils/src/org/jetbrains/kotlin/konan/target/Apple.kt +++ b/native/utils/src/org/jetbrains/kotlin/konan/target/Apple.kt @@ -37,7 +37,7 @@ class AppleConfigurablesImpl( override val absoluteTargetToolchain: String get() = when (val provider = xcodePartsProvider) { is XcodePartsProvider.Local -> provider.xcode.toolchain - XcodePartsProvider.InternalServer -> absolute(toolchainDependency) + XcodePartsProvider.InternalServer -> "${absolute(toolchainDependency)}/usr" } override val absoluteAdditionalToolsDir: String get() = when (val provider = xcodePartsProvider) { diff --git a/native/utils/src/org/jetbrains/kotlin/konan/target/ClangArgs.kt b/native/utils/src/org/jetbrains/kotlin/konan/target/ClangArgs.kt index 45a1ff9d312..70ca970bfb7 100644 --- a/native/utils/src/org/jetbrains/kotlin/konan/target/ClangArgs.kt +++ b/native/utils/src/org/jetbrains/kotlin/konan/target/ClangArgs.kt @@ -71,13 +71,7 @@ sealed class ClangArgs( return (konanOptions + otherOptions).map { "-D$it" } } - private val binDir = when (HostManager.host) { - KonanTarget.LINUX_X64 -> "$absoluteTargetToolchain/bin" - KonanTarget.MINGW_X64 -> "$absoluteTargetToolchain/bin" - KonanTarget.MACOS_X64, - KonanTarget.MACOS_ARM64 -> "$absoluteTargetToolchain/usr/bin" - else -> throw TargetSupportException("Unexpected host platform") - } + private val binDir = "$absoluteTargetToolchain/bin" // TODO: Use buildList private val commonClangArgs: List = mutableListOf>().apply { // Currently, MinGW toolchain contains old LLVM 8, and -fuse-ld=lld picks linker from there. diff --git a/native/utils/src/org/jetbrains/kotlin/konan/target/Linker.kt b/native/utils/src/org/jetbrains/kotlin/konan/target/Linker.kt index 82e1a2b1f67..364e34a6b4d 100644 --- a/native/utils/src/org/jetbrains/kotlin/konan/target/Linker.kt +++ b/native/utils/src/org/jetbrains/kotlin/konan/target/Linker.kt @@ -169,13 +169,13 @@ class AndroidLinker(targetProperties: AndroidConfigurables) class MacOSBasedLinker(targetProperties: AppleConfigurables) : LinkerFlags(targetProperties), AppleConfigurables by targetProperties { - private val libtool = "$absoluteTargetToolchain/usr/bin/libtool" - private val linker = "$absoluteTargetToolchain/usr/bin/ld" - private val strip = "$absoluteTargetToolchain/usr/bin/strip" - private val dsymutil = "$absoluteTargetToolchain/usr/bin/dsymutil" + private val libtool = "$absoluteTargetToolchain/bin/libtool" + private val linker = "$absoluteTargetToolchain/bin/ld" + private val strip = "$absoluteTargetToolchain/bin/strip" + private val dsymutil = "$absoluteTargetToolchain/bin/dsymutil" private val compilerRtDir: String? by lazy { - val dir = File("$absoluteTargetToolchain/usr/lib/clang/").listFiles.firstOrNull()?.absolutePath + val dir = File("$absoluteTargetToolchain/lib/clang/").listFiles.firstOrNull()?.absolutePath if (dir != null) "$dir/lib/darwin/" else null } diff --git a/native/utils/src/org/jetbrains/kotlin/konan/target/Xcode.kt b/native/utils/src/org/jetbrains/kotlin/konan/target/Xcode.kt index 1076e1399d6..ee0c7690327 100644 --- a/native/utils/src/org/jetbrains/kotlin/konan/target/Xcode.kt +++ b/native/utils/src/org/jetbrains/kotlin/konan/target/Xcode.kt @@ -91,7 +91,7 @@ internal class CurrentXcode : Xcode { override val toolchain by lazy { val ldPath = xcrun("-f", "ld") // = $toolchain/usr/bin/ld - File(ldPath).parentFile.parentFile.parentFile.absolutePath + File(ldPath).parentFile.parentFile.absolutePath } override val additionalTools: String by lazy {