Moved KonanTargets to be mostly pairs.

Moved nice device and generic os names to be target aliases.
This commit is contained in:
Alexander Gorshenev
2018-02-10 15:13:06 +03:00
committed by alexander-gorshenev
parent 0c8ca828eb
commit 0570e281a9
18 changed files with 146 additions and 119 deletions
@@ -49,19 +49,24 @@ abstract class KonanBuildingConfig<T: KonanBuildingTask>(private val name_: Stri
get() = project.hostManager.toKonanTargets(targets).distinct()
init {
for (target in konanTargets) {
if (!project.hostManager.isEnabled(target)) {
project.logger.warn("The target is not enabled on the current host: ${target.visibleName}")
for (targetName in targets.distinct()) {
val konanTarget = project.hostManager.targetByName(targetName)
if (!project.hostManager.isEnabled(konanTarget)) {
project.logger.warn("The target is not enabled on the current host: $targetName")
continue
}
if (!targetIsSupported(target)) {
project.logger.warn("The target ${target.visibleName} is not supported by the artifact $name")
if (!targetIsSupported(konanTarget)) {
project.logger.warn("The target ${targetName} is not supported by the artifact $name")
continue
}
super.add(createTask(target))
if (this[konanTarget] == null) super.add(createTask(konanTarget))
if (targetName != konanTarget.visibleName) {
createTargetAliasTaskIfDeclared(targetName)
}
}
aggregateBuildTask = createAggregateTask()
createHostTaskIfDeclared()
}
protected open fun generateTaskName(target: KonanTarget) =
@@ -70,12 +75,12 @@ abstract class KonanBuildingConfig<T: KonanBuildingTask>(private val name_: Stri
protected open fun generateAggregateTaskName() =
"compileKonan${name.capitalize()}"
protected open fun generateHostTaskName() =
"compileKonan${name.capitalize()}Host"
protected open fun generateTargetAliasTaskName(targetName: String) =
"compileKonan${name.capitalize()}${targetName.capitalize()}"
protected abstract fun generateTaskDescription(task: T): String
protected abstract fun generateAggregateTaskDescription(task: Task): String
protected abstract fun generateHostTaskDescription(task: Task, hostTarget: KonanTarget): String
protected abstract fun generateTargetAliasTaskDescription(task: Task, targetName: String): String
protected abstract val defaultBaseDir: File
@@ -102,19 +107,22 @@ abstract class KonanBuildingConfig<T: KonanBuildingTask>(private val name_: Stri
this.filter {
project.targetIsRequested(it.konanTarget)
}.forEach {
task.dependsOn(it)
}
task.dependsOn(it)
}
project.compileAllTask.dependsOn(task)
}
protected fun createHostTaskIfDeclared(): Task? =
this[HostManager.host]?.let { hostBuild ->
project.tasks.create(generateHostTaskName()) {
it.group = BasePlugin.BUILD_GROUP
it.description = generateHostTaskDescription(it, hostBuild.konanTarget)
it.dependsOn(hostBuild)
}
protected fun createTargetAliasTaskIfDeclared(targetName: String): Task? {
val canonicalTarget = project.hostManager.targetByName(targetName)
return this[canonicalTarget]?.let { canonicalBuild ->
project.tasks.create(generateTargetAliasTaskName(targetName)) {
it.group = BasePlugin.BUILD_GROUP
it.description = generateTargetAliasTaskDescription(it, targetName)
it.dependsOn(canonicalBuild)
}
}
}
internal operator fun get(target: KonanTarget) = targetToTask[target]
@@ -40,8 +40,8 @@ abstract class KonanCompileConfig<T: KonanCompileTask>(name: String,
override fun generateAggregateTaskDescription(task: Task) =
"Build the Kotlin/Native $typeForDescription '${task.name}' for all supported and declared targets"
override fun generateHostTaskDescription(task: Task, hostTarget: KonanTarget) =
"Build the Kotlin/Native $typeForDescription '${task.name}' for current host"
override fun generateTargetAliasTaskDescription(task: Task, targetName: String) =
"Build the Kotlin/Native $typeForDescription '${task.name}' for target '$targetName'"
override fun srcDir(dir: Any) = forEach { it.srcDir(dir) }
override fun srcFiles(vararg files: Any) = forEach { it.srcFiles(*files) }
@@ -123,7 +123,7 @@ open class KonanFramework(name: String,
get() = project.konanBinBaseDir
override fun targetIsSupported(target: KonanTarget): Boolean =
target == MACBOOK || target == IPHONE || target == IPHONE_SIM
target == MACOS_X64 || target == IOS_ARM64 || target == IOS_X64
}
open class KonanLibrary(name: String,
@@ -162,8 +162,8 @@ open class KonanBitcode(name: String,
override fun generateAggregateTaskDescription(task: Task) =
"Generates bitcode for the artifact '${task.name}' for all supported and declared targets'"
override fun generateHostTaskDescription(task: Task, hostTarget: KonanTarget) =
"Generates bitcode for the artifact '${task.name}' for current host"
override fun generateTargetAliasTaskDescription(task: Task, targetName: String) =
"Generates bitcode for the artifact '${task.name}' for '$targetName'"
override val defaultBaseDir: File
get() = project.konanBitcodeBaseDir
@@ -42,8 +42,8 @@ open class KonanInteropLibrary(name: String,
override fun generateAggregateTaskDescription(task: Task) =
"Build the Kotlin/Native interop library '${task.name}' for all supported and declared targets'"
override fun generateHostTaskDescription(task: Task, hostTarget: KonanTarget) =
"Build the Kotlin/Native interop library '${task.name}' for current host"
override fun generateTargetAliasTaskDescription(task: Task, targetName: String) =
"Build the Kotlin/Native interop library '${task.name}' for '$targetName'"
override val defaultBaseDir: File
get() = project.konanLibsBaseDir
@@ -19,7 +19,8 @@ package org.jetbrains.kotlin.gradle.plugin
import org.gradle.api.Named
import org.gradle.api.Project
import org.gradle.api.file.FileCollection
import org.jetbrains.kotlin.gradle.plugin.tasks.host
import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.konan.target.KonanTarget
import org.jetbrains.kotlin.konan.util.DependencyProcessor
internal interface KonanToolRunner: Named {
@@ -81,7 +82,7 @@ internal class KonanInteropRunner(project: Project)
: KonanCliRunner("cinterop", "Kotlin/Native cinterop tool", project)
{
init {
if (project.host == "mingw") {
if (HostManager.host == KonanTarget.MINGW_X64) {
//TODO: Oh-ho-ho fix it in more convinient way.
environment.put("PATH", DependencyProcessor.defaultDependenciesRoot.absolutePath +
"\\msys2-mingw-w64-x86_64-gcc-7.2.0-clang-llvm-5.0.0-windows-x86-64" +
@@ -58,7 +58,7 @@ class TaskSpecification extends BaseKonanSpecification {
"includeDirs" | ""
}
@Requires({ HostManager.host instanceof KonanTarget.MACBOOK })
@Requires({ HostManager.host instanceof KonanTarget.MACOS_X64 })
def 'Plugin should create framework tasks only for Apple targets'() {
when:
def project = KonanProject.createEmpty(projectDirectory) { KonanProject it ->