gradle-plugin: Improve artifact naming in DSL

* Replace 'baseDir' task method with 'destinationDir' allowing
   a user to set the full path to an artifact built
 * Rename outputName -> artifactName
This commit is contained in:
Ilya Matveev
2017-10-18 18:03:19 +03:00
committed by ilmat192
parent be8456e6d5
commit 9c31594441
10 changed files with 36 additions and 36 deletions
+1 -1
View File
@@ -31,7 +31,7 @@ konanTargets = ["android_arm32", "android_arm64"]
konanArtifacts { konanArtifacts {
program('Polyhedron') { program('Polyhedron') {
baseDir 'Polyhedron' baseDir 'Polyhedron'
outputName 'libpoly' artifactName 'libpoly'
} }
} }
@@ -55,7 +55,7 @@ abstract class KonanBuildingConfig<T: KonanBuildingTask>(private val name_: Stri
protected abstract fun generateAggregateTaskDescription(task: Task): String protected abstract fun generateAggregateTaskDescription(task: Task): String
protected abstract fun generateHostTaskDescription(task: Task, hostTarget: KonanTarget): String protected abstract fun generateHostTaskDescription(task: Task, hostTarget: KonanTarget): String
protected abstract val defaultOutputDir: File protected abstract val defaultBaseDir: File
override fun didAdd(toAdd: T) { override fun didAdd(toAdd: T) {
super.didAdd(toAdd) super.didAdd(toAdd)
@@ -66,7 +66,7 @@ abstract class KonanBuildingConfig<T: KonanBuildingTask>(private val name_: Stri
protected fun createTask(target: KonanTarget): T = protected fun createTask(target: KonanTarget): T =
project.tasks.create(generateTaskName(target), type) { project.tasks.create(generateTaskName(target), type) {
it.init(defaultOutputDir, name, target) it.init(defaultBaseDir.targetSubdir(target), name, target)
it.group = BasePlugin.BUILD_GROUP it.group = BasePlugin.BUILD_GROUP
it.description = generateTaskDescription(it) it.description = generateTaskDescription(it)
} ?: throw Exception("Cannot create task for target: ${target.userName}") } ?: throw Exception("Cannot create task for target: ${target.userName}")
@@ -96,8 +96,9 @@ abstract class KonanBuildingConfig<T: KonanBuildingTask>(private val name_: Stri
// Common building DSL. // Common building DSL.
override fun outputName(name: String) = forEach { it.outputName(name) } override fun artifactName(name: String) = forEach { it.artifactName(name) }
override fun baseDir(dir: Any) = forEach { it.baseDir(dir) }
fun baseDir(dir: Any) = forEach { it.destinationDir(project.file(dir).targetSubdir(it.target)) }
override fun libraries(closure: Closure<Unit>) = forEach { it.libraries(closure) } override fun libraries(closure: Closure<Unit>) = forEach { it.libraries(closure) }
override fun libraries(action: Action<KonanLibrariesSpec>) = forEach { it.libraries(action) } override fun libraries(action: Action<KonanLibrariesSpec>) = forEach { it.libraries(action) }
@@ -57,7 +57,7 @@ open class KonanProgram(name: String, project: ProjectInternal, instantiator: In
override val typeForDescription: String override val typeForDescription: String
get() = "executable" get() = "executable"
override val defaultOutputDir: File override val defaultBaseDir: File
get() = project.konanBinBaseDir get() = project.konanBinBaseDir
} }
@@ -67,7 +67,7 @@ open class KonanLibrary(name: String, project: ProjectInternal, instantiator: In
override val typeForDescription: String override val typeForDescription: String
get() = "library" get() = "library"
override val defaultOutputDir: File override val defaultBaseDir: File
get() = project.konanLibsBaseDir get() = project.konanLibsBaseDir
} }
@@ -85,6 +85,6 @@ open class KonanBitcode(name: String, project: ProjectInternal, instantiator: In
override fun generateHostTaskDescription(task: Task, hostTarget: KonanTarget) = override fun generateHostTaskDescription(task: Task, hostTarget: KonanTarget) =
"Generates bitcode for the artifact '${task.name}' for current host" "Generates bitcode for the artifact '${task.name}' for current host"
override val defaultOutputDir: File override val defaultBaseDir: File
get() = project.konanBitcodeBaseDir get() = project.konanBitcodeBaseDir
} }
@@ -20,7 +20,7 @@ open class KonanInteropLibrary(name: String, project: ProjectInternal, instantia
override fun generateHostTaskDescription(task: Task, hostTarget: KonanTarget) = override fun generateHostTaskDescription(task: Task, hostTarget: KonanTarget) =
"Build the Kotlin/Native interop library '${task.name}' for current host" "Build the Kotlin/Native interop library '${task.name}' for current host"
override val defaultOutputDir: File override val defaultBaseDir: File
get() = project.konanLibsBaseDir get() = project.konanLibsBaseDir
// DSL // DSL
@@ -27,8 +27,8 @@ open class KonanLibrariesSpec(val task: KonanArtifactWithLibrariesTask, val proj
val repos: Set<File> val repos: Set<File>
@Input get() = mutableSetOf<File>().apply { @Input get() = mutableSetOf<File>().apply {
addAll(explicitRepos) addAll(explicitRepos)
add(task.outputDir) // TODO: Check if task is a library - create a Library interface add(task.destinationDir) // TODO: Check if task is a library - create a Library interface
add(task.project.konanLibsBaseDir.resolve(target.userName)) add(task.project.konanLibsBaseDir.targetSubdir(target))
addAll(artifacts.flatMap { it.libraries.repos }) addAll(artifacts.flatMap { it.libraries.repos })
} }
@@ -25,6 +25,7 @@ import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry
import org.jetbrains.kotlin.gradle.plugin.KonanPlugin.Companion.COMPILE_ALL_TASK_NAME import org.jetbrains.kotlin.gradle.plugin.KonanPlugin.Companion.COMPILE_ALL_TASK_NAME
import org.jetbrains.kotlin.gradle.plugin.tasks.* import org.jetbrains.kotlin.gradle.plugin.tasks.*
import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.konan.target.KonanTarget
import java.io.File
import java.util.* import java.util.*
import javax.inject.Inject import javax.inject.Inject
@@ -59,6 +60,8 @@ internal val Project.konanBinBaseDir get() = konanBuildRoot.resolve("bin
internal val Project.konanLibsBaseDir get() = konanBuildRoot.resolve("libs") internal val Project.konanLibsBaseDir get() = konanBuildRoot.resolve("libs")
internal val Project.konanBitcodeBaseDir get() = konanBuildRoot.resolve("bitcode") internal val Project.konanBitcodeBaseDir get() = konanBuildRoot.resolve("bitcode")
internal fun File.targetSubdir(target: KonanTarget) = resolve(target.userName)
internal val Project.konanDefaultSrcFiles get() = fileTree("${projectDir.canonicalPath}/src/main/kotlin") internal val Project.konanDefaultSrcFiles get() = fileTree("${projectDir.canonicalPath}/src/main/kotlin")
internal fun Project.konanDefaultDefFile(libName: String) internal fun Project.konanDefaultDefFile(libName: String)
= file("${projectDir.canonicalPath}/src/main/c_interop/$libName.def") = file("${projectDir.canonicalPath}/src/main/c_interop/$libName.def")
@@ -158,7 +161,7 @@ internal fun dumpProperties(task: Task) {
is KonanCompileTask -> with(task) { is KonanCompileTask -> with(task) {
println() println()
println("Compilation task: ${name}") println("Compilation task: ${name}")
println("outputDir : ${outputDir}") println("destinationDir : ${destinationDir}")
println("artifact : ${artifact.canonicalPath}") println("artifact : ${artifact.canonicalPath}")
println("inputFiles : ${inputFiles.dump()}") println("inputFiles : ${inputFiles.dump()}")
println("produce : ${produce}") println("produce : ${produce}")
@@ -185,7 +188,7 @@ internal fun dumpProperties(task: Task) {
is KonanInteropTask -> with(task) { is KonanInteropTask -> with(task) {
println() println()
println("Stub generation task: ${name}") println("Stub generation task: ${name}")
println("outputDir : ${outputDir}") println("destinationDir : ${destinationDir}")
println("artifact : ${artifact}") println("artifact : ${artifact}")
println("libraries : ${libraries.files.dump()}") println("libraries : ${libraries.files.dump()}")
println(" : ${libraries.artifacts.map { println(" : ${libraries.artifacts.map {
@@ -5,8 +5,7 @@ import org.gradle.api.Action
import org.gradle.api.file.FileCollection import org.gradle.api.file.FileCollection
interface KonanArtifactSpec { interface KonanArtifactSpec {
fun outputName(name: String) fun artifactName(name: String)
fun baseDir(dir: Any)
} }
interface KonanArtifactWithLibrariesSpec: KonanArtifactSpec { interface KonanArtifactWithLibrariesSpec: KonanArtifactSpec {
@@ -59,37 +59,34 @@ abstract class KonanTargetableTask: DefaultTask() {
abstract class KonanArtifactTask: KonanTargetableTask(), KonanArtifactSpec { abstract class KonanArtifactTask: KonanTargetableTask(), KonanArtifactSpec {
val artifact: File val artifact: File
@OutputFile get() = outputDir.resolve(artifactNameWithSuffix) @OutputFile get() = destinationDir.resolve(artifactNameWithSuffix)
@Internal lateinit var baseDir: File @Internal lateinit var destinationDir: File
@Internal lateinit var outputName: String @Internal lateinit var artifactName: String
val outputDir
@Internal get() = baseDir.resolve(target.userName)
protected val artifactNameWithSuffix: String protected val artifactNameWithSuffix: String
@Internal get() = "$outputName$artifactSuffix" @Internal get() = "$artifactName$artifactSuffix"
protected val artifactPath: String val artifactPath: String
@Internal get() = artifact.canonicalPath @Internal get() = artifact.canonicalPath
protected abstract val artifactSuffix: String protected abstract val artifactSuffix: String
@Internal get @Internal get
internal open fun init(baseDir: File, outputName: String, target: KonanTarget) { internal open fun init(destinationDir: File, artifactName: String, target: KonanTarget) {
super.init(target) super.init(target)
this.baseDir = baseDir this.destinationDir = destinationDir
this.outputName = outputName this.artifactName = artifactName
} }
// DSL. // DSL.
override fun outputName(name: String) { override fun artifactName(name: String) {
outputName = name artifactName = name
} }
override fun baseDir(dir: Any) { fun destinationDir(dir: Any) {
baseDir = project.file(dir) destinationDir = project.file(dir)
} }
} }
@@ -11,9 +11,9 @@ abstract class KonanBuildingTask: KonanArtifactWithLibrariesTask(), KonanBuildin
internal abstract val toolRunner: KonanToolRunner internal abstract val toolRunner: KonanToolRunner
override fun init(baseDir: File, outputName: String, target: KonanTarget) { override fun init(destinationDir: File, artifactName: String, target: KonanTarget) {
dependsOn(project.konanCompilerDownloadTask) dependsOn(project.konanCompilerDownloadTask)
super.init(baseDir, outputName, target) super.init(destinationDir, artifactName, target)
} }
@Input @Input
@@ -31,7 +31,7 @@ abstract class KonanBuildingTask: KonanArtifactWithLibrariesTask(), KonanBuildin
@TaskAction @TaskAction
fun run() { fun run() {
outputDir.mkdirs() destinationDir.mkdirs()
if (dumpParameters) { dumpProperties(this) } if (dumpParameters) { dumpProperties(this) }
toolRunner.run(buildArgs()) toolRunner.run(buildArgs())
} }
@@ -29,9 +29,9 @@ open class KonanInteropTask: KonanBuildingTask(), KonanInteropSpec {
@Internal override val toolRunner: KonanToolRunner = KonanInteropRunner(project) @Internal override val toolRunner: KonanToolRunner = KonanInteropRunner(project)
override fun init(baseDir: File, outputName: String, target: KonanTarget) { override fun init(destinationDir: File, artifactName: String, target: KonanTarget) {
super.init(baseDir, outputName, target) super.init(destinationDir, artifactName, target)
this.defFile = project.konanDefaultDefFile(outputName) this.defFile = project.konanDefaultDefFile(artifactName)
} }
// Output directories ----------------------------------------------------- // Output directories -----------------------------------------------------