diff options
author | 2023-03-16 19:15:19 +0000 | |
---|---|---|
committer | 2023-04-14 02:17:54 +0000 | |
commit | 9c094ca153a7ff41fbe96e6fe8c0e9c9878ed810 (patch) | |
tree | a507bdbb5722107da5dc974ffab8234facb06555 | |
parent | 3d1b6964ecbc7114bf67dfae175d97dd450e55ae (diff) |
Fix issue where bazel-force-enabled-modules aren't actually analyzed.
Bug: 273910287
Test: run mixed_mode_test.sh
Change-Id: I309c423b6e7f505ad1db0d9327e7de6b8298dfe9
-rw-r--r-- | android/bazel_handler.go | 6 | ||||
-rw-r--r-- | android/config.go | 10 | ||||
-rw-r--r-- | android/test_config.go | 1 | ||||
-rw-r--r-- | bp2build/build_conversion.go | 3 | ||||
-rw-r--r-- | bp2build/build_conversion_test.go | 23 | ||||
-rwxr-xr-x | tests/mixed_mode_test.sh | 33 |
6 files changed, 71 insertions, 5 deletions
diff --git a/android/bazel_handler.go b/android/bazel_handler.go index 5c429e21d..ade2c496a 100644 --- a/android/bazel_handler.go +++ b/android/bazel_handler.go @@ -84,8 +84,12 @@ func RegisterMixedBuildsMutator(ctx RegistrationContext) { func mixedBuildsPrepareMutator(ctx BottomUpMutatorContext) { if m := ctx.Module(); m.Enabled() { if mixedBuildMod, ok := m.(MixedBuildBuildable); ok { - if mixedBuildMod.IsMixedBuildSupported(ctx) && MixedBuildsEnabled(ctx) { + queueMixedBuild := mixedBuildMod.IsMixedBuildSupported(ctx) && MixedBuildsEnabled(ctx) + if queueMixedBuild { mixedBuildMod.QueueBazelCall(ctx) + } else if _, ok := ctx.Config().bazelForceEnabledModules[m.Name()]; ok { + // TODO(b/273910287) - remove this once --ensure_allowlist_integrity is added + ctx.ModuleErrorf("Attempted to force enable an unready module: %s. Did you forget to Bp2BuildDefaultTrue its directory?\n", m.Name()) } } } diff --git a/android/config.go b/android/config.go index 2904581ea..032172d6e 100644 --- a/android/config.go +++ b/android/config.go @@ -592,12 +592,11 @@ func NewConfig(cmdArgs CmdArgs, availableEnv map[string]string) (Config, error) setBazelMode(cmdArgs.BazelMode, "--bazel-mode", BazelProdMode) setBazelMode(cmdArgs.BazelModeStaging, "--bazel-mode-staging", BazelStagingMode) - config.BazelContext, err = NewBazelContext(config) - config.Bp2buildPackageConfig = GetBp2BuildAllowList() - for _, module := range strings.Split(cmdArgs.BazelForceEnabledModules, ",") { config.bazelForceEnabledModules[module] = struct{}{} } + config.BazelContext, err = NewBazelContext(config) + config.Bp2buildPackageConfig = GetBp2BuildAllowList() return Config{config}, err } @@ -1934,3 +1933,8 @@ func (c *config) BuildFromTextStub() bool { func (c *config) SetBuildFromTextStub(b bool) { c.buildFromTextStub = b } +func (c *config) AddForceEnabledModules(forceEnabled []string) { + for _, forceEnabledModule := range forceEnabled { + c.bazelForceEnabledModules[forceEnabledModule] = struct{}{} + } +} diff --git a/android/test_config.go b/android/test_config.go index 07ca33d56..28d9ec403 100644 --- a/android/test_config.go +++ b/android/test_config.go @@ -65,6 +65,7 @@ func TestConfig(buildDir string, env map[string]string, bp string, fs map[string BuildMode: BazelProdMode, mixedBuildDisabledModules: make(map[string]struct{}), mixedBuildEnabledModules: make(map[string]struct{}), + bazelForceEnabledModules: make(map[string]struct{}), } config.deviceConfig = &deviceConfig{ config: config, diff --git a/bp2build/build_conversion.go b/bp2build/build_conversion.go index fde9b6949..b7678a469 100644 --- a/bp2build/build_conversion.go +++ b/bp2build/build_conversion.go @@ -321,6 +321,9 @@ func GenerateBazelTargets(ctx *CodegenContext, generateFilegroups bool) (convers // target, each of a different rule class. metrics.IncrementRuleClassCount(t.ruleClass) } + } else if _, ok := ctx.Config().BazelModulesForceEnabledByFlag()[m.Name()]; ok && m.Name() != "" { + err := fmt.Errorf("Force Enabled Module %s not converted", m.Name()) + errs = append(errs, err) } else { metrics.AddUnconvertedModule(moduleType) return diff --git a/bp2build/build_conversion_test.go b/bp2build/build_conversion_test.go index d31216922..73ee26b60 100644 --- a/bp2build/build_conversion_test.go +++ b/bp2build/build_conversion_test.go @@ -1175,6 +1175,8 @@ func TestAllowlistingBp2buildTargetsWithConfig(t *testing.T) { bp2buildConfig allowlists.Bp2BuildConfig checkDir string fs map[string]string + forceEnabledModules []string + expectedErrorMessages []string }{ { description: "test bp2build config package and subpackages config", @@ -1237,6 +1239,24 @@ filegroup { name: "opt-out-h", bazel_module: { bp2build_available: false } } `, }, }, + { + description: "test force-enabled errors out", + moduleTypeUnderTest: "filegroup", + moduleTypeUnderTestFactory: android.FileGroupFactory, + expectedCount: map[string]int{ + "migrated": 0, + "not_migrated": 0, + }, + bp2buildConfig: allowlists.Bp2BuildConfig{ + "migrated/but_not_really": allowlists.Bp2BuildDefaultFalse, + "not_migrated": allowlists.Bp2BuildDefaultFalse, + }, + fs: map[string]string{ + "migrated/Android.bp": `filegroup { name: "a" }`, + }, + forceEnabledModules: []string{"a"}, + expectedErrorMessages: []string{"Force Enabled Module a not converted"}, + }, } dir := "." @@ -1252,6 +1272,7 @@ filegroup { name: "opt-out-h", bazel_module: { bp2build_available: false } } fs[f] = []byte(content) } config := android.TestConfig(buildDir, nil, "", fs) + config.AddForceEnabledModules(testCase.forceEnabledModules) ctx := android.NewTestContext(config) ctx.RegisterModuleType(testCase.moduleTypeUnderTest, testCase.moduleTypeUnderTestFactory) allowlist := android.NewBp2BuildAllowlist().SetDefaultConfig(testCase.bp2buildConfig) @@ -1268,7 +1289,7 @@ filegroup { name: "opt-out-h", bazel_module: { bp2build_available: false } } // For each directory, test that the expected number of generated targets is correct. for dir, expectedCount := range testCase.expectedCount { bazelTargets, err := generateBazelTargetsForDir(codegenCtx, dir) - android.FailIfErrored(t, err) + android.CheckErrorsAgainstExpectations(t, err, testCase.expectedErrorMessages) if actualCount := len(bazelTargets); actualCount != expectedCount { t.Fatalf( "%s: Expected %d bazel target for %s package, got %d", diff --git a/tests/mixed_mode_test.sh b/tests/mixed_mode_test.sh index 7b3151bfd..05d3a664f 100755 --- a/tests/mixed_mode_test.sh +++ b/tests/mixed_mode_test.sh @@ -63,4 +63,37 @@ EOF fi } +function test_force_enabled_modules { + setup + # b/273910287 - test force enable modules + mkdir -p soong_tests/a/b + cat > soong_tests/a/b/Android.bp <<'EOF' +genrule { + name: "touch-file", + out: ["fake-out.txt"], + cmd: "touch $(out)", + bazel_module: { bp2build_available: true }, +} + +genrule { + name: "unenabled-touch-file", + out: ["fake-out2.txt"], + cmd: "touch $(out)", + bazel_module: { bp2build_available: false }, +} +EOF + run_soong --bazel-mode-staging --bazel-force-enabled-modules=touch-file nothing + local bazel_contained=`grep out/soong/.intermediates/soong_tests/a/b/touch-file/gen/fake-out.txt out/soong/build.ninja` + if [[ $bazel_contained == '' ]]; then + fail "Bazel actions not found for force-enabled module" + fi + + local exit_code=`run_soong --bazel-force-enabled-modules=unenabled-touch-file nothing` + + if [[ $exit_code -ne 1 ]]; then + fail "Expected failure due to force-enabling an unenabled module " + fi +} + + scan_and_run_tests
\ No newline at end of file |