Add dependency on dexpreopt.config to soong_build doc generation. am: ebb0b574c8 am: 3c3ad6a444 am: d249069c7c
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1483797
Change-Id: Iad0fb45b26cb98fcb2143826df67d463c76b0d8a
diff --git a/android/config.go b/android/config.go
index a499057..e87a4ac 100644
--- a/android/config.go
+++ b/android/config.go
@@ -974,13 +974,21 @@
return c.productVariables.ModulesLoadedByPrivilegedModules
}
-func (c *config) DexpreoptGlobalConfig(ctx PathContext) ([]byte, error) {
+func (c *config) DexpreoptGlobalConfigPath(ctx PathContext) OptionalPath {
if c.productVariables.DexpreoptGlobalConfig == nil {
+ return OptionalPathForPath(nil)
+ }
+ return OptionalPathForPath(
+ pathForBuildToolDep(ctx, *c.productVariables.DexpreoptGlobalConfig))
+}
+
+func (c *config) DexpreoptGlobalConfig(ctx PathContext) ([]byte, error) {
+ path := c.DexpreoptGlobalConfigPath(ctx)
+ if !path.Valid() {
return nil, nil
}
- path := absolutePath(*c.productVariables.DexpreoptGlobalConfig)
- ctx.AddNinjaFileDeps(path)
- return ioutil.ReadFile(path)
+ ctx.AddNinjaFileDeps(path.String())
+ return ioutil.ReadFile(absolutePath(path.String()))
}
func (c *config) FrameworksBaseDirExists(ctx PathContext) bool {
diff --git a/android/writedocs.go b/android/writedocs.go
index 4eb15e6..91c2318 100644
--- a/android/writedocs.go
+++ b/android/writedocs.go
@@ -48,6 +48,13 @@
deps = append(deps, pathForBuildToolDep(ctx, ctx.Config().moduleListFile))
deps = append(deps, pathForBuildToolDep(ctx, ctx.Config().ProductVariablesFileName))
+ // The dexpreopt configuration may not exist, but if it does, it's a dependency
+ // of soong_build.
+ dexpreoptConfigPath := ctx.Config().DexpreoptGlobalConfigPath(ctx)
+ if dexpreoptConfigPath.Valid() {
+ deps = append(deps, dexpreoptConfigPath.Path())
+ }
+
// Generate build system docs for the primary builder. Generating docs reads the source
// files used to build the primary builder, but that dependency will be picked up through
// the dependency on the primary builder itself. There are no dependencies on the
diff --git a/ui/build/test_build.go b/ui/build/test_build.go
index 83b3807..3164680 100644
--- a/ui/build/test_build.go
+++ b/ui/build/test_build.go
@@ -68,6 +68,12 @@
miniBootstrapDir := filepath.Join(outDir, "soong", ".minibootstrap")
modulePathsDir := filepath.Join(outDir, ".module_paths")
variablesFilePath := filepath.Join(outDir, "soong", "soong.variables")
+ // dexpreopt.config is an input to the soong_docs action, which runs the
+ // soong_build primary builder. However, this file is created from $(shell)
+ // invocation at Kati parse time, so it's not an explicit output of any
+ // Ninja action, but it is present during the build itself and can be
+ // treated as an source file.
+ dexpreoptConfigFilePath := filepath.Join(outDir, "soong", "dexpreopt.config")
danglingRules := make(map[string]bool)
@@ -81,7 +87,8 @@
if strings.HasPrefix(line, bootstrapDir) ||
strings.HasPrefix(line, miniBootstrapDir) ||
strings.HasPrefix(line, modulePathsDir) ||
- line == variablesFilePath {
+ line == variablesFilePath ||
+ line == dexpreoptConfigFilePath {
// Leaf node is in one of Soong's bootstrap directories, which do not have
// full build rules in the primary build.ninja file.
continue