diff --git a/kotlin-native/konan/konan.properties b/kotlin-native/konan/konan.properties index e325682da80..a12774716db 100644 --- a/kotlin-native/konan/konan.properties +++ b/kotlin-native/konan/konan.properties @@ -406,7 +406,7 @@ clangOptFlags.linux_x64 = -O3 -ffunction-sections clangDebugFlags.linux_x64 = -O0 clangDynamicFlags.linux_x64 = -mrelocation-model pic linkerKonanFlags.linux_x64 = -Bstatic -lstdc++ -Bdynamic -ldl -lm -lpthread \ - --defsym __cxa_demangle=Konan_cxa_demangle --no-threads + --defsym __cxa_demangle=Konan_cxa_demangle linkerOptimizationFlags.linux_x64 = --gc-sections linkerNoDebugFlags.linux_x64 = -S linkerDynamicFlags.linux_x64 = -shared @@ -444,7 +444,7 @@ linkerOptimizationFlags.linux_arm32_hfp = --gc-sections targetSysRoot.linux_arm32_hfp = $gccToolchain.linux_arm32_hfp/arm-unknown-linux-gnueabihf/sysroot # We could reuse host toolchain here. linkerKonanFlags.linux_arm32_hfp = -Bstatic -lstdc++ -Bdynamic -ldl -lm -lpthread \ - --defsym __cxa_demangle=Konan_cxa_demangle --no-threads + --defsym __cxa_demangle=Konan_cxa_demangle # targetSysroot-relative. libGcc.linux_arm32_hfp = ../../lib/gcc/arm-unknown-linux-gnueabihf/8.3.0 targetCpu.linux_arm32_hfp = arm1136jf-s @@ -487,7 +487,7 @@ linkerOptimizationFlags.linux_arm64 = --gc-sections targetSysRoot.linux_arm64 = $gccToolchain.linux_arm64/aarch64-unknown-linux-gnu/sysroot # We could reuse host toolchain here. linkerKonanFlags.linux_arm64 = -Bstatic -lstdc++ -Bdynamic -ldl -lm -lpthread \ - --defsym __cxa_demangle=Konan_cxa_demangle --no-threads + --defsym __cxa_demangle=Konan_cxa_demangle # targetSysroot-relative. libGcc.linux_arm64 = ../../lib/gcc/aarch64-unknown-linux-gnu/8.3.0 targetCpu.linux_arm64 = generic diff --git a/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Linker.kt b/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Linker.kt index 9b9a8a86af6..1c773592e25 100644 --- a/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Linker.kt +++ b/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Linker.kt @@ -316,7 +316,7 @@ class GccBasedLinker(targetProperties: GccConfigurables) private val ar = if (HostManager.hostIsMac) "$absoluteTargetToolchain/bin/llvm-ar" else "$absoluteTargetToolchain/bin/ar" override val libGcc = "$absoluteTargetSysRoot/${super.libGcc}" - private val linker = "$absoluteLlvmHome/bin/ld.lld" + private val specificLibs = abiSpecificLibraries.map { "-L${absoluteTargetSysRoot}/$it" } override fun provideCompilerRtLibrary(libraryName: String): String? { @@ -337,6 +337,11 @@ class GccBasedLinker(targetProperties: GccConfigurables) needsProfileLibrary: Boolean, mimallocEnabled: Boolean): List { if (kind == LinkerOutputKind.STATIC_LIBRARY) return staticGnuArCommands(ar, executable, objectFiles, libraries) + // TODO: Control via properties. + val (linker, linkerSpecificFlags) = when { + HostManager.hostIsMac -> "$absoluteLlvmHome/bin/ld.lld" to listOf("--no-threads") + else -> "$absoluteTargetToolchain/bin/ld.gold" to emptyList() + } val isMips = target == KonanTarget.LINUX_MIPS32 || target == KonanTarget.LINUX_MIPSEL32 val dynamic = kind == LinkerOutputKind.DYNAMIC_LIBRARY @@ -354,6 +359,7 @@ class GccBasedLinker(targetProperties: GccConfigurables) +"--build-id" +"--eh-frame-hdr" +"-dynamic-linker" + linkerSpecificFlags.forEach { +it } +dynamicLinker +"-o" +executable