blob: dcd77ea464b2fd8b41fa92058ae4fbc188f69bbd [file] [log] [blame]
Colin Crossce75d2c2016-10-06 16:12:58 -07001// Copyright 2016 Google Inc. All rights reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package android
16
17import (
Colin Cross41955e82019-05-29 14:40:35 -070018 "fmt"
Colin Crossce75d2c2016-10-06 16:12:58 -070019 "testing"
20
21 "github.com/google/blueprint"
22)
23
24var prebuiltsTests = []struct {
Martin Stjernholmf4677322020-07-07 02:20:40 +010025 name string
26 replaceBp bool // modules is added to default bp boilerplate if false.
27 modules string
28 prebuilt []OsType
Paul Duffin0c52c7b2021-07-06 17:15:25 +010029 preparer FixturePreparer
Colin Crossce75d2c2016-10-06 16:12:58 -070030}{
31 {
32 name: "no prebuilt",
33 modules: `
34 source {
35 name: "bar",
36 }`,
Martin Stjernholm009a9dc2020-03-05 17:34:13 +000037 prebuilt: nil,
Colin Crossce75d2c2016-10-06 16:12:58 -070038 },
39 {
40 name: "no source prebuilt not preferred",
41 modules: `
42 prebuilt {
43 name: "bar",
44 prefer: false,
Jiyong Parkd4671112019-04-19 17:23:04 +090045 srcs: ["prebuilt_file"],
Colin Crossce75d2c2016-10-06 16:12:58 -070046 }`,
Martin Stjernholmf4677322020-07-07 02:20:40 +010047 prebuilt: []OsType{Android, BuildOs},
Colin Crossce75d2c2016-10-06 16:12:58 -070048 },
49 {
50 name: "no source prebuilt preferred",
51 modules: `
52 prebuilt {
53 name: "bar",
54 prefer: true,
Jiyong Parkd4671112019-04-19 17:23:04 +090055 srcs: ["prebuilt_file"],
Colin Crossce75d2c2016-10-06 16:12:58 -070056 }`,
Martin Stjernholmf4677322020-07-07 02:20:40 +010057 prebuilt: []OsType{Android, BuildOs},
Colin Crossce75d2c2016-10-06 16:12:58 -070058 },
59 {
60 name: "prebuilt not preferred",
61 modules: `
62 source {
63 name: "bar",
64 }
Martin Stjernholm009a9dc2020-03-05 17:34:13 +000065
Colin Crossce75d2c2016-10-06 16:12:58 -070066 prebuilt {
67 name: "bar",
68 prefer: false,
Jiyong Parkd4671112019-04-19 17:23:04 +090069 srcs: ["prebuilt_file"],
Colin Crossce75d2c2016-10-06 16:12:58 -070070 }`,
Martin Stjernholm009a9dc2020-03-05 17:34:13 +000071 prebuilt: nil,
Colin Crossce75d2c2016-10-06 16:12:58 -070072 },
73 {
74 name: "prebuilt preferred",
75 modules: `
76 source {
77 name: "bar",
78 }
Martin Stjernholm009a9dc2020-03-05 17:34:13 +000079
Colin Crossce75d2c2016-10-06 16:12:58 -070080 prebuilt {
81 name: "bar",
82 prefer: true,
Jiyong Parkd4671112019-04-19 17:23:04 +090083 srcs: ["prebuilt_file"],
Colin Crossce75d2c2016-10-06 16:12:58 -070084 }`,
Martin Stjernholmf4677322020-07-07 02:20:40 +010085 prebuilt: []OsType{Android, BuildOs},
Colin Crossce75d2c2016-10-06 16:12:58 -070086 },
Colin Cross0d614dd2016-10-14 15:38:43 -070087 {
88 name: "prebuilt no file not preferred",
89 modules: `
90 source {
91 name: "bar",
92 }
Martin Stjernholm009a9dc2020-03-05 17:34:13 +000093
Colin Cross0d614dd2016-10-14 15:38:43 -070094 prebuilt {
95 name: "bar",
96 prefer: false,
97 }`,
Martin Stjernholm009a9dc2020-03-05 17:34:13 +000098 prebuilt: nil,
Colin Cross0d614dd2016-10-14 15:38:43 -070099 },
100 {
101 name: "prebuilt no file preferred",
102 modules: `
103 source {
104 name: "bar",
105 }
Martin Stjernholm009a9dc2020-03-05 17:34:13 +0000106
Colin Cross0d614dd2016-10-14 15:38:43 -0700107 prebuilt {
108 name: "bar",
109 prefer: true,
110 }`,
Martin Stjernholm009a9dc2020-03-05 17:34:13 +0000111 prebuilt: nil,
Colin Cross0d614dd2016-10-14 15:38:43 -0700112 },
Pirama Arumuga Nainar955dc492018-04-17 14:58:42 -0700113 {
114 name: "prebuilt file from filegroup preferred",
115 modules: `
116 filegroup {
117 name: "fg",
Jiyong Parkd4671112019-04-19 17:23:04 +0900118 srcs: ["prebuilt_file"],
Pirama Arumuga Nainar955dc492018-04-17 14:58:42 -0700119 }
120 prebuilt {
121 name: "bar",
122 prefer: true,
123 srcs: [":fg"],
124 }`,
Martin Stjernholmf4677322020-07-07 02:20:40 +0100125 prebuilt: []OsType{Android, BuildOs},
Martin Stjernholm009a9dc2020-03-05 17:34:13 +0000126 },
127 {
128 name: "prebuilt module for device only",
129 modules: `
130 source {
131 name: "bar",
132 }
133
134 prebuilt {
135 name: "bar",
136 host_supported: false,
137 prefer: true,
138 srcs: ["prebuilt_file"],
139 }`,
Martin Stjernholmf4677322020-07-07 02:20:40 +0100140 prebuilt: []OsType{Android},
Martin Stjernholm009a9dc2020-03-05 17:34:13 +0000141 },
142 {
143 name: "prebuilt file for host only",
144 modules: `
145 source {
146 name: "bar",
147 }
148
149 prebuilt {
150 name: "bar",
151 prefer: true,
152 target: {
Paul Duffin69304cf2020-05-29 08:01:00 +0100153 host: {
Martin Stjernholm009a9dc2020-03-05 17:34:13 +0000154 srcs: ["prebuilt_file"],
155 },
156 },
157 }`,
Martin Stjernholmf4677322020-07-07 02:20:40 +0100158 prebuilt: []OsType{BuildOs},
Pirama Arumuga Nainar955dc492018-04-17 14:58:42 -0700159 },
Jaewoong Jungfb25a642020-06-11 10:37:51 -0700160 {
161 name: "prebuilt override not preferred",
162 modules: `
163 source {
164 name: "baz",
165 }
166
167 override_source {
168 name: "bar",
169 base: "baz",
170 }
171
172 prebuilt {
173 name: "bar",
174 prefer: false,
175 srcs: ["prebuilt_file"],
176 }`,
177 prebuilt: nil,
178 },
179 {
180 name: "prebuilt override preferred",
181 modules: `
182 source {
183 name: "baz",
184 }
185
186 override_source {
187 name: "bar",
188 base: "baz",
189 }
190
191 prebuilt {
192 name: "bar",
193 prefer: true,
194 srcs: ["prebuilt_file"],
195 }`,
Martin Stjernholmf4677322020-07-07 02:20:40 +0100196 prebuilt: []OsType{Android, BuildOs},
197 },
198 {
199 name: "prebuilt including default-disabled OS",
200 replaceBp: true,
201 modules: `
202 source {
203 name: "foo",
204 deps: [":bar"],
205 target: {
206 windows: {
207 enabled: true,
208 },
209 },
210 }
211
212 source {
213 name: "bar",
214 target: {
215 windows: {
216 enabled: true,
217 },
218 },
219 }
220
221 prebuilt {
222 name: "bar",
223 prefer: true,
224 srcs: ["prebuilt_file"],
225 target: {
226 windows: {
227 enabled: true,
228 },
229 },
230 }`,
231 prebuilt: []OsType{Android, BuildOs, Windows},
232 },
233 {
234 name: "fall back to source for default-disabled OS",
235 replaceBp: true,
236 modules: `
237 source {
238 name: "foo",
239 deps: [":bar"],
240 target: {
241 windows: {
242 enabled: true,
243 },
244 },
245 }
246
247 source {
248 name: "bar",
249 target: {
250 windows: {
251 enabled: true,
252 },
253 },
254 }
255
256 prebuilt {
257 name: "bar",
258 prefer: true,
259 srcs: ["prebuilt_file"],
260 }`,
261 prebuilt: []OsType{Android, BuildOs},
Jaewoong Jungfb25a642020-06-11 10:37:51 -0700262 },
Liz Kammer69d64132021-06-24 13:03:06 -0400263 {
264 name: "prebuilt properties customizable",
265 replaceBp: true,
266 modules: `
267 source {
268 name: "foo",
269 deps: [":bar"],
270 }
271
272 soong_config_module_type {
273 name: "prebuilt_with_config",
274 module_type: "prebuilt",
275 config_namespace: "any_namespace",
276 bool_variables: ["bool_var"],
277 properties: ["prefer"],
278 }
279
280 prebuilt_with_config {
281 name: "bar",
282 prefer: true,
283 srcs: ["prebuilt_file"],
284 soong_config_variables: {
285 bool_var: {
286 prefer: false,
287 conditions_default: {
288 prefer: true,
289 },
290 },
291 },
292 }`,
293 prebuilt: []OsType{Android, BuildOs},
294 },
Paul Duffin0c52c7b2021-07-06 17:15:25 +0100295 {
296 name: "prebuilt use_source_config_var={acme, use_source} - no var specified",
297 modules: `
298 source {
299 name: "bar",
300 }
301
302 prebuilt {
303 name: "bar",
304 use_source_config_var: {config_namespace: "acme", var_name: "use_source"},
305 srcs: ["prebuilt_file"],
306 }`,
307 // When use_source_env is specified then it will use the prebuilt by default if the environment
308 // variable is not set.
309 prebuilt: []OsType{Android, BuildOs},
310 },
311 {
312 name: "prebuilt use_source_config_var={acme, use_source} - acme_use_source=false",
313 modules: `
314 source {
315 name: "bar",
316 }
317
318 prebuilt {
319 name: "bar",
320 use_source_config_var: {config_namespace: "acme", var_name: "use_source"},
321 srcs: ["prebuilt_file"],
322 }`,
323 preparer: FixtureModifyProductVariables(func(variables FixtureProductVariables) {
324 variables.VendorVars = map[string]map[string]string{
325 "acme": {
326 "use_source": "false",
327 },
328 }
329 }),
330 // Setting the environment variable named in use_source_env to false will cause the prebuilt to
331 // be used.
332 prebuilt: []OsType{Android, BuildOs},
333 },
334 {
335 name: "prebuilt use_source_config_var={acme, use_source} - acme_use_source=true",
336 modules: `
337 source {
338 name: "bar",
339 }
340
341 prebuilt {
342 name: "bar",
343 use_source_config_var: {config_namespace: "acme", var_name: "use_source"},
344 srcs: ["prebuilt_file"],
345 }`,
346 preparer: FixtureModifyProductVariables(func(variables FixtureProductVariables) {
347 variables.VendorVars = map[string]map[string]string{
348 "acme": {
349 "use_source": "true",
350 },
351 }
352 }),
353 // Setting the environment variable named in use_source_env to true will cause the source to be
354 // used.
355 prebuilt: nil,
356 },
357 {
358 name: "prebuilt use_source_config_var={acme, use_source} - acme_use_source=true, no source",
359 modules: `
360 prebuilt {
361 name: "bar",
362 use_source_config_var: {config_namespace: "acme", var_name: "use_source"},
363 srcs: ["prebuilt_file"],
364 }`,
365 preparer: FixtureModifyProductVariables(func(variables FixtureProductVariables) {
366 variables.VendorVars = map[string]map[string]string{
367 "acme": {
368 "use_source": "true",
369 },
370 }
371 }),
372 // Although the environment variable says to use source there is no source available.
373 prebuilt: []OsType{Android, BuildOs},
374 },
Colin Crossce75d2c2016-10-06 16:12:58 -0700375}
376
377func TestPrebuilts(t *testing.T) {
Paul Duffin35816122021-02-24 01:49:52 +0000378 fs := MockFS{
Colin Cross98be1bb2019-12-13 20:41:13 -0800379 "prebuilt_file": nil,
380 "source_file": nil,
381 }
Colin Cross0d614dd2016-10-14 15:38:43 -0700382
Colin Crossce75d2c2016-10-06 16:12:58 -0700383 for _, test := range prebuiltsTests {
384 t.Run(test.name, func(t *testing.T) {
Martin Stjernholmf4677322020-07-07 02:20:40 +0100385 bp := test.modules
386 if !test.replaceBp {
387 bp = bp + `
388 source {
389 name: "foo",
390 deps: [":bar"],
391 }`
392 }
Colin Cross98be1bb2019-12-13 20:41:13 -0800393
Martin Stjernholmf4677322020-07-07 02:20:40 +0100394 // Add windows to the target list to test the logic when a variant is
395 // disabled by default.
396 if !Windows.DefaultDisabled {
397 t.Errorf("windows is assumed to be disabled by default")
398 }
Martin Stjernholmf4677322020-07-07 02:20:40 +0100399
Paul Duffin30ac3e72021-03-20 00:36:14 +0000400 result := GroupFixturePreparers(
Paul Duffin35816122021-02-24 01:49:52 +0000401 PrepareForTestWithArchMutator,
402 PrepareForTestWithPrebuilts,
403 PrepareForTestWithOverrides,
404 PrepareForTestWithFilegroup,
405 // Add a Windows target to the configuration.
406 FixtureModifyConfig(func(config Config) {
407 config.Targets[Windows] = []Target{
408 {Windows, Arch{ArchType: X86_64}, NativeBridgeDisabled, "", "", true},
409 }
410 }),
411 fs.AddToFixture(),
412 FixtureRegisterWithContext(registerTestPrebuiltModules),
Paul Duffin0c52c7b2021-07-06 17:15:25 +0100413 OptionalFixturePreparer(test.preparer),
Paul Duffin35816122021-02-24 01:49:52 +0000414 ).RunTestWithBp(t, bp)
Colin Crossce75d2c2016-10-06 16:12:58 -0700415
Paul Duffin35816122021-02-24 01:49:52 +0000416 for _, variant := range result.ModuleVariantsForTests("foo") {
417 foo := result.ModuleForTests("foo", variant)
Martin Stjernholmf4677322020-07-07 02:20:40 +0100418 t.Run(foo.Module().Target().Os.String(), func(t *testing.T) {
Martin Stjernholm009a9dc2020-03-05 17:34:13 +0000419 var dependsOnSourceModule, dependsOnPrebuiltModule bool
Paul Duffin35816122021-02-24 01:49:52 +0000420 result.VisitDirectDeps(foo.Module(), func(m blueprint.Module) {
Martin Stjernholm009a9dc2020-03-05 17:34:13 +0000421 if _, ok := m.(*sourceModule); ok {
422 dependsOnSourceModule = true
423 }
424 if p, ok := m.(*prebuiltModule); ok {
425 dependsOnPrebuiltModule = true
426 if !p.Prebuilt().properties.UsePrebuilt {
427 t.Errorf("dependency on prebuilt module not marked used")
428 }
429 }
430 })
Colin Crossce75d2c2016-10-06 16:12:58 -0700431
Martin Stjernholmf4677322020-07-07 02:20:40 +0100432 moduleIsDisabled := !foo.Module().Enabled()
Martin Stjernholm009a9dc2020-03-05 17:34:13 +0000433 deps := foo.Module().(*sourceModule).deps
Martin Stjernholmf4677322020-07-07 02:20:40 +0100434 if moduleIsDisabled {
435 if len(deps) > 0 {
436 t.Errorf("disabled module got deps: %v", deps)
437 }
438 } else {
439 if len(deps) != 1 {
440 t.Errorf("deps does not have single path, but is %v", deps)
441 }
Colin Crossc3e7fa62017-03-17 13:14:32 -0700442 }
Martin Stjernholmf4677322020-07-07 02:20:40 +0100443
Martin Stjernholm009a9dc2020-03-05 17:34:13 +0000444 var usingSourceFile, usingPrebuiltFile bool
Martin Stjernholmf4677322020-07-07 02:20:40 +0100445 if len(deps) > 0 && deps[0].String() == "source_file" {
Martin Stjernholm009a9dc2020-03-05 17:34:13 +0000446 usingSourceFile = true
447 }
Martin Stjernholmf4677322020-07-07 02:20:40 +0100448 if len(deps) > 0 && deps[0].String() == "prebuilt_file" {
Martin Stjernholm009a9dc2020-03-05 17:34:13 +0000449 usingPrebuiltFile = true
450 }
Colin Crossc3e7fa62017-03-17 13:14:32 -0700451
Martin Stjernholm009a9dc2020-03-05 17:34:13 +0000452 prebuilt := false
453 for _, os := range test.prebuilt {
Martin Stjernholmf4677322020-07-07 02:20:40 +0100454 if os == foo.Module().Target().Os {
Martin Stjernholm009a9dc2020-03-05 17:34:13 +0000455 prebuilt = true
456 }
457 }
Jiyong Parkd4671112019-04-19 17:23:04 +0900458
Martin Stjernholm009a9dc2020-03-05 17:34:13 +0000459 if prebuilt {
Martin Stjernholmf4677322020-07-07 02:20:40 +0100460 if moduleIsDisabled {
461 t.Errorf("dependent module for prebuilt is disabled")
462 }
463
Martin Stjernholm009a9dc2020-03-05 17:34:13 +0000464 if !dependsOnPrebuiltModule {
465 t.Errorf("doesn't depend on prebuilt module")
466 }
467 if !usingPrebuiltFile {
468 t.Errorf("doesn't use prebuilt_file")
469 }
Colin Crossce75d2c2016-10-06 16:12:58 -0700470
Martin Stjernholm009a9dc2020-03-05 17:34:13 +0000471 if dependsOnSourceModule {
472 t.Errorf("depends on source module")
473 }
474 if usingSourceFile {
475 t.Errorf("using source_file")
476 }
Martin Stjernholmf4677322020-07-07 02:20:40 +0100477 } else if !moduleIsDisabled {
Martin Stjernholm009a9dc2020-03-05 17:34:13 +0000478 if dependsOnPrebuiltModule {
479 t.Errorf("depends on prebuilt module")
480 }
481 if usingPrebuiltFile {
482 t.Errorf("using prebuilt_file")
483 }
Colin Crossce75d2c2016-10-06 16:12:58 -0700484
Martin Stjernholm009a9dc2020-03-05 17:34:13 +0000485 if !dependsOnSourceModule {
486 t.Errorf("doesn't depend on source module")
487 }
488 if !usingSourceFile {
489 t.Errorf("doesn't use source_file")
490 }
491 }
492 })
Colin Crossce75d2c2016-10-06 16:12:58 -0700493 }
494 })
495 }
Colin Crossce75d2c2016-10-06 16:12:58 -0700496}
497
Paul Duffin78ac5b92020-01-14 12:42:08 +0000498func registerTestPrebuiltBuildComponents(ctx RegistrationContext) {
Paul Duffin35816122021-02-24 01:49:52 +0000499 registerTestPrebuiltModules(ctx)
Paul Duffin78ac5b92020-01-14 12:42:08 +0000500
501 RegisterPrebuiltMutators(ctx)
Jaewoong Jungfb25a642020-06-11 10:37:51 -0700502 ctx.PostDepsMutators(RegisterOverridePostDepsMutators)
Paul Duffin78ac5b92020-01-14 12:42:08 +0000503}
504
Paul Duffincfd33742021-02-27 11:59:02 +0000505var prepareForTestWithFakePrebuiltModules = FixtureRegisterWithContext(registerTestPrebuiltModules)
506
Paul Duffin35816122021-02-24 01:49:52 +0000507func registerTestPrebuiltModules(ctx RegistrationContext) {
508 ctx.RegisterModuleType("prebuilt", newPrebuiltModule)
509 ctx.RegisterModuleType("source", newSourceModule)
510 ctx.RegisterModuleType("override_source", newOverrideSourceModule)
Liz Kammer69d64132021-06-24 13:03:06 -0400511 ctx.RegisterModuleType("soong_config_module_type", soongConfigModuleTypeFactory)
512 ctx.RegisterModuleType("soong_config_string_variable", soongConfigStringVariableDummyFactory)
513 ctx.RegisterModuleType("soong_config_bool_variable", soongConfigBoolVariableDummyFactory)
Paul Duffin35816122021-02-24 01:49:52 +0000514}
515
Colin Crossce75d2c2016-10-06 16:12:58 -0700516type prebuiltModule struct {
517 ModuleBase
Colin Cross74d73e22017-08-02 11:05:49 -0700518 prebuilt Prebuilt
519 properties struct {
Martin Stjernholm009a9dc2020-03-05 17:34:13 +0000520 Srcs []string `android:"path,arch_variant"`
Colin Cross74d73e22017-08-02 11:05:49 -0700521 }
Jiyong Parkd4671112019-04-19 17:23:04 +0900522 src Path
Colin Crossce75d2c2016-10-06 16:12:58 -0700523}
524
Colin Cross36242852017-06-23 15:06:31 -0700525func newPrebuiltModule() Module {
Colin Crossce75d2c2016-10-06 16:12:58 -0700526 m := &prebuiltModule{}
Colin Cross74d73e22017-08-02 11:05:49 -0700527 m.AddProperties(&m.properties)
528 InitPrebuiltModule(m, &m.properties.Srcs)
Martin Stjernholm009a9dc2020-03-05 17:34:13 +0000529 InitAndroidArchModule(m, HostAndDeviceDefault, MultilibCommon)
Colin Cross36242852017-06-23 15:06:31 -0700530 return m
Colin Crossce75d2c2016-10-06 16:12:58 -0700531}
532
533func (p *prebuiltModule) Name() string {
534 return p.prebuilt.Name(p.ModuleBase.Name())
535}
536
Jiyong Parkd4671112019-04-19 17:23:04 +0900537func (p *prebuiltModule) GenerateAndroidBuildActions(ctx ModuleContext) {
538 if len(p.properties.Srcs) >= 1 {
539 p.src = p.prebuilt.SingleSourcePath(ctx)
540 }
Colin Crossce75d2c2016-10-06 16:12:58 -0700541}
542
543func (p *prebuiltModule) Prebuilt() *Prebuilt {
544 return &p.prebuilt
545}
546
Colin Cross41955e82019-05-29 14:40:35 -0700547func (p *prebuiltModule) OutputFiles(tag string) (Paths, error) {
548 switch tag {
549 case "":
550 return Paths{p.src}, nil
551 default:
552 return nil, fmt.Errorf("unsupported module reference tag %q", tag)
553 }
Jiyong Parkd4671112019-04-19 17:23:04 +0900554}
555
Jaewoong Jungfb25a642020-06-11 10:37:51 -0700556type sourceModuleProperties struct {
557 Deps []string `android:"path,arch_variant"`
558}
559
Colin Crossce75d2c2016-10-06 16:12:58 -0700560type sourceModule struct {
561 ModuleBase
Jaewoong Jungfb25a642020-06-11 10:37:51 -0700562 OverridableModuleBase
563
564 properties sourceModuleProperties
Colin Crossce75d2c2016-10-06 16:12:58 -0700565 dependsOnSourceModule, dependsOnPrebuiltModule bool
Jiyong Parkd4671112019-04-19 17:23:04 +0900566 deps Paths
567 src Path
Colin Crossce75d2c2016-10-06 16:12:58 -0700568}
569
Colin Cross36242852017-06-23 15:06:31 -0700570func newSourceModule() Module {
Colin Crossce75d2c2016-10-06 16:12:58 -0700571 m := &sourceModule{}
Colin Cross36242852017-06-23 15:06:31 -0700572 m.AddProperties(&m.properties)
Martin Stjernholm009a9dc2020-03-05 17:34:13 +0000573 InitAndroidArchModule(m, HostAndDeviceDefault, MultilibCommon)
Jaewoong Jungfb25a642020-06-11 10:37:51 -0700574 InitOverridableModule(m, nil)
Colin Cross36242852017-06-23 15:06:31 -0700575 return m
Colin Crossce75d2c2016-10-06 16:12:58 -0700576}
577
Jaewoong Jungfb25a642020-06-11 10:37:51 -0700578func (s *sourceModule) OverridablePropertiesDepsMutator(ctx BottomUpMutatorContext) {
Jiyong Parkd4671112019-04-19 17:23:04 +0900579 // s.properties.Deps are annotated with android:path, so they are
580 // automatically added to the dependency by pathDeps mutator
Colin Crossce75d2c2016-10-06 16:12:58 -0700581}
582
583func (s *sourceModule) GenerateAndroidBuildActions(ctx ModuleContext) {
Jiyong Parkd4671112019-04-19 17:23:04 +0900584 s.deps = PathsForModuleSrc(ctx, s.properties.Deps)
585 s.src = PathForModuleSrc(ctx, "source_file")
586}
587
588func (s *sourceModule) Srcs() Paths {
589 return Paths{s.src}
Colin Crossce75d2c2016-10-06 16:12:58 -0700590}
Jaewoong Jungfb25a642020-06-11 10:37:51 -0700591
592type overrideSourceModule struct {
593 ModuleBase
594 OverrideModuleBase
595}
596
597func (o *overrideSourceModule) GenerateAndroidBuildActions(_ ModuleContext) {
598}
599
600func newOverrideSourceModule() Module {
601 m := &overrideSourceModule{}
602 m.AddProperties(&sourceModuleProperties{})
603
604 InitAndroidArchModule(m, HostAndDeviceDefault, MultilibCommon)
605 InitOverrideModule(m)
606 return m
607}