[gradle-plugin] Rework class hierarchy for frameworks

This commit is contained in:
Ilya Matveev
2018-07-20 16:28:31 +07:00
committed by ilmat192
parent 8bcf5d9e39
commit 1149ae07e2
6 changed files with 65 additions and 64 deletions
@@ -1,14 +1,21 @@
package org.jetbrains.kotlin.gradle.plugin.experimental
import org.gradle.api.artifacts.Configuration
import org.gradle.api.attributes.Attribute
import org.gradle.api.attributes.AttributeContainer
import org.gradle.api.component.BuildableComponent
import org.gradle.api.component.PublishableComponent
import org.gradle.api.file.FileCollection
import org.gradle.api.file.RegularFile
import org.gradle.api.provider.Property
import org.gradle.api.provider.Provider
import org.gradle.language.ComponentWithDependencies
import org.gradle.language.ComponentWithOutputs
import org.gradle.language.nativeplatform.ComponentWithLinkUsage
import org.gradle.language.nativeplatform.internal.ComponentWithNames
import org.gradle.language.nativeplatform.internal.ConfigurableComponentWithLinkUsage
import org.gradle.language.nativeplatform.internal.ConfigurableComponentWithRuntimeUsage
import org.gradle.nativeplatform.Linkage
import org.gradle.nativeplatform.test.TestComponent
import org.jetbrains.kotlin.gradle.plugin.experimental.internal.KotlinNativePlatform
import org.jetbrains.kotlin.gradle.plugin.experimental.tasks.KotlinNativeCompile
@@ -75,6 +82,11 @@ interface KotlinNativeLibrary : KotlinNativeBinary,
PublishableComponent,
ConfigurableComponentWithLinkUsage
/**
* Represents an Objective C framework compiled from KN sources.
*/
interface KotlinNativeFramework : KotlinNativeBinary, ComponentWithOutputs
/**
* Represents a test executable.
*/
@@ -0,0 +1,37 @@
package org.jetbrains.kotlin.gradle.plugin.experimental.internal
import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.ConfigurationContainer
import org.gradle.api.file.ProjectLayout
import org.gradle.api.internal.file.FileOperations
import org.gradle.api.model.ObjectFactory
import org.gradle.api.provider.Provider
import org.jetbrains.kotlin.gradle.plugin.experimental.KotlinNativeFramework
import org.jetbrains.kotlin.konan.target.CompilerOutputKind
import javax.inject.Inject
open class KotlinNativeFrameworkImpl @Inject constructor(
name: String,
baseName: Provider<String>,
componentImplementation: Configuration,
component: KotlinNativeMainComponent,
identity: KotlinNativeVariantIdentity,
projectLayout: ProjectLayout,
objects: ObjectFactory,
configurations: ConfigurationContainer,
fileOperations: FileOperations
) : AbstractKotlinNativeBinary(
name,
baseName,
component,
identity,
projectLayout,
CompilerOutputKind.FRAMEWORK,
objects,
componentImplementation,
configurations,
fileOperations
), KotlinNativeFramework {
override val outputRootName: String = "lib"
}
@@ -15,19 +15,18 @@ import org.gradle.api.provider.Property
import org.gradle.api.provider.Provider
import org.gradle.language.cpp.internal.DefaultUsageContext
import org.gradle.nativeplatform.Linkage
import org.jetbrains.kotlin.gradle.plugin.experimental.KotlinNativeFramework
import org.jetbrains.kotlin.gradle.plugin.experimental.KotlinNativeLibrary
import org.jetbrains.kotlin.gradle.plugin.experimental.sourcesets.KotlinNativeSourceSet
import org.jetbrains.kotlin.konan.target.CompilerOutputKind
import javax.inject.Inject
abstract class AbstractKotlinNativeLibrary(
open class KotlinNativeLibraryImpl @Inject constructor(
name: String,
baseName: Provider<String>,
componentImplementation: Configuration,
component: KotlinNativeMainComponent,
identity: KotlinNativeVariantIdentity,
projectLayout: ProjectLayout,
outputKind: CompilerOutputKind,
objects: ObjectFactory,
configurations: ConfigurationContainer,
fileOperations: FileOperations
@@ -36,7 +35,7 @@ abstract class AbstractKotlinNativeLibrary(
component,
identity,
projectLayout,
outputKind,
CompilerOutputKind.LIBRARY,
objects,
componentImplementation,
configurations,
@@ -69,49 +68,3 @@ abstract class AbstractKotlinNativeLibrary(
override val outputRootName = "lib"
}
open class KotlinNativeLibraryImpl @Inject constructor(
name: String,
baseName: Provider<String>,
componentImplementation: Configuration,
component: KotlinNativeMainComponent,
identity: KotlinNativeVariantIdentity,
projectLayout: ProjectLayout,
objects: ObjectFactory,
configurations: ConfigurationContainer,
fileOperations: FileOperations
) : AbstractKotlinNativeLibrary(
name,
baseName,
componentImplementation,
component,
identity,
projectLayout,
CompilerOutputKind.LIBRARY,
objects,
configurations,
fileOperations
)
open class KotlinNativeFrameworkImpl @Inject constructor(
name: String,
baseName: Provider<String>,
componentImplementation: Configuration,
component: KotlinNativeMainComponent,
identity: KotlinNativeVariantIdentity,
projectLayout: ProjectLayout,
objects: ObjectFactory,
configurations: ConfigurationContainer,
fileOperations: FileOperations
) : AbstractKotlinNativeLibrary(
name,
baseName,
componentImplementation,
component,
identity,
projectLayout,
CompilerOutputKind.FRAMEWORK,
objects,
configurations,
fileOperations
)
@@ -57,7 +57,7 @@ open class KotlinNativeMainComponent @Inject constructor(
addBinary(T::class.java, identity)
fun addExecutable(identity: NativeVariantIdentity) = addBinary<KotlinNativeExecutableImpl>(identity)
fun addKLibrary(identity: NativeVariantIdentity) = addBinary<KotlinNativeLibraryImpl>(identity)
fun addLibrary(identity: NativeVariantIdentity) = addBinary<KotlinNativeLibraryImpl>(identity)
fun addFramework(identity: NativeVariantIdentity) = addBinary<KotlinNativeFrameworkImpl>(identity)
fun addBinary(kind: OutputKind, identity: NativeVariantIdentity) = addBinary(kind.binaryClass, identity)
@@ -2,12 +2,16 @@ package org.jetbrains.kotlin.gradle.plugin.experimental.plugins
import org.gradle.api.DefaultTask
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.Task
import org.gradle.api.component.SoftwareComponentContainer
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.file.RegularFile
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.internal.FeaturePreviews
import org.gradle.api.internal.project.ProjectInternal
import org.gradle.api.plugins.BasePlugin
import org.gradle.api.provider.Provider
import org.gradle.api.provider.ProviderFactory
import org.gradle.api.tasks.TaskContainer
import org.gradle.language.base.plugins.LifecycleBasePlugin
@@ -23,6 +27,7 @@ import org.jetbrains.kotlin.gradle.plugin.setProperty
import org.jetbrains.kotlin.gradle.plugin.tasks.KonanCompilerDownloadTask
import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.konan.target.KonanTarget
import java.io.File
class KotlinNativeBasePlugin: Plugin<ProjectInternal> {
@@ -61,12 +66,7 @@ class KotlinNativeBasePlugin: Plugin<ProjectInternal> {
get() = this == HostManager.host
private fun addCompilationTasks(
tasks: TaskContainer,
components: SoftwareComponentContainer,
buildDirectory: DirectoryProperty,
providers: ProviderFactory
) {
private fun Project.addCompilationTasks() {
val assembleTask = tasks.getByName(LifecycleBasePlugin.ASSEMBLE_TASK_NAME)
val typeToAssemble = mutableMapOf<KotlinNativeBuildType, Task>()
val targetToAssemble = mutableMapOf<KonanTarget, Task>()
@@ -88,7 +88,7 @@ class KotlinNativeBasePlugin: Plugin<ProjectInternal> {
KotlinNativeCompile::class.java
).apply {
this.binary = binary
outputFile.set(buildDirectory.file(providers.provider {
outputFile.set(layout.buildDirectory.file(providers.provider {
val root = binary.outputRootName
val prefix = kind.prefix(target)
val suffix = kind.suffix(target)
@@ -104,7 +104,7 @@ class KotlinNativeBasePlugin: Plugin<ProjectInternal> {
when(binary) {
is KotlinNativeExecutableImpl -> binary.runtimeFile.set(compileTask.outputFile)
is AbstractKotlinNativeLibrary -> binary.linkFile.set(compileTask.outputFile)
is KotlinNativeLibraryImpl -> binary.linkFile.set(compileTask.outputFile)
}
if (binary is KotlinNativeTestExecutableImpl) {
@@ -177,7 +177,7 @@ class KotlinNativeBasePlugin: Plugin<ProjectInternal> {
checkGradleVersion()
addCompilerDownloadingTask()
addCompilationTasks(tasks, components, layout.buildDirectory, providers)
addCompilationTasks()
}
companion object {
@@ -2,18 +2,17 @@ package org.jetbrains.kotlin.gradle.plugin.experimental.tasks
import org.gradle.api.DefaultTask
import org.gradle.api.artifacts.Configuration
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.file.FileCollection
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.InputFiles
import org.gradle.api.tasks.OutputFile
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.*
import org.jetbrains.kotlin.gradle.plugin.KonanCompilerRunner
import org.jetbrains.kotlin.gradle.plugin.KonanPlugin
import org.jetbrains.kotlin.gradle.plugin.addArg
import org.jetbrains.kotlin.gradle.plugin.addKey
import org.jetbrains.kotlin.gradle.plugin.experimental.internal.AbstractKotlinNativeBinary
import org.jetbrains.kotlin.konan.target.CompilerOutputKind
import java.io.File
open class KotlinNativeCompile: DefaultTask() {