gradle-plugin: Add project extension for global parameters

Add 'konan' project extension with the following properties:
 * targets
 * languageVersion
 * apiVersion

Remove languageVersion and apiVersion compilation task parameters.
This commit is contained in:
Ilya Matveev
2017-10-19 11:56:26 +03:00
committed by ilmat192
parent f2b6b87f93
commit 6809c6482c
11 changed files with 33 additions and 34 deletions
+1 -1
View File
@@ -13,7 +13,7 @@ String konanHome = gradle.startParameter.projectProperties['konan.home']
List<String> libs = gradle.startParameter.projectProperties.libraries.split(" ").findAll { !it.isEmpty() }
String targetName = gradle.startParameter.projectProperties.target
konanTargets = [targetName]
konan.targets = [targetName]
konanArtifacts {
interop("$taskName") {
+2 -2
View File
@@ -26,7 +26,7 @@ allprojects {
apply plugin: "konan"
def platforms = ["armeabi-v7a", "arm64-v8a"]
konanTargets = ["android_arm32", "android_arm64"]
konan.targets = ["android_arm32", "android_arm64"]
konanArtifacts {
program('Polyhedron') {
@@ -68,7 +68,7 @@ model {
def name = targetPlatform.getName()
def index = platforms.indexOf(name)
if (index >= 0)
sharedLibraryFile = konanArtifacts.Polyhedron."${konanTargets[index]}".artifact
sharedLibraryFile = konanArtifacts.Polyhedron."${konan.targets[index]}".artifact
}
}
}
+1 -1
View File
@@ -1,6 +1,6 @@
apply plugin: 'konan'
konanTargets = ['macbook']
konan.targets = ['macbook']
konanArtifacts {
program('Window')
+1 -1
View File
@@ -1,6 +1,6 @@
apply plugin: 'konan'
konanTargets = ["macbook"]
konan.targets = ["macbook"]
konanArtifacts {
program('OpenGlTeapot')
+1 -2
View File
@@ -1,7 +1,6 @@
apply plugin: 'konan'
konanTargets.clear()
konanTargets.addAll(['macbook', 'linux', 'iphone', 'raspberrypi'])
konan.targets = ['macbook', 'linux', 'iphone', 'raspberrypi']
konanArtifacts {
+1 -1
View File
@@ -1,6 +1,6 @@
apply plugin: 'konan'
konanTargets = ['iphone']
konan.targets = ['iphone']
konanArtifacts {
program('app')
@@ -28,7 +28,7 @@ abstract class KonanBuildingConfig<T: KonanBuildingTask>(private val name_: Stri
internal val aggregateBuildTask: Task
val declaredTargets: Iterable<KonanTarget> = project.konanTargets.map { TargetManager(it).target }
val declaredTargets: Iterable<KonanTarget> = project.konanTargets
init {
declaredTargets.forEach {
@@ -39,9 +39,6 @@ abstract class KonanCompileConfig<T: KonanCompileTask>(name: String,
override fun linkerOpts(values: List<String>) = forEach { it.linkerOpts(values) }
override fun linkerOpts(vararg values: String) = forEach { it.linkerOpts(*values) }
override fun languageVersion(version: String) = forEach { it.languageVersion(version) }
override fun apiVersion(version: String) = forEach { it.apiVersion(version) }
override fun enableDebug(flag: Boolean) = forEach { it.enableDebug(flag) }
override fun noStdLib(flag: Boolean) = forEach { it.noStdLib(flag) }
override fun noMain(flag: Boolean) = forEach { it.noMain(flag) }
@@ -24,14 +24,16 @@ 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.tasks.*
import org.jetbrains.kotlin.konan.target.KonanTarget
import org.jetbrains.kotlin.konan.target.TargetManager
import java.io.File
import java.util.*
import javax.inject.Inject
/**
* We use the following properties:
* konan.home - directory where compiler is located (aka dist in konan project output).
* konan.version - a konan compiler version for downloading.
* konan.home - directory where compiler is located (aka dist in konan project output).
* konan.version - a konan compiler version for downloading.
* konan.build.targets - list of targets to build (by default all the declared targets are built).
*/
internal fun Project.hasProperty(property: KonanPlugin.ProjectProperty) = hasProperty(property.propertyName)
@@ -70,9 +72,12 @@ internal val Project.konanArtifactsContainer: NamedDomainObjectContainer<KonanBu
get() = extensions.getByName(KonanPlugin.ARTIFACTS_CONTAINER_NAME)
as NamedDomainObjectContainer<KonanBuildingConfig<*>>
internal val Project.konanTargets: List<KonanTarget>
get() = konanExtension.konanTargets
@Suppress("UNCHECKED_CAST")
internal val Project.konanTargets: MutableList<String>
get() = extensions.extraProperties[KonanPlugin.TARGETS_EXTENSION_NAME] as MutableList<String>
internal val Project.konanExtension: KonanExtension
get() = extensions.getByName(KonanPlugin.KONAN_EXTENSION_NAME) as KonanExtension
internal val Project.konanCompilerDownloadTask
get() = tasks.getByName(KonanPlugin.KONAN_DOWNLOAD_TASK_NAME)
@@ -198,7 +203,7 @@ internal fun dumpProperties(task: Task) {
println(" : ${libraries.namedKlibs.dump()}")
println("defFile : ${defFile}")
println("target : ${target}")
println("packageName : ${packageName}")
println("packageName : ${packageName}")
println("compilerOpts : ${compilerOpts}")
println("linkerOpts : ${linkerOpts}")
println("headers : ${headers.dump()}")
@@ -213,6 +218,15 @@ internal fun dumpProperties(task: Task) {
}
}
open class KonanExtension {
var targets = mutableListOf("host")
var languageVersion: String? = null
var apiVersion: String? = null
internal val konanTargets: List<KonanTarget>
get() = targets.map { TargetManager(it).target }.distinct()
}
class KonanPlugin @Inject constructor(private val registry: ToolingModelBuilderRegistry)
: Plugin<ProjectInternal> {
@@ -228,7 +242,7 @@ class KonanPlugin @Inject constructor(private val registry: ToolingModelBuilderR
internal const val KONAN_DOWNLOAD_TASK_NAME = "checkKonanCompiler"
internal const val COMPILE_ALL_TASK_NAME = "compileKonan"
internal const val TARGETS_EXTENSION_NAME = "konanTargets"
internal const val KONAN_EXTENSION_NAME = "konan"
internal val DEFAULT_KONAN_VERSION = Properties().apply {
load(KonanPlugin::class.java.getResourceAsStream("/META-INF/gradle-plugins/konan.properties") ?:
@@ -246,7 +260,7 @@ class KonanPlugin @Inject constructor(private val registry: ToolingModelBuilderR
project.plugins.apply("base")
// Create necessary tasks and extensions.
project.tasks.create(KONAN_DOWNLOAD_TASK_NAME, KonanCompilerDownloadTask::class.java)
project.extensions.extraProperties.set(TARGETS_EXTENSION_NAME, mutableListOf("host"))
project.extensions.create(KONAN_EXTENSION_NAME, KonanExtension::class.java)
project.extensions.create(ARTIFACTS_CONTAINER_NAME, KonanArtifactContainer::class.java, project)
// Set additional project properties like konan.home, konan.build.targets etc.
@@ -40,9 +40,6 @@ interface KonanCompileSpec: KonanBuildingSpec {
fun linkerOpts(vararg values: String)
fun linkerOpts(values: List<String>)
fun languageVersion(version: String)
fun apiVersion(version: String)
fun enableDebug(flag: Boolean)
fun noStdLib(flag: Boolean)
fun noMain(flag: Boolean)
@@ -63,10 +63,10 @@ abstract class KonanCompileTask: KonanBuildingTask(), KonanCompileSpec {
@Input var enableAssertions = false
@Console var measureTime = false
@Optional @Input var languageVersion : String? = null
internal set
@Optional @Input var apiVersion : String? = null
internal set
val languageVersion : String?
@Optional @Input get() = project.konanExtension.languageVersion
val apiVersion : String?
@Optional @Input get() = project.konanExtension.apiVersion
// Command line ------------------------------------------------------------
@@ -133,14 +133,6 @@ abstract class KonanCompileTask: KonanBuildingTask(), KonanCompileSpec {
linkerOpts.addAll(values)
}
override fun languageVersion(version: String) {
languageVersion = version
}
override fun apiVersion(version: String) {
apiVersion = version
}
override fun enableDebug(flag: Boolean) {
enableDebug = flag
}