[K/N] Hack to enable exporting interop libraries
This commit is contained in:
+24
-11
@@ -7,10 +7,7 @@ package org.jetbrains.kotlin.gradle.plugin
|
|||||||
|
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.Task
|
import org.gradle.api.Task
|
||||||
import org.gradle.api.artifacts.Configuration
|
import org.gradle.api.artifacts.*
|
||||||
import org.gradle.api.artifacts.ConfigurationContainer
|
|
||||||
import org.gradle.api.artifacts.Dependency
|
|
||||||
import org.gradle.api.artifacts.PublishArtifact
|
|
||||||
import org.gradle.api.artifacts.type.ArtifactTypeDefinition
|
import org.gradle.api.artifacts.type.ArtifactTypeDefinition
|
||||||
import org.gradle.api.attributes.Usage
|
import org.gradle.api.attributes.Usage
|
||||||
import org.gradle.api.attributes.Usage.USAGE_ATTRIBUTE
|
import org.gradle.api.attributes.Usage.USAGE_ATTRIBUTE
|
||||||
@@ -22,6 +19,7 @@ import org.gradle.api.internal.plugins.DefaultArtifactPublicationSet
|
|||||||
import org.gradle.api.internal.plugins.DslObject
|
import org.gradle.api.internal.plugins.DslObject
|
||||||
import org.gradle.api.plugins.BasePlugin
|
import org.gradle.api.plugins.BasePlugin
|
||||||
import org.gradle.api.plugins.JavaBasePlugin
|
import org.gradle.api.plugins.JavaBasePlugin
|
||||||
|
import org.gradle.api.tasks.Copy
|
||||||
import org.gradle.api.tasks.bundling.Jar
|
import org.gradle.api.tasks.bundling.Jar
|
||||||
import org.gradle.api.tasks.testing.Test
|
import org.gradle.api.tasks.testing.Test
|
||||||
import org.gradle.internal.cleanup.BuildOutputCleanupRegistry
|
import org.gradle.internal.cleanup.BuildOutputCleanupRegistry
|
||||||
@@ -33,14 +31,11 @@ import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
|||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.Companion.MAIN_COMPILATION_NAME
|
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.Companion.MAIN_COMPILATION_NAME
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.Companion.TEST_COMPILATION_NAME
|
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.Companion.TEST_COMPILATION_NAME
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.getSourceSetHierarchy
|
|
||||||
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile
|
|
||||||
import org.jetbrains.kotlin.gradle.tasks.CInteropProcess
|
import org.jetbrains.kotlin.gradle.tasks.CInteropProcess
|
||||||
import org.jetbrains.kotlin.gradle.tasks.KotlinNativeCompile
|
import org.jetbrains.kotlin.gradle.tasks.KotlinNativeCompile
|
||||||
import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast
|
import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast
|
||||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||||
import org.jetbrains.kotlin.konan.target.CompilerOutputKind
|
import org.jetbrains.kotlin.konan.target.CompilerOutputKind
|
||||||
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
|
import java.io.File
|
||||||
import java.util.*
|
import java.util.*
|
||||||
@@ -525,21 +520,38 @@ open class KotlinNativeTargetConfigurator(
|
|||||||
compilation: KotlinNativeCompilation,
|
compilation: KotlinNativeCompilation,
|
||||||
artifactFile: File,
|
artifactFile: File,
|
||||||
classifier: String?,
|
classifier: String?,
|
||||||
producingTask: Task
|
producingTask: Task,
|
||||||
|
copy: Boolean = false
|
||||||
) {
|
) {
|
||||||
if (!compilation.target.konanTarget.enabledOnCurrentHost) {
|
if (!compilation.target.konanTarget.enabledOnCurrentHost) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
val apiElements = configurations.getByName(compilation.target.apiElementsConfigurationName)
|
val apiElements = configurations.getByName(compilation.target.apiElementsConfigurationName)
|
||||||
|
|
||||||
|
val realProducingTask: Task
|
||||||
|
// TODO: Someone remove this HACK PLEASE!
|
||||||
|
val realArtifactFile = if (copy) {
|
||||||
|
realProducingTask = project.tasks.create("copy${producingTask.name.capitalize()}", Copy::class.java) {
|
||||||
|
val targetSubDirectory = compilation.target.disambiguationClassifier?.let { "$it/" }.orEmpty()
|
||||||
|
it.destinationDir = project.buildDir.resolve("libs/$targetSubDirectory${compilation.name}")
|
||||||
|
it.from(artifactFile)
|
||||||
|
it.dependsOn(producingTask)
|
||||||
|
}
|
||||||
|
realProducingTask.destinationDir.resolve(artifactFile.name)
|
||||||
|
} else {
|
||||||
|
realProducingTask = producingTask
|
||||||
|
artifactFile
|
||||||
|
}
|
||||||
|
|
||||||
val klibArtifact = DefaultPublishArtifact(
|
val klibArtifact = DefaultPublishArtifact(
|
||||||
compilation.name,
|
compilation.name,
|
||||||
"klib",
|
"klib",
|
||||||
"klib",
|
"klib",
|
||||||
classifier,
|
classifier,
|
||||||
Date(),
|
Date(),
|
||||||
artifactFile,
|
realArtifactFile,
|
||||||
producingTask
|
realProducingTask
|
||||||
)
|
)
|
||||||
project.extensions.getByType(DefaultArtifactPublicationSet::class.java).addCandidate(klibArtifact)
|
project.extensions.getByType(DefaultArtifactPublicationSet::class.java).addCandidate(klibArtifact)
|
||||||
|
|
||||||
@@ -557,7 +569,7 @@ open class KotlinNativeTargetConfigurator(
|
|||||||
private fun Project.createCInteropKlibArtifact(
|
private fun Project.createCInteropKlibArtifact(
|
||||||
interop: DefaultCInteropSettings,
|
interop: DefaultCInteropSettings,
|
||||||
interopTask: CInteropProcess
|
interopTask: CInteropProcess
|
||||||
) = createKlibArtifact(interop.compilation, interopTask.outputFile, "cinterop-${interop.name}", interopTask)
|
) = createKlibArtifact(interop.compilation, interopTask.outputFile, "cinterop-${interop.name}", interopTask, copy = true)
|
||||||
|
|
||||||
|
|
||||||
private fun Project.createKlibCompilationTask(compilation: KotlinNativeCompilation) {
|
private fun Project.createKlibCompilationTask(compilation: KotlinNativeCompilation) {
|
||||||
@@ -608,6 +620,7 @@ open class KotlinNativeTargetConfigurator(
|
|||||||
val interopOutput = project.files(outputFileProvider).builtBy(this)
|
val interopOutput = project.files(outputFileProvider).builtBy(this)
|
||||||
with(compilation) {
|
with(compilation) {
|
||||||
project.dependencies.add(compileDependencyConfigurationName, interopOutput)
|
project.dependencies.add(compileDependencyConfigurationName, interopOutput)
|
||||||
|
project.dependencies.add(target.apiElementsConfigurationName, interopOutput)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
createCInteropKlibArtifact(interop, interopTask)
|
createCInteropKlibArtifact(interop, interopTask)
|
||||||
|
|||||||
Reference in New Issue
Block a user