// 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.

rootProject.name = "d8-r8"

// third_party/dependencies and third_party/dependencies_plugin
// is downloaded and populated by running 'tools/gradle.py'.
pluginManagement {
  repositories {
    maven { url = uri("third_party/dependencies") }
    maven { url = uri("third_party/dependencies_plugin") }
  }
  includeBuild(rootProject.projectDir.resolve("d8_r8/commonBuildSrc"))
}

dependencyResolutionManagement { repositories { maven { url = uri("third_party/dependencies") } } }

include(":shared")

project(":shared").projectDir = file("d8_r8/shared")

include(":assistant")

project(":assistant").projectDir = file("d8_r8/assistant")

include(":blastradius")

project(":blastradius").projectDir = file("d8_r8/blastradius")

include(":keepanno")

project(":keepanno").projectDir = file("d8_r8/keepanno")

include(":libanalyzer")

project(":libanalyzer").projectDir = file("d8_r8/libanalyzer")

include(":resourceshrinker")

project(":resourceshrinker").projectDir = file("d8_r8/resourceshrinker")

include(":main")

project(":main").projectDir = file("d8_r8/main")

include(":utils")

project(":utils").projectDir = file("d8_r8/utils")

include(":dist")

project(":dist").projectDir = file("d8_r8/dist")

include(":library_desugar")

project(":library_desugar").projectDir = file("d8_r8/library_desugar")

include(":testbase")

project(":testbase").projectDir = file("d8_r8/test_modules/testbase")

include(":tests_bootstrap")

project(":tests_bootstrap").projectDir = file("d8_r8/test_modules/tests_bootstrap")

include(":tests_java_8")

project(":tests_java_8").projectDir = file("d8_r8/test_modules/tests_java_8")

include(":tests_java_9")

project(":tests_java_9").projectDir = file("d8_r8/test_modules/tests_java_9")

include(":tests_java_11")

project(":tests_java_11").projectDir = file("d8_r8/test_modules/tests_java_11")

include(":tests_java_17")

project(":tests_java_17").projectDir = file("d8_r8/test_modules/tests_java_17")

include(":tests_java_21")

project(":tests_java_21").projectDir = file("d8_r8/test_modules/tests_java_21")

include(":tests_java_25")

project(":tests_java_25").projectDir = file("d8_r8/test_modules/tests_java_25")

include(":test")

project(":test").projectDir = file("d8_r8/test")
