Morten Krogh-Jespersen | 5a37de8 | 2023-03-02 01:42:28 +0100 | [diff] [blame] | 1 | // Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file |
| 2 | // for details. All rights reserved. Use of this source code is governed by a |
| 3 | // BSD-style license that can be found in the LICENSE file. |
| 4 | |
Søren Gjesse | 4569e47 | 2023-10-25 15:15:17 +0200 | [diff] [blame] | 5 | import java.net.URI |
| 6 | import java.nio.file.Path |
| 7 | import java.nio.file.Paths |
| 8 | import kotlin.io.path.exists |
| 9 | import java.nio.file.Files.readString |
Ian Zerny | 8efb7cc | 2023-03-02 16:48:54 +0100 | [diff] [blame] | 10 | import net.ltgt.gradle.errorprone.errorprone |
Søren Gjesse | 4569e47 | 2023-10-25 15:15:17 +0200 | [diff] [blame] | 11 | import org.gradle.api.artifacts.ModuleVersionIdentifier |
Morten Krogh-Jespersen | dd3a14e | 2023-09-08 20:39:43 +0200 | [diff] [blame] | 12 | import org.gradle.api.artifacts.component.ModuleComponentIdentifier |
Søren Gjesse | 4569e47 | 2023-10-25 15:15:17 +0200 | [diff] [blame] | 13 | import org.jetbrains.kotlin.gradle.tasks.KotlinCompile |
| 14 | import org.spdx.sbom.gradle.SpdxSbomTask |
| 15 | import org.spdx.sbom.gradle.extensions.DefaultSpdxSbomTaskExtension |
| 16 | |
| 17 | import com.google.gson.Gson |
Søren Gjesse | 7ec4b3f | 2023-11-01 09:39:20 +0100 | [diff] [blame] | 18 | import java.util.UUID |
Ian Zerny | 8efb7cc | 2023-03-02 16:48:54 +0100 | [diff] [blame] | 19 | |
Morten Krogh-Jespersen | 5a37de8 | 2023-03-02 01:42:28 +0100 | [diff] [blame] | 20 | plugins { |
| 21 | `kotlin-dsl` |
| 22 | id("dependencies-plugin") |
Ian Zerny | 8efb7cc | 2023-03-02 16:48:54 +0100 | [diff] [blame] | 23 | id("net.ltgt.errorprone") version "3.0.1" |
Søren Gjesse | 50a858a | 2023-12-12 12:44:11 +0100 | [diff] [blame] | 24 | id("org.spdx.sbom") version "0.4.0" |
Morten Krogh-Jespersen | 5a37de8 | 2023-03-02 01:42:28 +0100 | [diff] [blame] | 25 | } |
| 26 | |
| 27 | java { |
| 28 | sourceSets.main.configure { |
| 29 | java.srcDir(getRoot().resolveAll("src", "main", "java")) |
| 30 | resources.srcDirs(getRoot().resolveAll("third_party", "api_database", "api_database")) |
| 31 | } |
| 32 | sourceCompatibility = JvmCompatibility.sourceCompatibility |
| 33 | targetCompatibility = JvmCompatibility.targetCompatibility |
Morten Krogh-Jespersen | c06e222 | 2023-09-18 17:52:21 +0200 | [diff] [blame] | 34 | withSourcesJar() |
Morten Krogh-Jespersen | 5a37de8 | 2023-03-02 01:42:28 +0100 | [diff] [blame] | 35 | } |
| 36 | |
| 37 | dependencies { |
| 38 | implementation(":keepanno") |
Rico Wind | e633b58 | 2023-08-03 08:38:22 +0200 | [diff] [blame] | 39 | implementation(":resourceshrinker") |
Morten Krogh-Jespersen | d1a1185 | 2023-06-14 14:48:44 +0200 | [diff] [blame] | 40 | compileOnly(Deps.asm) |
Morten Krogh-Jespersen | d1a1185 | 2023-06-14 14:48:44 +0200 | [diff] [blame] | 41 | compileOnly(Deps.asmCommons) |
Morten Krogh-Jespersen | 91584d7 | 2023-06-21 13:45:07 +0200 | [diff] [blame] | 42 | compileOnly(Deps.asmUtil) |
Morten Krogh-Jespersen | d1a1185 | 2023-06-14 14:48:44 +0200 | [diff] [blame] | 43 | compileOnly(Deps.fastUtil) |
| 44 | compileOnly(Deps.gson) |
| 45 | compileOnly(Deps.guava) |
| 46 | compileOnly(Deps.kotlinMetadata) |
Ian Zerny | 8efb7cc | 2023-03-02 16:48:54 +0100 | [diff] [blame] | 47 | errorprone(Deps.errorprone) |
Morten Krogh-Jespersen | 5a37de8 | 2023-03-02 01:42:28 +0100 | [diff] [blame] | 48 | } |
| 49 | |
Søren Gjesse | 4569e47 | 2023-10-25 15:15:17 +0200 | [diff] [blame] | 50 | if (project.hasProperty("spdxVersion")) { |
Søren Gjesse | 7ec4b3f | 2023-11-01 09:39:20 +0100 | [diff] [blame] | 51 | project.version = project.property("spdxVersion")!! |
Søren Gjesse | 4569e47 | 2023-10-25 15:15:17 +0200 | [diff] [blame] | 52 | } |
| 53 | |
| 54 | spdxSbom { |
| 55 | targets { |
| 56 | create("r8") { |
| 57 | // Use of both compileClasspath and runtimeClasspath due to how the |
| 58 | // dependencies jar is built and dependencies above therefore use |
| 59 | // compileOnly for actual runtime dependencies. |
| 60 | configurations.set(listOf("compileClasspath", "runtimeClasspath")) |
| 61 | scm { |
| 62 | uri.set("https://r8.googlesource.com/r8/") |
Søren Gjesse | 00dd7da | 2023-11-01 09:16:04 +0100 | [diff] [blame] | 63 | if (project.hasProperty("spdxRevision")) { |
| 64 | revision.set(project.property("spdxRevision").toString()) |
| 65 | } |
Søren Gjesse | 4569e47 | 2023-10-25 15:15:17 +0200 | [diff] [blame] | 66 | } |
| 67 | document { |
| 68 | name.set("R8 Compiler Suite") |
Søren Gjesse | 7ec4b3f | 2023-11-01 09:39:20 +0100 | [diff] [blame] | 69 | // Generate version 5 UUID from fixed namespace UUID and name generated from revision |
| 70 | // (git hash) and artifact name. |
| 71 | if (project.hasProperty("spdxRevision")) { |
| 72 | namespace.set( |
| 73 | "https://spdx.google/" |
| 74 | + uuid5( |
| 75 | UUID.fromString("df17ea25-709b-4edc-8dc1-d3ca82c74e8e"), |
| 76 | project.property("spdxRevision").toString() + "-r8" |
| 77 | ) |
| 78 | ) |
| 79 | } |
Søren Gjesse | 4569e47 | 2023-10-25 15:15:17 +0200 | [diff] [blame] | 80 | creator.set("Organization: Google LLC") |
| 81 | packageSupplier.set("Organization: Google LLC") |
| 82 | } |
| 83 | } |
| 84 | } |
| 85 | } |
| 86 | |
Morten Krogh-Jespersen | d1a1185 | 2023-06-14 14:48:44 +0200 | [diff] [blame] | 87 | val keepAnnoJarTask = projectTask("keepanno", "jar") |
Rico Wind | e633b58 | 2023-08-03 08:38:22 +0200 | [diff] [blame] | 88 | val resourceShrinkerJarTask = projectTask("resourceshrinker", "jar") |
| 89 | val resourceShrinkerDepsTask = projectTask("resourceshrinker", "depsJar") |
Morten Krogh-Jespersen | d1a1185 | 2023-06-14 14:48:44 +0200 | [diff] [blame] | 90 | |
| 91 | fun mainJarDependencies() : FileCollection { |
| 92 | return sourceSets |
| 93 | .main |
| 94 | .get() |
| 95 | .compileClasspath |
| 96 | .filter({ "$it".contains("third_party") |
| 97 | && "$it".contains("dependencies") |
| 98 | && !"$it".contains("errorprone") |
| 99 | }) |
| 100 | } |
| 101 | |
| 102 | tasks { |
| 103 | withType<Exec> { |
| 104 | doFirst { |
| 105 | println("Executing command: ${commandLine.joinToString(" ")}") |
| 106 | } |
| 107 | } |
| 108 | |
Morten Krogh-Jespersen | 91584d7 | 2023-06-21 13:45:07 +0200 | [diff] [blame] | 109 | withType<ProcessResources> { |
Morten Krogh-Jespersen | ad74d68 | 2023-09-14 15:55:18 +0200 | [diff] [blame] | 110 | dependsOn(gradle.includedBuild("shared").task(":downloadDeps")) |
Morten Krogh-Jespersen | 91584d7 | 2023-06-21 13:45:07 +0200 | [diff] [blame] | 111 | } |
| 112 | |
Søren Gjesse | 4569e47 | 2023-10-25 15:15:17 +0200 | [diff] [blame] | 113 | withType<SpdxSbomTask> { |
| 114 | taskExtension.set(object : DefaultSpdxSbomTaskExtension() { |
| 115 | override fun mapRepoUri(input: URI?, moduleId: ModuleVersionIdentifier): URI? { |
| 116 | |
| 117 | // Locate the file origin.json with URL for download location. |
| 118 | fun getOriginJson() : java.nio.file.Path { |
| 119 | var repositoryDir = |
| 120 | moduleId.group.replace('.', '/') + "/" + moduleId.name + "/" + moduleId.version |
Søren Gjesse | 80ae2c7 | 2023-10-26 12:04:01 +0200 | [diff] [blame] | 121 | return Paths.get("third_party", "dependencies", repositoryDir, "origin.json"); |
Søren Gjesse | 4569e47 | 2023-10-25 15:15:17 +0200 | [diff] [blame] | 122 | } |
| 123 | |
| 124 | // Simple data model of the content of origin.json generated by the tool to download |
| 125 | // and create a local repository. E.g.: |
| 126 | /* |
| 127 | { |
| 128 | "artifacts": [ |
| 129 | { |
| 130 | "file": "org/ow2/asm/asm/9.5/asm-9.5.pom", |
| 131 | "repo": "https://repo1.maven.org/maven2/", |
| 132 | "artifact": "org.ow2.asm:asm:pom:9.5" |
| 133 | }, |
| 134 | { |
| 135 | "file": "org/ow2/asm/asm/9.5/asm-9.5.jar", |
| 136 | "repo": "https://repo1.maven.org/maven2/", |
| 137 | "artifact": "org.ow2.asm:asm:jar:9.5" |
| 138 | } |
| 139 | ] |
| 140 | } |
| 141 | */ |
| 142 | data class Artifact(val file: String, val repo: String, val artifact: String) |
| 143 | data class Artifacts(val artifacts: List<Artifact>) |
| 144 | |
| 145 | // Read origin.json. |
| 146 | val json = readString(getOriginJson()); |
| 147 | val artifacts = Gson().fromJson(json, Artifacts::class.java); |
| 148 | return URI.create(artifacts.artifacts.get(0).repo) |
| 149 | } |
| 150 | }) |
| 151 | } |
| 152 | |
Morten Krogh-Jespersen | cef9a9d | 2023-09-10 23:06:41 +0200 | [diff] [blame] | 153 | val consolidatedLicense by registering { |
Morten Krogh-Jespersen | ad74d68 | 2023-09-14 15:55:18 +0200 | [diff] [blame] | 154 | dependsOn(gradle.includedBuild("shared").task(":downloadDeps")) |
Morten Krogh-Jespersen | dd3a14e | 2023-09-08 20:39:43 +0200 | [diff] [blame] | 155 | val root = getRoot() |
| 156 | val r8License = root.resolve("LICENSE") |
| 157 | val libraryLicense = root.resolve("LIBRARY-LICENSE") |
| 158 | val libraryLicenseFiles = fileTree(root.resolve("library-licensing")) |
| 159 | inputs.files( |
| 160 | listOf(r8License, libraryLicense), |
| 161 | libraryLicenseFiles, |
| 162 | mainJarDependencies().map(::zipTree)) |
| 163 | |
Rico Wind | e386dc7 | 2023-09-19 10:45:02 +0200 | [diff] [blame] | 164 | val license = getRoot().resolveAll("build", "generatedLicense", "LICENSE") |
Morten Krogh-Jespersen | dd3a14e | 2023-09-08 20:39:43 +0200 | [diff] [blame] | 165 | outputs.files(license) |
Rico Wind | de900d2 | 2023-10-12 08:53:28 +0200 | [diff] [blame] | 166 | val dependencies = mutableListOf<String>() |
| 167 | configurations |
| 168 | .findByName("runtimeClasspath")!! |
| 169 | .resolvedConfiguration |
| 170 | .resolvedArtifacts |
| 171 | .forEach { |
| 172 | val identifier = it.id.componentIdentifier |
| 173 | if (identifier is ModuleComponentIdentifier) { |
| 174 | dependencies.add("${identifier.group}:${identifier.module}") |
| 175 | } |
| 176 | } |
Morten Krogh-Jespersen | dd3a14e | 2023-09-08 20:39:43 +0200 | [diff] [blame] | 177 | |
| 178 | doLast { |
Morten Krogh-Jespersen | dd3a14e | 2023-09-08 20:39:43 +0200 | [diff] [blame] | 179 | val libraryLicenses = libraryLicense.readText() |
| 180 | dependencies.forEach { |
| 181 | if (!libraryLicenses.contains("- artifact: $it")) { |
| 182 | throw GradleException("No license for $it in LIBRARY_LICENSE") |
| 183 | } |
| 184 | } |
| 185 | license.getParentFile().mkdirs() |
| 186 | license.createNewFile() |
| 187 | license.writeText(buildString { |
| 188 | append("This file lists all licenses for code distributed.\n") |
| 189 | .append("All non-library code has the following 3-Clause BSD license.\n") |
| 190 | .append("\n") |
| 191 | .append("\n") |
| 192 | .append(r8License.readText()) |
| 193 | .append("\n") |
| 194 | .append("\n") |
| 195 | .append("Summary of distributed libraries:\n") |
| 196 | .append("\n") |
| 197 | .append(libraryLicenses) |
| 198 | .append("\n") |
| 199 | .append("\n") |
| 200 | .append("Licenses details:\n") |
| 201 | libraryLicenseFiles.sorted().forEach { file -> |
| 202 | append("\n").append("\n").append(file.readText()) |
| 203 | } |
| 204 | }) |
| 205 | } |
| 206 | } |
| 207 | |
Morten Krogh-Jespersen | d1a1185 | 2023-06-14 14:48:44 +0200 | [diff] [blame] | 208 | val swissArmyKnife by registering(Jar::class) { |
Rico Wind | 34f8064 | 2023-09-14 10:45:17 +0200 | [diff] [blame] | 209 | dependsOn(keepAnnoJarTask) |
| 210 | dependsOn(resourceShrinkerJarTask) |
Morten Krogh-Jespersen | ad74d68 | 2023-09-14 15:55:18 +0200 | [diff] [blame] | 211 | dependsOn(gradle.includedBuild("shared").task(":downloadDeps")) |
Morten Krogh-Jespersen | d1a1185 | 2023-06-14 14:48:44 +0200 | [diff] [blame] | 212 | from(sourceSets.main.get().output) |
Ian Zerny | 3fb99fb | 2023-10-31 08:16:41 +0100 | [diff] [blame] | 213 | exclude("com/android/tools/r8/threading/providers/**") |
Rico Wind | 34f8064 | 2023-09-14 10:45:17 +0200 | [diff] [blame] | 214 | from(keepAnnoJarTask.outputs.files.map(::zipTree)) |
| 215 | from(resourceShrinkerJarTask.outputs.files.map(::zipTree)) |
Rico Wind | d0a656e | 2023-09-25 09:40:07 +0200 | [diff] [blame] | 216 | from(getRoot().resolve("LICENSE")) |
Rico Wind | 5be586a | 2023-09-22 13:47:54 +0200 | [diff] [blame] | 217 | entryCompression = ZipEntryCompression.STORED |
Morten Krogh-Jespersen | d1a1185 | 2023-06-14 14:48:44 +0200 | [diff] [blame] | 218 | manifest { |
| 219 | attributes["Main-Class"] = "com.android.tools.r8.SwissArmyKnife" |
| 220 | } |
| 221 | exclude("META-INF/*.kotlin_module") |
| 222 | exclude("**/*.kotlin_metadata") |
Rico Wind | 293d6e0 | 2023-09-14 15:15:47 +0200 | [diff] [blame] | 223 | destinationDirectory.set(getRoot().resolveAll("build", "libs")) |
| 224 | archiveFileName.set("r8-full-exclude-deps.jar") |
Morten Krogh-Jespersen | d1a1185 | 2023-06-14 14:48:44 +0200 | [diff] [blame] | 225 | } |
| 226 | |
Ian Zerny | 3fb99fb | 2023-10-31 08:16:41 +0100 | [diff] [blame] | 227 | val threadingModuleBlockingJar by registering(Zip::class) { |
| 228 | from(sourceSets.main.get().output) |
| 229 | include("com/android/tools/r8/threading/providers/blocking/**") |
| 230 | destinationDirectory.set(getRoot().resolveAll("build", "libs")) |
| 231 | archiveFileName.set("threading-module-blocking.jar") |
| 232 | } |
| 233 | |
| 234 | val threadingModuleSingleThreadedJar by registering(Zip::class) { |
| 235 | from(sourceSets.main.get().output) |
| 236 | include("com/android/tools/r8/threading/providers/singlethreaded/**") |
| 237 | destinationDirectory.set(getRoot().resolveAll("build", "libs")) |
| 238 | archiveFileName.set("threading-module-single-threaded.jar") |
| 239 | } |
| 240 | |
Rico Wind | d0a656e | 2023-09-25 09:40:07 +0200 | [diff] [blame] | 241 | val depsJar by registering(Zip::class) { |
Morten Krogh-Jespersen | ad74d68 | 2023-09-14 15:55:18 +0200 | [diff] [blame] | 242 | dependsOn(gradle.includedBuild("shared").task(":downloadDeps")) |
Rico Wind | e633b58 | 2023-08-03 08:38:22 +0200 | [diff] [blame] | 243 | dependsOn(resourceShrinkerDepsTask) |
Ian Zerny | 3fb99fb | 2023-10-31 08:16:41 +0100 | [diff] [blame] | 244 | dependsOn(threadingModuleBlockingJar) |
| 245 | dependsOn(threadingModuleSingleThreadedJar) |
| 246 | from(threadingModuleBlockingJar.get().outputs.getFiles().map(::zipTree)) |
| 247 | from(threadingModuleSingleThreadedJar.get().outputs.getFiles().map(::zipTree)) |
Morten Krogh-Jespersen | d1a1185 | 2023-06-14 14:48:44 +0200 | [diff] [blame] | 248 | from(mainJarDependencies().map(::zipTree)) |
Rico Wind | e633b58 | 2023-08-03 08:38:22 +0200 | [diff] [blame] | 249 | from(resourceShrinkerDepsTask.outputs.files.map(::zipTree)) |
Rico Wind | d0a656e | 2023-09-25 09:40:07 +0200 | [diff] [blame] | 250 | from(consolidatedLicense) |
Morten Krogh-Jespersen | 7096e54 | 2023-08-18 08:09:19 +0200 | [diff] [blame] | 251 | exclude("**/module-info.class") |
| 252 | exclude("**/*.kotlin_metadata") |
| 253 | exclude("META-INF/*.kotlin_module") |
| 254 | exclude("META-INF/com.android.tools/**") |
| 255 | exclude("META-INF/LICENSE*") |
| 256 | exclude("META-INF/MANIFEST.MF") |
| 257 | exclude("META-INF/maven/**") |
| 258 | exclude("META-INF/proguard/**") |
Morten Krogh-Jespersen | 7096e54 | 2023-08-18 08:09:19 +0200 | [diff] [blame] | 259 | exclude("META-INF/versions/**") |
Morten Krogh-Jespersen | 782e466 | 2023-09-11 16:24:59 +0200 | [diff] [blame] | 260 | exclude("META-INF/services/kotlin.reflect.**") |
Morten Krogh-Jespersen | 81d8bb6 | 2023-08-18 15:30:38 +0200 | [diff] [blame] | 261 | exclude("**/*.xml") |
| 262 | exclude("com/android/version.properties") |
Morten Krogh-Jespersen | 7096e54 | 2023-08-18 08:09:19 +0200 | [diff] [blame] | 263 | exclude("NOTICE") |
| 264 | exclude("README.md") |
Morten Krogh-Jespersen | 81d8bb6 | 2023-08-18 15:30:38 +0200 | [diff] [blame] | 265 | exclude("javax/annotation/**") |
| 266 | exclude("wireless/**") |
Morten Krogh-Jespersen | d1a1185 | 2023-06-14 14:48:44 +0200 | [diff] [blame] | 267 | duplicatesStrategy = DuplicatesStrategy.EXCLUDE |
| 268 | archiveFileName.set("deps.jar") |
| 269 | } |
| 270 | |
Rico Wind | d0a656e | 2023-09-25 09:40:07 +0200 | [diff] [blame] | 271 | |
| 272 | val swissArmyKnifeWithoutLicense by registering(Zip::class) { |
Morten Krogh-Jespersen | d1a1185 | 2023-06-14 14:48:44 +0200 | [diff] [blame] | 273 | dependsOn(swissArmyKnife) |
Rico Wind | d0a656e | 2023-09-25 09:40:07 +0200 | [diff] [blame] | 274 | from(swissArmyKnife.get().outputs.files.map(::zipTree)) |
| 275 | exclude("LICENSE") |
| 276 | archiveFileName.set("swiss-army-no-license.jar") |
| 277 | } |
| 278 | |
| 279 | val r8WithRelocatedDeps by registering(Exec::class) { |
Morten Krogh-Jespersen | d1a1185 | 2023-06-14 14:48:44 +0200 | [diff] [blame] | 280 | dependsOn(depsJar) |
Rico Wind | d0a656e | 2023-09-25 09:40:07 +0200 | [diff] [blame] | 281 | dependsOn(swissArmyKnifeWithoutLicense) |
| 282 | val swissArmy = swissArmyKnifeWithoutLicense.get().outputs.getFiles().getSingleFile() |
Morten Krogh-Jespersen | d1a1185 | 2023-06-14 14:48:44 +0200 | [diff] [blame] | 283 | val deps = depsJar.get().outputs.files.getSingleFile() |
| 284 | inputs.files(listOf(swissArmy, deps)) |
Rico Wind | b267e5d | 2023-09-14 13:14:14 +0200 | [diff] [blame] | 285 | val output = getRoot().resolveAll("build", "libs", "r8.jar") |
Morten Krogh-Jespersen | d1a1185 | 2023-06-14 14:48:44 +0200 | [diff] [blame] | 286 | outputs.file(output) |
| 287 | commandLine = baseCompilerCommandLine( |
| 288 | swissArmy, |
| 289 | deps, |
| 290 | "relocator", |
| 291 | listOf("--input", |
| 292 | "$swissArmy", |
| 293 | "--input", |
| 294 | "$deps", |
| 295 | "--output", |
| 296 | "$output", |
Morten Krogh-Jespersen | 74215b4 | 2023-08-25 09:55:56 +0200 | [diff] [blame] | 297 | // Add identity mapping to enforce no relocation of things already in package |
| 298 | // com.android.tools.r8. |
Morten Krogh-Jespersen | d1a1185 | 2023-06-14 14:48:44 +0200 | [diff] [blame] | 299 | "--map", |
Morten Krogh-Jespersen | 74215b4 | 2023-08-25 09:55:56 +0200 | [diff] [blame] | 300 | "com.android.tools.r8.**->com.android.tools.r8", |
Ian Zerny | 0538c07 | 2024-02-20 10:24:06 +0100 | [diff] [blame] | 301 | // Add identify for the public annotation surface of keepanno |
| 302 | "--map", |
| 303 | "com.android.tools.r8.keepanno.annotations.**->com.android.tools.r8.keepanno.annotations", |
| 304 | // Explicitly move all other keepanno utilities. |
| 305 | "--map", |
| 306 | "com.android.tools.r8.keepanno.**->com.android.tools.r8.relocated.keepanno", |
Rico Wind | ed6c1cc | 2023-08-08 08:39:15 +0200 | [diff] [blame] | 307 | "--map", |
Morten Krogh-Jespersen | 74215b4 | 2023-08-25 09:55:56 +0200 | [diff] [blame] | 308 | "com.android.**->com.android.tools.r8.com.android", |
Morten Krogh-Jespersen | 81d8bb6 | 2023-08-18 15:30:38 +0200 | [diff] [blame] | 309 | "--map", |
Morten Krogh-Jespersen | 74215b4 | 2023-08-25 09:55:56 +0200 | [diff] [blame] | 310 | "com.android.build.shrinker.**->com.android.tools.r8.resourceshrinker", |
Morten Krogh-Jespersen | d1a1185 | 2023-06-14 14:48:44 +0200 | [diff] [blame] | 311 | "--map", |
Morten Krogh-Jespersen | 74215b4 | 2023-08-25 09:55:56 +0200 | [diff] [blame] | 312 | "com.google.common.**->com.android.tools.r8.com.google.common", |
Rico Wind | ed6c1cc | 2023-08-08 08:39:15 +0200 | [diff] [blame] | 313 | "--map", |
Morten Krogh-Jespersen | 74215b4 | 2023-08-25 09:55:56 +0200 | [diff] [blame] | 314 | "com.google.gson.**->com.android.tools.r8.com.google.gson", |
Morten Krogh-Jespersen | d1a1185 | 2023-06-14 14:48:44 +0200 | [diff] [blame] | 315 | "--map", |
Morten Krogh-Jespersen | 74215b4 | 2023-08-25 09:55:56 +0200 | [diff] [blame] | 316 | "com.google.thirdparty.**->com.android.tools.r8.com.google.thirdparty", |
Morten Krogh-Jespersen | d1a1185 | 2023-06-14 14:48:44 +0200 | [diff] [blame] | 317 | "--map", |
Morten Krogh-Jespersen | 74215b4 | 2023-08-25 09:55:56 +0200 | [diff] [blame] | 318 | "org.objectweb.asm.**->com.android.tools.r8.org.objectweb.asm", |
Morten Krogh-Jespersen | d1a1185 | 2023-06-14 14:48:44 +0200 | [diff] [blame] | 319 | "--map", |
Morten Krogh-Jespersen | 74215b4 | 2023-08-25 09:55:56 +0200 | [diff] [blame] | 320 | "it.unimi.dsi.fastutil.**->com.android.tools.r8.it.unimi.dsi.fastutil", |
Morten Krogh-Jespersen | d1a1185 | 2023-06-14 14:48:44 +0200 | [diff] [blame] | 321 | "--map", |
Morten Krogh-Jespersen | 74215b4 | 2023-08-25 09:55:56 +0200 | [diff] [blame] | 322 | "kotlin.**->com.android.tools.r8.jetbrains.kotlin", |
Morten Krogh-Jespersen | d1a1185 | 2023-06-14 14:48:44 +0200 | [diff] [blame] | 323 | "--map", |
Morten Krogh-Jespersen | 74215b4 | 2023-08-25 09:55:56 +0200 | [diff] [blame] | 324 | "kotlinx.**->com.android.tools.r8.jetbrains.kotlinx", |
Morten Krogh-Jespersen | d1a1185 | 2023-06-14 14:48:44 +0200 | [diff] [blame] | 325 | "--map", |
Morten Krogh-Jespersen | 74215b4 | 2023-08-25 09:55:56 +0200 | [diff] [blame] | 326 | "org.jetbrains.**->com.android.tools.r8.org.jetbrains", |
Morten Krogh-Jespersen | d1a1185 | 2023-06-14 14:48:44 +0200 | [diff] [blame] | 327 | "--map", |
Morten Krogh-Jespersen | 74215b4 | 2023-08-25 09:55:56 +0200 | [diff] [blame] | 328 | "org.intellij.**->com.android.tools.r8.org.intellij", |
Morten Krogh-Jespersen | d1a1185 | 2023-06-14 14:48:44 +0200 | [diff] [blame] | 329 | "--map", |
Morten Krogh-Jespersen | 74215b4 | 2023-08-25 09:55:56 +0200 | [diff] [blame] | 330 | "org.checkerframework.**->com.android.tools.r8.org.checkerframework", |
Morten Krogh-Jespersen | d1a1185 | 2023-06-14 14:48:44 +0200 | [diff] [blame] | 331 | "--map", |
Morten Krogh-Jespersen | 74215b4 | 2023-08-25 09:55:56 +0200 | [diff] [blame] | 332 | "com.google.j2objc.**->com.android.tools.r8.com.google.j2objc", |
Morten Krogh-Jespersen | 81d8bb6 | 2023-08-18 15:30:38 +0200 | [diff] [blame] | 333 | "--map", |
Morten Krogh-Jespersen | 74215b4 | 2023-08-25 09:55:56 +0200 | [diff] [blame] | 334 | "com.google.protobuf.**->com.android.tools.r8.com.google.protobuf", |
Morten Krogh-Jespersen | 81d8bb6 | 2023-08-18 15:30:38 +0200 | [diff] [blame] | 335 | "--map", |
Rico Wind | 17d7815 | 2023-12-04 12:23:02 +0100 | [diff] [blame] | 336 | "android.aapt.**->com.android.tools.r8.android.aapt" |
Morten Krogh-Jespersen | d1a1185 | 2023-06-14 14:48:44 +0200 | [diff] [blame] | 337 | )) |
| 338 | } |
| 339 | } |
| 340 | |
Rico Wind | 51853ee | 2023-09-06 11:26:42 +0200 | [diff] [blame] | 341 | tasks.withType<KotlinCompile> { |
| 342 | enabled = false |
| 343 | } |
| 344 | |
Morten Krogh-Jespersen | 5a37de8 | 2023-03-02 01:42:28 +0100 | [diff] [blame] | 345 | tasks.withType<JavaCompile> { |
Morten Krogh-Jespersen | ad74d68 | 2023-09-14 15:55:18 +0200 | [diff] [blame] | 346 | dependsOn(gradle.includedBuild("shared").task(":downloadDeps")) |
Morten Krogh-Jespersen | 5a37de8 | 2023-03-02 01:42:28 +0100 | [diff] [blame] | 347 | println("NOTE: Running with JDK: " + org.gradle.internal.jvm.Jvm.current().javaHome) |
Ian Zerny | 8efb7cc | 2023-03-02 16:48:54 +0100 | [diff] [blame] | 348 | |
Christoffer Quist Adamsen | d139da0 | 2023-09-05 19:05:13 +0200 | [diff] [blame] | 349 | // Enable error prone for D8/R8 main sources. |
Christoffer Quist Adamsen | 08da5e5 | 2023-09-22 09:37:37 +0200 | [diff] [blame] | 350 | options.errorprone.isEnabled.set(!project.hasProperty("disable_errorprone")) |
Ian Zerny | 8efb7cc | 2023-03-02 16:48:54 +0100 | [diff] [blame] | 351 | |
Christoffer Quist Adamsen | d139da0 | 2023-09-05 19:05:13 +0200 | [diff] [blame] | 352 | // Make all warnings errors. Warnings that we have chosen not to fix (or suppress) are disabled |
| 353 | // outright below. |
| 354 | options.compilerArgs.add("-Werror") |
| 355 | |
| 356 | // Increase number of reported errors to 1000 (default is 100). |
| 357 | options.compilerArgs.add("-Xmaxerrs") |
| 358 | options.compilerArgs.add("1000") |
| 359 | |
Ian Zerny | 8efb7cc | 2023-03-02 16:48:54 +0100 | [diff] [blame] | 360 | // Non-default / Experimental checks - explicitly enforced. |
| 361 | options.errorprone.error("RemoveUnusedImports") |
| 362 | options.errorprone.error("InconsistentOverloads") |
| 363 | options.errorprone.error("MissingDefault") |
| 364 | options.errorprone.error("MultipleTopLevelClasses") |
| 365 | options.errorprone.error("NarrowingCompoundAssignment") |
| 366 | |
Ian Zerny | 8efb7cc | 2023-03-02 16:48:54 +0100 | [diff] [blame] | 367 | // Warnings that cause unwanted edits (e.g., inability to write informative asserts). |
| 368 | options.errorprone.disable("AlreadyChecked") |
| 369 | |
| 370 | // JavaDoc related warnings. Would be nice to resolve but of no real consequence. |
| 371 | options.errorprone.disable("InvalidLink") |
| 372 | options.errorprone.disable("InvalidBlockTag") |
| 373 | options.errorprone.disable("InvalidInlineTag") |
| 374 | options.errorprone.disable("EmptyBlockTag") |
| 375 | options.errorprone.disable("MissingSummary") |
| 376 | options.errorprone.disable("UnrecognisedJavadocTag") |
| 377 | options.errorprone.disable("AlmostJavadoc") |
| 378 | |
| 379 | // Moving away from identity and canonical items is not planned. |
Ian Zerny | 8efb7cc | 2023-03-02 16:48:54 +0100 | [diff] [blame] | 380 | options.errorprone.disable("IdentityHashMapUsage") |
Morten Krogh-Jespersen | 5a37de8 | 2023-03-02 01:42:28 +0100 | [diff] [blame] | 381 | } |