[Gradle, K/N] Don't add unsupported targets to default fat frameworks task

This commit is contained in:
Alexander Likhachev
2021-03-02 17:13:46 +03:00
parent bc5fc122c5
commit c5a9f20a6f
2 changed files with 51 additions and 32 deletions
@@ -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)) {
it.isCanBeConsumed = true
it.isCanBeResolved = false
it.configureConfiguration(linkTask)
}
val fatFrameworkConfigurationName = lowerCamelCaseName(binary.name, binary.target.konanTarget.family.name.toLowerCase(), "fat")
val fatFrameworkTaskName = "link${fatFrameworkConfigurationName.capitalize()}"
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())
}
if (FatFrameworkTask.isSupportedTarget(binary.target)) {
configureFatFramework()
}
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) {
@@ -11,6 +11,7 @@ import org.gradle.api.file.FileTree
import org.gradle.api.tasks.*
import org.jetbrains.kotlin.gradle.plugin.cocoapods.asValidFrameworkName
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.Family
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.
*/
open class FatFrameworkTask: DefaultTask() {
open class FatFrameworkTask : DefaultTask() {
//region DSL properties.
/**
@@ -335,4 +336,16 @@ open class FatFrameworkTask: DefaultTask() {
mergePlists(fatFramework.infoPlist, frameworkName)
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
}
}
}