Use gold linker instead of lld on Windows and Linux
lld is doing something wrong for linux_arm32_hfp and linux_arm64 targets, so we fallback to gold linker on Linux and Windows. See KT-41725 and KT-42446
This commit is contained in:
committed by
Stanislav Erokhin
parent
ddaf477849
commit
6565d18a9f
@@ -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
|
||||
|
||||
@@ -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<Command> {
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user