[Gradle, K/N] Don't add unsupported targets to default fat frameworks task
This commit is contained in:
+37
-31
@@ -194,44 +194,50 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun configureFatFramework() {
|
||||||
|
val fatFrameworkConfigurationName = lowerCamelCaseName(binary.name, binary.target.konanTarget.family.name.toLowerCase(), "fat")
|
||||||
|
val fatFrameworkTaskName = "link${fatFrameworkConfigurationName.capitalize()}"
|
||||||
|
|
||||||
|
val fatFrameworkTask = if (fatFrameworkTaskName in tasks.names) {
|
||||||
|
tasks.named(fatFrameworkTaskName, FatFrameworkTask::class.java)
|
||||||
|
} else {
|
||||||
|
tasks.register(fatFrameworkTaskName, FatFrameworkTask::class.java) {
|
||||||
|
it.baseName = binary.baseName
|
||||||
|
it.destinationDir = it.destinationDir.resolve(binary.buildType.name.toLowerCase())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fatFrameworkTask.configure {
|
||||||
|
try {
|
||||||
|
it.from(binary)
|
||||||
|
} catch (e: Exception) {
|
||||||
|
logger.warn("Cannot add binary ${binary.name} dependency to default fat framework", e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// maybeCreate is not used as it does not provide way to configure once
|
||||||
|
val fatConfiguration =
|
||||||
|
configurations.findByName(fatFrameworkConfigurationName) ?: configurations.create(fatFrameworkConfigurationName) {
|
||||||
|
it.isCanBeConsumed = true
|
||||||
|
it.isCanBeResolved = false
|
||||||
|
it.configureConfiguration(fatFrameworkTask)
|
||||||
|
}
|
||||||
|
|
||||||
|
fatConfiguration.attributes.attribute(
|
||||||
|
Framework.frameworkTargets,
|
||||||
|
(fatConfiguration.attributes.getAttribute(Framework.frameworkTargets) ?: setOf<String>()) + binary.target.konanTarget.name
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
configurations.create(lowerCamelCaseName(binary.name, binary.target.name)) {
|
configurations.create(lowerCamelCaseName(binary.name, binary.target.name)) {
|
||||||
it.isCanBeConsumed = true
|
it.isCanBeConsumed = true
|
||||||
it.isCanBeResolved = false
|
it.isCanBeResolved = false
|
||||||
it.configureConfiguration(linkTask)
|
it.configureConfiguration(linkTask)
|
||||||
}
|
}
|
||||||
|
|
||||||
val fatFrameworkConfigurationName = lowerCamelCaseName(binary.name, binary.target.konanTarget.family.name.toLowerCase(), "fat")
|
if (FatFrameworkTask.isSupportedTarget(binary.target)) {
|
||||||
val fatFrameworkTaskName = "link${fatFrameworkConfigurationName.capitalize()}"
|
configureFatFramework()
|
||||||
|
|
||||||
val fatFrameworkTask = try {
|
|
||||||
tasks.named(fatFrameworkTaskName, FatFrameworkTask::class.java)
|
|
||||||
} catch (e: UnknownDomainObjectException) {
|
|
||||||
tasks.register(fatFrameworkTaskName, FatFrameworkTask::class.java) {
|
|
||||||
it.baseName = binary.baseName
|
|
||||||
it.destinationDir = it.destinationDir.resolve(binary.buildType.name.toLowerCase())
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fatFrameworkTask.configure {
|
|
||||||
try {
|
|
||||||
it.from(binary)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
logger.warn("Cannot add binary ${binary.name} dependency to fat framework", e)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// maybeCreate is not used as it does not provide way to configure once
|
|
||||||
val fatConfiguration =
|
|
||||||
configurations.findByName(fatFrameworkConfigurationName) ?: configurations.create(fatFrameworkConfigurationName) {
|
|
||||||
it.isCanBeConsumed = true
|
|
||||||
it.isCanBeResolved = false
|
|
||||||
it.configureConfiguration(fatFrameworkTask)
|
|
||||||
}
|
|
||||||
|
|
||||||
fatConfiguration.attributes.attribute(
|
|
||||||
Framework.frameworkTargets,
|
|
||||||
(fatConfiguration.attributes.getAttribute(Framework.frameworkTargets) ?: setOf<String>()) + binary.target.konanTarget.name
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun Project.createRunTask(binary: Executable) {
|
private fun Project.createRunTask(binary: Executable) {
|
||||||
|
|||||||
+14
-1
@@ -11,6 +11,7 @@ import org.gradle.api.file.FileTree
|
|||||||
import org.gradle.api.tasks.*
|
import org.gradle.api.tasks.*
|
||||||
import org.jetbrains.kotlin.gradle.plugin.cocoapods.asValidFrameworkName
|
import org.jetbrains.kotlin.gradle.plugin.cocoapods.asValidFrameworkName
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.Framework
|
import org.jetbrains.kotlin.gradle.plugin.mpp.Framework
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
|
||||||
import org.jetbrains.kotlin.konan.target.Architecture
|
import org.jetbrains.kotlin.konan.target.Architecture
|
||||||
import org.jetbrains.kotlin.konan.target.Family
|
import org.jetbrains.kotlin.konan.target.Family
|
||||||
import org.jetbrains.kotlin.konan.target.KonanTarget.*
|
import org.jetbrains.kotlin.konan.target.KonanTarget.*
|
||||||
@@ -63,7 +64,7 @@ private class IosFrameworkFiles(val rootDir: File) {
|
|||||||
/**
|
/**
|
||||||
* Task running lipo to create a fat framework from several simple frameworks. It also merges headers, plists and module files.
|
* Task running lipo to create a fat framework from several simple frameworks. It also merges headers, plists and module files.
|
||||||
*/
|
*/
|
||||||
open class FatFrameworkTask: DefaultTask() {
|
open class FatFrameworkTask : DefaultTask() {
|
||||||
|
|
||||||
//region DSL properties.
|
//region DSL properties.
|
||||||
/**
|
/**
|
||||||
@@ -335,4 +336,16 @@ open class FatFrameworkTask: DefaultTask() {
|
|||||||
mergePlists(fatFramework.infoPlist, frameworkName)
|
mergePlists(fatFramework.infoPlist, frameworkName)
|
||||||
mergeDSYM()
|
mergeDSYM()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private val supportedTargets = listOf(
|
||||||
|
IOS_ARM32, IOS_ARM64, IOS_X64,
|
||||||
|
WATCHOS_ARM32, WATCHOS_ARM64, WATCHOS_X86, WATCHOS_X64,
|
||||||
|
TVOS_ARM64, TVOS_X64
|
||||||
|
)
|
||||||
|
|
||||||
|
fun isSupportedTarget(target: KotlinNativeTarget): Boolean {
|
||||||
|
return target.konanTarget in supportedTargets
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user