diff --git a/konan/konan.properties b/konan/konan.properties index 348ac027545..877cfc9c5a1 100644 --- a/konan/konan.properties +++ b/konan/konan.properties @@ -44,7 +44,7 @@ llvmLtoFlags.macos_x64 = llvmLtoOptFlags.macos_x64 = -O3 -function-sections llvmLtoNooptFlags.macos_x64 = -O1 llvmLtoDynamicFlags.macos_x64 = -relocation-model=pic -linkerKonanFlags.macos_x64 = -lc++ -lobjc -framework Foundation +linkerKonanFlags.macos_x64 = -lSystem -lc++ -lobjc -framework Foundation linkerOptimizationFlags.macos_x64 = -dead_strip linkerNoDebugFlags.macos_x64 = -S linkerDynamicFlags.macos_x64 = -dylib @@ -81,7 +81,7 @@ linkerNoDebugFlags.ios_arm32 = -S linkerDynamicFlags.ios_arm32 = -dylib llvmLtoNooptFlags.ios_arm32 = -O1 llvmLtoDynamicFlags.ios_arm32 = -relocation-model=pic -linkerKonanFlags.ios_arm32 = -lc++ -lobjc -framework Foundation -sdk_version 11.2 +linkerKonanFlags.ios_arm32 = -lSystem -lc++ -lobjc -framework Foundation -sdk_version 11.2 linkerOptimizationFlags.ios_arm32 = -dead_strip osVersionMinFlagLd.ios_arm32 = -iphoneos_version_min osVersionMinFlagClang.ios_arm32 = -miphoneos-version-min @@ -105,7 +105,7 @@ linkerNoDebugFlags.ios_arm64 = -S linkerDynamicFlags.ios_arm64 = -dylib llvmLtoNooptFlags.ios_arm64 = -O1 llvmLtoDynamicFlags.ios_arm64 = -relocation-model=pic -linkerKonanFlags.ios_arm64 = -lc++ -lobjc -framework Foundation -sdk_version 11.2 +linkerKonanFlags.ios_arm64 = -lSystem -lc++ -lobjc -framework Foundation -sdk_version 11.2 linkerOptimizationFlags.ios_arm64 = -dead_strip osVersionMinFlagLd.ios_arm64 = -iphoneos_version_min osVersionMinFlagClang.ios_arm64 = -miphoneos-version-min @@ -127,7 +127,7 @@ llvmLtoFlags.ios_x64 = llvmLtoOptFlags.ios_x64 = -O3 -function-sections llvmLtoNooptFlags.ios_x64 = -O1 llvmLtoDynamicFlags.ios_x64 = -relocation-model=pic -linkerKonanFlags.ios_x64 = -lc++ -lobjc -framework Foundation -sdk_version 11.2 +linkerKonanFlags.ios_x64 = -lSystem -lc++ -lobjc -framework Foundation -sdk_version 11.2 linkerOptimizationFlags.ios_x64 = -dead_strip linkerNoDebugFlags.ios_x64 = -S linkerDynamicFlags.ios_x64 = -dylib diff --git a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Linker.kt b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Linker.kt index da582d62732..ff08beff644 100644 --- a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Linker.kt +++ b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Linker.kt @@ -117,12 +117,18 @@ open class MacOSBasedLinker(targetProperties: AppleConfigurables) private val libtool = "$absoluteTargetToolchain/usr/bin/libtool" private val linker = "$absoluteTargetToolchain/usr/bin/ld" - internal val dsymutil = "$absoluteLlvmHome/bin/llvm-dsymutil" - - open val osVersionMinFlags: List by lazy { - listOf( - osVersionMinFlagLd, - osVersionMin + ".0") + private val dsymutil = "$absoluteLlvmHome/bin/llvm-dsymutil" + private val compilerRtLibrary: String? by lazy { + val suffix = when (configurables.target.family) { + Family.OSX -> "osx" + Family.IOS -> "ios" + else -> TODO() + } + val dir = File("$absoluteTargetToolchain/usr/lib/clang/").listFiles.firstOrNull()?.absolutePath + if (dir != null) "$dir/lib/darwin/libclang_rt.$suffix.a" else null + } + private val osVersionMinFlags: List by lazy { + listOf(osVersionMinFlagLd, osVersionMin + ".0") } override fun filterStaticLibraries(binaries: List) = binaries.filter { it.isUnixStaticLib } @@ -149,7 +155,7 @@ open class MacOSBasedLinker(targetProperties: AppleConfigurables) if (!debug) +linkerNoDebugFlags if (dynamic) +linkerDynamicFlags +linkerKonanFlags - +"-lSystem" + if (compilerRtLibrary != null) +compilerRtLibrary!! +libraries +linkerArgs }) + if (debug) listOf(dsymUtilCommand(executable, outputDsymBundle)) else emptyList()