From cfcfecf19e5b336b31110e0beebc2c57651bf3dd Mon Sep 17 00:00:00 2001 From: Svyatoslav Scherbina Date: Fri, 18 Jan 2019 18:24:13 +0300 Subject: [PATCH] Make binaries' rpath comply conventions on iOS and macOS This simplifies linking embedded frameworks. See #2555 --- .../kotlin/org/jetbrains/kotlin/konan/target/Linker.kt | 10 ++++++++++ 1 file changed, 10 insertions(+) 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 ff08beff644..26781c29b87 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 @@ -158,9 +158,19 @@ open class MacOSBasedLinker(targetProperties: AppleConfigurables) if (compilerRtLibrary != null) +compilerRtLibrary!! +libraries +linkerArgs + +rpath(dynamic) }) + if (debug) listOf(dsymUtilCommand(executable, outputDsymBundle)) else emptyList() } + private fun rpath(dynamic: Boolean): List = listOfNotNull( + when (target.family) { + Family.OSX -> "@executable_path/../Frameworks" + Family.IOS -> "@executable_path/Frameworks" + else -> error(target) + }, + "@loader_path/Frameworks".takeIf { dynamic } + ).flatMap { listOf("-rpath", it) } + fun dsymUtilCommand(executable: ExecutableFile, outputDsymBundle: String) = object : Command(dsymutilCommand(executable, outputDsymBundle)) { override fun runProcess(): Int =