Skip to content

Commit

Permalink
[gradle, mpp] Add Gradle property for crosscompilation of klibs (1/2)
Browse files Browse the repository at this point in the history
Step #1: just convert enabledOnCurrentHostFor(Klib|Binaries)Compilation
to functions. This commit is a non-semantical change, next one will
add a parameter to the function
  • Loading branch information
dsavvinov committed Dec 21, 2023
1 parent bf207f7 commit 7e22fe3
Show file tree
Hide file tree
Showing 13 changed files with 17 additions and 24 deletions.
Expand Up @@ -18,7 +18,7 @@ internal object DisabledNativeTargetsChecker : KotlinGradleProjectChecker {

val disabledTargets = multiplatformExtension.awaitTargets()
.filterIsInstance<KotlinNativeTarget>()
.filter { !it.konanTarget.enabledOnCurrentHostForKlibCompilation }
.filter { !it.konanTarget.enabledOnCurrentHostForKlibCompilation() }
.map { it.name }

if (disabledTargets.isNotEmpty()) {
Expand Down
Expand Up @@ -37,7 +37,7 @@ internal class MetadataDependencyTransformationTaskInputs(
@get:NormalizeLineEndings
val hostSpecificMetadataConfigurationsToResolve: FileCollection = project.filesProvider {
kotlinSourceSet.internal.compilations
.filter { compilation -> if (compilation is KotlinNativeCompilation) compilation.konanTarget.enabledOnCurrentHostForKlibCompilation else true }
.filter { compilation -> if (compilation is KotlinNativeCompilation) compilation.konanTarget.enabledOnCurrentHostForKlibCompilation() else true }
.mapNotNull { compilation ->
compilation
.internal
Expand Down
Expand Up @@ -100,7 +100,7 @@ private object XcodeEnvironment {
}

private fun Project.registerAssembleAppleFrameworkTask(framework: Framework): TaskProvider<out Task>? {
if (!framework.konanTarget.family.isAppleFamily || !framework.konanTarget.enabledOnCurrentHostForBinariesCompilation) return null
if (!framework.konanTarget.family.isAppleFamily || !framework.konanTarget.enabledOnCurrentHostForBinariesCompilation()) return null

val envTargets = XcodeEnvironment.targets
val needFatFramework = envTargets.size > 1
Expand Down
Expand Up @@ -44,7 +44,7 @@ internal val KotlinCreateNativeCInteropTasksSideEffect = KotlinCompilationSideEf
it.description = "Generates Kotlin/Native interop library '${interop.name}' " +
"for compilation '${compilation.compilationName}'" +
"of target '${it.konanTarget.name}'."
it.enabled = compilation.konanTarget.enabledOnCurrentHostForKlibCompilation
it.enabled = compilation.konanTarget.enabledOnCurrentHostForKlibCompilation()
it.definitionFile.set(params.settings.definitionFile)
}

Expand All @@ -64,7 +64,7 @@ internal val KotlinCreateNativeCInteropTasksSideEffect = KotlinCompilationSideEf
createCInteropApiElementsKlibArtifact(compilation.target, interop, interopTask)

// Add the interop library in publication.
if (compilation.konanTarget.enabledOnCurrentHostForKlibCompilation) {
if (compilation.konanTarget.enabledOnCurrentHostForKlibCompilation()) {
createKlibArtifact(
compilation,
artifactFile = interopTask.map { it.outputFile },
Expand Down
Expand Up @@ -38,7 +38,7 @@ internal val KotlinCreateNativeCompileTasksSideEffect = KotlinCompilationSideEff
task.group = BasePlugin.BUILD_GROUP
task.description = "Compiles a klibrary from the '${compilationInfo.compilationName}' " +
"compilation in target '${compilationInfo.targetDisambiguationClassifier}'."
task.enabled = compilation.konanTarget.enabledOnCurrentHostForKlibCompilation
task.enabled = compilation.konanTarget.enabledOnCurrentHostForKlibCompilation()

task.destinationDirectory.set(project.klibOutputDirectory(compilationInfo).dir("klib"))
task.runViaBuildToolsApi.value(false).disallowChanges() // K/N is not yet supported
Expand Down
Expand Up @@ -8,12 +8,8 @@ package org.jetbrains.kotlin.gradle.targets.metadata
import org.gradle.api.NamedDomainObjectContainer
import org.gradle.api.Project
import org.gradle.api.artifacts.result.ResolvedArtifactResult
import org.gradle.api.attributes.Category
import org.gradle.api.attributes.Category.CATEGORY_ATTRIBUTE
import org.gradle.api.attributes.Usage.USAGE_ATTRIBUTE
import org.gradle.api.file.FileCollection
import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.bundling.Jar
import org.jetbrains.kotlin.commonizer.SharedCommonizerTarget
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
import org.jetbrains.kotlin.gradle.dsl.metadataTarget
Expand All @@ -23,7 +19,6 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.*
import org.jetbrains.kotlin.gradle.plugin.sources.*
import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
import org.jetbrains.kotlin.gradle.targets.native.internal.createCInteropMetadataDependencyClasspath
import org.jetbrains.kotlin.gradle.targets.native.internal.includeCommonizedCInteropMetadata
import org.jetbrains.kotlin.gradle.targets.native.internal.sharedCommonizerTarget
import org.jetbrains.kotlin.gradle.tasks.registerTask
import org.jetbrains.kotlin.gradle.utils.*
Expand Down Expand Up @@ -227,7 +222,7 @@ class KotlinMetadataTargetConfigurator :
if (isHostSpecific) {
// This logic can be simplified, see KT-64523
val canCompileOnCurrentHost = platformCompilations.filterIsInstance<KotlinNativeCompilation>()
.all { it.konanTarget.enabledOnCurrentHostForKlibCompilation }
.all { it.konanTarget.enabledOnCurrentHostForKlibCompilation() }
if (!canCompileOnCurrentHost) {
// Then we don't have any platform module to put this compiled source set to, so disable the compilation task:
compileKotlinTaskProvider.configure { it.enabled = false }
Expand Down
Expand Up @@ -87,7 +87,7 @@ private fun Project.createLinkTask(binary: NativeBinary) {
task.description = "Links ${binary.outputKind.description} '${binary.name}' for a target '${target.name}'."
task.dependsOn(compilation.compileTaskProvider)

task.enabled = binary.konanTarget.enabledOnCurrentHostForBinariesCompilation
task.enabled = binary.konanTarget.enabledOnCurrentHostForBinariesCompilation()
task.konanPropertiesService.set(konanPropertiesBuildService)
task.usesService(konanPropertiesBuildService)
task.toolOptions.freeCompilerArgs.value(compilationCompilerOptions.options.freeCompilerArgs)
Expand Down
Expand Up @@ -97,7 +97,7 @@ abstract class KotlinNativeTarget @Inject constructor(
get() = disambiguateName("binaries")

override val publishable: Boolean
get() = konanTarget.enabledOnCurrentHostForKlibCompilation
get() = konanTarget.enabledOnCurrentHostForKlibCompilation()

@ExperimentalKotlinGradlePluginApi
internal override val compilerOptions: KotlinNativeCompilerOptions = project.objects
Expand Down
Expand Up @@ -126,8 +126,6 @@ internal val KonanTarget.isCurrentHost: Boolean
*
* Ideally, these APIs should be in [HostManager] instead of KGP-side wrappers. Refer to KT-64512 for that
*/
internal val KonanTarget.enabledOnCurrentHostForKlibCompilation
get() = HostManager().isEnabled(this)
internal fun KonanTarget.enabledOnCurrentHostForKlibCompilation() = HostManager().isEnabled(this)

internal val KonanTarget.enabledOnCurrentHostForBinariesCompilation
get() = HostManager().isEnabled(this)
internal fun KonanTarget.enabledOnCurrentHostForBinariesCompilation() = HostManager().isEnabled(this)
Expand Up @@ -80,7 +80,7 @@ constructor(
{
// Avoid resolving these dependencies during task graph construction when we can't build the target:
@Suppress("DEPRECATION")
if (konanTarget.enabledOnCurrentHostForBinariesCompilation) compilation.compileDependencyFiles
if (konanTarget.enabledOnCurrentHostForBinariesCompilation()) compilation.compileDependencyFiles
else objectFactory.fileCollection()
}
)
Expand Down
Expand Up @@ -168,7 +168,7 @@ abstract class AbstractKotlinNativeCompile<
override val libraries: ConfigurableFileCollection = objectFactory.fileCollection().from(
{
// Avoid resolving these dependencies during task graph construction when we can't build the target:
if (konanTarget.enabledOnCurrentHostForKlibCompilation)
if (konanTarget.enabledOnCurrentHostForKlibCompilation())
objectFactory.fileCollection().from({ compilation.compileDependencyFiles })
else objectFactory.fileCollection()
}
Expand Down
Expand Up @@ -74,7 +74,7 @@ class KotlinNativeFrameworkImpl(
val resultTask = project.registerTask<Task>(taskName) { task ->
task.group = BasePlugin.BUILD_GROUP
task.description = "Assemble ${kind.description} '$artifactName' for ${target.visibleName}."
task.enabled = target.enabledOnCurrentHostForBinariesCompilation
task.enabled = target.enabledOnCurrentHostForBinariesCompilation()
}

val librariesConfigurationName = project.registerLibsDependencies(target, artifactName, modules)
Expand Down Expand Up @@ -113,7 +113,7 @@ internal fun KotlinNativeArtifact.registerLinkFrameworkTask(
listOf(target, kind.compilerOutputKind)
) { task ->
task.description = "Assemble ${kind.description} '$name' for a target '${target.name}'."
task.enabled = target.enabledOnCurrentHostForBinariesCompilation
task.enabled = target.enabledOnCurrentHostForBinariesCompilation()
task.baseName.set(name)
task.destinationDir.set(destinationDir)
task.optimized.set(buildType.optimized)
Expand Down
Expand Up @@ -74,7 +74,7 @@ class KotlinNativeLibraryImpl(
val resultTask = project.registerTask<Task>(taskName) { task ->
task.group = BasePlugin.BUILD_GROUP
task.description = "Assemble all types of registered '$artifactName' ${kind.description} for ${target.visibleName}."
task.enabled = target.enabledOnCurrentHostForBinariesCompilation
task.enabled = target.enabledOnCurrentHostForBinariesCompilation()
}
project.tasks.named(LifecycleBasePlugin.ASSEMBLE_TASK_NAME).dependsOn(resultTask)

Expand All @@ -87,7 +87,7 @@ class KotlinNativeLibraryImpl(
) { task ->
task.description = "Assemble ${kind.description} '$artifactName' for a target '${target.name}'."
task.destinationDir.set(project.layout.buildDirectory.dir("$outDir/${target.visibleName}/${buildType.visibleName}"))
task.enabled = target.enabledOnCurrentHostForBinariesCompilation
task.enabled = target.enabledOnCurrentHostForBinariesCompilation()
task.baseName.set(artifactName)
task.optimized.set(buildType.optimized)
task.debuggable.set(buildType.debuggable)
Expand Down

0 comments on commit 7e22fe3

Please sign in to comment.