diff options
Diffstat (limited to 'ui/build/config.go')
| -rw-r--r-- | ui/build/config.go | 50 |
1 files changed, 29 insertions, 21 deletions
diff --git a/ui/build/config.go b/ui/build/config.go index 7148c177..b3c11900 100644 --- a/ui/build/config.go +++ b/ui/build/config.go @@ -62,6 +62,8 @@ type configImpl struct { const srcDirFileCheck = "build/soong/root.bp" +var buildFiles = []string{"Android.mk", "Android.bp"} + type BuildAction uint const ( @@ -345,6 +347,20 @@ func convertToTarget(dir string, targetNamePrefix string) string { return targetNamePrefix + strings.ReplaceAll(dir, "/", "-") } +// hasBuildFile returns true if dir contains an Android build file. +func hasBuildFile(ctx Context, dir string) bool { + for _, buildFile := range buildFiles { + _, err := os.Stat(filepath.Join(dir, buildFile)) + if err == nil { + return true + } + if !os.IsNotExist(err) { + ctx.Fatalf("Error retrieving the build file stats: %v", err) + } + } + return false +} + // findBuildFile finds a build file (makefile or blueprint file) by looking at dir first. If not // found, go up one level and repeat again until one is found and the path of that build file // relative to the root directory of the source tree is returned. The returned filename of build @@ -356,15 +372,8 @@ func findBuildFile(ctx Context, dir string) string { } for ; dir != "."; dir = filepath.Dir(dir) { - for _, buildFile := range []string{"Android.bp", "Android.mk"} { - _, err := os.Stat(filepath.Join(dir, buildFile)) - if err == nil { - // Returning the filename Android.mk as it might be used for ONE_SHOT_MAKEFILE variable. - return filepath.Join(dir, "Android.mk") - } - if !os.IsNotExist(err) { - ctx.Fatalf("Error retrieving the build file stats: %v", err) - } + if hasBuildFile(ctx, dir) { + return filepath.Join(dir, "Android.mk") } } @@ -429,24 +438,23 @@ func getTargetsFromDirs(ctx Context, relDir string, dirs []string, targetNamePre } } - buildFile := findBuildFile(ctx, dir) - if buildFile == "" { - ctx.Fatalf("Build file not found for %s directory", dir) - } - buildFileDir := filepath.Dir(buildFile) - - // If there are specified targets, find the build file in the directory. If dir does not - // contain the build file, bail out as it is required for one shot build. If there are no - // target specified, build all the modules in dir (or the closest one in the dir path). + // If there are specified targets to build in dir, an android build file must exist for the one + // shot build. For the non-targets case, find the appropriate build file and build all the + // modules in dir (or the closest one in the dir path). if len(newTargets) > 0 { - if buildFileDir != dir { + if !hasBuildFile(ctx, dir) { ctx.Fatalf("Couldn't locate a build file from %s directory", dir) } + buildFiles = append(buildFiles, filepath.Join(dir, "Android.mk")) } else { - newTargets = []string{convertToTarget(buildFileDir, targetNamePrefix)} + buildFile := findBuildFile(ctx, dir) + if buildFile == "" { + ctx.Fatalf("Build file not found for %s directory", dir) + } + newTargets = []string{convertToTarget(filepath.Dir(buildFile), targetNamePrefix)} + buildFiles = append(buildFiles, buildFile) } - buildFiles = append(buildFiles, buildFile) targets = append(targets, newTargets...) } |
