Switch to Gradle 5.1
This commit is contained in:
committed by
Ilya Matveev
parent
ce1e83945d
commit
a576ee4b7d
@@ -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))
|
||||
|
||||
@@ -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
@@ -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
@@ -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')
|
||||
|
||||
+7
-6
@@ -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
|
||||
|
||||
|
||||
+3
-3
@@ -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))
|
||||
}
|
||||
|
||||
|
||||
+2
-6
@@ -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,
|
||||
|
||||
+2
-3
@@ -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,
|
||||
|
||||
+3
-5
@@ -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 {
|
||||
|
||||
+2
-3
@@ -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,
|
||||
|
||||
+21
-27
@@ -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
|
||||
|
||||
|
||||
+59
-1
@@ -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
|
||||
)
|
||||
}
|
||||
|
||||
+2
-6
@@ -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,
|
||||
|
||||
+2
-6
@@ -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,
|
||||
|
||||
+3
-3
@@ -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)
|
||||
}
|
||||
|
||||
+17
-13
@@ -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)
|
||||
}
|
||||
+14
-9
@@ -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)
|
||||
}
|
||||
|
||||
+1
-1
@@ -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<*>>()
|
||||
|
||||
+12
-17
@@ -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.
|
||||
|
||||
+1
-13
@@ -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
|
||||
|
||||
+1
-3
@@ -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
|
||||
{
|
||||
|
||||
|
||||
+8
-8
@@ -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 */
|
||||
|
||||
+1
@@ -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)
|
||||
|
||||
|
||||
-1
@@ -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
|
||||
|
||||
-4
@@ -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) {
|
||||
|
||||
+3
-3
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user