blob: 1f0ada28ee951d2d9a6522c0932053380b56b6df [file] [log] [blame]
Liz Kammer2dd9ca42020-11-25 16:06:39 -08001package bp2build
2
3import (
4 "android/soong/android"
Jingwen Chen73850672020-12-14 08:25:34 -05005 "android/soong/bazel"
Liz Kammer2dd9ca42020-11-25 16:06:39 -08006)
7
8type nestedProps struct {
9 Nested_prop string
10}
11
12type customProps struct {
13 Bool_prop bool
14 Bool_ptr_prop *bool
15 // Ensure that properties tagged `blueprint:mutated` are omitted
16 Int_prop int `blueprint:"mutated"`
17 Int64_ptr_prop *int64
18 String_prop string
19 String_ptr_prop *string
20 String_list_prop []string
21
22 Nested_props nestedProps
23 Nested_props_ptr *nestedProps
24}
25
26type customModule struct {
27 android.ModuleBase
28
29 props customProps
Jingwen Chen77e8b7b2021-02-05 03:03:24 -050030
31 bazelProps bazel.Properties
Liz Kammer2dd9ca42020-11-25 16:06:39 -080032}
33
34// OutputFiles is needed because some instances of this module use dist with a
35// tag property which requires the module implements OutputFileProducer.
36func (m *customModule) OutputFiles(tag string) (android.Paths, error) {
37 return android.PathsForTesting("path" + tag), nil
38}
39
40func (m *customModule) GenerateAndroidBuildActions(ctx android.ModuleContext) {
41 // nothing for now.
42}
43
44func customModuleFactoryBase() android.Module {
45 module := &customModule{}
46 module.AddProperties(&module.props)
Jingwen Chen77e8b7b2021-02-05 03:03:24 -050047 module.AddProperties(&module.bazelProps)
Liz Kammer2dd9ca42020-11-25 16:06:39 -080048 return module
49}
50
51func customModuleFactory() android.Module {
52 m := customModuleFactoryBase()
53 android.InitAndroidModule(m)
54 return m
55}
56
57type testProps struct {
58 Test_prop struct {
59 Test_string_prop string
60 }
61}
62
63type customTestModule struct {
64 android.ModuleBase
65
66 props customProps
67 test_props testProps
68}
69
70func (m *customTestModule) GenerateAndroidBuildActions(ctx android.ModuleContext) {
71 // nothing for now.
72}
73
74func customTestModuleFactoryBase() android.Module {
75 m := &customTestModule{}
76 m.AddProperties(&m.props)
77 m.AddProperties(&m.test_props)
78 return m
79}
80
81func customTestModuleFactory() android.Module {
82 m := customTestModuleFactoryBase()
83 android.InitAndroidModule(m)
84 return m
85}
86
87type customDefaultsModule struct {
88 android.ModuleBase
89 android.DefaultsModuleBase
90}
91
92func customDefaultsModuleFactoryBase() android.DefaultsModule {
93 module := &customDefaultsModule{}
94 module.AddProperties(&customProps{})
95 return module
96}
97
98func customDefaultsModuleFactoryBasic() android.Module {
99 return customDefaultsModuleFactoryBase()
100}
101
102func customDefaultsModuleFactory() android.Module {
103 m := customDefaultsModuleFactoryBase()
104 android.InitDefaultsModule(m)
105 return m
106}
Jingwen Chen73850672020-12-14 08:25:34 -0500107
108type customBazelModuleAttributes struct {
Jingwen Chen73850672020-12-14 08:25:34 -0500109 String_prop string
110 String_list_prop []string
111}
112
113type customBazelModule struct {
114 android.BazelTargetModuleBase
115 customBazelModuleAttributes
116}
117
118func customBazelModuleFactory() android.Module {
119 module := &customBazelModule{}
120 module.AddProperties(&module.customBazelModuleAttributes)
121 android.InitBazelTargetModule(module)
122 return module
123}
124
125func (m *customBazelModule) Name() string { return m.BaseModuleName() }
126func (m *customBazelModule) GenerateAndroidBuildActions(ctx android.ModuleContext) {}
127
128func customBp2BuildMutator(ctx android.TopDownMutatorContext) {
129 if m, ok := ctx.Module().(*customModule); ok {
Jingwen Chen77e8b7b2021-02-05 03:03:24 -0500130 if !m.bazelProps.Bazel_module.Bp2build_available {
131 return
132 }
133
Jingwen Chen1fd14692021-02-05 03:01:50 -0500134 attrs := &customBazelModuleAttributes{
Jingwen Chen73850672020-12-14 08:25:34 -0500135 String_prop: m.props.String_prop,
136 String_list_prop: m.props.String_list_prop,
Jingwen Chen1fd14692021-02-05 03:01:50 -0500137 }
138
139 name := "__bp2build__" + m.Name()
140 props := bazel.BazelTargetModuleProperties{
141 Name: &name,
Jingwen Chen73850672020-12-14 08:25:34 -0500142 Rule_class: "custom",
Jingwen Chen1fd14692021-02-05 03:01:50 -0500143 }
144
145 ctx.CreateBazelTargetModule(customBazelModuleFactory, props, attrs)
Jingwen Chen73850672020-12-14 08:25:34 -0500146 }
147}
Jingwen Chen40067de2021-01-26 21:58:43 -0500148
149// A bp2build mutator that uses load statements and creates a 1:M mapping from
150// module to target.
151func customBp2BuildMutatorFromStarlark(ctx android.TopDownMutatorContext) {
152 if m, ok := ctx.Module().(*customModule); ok {
Jingwen Chen77e8b7b2021-02-05 03:03:24 -0500153 if !m.bazelProps.Bazel_module.Bp2build_available {
154 return
155 }
156
Jingwen Chen1fd14692021-02-05 03:01:50 -0500157 baseName := m.Name()
158 attrs := &customBazelModuleAttributes{}
159
160 myLibraryName := "__bp2build__" + baseName
161 myLibraryProps := bazel.BazelTargetModuleProperties{
162 Name: &myLibraryName,
Jingwen Chen40067de2021-01-26 21:58:43 -0500163 Rule_class: "my_library",
164 Bzl_load_location: "//build/bazel/rules:rules.bzl",
Jingwen Chen1fd14692021-02-05 03:01:50 -0500165 }
166 ctx.CreateBazelTargetModule(customBazelModuleFactory, myLibraryProps, attrs)
167
168 protoLibraryName := "__bp2build__" + baseName + "_proto_library_deps"
169 protoLibraryProps := bazel.BazelTargetModuleProperties{
170 Name: &protoLibraryName,
Jingwen Chen40067de2021-01-26 21:58:43 -0500171 Rule_class: "proto_library",
172 Bzl_load_location: "//build/bazel/rules:proto.bzl",
Jingwen Chen1fd14692021-02-05 03:01:50 -0500173 }
174 ctx.CreateBazelTargetModule(customBazelModuleFactory, protoLibraryProps, attrs)
175
176 myProtoLibraryName := "__bp2build__" + baseName + "_my_proto_library_deps"
177 myProtoLibraryProps := bazel.BazelTargetModuleProperties{
178 Name: &myProtoLibraryName,
Jingwen Chen40067de2021-01-26 21:58:43 -0500179 Rule_class: "my_proto_library",
180 Bzl_load_location: "//build/bazel/rules:proto.bzl",
Jingwen Chen1fd14692021-02-05 03:01:50 -0500181 }
182 ctx.CreateBazelTargetModule(customBazelModuleFactory, myProtoLibraryProps, attrs)
Jingwen Chen40067de2021-01-26 21:58:43 -0500183 }
184}