bp2build: add support for soong_config_module_type.
Test: CI, go unit test Bug: 198556411 Change-Id: Idf862904d51d822f92af0c072341c31b7a02fc64
This commit is contained in:
@@ -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)
|
||||
|
Reference in New Issue
Block a user