Loading android/filegroup.go +2 −1 Original line number Diff line number Diff line Loading @@ -49,9 +49,10 @@ func (bfg *bazelFilegroup) GenerateAndroidBuildActions(ctx ModuleContext) {} func FilegroupBp2Build(ctx TopDownMutatorContext) { fg, ok := ctx.Module().(*fileGroup) if !ok { if !ok || !fg.properties.Bazel_module.Bp2build_available { return } attrs := &bazelFilegroupAttributes{ Srcs: BazelLabelForModuleSrcExcludes(ctx, fg.properties.Srcs, fg.properties.Exclude_srcs), } Loading bazel/properties.go +3 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,9 @@ package bazel type bazelModuleProperties struct { // The label of the Bazel target replacing this Soong module. Label string // If true, bp2build will generate the converted Bazel target for this module. Bp2build_available bool } // Properties contains common module properties for Bazel migration purposes. Loading bp2build/build_conversion.go +2 −0 Original line number Diff line number Diff line Loading @@ -219,6 +219,8 @@ func generateBazelTarget(ctx bpToBuildContext, m blueprint.Module) BazelTarget { // Delete it from being generated in the BUILD file. delete(props.Attrs, "bzl_load_location") delete(props.Attrs, "bp2build_available") // Return the Bazel target with rule class and attributes, ready to be // code-generated. attributes := propsToAttributes(props.Attrs) Loading bp2build/build_conversion_test.go +100 −1 Original line number Diff line number Diff line Loading @@ -228,6 +228,7 @@ func TestGenerateBazelTargetModules(t *testing.T) { name: "foo", string_list_prop: ["a", "b"], string_prop: "a", bazel_module: { bp2build_available: true }, }`, expectedBazelTarget: `custom( name = "foo", Loading Loading @@ -382,6 +383,7 @@ func TestGenerateBazelTargetModules_OneToMany_LoadedFromStarlark(t *testing.T) { { bp: `custom { name: "bar", bazel_module: { bp2build_available: true }, }`, expectedBazelTarget: `my_library( name = "bar", Loading Loading @@ -474,6 +476,7 @@ genrule { bp: `filegroup { name: "fg_foo", srcs: [], bazel_module: { bp2build_available: true }, }`, expectedBazelTargets: []string{ `filegroup( Loading @@ -491,6 +494,7 @@ genrule { bp: `filegroup { name: "fg_foo", srcs: ["a", "b"], bazel_module: { bp2build_available: true }, }`, expectedBazelTargets: []string{`filegroup( name = "fg_foo", Loading @@ -510,6 +514,7 @@ genrule { name: "fg_foo", srcs: ["a", "b"], exclude_srcs: ["a"], bazel_module: { bp2build_available: true }, }`, expectedBazelTargets: []string{`filegroup( name = "fg_foo", Loading @@ -527,6 +532,7 @@ genrule { bp: `filegroup { name: "foo", srcs: ["**/*.txt"], bazel_module: { bp2build_available: true }, }`, expectedBazelTargets: []string{`filegroup( name = "foo", Loading @@ -552,6 +558,7 @@ genrule { bp: `filegroup { name: "foo", srcs: ["a.txt"], bazel_module: { bp2build_available: true }, }`, dir: "other", expectedBazelTargets: []string{`filegroup( Loading @@ -567,6 +574,7 @@ genrule { "other/Android.bp": `filegroup { name: "fg_foo", srcs: ["**/*.txt"], bazel_module: { bp2build_available: true }, }`, "other/a.txt": "", "other/b.txt": "", Loading @@ -585,6 +593,7 @@ genrule { ":foo", "c", ], bazel_module: { bp2build_available: true }, }`, expectedBazelTargets: []string{`filegroup( name = "foobar", Loading Loading @@ -612,6 +621,7 @@ genrule { out: ["foo_tool.out"], srcs: ["foo_tool.in"], cmd: "cp $(in) $(out)", bazel_module: { bp2build_available: true }, } genrule { Loading @@ -620,6 +630,7 @@ genrule { srcs: ["foo.in"], tools: [":foo.tool"], cmd: "$(location :foo.tool) --genDir=$(genDir) arg $(in) $(out)", bazel_module: { bp2build_available: true }, }`, expectedBazelTargets: []string{ `genrule( Loading Loading @@ -658,6 +669,7 @@ genrule { out: ["foo_tool.out", "foo_tool2.out"], srcs: ["foo_tool.in"], cmd: "cp $(in) $(out)", bazel_module: { bp2build_available: true }, } genrule { Loading @@ -666,6 +678,7 @@ genrule { srcs: ["foo.in"], tools: [":foo.tools"], cmd: "$(locations :foo.tools) -s $(out) $(in)", bazel_module: { bp2build_available: true }, }`, expectedBazelTargets: []string{`genrule( name = "foo", Loading Loading @@ -705,6 +718,7 @@ genrule { srcs: ["foo.in"], tool_files: [":foo.tool"], cmd: "$(locations :foo.tool) -s $(out) $(in)", bazel_module: { bp2build_available: true }, }`, expectedBazelTargets: []string{`genrule( name = "foo", Loading Loading @@ -734,6 +748,7 @@ genrule { srcs: [":other.tool"], tool_files: [":foo.tool"], cmd: "$(locations :foo.tool) -s $(out) $(location :other.tool)", bazel_module: { bp2build_available: true }, }`, expectedBazelTargets: []string{`genrule( name = "foo", Loading Loading @@ -763,6 +778,7 @@ genrule { srcs: ["foo.in"], tool_files: [":foo.tool", ":other.tool"], cmd: "$(location) -s $(out) $(in)", bazel_module: { bp2build_available: true }, }`, expectedBazelTargets: []string{`genrule( name = "foo", Loading Loading @@ -793,6 +809,7 @@ genrule { srcs: ["foo.in"], tools: [":foo.tool", ":other.tool"], cmd: "$(locations) -s $(out) $(in)", bazel_module: { bp2build_available: true }, }`, expectedBazelTargets: []string{`genrule( name = "foo", Loading Loading @@ -822,6 +839,7 @@ genrule { out: ["foo.out"], srcs: ["foo.in"], cmd: "cp $(in) $(out)", bazel_module: { bp2build_available: true }, }`, expectedBazelTargets: []string{`genrule( name = "foo", Loading Loading @@ -927,6 +945,7 @@ genrule { out: ["out"], srcs: ["in1"], defaults: ["gen_defaults"], bazel_module: { bp2build_available: true }, } `, expectedBazelTarget: `genrule( Loading Loading @@ -961,6 +980,7 @@ genrule { srcs: ["in1"], defaults: ["gen_defaults"], cmd: "do-something $(in) $(out)", bazel_module: { bp2build_available: true }, } `, expectedBazelTarget: `genrule( Loading Loading @@ -999,6 +1019,7 @@ genrule { name: "gen", out: ["out"], defaults: ["gen_defaults1", "gen_defaults2"], bazel_module: { bp2build_available: true }, } `, expectedBazelTarget: `genrule( Loading Loading @@ -1045,6 +1066,7 @@ genrule { name: "gen", out: ["out"], defaults: ["gen_defaults1"], bazel_module: { bp2build_available: true }, } `, expectedBazelTarget: `genrule( Loading Loading @@ -1097,3 +1119,80 @@ genrule { } } } func TestAllowlistingBp2buildTargets(t *testing.T) { testCases := []struct { moduleTypeUnderTest string moduleTypeUnderTestFactory android.ModuleFactory moduleTypeUnderTestBp2BuildMutator bp2buildMutator bp string expectedCount int description string }{ { description: "explicitly unavailable", moduleTypeUnderTest: "filegroup", moduleTypeUnderTestFactory: android.FileGroupFactory, moduleTypeUnderTestBp2BuildMutator: android.FilegroupBp2Build, bp: `filegroup { name: "foo", srcs: ["a", "b"], bazel_module: { bp2build_available: false }, }`, expectedCount: 0, }, { description: "implicitly unavailable", moduleTypeUnderTest: "filegroup", moduleTypeUnderTestFactory: android.FileGroupFactory, moduleTypeUnderTestBp2BuildMutator: android.FilegroupBp2Build, bp: `filegroup { name: "foo", srcs: ["a", "b"], }`, expectedCount: 0, }, { description: "explicitly available", moduleTypeUnderTest: "filegroup", moduleTypeUnderTestFactory: android.FileGroupFactory, moduleTypeUnderTestBp2BuildMutator: android.FilegroupBp2Build, bp: `filegroup { name: "foo", srcs: ["a", "b"], bazel_module: { bp2build_available: true }, }`, expectedCount: 1, }, { description: "generates more than 1 target if needed", moduleTypeUnderTest: "custom", moduleTypeUnderTestFactory: customModuleFactory, moduleTypeUnderTestBp2BuildMutator: customBp2BuildMutatorFromStarlark, bp: `custom { name: "foo", bazel_module: { bp2build_available: true }, }`, expectedCount: 3, }, } dir := "." for _, testCase := range testCases { config := android.TestConfig(buildDir, nil, testCase.bp, nil) ctx := android.NewTestContext(config) ctx.RegisterModuleType(testCase.moduleTypeUnderTest, testCase.moduleTypeUnderTestFactory) ctx.RegisterBp2BuildMutator(testCase.moduleTypeUnderTest, testCase.moduleTypeUnderTestBp2BuildMutator) ctx.RegisterForBazelConversion() _, errs := ctx.ParseFileList(dir, []string{"Android.bp"}) android.FailIfErrored(t, errs) _, errs = ctx.ResolveDependencies(config) android.FailIfErrored(t, errs) bazelTargets := GenerateBazelTargets(ctx.Context.Context, Bp2Build)[dir] if actualCount := len(bazelTargets); actualCount != testCase.expectedCount { t.Fatalf("%s: Expected %d bazel target, got %d", testCase.description, testCase.expectedCount, actualCount) } } } bp2build/bzl_conversion_test.go +4 −0 Original line number Diff line number Diff line Loading @@ -86,6 +86,10 @@ custom = rule( "soong_module_name": attr.string(mandatory = True), "soong_module_variant": attr.string(), "soong_module_deps": attr.label_list(providers = [SoongModuleInfo]), # bazel_module start # "label": attr.string(), # "bp2build_available": attr.bool(), # bazel_module end "bool_prop": attr.bool(), "bool_ptr_prop": attr.bool(), "int64_ptr_prop": attr.int(), Loading Loading
android/filegroup.go +2 −1 Original line number Diff line number Diff line Loading @@ -49,9 +49,10 @@ func (bfg *bazelFilegroup) GenerateAndroidBuildActions(ctx ModuleContext) {} func FilegroupBp2Build(ctx TopDownMutatorContext) { fg, ok := ctx.Module().(*fileGroup) if !ok { if !ok || !fg.properties.Bazel_module.Bp2build_available { return } attrs := &bazelFilegroupAttributes{ Srcs: BazelLabelForModuleSrcExcludes(ctx, fg.properties.Srcs, fg.properties.Exclude_srcs), } Loading
bazel/properties.go +3 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,9 @@ package bazel type bazelModuleProperties struct { // The label of the Bazel target replacing this Soong module. Label string // If true, bp2build will generate the converted Bazel target for this module. Bp2build_available bool } // Properties contains common module properties for Bazel migration purposes. Loading
bp2build/build_conversion.go +2 −0 Original line number Diff line number Diff line Loading @@ -219,6 +219,8 @@ func generateBazelTarget(ctx bpToBuildContext, m blueprint.Module) BazelTarget { // Delete it from being generated in the BUILD file. delete(props.Attrs, "bzl_load_location") delete(props.Attrs, "bp2build_available") // Return the Bazel target with rule class and attributes, ready to be // code-generated. attributes := propsToAttributes(props.Attrs) Loading
bp2build/build_conversion_test.go +100 −1 Original line number Diff line number Diff line Loading @@ -228,6 +228,7 @@ func TestGenerateBazelTargetModules(t *testing.T) { name: "foo", string_list_prop: ["a", "b"], string_prop: "a", bazel_module: { bp2build_available: true }, }`, expectedBazelTarget: `custom( name = "foo", Loading Loading @@ -382,6 +383,7 @@ func TestGenerateBazelTargetModules_OneToMany_LoadedFromStarlark(t *testing.T) { { bp: `custom { name: "bar", bazel_module: { bp2build_available: true }, }`, expectedBazelTarget: `my_library( name = "bar", Loading Loading @@ -474,6 +476,7 @@ genrule { bp: `filegroup { name: "fg_foo", srcs: [], bazel_module: { bp2build_available: true }, }`, expectedBazelTargets: []string{ `filegroup( Loading @@ -491,6 +494,7 @@ genrule { bp: `filegroup { name: "fg_foo", srcs: ["a", "b"], bazel_module: { bp2build_available: true }, }`, expectedBazelTargets: []string{`filegroup( name = "fg_foo", Loading @@ -510,6 +514,7 @@ genrule { name: "fg_foo", srcs: ["a", "b"], exclude_srcs: ["a"], bazel_module: { bp2build_available: true }, }`, expectedBazelTargets: []string{`filegroup( name = "fg_foo", Loading @@ -527,6 +532,7 @@ genrule { bp: `filegroup { name: "foo", srcs: ["**/*.txt"], bazel_module: { bp2build_available: true }, }`, expectedBazelTargets: []string{`filegroup( name = "foo", Loading @@ -552,6 +558,7 @@ genrule { bp: `filegroup { name: "foo", srcs: ["a.txt"], bazel_module: { bp2build_available: true }, }`, dir: "other", expectedBazelTargets: []string{`filegroup( Loading @@ -567,6 +574,7 @@ genrule { "other/Android.bp": `filegroup { name: "fg_foo", srcs: ["**/*.txt"], bazel_module: { bp2build_available: true }, }`, "other/a.txt": "", "other/b.txt": "", Loading @@ -585,6 +593,7 @@ genrule { ":foo", "c", ], bazel_module: { bp2build_available: true }, }`, expectedBazelTargets: []string{`filegroup( name = "foobar", Loading Loading @@ -612,6 +621,7 @@ genrule { out: ["foo_tool.out"], srcs: ["foo_tool.in"], cmd: "cp $(in) $(out)", bazel_module: { bp2build_available: true }, } genrule { Loading @@ -620,6 +630,7 @@ genrule { srcs: ["foo.in"], tools: [":foo.tool"], cmd: "$(location :foo.tool) --genDir=$(genDir) arg $(in) $(out)", bazel_module: { bp2build_available: true }, }`, expectedBazelTargets: []string{ `genrule( Loading Loading @@ -658,6 +669,7 @@ genrule { out: ["foo_tool.out", "foo_tool2.out"], srcs: ["foo_tool.in"], cmd: "cp $(in) $(out)", bazel_module: { bp2build_available: true }, } genrule { Loading @@ -666,6 +678,7 @@ genrule { srcs: ["foo.in"], tools: [":foo.tools"], cmd: "$(locations :foo.tools) -s $(out) $(in)", bazel_module: { bp2build_available: true }, }`, expectedBazelTargets: []string{`genrule( name = "foo", Loading Loading @@ -705,6 +718,7 @@ genrule { srcs: ["foo.in"], tool_files: [":foo.tool"], cmd: "$(locations :foo.tool) -s $(out) $(in)", bazel_module: { bp2build_available: true }, }`, expectedBazelTargets: []string{`genrule( name = "foo", Loading Loading @@ -734,6 +748,7 @@ genrule { srcs: [":other.tool"], tool_files: [":foo.tool"], cmd: "$(locations :foo.tool) -s $(out) $(location :other.tool)", bazel_module: { bp2build_available: true }, }`, expectedBazelTargets: []string{`genrule( name = "foo", Loading Loading @@ -763,6 +778,7 @@ genrule { srcs: ["foo.in"], tool_files: [":foo.tool", ":other.tool"], cmd: "$(location) -s $(out) $(in)", bazel_module: { bp2build_available: true }, }`, expectedBazelTargets: []string{`genrule( name = "foo", Loading Loading @@ -793,6 +809,7 @@ genrule { srcs: ["foo.in"], tools: [":foo.tool", ":other.tool"], cmd: "$(locations) -s $(out) $(in)", bazel_module: { bp2build_available: true }, }`, expectedBazelTargets: []string{`genrule( name = "foo", Loading Loading @@ -822,6 +839,7 @@ genrule { out: ["foo.out"], srcs: ["foo.in"], cmd: "cp $(in) $(out)", bazel_module: { bp2build_available: true }, }`, expectedBazelTargets: []string{`genrule( name = "foo", Loading Loading @@ -927,6 +945,7 @@ genrule { out: ["out"], srcs: ["in1"], defaults: ["gen_defaults"], bazel_module: { bp2build_available: true }, } `, expectedBazelTarget: `genrule( Loading Loading @@ -961,6 +980,7 @@ genrule { srcs: ["in1"], defaults: ["gen_defaults"], cmd: "do-something $(in) $(out)", bazel_module: { bp2build_available: true }, } `, expectedBazelTarget: `genrule( Loading Loading @@ -999,6 +1019,7 @@ genrule { name: "gen", out: ["out"], defaults: ["gen_defaults1", "gen_defaults2"], bazel_module: { bp2build_available: true }, } `, expectedBazelTarget: `genrule( Loading Loading @@ -1045,6 +1066,7 @@ genrule { name: "gen", out: ["out"], defaults: ["gen_defaults1"], bazel_module: { bp2build_available: true }, } `, expectedBazelTarget: `genrule( Loading Loading @@ -1097,3 +1119,80 @@ genrule { } } } func TestAllowlistingBp2buildTargets(t *testing.T) { testCases := []struct { moduleTypeUnderTest string moduleTypeUnderTestFactory android.ModuleFactory moduleTypeUnderTestBp2BuildMutator bp2buildMutator bp string expectedCount int description string }{ { description: "explicitly unavailable", moduleTypeUnderTest: "filegroup", moduleTypeUnderTestFactory: android.FileGroupFactory, moduleTypeUnderTestBp2BuildMutator: android.FilegroupBp2Build, bp: `filegroup { name: "foo", srcs: ["a", "b"], bazel_module: { bp2build_available: false }, }`, expectedCount: 0, }, { description: "implicitly unavailable", moduleTypeUnderTest: "filegroup", moduleTypeUnderTestFactory: android.FileGroupFactory, moduleTypeUnderTestBp2BuildMutator: android.FilegroupBp2Build, bp: `filegroup { name: "foo", srcs: ["a", "b"], }`, expectedCount: 0, }, { description: "explicitly available", moduleTypeUnderTest: "filegroup", moduleTypeUnderTestFactory: android.FileGroupFactory, moduleTypeUnderTestBp2BuildMutator: android.FilegroupBp2Build, bp: `filegroup { name: "foo", srcs: ["a", "b"], bazel_module: { bp2build_available: true }, }`, expectedCount: 1, }, { description: "generates more than 1 target if needed", moduleTypeUnderTest: "custom", moduleTypeUnderTestFactory: customModuleFactory, moduleTypeUnderTestBp2BuildMutator: customBp2BuildMutatorFromStarlark, bp: `custom { name: "foo", bazel_module: { bp2build_available: true }, }`, expectedCount: 3, }, } dir := "." for _, testCase := range testCases { config := android.TestConfig(buildDir, nil, testCase.bp, nil) ctx := android.NewTestContext(config) ctx.RegisterModuleType(testCase.moduleTypeUnderTest, testCase.moduleTypeUnderTestFactory) ctx.RegisterBp2BuildMutator(testCase.moduleTypeUnderTest, testCase.moduleTypeUnderTestBp2BuildMutator) ctx.RegisterForBazelConversion() _, errs := ctx.ParseFileList(dir, []string{"Android.bp"}) android.FailIfErrored(t, errs) _, errs = ctx.ResolveDependencies(config) android.FailIfErrored(t, errs) bazelTargets := GenerateBazelTargets(ctx.Context.Context, Bp2Build)[dir] if actualCount := len(bazelTargets); actualCount != testCase.expectedCount { t.Fatalf("%s: Expected %d bazel target, got %d", testCase.description, testCase.expectedCount, actualCount) } } }
bp2build/bzl_conversion_test.go +4 −0 Original line number Diff line number Diff line Loading @@ -86,6 +86,10 @@ custom = rule( "soong_module_name": attr.string(mandatory = True), "soong_module_variant": attr.string(), "soong_module_deps": attr.label_list(providers = [SoongModuleInfo]), # bazel_module start # "label": attr.string(), # "bp2build_available": attr.bool(), # bazel_module end "bool_prop": attr.bool(), "bool_ptr_prop": attr.bool(), "int64_ptr_prop": attr.int(), Loading