[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 { 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: 'kotlin'
apply plugin: org.jetbrains.kotlin.NativeInteropPlugin apply plugin: org.jetbrains.kotlin.NativeInteropPlugin
apply plugin: 'c' apply plugin: 'c'
apply plugin: 'cpp' apply plugin: 'cpp'
import org.jetbrains.kotlin.konan.target.ClangArgs
final Project libclangextProject = project(":libclangext") final Project libclangextProject = project(":libclangext")
final String libclangextTask = libclangextProject.path + ":build" final String libclangextTask = libclangextProject.path + ":build"
File libclangextDir = new File(libclangextProject.buildDir, "libs/clangext/static") 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 { toolChains {
clang(Clang) { clang(Clang) {
eachPlatform { eachPlatform {
cppCompiler.withArguments { args -> cppCompiler.withArguments(ClangArgs.&filterGradleNativeSoftwareFlags)
args.remove "/usr/include" cCompiler.withArguments(ClangArgs.&filterGradleNativeSoftwareFlags)
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"
}
} }
} }
} }
+14 -10
View File
@@ -14,13 +14,22 @@
* limitations under the License. * limitations under the License.
*/ */
buildscript {
apply from: "$rootDir/gradle/kotlinGradlePlugin.gradle"
}
apply plugin: 'kotlin' apply plugin: 'kotlin'
apply plugin: 'c' 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 { model {
components { components {
callbacks(NativeLibrarySpec) { callbacks(NativeLibrarySpec) {
@@ -41,15 +50,10 @@ model {
} }
} }
/* HACK over gradle 4.4, it adds /usr/include, that affects our --sysroot flag */
toolChains { toolChains {
clang(Clang) { clang(Clang) {
eachPlatform { eachPlatform {
cCompiler.withArguments { args -> cCompiler.withArguments(ClangArgs.&filterGradleNativeSoftwareFlags)
args.remove "/usr/include"
if (isLinux())
args.remove "/usr/include/x86_64-linux-gnu"
}
} }
} }
} }
+1 -1
View File
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists 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 zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
+11 -6
View File
@@ -16,7 +16,17 @@
apply plugin: "cpp" apply plugin: "cpp"
apply plugin: "c" 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() ext.isEnabled = isMac()
model { model {
@@ -40,15 +50,10 @@ model {
} }
} }
/* HACK over gradle 4.4, it adds /usr/include, that affects our --sysroot flag */
toolChains { toolChains {
clang(Clang) { clang(Clang) {
eachPlatform { eachPlatform {
cppCompiler.withArguments { args -> cppCompiler.withArguments(ClangArgs.&filterGradleNativeSoftwareFlags)
args.remove "/usr/include"
if (isLinux())
args.remove "/usr/include/x86_64-linux-gnu"
}
} }
} }
} }
+13 -6
View File
@@ -17,6 +17,18 @@
apply plugin: "cpp" apply plugin: "cpp"
apply plugin: "c" 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 { model {
components { components {
debugInfo(NativeLibrarySpec) { debugInfo(NativeLibrarySpec) {
@@ -34,15 +46,10 @@ model {
} }
} }
/* HACK over gradle 4.4, it adds /usr/include, that affects our --sysroot flag */
toolChains { toolChains {
clang(Clang) { clang(Clang) {
eachPlatform { eachPlatform {
cppCompiler.withArguments { args -> cppCompiler.withArguments(ClangArgs.&filterGradleNativeSoftwareFlags)
args.remove "/usr/include"
if (isLinux())
args.remove "/usr/include/x86_64-linux-gnu"
}
} }
} }
} }
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists 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 zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
+1 -1
View File
@@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists 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 clangC(vararg userArgs: String) = targetClangCmd + userArgs.asList()
fun clangCXX(vararg userArgs: String) = targetClangXXCmd + 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.PublishingExtension
import org.gradle.api.publish.maven.MavenPublication import org.gradle.api.publish.maven.MavenPublication
import org.gradle.api.publish.maven.internal.publication.MavenPublicationInternal 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.gradle.tooling.provider.model.ToolingModelBuilderRegistry
import org.jetbrains.kotlin.gradle.plugin.KonanPlugin.Companion.COMPILE_ALL_TASK_NAME import org.jetbrains.kotlin.gradle.plugin.KonanPlugin.Companion.COMPILE_ALL_TASK_NAME
import org.jetbrains.kotlin.gradle.plugin.model.KonanToolingModelBuilder 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) { project.extensions.configure(PublishingExtension::class.java) {
val publishing = it val publishing = it
for (v in konanSoftwareComponent.variants) { 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) { publishing.publications.create(v.name, MavenPublication::class.java) {
it.artifactId = v.name val coordinates = (v as NativeVariantIdentity).coordinates
it.groupId = project.group.toString() project.logger.info("variant with coordiants(${coordinates}) and module: ${coordinates.module}")
it.version = project.version.toString() it.artifactId = coordinates.module.name
it.groupId = coordinates.group
it.version = coordinates.version
it.from(v) 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.DefaultTask
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.api.artifacts.Configuration 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.artifacts.PublishArtifact
import org.gradle.api.attributes.Attribute import org.gradle.api.attributes.Attribute
import org.gradle.api.attributes.AttributeContainer
import org.gradle.api.attributes.Usage 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.internal.tasks.DefaultTaskDependency
import org.gradle.api.tasks.* import org.gradle.api.tasks.*
import org.gradle.language.cpp.CppBinary 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.language.nativeplatform.internal.Names
import org.gradle.nativeplatform.Linkage import org.gradle.nativeplatform.Linkage
import org.gradle.nativeplatform.OperatingSystemFamily
import org.gradle.util.ConfigureUtil import org.gradle.util.ConfigureUtil
import org.jetbrains.kotlin.gradle.plugin.* 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.HostManager
import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.konan.target.KonanTarget
import java.io.File 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) 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") { project.pluginManager.withPlugin("maven-publish") {
if (!(project.getProperty(KonanPlugin.ProjectProperty.KONAN_PUBLICATION_ENABLED) as Boolean)) if (!(project.getProperty(KonanPlugin.ProjectProperty.KONAN_PUBLICATION_ENABLED) as Boolean))
return@withPlugin return@withPlugin
platformConfiguration.artifacts.add(object: PublishArtifact { 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 getExtension() = if (artifactSuffix.startsWith('.')) artifactSuffix.substring(1) else artifactSuffix
override fun getType() = artifactSuffix override fun getType() = artifactSuffix
override fun getClassifier():String? = target.name override fun getClassifier():String? = target.name
@@ -113,7 +122,26 @@ abstract class KonanArtifactTask: KonanTargetableTask(), KonanArtifactSpec {
val objectFactory = project.objects val objectFactory = project.objects
val linkUsage = objectFactory.named(Usage::class.java, Usage.NATIVE_LINK) val linkUsage = objectFactory.named(Usage::class.java, Usage.NATIVE_LINK)
val konanSoftwareComponent = config.mainVariant 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) { fun destinationDir(dir: Any) {
destinationDir = project.file(dir) destinationDir = project.file(dir)
} }
private fun KonanTarget.asOperatingSystemFamily(): OperatingSystemFamily = project.objects.named(OperatingSystemFamily::class.java, family.name)
} }
/** Task building an artifact with libraries */ /** Task building an artifact with libraries */