[gradle-plugin] Rework class hierarchy for frameworks
This commit is contained in:
+12
@@ -1,14 +1,21 @@
|
|||||||
package org.jetbrains.kotlin.gradle.plugin.experimental
|
package org.jetbrains.kotlin.gradle.plugin.experimental
|
||||||
|
|
||||||
|
import org.gradle.api.artifacts.Configuration
|
||||||
import org.gradle.api.attributes.Attribute
|
import org.gradle.api.attributes.Attribute
|
||||||
|
import org.gradle.api.attributes.AttributeContainer
|
||||||
import org.gradle.api.component.BuildableComponent
|
import org.gradle.api.component.BuildableComponent
|
||||||
import org.gradle.api.component.PublishableComponent
|
import org.gradle.api.component.PublishableComponent
|
||||||
import org.gradle.api.file.FileCollection
|
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.api.provider.Provider
|
||||||
import org.gradle.language.ComponentWithDependencies
|
import org.gradle.language.ComponentWithDependencies
|
||||||
import org.gradle.language.ComponentWithOutputs
|
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.ConfigurableComponentWithLinkUsage
|
||||||
import org.gradle.language.nativeplatform.internal.ConfigurableComponentWithRuntimeUsage
|
import org.gradle.language.nativeplatform.internal.ConfigurableComponentWithRuntimeUsage
|
||||||
|
import org.gradle.nativeplatform.Linkage
|
||||||
import org.gradle.nativeplatform.test.TestComponent
|
import org.gradle.nativeplatform.test.TestComponent
|
||||||
import org.jetbrains.kotlin.gradle.plugin.experimental.internal.KotlinNativePlatform
|
import org.jetbrains.kotlin.gradle.plugin.experimental.internal.KotlinNativePlatform
|
||||||
import org.jetbrains.kotlin.gradle.plugin.experimental.tasks.KotlinNativeCompile
|
import org.jetbrains.kotlin.gradle.plugin.experimental.tasks.KotlinNativeCompile
|
||||||
@@ -75,6 +82,11 @@ interface KotlinNativeLibrary : KotlinNativeBinary,
|
|||||||
PublishableComponent,
|
PublishableComponent,
|
||||||
ConfigurableComponentWithLinkUsage
|
ConfigurableComponentWithLinkUsage
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents an Objective C framework compiled from KN sources.
|
||||||
|
*/
|
||||||
|
interface KotlinNativeFramework : KotlinNativeBinary, ComponentWithOutputs
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a test executable.
|
* Represents a test executable.
|
||||||
*/
|
*/
|
||||||
|
|||||||
+37
@@ -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"
|
||||||
|
}
|
||||||
+3
-50
@@ -15,19 +15,18 @@ import org.gradle.api.provider.Property
|
|||||||
import org.gradle.api.provider.Provider
|
import org.gradle.api.provider.Provider
|
||||||
import org.gradle.language.cpp.internal.DefaultUsageContext
|
import org.gradle.language.cpp.internal.DefaultUsageContext
|
||||||
import org.gradle.nativeplatform.Linkage
|
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.KotlinNativeLibrary
|
||||||
import org.jetbrains.kotlin.gradle.plugin.experimental.sourcesets.KotlinNativeSourceSet
|
|
||||||
import org.jetbrains.kotlin.konan.target.CompilerOutputKind
|
import org.jetbrains.kotlin.konan.target.CompilerOutputKind
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
abstract class AbstractKotlinNativeLibrary(
|
open class KotlinNativeLibraryImpl @Inject constructor(
|
||||||
name: String,
|
name: String,
|
||||||
baseName: Provider<String>,
|
baseName: Provider<String>,
|
||||||
componentImplementation: Configuration,
|
componentImplementation: Configuration,
|
||||||
component: KotlinNativeMainComponent,
|
component: KotlinNativeMainComponent,
|
||||||
identity: KotlinNativeVariantIdentity,
|
identity: KotlinNativeVariantIdentity,
|
||||||
projectLayout: ProjectLayout,
|
projectLayout: ProjectLayout,
|
||||||
outputKind: CompilerOutputKind,
|
|
||||||
objects: ObjectFactory,
|
objects: ObjectFactory,
|
||||||
configurations: ConfigurationContainer,
|
configurations: ConfigurationContainer,
|
||||||
fileOperations: FileOperations
|
fileOperations: FileOperations
|
||||||
@@ -36,7 +35,7 @@ abstract class AbstractKotlinNativeLibrary(
|
|||||||
component,
|
component,
|
||||||
identity,
|
identity,
|
||||||
projectLayout,
|
projectLayout,
|
||||||
outputKind,
|
CompilerOutputKind.LIBRARY,
|
||||||
objects,
|
objects,
|
||||||
componentImplementation,
|
componentImplementation,
|
||||||
configurations,
|
configurations,
|
||||||
@@ -69,49 +68,3 @@ abstract class AbstractKotlinNativeLibrary(
|
|||||||
|
|
||||||
override val outputRootName = "lib"
|
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
|
|
||||||
)
|
|
||||||
+1
-1
@@ -57,7 +57,7 @@ open class KotlinNativeMainComponent @Inject constructor(
|
|||||||
addBinary(T::class.java, identity)
|
addBinary(T::class.java, identity)
|
||||||
|
|
||||||
fun addExecutable(identity: NativeVariantIdentity) = addBinary<KotlinNativeExecutableImpl>(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 addFramework(identity: NativeVariantIdentity) = addBinary<KotlinNativeFrameworkImpl>(identity)
|
||||||
|
|
||||||
fun addBinary(kind: OutputKind, identity: NativeVariantIdentity) = addBinary(kind.binaryClass, identity)
|
fun addBinary(kind: OutputKind, identity: NativeVariantIdentity) = addBinary(kind.binaryClass, identity)
|
||||||
|
|||||||
+9
-9
@@ -2,12 +2,16 @@ package org.jetbrains.kotlin.gradle.plugin.experimental.plugins
|
|||||||
|
|
||||||
import org.gradle.api.DefaultTask
|
import org.gradle.api.DefaultTask
|
||||||
import org.gradle.api.Plugin
|
import org.gradle.api.Plugin
|
||||||
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.Task
|
import org.gradle.api.Task
|
||||||
import org.gradle.api.component.SoftwareComponentContainer
|
import org.gradle.api.component.SoftwareComponentContainer
|
||||||
import org.gradle.api.file.DirectoryProperty
|
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.FeaturePreviews
|
||||||
import org.gradle.api.internal.project.ProjectInternal
|
import org.gradle.api.internal.project.ProjectInternal
|
||||||
import org.gradle.api.plugins.BasePlugin
|
import org.gradle.api.plugins.BasePlugin
|
||||||
|
import org.gradle.api.provider.Provider
|
||||||
import org.gradle.api.provider.ProviderFactory
|
import org.gradle.api.provider.ProviderFactory
|
||||||
import org.gradle.api.tasks.TaskContainer
|
import org.gradle.api.tasks.TaskContainer
|
||||||
import org.gradle.language.base.plugins.LifecycleBasePlugin
|
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.gradle.plugin.tasks.KonanCompilerDownloadTask
|
||||||
import org.jetbrains.kotlin.konan.target.HostManager
|
import org.jetbrains.kotlin.konan.target.HostManager
|
||||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
class KotlinNativeBasePlugin: Plugin<ProjectInternal> {
|
class KotlinNativeBasePlugin: Plugin<ProjectInternal> {
|
||||||
|
|
||||||
@@ -61,12 +66,7 @@ class KotlinNativeBasePlugin: Plugin<ProjectInternal> {
|
|||||||
get() = this == HostManager.host
|
get() = this == HostManager.host
|
||||||
|
|
||||||
|
|
||||||
private fun addCompilationTasks(
|
private fun Project.addCompilationTasks() {
|
||||||
tasks: TaskContainer,
|
|
||||||
components: SoftwareComponentContainer,
|
|
||||||
buildDirectory: DirectoryProperty,
|
|
||||||
providers: ProviderFactory
|
|
||||||
) {
|
|
||||||
val assembleTask = tasks.getByName(LifecycleBasePlugin.ASSEMBLE_TASK_NAME)
|
val assembleTask = tasks.getByName(LifecycleBasePlugin.ASSEMBLE_TASK_NAME)
|
||||||
val typeToAssemble = mutableMapOf<KotlinNativeBuildType, Task>()
|
val typeToAssemble = mutableMapOf<KotlinNativeBuildType, Task>()
|
||||||
val targetToAssemble = mutableMapOf<KonanTarget, Task>()
|
val targetToAssemble = mutableMapOf<KonanTarget, Task>()
|
||||||
@@ -88,7 +88,7 @@ class KotlinNativeBasePlugin: Plugin<ProjectInternal> {
|
|||||||
KotlinNativeCompile::class.java
|
KotlinNativeCompile::class.java
|
||||||
).apply {
|
).apply {
|
||||||
this.binary = binary
|
this.binary = binary
|
||||||
outputFile.set(buildDirectory.file(providers.provider {
|
outputFile.set(layout.buildDirectory.file(providers.provider {
|
||||||
val root = binary.outputRootName
|
val root = binary.outputRootName
|
||||||
val prefix = kind.prefix(target)
|
val prefix = kind.prefix(target)
|
||||||
val suffix = kind.suffix(target)
|
val suffix = kind.suffix(target)
|
||||||
@@ -104,7 +104,7 @@ class KotlinNativeBasePlugin: Plugin<ProjectInternal> {
|
|||||||
|
|
||||||
when(binary) {
|
when(binary) {
|
||||||
is KotlinNativeExecutableImpl -> binary.runtimeFile.set(compileTask.outputFile)
|
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) {
|
if (binary is KotlinNativeTestExecutableImpl) {
|
||||||
@@ -177,7 +177,7 @@ class KotlinNativeBasePlugin: Plugin<ProjectInternal> {
|
|||||||
checkGradleVersion()
|
checkGradleVersion()
|
||||||
addCompilerDownloadingTask()
|
addCompilerDownloadingTask()
|
||||||
|
|
||||||
addCompilationTasks(tasks, components, layout.buildDirectory, providers)
|
addCompilationTasks()
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|||||||
+3
-4
@@ -2,18 +2,17 @@ package org.jetbrains.kotlin.gradle.plugin.experimental.tasks
|
|||||||
|
|
||||||
import org.gradle.api.DefaultTask
|
import org.gradle.api.DefaultTask
|
||||||
import org.gradle.api.artifacts.Configuration
|
import org.gradle.api.artifacts.Configuration
|
||||||
|
import org.gradle.api.file.DirectoryProperty
|
||||||
import org.gradle.api.file.FileCollection
|
import org.gradle.api.file.FileCollection
|
||||||
import org.gradle.api.file.RegularFileProperty
|
import org.gradle.api.file.RegularFileProperty
|
||||||
import org.gradle.api.tasks.Input
|
import org.gradle.api.tasks.*
|
||||||
import org.gradle.api.tasks.InputFiles
|
|
||||||
import org.gradle.api.tasks.OutputFile
|
|
||||||
import org.gradle.api.tasks.TaskAction
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KonanCompilerRunner
|
import org.jetbrains.kotlin.gradle.plugin.KonanCompilerRunner
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KonanPlugin
|
import org.jetbrains.kotlin.gradle.plugin.KonanPlugin
|
||||||
import org.jetbrains.kotlin.gradle.plugin.addArg
|
import org.jetbrains.kotlin.gradle.plugin.addArg
|
||||||
import org.jetbrains.kotlin.gradle.plugin.addKey
|
import org.jetbrains.kotlin.gradle.plugin.addKey
|
||||||
import org.jetbrains.kotlin.gradle.plugin.experimental.internal.AbstractKotlinNativeBinary
|
import org.jetbrains.kotlin.gradle.plugin.experimental.internal.AbstractKotlinNativeBinary
|
||||||
import org.jetbrains.kotlin.konan.target.CompilerOutputKind
|
import org.jetbrains.kotlin.konan.target.CompilerOutputKind
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
open class KotlinNativeCompile: DefaultTask() {
|
open class KotlinNativeCompile: DefaultTask() {
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user