Handle product_variable asflag for cc_object.

cc_object crtbrand sets product_variable.platform_sdk_version.asflag
and will not compile correctly within mixed builds without it.

Only handles product_variables that expand product variables.

Bug: 181794963
Test: ~/aosp/build/bazel/scripts/milestone-2/demo.sh full
Change-Id: I293fcb18032aa51f63bb7b3de94abd6d1ec38180
This commit is contained in:
Liz Kammer
2021-03-24 10:14:47 -04:00
parent dca349a782
commit a060c4521e
5 changed files with 134 additions and 1 deletions

View File

@@ -106,6 +106,7 @@ type bazelObjectAttributes struct {
Srcs bazel.LabelList
Deps bazel.LabelList
Copts bazel.StringListAttribute
Asflags []string
Local_include_dirs []string
}
@@ -150,6 +151,7 @@ func ObjectBp2Build(ctx android.TopDownMutatorContext) {
var srcs []string
var excludeSrcs []string
var localIncludeDirs []string
var asFlags []string
for _, props := range m.compiler.compilerProps() {
if baseCompilerProps, ok := props.(*BaseCompilerProperties); ok {
copts.Value = baseCompilerProps.Cflags
@@ -171,6 +173,23 @@ func ObjectBp2Build(ctx android.TopDownMutatorContext) {
}
}
productVariableProps := android.ProductVariableProperties(ctx)
if props, exists := productVariableProps["Asflags"]; exists {
// TODO(b/183595873): consider deduplicating handling of product variable properties
for _, prop := range props {
flags, ok := prop.Property.([]string)
if !ok {
ctx.ModuleErrorf("Could not convert product variable asflag property")
return
}
// TODO(b/183595873) handle other product variable usages -- as selects?
if newFlags, subbed := bazel.TryVariableSubstitutions(flags, prop.ProductConfigVariable); subbed {
asFlags = append(asFlags, newFlags...)
}
}
}
// TODO(b/183595872) warn/error if we're not handling product variables
for arch, p := range m.GetArchProperties(&BaseCompilerProperties{}) {
if cProps, ok := p.(*BaseCompilerProperties); ok {
copts.SetValueForArch(arch.Name, cProps.Cflags)
@@ -182,6 +201,7 @@ func ObjectBp2Build(ctx android.TopDownMutatorContext) {
Srcs: android.BazelLabelForModuleSrcExcludes(ctx, srcs, excludeSrcs),
Deps: deps,
Copts: copts,
Asflags: asFlags,
Local_include_dirs: localIncludeDirs,
}