Delete umbrella Apple framework tasks and register concrete tasks.
#KT-46680
This commit is contained in:
committed by
teamcityserver
parent
55a9f1a910
commit
80ce3a5cf8
+6
-8
@@ -33,14 +33,14 @@ class AppleFrameworkIT : KotlinAndroid36GradleIT() {
|
|||||||
"SDK_NAME" to "iphoneos123"
|
"SDK_NAME" to "iphoneos123"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
build("assembleAppleFrameworkForXcode", options = options) {
|
build("assembleSharedDebugAppleFrameworkForXcodeIosArm64", options = options) {
|
||||||
assertSuccessful()
|
assertSuccessful()
|
||||||
assertTasksExecuted(":shared:assembleSharedDebugAppleFrameworkForXcodeIosArm64")
|
assertTasksExecuted(":shared:assembleSharedDebugAppleFrameworkForXcodeIosArm64")
|
||||||
assertFileExists("/shared/build/xcode-frameworks/debug/iphoneos123/shared.framework")
|
assertFileExists("/shared/build/xcode-frameworks/debug/iphoneos123/shared.framework")
|
||||||
assertFileExists("/shared/build/xcode-frameworks/debug/iphoneos123/shared.framework.dSYM")
|
assertFileExists("/shared/build/xcode-frameworks/debug/iphoneos123/shared.framework.dSYM")
|
||||||
}
|
}
|
||||||
|
|
||||||
build("assembleAppleFrameworkForXcode", options = options) {
|
build("assembleSharedDebugAppleFrameworkForXcodeIosArm64", options = options) {
|
||||||
assertSuccessful()
|
assertSuccessful()
|
||||||
assertTasksUpToDate(":shared:assembleSharedDebugAppleFrameworkForXcodeIosArm64")
|
assertTasksUpToDate(":shared:assembleSharedDebugAppleFrameworkForXcodeIosArm64")
|
||||||
assertFileExists("/shared/build/xcode-frameworks/debug/iphoneos123/shared.framework")
|
assertFileExists("/shared/build/xcode-frameworks/debug/iphoneos123/shared.framework")
|
||||||
@@ -55,8 +55,8 @@ class AppleFrameworkIT : KotlinAndroid36GradleIT() {
|
|||||||
build("tasks") {
|
build("tasks") {
|
||||||
assertSuccessful()
|
assertSuccessful()
|
||||||
assertTasksNotRegistered(
|
assertTasksNotRegistered(
|
||||||
":shared:assembleAppleFrameworkForXcode",
|
":shared:assembleSharedDebugAppleFrameworkForXcodeIosArm64",
|
||||||
":shared:embedAndSignAppleFrameworkForXcode"
|
":shared:embedAndSignSharedAppleFrameworkForXcode"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -77,9 +77,8 @@ class AppleFrameworkIT : KotlinAndroid36GradleIT() {
|
|||||||
build("tasks", options = options) {
|
build("tasks", options = options) {
|
||||||
assertSuccessful()
|
assertSuccessful()
|
||||||
assertTasksRegistered(
|
assertTasksRegistered(
|
||||||
":shared:assembleAppleFrameworkForXcode",
|
|
||||||
":shared:assembleSharedDebugAppleFrameworkForXcodeIosArm64",
|
":shared:assembleSharedDebugAppleFrameworkForXcodeIosArm64",
|
||||||
":shared:embedAndSignAppleFrameworkForXcode"
|
":shared:embedAndSignSharedAppleFrameworkForXcode"
|
||||||
)
|
)
|
||||||
assertTasksNotRegistered(":shared:assembleSharedDebugAppleFrameworkForXcodeIosX64")
|
assertTasksNotRegistered(":shared:assembleSharedDebugAppleFrameworkForXcodeIosX64")
|
||||||
}
|
}
|
||||||
@@ -98,11 +97,10 @@ class AppleFrameworkIT : KotlinAndroid36GradleIT() {
|
|||||||
build("tasks", options = options) {
|
build("tasks", options = options) {
|
||||||
assertSuccessful()
|
assertSuccessful()
|
||||||
assertTasksRegistered(
|
assertTasksRegistered(
|
||||||
":shared:assembleAppleFrameworkForXcode",
|
|
||||||
":shared:assembleSharedDebugAppleFrameworkForXcodeIosArm64",
|
":shared:assembleSharedDebugAppleFrameworkForXcodeIosArm64",
|
||||||
)
|
)
|
||||||
assertTasksNotRegistered(
|
assertTasksNotRegistered(
|
||||||
":shared:embedAndSignAppleFrameworkForXcode",
|
":shared:embedAndSignSharedAppleFrameworkForXcode",
|
||||||
":shared:assembleSharedDebugAppleFrameworkForXcodeIosX64"
|
":shared:assembleSharedDebugAppleFrameworkForXcodeIosX64"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
-3
@@ -26,7 +26,6 @@ import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
|
|||||||
import org.jetbrains.kotlin.gradle.internal.customizeKotlinDependencies
|
import org.jetbrains.kotlin.gradle.internal.customizeKotlinDependencies
|
||||||
import org.jetbrains.kotlin.gradle.plugin.*
|
import org.jetbrains.kotlin.gradle.plugin.*
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMultiplatformPlugin.Companion.sourceSetFreeCompilerArgsPropertyName
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMultiplatformPlugin.Companion.sourceSetFreeCompilerArgsPropertyName
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.registerEmbedAndSignAppleFrameworkTask
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.*
|
import org.jetbrains.kotlin.gradle.plugin.sources.*
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.DefaultLanguageSettingsBuilder
|
import org.jetbrains.kotlin.gradle.plugin.sources.DefaultLanguageSettingsBuilder
|
||||||
import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
|
import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
|
||||||
@@ -107,8 +106,6 @@ class KotlinMultiplatformPlugin : Plugin<Project> {
|
|||||||
|
|
||||||
exportProjectStructureMetadataForOtherBuilds(project)
|
exportProjectStructureMetadataForOtherBuilds(project)
|
||||||
|
|
||||||
project.registerEmbedAndSignAppleFrameworkTask()
|
|
||||||
|
|
||||||
SingleActionPerBuild.run(project.rootProject, "cleanup-processed-metadata") {
|
SingleActionPerBuild.run(project.rootProject, "cleanup-processed-metadata") {
|
||||||
if (isConfigurationCacheAvailable(project.gradle)) {
|
if (isConfigurationCacheAvailable(project.gradle)) {
|
||||||
BuildEventsListenerRegistryHolder.getInstance(project).listenerRegistry!!.onTaskCompletion(
|
BuildEventsListenerRegistryHolder.getInstance(project).listenerRegistry!!.onTaskCompletion(
|
||||||
|
|||||||
+27
-56
@@ -5,19 +5,13 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.plugin.mpp.apple
|
package org.jetbrains.kotlin.gradle.plugin.mpp.apple
|
||||||
|
|
||||||
import org.gradle.api.NamedDomainObjectCollection
|
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.Task
|
|
||||||
import org.gradle.api.plugins.BasePlugin
|
import org.gradle.api.plugins.BasePlugin
|
||||||
import org.gradle.api.tasks.Copy
|
import org.gradle.api.tasks.Copy
|
||||||
import org.gradle.api.tasks.TaskProvider
|
import org.gradle.api.tasks.TaskProvider
|
||||||
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
|
|
||||||
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.gradle.plugin.mpp.NativeBuildType
|
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.enabledOnCurrentHost
|
import org.jetbrains.kotlin.gradle.plugin.mpp.enabledOnCurrentHost
|
||||||
import org.jetbrains.kotlin.gradle.tasks.dependsOn
|
|
||||||
import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask
|
|
||||||
import org.jetbrains.kotlin.gradle.tasks.registerTask
|
import org.jetbrains.kotlin.gradle.tasks.registerTask
|
||||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||||
@@ -72,8 +66,8 @@ private object XcodeEnvironment {
|
|||||||
val sign: String? get() = System.getenv("EXPANDED_CODE_SIGN_IDENTITY")
|
val sign: String? get() = System.getenv("EXPANDED_CODE_SIGN_IDENTITY")
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun Project.registerAssembleAppleFrameworkTask(framework: Framework) {
|
private fun Project.registerAssembleAppleFrameworkTask(framework: Framework): TaskProvider<Copy>? {
|
||||||
if (!framework.konanTarget.family.isAppleFamily || !framework.konanTarget.enabledOnCurrentHost) return
|
if (!framework.konanTarget.family.isAppleFamily || !framework.konanTarget.enabledOnCurrentHost) return null
|
||||||
|
|
||||||
val frameworkBuildType = framework.buildType
|
val frameworkBuildType = framework.buildType
|
||||||
val frameworkTarget = framework.target
|
val frameworkTarget = framework.target
|
||||||
@@ -102,55 +96,46 @@ internal fun Project.registerAssembleAppleFrameworkTask(framework: Framework) {
|
|||||||
"('SDK_NAME' and 'CONFIGURATION' not provided)"
|
"('SDK_NAME' and 'CONFIGURATION' not provided)"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
return
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
if (frameworkBuildType != envBuildType || frameworkTarget.konanTarget != envTarget) return
|
if (frameworkBuildType != envBuildType || frameworkTarget.konanTarget != envTarget) return null
|
||||||
|
|
||||||
umbrellaAssembleAppleFrameworkTask.dependsOn(
|
return registerTask(frameworkTaskName) { task ->
|
||||||
registerTask<Copy>(frameworkTaskName) { task ->
|
task.group = BasePlugin.BUILD_GROUP
|
||||||
task.group = BasePlugin.BUILD_GROUP
|
task.description = "Packs $frameworkBuildType ${frameworkTarget.name} framework for Xcode"
|
||||||
task.description = "Packs $frameworkBuildType ${frameworkTarget.name} framework for Xcode"
|
task.dependsOn(framework.linkTaskName)
|
||||||
task.dependsOn(framework.linkTaskName)
|
task.from(framework.outputDirectory)
|
||||||
task.from(framework.outputDirectory)
|
task.into(appleFrameworkDir(envFrameworkSearchDir))
|
||||||
task.into(appleFrameworkDir(envFrameworkSearchDir))
|
}
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private const val UMBRELLA_ASSEMBLE_APPLE_FRAMEWORK = "assembleAppleFrameworkForXcode"
|
internal fun Project.registerEmbedAndSignAppleFrameworkTask(framework: Framework) {
|
||||||
private val Project.umbrellaAssembleAppleFrameworkTask: TaskProvider<Task>
|
val assembleTask = registerAssembleAppleFrameworkTask(framework) ?: return
|
||||||
get() = locateOrRegisterTask(UMBRELLA_ASSEMBLE_APPLE_FRAMEWORK) {
|
|
||||||
it.group = "build"
|
|
||||||
it.description = "Build all frameworks as requested by Xcode's environment variables"
|
|
||||||
}
|
|
||||||
|
|
||||||
private const val EMBED_AND_SIGN_APPLE_FRAMEWORK = "embedAndSignAppleFrameworkForXcode"
|
|
||||||
internal fun Project.registerEmbedAndSignAppleFrameworkTask() {
|
|
||||||
val envBuildType = XcodeEnvironment.buildType
|
val envBuildType = XcodeEnvironment.buildType
|
||||||
val envTarget = XcodeEnvironment.target
|
val envTarget = XcodeEnvironment.target
|
||||||
val envEmbeddedFrameworksDir = XcodeEnvironment.embeddedFrameworksDir
|
val envEmbeddedFrameworksDir = XcodeEnvironment.embeddedFrameworksDir
|
||||||
val envFrameworkSearchDir = XcodeEnvironment.frameworkSearchDir
|
val envFrameworkSearchDir = XcodeEnvironment.frameworkSearchDir
|
||||||
val envSign = XcodeEnvironment.sign
|
val envSign = XcodeEnvironment.sign
|
||||||
|
|
||||||
|
val frameworkTaskName = lowerCamelCaseName("embedAndSign", framework.baseName, "AppleFrameworkForXcode")
|
||||||
|
|
||||||
if (envBuildType == null || envTarget == null || envEmbeddedFrameworksDir == null || envFrameworkSearchDir == null) {
|
if (envBuildType == null || envTarget == null || envEmbeddedFrameworksDir == null || envFrameworkSearchDir == null) {
|
||||||
logger.debug(
|
logger.debug(
|
||||||
"Not registering $EMBED_AND_SIGN_APPLE_FRAMEWORK, since not called from Xcode " +
|
"Not registering $frameworkTaskName, since not called from Xcode " +
|
||||||
"('SDK_NAME', 'CONFIGURATION', 'TARGET_BUILD_DIR' and 'FRAMEWORKS_FOLDER_PATH' not provided)"
|
"('SDK_NAME', 'CONFIGURATION', 'TARGET_BUILD_DIR' and 'FRAMEWORKS_FOLDER_PATH' not provided)"
|
||||||
)
|
)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
registerTask<Copy>(EMBED_AND_SIGN_APPLE_FRAMEWORK) { task ->
|
if (framework.buildType != envBuildType || framework.konanTarget != envTarget) return
|
||||||
|
|
||||||
|
registerTask<Copy>(frameworkTaskName) { task ->
|
||||||
task.group = "build"
|
task.group = "build"
|
||||||
task.description = "Embed and sign all frameworks as requested by Xcode's environment variables"
|
task.description = "Embed and sign ${framework.baseName} framework as requested by Xcode's environment variables"
|
||||||
|
|
||||||
val appleTargets: NamedDomainObjectCollection<KotlinNativeTarget>? =
|
task.dependsOn(assembleTask)
|
||||||
multiplatformExtensionOrNull?.targets
|
|
||||||
?.withType(KotlinNativeTarget::class.java)
|
|
||||||
?.matching { it.konanTarget == envTarget }
|
|
||||||
|
|
||||||
task.dependsOn(UMBRELLA_ASSEMBLE_APPLE_FRAMEWORK)
|
|
||||||
task.inputs.apply {
|
task.inputs.apply {
|
||||||
property("type", envBuildType)
|
property("type", envBuildType)
|
||||||
property("target", envTarget)
|
property("target", envTarget)
|
||||||
@@ -158,33 +143,19 @@ internal fun Project.registerEmbedAndSignAppleFrameworkTask() {
|
|||||||
property("sign", envSign)
|
property("sign", envSign)
|
||||||
}
|
}
|
||||||
|
|
||||||
task.onlyIf { !appleTargets.isNullOrEmpty() }
|
|
||||||
|
|
||||||
task.from(appleFrameworkDir(envFrameworkSearchDir)) { spec ->
|
task.from(appleFrameworkDir(envFrameworkSearchDir)) { spec ->
|
||||||
appleTargets?.all { target ->
|
spec.include(framework.outputFile.name + "/**")
|
||||||
target.binaries.withType(Framework::class.java)
|
|
||||||
.matching { f -> f.buildType == envBuildType }
|
|
||||||
.all { framework ->
|
|
||||||
spec.include(framework.outputFile.name + "/**")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
task.into(envEmbeddedFrameworksDir)
|
task.into(envEmbeddedFrameworksDir)
|
||||||
|
|
||||||
if (envSign != null) {
|
if (envSign != null) {
|
||||||
task.doLast {
|
task.doLast {
|
||||||
appleTargets?.all { target ->
|
val binary = envEmbeddedFrameworksDir
|
||||||
target.binaries.withType(Framework::class.java)
|
.resolve(framework.outputFile.name)
|
||||||
.matching { f -> f.buildType == envBuildType }
|
.resolve(framework.outputFile.nameWithoutExtension)
|
||||||
.all { framework ->
|
exec {
|
||||||
val binary = envEmbeddedFrameworksDir
|
it.commandLine("codesign", "--force", "--sign", envSign, "--", binary)
|
||||||
.resolve(framework.outputFile.name)
|
|
||||||
.resolve(framework.outputFile.nameWithoutExtension)
|
|
||||||
exec {
|
|
||||||
it.commandLine("codesign", "--force", "--sign", envSign, "--", binary)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-4
@@ -29,7 +29,7 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.Companion.MAIN_COMPI
|
|||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.Companion.TEST_COMPILATION_NAME
|
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.Companion.TEST_COMPILATION_NAME
|
||||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.KOTLIN_NATIVE_IGNORE_INCORRECT_DEPENDENCIES
|
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.KOTLIN_NATIVE_IGNORE_INCORRECT_DEPENDENCIES
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.registerAssembleAppleFrameworkTask
|
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.registerEmbedAndSignAppleFrameworkTask
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
|
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
|
||||||
import org.jetbrains.kotlin.gradle.targets.metadata.isKotlinGranularMetadataEnabled
|
import org.jetbrains.kotlin.gradle.targets.metadata.isKotlinGranularMetadataEnabled
|
||||||
import org.jetbrains.kotlin.gradle.targets.native.*
|
import org.jetbrains.kotlin.gradle.targets.native.*
|
||||||
@@ -243,7 +243,7 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget> : AbstractKotl
|
|||||||
configureCInterops(target)
|
configureCInterops(target)
|
||||||
|
|
||||||
if (target.konanTarget.family.isAppleFamily) {
|
if (target.konanTarget.family.isAppleFamily) {
|
||||||
registerAssembleAppleFrameworkTasks(target)
|
registerEmbedAndSignAppleFrameworkTasks(target)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PropertiesProvider(target.project).ignoreIncorrectNativeDependencies != true) {
|
if (PropertiesProvider(target.project).ignoreIncorrectNativeDependencies != true) {
|
||||||
@@ -360,10 +360,10 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget> : AbstractKotl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun registerAssembleAppleFrameworkTasks(target: KotlinNativeTarget) {
|
private fun registerEmbedAndSignAppleFrameworkTasks(target: KotlinNativeTarget) {
|
||||||
val project = target.project
|
val project = target.project
|
||||||
target.binaries.withType(Framework::class.java).all { framework ->
|
target.binaries.withType(Framework::class.java).all { framework ->
|
||||||
project.registerAssembleAppleFrameworkTask(framework)
|
project.registerEmbedAndSignAppleFrameworkTask(framework)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user