| package bp2build |
| |
| import ( |
| "android/soong/android" |
| "android/soong/bazel" |
| ) |
| |
| type nestedProps struct { |
| Nested_prop string |
| } |
| |
| type customProps struct { |
| Bool_prop bool |
| Bool_ptr_prop *bool |
| // Ensure that properties tagged `blueprint:mutated` are omitted |
| Int_prop int `blueprint:"mutated"` |
| Int64_ptr_prop *int64 |
| String_prop string |
| String_ptr_prop *string |
| String_list_prop []string |
| |
| Nested_props nestedProps |
| Nested_props_ptr *nestedProps |
| } |
| |
| type customModule struct { |
| android.ModuleBase |
| |
| props customProps |
| |
| bazelProps bazel.Properties |
| } |
| |
| // OutputFiles is needed because some instances of this module use dist with a |
| // tag property which requires the module implements OutputFileProducer. |
| func (m *customModule) OutputFiles(tag string) (android.Paths, error) { |
| return android.PathsForTesting("path" + tag), nil |
| } |
| |
| func (m *customModule) GenerateAndroidBuildActions(ctx android.ModuleContext) { |
| // nothing for now. |
| } |
| |
| func customModuleFactoryBase() android.Module { |
| module := &customModule{} |
| module.AddProperties(&module.props) |
| module.AddProperties(&module.bazelProps) |
| return module |
| } |
| |
| func customModuleFactory() android.Module { |
| m := customModuleFactoryBase() |
| android.InitAndroidModule(m) |
| return m |
| } |
| |
| type testProps struct { |
| Test_prop struct { |
| Test_string_prop string |
| } |
| } |
| |
| type customTestModule struct { |
| android.ModuleBase |
| |
| props customProps |
| test_props testProps |
| } |
| |
| func (m *customTestModule) GenerateAndroidBuildActions(ctx android.ModuleContext) { |
| // nothing for now. |
| } |
| |
| func customTestModuleFactoryBase() android.Module { |
| m := &customTestModule{} |
| m.AddProperties(&m.props) |
| m.AddProperties(&m.test_props) |
| return m |
| } |
| |
| func customTestModuleFactory() android.Module { |
| m := customTestModuleFactoryBase() |
| android.InitAndroidModule(m) |
| return m |
| } |
| |
| type customDefaultsModule struct { |
| android.ModuleBase |
| android.DefaultsModuleBase |
| } |
| |
| func customDefaultsModuleFactoryBase() android.DefaultsModule { |
| module := &customDefaultsModule{} |
| module.AddProperties(&customProps{}) |
| return module |
| } |
| |
| func customDefaultsModuleFactoryBasic() android.Module { |
| return customDefaultsModuleFactoryBase() |
| } |
| |
| func customDefaultsModuleFactory() android.Module { |
| m := customDefaultsModuleFactoryBase() |
| android.InitDefaultsModule(m) |
| return m |
| } |
| |
| type customBazelModuleAttributes struct { |
| String_prop string |
| String_list_prop []string |
| } |
| |
| type customBazelModule struct { |
| android.BazelTargetModuleBase |
| customBazelModuleAttributes |
| } |
| |
| func customBazelModuleFactory() android.Module { |
| module := &customBazelModule{} |
| module.AddProperties(&module.customBazelModuleAttributes) |
| android.InitBazelTargetModule(module) |
| return module |
| } |
| |
| func (m *customBazelModule) Name() string { return m.BaseModuleName() } |
| func (m *customBazelModule) GenerateAndroidBuildActions(ctx android.ModuleContext) {} |
| |
| func customBp2BuildMutator(ctx android.TopDownMutatorContext) { |
| if m, ok := ctx.Module().(*customModule); ok { |
| if !m.bazelProps.Bazel_module.Bp2build_available { |
| return |
| } |
| |
| attrs := &customBazelModuleAttributes{ |
| String_prop: m.props.String_prop, |
| String_list_prop: m.props.String_list_prop, |
| } |
| |
| name := "__bp2build__" + m.Name() |
| props := bazel.BazelTargetModuleProperties{ |
| Name: &name, |
| Rule_class: "custom", |
| } |
| |
| ctx.CreateBazelTargetModule(customBazelModuleFactory, props, attrs) |
| } |
| } |
| |
| // A bp2build mutator that uses load statements and creates a 1:M mapping from |
| // module to target. |
| func customBp2BuildMutatorFromStarlark(ctx android.TopDownMutatorContext) { |
| if m, ok := ctx.Module().(*customModule); ok { |
| if !m.bazelProps.Bazel_module.Bp2build_available { |
| return |
| } |
| |
| baseName := m.Name() |
| attrs := &customBazelModuleAttributes{} |
| |
| myLibraryName := "__bp2build__" + baseName |
| myLibraryProps := bazel.BazelTargetModuleProperties{ |
| Name: &myLibraryName, |
| Rule_class: "my_library", |
| Bzl_load_location: "//build/bazel/rules:rules.bzl", |
| } |
| ctx.CreateBazelTargetModule(customBazelModuleFactory, myLibraryProps, attrs) |
| |
| protoLibraryName := "__bp2build__" + baseName + "_proto_library_deps" |
| protoLibraryProps := bazel.BazelTargetModuleProperties{ |
| Name: &protoLibraryName, |
| Rule_class: "proto_library", |
| Bzl_load_location: "//build/bazel/rules:proto.bzl", |
| } |
| ctx.CreateBazelTargetModule(customBazelModuleFactory, protoLibraryProps, attrs) |
| |
| myProtoLibraryName := "__bp2build__" + baseName + "_my_proto_library_deps" |
| myProtoLibraryProps := bazel.BazelTargetModuleProperties{ |
| Name: &myProtoLibraryName, |
| Rule_class: "my_proto_library", |
| Bzl_load_location: "//build/bazel/rules:proto.bzl", |
| } |
| ctx.CreateBazelTargetModule(customBazelModuleFactory, myProtoLibraryProps, attrs) |
| } |
| } |