Loading bp2build/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -11,6 +11,7 @@ bootstrap_go_package { deps: [ "soong-android", "soong-bazel", "soong-genrule", ], testSrcs: [ "build_conversion_test.go", Loading bp2build/build_conversion_test.go +49 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package bp2build import ( "android/soong/android" "android/soong/genrule" "testing" ) Loading Loading @@ -300,6 +301,54 @@ func TestModuleTypeBp2Build(t *testing.T) { "a", "b", ], )`, }, { moduleTypeUnderTest: "genrule", moduleTypeUnderTestFactory: genrule.GenRuleFactory, bp: `genrule { name: "foo", out: ["foo.out"], srcs: ["foo.in"], tool_files: [":foo.tool"], cmd: "$(location :foo.tool) arg $(in) $(out)", }`, expectedBazelTarget: `genrule( name = "foo", cmd = "$(location :foo.tool) arg $(SRCS) $(OUTS)", outs = [ "foo.out", ], srcs = [ "foo.in", ], tools = [ ":foo.tool", ], )`, }, { moduleTypeUnderTest: "genrule", moduleTypeUnderTestFactory: genrule.GenRuleFactory, bp: `genrule { name: "foo", out: ["foo.out"], srcs: ["foo.in"], tools: [":foo.tool"], cmd: "$(location :foo.tool) --out-dir=$(genDir) $(in)", }`, expectedBazelTarget: `genrule( name = "foo", cmd = "$(location :foo.tool) --out-dir=$(GENDIR) $(SRCS)", outs = [ "foo.out", ], srcs = [ "foo.in", ], tools = [ ":foo.tool", ], )`, }, } Loading genrule/genrule.go +66 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,8 @@ func RegisterGenruleBuildComponents(ctx android.RegistrationContext) { ctx.FinalDepsMutators(func(ctx android.RegisterMutatorsContext) { ctx.BottomUp("genrule_tool_deps", toolDepsMutator).Parallel() }) android.RegisterBp2BuildMutator("genrule", bp2buildMutator) } var ( Loading Loading @@ -772,6 +774,70 @@ type genRuleProperties struct { Out []string `android:"arch_variant"` } type bazelGenruleAttributes struct { Name *string Srcs []string Outs []string Tools []string Cmd string } type bazelGenrule struct { android.BazelTargetModuleBase bazelGenruleAttributes } func BazelGenruleFactory() android.Module { module := &bazelGenrule{} module.AddProperties(&module.bazelGenruleAttributes) android.InitBazelTargetModule(module) return module } func bp2buildMutator(ctx android.TopDownMutatorContext) { if m, ok := ctx.Module().(*Module); ok { name := "__bp2build__" + m.Name() // Replace in and out variables with $< and $@ var cmd string if m.properties.Cmd != nil { cmd = strings.Replace(*m.properties.Cmd, "$(in)", "$(SRCS)", -1) cmd = strings.Replace(cmd, "$(out)", "$(OUTS)", -1) cmd = strings.Replace(cmd, "$(genDir)", "$(GENDIR)", -1) } // The Out prop is not in an immediately accessible field // in the Module struct, so use GetProperties and cast it // to the known struct prop. var outs []string for _, propIntf := range m.GetProperties() { if props, ok := propIntf.(*genRuleProperties); ok { outs = props.Out break } } // Bazel only has the "tools" attribute. tools := append(m.properties.Tools, m.properties.Tool_files...) // Create the BazelTargetModule. ctx.CreateModule(BazelGenruleFactory, &bazelGenruleAttributes{ Name: proptools.StringPtr(name), Srcs: m.properties.Srcs, Outs: outs, Cmd: cmd, Tools: tools, }, &bazel.BazelTargetModuleProperties{ Rule_class: "genrule", }) } } func (m *bazelGenrule) Name() string { return m.BaseModuleName() } func (m *bazelGenrule) GenerateAndroidBuildActions(ctx android.ModuleContext) {} var Bool = proptools.Bool var String = proptools.String Loading Loading
bp2build/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -11,6 +11,7 @@ bootstrap_go_package { deps: [ "soong-android", "soong-bazel", "soong-genrule", ], testSrcs: [ "build_conversion_test.go", Loading
bp2build/build_conversion_test.go +49 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package bp2build import ( "android/soong/android" "android/soong/genrule" "testing" ) Loading Loading @@ -300,6 +301,54 @@ func TestModuleTypeBp2Build(t *testing.T) { "a", "b", ], )`, }, { moduleTypeUnderTest: "genrule", moduleTypeUnderTestFactory: genrule.GenRuleFactory, bp: `genrule { name: "foo", out: ["foo.out"], srcs: ["foo.in"], tool_files: [":foo.tool"], cmd: "$(location :foo.tool) arg $(in) $(out)", }`, expectedBazelTarget: `genrule( name = "foo", cmd = "$(location :foo.tool) arg $(SRCS) $(OUTS)", outs = [ "foo.out", ], srcs = [ "foo.in", ], tools = [ ":foo.tool", ], )`, }, { moduleTypeUnderTest: "genrule", moduleTypeUnderTestFactory: genrule.GenRuleFactory, bp: `genrule { name: "foo", out: ["foo.out"], srcs: ["foo.in"], tools: [":foo.tool"], cmd: "$(location :foo.tool) --out-dir=$(genDir) $(in)", }`, expectedBazelTarget: `genrule( name = "foo", cmd = "$(location :foo.tool) --out-dir=$(GENDIR) $(SRCS)", outs = [ "foo.out", ], srcs = [ "foo.in", ], tools = [ ":foo.tool", ], )`, }, } Loading
genrule/genrule.go +66 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,8 @@ func RegisterGenruleBuildComponents(ctx android.RegistrationContext) { ctx.FinalDepsMutators(func(ctx android.RegisterMutatorsContext) { ctx.BottomUp("genrule_tool_deps", toolDepsMutator).Parallel() }) android.RegisterBp2BuildMutator("genrule", bp2buildMutator) } var ( Loading Loading @@ -772,6 +774,70 @@ type genRuleProperties struct { Out []string `android:"arch_variant"` } type bazelGenruleAttributes struct { Name *string Srcs []string Outs []string Tools []string Cmd string } type bazelGenrule struct { android.BazelTargetModuleBase bazelGenruleAttributes } func BazelGenruleFactory() android.Module { module := &bazelGenrule{} module.AddProperties(&module.bazelGenruleAttributes) android.InitBazelTargetModule(module) return module } func bp2buildMutator(ctx android.TopDownMutatorContext) { if m, ok := ctx.Module().(*Module); ok { name := "__bp2build__" + m.Name() // Replace in and out variables with $< and $@ var cmd string if m.properties.Cmd != nil { cmd = strings.Replace(*m.properties.Cmd, "$(in)", "$(SRCS)", -1) cmd = strings.Replace(cmd, "$(out)", "$(OUTS)", -1) cmd = strings.Replace(cmd, "$(genDir)", "$(GENDIR)", -1) } // The Out prop is not in an immediately accessible field // in the Module struct, so use GetProperties and cast it // to the known struct prop. var outs []string for _, propIntf := range m.GetProperties() { if props, ok := propIntf.(*genRuleProperties); ok { outs = props.Out break } } // Bazel only has the "tools" attribute. tools := append(m.properties.Tools, m.properties.Tool_files...) // Create the BazelTargetModule. ctx.CreateModule(BazelGenruleFactory, &bazelGenruleAttributes{ Name: proptools.StringPtr(name), Srcs: m.properties.Srcs, Outs: outs, Cmd: cmd, Tools: tools, }, &bazel.BazelTargetModuleProperties{ Rule_class: "genrule", }) } } func (m *bazelGenrule) Name() string { return m.BaseModuleName() } func (m *bazelGenrule) GenerateAndroidBuildActions(ctx android.ModuleContext) {} var Bool = proptools.Bool var String = proptools.String Loading