blob: a87fd7a0c64e2db78e05f45f3266de336a999d26 [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
Liz Kammerea6666f2021-02-17 10:17:28 -050028 android.BazelModuleBase
Liz Kammer2dd9ca42020-11-25 16:06:39 -080029
30 props customProps
31}
32
33// OutputFiles is needed because some instances of this module use dist with a
34// tag property which requires the module implements OutputFileProducer.
35func (m *customModule) OutputFiles(tag string) (android.Paths, error) {
36 return android.PathsForTesting("path" + tag), nil
37}
38
39func (m *customModule) GenerateAndroidBuildActions(ctx android.ModuleContext) {
40 // nothing for now.
41}
42
43func customModuleFactoryBase() android.Module {
44 module := &customModule{}
45 module.AddProperties(&module.props)
Liz Kammerea6666f2021-02-17 10:17:28 -050046 android.InitBazelModule(module)
Liz Kammer2dd9ca42020-11-25 16:06:39 -080047 return module
48}
49
50func customModuleFactory() android.Module {
51 m := customModuleFactoryBase()
52 android.InitAndroidModule(m)
53 return m
54}
55
56type testProps struct {
57 Test_prop struct {
58 Test_string_prop string
59 }
60}
61
62type customTestModule struct {
63 android.ModuleBase
64
65 props customProps
66 test_props testProps
67}
68
69func (m *customTestModule) GenerateAndroidBuildActions(ctx android.ModuleContext) {
70 // nothing for now.
71}
72
73func customTestModuleFactoryBase() android.Module {
74 m := &customTestModule{}
75 m.AddProperties(&m.props)
76 m.AddProperties(&m.test_props)
77 return m
78}
79
80func customTestModuleFactory() android.Module {
81 m := customTestModuleFactoryBase()
82 android.InitAndroidModule(m)
83 return m
84}
85
86type customDefaultsModule struct {
87 android.ModuleBase
88 android.DefaultsModuleBase
89}
90
91func customDefaultsModuleFactoryBase() android.DefaultsModule {
92 module := &customDefaultsModule{}
93 module.AddProperties(&customProps{})
94 return module
95}
96
97func customDefaultsModuleFactoryBasic() android.Module {
98 return customDefaultsModuleFactoryBase()
99}
100
101func customDefaultsModuleFactory() android.Module {
102 m := customDefaultsModuleFactoryBase()
103 android.InitDefaultsModule(m)
104 return m
105}
Jingwen Chen73850672020-12-14 08:25:34 -0500106
107type customBazelModuleAttributes struct {
Jingwen Chen73850672020-12-14 08:25:34 -0500108 String_prop string
109 String_list_prop []string
110}
111
112type customBazelModule struct {
113 android.BazelTargetModuleBase
114 customBazelModuleAttributes
115}
116
117func customBazelModuleFactory() android.Module {
118 module := &customBazelModule{}
119 module.AddProperties(&module.customBazelModuleAttributes)
120 android.InitBazelTargetModule(module)
121 return module
122}
123
124func (m *customBazelModule) Name() string { return m.BaseModuleName() }
125func (m *customBazelModule) GenerateAndroidBuildActions(ctx android.ModuleContext) {}
126
127func customBp2BuildMutator(ctx android.TopDownMutatorContext) {
128 if m, ok := ctx.Module().(*customModule); ok {
Liz Kammerea6666f2021-02-17 10:17:28 -0500129 if !m.ConvertWithBp2build() {
Jingwen Chen77e8b7b2021-02-05 03:03:24 -0500130 return
131 }
132
Jingwen Chen1fd14692021-02-05 03:01:50 -0500133 attrs := &customBazelModuleAttributes{
Jingwen Chen73850672020-12-14 08:25:34 -0500134 String_prop: m.props.String_prop,
135 String_list_prop: m.props.String_list_prop,
Jingwen Chen1fd14692021-02-05 03:01:50 -0500136 }
137
Jingwen Chenfb4692a2021-02-07 10:05:16 -0500138 props := bazel.NewBazelTargetModuleProperties(m.Name(), "custom", "")
Jingwen Chen1fd14692021-02-05 03:01:50 -0500139
140 ctx.CreateBazelTargetModule(customBazelModuleFactory, props, attrs)
Jingwen Chen73850672020-12-14 08:25:34 -0500141 }
142}
Jingwen Chen40067de2021-01-26 21:58:43 -0500143
144// A bp2build mutator that uses load statements and creates a 1:M mapping from
145// module to target.
146func customBp2BuildMutatorFromStarlark(ctx android.TopDownMutatorContext) {
147 if m, ok := ctx.Module().(*customModule); ok {
Liz Kammerea6666f2021-02-17 10:17:28 -0500148 if !m.ConvertWithBp2build() {
Jingwen Chen77e8b7b2021-02-05 03:03:24 -0500149 return
150 }
151
Jingwen Chen1fd14692021-02-05 03:01:50 -0500152 baseName := m.Name()
153 attrs := &customBazelModuleAttributes{}
154
Jingwen Chenfb4692a2021-02-07 10:05:16 -0500155 myLibraryProps := bazel.NewBazelTargetModuleProperties(
156 baseName,
157 "my_library",
158 "//build/bazel/rules:rules.bzl",
159 )
Jingwen Chen1fd14692021-02-05 03:01:50 -0500160 ctx.CreateBazelTargetModule(customBazelModuleFactory, myLibraryProps, attrs)
161
Jingwen Chenfb4692a2021-02-07 10:05:16 -0500162 protoLibraryProps := bazel.NewBazelTargetModuleProperties(
163 baseName+"_proto_library_deps",
164 "proto_library",
165 "//build/bazel/rules:proto.bzl",
166 )
Jingwen Chen1fd14692021-02-05 03:01:50 -0500167 ctx.CreateBazelTargetModule(customBazelModuleFactory, protoLibraryProps, attrs)
168
Jingwen Chenfb4692a2021-02-07 10:05:16 -0500169 myProtoLibraryProps := bazel.NewBazelTargetModuleProperties(
170 baseName+"_my_proto_library_deps",
171 "my_proto_library",
172 "//build/bazel/rules:proto.bzl",
173 )
Jingwen Chen1fd14692021-02-05 03:01:50 -0500174 ctx.CreateBazelTargetModule(customBazelModuleFactory, myProtoLibraryProps, attrs)
Jingwen Chen40067de2021-01-26 21:58:43 -0500175 }
176}
Jingwen Chenba369ad2021-02-22 10:19:34 -0500177
178// Helper method for tests to easily access the targets in a dir.
179func generateBazelTargetsForDir(codegenCtx CodegenContext, dir string) BazelTargets {
180 buildFileToTargets, _ := GenerateBazelTargets(codegenCtx)
181 return buildFileToTargets[dir]
182}