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:
@@ -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") {
|
||||
|
||||
@@ -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,6 +1,6 @@
|
||||
apply plugin: 'konan'
|
||||
|
||||
konanTargets = ['macbook']
|
||||
konan.targets = ['macbook']
|
||||
|
||||
konanArtifacts {
|
||||
program('Window')
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
apply plugin: 'konan'
|
||||
|
||||
konanTargets = ["macbook"]
|
||||
konan.targets = ["macbook"]
|
||||
|
||||
konanArtifacts {
|
||||
program('OpenGlTeapot')
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
apply plugin: 'konan'
|
||||
|
||||
konanTargets.clear()
|
||||
konanTargets.addAll(['macbook', 'linux', 'iphone', 'raspberrypi'])
|
||||
konan.targets = ['macbook', 'linux', 'iphone', 'raspberrypi']
|
||||
|
||||
konanArtifacts {
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
apply plugin: 'konan'
|
||||
|
||||
konanTargets = ['iphone']
|
||||
konan.targets = ['iphone']
|
||||
|
||||
konanArtifacts {
|
||||
program('app')
|
||||
|
||||
+1
-1
@@ -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 {
|
||||
|
||||
-3
@@ -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) }
|
||||
|
||||
+21
-7
@@ -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.
|
||||
|
||||
-3
@@ -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)
|
||||
|
||||
+4
-12
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user