From 361cde1ed18de851e6a52356d8d5b5df651a84f7 Mon Sep 17 00:00:00 2001 From: Vasily Levchenko Date: Thu, 17 May 2018 19:34:50 +0300 Subject: [PATCH] [build][gradle] switch to gradle-4.7 --- Interop/Indexer/build.gradle | 25 ++++++------- Interop/Runtime/build.gradle | 24 +++++++----- gradle/wrapper/gradle-wrapper.properties | 2 +- libclangext/build.gradle | 17 ++++++--- llvmDebugInfoC/build.gradle | 19 +++++++--- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../kotlin/konan/target/ClangArgs.kt | 17 +++++++++ .../kotlin/gradle/plugin/KonanPlugin.kt | 11 +++--- .../gradle/plugin/tasks/KonanBaseTasks.kt | 37 +++++++++++++++++-- 10 files changed, 110 insertions(+), 46 deletions(-) diff --git a/Interop/Indexer/build.gradle b/Interop/Indexer/build.gradle index 51c395c1961..39a033eb830 100644 --- a/Interop/Indexer/build.gradle +++ b/Interop/Indexer/build.gradle @@ -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) } } } diff --git a/Interop/Runtime/build.gradle b/Interop/Runtime/build.gradle index d52aadd09e6..7a2a5cf4e38 100644 --- a/Interop/Runtime/build.gradle +++ b/Interop/Runtime/build.gradle @@ -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) } } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 9a4163a4f5e..e6a30918ef8 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -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 diff --git a/libclangext/build.gradle b/libclangext/build.gradle index 110bbdbab2e..6d16aa382d8 100644 --- a/libclangext/build.gradle +++ b/libclangext/build.gradle @@ -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) } } } diff --git a/llvmDebugInfoC/build.gradle b/llvmDebugInfoC/build.gradle index 9bf6e694cfc..9c0fae26f74 100644 --- a/llvmDebugInfoC/build.gradle +++ b/llvmDebugInfoC/build.gradle @@ -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) } } } diff --git a/samples/calculator/gradle/wrapper/gradle-wrapper.properties b/samples/calculator/gradle/wrapper/gradle-wrapper.properties index bf3de218305..16d28051c9c 100644 --- a/samples/calculator/gradle/wrapper/gradle-wrapper.properties +++ b/samples/calculator/gradle/wrapper/gradle-wrapper.properties @@ -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 diff --git a/samples/gradle/wrapper/gradle-wrapper.properties b/samples/gradle/wrapper/gradle-wrapper.properties index ea720f986f3..c30d4c017b7 100644 --- a/samples/gradle/wrapper/gradle-wrapper.properties +++ b/samples/gradle/wrapper/gradle-wrapper.properties @@ -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 diff --git a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ClangArgs.kt b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ClangArgs.kt index 89883f156c2..fc5299ff3c3 100644 --- a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ClangArgs.kt +++ b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ClangArgs.kt @@ -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) { + 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/... + } + } + } + } + } } 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 7fbbfa3f78e..d6549450d92 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 @@ -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() } } } diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanBaseTasks.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanBaseTasks.kt index 7f0a18179a1..d90ab8c56bd 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanBaseTasks.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanBaseTasks.kt @@ -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 = mutableSetOf() + override fun getDependencies(): MutableSet = mutableSetOf() + override fun getDependencyConstraints(): MutableSet = mutableSetOf() + override fun getArtifacts(): MutableSet = 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 */