bp2build: support full/lite protos in cc libs
Test: bp2build.sh Bug: 200601772 Change-Id: I3a7e00546726bc63b5eb8d5604557c5988a5320b
This commit is contained in:
@@ -15,12 +15,17 @@
|
||||
package android
|
||||
|
||||
import (
|
||||
"android/soong/bazel"
|
||||
"strings"
|
||||
|
||||
"github.com/google/blueprint"
|
||||
"github.com/google/blueprint/proptools"
|
||||
)
|
||||
|
||||
const (
|
||||
canonicalPathFromRootDefault = true
|
||||
)
|
||||
|
||||
// TODO(ccross): protos are often used to communicate between multiple modules. If the only
|
||||
// way to convert a proto to source is to reference it as a source file, and external modules cannot
|
||||
// reference source files in other modules, then every module that owns a proto file will need to
|
||||
@@ -90,7 +95,7 @@ func GetProtoFlags(ctx ModuleContext, p *ProtoProperties) ProtoFlags {
|
||||
Flags: flags,
|
||||
Deps: deps,
|
||||
OutTypeFlag: protoOutFlag,
|
||||
CanonicalPathFromRoot: proptools.BoolDefault(p.Proto.Canonical_path_from_root, true),
|
||||
CanonicalPathFromRoot: proptools.BoolDefault(p.Proto.Canonical_path_from_root, canonicalPathFromRootDefault),
|
||||
Dir: PathForModuleGen(ctx, "proto"),
|
||||
SubDir: PathForModuleGen(ctx, "proto", ctx.ModuleDir()),
|
||||
}
|
||||
@@ -146,3 +151,57 @@ func ProtoRule(rule *RuleBuilder, protoFile Path, flags ProtoFlags, deps Paths,
|
||||
rule.Command().
|
||||
BuiltTool("dep_fixer").Flag(depFile.String())
|
||||
}
|
||||
|
||||
// Bp2buildProtoInfo contains information necessary to pass on to language specific conversion.
|
||||
type Bp2buildProtoInfo struct {
|
||||
Type *string
|
||||
Name string
|
||||
}
|
||||
|
||||
type protoAttrs struct {
|
||||
Srcs bazel.LabelListAttribute
|
||||
Strip_import_prefix *string
|
||||
}
|
||||
|
||||
// Bp2buildProtoProperties converts proto properties, creating a proto_library and returning the
|
||||
// information necessary for language-specific handling.
|
||||
func Bp2buildProtoProperties(ctx Bp2buildMutatorContext, module Module, srcs bazel.LabelListAttribute) (Bp2buildProtoInfo, bool) {
|
||||
var info Bp2buildProtoInfo
|
||||
if srcs.IsEmpty() {
|
||||
return info, false
|
||||
}
|
||||
m := module.base()
|
||||
|
||||
info.Name = m.Name() + "_proto"
|
||||
attrs := protoAttrs{
|
||||
Srcs: srcs,
|
||||
}
|
||||
|
||||
for axis, configToProps := range m.GetArchVariantProperties(ctx, &ProtoProperties{}) {
|
||||
for _, rawProps := range configToProps {
|
||||
var props *ProtoProperties
|
||||
var ok bool
|
||||
if props, ok = rawProps.(*ProtoProperties); !ok {
|
||||
ctx.ModuleErrorf("Could not cast ProtoProperties to expected type")
|
||||
}
|
||||
if axis == bazel.NoConfigAxis {
|
||||
info.Type = props.Proto.Type
|
||||
|
||||
if proptools.BoolDefault(props.Proto.Canonical_path_from_root, canonicalPathFromRootDefault) {
|
||||
// an empty string indicates to strips the package path
|
||||
path := ""
|
||||
attrs.Strip_import_prefix = &path
|
||||
}
|
||||
} else if props.Proto.Type != info.Type && props.Proto.Type != nil {
|
||||
ctx.ModuleErrorf("Cannot handle arch-variant types for protos at this time.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ctx.CreateBazelTargetModule(
|
||||
bazel.BazelTargetModuleProperties{Rule_class: "proto_library"},
|
||||
CommonAttributes{Name: info.Name},
|
||||
&attrs)
|
||||
|
||||
return info, true
|
||||
}
|
||||
|
Reference in New Issue
Block a user