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

Commit 705968d0 authored by Cole Faust's avatar Cole Faust
Browse files

Allow exporting bazel mixed build allowlists to simple text files

So that they the allowlists can be read from build_mainline_modules_bundles.sh.

Bug: 262302253
Test: m out/soong/bazel_prod_mixed_builds_enabled_list.txt out/soong/bazel_staging_mixed_builds_enabled_list.txt && cat out/soong/bazel_prod_mixed_builds_enabled_list.txt && echo && cat out/soong/bazel_staging_mixed_builds_enabled_list.txt
Change-Id: Id5f89ebb651a52dc5368681a20d6183703e05bd4
parent 841fc797
Loading
Loading
Loading
Loading
+26 −4
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import (
	"path"
	"path/filepath"
	"runtime"
	"sort"
	"strings"
	"sync"

@@ -374,7 +375,7 @@ func (m noopBazelContext) AqueryDepsets() []bazel.AqueryDepset {
	return []bazel.AqueryDepset{}
}

func NewBazelContext(c *config) (BazelContext, error) {
func GetBazelEnabledAndDisabledModules(buildMode SoongBuildMode, forceEnabled map[string]struct{}) (map[string]bool, map[string]bool) {
	disabledModules := map[string]bool{}
	enabledModules := map[string]bool{}
	addToStringSet := func(set map[string]bool, items []string) {
@@ -383,17 +384,17 @@ func NewBazelContext(c *config) (BazelContext, error) {
		}
	}

	switch c.BuildMode {
	switch buildMode {
	case BazelProdMode:
		addToStringSet(enabledModules, allowlists.ProdMixedBuildsEnabledList)
		for enabledAdHocModule := range c.BazelModulesForceEnabledByFlag() {
		for enabledAdHocModule := range forceEnabled {
			enabledModules[enabledAdHocModule] = true
		}
	case BazelStagingMode:
		// Staging mode includes all prod modules plus all staging modules.
		addToStringSet(enabledModules, allowlists.ProdMixedBuildsEnabledList)
		addToStringSet(enabledModules, allowlists.StagingMixedBuildsEnabledList)
		for enabledAdHocModule := range c.BazelModulesForceEnabledByFlag() {
		for enabledAdHocModule := range forceEnabled {
			enabledModules[enabledAdHocModule] = true
		}
	case BazelDevMode:
@@ -405,9 +406,30 @@ func NewBazelContext(c *config) (BazelContext, error) {
		}
		addToStringSet(disabledModules, allowlists.MixedBuildsDisabledList)
	default:
		panic("Expected BazelProdMode, BazelStagingMode, or BazelDevMode")
	}
	return enabledModules, disabledModules
}

func GetBazelEnabledModules(buildMode SoongBuildMode) []string {
	enabledModules, disabledModules := GetBazelEnabledAndDisabledModules(buildMode, nil)
	enabledList := make([]string, 0, len(enabledModules))
	for module := range enabledModules {
		if !disabledModules[module] {
			enabledList = append(enabledList, module)
		}
	}
	sort.Strings(enabledList)
	return enabledList
}

func NewBazelContext(c *config) (BazelContext, error) {
	if c.BuildMode != BazelProdMode && c.BuildMode != BazelStagingMode && c.BuildMode != BazelDevMode {
		return noopBazelContext{}, nil
	}

	enabledModules, disabledModules := GetBazelEnabledAndDisabledModules(c.BuildMode, c.BazelModulesForceEnabledByFlag())

	paths := bazelPaths{
		soongOutDir: c.soongOutDir,
	}
+4 −0
Original line number Diff line number Diff line
@@ -55,6 +55,10 @@ func CreateSoongInjectionFiles(cfg android.Config, metrics CodegenMetrics) []Baz
	files = append(files, newFile("api_levels", "api_levels.json", string(apiLevelsContent)))
	files = append(files, newFile("api_levels", "api_levels.bzl", android.StarlarkApiLevelConfigs(cfg)))

	// TODO(b/262781701): Create an alternate soong_build entrypoint for writing out these files only when requested
	files = append(files, newFile("allowlists", "mixed_build_prod_allowlist.txt", strings.Join(android.GetBazelEnabledModules(android.BazelProdMode), "\n")+"\n"))
	files = append(files, newFile("allowlists", "mixed_build_staging_allowlist.txt", strings.Join(android.GetBazelEnabledModules(android.BazelStagingMode), "\n")+"\n"))

	return files
}

+8 −0
Original line number Diff line number Diff line
@@ -147,6 +147,14 @@ func TestCreateBazelFiles_Bp2Build_CreatesDefaultFiles(t *testing.T) {
			dir:      "api_levels",
			basename: "api_levels.bzl",
		},
		{
			dir:      "allowlists",
			basename: "mixed_build_prod_allowlist.txt",
		},
		{
			dir:      "allowlists",
			basename: "mixed_build_staging_allowlist.txt",
		},
	}

	if len(files) != len(expectedFilePaths) {