Switch to Gradle 5.1

This commit is contained in:
Ilya Matveev
2019-02-13 11:54:07 +03:00
committed by Ilya Matveev
parent ce1e83945d
commit a576ee4b7d
33 changed files with 179 additions and 153 deletions
+1 -1
View File
@@ -9,7 +9,7 @@ buildscript {
apply plugin: 'project-report'
dependencies {
classpath "com.google.protobuf:protobuf-gradle-plugin:0.8.0"
classpath "com.google.protobuf:protobuf-gradle-plugin:0.8.8"
}
}
@@ -127,7 +127,7 @@ class NamedNativeInteropConfig implements Named {
dependsOn(task)
final Project prj;
final String taskName;
String taskName;
int index = task.lastIndexOf(':')
if (index != -1) {
prj = project.project(task.substring(0, index))
+1 -1
View File
@@ -7,7 +7,7 @@ buildscript {
apply from: "$rootBuildDirectory/gradle/kotlinGradlePlugin.gradle"
dependencies {
classpath "com.google.protobuf:protobuf-gradle-plugin:0.8.0"
classpath "com.google.protobuf:protobuf-gradle-plugin:0.8.8"
}
}
+1 -1
View File
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-5.1-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.0-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-5.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.7-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-5.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
+1 -1
View File
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.7-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-5.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
@@ -37,7 +37,7 @@ buildscript {
dependencies {
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4'
classpath 'com.github.jengelman.gradle.plugins:shadow:4.0.0'
classpath 'com.github.jengelman.gradle.plugins:shadow:4.0.4'
classpath "com.gradle.publish:plugin-publish-plugin:0.9.10"
}
}
@@ -119,7 +119,7 @@ dependencies {
shadowJar {
from sourceSets.main.output
configurations = [project.configurations.bundleDependencies]
classifier = null
archiveClassifier.set(null)
relocate('org.jetbrains.kotlinx', 'shadow.org.jetbrains.kotlinx')
relocate('org.jetbrains.kotlin.compilerRunner', 'shadow.org.jetbrains.kotlin.compilerRunner')
relocate('org.jetbrains.kotlin.konan', 'shadow.org.jetbrains.kotlin.konan')
@@ -21,7 +21,6 @@ import org.gradle.api.artifacts.ConfigurationContainer
import org.gradle.api.attributes.Usage
import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.file.FileCollection
import org.gradle.api.file.ProjectLayout
import org.gradle.api.internal.file.FileOperations
import org.gradle.api.model.ObjectFactory
import org.gradle.api.provider.Property
@@ -30,6 +29,7 @@ import org.gradle.language.ComponentDependencies
import org.gradle.language.ComponentWithDependencies
import org.gradle.language.ComponentWithOutputs
import org.gradle.language.cpp.CppBinary
import org.gradle.language.cpp.internal.NativeVariantIdentity
import org.gradle.language.internal.DefaultComponentDependencies
import org.gradle.language.nativeplatform.internal.ComponentWithNames
import org.gradle.language.nativeplatform.internal.Names
@@ -60,8 +60,7 @@ abstract class AbstractKotlinNativeBinary(
private val name: String,
private val baseName: Provider<String>,
override val component: AbstractKotlinNativeComponent,
val identity: KotlinNativeVariantIdentity,
val projectLayout: ProjectLayout,
val variant: KotlinNativeVariant,
override val kind: CompilerOutputKind,
objects: ObjectFactory,
componentDependencies: KotlinNativeDependenciesImpl,
@@ -80,14 +79,16 @@ abstract class AbstractKotlinNativeBinary(
override fun getName(): String = name
override val konanTarget: KonanTarget
get() = identity.konanTarget
get() = variant.konanTarget
override fun getTargetPlatform(): KotlinNativePlatform = identity.targetPlatform
val identity: NativeVariantIdentity = variant.identity
override fun getTargetPlatform(): KotlinNativePlatform = variant.targetPlatform
val sourceSet: KotlinNativeSourceSet
get() = component.sources
val buildType: KotlinNativeBuildType get() = identity.buildType
val buildType: KotlinNativeBuildType get() = variant.buildType
open val debuggable: Boolean get() = identity.isDebuggable
open val optimized: Boolean get() = identity.isOptimized
@@ -22,9 +22,9 @@ import org.gradle.api.Named
import org.gradle.api.Project
import org.gradle.api.artifacts.Configuration
import org.gradle.api.internal.file.FileOperations
import org.gradle.api.internal.provider.LockableSetProperty
import org.gradle.api.model.ObjectFactory
import org.gradle.api.provider.Property
import org.gradle.api.provider.SetProperty
import org.gradle.api.publish.maven.MavenPom
import org.gradle.language.internal.DefaultBinaryCollection
import org.gradle.language.nativeplatform.internal.ComponentWithNames
@@ -62,8 +62,8 @@ abstract class AbstractKotlinNativeComponent @Inject constructor(
private val baseName: Property<String> = objectFactory.property(String::class.java).apply { set(name) }
fun getBaseName(): Property<String> = baseName
override val konanTargets: LockableSetProperty<KonanTarget> =
LockableSetProperty(objectFactory.setProperty(KonanTarget::class.java)).apply {
override val konanTargets: SetProperty<KonanTarget> =
objectFactory.setProperty(KonanTarget::class.java).apply {
set(mutableSetOf(HostManager.host))
}
@@ -16,9 +16,7 @@
package org.jetbrains.kotlin.gradle.plugin.experimental.internal
import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.ConfigurationContainer
import org.gradle.api.file.ProjectLayout
import org.gradle.api.internal.file.FileOperations
import org.gradle.api.model.ObjectFactory
import org.gradle.api.provider.Provider
@@ -31,8 +29,7 @@ open class KotlinNativeDynamicImpl @Inject constructor(
baseName: Provider<String>,
componentDependencies: KotlinNativeDependenciesImpl,
component: KotlinNativeMainComponent,
identity: KotlinNativeVariantIdentity,
projectLayout: ProjectLayout,
variant: KotlinNativeVariant,
objects: ObjectFactory,
configurations: ConfigurationContainer,
fileOperations: FileOperations
@@ -40,8 +37,7 @@ open class KotlinNativeDynamicImpl @Inject constructor(
name,
baseName,
component,
identity,
projectLayout,
variant,
CompilerOutputKind.DYNAMIC,
objects,
componentDependencies,
@@ -40,7 +40,7 @@ open class KotlinNativeExecutableImpl @Inject constructor(
baseName: Provider<String>,
componentDependencies: KotlinNativeDependenciesImpl,
component: KotlinNativeMainComponent,
identity: KotlinNativeVariantIdentity,
variant: KotlinNativeVariant,
objects: ObjectFactory,
projectLayout: ProjectLayout,
configurations: ConfigurationContainer,
@@ -48,8 +48,7 @@ open class KotlinNativeExecutableImpl @Inject constructor(
) : AbstractKotlinNativeBinary(name,
baseName,
component,
identity,
projectLayout,
variant,
CompilerOutputKind.PROGRAM,
objects,
componentDependencies,
@@ -18,7 +18,6 @@ package org.jetbrains.kotlin.gradle.plugin.experimental.internal
import org.gradle.api.artifacts.ConfigurationContainer
import org.gradle.api.attributes.Usage
import org.gradle.api.file.ProjectLayout
import org.gradle.api.internal.file.FileOperations
import org.gradle.api.model.ObjectFactory
import org.gradle.api.provider.Provider
@@ -37,8 +36,7 @@ open class KotlinNativeFrameworkImpl @Inject constructor(
baseName: Provider<String>,
componentDependencies: KotlinNativeDependenciesImpl,
component: KotlinNativeMainComponent,
identity: KotlinNativeVariantIdentity,
projectLayout: ProjectLayout,
variant: KotlinNativeVariant,
objects: ObjectFactory,
configurations: ConfigurationContainer,
fileOperations: FileOperations
@@ -46,8 +44,7 @@ open class KotlinNativeFrameworkImpl @Inject constructor(
name,
baseName,
component,
identity,
projectLayout,
variant,
CompilerOutputKind.FRAMEWORK,
objects,
componentDependencies,
@@ -72,6 +69,7 @@ open class KotlinNativeFrameworkImpl @Inject constructor(
getImplementationDependencies().extendsFrom(this)
}
// TODO: Fix embedding
override var embedBitcode: BitcodeEmbeddingMode = if (konanTarget.family == Family.IOS) {
buildType.iosEmbedBitcode
} else {
@@ -40,7 +40,7 @@ open class KotlinNativeLibraryImpl @Inject constructor(
baseName: Provider<String>,
componentDependencies: KotlinNativeDependenciesImpl,
component: KotlinNativeMainComponent,
identity: KotlinNativeVariantIdentity,
variant: KotlinNativeVariant,
projectLayout: ProjectLayout,
objects: ObjectFactory,
configurations: ConfigurationContainer,
@@ -48,8 +48,7 @@ open class KotlinNativeLibraryImpl @Inject constructor(
) : AbstractKotlinNativeBinary(name,
baseName,
component,
identity,
projectLayout,
variant,
CompilerOutputKind.LIBRARY,
objects,
componentDependencies,
@@ -23,15 +23,14 @@ import org.gradle.api.component.SoftwareComponent
import org.gradle.api.internal.component.SoftwareComponentInternal
import org.gradle.api.internal.component.UsageContext
import org.gradle.api.internal.file.FileOperations
import org.gradle.api.internal.provider.LockableSetProperty
import org.gradle.api.model.ObjectFactory
import org.gradle.api.provider.Property
import org.gradle.api.provider.SetProperty
import org.gradle.internal.Describables
import org.gradle.internal.DisplayName
import org.gradle.language.ProductionComponent
import org.gradle.language.cpp.internal.NativeVariantIdentity
import org.gradle.language.nativeplatform.internal.PublicationAwareComponent
import org.jetbrains.kotlin.gradle.plugin.EXPECTED_BY_CONFIG_NAME
import org.gradle.util.WrapUtil
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
import org.jetbrains.kotlin.gradle.plugin.experimental.KotlinNativeBinary
import org.jetbrains.kotlin.gradle.plugin.experimental.sourcesets.KotlinNativeSourceSetImpl
@@ -50,7 +49,7 @@ open class KotlinNativeMainComponent @Inject constructor(
override fun getDisplayName(): DisplayName = Describables.withTypeAndName("Kotlin/Native component", name)
val outputKinds = LockableSetProperty(objectFactory.setProperty(OutputKind::class.java)).apply {
val outputKinds: SetProperty<OutputKind> = objectFactory.setProperty(OutputKind::class.java).apply {
set(mutableSetOf(OutputKind.KLIBRARY))
}
@@ -61,42 +60,37 @@ open class KotlinNativeMainComponent @Inject constructor(
extendsFrom(getImplementationDependencies())
}
private val mainPublication = KotlinNativeVariant()
private val mainPublication = KotlinNativePublicationVariants()
override fun getMainPublication(): KotlinNativeVariant = mainPublication
override fun getMainPublication(): KotlinNativePublicationVariants = mainPublication
private val developmentBinaryProperty: Property<KotlinNativeBinary> =
objectFactory.property(KotlinNativeBinary::class.java)
override fun getDevelopmentBinary() = developmentBinaryProperty
private fun <T : KotlinNativeBinary> addBinary(type: Class<T>, identity: NativeVariantIdentity): T =
objectFactory.newInstance(
type,
"$name${identity.name.capitalize()}",
baseName,
dependencies,
this,
identity
).apply {
binaries.add(this)
}
private fun <T : KotlinNativeBinary> addBinary(type: Class<T>, variant: KotlinNativeVariant): T {
val name = "$name${variant.identity.name.capitalize()}"
return objectFactory.newInstance(type, name, baseName, dependencies, this, variant).apply {
binaries.add(this)
}
}
private inline fun <reified T : KotlinNativeBinary> addBinary(identity: NativeVariantIdentity): T =
addBinary(T::class.java, identity)
private inline fun <reified T : KotlinNativeBinary> addBinary(variant: KotlinNativeVariant): T =
addBinary(T::class.java, variant)
fun addExecutable(identity: NativeVariantIdentity) = addBinary<KotlinNativeExecutableImpl>(identity)
fun addLibrary(identity: NativeVariantIdentity) = addBinary<KotlinNativeLibraryImpl>(identity)
fun addFramework(identity: NativeVariantIdentity) = addBinary<KotlinNativeFrameworkImpl>(identity)
fun addExecutable(variant: KotlinNativeVariant) = addBinary<KotlinNativeExecutableImpl>(variant)
fun addLibrary(variant: KotlinNativeVariant) = addBinary<KotlinNativeLibraryImpl>(variant)
fun addFramework(variant: KotlinNativeVariant) = addBinary<KotlinNativeFrameworkImpl>(variant)
fun addBinary(kind: OutputKind, identity: NativeVariantIdentity) = addBinary(kind.binaryClass, identity)
fun addBinary(kind: OutputKind, variant: KotlinNativeVariant) = addBinary(kind.binaryClass, variant)
// region Kotlin/Native variant
// region Kotlin/Native component passed to Gradle to determine publication variants
// TODO: SoftwareComponentInternal will be replaced with ComponentWithVariants by Gradle
inner class KotlinNativeVariant: ComponentWithVariants, SoftwareComponentInternal {
inner class KotlinNativePublicationVariants: ComponentWithVariants, SoftwareComponentInternal {
private val variants = mutableSetOf<SoftwareComponent>()
override fun getVariants() = variants
private val variants = WrapUtil.toDomainObjectSet(SoftwareComponent::class.java)
override fun getVariants(): MutableSet<SoftwareComponent> = variants
override fun getName(): String = this@KotlinNativeMainComponent.name
@@ -16,11 +16,18 @@
package org.jetbrains.kotlin.gradle.plugin.experimental.internal
import org.gradle.api.Project
import org.gradle.api.internal.component.UsageContext
import org.gradle.api.internal.project.ProjectInternal
import org.gradle.api.model.ObjectFactory
import org.gradle.api.provider.Provider
import org.gradle.internal.os.OperatingSystem
import org.gradle.language.cpp.internal.NativeVariantIdentity
import org.gradle.nativeplatform.OperatingSystemFamily
import org.gradle.nativeplatform.TargetMachineFactory
import org.gradle.nativeplatform.platform.NativePlatform
import org.gradle.nativeplatform.platform.internal.*
import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast
import org.jetbrains.kotlin.konan.target.KonanTarget
import org.jetbrains.kotlin.konan.util.visibleName
@@ -51,4 +58,55 @@ class DefaultKotlinNativePlatform(name: String, override val target: KonanTarget
override fun operatingSystem(name: String?) = notImplemented()
override fun withArchitecture(architecture: ArchitectureInternal?) = notImplemented()
override fun architecture(name: String?) = notImplemented()
}
}
// NativeVariantIdentity constructor was changed in Gradle 5.1
// So we have to use reflection to create instance of this class in earlier versions.
internal fun compatibleVariantIdentity(
project: Project,
name: String,
baseName: Provider<String>,
group: Provider<String>,
version: Provider<String>,
debuggable: Boolean,
optimized: Boolean,
target: KonanTarget,
linkUsage: UsageContext?,
runtimeUsage: UsageContext?
): NativeVariantIdentity =
if (isGradleVersionAtLeast(5, 1)) {
val targetMachineFactory = (project as ProjectInternal).services.get(TargetMachineFactory::class.java)
NativeVariantIdentity(
name,
baseName,
group,
version,
debuggable,
optimized,
targetMachineFactory.os(target.family.name),
linkUsage,
runtimeUsage
)
} else {
NativeVariantIdentity::class.java.getConstructor(
String::class.java,
Provider::class.java,
Provider::class.java,
Provider::class.java,
Boolean::class.javaPrimitiveType,
Boolean::class.javaPrimitiveType,
OperatingSystemFamily::class.java,
UsageContext::class.java,
UsageContext::class.java
).newInstance(
name,
baseName,
group,
version,
debuggable,
optimized,
target.getGradleOSFamily(project.objects),
linkUsage,
runtimeUsage
)
}
@@ -16,9 +16,7 @@
package org.jetbrains.kotlin.gradle.plugin.experimental.internal
import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.ConfigurationContainer
import org.gradle.api.file.ProjectLayout
import org.gradle.api.internal.file.FileOperations
import org.gradle.api.model.ObjectFactory
import org.gradle.api.provider.Provider
@@ -32,8 +30,7 @@ open class KotlinNativeStaticImpl @Inject constructor(
baseName: Provider<String>,
componentDependencies: KotlinNativeDependenciesImpl,
component: KotlinNativeMainComponent,
identity: KotlinNativeVariantIdentity,
projectLayout: ProjectLayout,
variant: KotlinNativeVariant,
objects: ObjectFactory,
configurations: ConfigurationContainer,
fileOperations: FileOperations
@@ -41,8 +38,7 @@ open class KotlinNativeStaticImpl @Inject constructor(
name,
baseName,
component,
identity,
projectLayout,
variant,
CompilerOutputKind.STATIC,
objects,
componentDependencies,
@@ -17,10 +17,8 @@
package org.jetbrains.kotlin.gradle.plugin.experimental.internal
import org.gradle.api.Task
import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.ConfigurationContainer
import org.gradle.api.file.FileCollection
import org.gradle.api.file.ProjectLayout
import org.gradle.api.internal.file.FileOperations
import org.gradle.api.model.ObjectFactory
import org.gradle.api.provider.Property
@@ -37,16 +35,14 @@ open class KotlinNativeTestExecutableImpl @Inject constructor(
componentDependencies: KotlinNativeDependenciesImpl,
val testComponent: KotlinNativeTestSuite,
val mainSources: KotlinNativeSourceSet,
identity: KotlinNativeVariantIdentity,
variant: KotlinNativeVariant,
objects: ObjectFactory,
projectLayout: ProjectLayout,
configurations: ConfigurationContainer,
fileOperations: FileOperations
) : AbstractKotlinNativeBinary(name,
baseName,
testComponent,
identity,
projectLayout,
variant,
CompilerOutputKind.PROGRAM,
objects,
componentDependencies,
@@ -51,15 +51,15 @@ open class KotlinNativeTestSuite @Inject constructor(
override fun getTestBinary() = testBinaryProperty
fun addTestExecutable(identity: NativeVariantIdentity): KotlinNativeTestExecutable =
fun addTestExecutable(variant: KotlinNativeVariant): KotlinNativeTestExecutable =
objectFactory.newInstance(
KotlinNativeTestExecutableImpl::class.java,
"$name${identity.name.capitalize()}",
"$name${variant.identity.name.capitalize()}",
getBaseName(),
dependencies,
this,
testedComponent.sources,
identity
variant
).apply {
binaries.add(this)
}
@@ -16,13 +16,13 @@
package org.jetbrains.kotlin.gradle.plugin.experimental.internal
import org.gradle.api.Project
import org.gradle.api.internal.component.UsageContext
import org.gradle.api.model.ObjectFactory
import org.gradle.api.provider.Provider
import org.gradle.language.cpp.internal.NativeVariantIdentity
import org.jetbrains.kotlin.konan.target.KonanTarget
open class KotlinNativeVariantIdentity(
class KotlinNativeVariant(
name: String,
baseName: Provider<String>,
group: Provider<String>,
@@ -31,17 +31,21 @@ open class KotlinNativeVariantIdentity(
val buildType: KotlinNativeBuildType,
linkUsage: UsageContext?,
runtimeUsage: UsageContext?,
objects: ObjectFactory
) : NativeVariantIdentity(
name,
baseName,
group,
version,
buildType.debuggable,
buildType.optimized,
konanTarget.getGradleOSFamily(objects),
linkUsage,
runtimeUsage
project: Project
) {
val identity: NativeVariantIdentity = compatibleVariantIdentity(
project,
name,
baseName,
group,
version,
buildType.debuggable,
buildType.optimized,
konanTarget,
linkUsage,
runtimeUsage
)
val targetPlatform = DefaultKotlinNativePlatform(konanTarget)
}
@@ -38,6 +38,7 @@ import org.jetbrains.kotlin.gradle.plugin.experimental.internal.*
import org.jetbrains.kotlin.gradle.plugin.experimental.internal.OutputKind.Companion.getDevelopmentKind
import org.jetbrains.kotlin.gradle.plugin.experimental.sourcesets.KotlinNativeSourceSetFactory
import org.jetbrains.kotlin.gradle.plugin.experimental.sourcesets.KotlinNativeSourceSetImpl
import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast
import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.konan.target.KonanTarget
import javax.inject.Inject
@@ -77,14 +78,18 @@ class KotlinNativePlugin @Inject constructor(val attributesFactory: ImmutableAtt
}
private fun AbstractKotlinNativeComponent.getAndLockTargets(): Set<KonanTarget> {
konanTargets.lockNow()
if (isGradleVersionAtLeast(5, 0)) {
konanTargets.finalizeValue()
}
return konanTargets.get().also {
require(it.isNotEmpty()) { "A Kotlin/Native target needs to be specified for the component." }
}
}
private fun KotlinNativeMainComponent.getAndLockOutputKinds(): Set<OutputKind> {
outputKinds.lockNow()
if (isGradleVersionAtLeast(5, 0)) {
konanTargets.finalizeValue()
}
return outputKinds.get().also {
require(it.isNotEmpty()) { "An output kind needs to be specified for the component." }
}
@@ -124,18 +129,18 @@ class KotlinNativePlugin @Inject constructor(val attributesFactory: ImmutableAtt
}
// TODO: Do we need something like klibUsageContext?
val variantIdentity = KotlinNativeVariantIdentity(
val variant = KotlinNativeVariant(
variantName,
component.baseName,
group, version, target,
buildType,
linkUsageContext,
runtimeUsageContext,
objects
project
)
if (hostManager.isEnabled(target)) {
val binary = component.addBinary(kind, variantIdentity)
val binary = component.addBinary(kind, variant)
if (kind == developmentKind &&
buildType == KotlinNativeBuildType.DEBUG &&
@@ -151,7 +156,7 @@ class KotlinNativePlugin @Inject constructor(val attributesFactory: ImmutableAtt
if (kind.publishable) {
// Known but not buildable.
// It allows us to publish different parts of a multitarget library from differnt hosts.
component.mainPublication.variants.add(variantIdentity)
component.mainPublication.variants.add(variant.identity)
}
}
}
@@ -171,18 +176,18 @@ class KotlinNativePlugin @Inject constructor(val attributesFactory: ImmutableAtt
val targetSuffix = createDimensionSuffix(target.name, targets)
val variantName = "${buildTypeSuffix}${targetSuffix}"
val variantIdentity = KotlinNativeVariantIdentity(
val variant = KotlinNativeVariant(
variantName,
component.getBaseName(),
group, version, target,
buildType,
null,
null,
objects
project
)
if (hostManager.isEnabled(target)) {
val binary = component.addTestExecutable(variantIdentity)
val binary = component.addTestExecutable(variant)
if (target == HostManager.host) {
component.testBinary.set(binary)
}
@@ -37,7 +37,7 @@ open class KonanArtifactContainer(val project: ProjectInternal)
var targets: Iterable<String> = emptyList()
override fun create(name: String?): T =
instantiator.newInstance(configClass.java, name, project, instantiator, targets)
instantiator.newInstance(configClass.java, name, project, targets)
}
private val factories = mutableMapOf<KClass<out KonanBuildingConfig<*>>, KonanBuildingConfigFactory<*>>()
@@ -17,27 +17,23 @@
package org.jetbrains.kotlin.gradle.plugin.konan
import groovy.lang.Closure
import org.gradle.api.Action
import org.gradle.api.InvalidUserDataException
import org.gradle.api.Named
import org.gradle.api.Task
import org.gradle.api.internal.DefaultNamedDomainObjectSet
import org.gradle.api.*
import org.gradle.api.internal.project.ProjectInternal
import org.gradle.api.plugins.BasePlugin
import org.gradle.api.plugins.ExtensionAware
import org.gradle.api.publish.maven.MavenPom
import org.gradle.internal.reflect.Instantiator
import org.gradle.util.ConfigureUtil
import org.gradle.util.WrapUtil
import org.jetbrains.kotlin.gradle.plugin.tasks.KonanBuildingTask
import org.jetbrains.kotlin.konan.target.KonanTarget
import java.io.File
/** Base class for all Kotlin/Native artifacts. */
abstract class KonanBuildingConfig<T: KonanBuildingTask>(private val name_: String,
type: Class<T>,
val type: Class<T>,
val project: ProjectInternal,
instantiator: Instantiator,
val targets: Iterable<String>)
: KonanBuildingSpec, Named, DefaultNamedDomainObjectSet<T>(type, instantiator, { it.konanTarget.visibleName }) {
: KonanBuildingSpec, Named, DomainObjectSet<T> by WrapUtil.toDomainObjectSet(type) {
internal val mainVariant = KonanSoftwareComponent(project)
override fun getName() = name_
@@ -63,7 +59,13 @@ abstract class KonanBuildingConfig<T: KonanBuildingTask>(private val name_: Stri
project.logger.info("The target ${targetName} is not supported by the artifact $name")
continue
}
if (this[konanTarget] == null) super.add(createTask(konanTarget))
if (this[konanTarget] == null) {
val task = createTask(konanTarget)
add(task)
targetToTask[konanTarget] = task
// Allow accessing targets just by their names in Groovy DSL.
(this as? ExtensionAware)?.extensions?.add(konanTarget.visibleName, task)
}
if (targetName != konanTarget.visibleName) {
createTargetAliasTaskIfDeclared(targetName)
@@ -89,13 +91,6 @@ abstract class KonanBuildingConfig<T: KonanBuildingTask>(private val name_: Stri
protected open fun targetIsSupported(target: KonanTarget): Boolean = true
override fun didAdd(toAdd: T) {
super.didAdd(toAdd)
assert(toAdd.konanTarget !in targetToTask)
targetToTask[toAdd.konanTarget] = toAdd
}
data class OutputPlacement(val destinationDir: File, val artifactName: String)
// There are two options for output placement.
@@ -20,7 +20,6 @@ import groovy.lang.Closure
import org.gradle.api.Task
import org.gradle.api.file.FileCollection
import org.gradle.api.internal.project.ProjectInternal
import org.gradle.internal.reflect.Instantiator
import org.jetbrains.kotlin.gradle.plugin.tasks.*
import org.jetbrains.kotlin.konan.target.Family
import org.jetbrains.kotlin.konan.target.KonanTarget
@@ -30,9 +29,8 @@ import java.io.File
abstract class KonanCompileConfig<T: KonanCompileTask>(name: String,
type: Class<T>,
project: ProjectInternal,
instantiator: Instantiator,
targets: Iterable<String>)
: KonanBuildingConfig<T>(name, type, project, instantiator, targets), KonanCompileSpec {
: KonanBuildingConfig<T>(name, type, project, targets), KonanCompileSpec {
protected abstract val typeForDescription: String
@@ -76,12 +74,10 @@ abstract class KonanCompileConfig<T: KonanCompileTask>(name: String,
open class KonanProgram(name: String,
project: ProjectInternal,
instantiator: Instantiator,
targets: Iterable<String> = project.konanExtension.targets
) : KonanCompileConfig<KonanCompileProgramTask>(name,
KonanCompileProgramTask::class.java,
project,
instantiator,
targets
) {
override val typeForDescription: String
@@ -93,12 +89,10 @@ open class KonanProgram(name: String,
open class KonanDynamic(name: String,
project: ProjectInternal,
instantiator: Instantiator,
targets: Iterable<String> = project.konanExtension.targets)
: KonanCompileConfig<KonanCompileDynamicTask>(name,
KonanCompileDynamicTask::class.java,
project,
instantiator,
targets
) {
override val typeForDescription: String
@@ -112,12 +106,10 @@ open class KonanDynamic(name: String,
open class KonanFramework(name: String,
project: ProjectInternal,
instantiator: Instantiator,
targets: Iterable<String> = project.konanExtension.targets)
: KonanCompileConfig<KonanCompileFrameworkTask>(name,
KonanCompileFrameworkTask::class.java,
project,
instantiator,
targets
) {
override val typeForDescription: String
@@ -132,12 +124,10 @@ open class KonanFramework(name: String,
open class KonanLibrary(name: String,
project: ProjectInternal,
instantiator: Instantiator,
targets: Iterable<String> = project.konanExtension.targets)
: KonanCompileConfig<KonanCompileLibraryTask>(name,
KonanCompileLibraryTask::class.java,
project,
instantiator,
targets
) {
override val typeForDescription: String
@@ -149,12 +139,10 @@ open class KonanLibrary(name: String,
open class KonanBitcode(name: String,
project: ProjectInternal,
instantiator: Instantiator,
targets: Iterable<String> = project.konanExtension.targets)
: KonanCompileConfig<KonanCompileBitcodeTask>(name,
KonanCompileBitcodeTask::class.java,
project,
instantiator,
targets
) {
override val typeForDescription: String
@@ -21,7 +21,6 @@ import org.gradle.api.Action
import org.gradle.api.Task
import org.gradle.api.file.FileCollection
import org.gradle.api.internal.project.ProjectInternal
import org.gradle.internal.reflect.Instantiator
import org.gradle.util.ConfigureUtil
import org.jetbrains.kotlin.gradle.plugin.konan.KonanInteropSpec.IncludeDirectoriesSpec
import org.jetbrains.kotlin.gradle.plugin.tasks.KonanInteropTask
@@ -29,9 +28,8 @@ import java.io.File
open class KonanInteropLibrary(name: String,
project: ProjectInternal,
instantiator: Instantiator,
targets: Iterable<String> = project.konanExtension.targets
) : KonanBuildingConfig<KonanInteropTask>(name, KonanInteropTask::class.java, project, instantiator, targets),
) : KonanBuildingConfig<KonanInteropTask>(name, KonanInteropTask::class.java, project, targets),
KonanInteropSpec
{
@@ -30,10 +30,9 @@ import org.gradle.api.internal.tasks.DefaultTaskDependency
import org.gradle.api.tasks.*
import org.gradle.language.cpp.CppBinary
import org.gradle.language.cpp.internal.DefaultUsageContext
import org.gradle.language.cpp.internal.NativeVariantIdentity
import org.gradle.nativeplatform.Linkage
import org.gradle.nativeplatform.OperatingSystemFamily
import org.gradle.util.ConfigureUtil
import org.jetbrains.kotlin.gradle.plugin.experimental.internal.compatibleVariantIdentity
import org.jetbrains.kotlin.gradle.plugin.konan.*
import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.konan.target.KonanTarget
@@ -128,16 +127,20 @@ abstract class KonanArtifactTask: KonanTargetableTask(), KonanArtifactSpec {
override fun getAttributes(): AttributeContainer = platformConfiguration.attributes
override fun getGlobalExcludes(): Set<ExcludeRule> = emptySet()
}, platformConfiguration.allArtifacts, platformConfiguration)
konanSoftwareComponent.addVariant(NativeVariantIdentity(
konanSoftwareComponent.addVariant(
compatibleVariantIdentity(
project,
variantName,
project.provider{ artifactName },
project.provider{ project.group.toString() },
project.provider{ project.version.toString() },
false,
false,
target.asOperatingSystemFamily(),
target,
context,
null))
null
)
)
}
}
@@ -154,9 +157,6 @@ abstract class KonanArtifactTask: KonanTargetableTask(), KonanArtifactSpec {
fun destinationDir(dir: Any) {
destinationDir = project.file(dir)
}
private fun KonanTarget.asOperatingSystemFamily(): OperatingSystemFamily = project.objects.named(OperatingSystemFamily::class.java, family.name)
}
/** Task building an artifact with libraries */
@@ -134,6 +134,7 @@ abstract class KonanCompileTask: KonanBuildingTask(), KonanCompileSpec {
addKey("-opt", enableOptimizations)
addKey("-ea", enableAssertions)
addKey("-Xtime", measureTime)
addKey("-Xprofile-phases", measureTime)
addKey("-nodefaultlibs", noDefaultLibs)
addKey("-Xmulti-platform", enableMultiplatform)
@@ -21,7 +21,6 @@ import org.gradle.api.GradleScriptException
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.TaskAction
import org.jetbrains.kotlin.gradle.plugin.konan.*
import org.jetbrains.kotlin.konan.KonanVersion
import org.jetbrains.kotlin.konan.MetaVersion
import org.jetbrains.kotlin.konan.util.DependencyProcessor
import org.jetbrains.kotlin.konan.util.DependencySource
@@ -20,10 +20,6 @@ import org.gradle.testkit.runner.BuildResult
import org.gradle.testkit.runner.TaskOutcome
import spock.lang.Unroll
import java.nio.file.Files
import java.nio.file.Path
import java.nio.file.Paths
class IncrementalSpecification extends BaseKonanSpecification {
Tuple buildTwice(KonanProject project, String task = 'build', Closure change) {
@@ -18,8 +18,8 @@ package org.jetbrains.kotlin.gradle.plugin.test
import org.gradle.testkit.runner.BuildResult
import org.gradle.testkit.runner.TaskOutcome
import org.jetbrains.kotlin.konan.target.KonanTarget
import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.konan.target.KonanTarget
import spock.lang.Requires
import spock.lang.Unroll
@@ -50,8 +50,8 @@ class TaskSpecification extends BaseKonanSpecification {
def result = project.createRunner().withArguments('build').build()
then:
result.output.findAll(~/FRONTEND:\s+\d+\s+msec/).size() == 1
result.output.findAll(~/BACKEND:\s+\d+\s+msec/).size() == 1
result.output.findAll(~/Frontend builds AST:\s+\d+\s+msec/).size() == 1
result.output.findAll(~/IR Lowering:\s+\d+\s+msec/).size() == 1
}
@Unroll('Plugin should support #option option for cinterop')
@@ -20,7 +20,8 @@ import org.junit.Rule
import org.junit.rules.TemporaryFolder
import java.io.File
import java.net.URI
import kotlin.test.*
import kotlin.test.Test
import kotlin.test.assertTrue
open class CompatibilityTests {
val tmpFolder = TemporaryFolder()
@@ -24,7 +24,7 @@ import org.junit.rules.TemporaryFolder
import org.junit.runner.RunWith
import org.tools4j.spockito.Spockito
import java.io.File
import kotlin.test.*
import kotlin.test.Test
@RunWith(Spockito::class)
open class PropertiesAsEnvVariablesTest {
@@ -19,7 +19,9 @@ package org.jetbrains.kotlin.gradle.plugin.test
import org.junit.Rule
import org.junit.rules.TemporaryFolder
import java.io.File
import kotlin.test.*
import kotlin.test.Test
import kotlin.test.assertFalse
import kotlin.test.assertTrue
class TaskTests {
val tmpFolder = TemporaryFolder()