| import org.jetbrains.kotlin.gradle.tasks.KotlinCompile |
| |
| buildscript { |
| def supportRootFolder = project.projectDir.getParentFile() |
| repositories { |
| maven { |
| url "${supportRootFolder}/../../prebuilts/androidx/external" |
| } |
| } |
| |
| apply from: "build_dependencies.gradle" |
| |
| dependencies { |
| classpath build_libs.kotlin.gradle_plugin |
| } |
| |
| configurations.classpath.resolutionStrategy { |
| eachDependency { details -> |
| if (details.requested.group == 'org.jetbrains.kotlin') { |
| details.useVersion build_versions.kotlin |
| } |
| } |
| } |
| } |
| |
| apply from: "out.gradle" |
| init.chooseOutDir() |
| |
| ext.supportRootFolder = project.projectDir.getParentFile() |
| apply from: "local_dokka.gradle" |
| apply from: 'repos.gradle' |
| apply from: "build_dependencies.gradle" |
| apply plugin: "kotlin" |
| apply from: "kotlin-dsl-dependency.gradle" |
| |
| allprojects { |
| repos.addMavenRepositories(repositories) |
| |
| tasks.withType(KotlinCompile).configureEach { |
| kotlinOptions { |
| jvmTarget = "1.8" |
| freeCompilerArgs += ["-Werror", "-Xskip-runtime-version-check"] |
| } |
| } |
| } |
| |
| configurations { |
| // Dependencies added to these configurations get copied into the corresponding configuration |
| // (cacheableApi gets copied into api, etc). |
| // Because we cache the resolutions of these configurations, performance is faster when |
| // artifacts are put into these configurations than when those artifacts are put into their |
| // corresponding configuration. |
| cacheableApi |
| cacheableImplementation { |
| extendsFrom(project.configurations.cacheableApi) |
| } |
| cacheableRuntime { |
| extendsFrom(project.configurations.cacheableImplementation) |
| } |
| } |
| |
| dependencies { |
| cacheableApi build_libs.agp |
| cacheableImplementation build_libs.dex_member_list |
| cacheableApi build_libs.kotlin.gradle_plugin |
| cacheableImplementation build_libs.kotlinpoet |
| cacheableImplementation gradleApi() |
| cacheableApi build_libs.dokka_gradle |
| // needed by inspection plugin |
| cacheableImplementation "com.google.protobuf:protobuf-gradle-plugin:0.8.8" |
| cacheableImplementation "org.anarres.jarjar:jarjar-gradle:1.0.1" |
| // dependencies that aren't used by buildSrc directly but that we resolve here so that the |
| // root project doesn't need to re-resolve them and their dependencies on every build |
| cacheableRuntime "com.google.dagger:hilt-android-gradle-plugin:DEV-SNAPSHOT" |
| // dependencies whose resolutions we don't need to cache |
| compileOnly(findGradleKotlinDsl()) // Only one file in this configuration, no need to cache it |
| implementation project("jetpad-integration") // Doesn't have a .pom, so not slow to load |
| } |
| |
| // Saves configuration into destFile |
| // Each line of destFile will be the absolute filepath of one of the fies in configuration |
| def saveConfigurationResolution(configuration, destFile) { |
| def resolvedConfiguration = configuration.resolvedConfiguration |
| def files = resolvedConfiguration.files |
| def paths = files.collect { f -> f.toString() } |
| def serialized = paths.join("\n") |
| destFile.text = serialized |
| } |
| |
| def parseConfigurationResolution(savedFile, destConfiguration) { |
| def savedText = savedFile.text |
| def filenames = savedText.split("\n") |
| def configurationName = destConfiguration.name |
| for (filename in filenames) { |
| project.dependencies.add(configurationName, project.files(filename)) |
| } |
| } |
| |
| def implementationDepsFile = new File(project.buildDir, "impl-deps.txt") |
| def apiDepsFile = new File(project.buildDir, "api-deps.txt") |
| def runtimeDepsFile = new File(project.buildDir, "runtime-deps.txt") |
| |
| task resolveCompilationDeps { |
| inputs.file(project.file("build.gradle")) |
| inputs.property("build_libs", build_libs) |
| outputs.file(implementationDepsFile) |
| outputs.file(apiDepsFile) |
| outputs.file(runtimeDepsFile) |
| doLast { |
| saveConfigurationResolution(project.configurations.cacheableImplementation, implementationDepsFile) |
| saveConfigurationResolution(project.configurations.cacheableApi, apiDepsFile) |
| saveConfigurationResolution(project.configurations.cacheableRuntime, runtimeDepsFile) |
| } |
| |
| } |
| |
| task parseCompilationDeps { |
| dependsOn(resolveCompilationDeps) |
| doLast { |
| parseConfigurationResolution(runtimeDepsFile, configurations.runtime) |
| parseConfigurationResolution(apiDepsFile, configurations.api) |
| parseConfigurationResolution(implementationDepsFile, configurations.implementation) |
| } |
| } |
| |
| apply plugin: "java-gradle-plugin" |
| |
| tasks["compileKotlin"].dependsOn(parseCompilationDeps) |
| |
| sourceSets { |
| main.java.srcDirs += "${supportRootFolder}/benchmark/gradle-plugin/src/main/kotlin" |
| main.resources.srcDirs += "${supportRootFolder}/benchmark/gradle-plugin/src/main/resources" |
| |
| main.java.srcDirs += "${supportRootFolder}/inspection/inspection-gradle-plugin/src/main/kotlin" |
| main.resources.srcDirs += "${supportRootFolder}/inspection/inspection-gradle-plugin/src/main" + |
| "/resources" |
| |
| main.java.srcDirs += "${supportRootFolder}/ui/ui-material/icons/generator/src/main/kotlin" |
| } |
| |
| gradlePlugin { |
| plugins { |
| benchmark { |
| id = 'androidx.benchmark' |
| implementationClass = 'androidx.benchmark.gradle.BenchmarkPlugin' |
| } |
| inspection { |
| id = 'androidx.inspection' |
| implementationClass = 'androidx.inspection.gradle.InspectionPlugin' |
| } |
| } |
| } |