[gradle-plugin] Rework class hierarchy for frameworks
This commit is contained in:
+12
@@ -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.
|
||||
*/
|
||||
|
||||
+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.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
|
||||
)
|
||||
+1
-1
@@ -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)
|
||||
|
||||
+9
-9
@@ -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 {
|
||||
|
||||
+3
-4
@@ -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() {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user