blob: e10a8e83c849bebc0f2306b2ef219ecffa4ab227 [file]
// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import com.google.protobuf.gradle.ProtobufExtension
import com.google.protobuf.gradle.proto
import java.util.concurrent.Callable
import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
plugins {
// Kotlin version is fixed by create_local_maven_dependencies.py
id("org.jetbrains.kotlin.jvm")
id("dependencies-plugin")
}
// It seems like the use of a local maven repo does not allow adding the plugin with the id+version
// syntax. Also, for some reason the 'protobuf' extension object cannot be directly referenced.
// This configures the plugin "old style" and pulls out the extension object manually.
buildscript { dependencies { classpath("com.google.protobuf:protobuf-gradle-plugin:0.9.4") } }
apply(plugin = "com.google.protobuf")
tasks.named("generateProto") { dependsOn(sharedDepsConfig) }
var os = DefaultNativePlatform.getCurrentOperatingSystem()
var protobuf = project.extensions.getByName("protobuf") as ProtobufExtension
protobuf.protoc {
if (os.isLinux) {
path = getRoot().resolveAll("third_party", "protoc", "linux-x86_64", "bin", "protoc").path
} else if (os.isMacOsX) {
path = getRoot().resolveAll("third_party", "protoc", "osx-x86_64", "bin", "protoc").path
} else {
assert(os.isWindows)
path = getRoot().resolveAll("third_party", "protoc", "win64", "bin", "protoc.exe").path
}
}
java {
sourceSets.main.configure {
java.srcDir(getRoot().resolveAll("src", "keepanno", "java"))
proto { srcDir(getRoot().resolveAll("src", "keepanno", "proto")) }
}
sourceCompatibility = JvmCompatibility.sourceCompatibility
targetCompatibility = JvmCompatibility.targetCompatibility
toolchain { languageVersion = JavaLanguageVersion.of(JvmCompatibility.release) }
withSourcesJar()
}
kotlin {
explicitApi()
compilerOptions {
jvmTarget.set(JvmTarget.fromTarget(JvmCompatibility.release.toString()))
languageVersion.set(KotlinVersion.KOTLIN_1_8)
apiVersion.set(KotlinVersion.KOTLIN_1_8)
}
}
val sharedDepsScope by configurations.dependencyScope("sharedDepsScope")
val sharedDepsConfig by
configurations.resolvable("sharedDepsConfig") { extendsFrom(sharedDepsScope) }
dependencies {
sharedDepsScope(project(":shared", "sharedDepsFiles"))
compileOnly(Deps.asm)
compileOnly(Deps.guava)
compileOnly(Deps.protobuf)
}
tasks {
val keepAnnoAnnotationsJar by
registering(Jar::class) {
dependsOn(sharedDepsConfig)
from(sourceSets.main.get().output)
include("com/android/tools/r8/keepanno/annotations/*")
destinationDirectory.set(getRoot().resolveAll("build", "libs"))
archiveFileName.set("keepanno-annotations.jar")
}
val keepAnnoLegacyAnnotationsJar by
registering(Jar::class) {
dependsOn(sharedDepsConfig)
from(sourceSets.main.get().output)
include("com/android/tools/r8/keepanno/annotations/*")
destinationDirectory.set(getRoot().resolveAll("build", "libs"))
archiveFileName.set("keepanno-annotations-legacy.jar")
}
val keepAnnoAndroidXAnnotationsJar by
registering(Jar::class) {
dependsOn(sharedDepsConfig)
from(sourceSets.main.get().output)
include("androidx/annotation/keep/*")
destinationDirectory.set(getRoot().resolveAll("build", "libs"))
archiveFileName.set("keepanno-annotations-androidx.jar")
}
named<Jar>("jar") { dependsOn(sharedDepsConfig) }
val keepAnnoAnnotationsDoc by
registering(Javadoc::class) {
source = sourceSets.main.get().allJava
include("com/android/tools/r8/keepanno/annotations/*")
}
fun dependenciesExceptAsm(): FileCollection {
return sourceSets.main
.get()
.compileClasspath
.filter({
"$it".contains("third_party") &&
"$it".contains("dependencies") &&
!("$it".contains("errorprone") || "$it".contains("ow2"))
})
}
fun dependenciesOnlyAsm(): FileCollection {
return sourceSets.main
.get()
.compileClasspath
.filter({
"$it".contains("third_party") &&
"$it".contains("dependencies") &&
("$it".contains("errorprone") || "$it".contains("ow2"))
})
}
val depsJarExceptAsm by
registering(Jar::class) {
dependsOn(sharedDepsConfig)
from(Callable { dependenciesExceptAsm().map(::zipTree) })
// TODO(b/428166503): Add license information.
exclude("META-INF/*.kotlin_module")
exclude("META-INF/com.android.tools/**")
exclude("META-INF/LICENSE*")
exclude("META-INF/MANIFEST.MF")
exclude("META-INF/maven/**")
exclude("META-INF/proguard/**")
exclude("META-INF/versions/**")
exclude("META-INF/services/kotlin.reflect.**")
exclude("javax/annotation/**")
exclude("google/protobuf/**")
duplicatesStrategy = DuplicatesStrategy.FAIL
archiveFileName.set("keepanno-deps-except-asm.jar")
}
val depsJarOnlyAsm by
registering(Jar::class) {
dependsOn(sharedDepsConfig)
from(Callable { dependenciesOnlyAsm().map(::zipTree) })
// TODO(b/428166503): Add license information if needed.
exclude("META-INF/*.kotlin_module")
exclude("META-INF/com.android.tools/**")
exclude("META-INF/LICENSE*")
exclude("META-INF/MANIFEST.MF")
exclude("META-INF/maven/**")
exclude("META-INF/proguard/**")
exclude("META-INF/versions/**")
exclude("META-INF/services/kotlin.reflect.**")
exclude("javax/annotation/**")
exclude("google/protobuf/**")
duplicatesStrategy = DuplicatesStrategy.FAIL
archiveFileName.set("keepanno-deps-only-asm.jar")
}
val toolsJar by
registering(Jar::class) {
dependsOn(sharedDepsConfig)
from(sourceSets.main.get().output)
// TODO(b/428166503): Add license information.
entryCompression = ZipEntryCompression.STORED
exclude("META-INF/*.kotlin_module")
exclude("**/*.kotlin_metadata")
exclude("keepspec.proto")
exclude("com/android/tools/r8/keepanno/annotations/**")
exclude("androidx/**")
archiveFileName.set("keepanno-tools.jar")
}
}
val keepannoJar by
configurations.consumable("keepannoJar") { outgoing.artifact(tasks.named<Jar>("jar")) }
val keepannoDepsJarExceptAsm by
configurations.consumable("keepannoDepsJarExceptAsm") {
outgoing.artifact(tasks.named<Jar>("depsJarExceptAsm"))
}
val keepannoToolsJar by
configurations.consumable("keepannoToolsJar") { outgoing.artifact(tasks.named<Jar>("toolsJar")) }
val keepannoAndroidXAnnotationsJar by
configurations.consumable("keepannoAndroidXAnnotationsJar") {
outgoing.artifact(tasks.named<Jar>("keepAnnoAndroidXAnnotationsJar"))
}
val keepannoDepsJarOnlyAsm by
configurations.consumable("keepannoDepsJarOnlyAsm") {
outgoing.artifact(tasks.named<Jar>("depsJarOnlyAsm"))
}
val keepannoSources by
configurations.consumable("keepannoSources") { outgoing.artifact(tasks.named<Jar>("sourcesJar")) }
val keepannoClasses by
configurations.consumable("keepannoClasses") {
outgoing.artifact(tasks.named<JavaCompile>("compileJava").map { it.destinationDirectory })
outgoing.artifact(
tasks.named<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>("compileKotlin").map {
it.destinationDirectory
}
)
}