Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7ad7e034 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "soong_ui: Do not find a build file if targets are specified."

parents a0eb5a89 9450d0b2
Loading
Loading
Loading
Loading
+29 −21
Original line number Diff line number Diff line
@@ -61,6 +61,8 @@ type configImpl struct {

const srcDirFileCheck = "build/soong/root.bp"

var buildFiles = []string{"Android.mk", "Android.bp"}

type BuildAction uint

const (
@@ -344,6 +346,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
@@ -355,16 +371,9 @@ 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.
		if hasBuildFile(ctx, dir) {
			return filepath.Join(dir, "Android.mk")
		}
			if !os.IsNotExist(err) {
				ctx.Fatalf("Error retrieving the build file stats: %v", err)
			}
		}
	}

	return ""
@@ -428,24 +437,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)
		}

		targets = append(targets, newTargets...)
	}

+1 −1
Original line number Diff line number Diff line
@@ -441,7 +441,7 @@ func TestConfigGetTargets(t *testing.T) {
		buildFiles:  []string{},
		dirs:        []string{"1/2/3:t1"},
		curDir:      "0",
		errStr:      "Build file not found for 0/1/2/3 directory",
		errStr:      "Couldn't locate a build file from 0/1/2/3 directory",
	}, {
		description: "one target dir specified, one target specified, build file not in target dir",
		dirsInTrees: []string{"0/1/2/3"},