[Gradle] Move from constructor KotlinNativeLink task configuration

This should fix ConcurrentModificationException on getting task names
while loading import models in parallel.

^KT-63554 Fixed
This commit is contained in:
Yahor Berdnikau
2023-12-06 23:12:37 +01:00
committed by Space Team
parent df2dcccbf7
commit 71a0dacf81
2 changed files with 22 additions and 23 deletions
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinNativeLink
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.konan.target.CompilerOutputKind
internal val KotlinNativeConfigureBinariesSideEffect = KotlinTargetSideEffect<KotlinNativeTarget> { target ->
val project = target.project
@@ -79,17 +80,28 @@ private fun Project.createLinkTask(binary: NativeBinary) {
val xcodeVersionTask = XcodeVersionTask.locateOrRegister(project)
val linkTask = registerTask<KotlinNativeLink>(
binary.linkTaskName, listOf(binary)
) {
) { task ->
val target = binary.target
it.group = BasePlugin.BUILD_GROUP
it.description = "Links ${binary.outputKind.description} '${binary.name}' for a target '${target.name}'."
it.enabled = binary.konanTarget.enabledOnCurrentHost
it.konanPropertiesService.set(konanPropertiesBuildService)
it.usesService(konanPropertiesBuildService)
it.toolOptions.freeCompilerArgs.value(compilationCompilerOptions.options.freeCompilerArgs)
it.toolOptions.freeCompilerArgs.addAll(providers.provider { PropertiesProvider(project).nativeLinkArgs })
it.runViaBuildToolsApi.value(false).disallowChanges() // K/N is not yet supported
it.xcodeVersion.set(xcodeVersionTask.version)
val compilation = binary.compilation
task.group = BasePlugin.BUILD_GROUP
task.description = "Links ${binary.outputKind.description} '${binary.name}' for a target '${target.name}'."
task.dependsOn(compilation.compileTaskProvider)
task.enabled = binary.konanTarget.enabledOnCurrentHost
task.konanPropertiesService.set(konanPropertiesBuildService)
task.usesService(konanPropertiesBuildService)
task.toolOptions.freeCompilerArgs.value(compilationCompilerOptions.options.freeCompilerArgs)
task.toolOptions.freeCompilerArgs.addAll(providers.provider { PropertiesProvider(project).nativeLinkArgs })
task.runViaBuildToolsApi.value(false).disallowChanges() // K/N is not yet supported
task.xcodeVersion.set(xcodeVersionTask.version)
// Frameworks actively uses symlinks.
// Gradle build cache transforms symlinks into regular files https://guides.gradle.org/using-build-cache/#symbolic_links
task.outputs.cacheIf { task.outputKind != CompilerOutputKind.FRAMEWORK }
task.setSource(compilation.compileTaskProvider.flatMap { it.outputFile })
task.includes.clear() // we need to include non '.kt' or '.kts' files
task.disallowSourceChanges()
}
@@ -73,19 +73,6 @@ constructor(
final override val toolOptions: KotlinCommonCompilerToolOptions = objectFactory
.newInstance<KotlinCommonCompilerToolOptionsDefault>()
init {
@Suppress("DEPRECATION")
this.dependsOn(compilation.compileTaskProvider)
// Frameworks actively uses symlinks.
// Gradle build cache transforms symlinks into regular files https://guides.gradle.org/using-build-cache/#symbolic_links
outputs.cacheIf { outputKind != CompilerOutputKind.FRAMEWORK }
@Suppress("DEPRECATION")
this.setSource(compilation.compileTaskProvider.map { it.outputFile })
includes.clear() // we need to include non '.kt' or '.kts' files
disallowSourceChanges()
}
override val destinationDirectory: DirectoryProperty = binary.outputDirectoryProperty
@get:Classpath