From 705968d0438f499dbab7a28393edc7675e73a711 Mon Sep 17 00:00:00 2001 From: Cole Faust Date: Wed, 14 Dec 2022 11:32:05 -0800 Subject: [PATCH] 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 --- android/bazel_handler.go | 30 ++++++++++++++++++++++++++---- bp2build/conversion.go | 4 ++++ bp2build/conversion_test.go | 8 ++++++++ 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/android/bazel_handler.go b/android/bazel_handler.go index 0529f237d..0b768a7ec 100644 --- a/android/bazel_handler.go +++ b/android/bazel_handler.go @@ -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, } diff --git a/bp2build/conversion.go b/bp2build/conversion.go index 6eb93bcd5..e15dd5925 100644 --- a/bp2build/conversion.go +++ b/bp2build/conversion.go @@ -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 } diff --git a/bp2build/conversion_test.go b/bp2build/conversion_test.go index 8de2f83c0..dfc7f0b33 100644 --- a/bp2build/conversion_test.go +++ b/bp2build/conversion_test.go @@ -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) {