diff options
Diffstat (limited to 'android/bazel.go')
-rw-r--r-- | android/bazel.go | 68 |
1 files changed, 49 insertions, 19 deletions
diff --git a/android/bazel.go b/android/bazel.go index cf27cb464..3bc104d1d 100644 --- a/android/bazel.go +++ b/android/bazel.go @@ -15,6 +15,7 @@ package android import ( + "android/soong/bazel" "fmt" "io/ioutil" "path/filepath" @@ -24,34 +25,33 @@ import ( "github.com/google/blueprint/proptools" ) -type bazelModuleProperties struct { - // The label of the Bazel target replacing this Soong module. When run in conversion mode, this - // will import the handcrafted build target into the autogenerated file. Note: this may result in - // a conflict due to duplicate targets if bp2build_available is also set. - Label *string - - // If true, bp2build will generate the converted Bazel target for this module. Note: this may - // cause a conflict due to the duplicate targets if label is also set. - // - // This is a bool pointer to support tristates: true, false, not set. - // - // To opt-in a module, set bazel_module: { bp2build_available: true } - // To opt-out a module, set bazel_module: { bp2build_available: false } - // To defer the default setting for the directory, do not set the value. - Bp2build_available *bool -} - // Properties contains common module properties for Bazel migration purposes. type properties struct { // In USE_BAZEL_ANALYSIS=1 mode, this represents the Bazel target replacing // this Soong module. - Bazel_module bazelModuleProperties + Bazel_module bazel.BazelModuleProperties } +type namespacedVariableProperties map[string]interface{} + // BazelModuleBase contains the property structs with metadata for modules which can be converted to // Bazel. type BazelModuleBase struct { bazelProperties properties + + // namespacedVariableProperties is used for soong_config_module_type support + // in bp2build. Soong config modules allow users to set module properties + // based on custom product variables defined in Android.bp files. These + // variables are namespaced to prevent clobbering, especially when set from + // Makefiles. + namespacedVariableProperties namespacedVariableProperties + + // baseModuleType is set when this module was created from a module type + // defined by a soong_config_module_type. Every soong_config_module_type + // "wraps" another module type, e.g. a soong_config_module_type can wrap a + // cc_defaults to a custom_cc_defaults, or cc_binary to a custom_cc_binary. + // This baseModuleType is set to the wrapped module type. + baseModuleType string } // Bazelable is specifies the interface for modules that can be converted to Bazel. @@ -63,6 +63,12 @@ type Bazelable interface { ConvertWithBp2build(ctx BazelConversionContext) bool convertWithBp2build(ctx BazelConversionContext, module blueprint.Module) bool GetBazelBuildFileContents(c Config, path, name string) (string, error) + + // For namespaced config variable support + namespacedVariableProps() namespacedVariableProperties + setNamespacedVariableProps(props namespacedVariableProperties) + BaseModuleType() string + SetBaseModuleType(string) } // BazelModule is a lightweight wrapper interface around Module for Bazel-convertible modules. @@ -82,6 +88,22 @@ func (b *BazelModuleBase) bazelProps() *properties { return &b.bazelProperties } +func (b *BazelModuleBase) namespacedVariableProps() namespacedVariableProperties { + return b.namespacedVariableProperties +} + +func (b *BazelModuleBase) setNamespacedVariableProps(props namespacedVariableProperties) { + b.namespacedVariableProperties = props +} + +func (b *BazelModuleBase) BaseModuleType() string { + return b.baseModuleType +} + +func (b *BazelModuleBase) SetBaseModuleType(baseModuleType string) { + b.baseModuleType = baseModuleType +} + // HasHandcraftedLabel returns whether this module has a handcrafted Bazel label. func (b *BazelModuleBase) HasHandcraftedLabel() bool { return b.bazelProperties.Bazel_module.Label != nil @@ -399,7 +421,15 @@ func (b *BazelModuleBase) convertWithBp2build(ctx BazelConversionContext, module // prevents mixed builds from using auto-converted modules just by matching // the package dir; it also has to have a bp2build mutator as well. if ctx.Config().bp2buildModuleTypeConfig[ctx.OtherModuleType(module)] == false { - return false + if b, ok := module.(Bazelable); ok && b.BaseModuleType() != "" { + // For modules with custom types from soong_config_module_types, + // check that their _base module type_ has a bp2build mutator. + if ctx.Config().bp2buildModuleTypeConfig[b.BaseModuleType()] == false { + return false + } + } else { + return false + } } packagePath := ctx.OtherModuleDir(module) |