[build][gradle] switch to gradle-4.7

This commit is contained in:
Vasily Levchenko
2018-05-17 19:34:50 +03:00
parent 5ac3a160ca
commit 361cde1ed1
10 changed files with 110 additions and 46 deletions
+12 -13
View File
@@ -15,15 +15,23 @@
*/
buildscript {
apply from: "$rootDir/gradle/kotlinGradlePlugin.gradle"
}
ext.rootBuildDirectory = file('../..')
apply from: "$rootBuildDirectory/gradle/kotlinGradlePlugin.gradle"
dependencies {
classpath "org.jetbrains.kotlin:kotlin-stdlib:$buildKotlinVersion"
classpath "org.jetbrains.kotlin:kotlin-native-shared:$konanVersion"
}
}
apply plugin: 'kotlin'
apply plugin: org.jetbrains.kotlin.NativeInteropPlugin
apply plugin: 'c'
apply plugin: 'cpp'
import org.jetbrains.kotlin.konan.target.ClangArgs
final Project libclangextProject = project(":libclangext")
final String libclangextTask = libclangextProject.path + ":build"
File libclangextDir = new File(libclangextProject.buildDir, "libs/clangext/static")
@@ -82,20 +90,11 @@ model {
}
}
/* HACK over gradle 4.4, it adds /usr/include, that affects our --sysroot flag */
toolChains {
clang(Clang) {
eachPlatform {
cppCompiler.withArguments { args ->
args.remove "/usr/include"
if (isLinux())
args.remove "/usr/include/x86_64-linux-gnu"
}
cCompiler.withArguments { args ->
args.remove "/usr/include"
if (isLinux())
args.remove "/usr/include/x86_64-linux-gnu"
}
cppCompiler.withArguments(ClangArgs.&filterGradleNativeSoftwareFlags)
cCompiler.withArguments(ClangArgs.&filterGradleNativeSoftwareFlags)
}
}
}
+14 -10
View File
@@ -14,13 +14,22 @@
* limitations under the License.
*/
buildscript {
apply from: "$rootDir/gradle/kotlinGradlePlugin.gradle"
}
apply plugin: 'kotlin'
apply plugin: 'c'
buildscript {
ext.rootBuildDirectory = file('../..')
apply from: "$rootBuildDirectory/gradle/kotlinGradlePlugin.gradle"
dependencies {
classpath "org.jetbrains.kotlin:kotlin-stdlib:$buildKotlinVersion"
classpath "org.jetbrains.kotlin:kotlin-native-shared:$konanVersion"
}
}
import org.jetbrains.kotlin.konan.target.ClangArgs
model {
components {
callbacks(NativeLibrarySpec) {
@@ -41,15 +50,10 @@ model {
}
}
/* HACK over gradle 4.4, it adds /usr/include, that affects our --sysroot flag */
toolChains {
clang(Clang) {
eachPlatform {
cCompiler.withArguments { args ->
args.remove "/usr/include"
if (isLinux())
args.remove "/usr/include/x86_64-linux-gnu"
}
cCompiler.withArguments(ClangArgs.&filterGradleNativeSoftwareFlags)
}
}
}
+1 -1
View File
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-4.7-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
+11 -6
View File
@@ -16,7 +16,17 @@
apply plugin: "cpp"
apply plugin: "c"
buildscript {
ext.rootBuildDirectory = file('..')
apply from: "$rootBuildDirectory/gradle/kotlinGradlePlugin.gradle"
dependencies {
classpath "org.jetbrains.kotlin:kotlin-stdlib:$buildKotlinVersion"
classpath "org.jetbrains.kotlin:kotlin-native-shared:$konanVersion"
}
}
import org.jetbrains.kotlin.konan.target.ClangArgs
ext.isEnabled = isMac()
model {
@@ -40,15 +50,10 @@ model {
}
}
/* HACK over gradle 4.4, it adds /usr/include, that affects our --sysroot flag */
toolChains {
clang(Clang) {
eachPlatform {
cppCompiler.withArguments { args ->
args.remove "/usr/include"
if (isLinux())
args.remove "/usr/include/x86_64-linux-gnu"
}
cppCompiler.withArguments(ClangArgs.&filterGradleNativeSoftwareFlags)
}
}
}
+13 -6
View File
@@ -17,6 +17,18 @@
apply plugin: "cpp"
apply plugin: "c"
buildscript {
ext.rootBuildDirectory = file('..')
apply from: "$rootBuildDirectory/gradle/kotlinGradlePlugin.gradle"
dependencies {
classpath "org.jetbrains.kotlin:kotlin-stdlib:$buildKotlinVersion"
classpath "org.jetbrains.kotlin:kotlin-native-shared:$konanVersion"
}
}
import org.jetbrains.kotlin.konan.target.ClangArgs
model {
components {
debugInfo(NativeLibrarySpec) {
@@ -34,15 +46,10 @@ model {
}
}
/* HACK over gradle 4.4, it adds /usr/include, that affects our --sysroot flag */
toolChains {
clang(Clang) {
eachPlatform {
cppCompiler.withArguments { args ->
args.remove "/usr/include"
if (isLinux())
args.remove "/usr/include/x86_64-linux-gnu"
}
cppCompiler.withArguments(ClangArgs.&filterGradleNativeSoftwareFlags)
}
}
}
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-4.7-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
+1 -1
View File
@@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-4.7-bin.zip
@@ -198,5 +198,22 @@ class ClangArgs(private val configurables: Configurables) : Configurables by con
fun clangC(vararg userArgs: String) = targetClangCmd + userArgs.asList()
fun clangCXX(vararg userArgs: String) = targetClangXXCmd + userArgs.asList()
companion object {
@JvmStatic
fun filterGradleNativeSoftwareFlags(args: MutableList<String>) {
args.remove("/usr/include") // HACK: over gradle-4.4.
when (HostManager.host) {
KonanTarget.LINUX_X64 -> args.remove("/usr/include/x86_64-linux-gnu") // HACK: over gradle-4.4.
KonanTarget.MACOS_X64 -> {
val indexToRemove = args.indexOf(args.find { it.contains("MacOSX.platform")}) // HACK: over gradle-4.7.
if (indexToRemove != -1) {
args.removeAt(indexToRemove - 1) // drop -I.
args.removeAt(indexToRemove - 1) // drop /Application/Xcode.app/...
}
}
}
}
}
}
@@ -28,6 +28,7 @@ import org.gradle.api.plugins.BasePlugin
import org.gradle.api.publish.PublishingExtension
import org.gradle.api.publish.maven.MavenPublication
import org.gradle.api.publish.maven.internal.publication.MavenPublicationInternal
import org.gradle.language.cpp.internal.NativeVariantIdentity
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.model.KonanToolingModelBuilder
@@ -371,13 +372,13 @@ class KonanPlugin @Inject constructor(private val registry: ToolingModelBuilderR
project.extensions.configure(PublishingExtension::class.java) {
val publishing = it
for (v in konanSoftwareComponent.variants) {
// TODO: with gradle 4.7 don't forget to change to SoftwareComponentsWithCoordinates
publishing.publications.create(v.name, MavenPublication::class.java) {
it.artifactId = v.name
it.groupId = project.group.toString()
it.version = project.version.toString()
val coordinates = (v as NativeVariantIdentity).coordinates
project.logger.info("variant with coordiants(${coordinates}) and module: ${coordinates.module}")
it.artifactId = coordinates.module.name
it.groupId = coordinates.group
it.version = coordinates.version
it.from(v)
(it as MavenPublicationInternal).publishWithOriginalFileName()
}
}
}
@@ -21,17 +21,25 @@ import org.gradle.api.Action
import org.gradle.api.DefaultTask
import org.gradle.api.Project
import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.DependencyConstraint
import org.gradle.api.artifacts.ModuleDependency
import org.gradle.api.artifacts.PublishArtifact
import org.gradle.api.attributes.Attribute
import org.gradle.api.attributes.AttributeContainer
import org.gradle.api.attributes.Usage
import org.gradle.api.capabilities.Capability
import org.gradle.api.internal.component.UsageContext
import org.gradle.api.internal.tasks.DefaultTaskDependency
import org.gradle.api.tasks.*
import org.gradle.language.cpp.CppBinary
import org.gradle.language.cpp.internal.NativeVariant
import org.gradle.language.cpp.internal.DefaultUsageContext
import org.gradle.language.cpp.internal.NativeVariantIdentity
import org.gradle.language.nativeplatform.internal.Names
import org.gradle.nativeplatform.Linkage
import org.gradle.nativeplatform.OperatingSystemFamily
import org.gradle.util.ConfigureUtil
import org.jetbrains.kotlin.gradle.plugin.*
import org.jetbrains.kotlin.konan.target.Family
import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.konan.target.KonanTarget
import java.io.File
@@ -97,11 +105,12 @@ abstract class KonanArtifactTask: KonanTargetableTask(), KonanArtifactSpec {
it.attribute(Attribute.of("org.gradle.native.kotlin.platform", String::class.java), target.name)
}
val artifactNameWithoutSuffix = artifact.name.removeSuffix("$artifactSuffix")
project.pluginManager.withPlugin("maven-publish") {
if (!(project.getProperty(KonanPlugin.ProjectProperty.KONAN_PUBLICATION_ENABLED) as Boolean))
return@withPlugin
platformConfiguration.artifacts.add(object: PublishArtifact {
override fun getName() = "${artifact.name.removeSuffix("$artifactSuffix")}/${target.name}"
override fun getName(): String = artifactNameWithoutSuffix
override fun getExtension() = if (artifactSuffix.startsWith('.')) artifactSuffix.substring(1) else artifactSuffix
override fun getType() = artifactSuffix
override fun getClassifier():String? = target.name
@@ -113,7 +122,26 @@ abstract class KonanArtifactTask: KonanTargetableTask(), KonanArtifactSpec {
val objectFactory = project.objects
val linkUsage = objectFactory.named(Usage::class.java, Usage.NATIVE_LINK)
val konanSoftwareComponent = config.mainVariant
konanSoftwareComponent.addVariant(NativeVariant(Names.of("${artifact.name.removeSuffix("$artifactSuffix")}_${target.name}"), linkUsage, null, linkUsage, platformConfiguration))
val variantName = "${artifactNameWithoutSuffix}_${target.name}"
val context = DefaultUsageContext(object:UsageContext {
override fun getUsage(): Usage = linkUsage
override fun getName(): String = "${variantName}Link"
override fun getCapabilities(): MutableSet<out Capability> = mutableSetOf()
override fun getDependencies(): MutableSet<out ModuleDependency> = mutableSetOf()
override fun getDependencyConstraints(): MutableSet<out DependencyConstraint> = mutableSetOf()
override fun getArtifacts(): MutableSet<out PublishArtifact> = platformConfiguration.allArtifacts
override fun getAttributes(): AttributeContainer = platformConfiguration.attributes
}, platformConfiguration.allArtifacts, platformConfiguration)
konanSoftwareComponent.addVariant(NativeVariantIdentity(
variantName,
project.provider{ artifactName },
project.provider{ project.group.toString() },
project.provider{ project.version.toString() },
false,
false,
target.asOperatingSystemFamily(),
context,
null))
}
}
@@ -130,6 +158,9 @@ 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 */