From 6809c6482cb2ccf0ae0dd0da7835f09c833574f4 Mon Sep 17 00:00:00 2001 From: Ilya Matveev Date: Thu, 19 Oct 2017 11:56:26 +0300 Subject: [PATCH] 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. --- klib/platform.gradle | 2 +- samples/androidNativeActivity/build.gradle | 4 +-- samples/objc/build.gradle | 2 +- samples/opengl/build.gradle | 2 +- samples/tetris/build.gradle | 3 +- samples/uikit/build.gradle | 2 +- .../gradle/plugin/KonanBuildingConfig.kt | 2 +- .../gradle/plugin/KonanCompileConfig.kt | 3 -- .../kotlin/gradle/plugin/KonanPlugin.kt | 28 ++++++++++++++----- .../kotlin/gradle/plugin/KonanSpecs.kt | 3 -- .../gradle/plugin/tasks/KonanCompileTask.kt | 16 +++-------- 11 files changed, 33 insertions(+), 34 deletions(-) diff --git a/klib/platform.gradle b/klib/platform.gradle index d9df6bdc438..4e7b75a4ee0 100644 --- a/klib/platform.gradle +++ b/klib/platform.gradle @@ -13,7 +13,7 @@ String konanHome = gradle.startParameter.projectProperties['konan.home'] List libs = gradle.startParameter.projectProperties.libraries.split(" ").findAll { !it.isEmpty() } String targetName = gradle.startParameter.projectProperties.target -konanTargets = [targetName] +konan.targets = [targetName] konanArtifacts { interop("$taskName") { diff --git a/samples/androidNativeActivity/build.gradle b/samples/androidNativeActivity/build.gradle index 74e50d005a5..05c446c05c3 100644 --- a/samples/androidNativeActivity/build.gradle +++ b/samples/androidNativeActivity/build.gradle @@ -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 } } } diff --git a/samples/objc/build.gradle b/samples/objc/build.gradle index 8d183eb8a21..524e5ce07da 100644 --- a/samples/objc/build.gradle +++ b/samples/objc/build.gradle @@ -1,6 +1,6 @@ apply plugin: 'konan' -konanTargets = ['macbook'] +konan.targets = ['macbook'] konanArtifacts { program('Window') diff --git a/samples/opengl/build.gradle b/samples/opengl/build.gradle index 581161d91dc..453eabb0174 100644 --- a/samples/opengl/build.gradle +++ b/samples/opengl/build.gradle @@ -1,6 +1,6 @@ apply plugin: 'konan' -konanTargets = ["macbook"] +konan.targets = ["macbook"] konanArtifacts { program('OpenGlTeapot') diff --git a/samples/tetris/build.gradle b/samples/tetris/build.gradle index 98ea0785e0b..d07aaebad24 100644 --- a/samples/tetris/build.gradle +++ b/samples/tetris/build.gradle @@ -1,7 +1,6 @@ apply plugin: 'konan' -konanTargets.clear() -konanTargets.addAll(['macbook', 'linux', 'iphone', 'raspberrypi']) +konan.targets = ['macbook', 'linux', 'iphone', 'raspberrypi'] konanArtifacts { diff --git a/samples/uikit/build.gradle b/samples/uikit/build.gradle index 23a704bbd33..1b09dc55c2a 100644 --- a/samples/uikit/build.gradle +++ b/samples/uikit/build.gradle @@ -1,6 +1,6 @@ apply plugin: 'konan' -konanTargets = ['iphone'] +konan.targets = ['iphone'] konanArtifacts { program('app') diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanBuildingConfig.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanBuildingConfig.kt index 49da6cbf413..e743307496e 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanBuildingConfig.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanBuildingConfig.kt @@ -28,7 +28,7 @@ abstract class KonanBuildingConfig(private val name_: Stri internal val aggregateBuildTask: Task - val declaredTargets: Iterable = project.konanTargets.map { TargetManager(it).target } + val declaredTargets: Iterable = project.konanTargets init { declaredTargets.forEach { diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanCompileConfig.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanCompileConfig.kt index 7adf8af8d50..f66b5800e54 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanCompileConfig.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanCompileConfig.kt @@ -39,9 +39,6 @@ abstract class KonanCompileConfig(name: String, override fun linkerOpts(values: List) = 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) } diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanPlugin.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanPlugin.kt index f9e51cf909f..2b7a5dbfaa3 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanPlugin.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanPlugin.kt @@ -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> +internal val Project.konanTargets: List + get() = konanExtension.konanTargets + @Suppress("UNCHECKED_CAST") -internal val Project.konanTargets: MutableList - get() = extensions.extraProperties[KonanPlugin.TARGETS_EXTENSION_NAME] as MutableList +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 + get() = targets.map { TargetManager(it).target }.distinct() +} + class KonanPlugin @Inject constructor(private val registry: ToolingModelBuilderRegistry) : Plugin { @@ -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. diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanSpecs.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanSpecs.kt index fb966cf3a54..a71703160eb 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanSpecs.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanSpecs.kt @@ -40,9 +40,6 @@ interface KonanCompileSpec: KonanBuildingSpec { fun linkerOpts(vararg values: String) fun linkerOpts(values: List) - fun languageVersion(version: String) - fun apiVersion(version: String) - fun enableDebug(flag: Boolean) fun noStdLib(flag: Boolean) fun noMain(flag: Boolean) diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanCompileTask.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanCompileTask.kt index f7df7a383e3..3d1d2469e54 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanCompileTask.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanCompileTask.kt @@ -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 }