Improve produced framework layout on mac
This commit is contained in:
committed by
SvyatoslavScherbina
parent
b5e81a8008
commit
d51e0e0a30
+9
-3
@@ -338,9 +338,15 @@ internal class LinkStage(val context: Context) {
|
||||
} else {
|
||||
val framework = File(context.config.outputFile)
|
||||
val dylibName = framework.name.removeSuffix(".framework")
|
||||
frameworkLinkerArgs = listOf("-install_name", "@rpath/${framework.name}/$dylibName")
|
||||
framework.mkdirs()
|
||||
executable = framework.child(dylibName).absolutePath
|
||||
val dylibRelativePath = when (target) {
|
||||
KonanTarget.IPHONE, KonanTarget.IPHONE_SIM -> dylibName
|
||||
KonanTarget.MACBOOK -> "Versions/A/$dylibName"
|
||||
else -> error(target)
|
||||
}
|
||||
frameworkLinkerArgs = listOf("-install_name", "@rpath/${framework.name}/$dylibRelativePath")
|
||||
val dylibPath = framework.child(dylibRelativePath)
|
||||
dylibPath.parentFile.mkdirs()
|
||||
executable = dylibPath.absolutePath
|
||||
}
|
||||
|
||||
val linkCommand = platform.linkCommand(objectFiles, executable, optimize, debug, dynamic) +
|
||||
|
||||
+19
-6
@@ -42,7 +42,13 @@ internal class ObjCExport(val context: Context) {
|
||||
val mapper = headerGenerator.mapper
|
||||
|
||||
val framework = File(context.config.outputFile)
|
||||
val headers = framework.child("Headers")
|
||||
val frameworkContents = when (target) {
|
||||
KonanTarget.IPHONE, KonanTarget.IPHONE_SIM -> framework
|
||||
KonanTarget.MACBOOK -> framework.child("Versions/A")
|
||||
else -> error(target)
|
||||
}
|
||||
|
||||
val headers = frameworkContents.child("Headers")
|
||||
|
||||
val frameworkName = framework.name.removeSuffix(".framework")
|
||||
val headerName = frameworkName + ".h"
|
||||
@@ -50,7 +56,7 @@ internal class ObjCExport(val context: Context) {
|
||||
headers.mkdirs()
|
||||
header.writeLines(headerGenerator.build())
|
||||
|
||||
val modules = framework.child("Modules")
|
||||
val modules = frameworkContents.child("Modules")
|
||||
modules.mkdirs()
|
||||
|
||||
val moduleMap = """
|
||||
@@ -64,17 +70,24 @@ internal class ObjCExport(val context: Context) {
|
||||
|
||||
modules.child("module.modulemap").writeBytes(moduleMap.toByteArray())
|
||||
|
||||
emitInfoPlist(framework, frameworkName)
|
||||
emitInfoPlist(frameworkContents, frameworkName)
|
||||
|
||||
if (target == KonanTarget.MACBOOK) {
|
||||
framework.child("Versions/Current").createAsSymlink("A")
|
||||
for (child in listOf(frameworkName, "Headers", "Modules", "Resources")) {
|
||||
framework.child(child).createAsSymlink("Versions/Current/$child")
|
||||
}
|
||||
}
|
||||
|
||||
val objCCodeGenerator = ObjCExportCodeGenerator(CodeGenerator(context), namer, mapper)
|
||||
objCCodeGenerator.emitRtti(headerGenerator.generatedClasses, headerGenerator.topLevel)
|
||||
}
|
||||
|
||||
private fun emitInfoPlist(framework: File, name: String) {
|
||||
private fun emitInfoPlist(frameworkContents: File, name: String) {
|
||||
val directory = when (target) {
|
||||
KonanTarget.IPHONE,
|
||||
KonanTarget.IPHONE_SIM -> framework
|
||||
KonanTarget.MACBOOK -> framework.child("Resources").also { it.mkdirs() }
|
||||
KonanTarget.IPHONE_SIM -> frameworkContents
|
||||
KonanTarget.MACBOOK -> frameworkContents.child("Resources").also { it.mkdirs() }
|
||||
else -> error(target)
|
||||
}
|
||||
|
||||
|
||||
@@ -39,6 +39,8 @@ data class File constructor(internal val javaPath: Path) {
|
||||
get() = javaPath.fileName.toString()
|
||||
val parent: String
|
||||
get() = javaPath.parent.toString()
|
||||
val parentFile: File
|
||||
get() = File(javaPath.parent)
|
||||
|
||||
val exists
|
||||
get() = Files.exists(javaPath)
|
||||
@@ -121,6 +123,14 @@ data class File constructor(internal val javaPath: Path) {
|
||||
}
|
||||
}
|
||||
|
||||
fun createAsSymlink(target: String) {
|
||||
val targetPath = Paths.get(target)
|
||||
if (Files.isSymbolicLink(this.javaPath) && Files.readSymbolicLink(javaPath) == targetPath) {
|
||||
return
|
||||
}
|
||||
Files.createSymbolicLink(this.javaPath, targetPath)
|
||||
}
|
||||
|
||||
override fun toString() = path
|
||||
|
||||
// TODO: Consider removeing these after konanazing java.util.Properties.
|
||||
|
||||
Reference in New Issue
Block a user