[K/N] Use LLD 12.0.1 for MinGW targets
Clang-produced and GCC-produced binaries might be ABI-incompatible on MinGW. Explanation on GitHub: msys2/MINGW-packages/issues/6855#issuecomment-680859662. TL;DR: GCC-generated sections are 16-byte-padded, while Clang ones are not. It causes problems during merge of COMDAT sections. I observed the problem during compilation of runtime tests, but it is possible that the problem could affect main compilation pipeline as well. https://reviews.llvm.org/D86659 (which landed in LLVM 12) fixes the problem. So we have another motivation for switching to LLD besides https://youtrack.jetbrains.com/issue/KT-47605. The only known downside is unsupported defsym which causes slight binary size increase. I think it is doable.
This commit is contained in:
@@ -318,15 +318,6 @@ class K2Native : CLICompiler<K2NativeCompilerArguments>() {
|
||||
configuration.report(ERROR, "-Xgc-aggressive is only supported for -memory-model experimental")
|
||||
}
|
||||
put(GARBAGE_COLLECTOR_AGRESSIVE, arguments.gcAggressive)
|
||||
put(CHECK_LLD_COMPATIBILITY, when (val it = arguments.checkLldCompatibility) {
|
||||
"enable" -> true
|
||||
"disable" -> false
|
||||
null -> true
|
||||
else -> {
|
||||
configuration.report(ERROR, "Unsupported '-Xcheck-compatibility-with-lld' value: $it. Possible values are 'enable'/'disable'")
|
||||
true
|
||||
}
|
||||
})
|
||||
put(RUNTIME_ASSERTS_MODE, when (arguments.runtimeAssertsMode) {
|
||||
"ignore" -> RuntimeAssertsMode.IGNORE
|
||||
"log" -> RuntimeAssertsMode.LOG
|
||||
|
||||
-7
@@ -317,13 +317,6 @@ class K2NativeCompilerArguments : CommonCompilerArguments() {
|
||||
@Argument(value = "-Xir-property-lazy-initialization", description = "Initialize top level properties lazily per file")
|
||||
var propertyLazyInitialization: Boolean = false
|
||||
|
||||
@Argument(
|
||||
value = "-Xcheck-compatibility-with-lld",
|
||||
valueDescription = "{disable|enable}",
|
||||
description = "Check that linker flags are compatible with LLD."
|
||||
)
|
||||
var checkLldCompatibility: String? = null
|
||||
|
||||
@Argument(value="-Xruntime-asserts-mode", valueDescription = "<mode>", description = "Enable asserts in runtime. Possible values: 'ignore', 'log', 'panic'")
|
||||
var runtimeAssertsMode: String? = "ignore"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user