Merge "Use one mutator for all bp2build conversion." am: 92344259c5

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1878397

Change-Id: I5ccd9e98e9a3907112100f94dd5e62193a8f90a9
This commit is contained in:
Liz Kammer 2021-12-14 19:24:38 +00:00 committed by Automerger Merge Worker
commit 782f37eaee
46 changed files with 689 additions and 1010 deletions

View file

@ -39,6 +39,10 @@ type bazelModuleProperties struct {
// 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
// CanConvertToBazel is set via InitBazelModule to indicate that a module type can be converted to
// Bazel with Bp2build.
CanConvertToBazel bool `blueprint:"mutated"`
}
// Properties contains common module properties for Bazel migration purposes.
@ -80,9 +84,10 @@ type Bazelable interface {
HasHandcraftedLabel() bool
HandcraftedLabel() string
GetBazelLabel(ctx BazelConversionPathContext, module blueprint.Module) string
ConvertWithBp2build(ctx BazelConversionContext) bool
convertWithBp2build(ctx BazelConversionContext, module blueprint.Module) bool
ShouldConvertWithBp2build(ctx BazelConversionContext) bool
shouldConvertWithBp2build(ctx BazelConversionContext, module blueprint.Module) bool
GetBazelBuildFileContents(c Config, path, name string) (string, error)
ConvertWithBp2build(ctx TopDownMutatorContext)
// namespacedVariableProps is a map from a soong config variable namespace
// (e.g. acme, android) to a map of interfaces{}, which are really
@ -109,6 +114,7 @@ type BazelModule interface {
// properties.
func InitBazelModule(module BazelModule) {
module.AddProperties(module.bazelProps())
module.bazelProps().Bazel_module.CanConvertToBazel = true
}
// bazelProps returns the Bazel properties for the given BazelModuleBase.
@ -147,7 +153,7 @@ func (b *BazelModuleBase) GetBazelLabel(ctx BazelConversionPathContext, module b
if b.HasHandcraftedLabel() {
return b.HandcraftedLabel()
}
if b.ConvertWithBp2build(ctx) {
if b.ShouldConvertWithBp2build(ctx) {
return bp2buildModuleLabel(ctx, module)
}
return "" // no label for unconverted module
@ -436,6 +442,9 @@ var (
"acvp_modulewrapper", // disabled for android x86/x86_64
"CarHTMLViewer", // depends on unconverted modules android.car-stubs, car-ui-lib
"libdexfile", // depends on unconverted modules: dexfile_operator_srcs, libartbase, libartpalette,
"libdexfiled", // depends on unconverted modules: dexfile_operator_srcs, libartbased, libartpalette
}
// Per-module denylist of cc_library modules to only generate the static
@ -530,32 +539,21 @@ func convertedToBazel(ctx BazelConversionContext, module blueprint.Module) bool
if !ok {
return false
}
return b.convertWithBp2build(ctx, module) || b.HasHandcraftedLabel()
return b.shouldConvertWithBp2build(ctx, module) || b.HasHandcraftedLabel()
}
// ConvertWithBp2build returns whether the given BazelModuleBase should be converted with bp2build.
func (b *BazelModuleBase) ConvertWithBp2build(ctx BazelConversionContext) bool {
return b.convertWithBp2build(ctx, ctx.Module())
// ShouldConvertWithBp2build returns whether the given BazelModuleBase should be converted with bp2build.
func (b *BazelModuleBase) ShouldConvertWithBp2build(ctx BazelConversionContext) bool {
return b.shouldConvertWithBp2build(ctx, ctx.Module())
}
func (b *BazelModuleBase) convertWithBp2build(ctx BazelConversionContext, module blueprint.Module) bool {
func (b *BazelModuleBase) shouldConvertWithBp2build(ctx BazelConversionContext, module blueprint.Module) bool {
if bp2buildModuleDoNotConvert[module.Name()] {
return false
}
// Ensure that the module type of this module has a bp2build converter. This
// 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 {
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
}
if !b.bazelProps().Bazel_module.CanConvertToBazel {
return false
}
packagePath := ctx.OtherModuleDir(module)
@ -629,3 +627,16 @@ func (b *BazelModuleBase) GetBazelBuildFileContents(c Config, path, name string)
}
return string(data[:]), nil
}
func registerBp2buildConversionMutator(ctx RegisterMutatorsContext) {
ctx.TopDown("bp2build_conversion", convertWithBp2build).Parallel()
}
func convertWithBp2build(ctx TopDownMutatorContext) {
bModule, ok := ctx.Module().(Bazelable)
if !ok || !bModule.shouldConvertWithBp2build(ctx, ctx.Module()) {
return
}
bModule.ConvertWithBp2build(ctx)
}

View file

@ -157,7 +157,6 @@ type config struct {
runningAsBp2Build bool
bp2buildPackageConfig Bp2BuildConfig
bp2buildModuleTypeConfig map[string]bool
Bp2buildSoongConfigDefinitions soongconfig.Bp2BuildSoongConfigDefinitions
// If testAllowNonExistentPaths is true then PathForSource and PathForModuleSrc won't error
@ -353,8 +352,6 @@ func TestConfig(buildDir string, env map[string]string, bp string, fs map[string
config.mockFileSystem(bp, fs)
config.bp2buildModuleTypeConfig = map[string]bool{}
determineBuildOS(config)
return Config{config}
@ -522,7 +519,6 @@ func NewConfig(moduleListFile string, runGoTests bool, outDir, soongOutDir strin
config.BazelContext, err = NewBazelContext(config)
config.bp2buildPackageConfig = bp2buildDefaultConfig
config.bp2buildModuleTypeConfig = make(map[string]bool)
return Config{config}, err
}

View file

@ -173,6 +173,10 @@ func (d *DefaultsModuleBase) productVariableProperties() interface{} {
func (d *DefaultsModuleBase) GenerateAndroidBuildActions(ctx ModuleContext) {
}
// ConvertWithBp2build to fulfill Bazelable interface; however, at this time defaults module are
// *NOT* converted with bp2build
func (defaultable *DefaultsModuleBase) ConvertWithBp2build(ctx TopDownMutatorContext) {}
func InitDefaultsModule(module DefaultsModule) {
commonProperties := &commonProperties{}

View file

@ -22,7 +22,6 @@ import (
func init() {
RegisterModuleType("filegroup", FileGroupFactory)
RegisterBp2BuildMutator("filegroup", FilegroupBp2Build)
}
var PrepareForTestWithFilegroup = FixtureRegisterWithContext(func(ctx RegistrationContext) {
@ -34,12 +33,8 @@ type bazelFilegroupAttributes struct {
Srcs bazel.LabelListAttribute
}
func FilegroupBp2Build(ctx TopDownMutatorContext) {
fg, ok := ctx.Module().(*fileGroup)
if !ok || !fg.ConvertWithBp2build(ctx) {
return
}
// ConvertWithBp2build performs bp2build conversion of filegroup
func (fg *fileGroup) ConvertWithBp2build(ctx TopDownMutatorContext) {
srcs := bazel.MakeLabelListAttribute(
BazelLabelForModuleSrcExcludes(ctx, fg.properties.Srcs, fg.properties.Exclude_srcs))

View file

@ -16,7 +16,6 @@ package android
import (
"reflect"
"sync"
"android/soong/bazel"
@ -34,12 +33,12 @@ import (
// continue on to GenerateAndroidBuildActions
// RegisterMutatorsForBazelConversion is a alternate registration pipeline for bp2build. Exported for testing.
func RegisterMutatorsForBazelConversion(ctx *Context, preArchMutators, bp2buildMutators []RegisterMutatorFunc) {
func RegisterMutatorsForBazelConversion(ctx *Context, preArchMutators []RegisterMutatorFunc) {
mctx := &registerMutatorsContext{
bazelConversionMode: true,
}
bp2buildPreArchMutators = append([]RegisterMutatorFunc{
bp2buildMutators := append([]RegisterMutatorFunc{
RegisterNamespaceMutator,
RegisterDefaultsPreArchMutators,
// TODO(b/165114590): this is required to resolve deps that are only prebuilts, but we should
@ -47,10 +46,7 @@ func RegisterMutatorsForBazelConversion(ctx *Context, preArchMutators, bp2buildM
RegisterPrebuiltsPreArchMutators,
},
preArchMutators...)
for _, f := range bp2buildPreArchMutators {
f(mctx)
}
bp2buildMutators = append(bp2buildMutators, registerBp2buildConversionMutator)
// Register bp2build mutators
for _, f := range bp2buildMutators {
@ -216,10 +212,6 @@ func FinalDepsMutators(f RegisterMutatorFunc) {
}
var bp2buildPreArchMutators = []RegisterMutatorFunc{}
var bp2buildMutators = map[string]RegisterMutatorFunc{}
// See http://b/192523357
var bp2buildLock sync.Mutex
// A minimal context for Bp2build conversion
type Bp2buildMutatorContext interface {
@ -228,21 +220,6 @@ type Bp2buildMutatorContext interface {
CreateBazelTargetModule(bazel.BazelTargetModuleProperties, CommonAttributes, interface{})
}
// RegisterBp2BuildMutator registers specially crafted mutators for
// converting Blueprint/Android modules into special modules that can
// be code-generated into Bazel BUILD targets.
//
// TODO(b/178068862): bring this into TestContext.
func RegisterBp2BuildMutator(moduleType string, m func(TopDownMutatorContext)) {
f := func(ctx RegisterMutatorsContext) {
ctx.TopDown(moduleType, m)
}
// Use a lock to avoid a concurrent map write if RegisterBp2BuildMutator is called in parallel
bp2buildLock.Lock()
defer bp2buildLock.Unlock()
bp2buildMutators[moduleType] = f
}
// PreArchBp2BuildMutators adds mutators to be register for converting Android Blueprint modules
// into Bazel BUILD targets that should run prior to deps and conversion.
func PreArchBp2BuildMutators(f RegisterMutatorFunc) {

View file

@ -178,13 +178,7 @@ func (ctx *Context) RegisterForBazelConversion() {
t.register(ctx)
}
bp2buildMutatorList := []RegisterMutatorFunc{}
for t, f := range bp2buildMutators {
ctx.config.bp2buildModuleTypeConfig[t] = true
bp2buildMutatorList = append(bp2buildMutatorList, f)
}
RegisterMutatorsForBazelConversion(ctx, bp2buildPreArchMutators, bp2buildMutatorList)
RegisterMutatorsForBazelConversion(ctx, bp2buildPreArchMutators)
}
// Register the pipeline of singletons, module types, and mutators for
@ -196,15 +190,6 @@ func (ctx *Context) Register() {
t.register(ctx)
}
if ctx.config.BazelContext.BazelEnabled() {
// Hydrate the configuration of bp2build-enabled module types. This is
// required as a signal to identify which modules should be deferred to
// Bazel in mixed builds, if it is enabled.
for t, _ := range bp2buildMutators {
ctx.config.bp2buildModuleTypeConfig[t] = true
}
}
mutators := collateGloballyRegisteredMutators()
mutators.registerAll(ctx)

View file

@ -208,16 +208,6 @@ func (ctx *TestContext) RegisterBp2BuildConfig(config Bp2BuildConfig) {
ctx.config.bp2buildPackageConfig = config
}
// RegisterBp2BuildMutator registers a BazelTargetModule mutator for converting a module
// type to the equivalent Bazel target.
func (ctx *TestContext) RegisterBp2BuildMutator(moduleType string, m func(TopDownMutatorContext)) {
f := func(ctx RegisterMutatorsContext) {
ctx.TopDown(moduleType, m)
}
ctx.config.bp2buildModuleTypeConfig[moduleType] = true
ctx.bp2buildMutators = append(ctx.bp2buildMutators, f)
}
// PreArchBp2BuildMutators adds mutators to be register for converting Android Blueprint modules
// into Bazel BUILD targets that should run prior to deps and conversion.
func (ctx *TestContext) PreArchBp2BuildMutators(f RegisterMutatorFunc) {
@ -459,7 +449,7 @@ func (ctx *TestContext) Register() {
// RegisterForBazelConversion prepares a test context for bp2build conversion.
func (ctx *TestContext) RegisterForBazelConversion() {
ctx.SetRunningAsBp2build()
RegisterMutatorsForBazelConversion(ctx.Context, ctx.bp2buildPreArch, ctx.bp2buildMutators)
RegisterMutatorsForBazelConversion(ctx.Context, ctx.bp2buildPreArch)
}
func (ctx *TestContext) ParseFileList(rootDir string, filePaths []string) (deps []string, errs []error) {

View file

@ -54,8 +54,6 @@ func registerApexBuildComponents(ctx android.RegistrationContext) {
ctx.PreArchMutators(registerPreArchMutators)
ctx.PreDepsMutators(RegisterPreDepsMutators)
ctx.PostDepsMutators(RegisterPostDepsMutators)
android.RegisterBp2BuildMutator("apex", ApexBundleBp2Build)
}
func registerPreArchMutators(ctx android.RegisterMutatorsContext) {
@ -3274,72 +3272,62 @@ type bazelApexBundleAttributes struct {
Prebuilts bazel.LabelListAttribute
}
func ApexBundleBp2Build(ctx android.TopDownMutatorContext) {
module, ok := ctx.Module().(*apexBundle)
if !ok {
// Not an APEX bundle
return
}
if !module.ConvertWithBp2build(ctx) {
return
}
// ConvertWithBp2build performs bp2build conversion of an apex
func (a *apexBundle) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
// We do not convert apex_test modules at this time
if ctx.ModuleType() != "apex" {
return
}
apexBundleBp2BuildInternal(ctx, module)
}
func apexBundleBp2BuildInternal(ctx android.TopDownMutatorContext, module *apexBundle) {
var manifestLabelAttribute bazel.LabelAttribute
if module.properties.Manifest != nil {
manifestLabelAttribute.SetValue(android.BazelLabelForModuleSrcSingle(ctx, *module.properties.Manifest))
if a.properties.Manifest != nil {
manifestLabelAttribute.SetValue(android.BazelLabelForModuleSrcSingle(ctx, *a.properties.Manifest))
}
var androidManifestLabelAttribute bazel.LabelAttribute
if module.properties.AndroidManifest != nil {
androidManifestLabelAttribute.SetValue(android.BazelLabelForModuleSrcSingle(ctx, *module.properties.AndroidManifest))
if a.properties.AndroidManifest != nil {
androidManifestLabelAttribute.SetValue(android.BazelLabelForModuleSrcSingle(ctx, *a.properties.AndroidManifest))
}
var fileContextsLabelAttribute bazel.LabelAttribute
if module.properties.File_contexts != nil {
fileContextsLabelAttribute.SetValue(android.BazelLabelForModuleDepSingle(ctx, *module.properties.File_contexts))
if a.properties.File_contexts != nil {
fileContextsLabelAttribute.SetValue(android.BazelLabelForModuleDepSingle(ctx, *a.properties.File_contexts))
}
var minSdkVersion *string
if module.properties.Min_sdk_version != nil {
minSdkVersion = module.properties.Min_sdk_version
if a.properties.Min_sdk_version != nil {
minSdkVersion = a.properties.Min_sdk_version
}
var keyLabelAttribute bazel.LabelAttribute
if module.overridableProperties.Key != nil {
keyLabelAttribute.SetValue(android.BazelLabelForModuleDepSingle(ctx, *module.overridableProperties.Key))
if a.overridableProperties.Key != nil {
keyLabelAttribute.SetValue(android.BazelLabelForModuleDepSingle(ctx, *a.overridableProperties.Key))
}
var certificateLabelAttribute bazel.LabelAttribute
if module.overridableProperties.Certificate != nil {
certificateLabelAttribute.SetValue(android.BazelLabelForModuleDepSingle(ctx, *module.overridableProperties.Certificate))
if a.overridableProperties.Certificate != nil {
certificateLabelAttribute.SetValue(android.BazelLabelForModuleDepSingle(ctx, *a.overridableProperties.Certificate))
}
nativeSharedLibs := module.properties.ApexNativeDependencies.Native_shared_libs
nativeSharedLibs := a.properties.ApexNativeDependencies.Native_shared_libs
nativeSharedLibsLabelList := android.BazelLabelForModuleDeps(ctx, nativeSharedLibs)
nativeSharedLibsLabelListAttribute := bazel.MakeLabelListAttribute(nativeSharedLibsLabelList)
prebuilts := module.overridableProperties.Prebuilts
prebuilts := a.overridableProperties.Prebuilts
prebuiltsLabelList := android.BazelLabelForModuleDeps(ctx, prebuilts)
prebuiltsLabelListAttribute := bazel.MakeLabelListAttribute(prebuiltsLabelList)
binaries := android.BazelLabelForModuleDeps(ctx, module.properties.ApexNativeDependencies.Binaries)
binaries := android.BazelLabelForModuleDeps(ctx, a.properties.ApexNativeDependencies.Binaries)
binariesLabelListAttribute := bazel.MakeLabelListAttribute(binaries)
var updatableAttribute bazel.BoolAttribute
if module.properties.Updatable != nil {
updatableAttribute.Value = module.properties.Updatable
if a.properties.Updatable != nil {
updatableAttribute.Value = a.properties.Updatable
}
var installableAttribute bazel.BoolAttribute
if module.properties.Installable != nil {
installableAttribute.Value = module.properties.Installable
if a.properties.Installable != nil {
installableAttribute.Value = a.properties.Installable
}
attrs := &bazelApexBundleAttributes{
@ -3361,5 +3349,5 @@ func apexBundleBp2BuildInternal(ctx android.TopDownMutatorContext, module *apexB
Bzl_load_location: "//build/bazel/rules:apex.bzl",
}
ctx.CreateBazelTargetModule(props, android.CommonAttributes{Name: module.Name()}, attrs)
ctx.CreateBazelTargetModule(props, android.CommonAttributes{Name: a.Name()}, attrs)
}

View file

@ -34,8 +34,6 @@ func init() {
func registerApexKeyBuildComponents(ctx android.RegistrationContext) {
ctx.RegisterModuleType("apex_key", ApexKeyFactory)
ctx.RegisterSingletonType("apex_keys_text", apexKeysTextFactory)
android.RegisterBp2BuildMutator("apex_key", ApexKeyBp2Build)
}
type apexKey struct {
@ -209,20 +207,9 @@ type bazelApexKeyAttributes struct {
Private_key bazel.LabelAttribute
}
func ApexKeyBp2Build(ctx android.TopDownMutatorContext) {
module, ok := ctx.Module().(*apexKey)
if !ok {
// Not an APEX key
return
}
if !module.ConvertWithBp2build(ctx) {
return
}
if ctx.ModuleType() != "apex_key" {
return
}
apexKeyBp2BuildInternal(ctx, module)
// ConvertWithBp2build performs conversion apexKey for bp2build
func (m *apexKey) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
apexKeyBp2BuildInternal(ctx, m)
}
func apexKeyBp2BuildInternal(ctx android.TopDownMutatorContext, module *apexKey) {

View file

@ -31,11 +31,10 @@ func registerAndroidAppCertificateModuleTypes(ctx android.RegistrationContext) {
func TestAndroidAppCertificateSimple(t *testing.T) {
runAndroidAppCertificateTestCase(t, bp2buildTestCase{
description: "Android app certificate - simple example",
moduleTypeUnderTest: "android_app_certificate",
moduleTypeUnderTestFactory: java.AndroidAppCertificateFactory,
moduleTypeUnderTestBp2BuildMutator: java.AndroidAppCertificateBp2Build,
filesystem: map[string]string{},
description: "Android app certificate - simple example",
moduleTypeUnderTest: "android_app_certificate",
moduleTypeUnderTestFactory: java.AndroidAppCertificateFactory,
filesystem: map[string]string{},
blueprint: `
android_app_certificate {
name: "com.android.apogee.cert",

View file

@ -31,10 +31,9 @@ func registerAndroidAppModuleTypes(ctx android.RegistrationContext) {
func TestMinimalAndroidApp(t *testing.T) {
runAndroidAppTestCase(t, bp2buildTestCase{
description: "Android app - simple example",
moduleTypeUnderTest: "android_app",
moduleTypeUnderTestFactory: java.AndroidAppFactory,
moduleTypeUnderTestBp2BuildMutator: java.AppBp2Build,
description: "Android app - simple example",
moduleTypeUnderTest: "android_app",
moduleTypeUnderTestFactory: java.AndroidAppFactory,
filesystem: map[string]string{
"app.java": "",
"res/res.png": "",
@ -58,10 +57,9 @@ android_app {
func TestAndroidAppAllSupportedFields(t *testing.T) {
runAndroidAppTestCase(t, bp2buildTestCase{
description: "Android app - all supported fields",
moduleTypeUnderTest: "android_app",
moduleTypeUnderTestFactory: java.AndroidAppFactory,
moduleTypeUnderTestBp2BuildMutator: java.AppBp2Build,
description: "Android app - all supported fields",
moduleTypeUnderTest: "android_app",
moduleTypeUnderTestFactory: java.AndroidAppFactory,
filesystem: map[string]string{
"app.java": "",
"resa/res.png": "",

View file

@ -43,11 +43,10 @@ func registerApexModuleTypes(ctx android.RegistrationContext) {
func TestApexBundleSimple(t *testing.T) {
runApexTestCase(t, bp2buildTestCase{
description: "apex - example with all props",
moduleTypeUnderTest: "apex",
moduleTypeUnderTestFactory: apex.BundleFactory,
moduleTypeUnderTestBp2BuildMutator: apex.ApexBundleBp2Build,
filesystem: map[string]string{},
description: "apex - example with all props",
moduleTypeUnderTest: "apex",
moduleTypeUnderTestFactory: apex.BundleFactory,
filesystem: map[string]string{},
blueprint: `
apex_key {
name: "com.android.apogee.key",
@ -147,11 +146,10 @@ apex {
func TestApexBundleDefaultPropertyValues(t *testing.T) {
runApexTestCase(t, bp2buildTestCase{
description: "apex - default property values",
moduleTypeUnderTest: "apex",
moduleTypeUnderTestFactory: apex.BundleFactory,
moduleTypeUnderTestBp2BuildMutator: apex.ApexBundleBp2Build,
filesystem: map[string]string{},
description: "apex - default property values",
moduleTypeUnderTest: "apex",
moduleTypeUnderTestFactory: apex.BundleFactory,
filesystem: map[string]string{},
blueprint: `
apex {
name: "com.android.apogee",
@ -166,11 +164,10 @@ apex {
func TestApexBundleHasBazelModuleProps(t *testing.T) {
runApexTestCase(t, bp2buildTestCase{
description: "apex - has bazel module props",
moduleTypeUnderTest: "apex",
moduleTypeUnderTestFactory: apex.BundleFactory,
moduleTypeUnderTestBp2BuildMutator: apex.ApexBundleBp2Build,
filesystem: map[string]string{},
description: "apex - has bazel module props",
moduleTypeUnderTest: "apex",
moduleTypeUnderTestFactory: apex.BundleFactory,
filesystem: map[string]string{},
blueprint: `
apex {
name: "apogee",

View file

@ -31,11 +31,10 @@ func registerApexKeyModuleTypes(ctx android.RegistrationContext) {
func TestApexKeySimple(t *testing.T) {
runApexKeyTestCase(t, bp2buildTestCase{
description: "apex key - simple example",
moduleTypeUnderTest: "apex_key",
moduleTypeUnderTestFactory: apex.ApexKeyFactory,
moduleTypeUnderTestBp2BuildMutator: apex.ApexKeyBp2Build,
filesystem: map[string]string{},
description: "apex key - simple example",
moduleTypeUnderTest: "apex_key",
moduleTypeUnderTestFactory: apex.ApexKeyFactory,
filesystem: map[string]string{},
blueprint: `
apex_key {
name: "com.android.apogee.key",

View file

@ -245,7 +245,7 @@ func TestGenerateBazelTargetModules(t *testing.T) {
{
description: "string props",
blueprint: `custom {
name: "foo",
name: "foo",
string_list_prop: ["a", "b"],
string_ptr_prop: "a",
bazel_module: { bp2build_available: true },
@ -470,7 +470,7 @@ custom {
android.FailIfErrored(t, err)
if actualCount, expectedCount := len(bazelTargets), len(testCase.expectedBazelTargets); actualCount != expectedCount {
t.Errorf("Expected %d bazel target, got %d", expectedCount, actualCount)
t.Errorf("Expected %d bazel target (%s),\ngot %d (%s)", expectedCount, testCase.expectedBazelTargets, actualCount, bazelTargets)
} else {
for i, expectedBazelTarget := range testCase.expectedBazelTargets {
actualBazelTarget := bazelTargets[i]
@ -596,6 +596,7 @@ func TestGenerateBazelTargetModules_OneToMany_LoadedFromStarlark(t *testing.T) {
{
bp: `custom {
name: "bar",
one_to_many_prop: true,
bazel_module: { bp2build_available: true },
}`,
expectedBazelTarget: `my_library(
@ -620,7 +621,6 @@ load("//build/bazel/rules:rules.bzl", "my_library")`,
config := android.TestConfig(buildDir, nil, testCase.bp, nil)
ctx := android.NewTestContext(config)
ctx.RegisterModuleType("custom", customModuleFactory)
ctx.RegisterBp2BuildMutator("custom", customBp2BuildMutatorFromStarlark)
ctx.RegisterForBazelConversion()
_, errs := ctx.ParseFileList(dir, []string{"Android.bp"})
@ -658,10 +658,9 @@ load("//build/bazel/rules:rules.bzl", "my_library")`,
func TestModuleTypeBp2Build(t *testing.T) {
testCases := []bp2buildTestCase{
{
description: "filegroup with does not specify srcs",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
moduleTypeUnderTestBp2BuildMutator: android.FilegroupBp2Build,
description: "filegroup with does not specify srcs",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
blueprint: `filegroup {
name: "fg_foo",
bazel_module: { bp2build_available: true },
@ -671,10 +670,9 @@ func TestModuleTypeBp2Build(t *testing.T) {
},
},
{
description: "filegroup with no srcs",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
moduleTypeUnderTestBp2BuildMutator: android.FilegroupBp2Build,
description: "filegroup with no srcs",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
blueprint: `filegroup {
name: "fg_foo",
srcs: [],
@ -685,10 +683,9 @@ func TestModuleTypeBp2Build(t *testing.T) {
},
},
{
description: "filegroup with srcs",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
moduleTypeUnderTestBp2BuildMutator: android.FilegroupBp2Build,
description: "filegroup with srcs",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
blueprint: `filegroup {
name: "fg_foo",
srcs: ["a", "b"],
@ -704,10 +701,9 @@ func TestModuleTypeBp2Build(t *testing.T) {
},
},
{
description: "filegroup with excludes srcs",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
moduleTypeUnderTestBp2BuildMutator: android.FilegroupBp2Build,
description: "filegroup with excludes srcs",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
blueprint: `filegroup {
name: "fg_foo",
srcs: ["a", "b"],
@ -721,10 +717,9 @@ func TestModuleTypeBp2Build(t *testing.T) {
},
},
{
description: "filegroup with glob",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
moduleTypeUnderTestBp2BuildMutator: android.FilegroupBp2Build,
description: "filegroup with glob",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
blueprint: `filegroup {
name: "fg_foo",
srcs: ["**/*.txt"],
@ -747,12 +742,10 @@ func TestModuleTypeBp2Build(t *testing.T) {
},
},
{
description: "filegroup with glob in subdir",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
moduleTypeUnderTestBp2BuildMutator: android.FilegroupBp2Build,
blueprint: ``,
dir: "other",
description: "filegroup with glob in subdir",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
dir: "other",
filesystem: map[string]string{
"other/Android.bp": `filegroup {
name: "fg_foo",
@ -775,10 +768,9 @@ func TestModuleTypeBp2Build(t *testing.T) {
},
},
{
description: "depends_on_other_dir_module",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
moduleTypeUnderTestBp2BuildMutator: android.FilegroupBp2Build,
description: "depends_on_other_dir_module",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
blueprint: `filegroup {
name: "fg_foo",
srcs: [
@ -804,26 +796,25 @@ func TestModuleTypeBp2Build(t *testing.T) {
},
},
{
description: "depends_on_other_unconverted_module_error",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
moduleTypeUnderTestBp2BuildMutator: android.FilegroupBp2Build,
unconvertedDepsMode: errorModulesUnconvertedDeps,
filesystem: map[string]string{
"other/Android.bp": `filegroup {
name: "foo",
srcs: ["a", "b"],
}`,
},
description: "depends_on_other_unconverted_module_error",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
unconvertedDepsMode: errorModulesUnconvertedDeps,
blueprint: `filegroup {
name: "fg_foo",
name: "foobar",
srcs: [
":foo",
"c",
],
bazel_module: { bp2build_available: true },
}`,
expectedErr: fmt.Errorf(`"fg_foo" depends on unconverted modules: foo`),
expectedErr: fmt.Errorf(`"foobar" depends on unconverted modules: foo`),
filesystem: map[string]string{
"other/Android.bp": `filegroup {
name: "foo",
srcs: ["a", "b"],
}`,
},
},
}
@ -838,18 +829,16 @@ type bp2buildMutator = func(android.TopDownMutatorContext)
func TestAllowlistingBp2buildTargetsExplicitly(t *testing.T) {
testCases := []struct {
moduleTypeUnderTest string
moduleTypeUnderTestFactory android.ModuleFactory
moduleTypeUnderTestBp2BuildMutator bp2buildMutator
bp string
expectedCount int
description string
moduleTypeUnderTest string
moduleTypeUnderTestFactory android.ModuleFactory
bp string
expectedCount int
description string
}{
{
description: "explicitly unavailable",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
moduleTypeUnderTestBp2BuildMutator: android.FilegroupBp2Build,
description: "explicitly unavailable",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
bp: `filegroup {
name: "foo",
srcs: ["a", "b"],
@ -858,10 +847,9 @@ func TestAllowlistingBp2buildTargetsExplicitly(t *testing.T) {
expectedCount: 0,
},
{
description: "implicitly unavailable",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
moduleTypeUnderTestBp2BuildMutator: android.FilegroupBp2Build,
description: "implicitly unavailable",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
bp: `filegroup {
name: "foo",
srcs: ["a", "b"],
@ -869,10 +857,9 @@ func TestAllowlistingBp2buildTargetsExplicitly(t *testing.T) {
expectedCount: 0,
},
{
description: "explicitly available",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
moduleTypeUnderTestBp2BuildMutator: android.FilegroupBp2Build,
description: "explicitly available",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
bp: `filegroup {
name: "foo",
srcs: ["a", "b"],
@ -881,12 +868,12 @@ func TestAllowlistingBp2buildTargetsExplicitly(t *testing.T) {
expectedCount: 1,
},
{
description: "generates more than 1 target if needed",
moduleTypeUnderTest: "custom",
moduleTypeUnderTestFactory: customModuleFactory,
moduleTypeUnderTestBp2BuildMutator: customBp2BuildMutatorFromStarlark,
description: "generates more than 1 target if needed",
moduleTypeUnderTest: "custom",
moduleTypeUnderTestFactory: customModuleFactory,
bp: `custom {
name: "foo",
one_to_many_prop: true,
bazel_module: { bp2build_available: true },
}`,
expectedCount: 3,
@ -899,7 +886,6 @@ func TestAllowlistingBp2buildTargetsExplicitly(t *testing.T) {
config := android.TestConfig(buildDir, nil, testCase.bp, nil)
ctx := android.NewTestContext(config)
ctx.RegisterModuleType(testCase.moduleTypeUnderTest, testCase.moduleTypeUnderTestFactory)
ctx.RegisterBp2BuildMutator(testCase.moduleTypeUnderTest, testCase.moduleTypeUnderTestBp2BuildMutator)
ctx.RegisterForBazelConversion()
_, errs := ctx.ParseFileList(dir, []string{"Android.bp"})
@ -919,20 +905,18 @@ func TestAllowlistingBp2buildTargetsExplicitly(t *testing.T) {
func TestAllowlistingBp2buildTargetsWithConfig(t *testing.T) {
testCases := []struct {
moduleTypeUnderTest string
moduleTypeUnderTestFactory android.ModuleFactory
moduleTypeUnderTestBp2BuildMutator bp2buildMutator
expectedCount map[string]int
description string
bp2buildConfig android.Bp2BuildConfig
checkDir string
fs map[string]string
moduleTypeUnderTest string
moduleTypeUnderTestFactory android.ModuleFactory
expectedCount map[string]int
description string
bp2buildConfig android.Bp2BuildConfig
checkDir string
fs map[string]string
}{
{
description: "test bp2build config package and subpackages config",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
moduleTypeUnderTestBp2BuildMutator: android.FilegroupBp2Build,
description: "test bp2build config package and subpackages config",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
expectedCount: map[string]int{
"migrated": 1,
"migrated/but_not_really": 0,
@ -954,10 +938,9 @@ func TestAllowlistingBp2buildTargetsWithConfig(t *testing.T) {
},
},
{
description: "test bp2build config opt-in and opt-out",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
moduleTypeUnderTestBp2BuildMutator: android.FilegroupBp2Build,
description: "test bp2build config opt-in and opt-out",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
expectedCount: map[string]int{
"package-opt-in": 2,
"package-opt-in/subpackage": 0,
@ -1008,7 +991,6 @@ filegroup { name: "opt-out-h", bazel_module: { bp2build_available: false } }
config := android.TestConfig(buildDir, nil, "", fs)
ctx := android.NewTestContext(config)
ctx.RegisterModuleType(testCase.moduleTypeUnderTest, testCase.moduleTypeUnderTestFactory)
ctx.RegisterBp2BuildMutator(testCase.moduleTypeUnderTest, testCase.moduleTypeUnderTestBp2BuildMutator)
ctx.RegisterBp2BuildConfig(testCase.bp2buildConfig)
ctx.RegisterForBazelConversion()
@ -1039,10 +1021,9 @@ filegroup { name: "opt-out-h", bazel_module: { bp2build_available: false } }
func TestCombineBuildFilesBp2buildTargets(t *testing.T) {
testCases := []bp2buildTestCase{
{
description: "filegroup bazel_module.label",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
moduleTypeUnderTestBp2BuildMutator: android.FilegroupBp2Build,
description: "filegroup bazel_module.label",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
blueprint: `filegroup {
name: "fg_foo",
bazel_module: { label: "//other:fg_foo" },
@ -1055,19 +1036,18 @@ func TestCombineBuildFilesBp2buildTargets(t *testing.T) {
},
},
{
description: "multiple bazel_module.label same BUILD",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
moduleTypeUnderTestBp2BuildMutator: android.FilegroupBp2Build,
description: "multiple bazel_module.label same BUILD",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
blueprint: `filegroup {
name: "fg_foo",
bazel_module: { label: "//other:fg_foo" },
}
name: "fg_foo",
bazel_module: { label: "//other:fg_foo" },
}
filegroup {
name: "foo",
bazel_module: { label: "//other:foo" },
}`,
filegroup {
name: "foo",
bazel_module: { label: "//other:foo" },
}`,
expectedBazelTargets: []string{
`// BUILD file`,
},
@ -1076,25 +1056,24 @@ func TestCombineBuildFilesBp2buildTargets(t *testing.T) {
},
},
{
description: "filegroup bazel_module.label and bp2build in subdir",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
moduleTypeUnderTestBp2BuildMutator: android.FilegroupBp2Build,
dir: "other",
blueprint: ``,
description: "filegroup bazel_module.label and bp2build in subdir",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
dir: "other",
blueprint: ``,
filesystem: map[string]string{
"other/Android.bp": `filegroup {
name: "fg_foo",
bazel_module: {
bp2build_available: true,
},
}
filegroup {
name: "fg_bar",
bazel_module: {
label: "//other:fg_bar"
},
}`,
name: "fg_foo",
bazel_module: {
bp2build_available: true,
},
}
filegroup {
name: "fg_bar",
bazel_module: {
label: "//other:fg_bar"
},
}`,
"other/BUILD.bazel": `// definition for fg_bar`,
},
expectedBazelTargets: []string{
@ -1103,26 +1082,26 @@ func TestCombineBuildFilesBp2buildTargets(t *testing.T) {
},
},
{
description: "filegroup bazel_module.label and filegroup bp2build",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
moduleTypeUnderTestBp2BuildMutator: android.FilegroupBp2Build,
description: "filegroup bazel_module.label and filegroup bp2build",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
filesystem: map[string]string{
"other/BUILD.bazel": `// BUILD file`,
},
blueprint: `filegroup {
name: "fg_foo",
bazel_module: {
label: "//other:fg_foo",
},
}
name: "fg_foo",
bazel_module: {
label: "//other:fg_foo",
},
}
filegroup {
name: "fg_bar",
bazel_module: {
bp2build_available: true,
},
}`,
filegroup {
name: "fg_bar",
bazel_module: {
bp2build_available: true,
},
}`,
expectedBazelTargets: []string{
makeBazelTarget("filegroup", "fg_bar", map[string]string{}),
`// BUILD file`,
@ -1146,7 +1125,6 @@ func TestCombineBuildFilesBp2buildTargets(t *testing.T) {
config := android.TestConfig(buildDir, nil, testCase.blueprint, fs)
ctx := android.NewTestContext(config)
ctx.RegisterModuleType(testCase.moduleTypeUnderTest, testCase.moduleTypeUnderTestFactory)
ctx.RegisterBp2BuildMutator(testCase.moduleTypeUnderTest, testCase.moduleTypeUnderTestBp2BuildMutator)
ctx.RegisterForBazelConversion()
_, errs := ctx.ParseFileList(dir, toParse)
@ -1192,10 +1170,9 @@ func TestCombineBuildFilesBp2buildTargets(t *testing.T) {
func TestGlobExcludeSrcs(t *testing.T) {
testCases := []bp2buildTestCase{
{
description: "filegroup top level exclude_srcs",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
moduleTypeUnderTestBp2BuildMutator: android.FilegroupBp2Build,
description: "filegroup top level exclude_srcs",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
blueprint: `filegroup {
name: "fg_foo",
srcs: ["**/*.txt"],
@ -1222,12 +1199,11 @@ func TestGlobExcludeSrcs(t *testing.T) {
},
},
{
description: "filegroup in subdir exclude_srcs",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
moduleTypeUnderTestBp2BuildMutator: android.FilegroupBp2Build,
blueprint: "",
dir: "dir",
description: "filegroup in subdir exclude_srcs",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
blueprint: "",
dir: "dir",
filesystem: map[string]string{
"dir/Android.bp": `filegroup {
name: "fg_foo",
@ -1264,10 +1240,9 @@ func TestGlobExcludeSrcs(t *testing.T) {
func TestCommonBp2BuildModuleAttrs(t *testing.T) {
testCases := []bp2buildTestCase{
{
description: "Required into data test",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
moduleTypeUnderTestBp2BuildMutator: android.FilegroupBp2Build,
description: "Required into data test",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
blueprint: simpleModuleDoNotConvertBp2build("filegroup", "reqd") + `
filegroup {
name: "fg_foo",
@ -1281,21 +1256,20 @@ filegroup {
},
},
{
description: "Required via arch into data test",
moduleTypeUnderTest: "python_library",
moduleTypeUnderTestFactory: python.PythonLibraryFactory,
moduleTypeUnderTestBp2BuildMutator: python.PythonLibraryBp2Build,
description: "Required via arch into data test",
moduleTypeUnderTest: "python_library",
moduleTypeUnderTestFactory: python.PythonLibraryFactory,
blueprint: simpleModuleDoNotConvertBp2build("python_library", "reqdx86") +
simpleModuleDoNotConvertBp2build("python_library", "reqdarm") + `
python_library {
name: "fg_foo",
arch: {
arm: {
required: ["reqdarm"],
},
x86: {
required: ["reqdx86"],
},
arm: {
required: ["reqdarm"],
},
x86: {
required: ["reqdx86"],
},
},
bazel_module: { bp2build_available: true },
}`,
@ -1311,10 +1285,9 @@ python_library {
},
},
{
description: "Required appended to data test",
moduleTypeUnderTest: "python_library",
moduleTypeUnderTestFactory: python.PythonLibraryFactory,
moduleTypeUnderTestBp2BuildMutator: python.PythonLibraryBp2Build,
description: "Required appended to data test",
moduleTypeUnderTest: "python_library",
moduleTypeUnderTestFactory: python.PythonLibraryFactory,
filesystem: map[string]string{
"data.bin": "",
"src.py": "",
@ -1337,10 +1310,9 @@ python_library {
},
},
{
description: "All props-to-attrs at once together test",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
moduleTypeUnderTestBp2BuildMutator: android.FilegroupBp2Build,
description: "All props-to-attrs at once together test",
moduleTypeUnderTest: "filegroup",
moduleTypeUnderTestFactory: android.FileGroupFactory,
blueprint: simpleModuleDoNotConvertBp2build("filegroup", "reqd") + `
filegroup {
name: "fg_foo",

View file

@ -100,6 +100,7 @@ custom = rule(
# nested_props_ptr start
# "nested_prop": attr.string(),
# nested_props_ptr end
"one_to_many_prop": attr.bool(),
"other_embedded_prop": attr.string(),
"string_list_prop": attr.string_list(),
"string_prop": attr.string(),
@ -128,6 +129,7 @@ custom_defaults = rule(
# nested_props_ptr start
# "nested_prop": attr.string(),
# nested_props_ptr end
"one_to_many_prop": attr.bool(),
"other_embedded_prop": attr.string(),
"string_list_prop": attr.string_list(),
"string_prop": attr.string(),
@ -156,6 +158,7 @@ custom_test_ = rule(
# nested_props_ptr start
# "nested_prop": attr.string(),
# nested_props_ptr end
"one_to_many_prop": attr.bool(),
"other_embedded_prop": attr.string(),
"string_list_prop": attr.string_list(),
"string_prop": attr.string(),

View file

@ -68,14 +68,14 @@ func runCcBinaryTestCase(t *testing.T, tc ccBinaryBp2buildTestCase) {
t.Helper()
moduleTypeUnderTest := "cc_binary"
testCase := bp2buildTestCase{
expectedBazelTargets: generateBazelTargetsForTest(tc.targets),
moduleTypeUnderTest: moduleTypeUnderTest,
moduleTypeUnderTestFactory: cc.BinaryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.BinaryBp2build,
description: fmt.Sprintf("%s %s", moduleTypeUnderTest, tc.description),
blueprint: binaryReplacer.Replace(tc.blueprint),
expectedBazelTargets: generateBazelTargetsForTest(tc.targets),
moduleTypeUnderTest: moduleTypeUnderTest,
moduleTypeUnderTestFactory: cc.BinaryFactory,
description: fmt.Sprintf("%s %s", moduleTypeUnderTest, tc.description),
blueprint: binaryReplacer.Replace(tc.blueprint),
}
t.Run(testCase.description, func(t *testing.T) {
t.Helper()
runBp2BuildTestCase(t, registerCcBinaryModuleTypes, testCase)
})
}
@ -96,12 +96,11 @@ func runCcHostBinaryTestCase(t *testing.T, tc ccBinaryBp2buildTestCase) {
moduleTypeUnderTest := "cc_binary_host"
t.Run(testCase.description, func(t *testing.T) {
runBp2BuildTestCase(t, registerCcBinaryModuleTypes, bp2buildTestCase{
expectedBazelTargets: generateBazelTargetsForTest(testCase.targets),
moduleTypeUnderTest: moduleTypeUnderTest,
moduleTypeUnderTestFactory: cc.BinaryHostFactory,
moduleTypeUnderTestBp2BuildMutator: cc.BinaryHostBp2build,
description: fmt.Sprintf("%s %s", moduleTypeUnderTest, tc.description),
blueprint: hostBinaryReplacer.Replace(testCase.blueprint),
expectedBazelTargets: generateBazelTargetsForTest(testCase.targets),
moduleTypeUnderTest: moduleTypeUnderTest,
moduleTypeUnderTestFactory: cc.BinaryHostFactory,
description: fmt.Sprintf("%s %s", moduleTypeUnderTest, tc.description),
blueprint: hostBinaryReplacer.Replace(testCase.blueprint),
})
})
}
@ -258,11 +257,13 @@ func TestCcBinaryDoNotDistinguishBetweenDepsAndImplementationDeps(t *testing.T)
genrule {
name: "generated_hdr",
cmd: "nothing to see here",
bazel_module: { bp2build_available: false },
}
genrule {
name: "export_generated_hdr",
cmd: "nothing to see here",
bazel_module: { bp2build_available: false },
}
{rule_name} {

View file

@ -19,7 +19,6 @@ import (
"android/soong/android"
"android/soong/cc"
"android/soong/genrule"
)
var otherCcGenruleBp = map[string]string{
@ -41,7 +40,6 @@ func runCcGenruleTestCase(t *testing.T, tc bp2buildTestCase) {
t.Helper()
(&tc).moduleTypeUnderTest = "cc_genrule"
(&tc).moduleTypeUnderTestFactory = cc.GenRuleFactory
(&tc).moduleTypeUnderTestBp2BuildMutator = genrule.CcGenruleBp2Build
runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, tc)
}

View file

@ -70,10 +70,9 @@ func registerCcLibraryModuleTypes(ctx android.RegistrationContext) {
func TestCcLibrarySimple(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
description: "cc_library - simple example",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
description: "cc_library - simple example",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
filesystem: map[string]string{
"android.cpp": "",
"bionic.cpp": "",
@ -159,10 +158,9 @@ cc_library {
func TestCcLibraryTrimmedLdAndroid(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
description: "cc_library - trimmed example of //bionic/linker:ld-android",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
description: "cc_library - trimmed example of //bionic/linker:ld-android",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
filesystem: map[string]string{
"ld-android.cpp": "",
"linked_list.h": "",
@ -170,8 +168,8 @@ func TestCcLibraryTrimmedLdAndroid(t *testing.T) {
"linker_block_allocator.h": "",
"linker_cfi.h": "",
},
blueprint: soongCcLibraryPreamble + `
cc_library_headers { name: "libc_headers" }
blueprint: soongCcLibraryPreamble +
simpleModuleDoNotConvertBp2build("cc_library_headers", "libc_headers") + `
cc_library {
name: "fake-ld-android",
srcs: ["ld_android.cpp"],
@ -228,11 +226,10 @@ cc_library {
func TestCcLibraryExcludeSrcs(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
description: "cc_library exclude_srcs - trimmed example of //external/arm-optimized-routines:libarm-optimized-routines-math",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
dir: "external",
description: "cc_library exclude_srcs - trimmed example of //external/arm-optimized-routines:libarm-optimized-routines-math",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
dir: "external",
filesystem: map[string]string{
"external/math/cosf.c": "",
"external/math/erf.c": "",
@ -280,10 +277,9 @@ cc_library {
func TestCcLibrarySharedStaticProps(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
description: "cc_library shared/static props",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
description: "cc_library shared/static props",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
filesystem: map[string]string{
"both.cpp": "",
"sharedonly.cpp": "",
@ -409,10 +405,9 @@ cc_library {
func TestCcLibraryDeps(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
description: "cc_library shared/static props",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
description: "cc_library shared/static props",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
filesystem: map[string]string{
"both.cpp": "",
"sharedonly.cpp": "",
@ -537,10 +532,9 @@ cc_library {
func TestCcLibraryWholeStaticLibsAlwaysLink(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
dir: "foo/bar",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
dir: "foo/bar",
filesystem: map[string]string{
"foo/bar/Android.bp": `
cc_library {
@ -584,11 +578,10 @@ cc_prebuilt_library_static { name: "whole_static_lib_for_both" }
func TestCcLibrarySharedStaticPropsInArch(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
description: "cc_library shared/static props in arch",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
dir: "foo/bar",
description: "cc_library shared/static props in arch",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
dir: "foo/bar",
filesystem: map[string]string{
"foo/bar/arm.cpp": "",
"foo/bar/x86.cpp": "",
@ -735,11 +728,10 @@ cc_library_static { name: "android_dep_for_shared" }
func TestCcLibrarySharedStaticPropsWithMixedSources(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
description: "cc_library shared/static props with c/cpp/s mixed sources",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
dir: "foo/bar",
description: "cc_library shared/static props with c/cpp/s mixed sources",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
dir: "foo/bar",
filesystem: map[string]string{
"foo/bar/both_source.cpp": "",
"foo/bar/both_source.cc": "",
@ -868,11 +860,10 @@ filegroup {
func TestCcLibraryNonConfiguredVersionScript(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
description: "cc_library non-configured version script",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
dir: "foo/bar",
description: "cc_library non-configured version script",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
dir: "foo/bar",
filesystem: map[string]string{
"foo/bar/Android.bp": `
cc_library {
@ -896,11 +887,10 @@ cc_library {
func TestCcLibraryConfiguredVersionScript(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
description: "cc_library configured version script",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
dir: "foo/bar",
description: "cc_library configured version script",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
dir: "foo/bar",
filesystem: map[string]string{
"foo/bar/Android.bp": `
cc_library {
@ -940,10 +930,9 @@ cc_library {
func TestCcLibrarySharedLibs(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
description: "cc_library shared_libs",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
description: "cc_library shared_libs",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
blueprint: soongCcLibraryPreamble + `
cc_library {
name: "mylib",
@ -994,10 +983,9 @@ func TestCcLibraryFeatures(t *testing.T) {
})...)
runCcLibraryTestCase(t, bp2buildTestCase{
description: "cc_library pack_relocations test",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
description: "cc_library pack_relocations test",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
blueprint: soongCcLibraryPreamble + `
cc_library {
name: "a",
@ -1036,10 +1024,9 @@ cc_library {
func TestCcLibrarySpacesInCopts(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
description: "cc_library spaces in copts",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
description: "cc_library spaces in copts",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
blueprint: soongCcLibraryPreamble + `
cc_library {
name: "a",
@ -1059,10 +1046,9 @@ cc_library {
func TestCcLibraryCppFlagsGoesIntoCopts(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
description: "cc_library cppflags usage",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
description: "cc_library cppflags usage",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
blueprint: soongCcLibraryPreamble + `cc_library {
name: "a",
srcs: ["a.cpp"],
@ -1104,10 +1090,9 @@ func TestCcLibraryCppFlagsGoesIntoCopts(t *testing.T) {
func TestCcLibraryExcludeLibs(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
filesystem: map[string]string{},
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
filesystem: map[string]string{},
blueprint: soongCcLibraryStaticPreamble + `
cc_library {
name: "foo_static",
@ -1212,10 +1197,9 @@ cc_library {
func TestCCLibraryNoCrtTrue(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
description: "cc_library - nocrt: true emits attribute",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
description: "cc_library - nocrt: true emits attribute",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
filesystem: map[string]string{
"impl.cpp": "",
},
@ -1237,10 +1221,9 @@ cc_library {
func TestCCLibraryNoCrtFalse(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
description: "cc_library - nocrt: false - does not emit attribute",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
description: "cc_library - nocrt: false - does not emit attribute",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
filesystem: map[string]string{
"impl.cpp": "",
},
@ -1260,10 +1243,9 @@ cc_library {
func TestCCLibraryNoCrtArchVariant(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
description: "cc_library - nocrt in select",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
description: "cc_library - nocrt in select",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
filesystem: map[string]string{
"impl.cpp": "",
},
@ -1288,15 +1270,12 @@ cc_library {
func TestCCLibraryNoLibCrtTrue(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
description: "cc_library - simple example",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
filesystem: map[string]string{
"impl.cpp": "",
},
blueprint: soongCcLibraryPreamble + `
cc_library_headers { name: "some-headers" }
cc_library {
name: "foo-lib",
srcs: ["impl.cpp"],
@ -1337,14 +1316,12 @@ func makeCcLibraryTargets(name string, attrs attrNameToString) []string {
func TestCCLibraryNoLibCrtFalse(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
filesystem: map[string]string{
"impl.cpp": "",
},
blueprint: soongCcLibraryPreamble + `
cc_library_headers { name: "some-headers" }
cc_library {
name: "foo-lib",
srcs: ["impl.cpp"],
@ -1361,9 +1338,8 @@ cc_library {
func TestCCLibraryNoLibCrtArchVariant(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
filesystem: map[string]string{
"impl.cpp": "",
},
@ -1423,10 +1399,9 @@ func TestCcLibraryStrip(t *testing.T) {
expectedTargets = append(expectedTargets, makeCcLibraryTargets("nothing", attrNameToString{})...)
runCcLibraryTestCase(t, bp2buildTestCase{
description: "cc_library strip args",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
description: "cc_library strip args",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
blueprint: soongCcLibraryPreamble + `
cc_library {
name: "nothing",
@ -1474,10 +1449,9 @@ cc_library {
func TestCcLibraryStripWithArch(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
description: "cc_library strip args",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
description: "cc_library strip args",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
blueprint: soongCcLibraryPreamble + `
cc_library {
name: "multi-arch",
@ -1528,10 +1502,9 @@ cc_library {
func TestCcLibrary_SystemSharedLibsRootEmpty(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
description: "cc_library system_shared_libs empty at root",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
description: "cc_library system_shared_libs empty at root",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
blueprint: soongCcLibraryPreamble + `
cc_library {
name: "root_empty",
@ -1548,10 +1521,9 @@ cc_library {
func TestCcLibrary_SystemSharedLibsStaticEmpty(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
description: "cc_library system_shared_libs empty for static variant",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
description: "cc_library system_shared_libs empty for static variant",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
blueprint: soongCcLibraryPreamble + `
cc_library {
name: "static_empty",
@ -1572,10 +1544,9 @@ cc_library {
func TestCcLibrary_SystemSharedLibsSharedEmpty(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
description: "cc_library system_shared_libs empty for shared variant",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
description: "cc_library system_shared_libs empty for shared variant",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
blueprint: soongCcLibraryPreamble + `
cc_library {
name: "shared_empty",
@ -1596,10 +1567,9 @@ cc_library {
func TestCcLibrary_SystemSharedLibsSharedBionicEmpty(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
description: "cc_library system_shared_libs empty for shared, bionic variant",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
description: "cc_library system_shared_libs empty for shared, bionic variant",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
blueprint: soongCcLibraryPreamble + `
cc_library {
name: "shared_empty",
@ -1628,10 +1598,9 @@ func TestCcLibrary_SystemSharedLibsLinuxBionicEmpty(t *testing.T) {
// only for linux_bionic, but `android` had `["libc", "libdl", "libm"].
// b/195791252 tracks the fix.
runCcLibraryTestCase(t, bp2buildTestCase{
description: "cc_library system_shared_libs empty for linux_bionic variant",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
description: "cc_library system_shared_libs empty for linux_bionic variant",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
blueprint: soongCcLibraryPreamble + `
cc_library {
name: "target_linux_bionic_empty",
@ -1652,10 +1621,9 @@ cc_library {
func TestCcLibrary_SystemSharedLibsBionicEmpty(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
description: "cc_library system_shared_libs empty for bionic variant",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
description: "cc_library system_shared_libs empty for bionic variant",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
blueprint: soongCcLibraryPreamble + `
cc_library {
name: "target_bionic_empty",
@ -1676,10 +1644,9 @@ cc_library {
func TestCcLibrary_SystemSharedLibsSharedAndRoot(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
description: "cc_library system_shared_libs set for shared and root",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
description: "cc_library system_shared_libs set for shared and root",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
blueprint: soongCcLibraryPreamble + `
cc_library {
name: "libc",
@ -1715,13 +1682,11 @@ cc_library {
func TestCcLibraryOsSelects(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
description: "cc_library - selects for all os targets",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
filesystem: map[string]string{},
description: "cc_library - selects for all os targets",
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
filesystem: map[string]string{},
blueprint: soongCcLibraryPreamble + `
cc_library_headers { name: "some-headers" }
cc_library {
name: "foo-lib",
srcs: ["base.cpp"],
@ -1861,10 +1826,9 @@ func TestCcLibraryCppStdWithGnuExtensions_ConvertsToFeatureAttr(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
description: fmt.Sprintf(
"cc_library with c_std: %s, cpp_std: %s and gnu_extensions: %s", tc.c_std, tc.cpp_std, tc.gnu_extensions),
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
"cc_library with cpp_std: %s and gnu_extensions: %s", tc.cpp_std, tc.gnu_extensions),
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
blueprint: soongCcLibraryPreamble + fmt.Sprintf(`
cc_library {
name: "%s_full",
@ -1879,10 +1843,9 @@ cc_library {
runCcLibraryStaticTestCase(t, bp2buildTestCase{
description: fmt.Sprintf(
"cc_library_static with c_std: %s, cpp_std: %s and gnu_extensions: %s", tc.c_std, tc.cpp_std, tc.gnu_extensions),
moduleTypeUnderTest: "cc_library_static",
moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
"cc_library_static with cpp_std: %s and gnu_extensions: %s", tc.cpp_std, tc.gnu_extensions),
moduleTypeUnderTest: "cc_library_static",
moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
blueprint: soongCcLibraryPreamble + fmt.Sprintf(`
cc_library_static {
name: "%s_static",
@ -1899,10 +1862,9 @@ cc_library_static {
runCcLibrarySharedTestCase(t, bp2buildTestCase{
description: fmt.Sprintf(
"cc_library_shared with c_std: %s, cpp_std: %s and gnu_extensions: %s", tc.c_std, tc.cpp_std, tc.gnu_extensions),
moduleTypeUnderTest: "cc_library_shared",
moduleTypeUnderTestFactory: cc.LibrarySharedFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibrarySharedBp2Build,
"cc_library_shared with cpp_std: %s and gnu_extensions: %s", tc.cpp_std, tc.gnu_extensions),
moduleTypeUnderTest: "cc_library_shared",
moduleTypeUnderTestFactory: cc.LibrarySharedFactory,
blueprint: soongCcLibraryPreamble + fmt.Sprintf(`
cc_library_shared {
name: "%s_shared",
@ -1921,9 +1883,8 @@ cc_library_shared {
func TestCcLibraryProtoSimple(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
blueprint: soongCcProtoPreamble + `cc_library {
name: "foo",
srcs: ["foo.proto"],
@ -1947,9 +1908,8 @@ func TestCcLibraryProtoSimple(t *testing.T) {
func TestCcLibraryProtoNoCanonicalPathFromRoot(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
blueprint: soongCcProtoPreamble + `cc_library {
name: "foo",
srcs: ["foo.proto"],
@ -1973,9 +1933,8 @@ func TestCcLibraryProtoNoCanonicalPathFromRoot(t *testing.T) {
func TestCcLibraryProtoExplicitCanonicalPathFromRoot(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
blueprint: soongCcProtoPreamble + `cc_library {
name: "foo",
srcs: ["foo.proto"],
@ -2000,9 +1959,8 @@ func TestCcLibraryProtoExplicitCanonicalPathFromRoot(t *testing.T) {
func TestCcLibraryProtoFull(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
blueprint: soongCcProtoPreamble + `cc_library {
name: "foo",
srcs: ["foo.proto"],
@ -2029,9 +1987,8 @@ func TestCcLibraryProtoFull(t *testing.T) {
func TestCcLibraryProtoLite(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
blueprint: soongCcProtoPreamble + `cc_library {
name: "foo",
srcs: ["foo.proto"],
@ -2058,9 +2015,8 @@ func TestCcLibraryProtoLite(t *testing.T) {
func TestCcLibraryProtoExportHeaders(t *testing.T) {
runCcLibraryTestCase(t, bp2buildTestCase{
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
moduleTypeUnderTest: "cc_library",
moduleTypeUnderTestFactory: cc.LibraryFactory,
blueprint: soongCcProtoPreamble + `cc_library {
name: "foo",
srcs: ["foo.proto"],

View file

@ -78,10 +78,9 @@ func runCcLibraryHeadersTestCase(t *testing.T, tc bp2buildTestCase) {
func TestCcLibraryHeadersSimple(t *testing.T) {
runCcLibraryHeadersTestCase(t, bp2buildTestCase{
description: "cc_library_headers test",
moduleTypeUnderTest: "cc_library_headers",
moduleTypeUnderTestFactory: cc.LibraryHeaderFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryHeadersBp2Build,
description: "cc_library_headers test",
moduleTypeUnderTest: "cc_library_headers",
moduleTypeUnderTestFactory: cc.LibraryHeaderFactory,
filesystem: map[string]string{
"lib-1/lib1a.h": "",
"lib-1/lib1b.h": "",
@ -150,11 +149,10 @@ cc_library_headers {
func TestCcLibraryHeadersOsSpecificHeader(t *testing.T) {
runCcLibraryHeadersTestCase(t, bp2buildTestCase{
description: "cc_library_headers test with os-specific header_libs props",
moduleTypeUnderTest: "cc_library_headers",
moduleTypeUnderTestFactory: cc.LibraryHeaderFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryHeadersBp2Build,
filesystem: map[string]string{},
description: "cc_library_headers test with os-specific header_libs props",
moduleTypeUnderTest: "cc_library_headers",
moduleTypeUnderTestFactory: cc.LibraryHeaderFactory,
filesystem: map[string]string{},
blueprint: soongCcLibraryPreamble + `
cc_library_headers {
name: "android-lib",
@ -209,11 +207,10 @@ cc_library_headers {
func TestCcLibraryHeadersOsSpecficHeaderLibsExportHeaderLibHeaders(t *testing.T) {
runCcLibraryHeadersTestCase(t, bp2buildTestCase{
description: "cc_library_headers test with os-specific header_libs and export_header_lib_headers props",
moduleTypeUnderTest: "cc_library_headers",
moduleTypeUnderTestFactory: cc.LibraryHeaderFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryHeadersBp2Build,
filesystem: map[string]string{},
description: "cc_library_headers test with os-specific header_libs and export_header_lib_headers props",
moduleTypeUnderTest: "cc_library_headers",
moduleTypeUnderTestFactory: cc.LibraryHeaderFactory,
filesystem: map[string]string{},
blueprint: soongCcLibraryPreamble + `
cc_library_headers {
name: "android-lib",
@ -250,11 +247,10 @@ cc_library_headers {
func TestCcLibraryHeadersArchAndTargetExportSystemIncludes(t *testing.T) {
runCcLibraryHeadersTestCase(t, bp2buildTestCase{
description: "cc_library_headers test with arch-specific and target-specific export_system_include_dirs props",
moduleTypeUnderTest: "cc_library_headers",
moduleTypeUnderTestFactory: cc.LibraryHeaderFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryHeadersBp2Build,
filesystem: map[string]string{},
description: "cc_library_headers test with arch-specific and target-specific export_system_include_dirs props",
moduleTypeUnderTest: "cc_library_headers",
moduleTypeUnderTestFactory: cc.LibraryHeaderFactory,
filesystem: map[string]string{},
blueprint: soongCcLibraryPreamble + `cc_library_headers {
name: "foo_headers",
export_system_include_dirs: [
@ -310,10 +306,9 @@ func TestCcLibraryHeadersArchAndTargetExportSystemIncludes(t *testing.T) {
func TestCcLibraryHeadersNoCrtIgnored(t *testing.T) {
runCcLibraryHeadersTestCase(t, bp2buildTestCase{
description: "cc_library_headers test",
moduleTypeUnderTest: "cc_library_headers",
moduleTypeUnderTestFactory: cc.LibraryHeaderFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryHeadersBp2Build,
description: "cc_library_headers test",
moduleTypeUnderTest: "cc_library_headers",
moduleTypeUnderTestFactory: cc.LibraryHeaderFactory,
filesystem: map[string]string{
"lib-1/lib1a.h": "",
"lib-1/lib1b.h": "",

View file

@ -40,7 +40,6 @@ func runCcLibrarySharedTestCase(t *testing.T, tc bp2buildTestCase) {
t.Helper()
(&tc).moduleTypeUnderTest = "cc_library_shared"
(&tc).moduleTypeUnderTestFactory = cc.LibrarySharedFactory
(&tc).moduleTypeUnderTestBp2BuildMutator = cc.CcLibrarySharedBp2Build
runBp2BuildTestCase(t, registerCcLibrarySharedModuleTypes, tc)
}

View file

@ -82,7 +82,6 @@ func runCcLibraryStaticTestCase(t *testing.T, tc bp2buildTestCase) {
(&tc).moduleTypeUnderTest = "cc_library_static"
(&tc).moduleTypeUnderTestFactory = cc.LibraryStaticFactory
(&tc).moduleTypeUnderTestBp2BuildMutator = cc.CcLibraryStaticBp2Build
runBp2BuildTestCase(t, registerCcLibraryStaticModuleTypes, tc)
}
@ -954,11 +953,13 @@ func TestCcLibraryStaticGeneratedHeadersAllPartitions(t *testing.T) {
genrule {
name: "generated_hdr",
cmd: "nothing to see here",
bazel_module: { bp2build_available: false },
}
genrule {
name: "export_generated_hdr",
cmd: "nothing to see here",
bazel_module: { bp2build_available: false },
}
cc_library_static {
@ -998,48 +999,17 @@ func TestCcLibraryStaticArchSrcsExcludeSrcsGeneratedFiles(t *testing.T) {
"for-x86.cpp": "",
"not-for-x86.cpp": "",
"not-for-everything.cpp": "",
"dep/Android.bp": `
genrule {
name: "generated_src_other_pkg",
cmd: "nothing to see here",
}
genrule {
name: "generated_hdr_other_pkg",
cmd: "nothing to see here",
}
genrule {
name: "generated_hdr_other_pkg_x86",
cmd: "nothing to see here",
}
genrule {
name: "generated_hdr_other_pkg_android",
cmd: "nothing to see here",
}`,
"dep/Android.bp": simpleModuleDoNotConvertBp2build("genrule", "generated_src_other_pkg") +
simpleModuleDoNotConvertBp2build("genrule", "generated_hdr_other_pkg") +
simpleModuleDoNotConvertBp2build("genrule", "generated_src_other_pkg_x86") +
simpleModuleDoNotConvertBp2build("genrule", "generated_hdr_other_pkg_x86") +
simpleModuleDoNotConvertBp2build("genrule", "generated_hdr_other_pkg_android"),
},
blueprint: soongCcLibraryStaticPreamble + `
genrule {
name: "generated_src",
cmd: "nothing to see here",
}
genrule {
name: "generated_src_not_x86",
cmd: "nothing to see here",
}
genrule {
name: "generated_src_android",
cmd: "nothing to see here",
}
genrule {
name: "generated_hdr",
cmd: "nothing to see here",
}
blueprint: soongCcLibraryStaticPreamble +
simpleModuleDoNotConvertBp2build("genrule", "generated_src") +
simpleModuleDoNotConvertBp2build("genrule", "generated_src_not_x86") +
simpleModuleDoNotConvertBp2build("genrule", "generated_src_android") +
simpleModuleDoNotConvertBp2build("genrule", "generated_hdr") + `
cc_library_static {
name: "foo_static",
srcs: ["common.cpp", "not-for-*.cpp"],
@ -1373,9 +1343,8 @@ cc_library_static {
func TestStaticLibrary_SystemSharedLibsBionic(t *testing.T) {
runCcLibraryStaticTestCase(t, bp2buildTestCase{
description: "cc_library_static system_shared_libs set for bionic variant",
blueprint: soongCcLibraryStaticPreamble + `
cc_library{name: "libc"}
blueprint: soongCcLibraryStaticPreamble +
simpleModuleDoNotConvertBp2build("cc_library", "libc") + `
cc_library_static {
name: "target_bionic",
target: {
@ -1401,10 +1370,9 @@ cc_library_static {
func TestStaticLibrary_SystemSharedLibsLinuxRootAndLinuxBionic(t *testing.T) {
runCcLibraryStaticTestCase(t, bp2buildTestCase{
description: "cc_library_static system_shared_libs set for root and linux_bionic variant",
blueprint: soongCcLibraryStaticPreamble + `
cc_library{name: "libc"}
cc_library{name: "libm"}
blueprint: soongCcLibraryStaticPreamble +
simpleModuleDoNotConvertBp2build("cc_library", "libc") +
simpleModuleDoNotConvertBp2build("cc_library", "libm") + `
cc_library_static {
name: "target_linux_bionic",
system_shared_libs: ["libc"],

View file

@ -30,7 +30,6 @@ func runCcObjectTestCase(t *testing.T, tc bp2buildTestCase) {
t.Helper()
(&tc).moduleTypeUnderTest = "cc_object"
(&tc).moduleTypeUnderTestFactory = cc.ObjectFactory
(&tc).moduleTypeUnderTestBp2BuildMutator = cc.ObjectBp2Build
runBp2BuildTestCase(t, registerCcObjectModuleTypes, tc)
}

View file

@ -9,10 +9,9 @@ import (
func TestSharedPrebuiltLibrary(t *testing.T) {
runBp2BuildTestCaseSimple(t,
bp2buildTestCase{
description: "prebuilt library shared simple",
moduleTypeUnderTest: "cc_prebuilt_library_shared",
moduleTypeUnderTestFactory: cc.PrebuiltSharedLibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.PrebuiltLibrarySharedBp2Build,
description: "prebuilt library shared simple",
moduleTypeUnderTest: "cc_prebuilt_library_shared",
moduleTypeUnderTestFactory: cc.PrebuiltSharedLibraryFactory,
filesystem: map[string]string{
"libf.so": "",
},
@ -33,10 +32,9 @@ cc_prebuilt_library_shared {
func TestSharedPrebuiltLibraryWithArchVariance(t *testing.T) {
runBp2BuildTestCaseSimple(t,
bp2buildTestCase{
description: "prebuilt library shared with arch variance",
moduleTypeUnderTest: "cc_prebuilt_library_shared",
moduleTypeUnderTestFactory: cc.PrebuiltSharedLibraryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.PrebuiltLibrarySharedBp2Build,
description: "prebuilt library shared with arch variance",
moduleTypeUnderTest: "cc_prebuilt_library_shared",
moduleTypeUnderTestFactory: cc.PrebuiltSharedLibraryFactory,
filesystem: map[string]string{
"libf.so": "",
"libg.so": "",

View file

@ -25,7 +25,6 @@ func runFilegroupTestCase(t *testing.T, tc bp2buildTestCase) {
t.Helper()
(&tc).moduleTypeUnderTest = "filegroup"
(&tc).moduleTypeUnderTestFactory = android.FileGroupFactory
(&tc).moduleTypeUnderTestBp2BuildMutator = android.FilegroupBp2Build
runBp2BuildTestCase(t, registerFilegroupModuleTypes, tc)
}

View file

@ -28,7 +28,6 @@ func runGenruleTestCase(t *testing.T, tc bp2buildTestCase) {
t.Helper()
(&tc).moduleTypeUnderTest = "genrule"
(&tc).moduleTypeUnderTestFactory = genrule.GenRuleFactory
(&tc).moduleTypeUnderTestBp2BuildMutator = genrule.GenruleBp2Build
runBp2BuildTestCase(t, registerGenruleModuleTypes, tc)
}

View file

@ -25,7 +25,6 @@ func runPrebuiltEtcTestCase(t *testing.T, tc bp2buildTestCase) {
t.Helper()
(&tc).moduleTypeUnderTest = "prebuilt_etc"
(&tc).moduleTypeUnderTestFactory = etc.PrebuiltEtcFactory
(&tc).moduleTypeUnderTestBp2BuildMutator = etc.PrebuiltEtcBp2Build
runBp2BuildTestCase(t, registerPrebuiltEtcModuleTypes, tc)
}

View file

@ -17,10 +17,9 @@ func runBp2BuildTestCaseWithPythonLibraries(t *testing.T, tc bp2buildTestCase) {
func TestPythonBinaryHostSimple(t *testing.T) {
runBp2BuildTestCaseWithPythonLibraries(t, bp2buildTestCase{
description: "simple python_binary_host converts to a native py_binary",
moduleTypeUnderTest: "python_binary_host",
moduleTypeUnderTestFactory: python.PythonBinaryHostFactory,
moduleTypeUnderTestBp2BuildMutator: python.PythonBinaryBp2Build,
description: "simple python_binary_host converts to a native py_binary",
moduleTypeUnderTest: "python_binary_host",
moduleTypeUnderTestFactory: python.PythonBinaryHostFactory,
filesystem: map[string]string{
"a.py": "",
"b/c.py": "",
@ -40,7 +39,7 @@ func TestPythonBinaryHostSimple(t *testing.T) {
python_library_host {
name: "bar",
srcs: ["b/e.py"],
bazel_module: { bp2build_available: true },
bazel_module: { bp2build_available: false },
}`,
expectedBazelTargets: []string{
makeBazelTarget("py_binary", "foo", attrNameToString{
@ -59,10 +58,9 @@ func TestPythonBinaryHostSimple(t *testing.T) {
func TestPythonBinaryHostPy2(t *testing.T) {
runBp2BuildTestCaseSimple(t, bp2buildTestCase{
description: "py2 python_binary_host",
moduleTypeUnderTest: "python_binary_host",
moduleTypeUnderTestFactory: python.PythonBinaryHostFactory,
moduleTypeUnderTestBp2BuildMutator: python.PythonBinaryBp2Build,
description: "py2 python_binary_host",
moduleTypeUnderTest: "python_binary_host",
moduleTypeUnderTestFactory: python.PythonBinaryHostFactory,
blueprint: `python_binary_host {
name: "foo",
srcs: ["a.py"],
@ -89,10 +87,9 @@ func TestPythonBinaryHostPy2(t *testing.T) {
func TestPythonBinaryHostPy3(t *testing.T) {
runBp2BuildTestCaseSimple(t, bp2buildTestCase{
description: "py3 python_binary_host",
moduleTypeUnderTest: "python_binary_host",
moduleTypeUnderTestFactory: python.PythonBinaryHostFactory,
moduleTypeUnderTestBp2BuildMutator: python.PythonBinaryBp2Build,
description: "py3 python_binary_host",
moduleTypeUnderTest: "python_binary_host",
moduleTypeUnderTestFactory: python.PythonBinaryHostFactory,
blueprint: `python_binary_host {
name: "foo",
srcs: ["a.py"],
@ -119,10 +116,9 @@ func TestPythonBinaryHostPy3(t *testing.T) {
func TestPythonBinaryHostArchVariance(t *testing.T) {
runBp2BuildTestCaseSimple(t, bp2buildTestCase{
description: "test arch variants",
moduleTypeUnderTest: "python_binary_host",
moduleTypeUnderTestFactory: python.PythonBinaryHostFactory,
moduleTypeUnderTestBp2BuildMutator: python.PythonBinaryBp2Build,
description: "test arch variants",
moduleTypeUnderTest: "python_binary_host",
moduleTypeUnderTestFactory: python.PythonBinaryHostFactory,
filesystem: map[string]string{
"dir/arm.py": "",
"dir/x86.py": "",

View file

@ -18,7 +18,6 @@ func runPythonLibraryTestCase(t *testing.T, tc bp2buildTestCase) {
testCase.blueprint = fmt.Sprintf(testCase.blueprint, "python_library")
testCase.moduleTypeUnderTest = "python_library"
testCase.moduleTypeUnderTestFactory = python.PythonLibraryFactory
testCase.moduleTypeUnderTestBp2BuildMutator = python.PythonLibraryBp2Build
runBp2BuildTestCaseSimple(t, testCase)
}
@ -29,7 +28,6 @@ func runPythonLibraryHostTestCase(t *testing.T, tc bp2buildTestCase) {
testCase.blueprint = fmt.Sprintf(testCase.blueprint, "python_library_host")
testCase.moduleTypeUnderTest = "python_library_host"
testCase.moduleTypeUnderTestFactory = python.PythonLibraryHostFactory
testCase.moduleTypeUnderTestBp2BuildMutator = python.PythonLibraryHostBp2Build
runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {
ctx.RegisterModuleType("python_library", python.PythonLibraryFactory)
},

View file

@ -55,10 +55,9 @@ func runShBinaryTestCase(t *testing.T, tc bp2buildTestCase) {
func TestShBinarySimple(t *testing.T) {
runShBinaryTestCase(t, bp2buildTestCase{
description: "sh_binary test",
moduleTypeUnderTest: "sh_binary",
moduleTypeUnderTestFactory: sh.ShBinaryFactory,
moduleTypeUnderTestBp2BuildMutator: sh.ShBinaryBp2Build,
description: "sh_binary test",
moduleTypeUnderTest: "sh_binary",
moduleTypeUnderTestFactory: sh.ShBinaryFactory,
blueprint: `sh_binary {
name: "foo",
src: "foo.sh",

View file

@ -61,11 +61,10 @@ custom_cc_library_static {
`
runSoongConfigModuleTypeTest(t, bp2buildTestCase{
description: "soong config variables - soong_config_module_type is supported in bp2build",
moduleTypeUnderTest: "cc_library_static",
moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
blueprint: bp,
description: "soong config variables - soong_config_module_type is supported in bp2build",
moduleTypeUnderTest: "cc_library_static",
moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
blueprint: bp,
expectedBazelTargets: []string{`cc_library_static(
name = "foo",
copts = select({
@ -107,10 +106,9 @@ custom_cc_library_static {
`
runSoongConfigModuleTypeTest(t, bp2buildTestCase{
description: "soong config variables - soong_config_module_type_import is supported in bp2build",
moduleTypeUnderTest: "cc_library_static",
moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
description: "soong config variables - soong_config_module_type_import is supported in bp2build",
moduleTypeUnderTest: "cc_library_static",
moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
filesystem: map[string]string{
"foo/bar/SoongConfig.bp": configBp,
},
@ -161,11 +159,10 @@ custom_cc_library_static {
`
runSoongConfigModuleTypeTest(t, bp2buildTestCase{
description: "soong config variables - generates selects for string vars",
moduleTypeUnderTest: "cc_library_static",
moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
blueprint: bp,
description: "soong config variables - generates selects for string vars",
moduleTypeUnderTest: "cc_library_static",
moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
blueprint: bp,
expectedBazelTargets: []string{`cc_library_static(
name = "foo",
copts = select({
@ -232,11 +229,10 @@ custom_cc_library_static {
}`
runSoongConfigModuleTypeTest(t, bp2buildTestCase{
description: "soong config variables - generates selects for multiple variable types",
moduleTypeUnderTest: "cc_library_static",
moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
blueprint: bp,
description: "soong config variables - generates selects for multiple variable types",
moduleTypeUnderTest: "cc_library_static",
moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
blueprint: bp,
expectedBazelTargets: []string{`cc_library_static(
name = "foo",
copts = select({
@ -298,11 +294,10 @@ cc_library_static { name: "soc_default_static_dep", bazel_module: { bp2build_ava
`
runSoongConfigModuleTypeTest(t, bp2buildTestCase{
description: "soong config variables - generates selects for label list attributes",
moduleTypeUnderTest: "cc_library_static",
moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
blueprint: bp,
description: "soong config variables - generates selects for label list attributes",
moduleTypeUnderTest: "cc_library_static",
moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
blueprint: bp,
filesystem: map[string]string{
"foo/bar/Android.bp": otherDeps,
},
@ -365,11 +360,10 @@ cc_library_static {
`
runSoongConfigModuleTypeTest(t, bp2buildTestCase{
description: "soong config variables - defaults with a single namespace",
moduleTypeUnderTest: "cc_library_static",
moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
blueprint: bp,
description: "soong config variables - defaults with a single namespace",
moduleTypeUnderTest: "cc_library_static",
moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
blueprint: bp,
expectedBazelTargets: []string{`cc_library_static(
name = "lib",
copts = select({
@ -445,11 +439,10 @@ cc_library_static {
`
runSoongConfigModuleTypeTest(t, bp2buildTestCase{
description: "soong config variables - multiple defaults with a single namespace",
moduleTypeUnderTest: "cc_library_static",
moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
blueprint: bp,
description: "soong config variables - multiple defaults with a single namespace",
moduleTypeUnderTest: "cc_library_static",
moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
blueprint: bp,
expectedBazelTargets: []string{`cc_library_static(
name = "lib",
asflags = select({
@ -561,11 +554,10 @@ cc_library_static {
`
runSoongConfigModuleTypeTest(t, bp2buildTestCase{
description: "soong config variables - defaults with multiple namespaces",
moduleTypeUnderTest: "cc_library_static",
moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
blueprint: bp,
description: "soong config variables - defaults with multiple namespaces",
moduleTypeUnderTest: "cc_library_static",
moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
blueprint: bp,
expectedBazelTargets: []string{`cc_library_static(
name = "lib",
copts = select({
@ -652,11 +644,10 @@ cc_library { name: "lib_default", bazel_module: { bp2build_available: false } }
`
runSoongConfigModuleTypeTest(t, bp2buildTestCase{
description: "soong config variables - generates selects for library_linking_strategy",
moduleTypeUnderTest: "cc_binary",
moduleTypeUnderTestFactory: cc.BinaryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.BinaryBp2build,
blueprint: bp,
description: "soong config variables - generates selects for library_linking_strategy",
moduleTypeUnderTest: "cc_binary",
moduleTypeUnderTestFactory: cc.BinaryFactory,
blueprint: bp,
filesystem: map[string]string{
"foo/bar/Android.bp": otherDeps,
},
@ -733,11 +724,10 @@ cc_library { name: "lib_b", bazel_module: { bp2build_available: false } }
`
runSoongConfigModuleTypeTest(t, bp2buildTestCase{
description: "soong config variables - generates selects for library_linking_strategy",
moduleTypeUnderTest: "cc_binary",
moduleTypeUnderTestFactory: cc.BinaryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.BinaryBp2build,
blueprint: bp,
description: "soong config variables - generates selects for library_linking_strategy",
moduleTypeUnderTest: "cc_binary",
moduleTypeUnderTestFactory: cc.BinaryFactory,
blueprint: bp,
filesystem: map[string]string{
"foo/bar/Android.bp": otherDeps,
},
@ -821,11 +811,10 @@ cc_library { name: "lib_default", bazel_module: { bp2build_available: false } }
`
runSoongConfigModuleTypeTest(t, bp2buildTestCase{
description: "soong config variables - generates selects for library_linking_strategy",
moduleTypeUnderTest: "cc_binary",
moduleTypeUnderTestFactory: cc.BinaryFactory,
moduleTypeUnderTestBp2BuildMutator: cc.BinaryBp2build,
blueprint: bp,
description: "soong config variables - generates selects for library_linking_strategy",
moduleTypeUnderTest: "cc_binary",
moduleTypeUnderTestFactory: cc.BinaryFactory,
blueprint: bp,
filesystem: map[string]string{
"foo/bar/Android.bp": otherDeps,
},

View file

@ -74,16 +74,15 @@ func runBp2BuildTestCaseSimple(t *testing.T, tc bp2buildTestCase) {
}
type bp2buildTestCase struct {
description string
moduleTypeUnderTest string
moduleTypeUnderTestFactory android.ModuleFactory
moduleTypeUnderTestBp2BuildMutator func(android.TopDownMutatorContext)
blueprint string
expectedBazelTargets []string
filesystem map[string]string
dir string
expectedErr error
unconvertedDepsMode unconvertedDepsMode
description string
moduleTypeUnderTest string
moduleTypeUnderTestFactory android.ModuleFactory
blueprint string
expectedBazelTargets []string
filesystem map[string]string
dir string
expectedErr error
unconvertedDepsMode unconvertedDepsMode
}
func runBp2BuildTestCase(t *testing.T, registerModuleTypes func(ctx android.RegistrationContext), tc bp2buildTestCase) {
@ -105,7 +104,6 @@ func runBp2BuildTestCase(t *testing.T, registerModuleTypes func(ctx android.Regi
registerModuleTypes(ctx)
ctx.RegisterModuleType(tc.moduleTypeUnderTest, tc.moduleTypeUnderTestFactory)
ctx.RegisterBp2BuildConfig(bp2buildConfig)
ctx.RegisterBp2BuildMutator(tc.moduleTypeUnderTest, tc.moduleTypeUnderTestBp2BuildMutator)
ctx.RegisterForBazelConversion()
_, parseErrs := ctx.ParseFileList(dir, toParse)
@ -178,6 +176,9 @@ type customProps struct {
Arch_paths []string `android:"path,arch_variant"`
Arch_paths_exclude []string `android:"path,arch_variant"`
// Prop used to indicate this conversion should be 1 module -> multiple targets
One_to_many_prop *bool
}
type customModule struct {
@ -277,71 +278,65 @@ type customBazelModuleAttributes struct {
Arch_paths bazel.LabelListAttribute
}
func customBp2BuildMutator(ctx android.TopDownMutatorContext) {
if m, ok := ctx.Module().(*customModule); ok {
if !m.ConvertWithBp2build(ctx) {
return
}
func (m *customModule) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
paths := bazel.LabelListAttribute{}
paths := bazel.LabelListAttribute{}
if p := m.props.One_to_many_prop; p != nil && *p {
customBp2buildOneToMany(ctx, m)
return
}
for axis, configToProps := range m.GetArchVariantProperties(ctx, &customProps{}) {
for config, props := range configToProps {
if archProps, ok := props.(*customProps); ok && archProps.Arch_paths != nil {
paths.SetSelectValue(axis, config, android.BazelLabelForModuleSrcExcludes(ctx, archProps.Arch_paths, archProps.Arch_paths_exclude))
}
for axis, configToProps := range m.GetArchVariantProperties(ctx, &customProps{}) {
for config, props := range configToProps {
if archProps, ok := props.(*customProps); ok && archProps.Arch_paths != nil {
paths.SetSelectValue(axis, config, android.BazelLabelForModuleSrcExcludes(ctx, archProps.Arch_paths, archProps.Arch_paths_exclude))
}
}
paths.ResolveExcludes()
attrs := &customBazelModuleAttributes{
String_ptr_prop: m.props.String_ptr_prop,
String_list_prop: m.props.String_list_prop,
Arch_paths: paths,
}
attrs.Embedded_attr = m.props.Embedded_prop
if m.props.OtherEmbeddedProps != nil {
attrs.OtherEmbeddedAttr = &OtherEmbeddedAttr{Other_embedded_attr: m.props.OtherEmbeddedProps.Other_embedded_prop}
}
props := bazel.BazelTargetModuleProperties{
Rule_class: "custom",
}
ctx.CreateBazelTargetModule(props, android.CommonAttributes{Name: m.Name()}, attrs)
}
paths.ResolveExcludes()
attrs := &customBazelModuleAttributes{
String_ptr_prop: m.props.String_ptr_prop,
String_list_prop: m.props.String_list_prop,
Arch_paths: paths,
}
attrs.Embedded_attr = m.props.Embedded_prop
if m.props.OtherEmbeddedProps != nil {
attrs.OtherEmbeddedAttr = &OtherEmbeddedAttr{Other_embedded_attr: m.props.OtherEmbeddedProps.Other_embedded_prop}
}
props := bazel.BazelTargetModuleProperties{
Rule_class: "custom",
}
ctx.CreateBazelTargetModule(props, android.CommonAttributes{Name: m.Name()}, attrs)
}
// A bp2build mutator that uses load statements and creates a 1:M mapping from
// module to target.
func customBp2BuildMutatorFromStarlark(ctx android.TopDownMutatorContext) {
if m, ok := ctx.Module().(*customModule); ok {
if !m.ConvertWithBp2build(ctx) {
return
}
func customBp2buildOneToMany(ctx android.TopDownMutatorContext, m *customModule) {
baseName := m.Name()
attrs := &customBazelModuleAttributes{}
baseName := m.Name()
attrs := &customBazelModuleAttributes{}
myLibraryProps := bazel.BazelTargetModuleProperties{
Rule_class: "my_library",
Bzl_load_location: "//build/bazel/rules:rules.bzl",
}
ctx.CreateBazelTargetModule(myLibraryProps, android.CommonAttributes{Name: baseName}, attrs)
protoLibraryProps := bazel.BazelTargetModuleProperties{
Rule_class: "proto_library",
Bzl_load_location: "//build/bazel/rules:proto.bzl",
}
ctx.CreateBazelTargetModule(protoLibraryProps, android.CommonAttributes{Name: baseName + "_proto_library_deps"}, attrs)
myProtoLibraryProps := bazel.BazelTargetModuleProperties{
Rule_class: "my_proto_library",
Bzl_load_location: "//build/bazel/rules:proto.bzl",
}
ctx.CreateBazelTargetModule(myProtoLibraryProps, android.CommonAttributes{Name: baseName + "_my_proto_library_deps"}, attrs)
myLibraryProps := bazel.BazelTargetModuleProperties{
Rule_class: "my_library",
Bzl_load_location: "//build/bazel/rules:rules.bzl",
}
ctx.CreateBazelTargetModule(myLibraryProps, android.CommonAttributes{Name: baseName}, attrs)
protoLibraryProps := bazel.BazelTargetModuleProperties{
Rule_class: "proto_library",
Bzl_load_location: "//build/bazel/rules:proto.bzl",
}
ctx.CreateBazelTargetModule(protoLibraryProps, android.CommonAttributes{Name: baseName + "_proto_library_deps"}, attrs)
myProtoLibraryProps := bazel.BazelTargetModuleProperties{
Rule_class: "my_proto_library",
Bzl_load_location: "//build/bazel/rules:proto.bzl",
}
ctx.CreateBazelTargetModule(myProtoLibraryProps, android.CommonAttributes{Name: baseName + "_my_proto_library_deps"}, attrs)
}
// Helper method for tests to easily access the targets in a dir.
@ -353,7 +348,6 @@ func generateBazelTargetsForDir(codegenCtx *CodegenContext, dir string) (BazelTa
func registerCustomModuleForBp2buildConversion(ctx *android.TestContext) {
ctx.RegisterModuleType("custom", customModuleFactory)
ctx.RegisterBp2BuildMutator("custom", customBp2BuildMutator)
ctx.RegisterForBazelConversion()
}

View file

@ -69,13 +69,14 @@ func RegisterBinaryBuildComponents(ctx android.RegistrationContext) {
// cc_binary produces a binary that is runnable on a device.
func BinaryFactory() android.Module {
module, _ := NewBinary(android.HostAndDeviceSupported)
module, _ := newBinary(android.HostAndDeviceSupported, true)
return module.Init()
}
// cc_binary_host produces a binary that is runnable on a host.
func BinaryHostFactory() android.Module {
module, _ := NewBinary(android.HostSupported)
module, _ := newBinary(android.HostSupported, true)
module.bazelable = true
return module.Init()
}
@ -193,6 +194,10 @@ func (binary *binaryDecorator) linkerDeps(ctx DepsContext, deps Deps) Deps {
// Individual module implementations which comprise a C++ binary should call this function,
// set some fields on the result, and then call the Init function.
func NewBinary(hod android.HostOrDeviceSupported) (*Module, *binaryDecorator) {
return newBinary(hod, true)
}
func newBinary(hod android.HostOrDeviceSupported, bazelable bool) (*Module, *binaryDecorator) {
module := newModule(hod, android.MultilibFirst)
binary := &binaryDecorator{
baseLinker: NewBaseLinker(module.sanitize),
@ -201,6 +206,7 @@ func NewBinary(hod android.HostOrDeviceSupported) (*Module, *binaryDecorator) {
module.compiler = NewBaseCompiler()
module.linker = binary
module.installer = binary
module.bazelable = bazelable
// Allow module to be added as member of an sdk/module_exports.
module.sdkMemberTypes = []android.SdkMemberType{
@ -551,33 +557,7 @@ func (binary *binaryDecorator) verifyHostBionicLinker(ctx ModuleContext, in, lin
})
}
func init() {
android.RegisterBp2BuildMutator("cc_binary", BinaryBp2build)
android.RegisterBp2BuildMutator("cc_binary_host", BinaryHostBp2build)
}
func BinaryBp2build(ctx android.TopDownMutatorContext) {
binaryBp2build(ctx, "cc_binary")
}
func BinaryHostBp2build(ctx android.TopDownMutatorContext) {
binaryBp2build(ctx, "cc_binary_host")
}
func binaryBp2build(ctx android.TopDownMutatorContext, typ string) {
m, ok := ctx.Module().(*Module)
if !ok {
// Not a cc module
return
}
if !m.ConvertWithBp2build(ctx) {
return
}
if ctx.ModuleType() != typ {
return
}
func binaryBp2build(ctx android.TopDownMutatorContext, m *Module, typ string) {
var compatibleWith bazel.StringListAttribute
if typ == "cc_binary_host" {
//incompatible with android OS

View file

@ -786,8 +786,9 @@ type Module struct {
Properties BaseProperties
// initialize before calling Init
hod android.HostOrDeviceSupported
multilib android.Multilib
hod android.HostOrDeviceSupported
multilib android.Multilib
bazelable bool
// Allowable SdkMemberTypes of this module type.
sdkMemberTypes []android.SdkMemberType
@ -1150,7 +1151,9 @@ func (c *Module) Init() android.Module {
}
android.InitAndroidArchModule(c, c.hod, c.multilib)
android.InitBazelModule(c)
if c.bazelable {
android.InitBazelModule(c)
}
android.InitApexModule(c)
android.InitSdkAwareModule(c)
android.InitDefaultableModule(c)
@ -3185,6 +3188,24 @@ func (c *Module) testBinary() bool {
return false
}
func (c *Module) benchmarkBinary() bool {
if b, ok := c.linker.(interface {
benchmarkBinary() bool
}); ok {
return b.benchmarkBinary()
}
return false
}
func (c *Module) fuzzBinary() bool {
if f, ok := c.linker.(interface {
fuzzBinary() bool
}); ok {
return f.fuzzBinary()
}
return false
}
// Header returns true if the module is a header-only variant. (See cc/library.go header()).
func (c *Module) Header() bool {
if h, ok := c.linker.(interface {
@ -3430,6 +3451,41 @@ func (c *Module) AlwaysRequiresPlatformApexVariant() bool {
var _ snapshot.RelativeInstallPath = (*Module)(nil)
// ConvertWithBp2build converts Module to Bazel for bp2build.
func (c *Module) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
if c.Binary() {
binaryBp2build(ctx, c, ctx.ModuleType())
} else if c.Object() {
objectBp2Build(ctx, c)
} else if c.CcLibrary() {
if c.hod == android.HostSupported {
return
}
static := c.BuildStaticVariant()
shared := c.BuildSharedVariant()
prebuilt := c.IsPrebuilt()
if static && shared {
libraryBp2Build(ctx, c)
} else if !static && !shared {
libraryHeadersBp2Build(ctx, c)
} else if static {
if prebuilt {
prebuiltLibraryStaticBp2Build(ctx, c)
} else {
sharedOrStaticLibraryBp2Build(ctx, c, true)
}
} else if shared {
if prebuilt {
prebuiltLibrarySharedBp2Build(ctx, c)
} else {
sharedOrStaticLibraryBp2Build(ctx, c, false)
}
}
}
}
//
// Defaults
//

View file

@ -52,6 +52,10 @@ type fuzzBinary struct {
installedSharedDeps []string
}
func (fuzz *fuzzBinary) fuzzBinary() bool {
return true
}
func (fuzz *fuzzBinary) linkerProps() []interface{} {
props := fuzz.binaryDecorator.linkerProps()
props = append(props, &fuzz.fuzzPackagedModule.FuzzProperties)
@ -234,7 +238,7 @@ func (fuzz *fuzzBinary) install(ctx ModuleContext, file android.Path) {
}
func NewFuzz(hod android.HostOrDeviceSupported) *Module {
module, binary := NewBinary(hod)
module, binary := newBinary(hod, false)
binary.baseInstaller = NewFuzzInstaller()
module.sanitize.SetSanitizer(Fuzzer, true)

View file

@ -207,10 +207,6 @@ type FlagExporterProperties struct {
func init() {
RegisterLibraryBuildComponents(android.InitRegistrationContext)
android.RegisterBp2BuildMutator("cc_library_static", CcLibraryStaticBp2Build)
android.RegisterBp2BuildMutator("cc_library_shared", CcLibrarySharedBp2Build)
android.RegisterBp2BuildMutator("cc_library", CcLibraryBp2Build)
}
func RegisterLibraryBuildComponents(ctx android.RegistrationContext) {
@ -277,21 +273,12 @@ type stripAttributes struct {
None bazel.BoolAttribute
}
func CcLibraryBp2Build(ctx android.TopDownMutatorContext) {
m, ok := ctx.Module().(*Module)
if !ok || !m.ConvertWithBp2build(ctx) {
return
}
if ctx.ModuleType() != "cc_library" {
return
}
func libraryBp2Build(ctx android.TopDownMutatorContext, m *Module) {
// For some cc_library modules, their static variants are ready to be
// converted, but not their shared variants. For these modules, delegate to
// the cc_library_static bp2build converter temporarily instead.
if android.GenerateCcLibraryStaticOnly(ctx.Module().Name()) {
ccSharedOrStaticBp2BuildMutatorInternal(ctx, m, "cc_library_static")
sharedOrStaticLibraryBp2Build(ctx, m, true)
return
}
@ -421,6 +408,7 @@ func LibraryFactory() android.Module {
staticLibrarySdkMemberType,
staticAndSharedLibrarySdkMemberType,
}
module.bazelable = true
module.bazelHandler = &ccLibraryBazelHandler{module: module}
return module.Init()
}
@ -430,6 +418,7 @@ func LibraryStaticFactory() android.Module {
module, library := NewLibrary(android.HostAndDeviceSupported)
library.BuildOnlyStatic()
module.sdkMemberTypes = []android.SdkMemberType{staticLibrarySdkMemberType}
module.bazelable = true
module.bazelHandler = &ccLibraryBazelHandler{module: module}
return module.Init()
}
@ -439,6 +428,7 @@ func LibrarySharedFactory() android.Module {
module, library := NewLibrary(android.HostAndDeviceSupported)
library.BuildOnlyShared()
module.sdkMemberTypes = []android.SdkMemberType{sharedLibrarySdkMemberType}
module.bazelable = true
module.bazelHandler = &ccLibraryBazelHandler{module: module}
return module.Init()
}
@ -2413,25 +2403,7 @@ func maybeInjectBoringSSLHash(ctx android.ModuleContext, outputFile android.Modu
return outputFile
}
func ccSharedOrStaticBp2BuildMutator(ctx android.TopDownMutatorContext, modType string) {
module, ok := ctx.Module().(*Module)
if !ok {
// Not a cc module
return
}
if !module.ConvertWithBp2build(ctx) {
return
}
ccSharedOrStaticBp2BuildMutatorInternal(ctx, module, modType)
}
func ccSharedOrStaticBp2BuildMutatorInternal(ctx android.TopDownMutatorContext, module *Module, modType string) {
if modType != "cc_library_static" && modType != "cc_library_shared" {
panic("ccSharedOrStaticBp2BuildMutatorInternal only supports cc_library_{static,shared}")
}
isStatic := modType == "cc_library_static"
func sharedOrStaticLibraryBp2Build(ctx android.TopDownMutatorContext, module *Module, isStatic bool) {
baseAttributes := bp2BuildParseBaseProps(ctx, module)
compilerAttrs := baseAttributes.compilerAttributes
linkerAttrs := baseAttributes.linkerAttributes
@ -2541,6 +2513,12 @@ func ccSharedOrStaticBp2BuildMutatorInternal(ctx android.TopDownMutatorContext,
}
}
var modType string
if isStatic {
modType = "cc_library_static"
} else {
modType = "cc_library_shared"
}
props := bazel.BazelTargetModuleProperties{
Rule_class: modType,
Bzl_load_location: fmt.Sprintf("//build/bazel/rules:%s.bzl", modType),
@ -2575,18 +2553,6 @@ type bazelCcLibraryStaticAttributes struct {
Features bazel.StringListAttribute
}
func CcLibraryStaticBp2Build(ctx android.TopDownMutatorContext) {
isLibraryStatic := ctx.ModuleType() == "cc_library_static"
if b, ok := ctx.Module().(android.Bazelable); ok {
// This is created by a custom soong config module type, so its ctx.ModuleType() is not
// cc_library_static. Check its BaseModuleType.
isLibraryStatic = isLibraryStatic || b.BaseModuleType() == "cc_library_static"
}
if isLibraryStatic {
ccSharedOrStaticBp2BuildMutator(ctx, "cc_library_static")
}
}
// TODO(b/199902614): Can this be factored to share with the other Attributes?
type bazelCcLibrarySharedAttributes struct {
staticOrSharedAttributes
@ -2618,15 +2584,3 @@ type bazelCcLibrarySharedAttributes struct {
Features bazel.StringListAttribute
}
func CcLibrarySharedBp2Build(ctx android.TopDownMutatorContext) {
isLibraryShared := ctx.ModuleType() == "cc_library_shared"
if b, ok := ctx.Module().(android.Bazelable); ok {
// This is created by a custom soong config module type, so its ctx.ModuleType() is not
// cc_library_shared. Check its BaseModuleType.
isLibraryShared = isLibraryShared || b.BaseModuleType() == "cc_library_shared"
}
if isLibraryShared {
ccSharedOrStaticBp2BuildMutator(ctx, "cc_library_shared")
}
}

View file

@ -25,7 +25,6 @@ func init() {
// Register sdk member types.
android.RegisterSdkMemberType(headersLibrarySdkMemberType)
android.RegisterBp2BuildMutator("cc_library_headers", CcLibraryHeadersBp2Build)
}
var headersLibrarySdkMemberType = &librarySdkMemberType{
@ -96,6 +95,7 @@ func LibraryHeaderFactory() android.Module {
module, library := NewLibrary(android.HostAndDeviceSupported)
library.HeaderOnly()
module.sdkMemberTypes = []android.SdkMemberType{headersLibrarySdkMemberType}
module.bazelable = true
module.bazelHandler = &libraryHeaderBazelHander{module: module, library: library}
return module.Init()
}
@ -117,21 +117,7 @@ type bazelCcLibraryHeadersAttributes struct {
System_dynamic_deps bazel.LabelListAttribute
}
func CcLibraryHeadersBp2Build(ctx android.TopDownMutatorContext) {
module, ok := ctx.Module().(*Module)
if !ok {
// Not a cc module
return
}
if !module.ConvertWithBp2build(ctx) {
return
}
if ctx.ModuleType() != "cc_library_headers" {
return
}
func libraryHeadersBp2Build(ctx android.TopDownMutatorContext, module *Module) {
baseAttributes := bp2BuildParseBaseProps(ctx, module)
exportedIncludes := bp2BuildParseExportedIncludes(ctx, module, baseAttributes.includes)
linkerAttrs := baseAttributes.linkerAttributes

View file

@ -29,7 +29,6 @@ func init() {
android.RegisterModuleType("cc_object", ObjectFactory)
android.RegisterSdkMemberType(ccObjectSdkMemberType)
android.RegisterBp2BuildMutator("cc_object", ObjectBp2Build)
}
var ccObjectSdkMemberType = &librarySdkMemberType{
@ -117,6 +116,7 @@ func ObjectFactory() android.Module {
module.sdkMemberTypes = []android.SdkMemberType{ccObjectSdkMemberType}
module.bazelable = true
return module.Init()
}
@ -135,19 +135,9 @@ type bazelObjectAttributes struct {
Linker_script bazel.LabelAttribute
}
// ObjectBp2Build is the bp2build converter from cc_object modules to the
// objectBp2Build is the bp2build converter from cc_object modules to the
// Bazel equivalent target, plus any necessary include deps for the cc_object.
func ObjectBp2Build(ctx android.TopDownMutatorContext) {
m, ok := ctx.Module().(*Module)
if !ok || !m.ConvertWithBp2build(ctx) {
return
}
// a Module can be something other than a cc_object.
if ctx.ModuleType() != "cc_object" {
return
}
func objectBp2Build(ctx android.TopDownMutatorContext, m *Module) {
if m.compiler == nil {
// a cc_object must have access to the compiler decorator for its props.
ctx.ModuleErrorf("compiler must not be nil for a cc_object module")

View file

@ -32,8 +32,6 @@ func RegisterPrebuiltBuildComponents(ctx android.RegistrationContext) {
ctx.RegisterModuleType("cc_prebuilt_test_library_shared", PrebuiltSharedTestLibraryFactory)
ctx.RegisterModuleType("cc_prebuilt_object", prebuiltObjectFactory)
ctx.RegisterModuleType("cc_prebuilt_binary", prebuiltBinaryFactory)
android.RegisterBp2BuildMutator("cc_prebuilt_library_shared", PrebuiltLibrarySharedBp2Build)
}
type prebuiltLinkerInterface interface {
@ -299,6 +297,7 @@ func PrebuiltSharedTestLibraryFactory() android.Module {
func NewPrebuiltSharedLibrary(hod android.HostOrDeviceSupported) (*Module, *libraryDecorator) {
module, library := NewPrebuiltLibrary(hod, "srcs")
library.BuildOnlyShared()
module.bazelable = true
// Prebuilt shared libraries can be included in APEXes
android.InitApexModule(module)
@ -316,31 +315,41 @@ func PrebuiltStaticLibraryFactory() android.Module {
func NewPrebuiltStaticLibrary(hod android.HostOrDeviceSupported) (*Module, *libraryDecorator) {
module, library := NewPrebuiltLibrary(hod, "srcs")
library.BuildOnlyStatic()
module.bazelable = true
module.bazelHandler = &prebuiltStaticLibraryBazelHandler{module: module, library: library}
return module, library
}
type bazelPrebuiltLibraryStaticAttributes struct {
Static_library bazel.LabelAttribute
Export_includes bazel.StringListAttribute
Export_system_includes bazel.StringListAttribute
}
func prebuiltLibraryStaticBp2Build(ctx android.TopDownMutatorContext, module *Module) {
prebuiltAttrs := Bp2BuildParsePrebuiltLibraryProps(ctx, module)
exportedIncludes := Bp2BuildParseExportedIncludesForPrebuiltLibrary(ctx, module)
attrs := &bazelPrebuiltLibraryStaticAttributes{
Static_library: prebuiltAttrs.Src,
Export_includes: exportedIncludes.Includes,
Export_system_includes: exportedIncludes.SystemIncludes,
}
props := bazel.BazelTargetModuleProperties{
Rule_class: "prebuilt_library_static",
Bzl_load_location: "//build/bazel/rules:prebuilt_library_static.bzl",
}
name := android.RemoveOptionalPrebuiltPrefix(module.Name())
ctx.CreateBazelTargetModule(props, android.CommonAttributes{Name: name}, attrs)
}
type bazelPrebuiltLibrarySharedAttributes struct {
Shared_library bazel.LabelAttribute
}
func PrebuiltLibrarySharedBp2Build(ctx android.TopDownMutatorContext) {
module, ok := ctx.Module().(*Module)
if !ok {
// Not a cc module
return
}
if !module.ConvertWithBp2build(ctx) {
return
}
if ctx.ModuleType() != "cc_prebuilt_library_shared" {
return
}
prebuiltLibrarySharedBp2BuildInternal(ctx, module)
}
func prebuiltLibrarySharedBp2BuildInternal(ctx android.TopDownMutatorContext, module *Module) {
func prebuiltLibrarySharedBp2Build(ctx android.TopDownMutatorContext, module *Module) {
prebuiltAttrs := Bp2BuildParsePrebuiltLibraryProps(ctx, module)
attrs := &bazelPrebuiltLibrarySharedAttributes{

View file

@ -461,7 +461,7 @@ func (test *testBinary) install(ctx ModuleContext, file android.Path) {
}
func NewTest(hod android.HostOrDeviceSupported) *Module {
module, binary := NewBinary(hod)
module, binary := newBinary(hod, false)
module.multilib = android.MultilibBoth
binary.baseInstaller = NewTestInstaller()
@ -551,6 +551,10 @@ type benchmarkDecorator struct {
testConfig android.Path
}
func (benchmark *benchmarkDecorator) benchmarkBinary() bool {
return true
}
func (benchmark *benchmarkDecorator) linkerInit(ctx BaseModuleContext) {
runpath := "../../lib"
if ctx.toolchain().Is64Bit() {
@ -588,7 +592,7 @@ func (benchmark *benchmarkDecorator) install(ctx ModuleContext, file android.Pat
}
func NewBenchmark(hod android.HostOrDeviceSupported) *Module {
module, binary := NewBinary(hod)
module, binary := newBinary(hod, false)
module.multilib = android.MultilibBoth
binary.baseInstaller = NewBaseInstaller("benchmarktest", "benchmarktest64", InstallInData)

View file

@ -63,7 +63,6 @@ func RegisterPrebuiltEtcBuildComponents(ctx android.RegistrationContext) {
ctx.RegisterModuleType("prebuilt_defaults", defaultsFactory)
android.RegisterBp2BuildMutator("prebuilt_etc", PrebuiltEtcBp2Build)
}
var PrepareForTestWithPrebuiltEtc = android.FixtureRegisterWithContext(RegisterPrebuiltEtcBuildComponents)
@ -663,20 +662,14 @@ type bazelPrebuiltEtcAttributes struct {
Installable bazel.BoolAttribute
}
func PrebuiltEtcBp2Build(ctx android.TopDownMutatorContext) {
module, ok := ctx.Module().(*PrebuiltEtc)
if !ok {
// Not an prebuilt_etc
return
}
if !module.ConvertWithBp2build(ctx) {
return
}
// ConvertWithBp2build performs bp2build conversion of PrebuiltEtc
func (p *PrebuiltEtc) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
// All prebuilt_* modules are PrebuiltEtc, but at this time, we only convert prebuilt_etc modules.
if ctx.ModuleType() != "prebuilt_etc" {
return
}
prebuiltEtcBp2BuildInternal(ctx, module)
prebuiltEtcBp2BuildInternal(ctx, p)
}
func prebuiltEtcBp2BuildInternal(ctx android.TopDownMutatorContext, module *PrebuiltEtc) {

View file

@ -67,13 +67,6 @@ func RegisterGenruleBuildComponents(ctx android.RegistrationContext) {
ctx.FinalDepsMutators(func(ctx android.RegisterMutatorsContext) {
ctx.BottomUp("genrule_tool_deps", toolDepsMutator).Parallel()
})
android.RegisterBp2BuildMutator("genrule", GenruleBp2Build)
android.RegisterBp2BuildMutator("cc_genrule", CcGenruleBp2Build)
}
func RegisterGenruleBp2BuildDeps(ctx android.RegisterMutatorsContext) {
ctx.BottomUp("genrule_tool_deps", toolDepsMutator)
}
var (
@ -833,38 +826,8 @@ type bazelGenruleAttributes struct {
Cmd string
}
// CcGenruleBp2Build is for cc_genrule.
func CcGenruleBp2Build(ctx android.TopDownMutatorContext) {
m, ok := ctx.Module().(*Module)
if !ok || !m.ConvertWithBp2build(ctx) {
return
}
if ctx.ModuleType() != "cc_genrule" {
// Not a cc_genrule.
return
}
genruleBp2Build(ctx)
}
// GenruleBp2Build is used for genrule.
func GenruleBp2Build(ctx android.TopDownMutatorContext) {
m, ok := ctx.Module().(*Module)
if !ok || !m.ConvertWithBp2build(ctx) {
return
}
if ctx.ModuleType() != "genrule" {
// Not a regular genrule.
return
}
genruleBp2Build(ctx)
}
func genruleBp2Build(ctx android.TopDownMutatorContext) {
m, _ := ctx.Module().(*Module)
// ConvertWithBp2build converts a Soong module -> Bazel target.
func (m *Module) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
// Bazel only has the "tools" attribute.
tools_prop := android.BazelLabelForModuleDeps(ctx, m.properties.Tools)
tool_files_prop := android.BazelLabelForModuleSrc(ctx, m.properties.Tool_files)

View file

@ -43,9 +43,6 @@ func RegisterAppBuildComponents(ctx android.RegistrationContext) {
ctx.RegisterModuleType("android_app_certificate", AndroidAppCertificateFactory)
ctx.RegisterModuleType("override_android_app", OverrideAndroidAppModuleFactory)
ctx.RegisterModuleType("override_android_test", OverrideAndroidTestModuleFactory)
android.RegisterBp2BuildMutator("android_app_certificate", AndroidAppCertificateBp2Build)
android.RegisterBp2BuildMutator("android_app", AppBp2Build)
}
// AndroidManifest.xml merging
@ -945,6 +942,7 @@ func AndroidAppFactory() android.Module {
android.InitDefaultableModule(module)
android.InitOverridableModule(module, &module.appProperties.Overrides)
android.InitApexModule(module)
android.InitBazelModule(module)
return module
}
@ -1407,23 +1405,11 @@ type bazelAndroidAppCertificateAttributes struct {
Certificate string
}
func AndroidAppCertificateBp2Build(ctx android.TopDownMutatorContext) {
module, ok := ctx.Module().(*AndroidAppCertificate)
if !ok {
// Not an Android app certificate
return
}
if !module.ConvertWithBp2build(ctx) {
return
}
if ctx.ModuleType() != "android_app_certificate" {
return
}
androidAppCertificateBp2BuildInternal(ctx, module)
func (m *AndroidAppCertificate) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
androidAppCertificateBp2Build(ctx, m)
}
func androidAppCertificateBp2BuildInternal(ctx android.TopDownMutatorContext, module *AndroidAppCertificate) {
func androidAppCertificateBp2Build(ctx android.TopDownMutatorContext, module *AndroidAppCertificate) {
var certificate string
if module.properties.Certificate != nil {
certificate = *module.properties.Certificate
@ -1448,16 +1434,8 @@ type bazelAndroidAppAttributes struct {
Resource_files bazel.LabelListAttribute
}
// AppBp2Build is used for android_app.
func AppBp2Build(ctx android.TopDownMutatorContext) {
a, ok := ctx.Module().(*AndroidApp)
if !ok || !a.ConvertWithBp2build(ctx) {
return
}
if ctx.ModuleType() != "android_app" {
return
}
// ConvertWithBp2build is used to convert android_app to Bazel.
func (a *AndroidApp) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
//TODO(b/209577426): Support multiple arch variants
srcs := bazel.MakeLabelListAttribute(android.BazelLabelForModuleSrcExcludes(ctx, a.properties.Srcs, a.properties.Exclude_srcs))

View file

@ -27,7 +27,6 @@ import (
func init() {
registerPythonBinaryComponents(android.InitRegistrationContext)
android.RegisterBp2BuildMutator("python_binary_host", PythonBinaryBp2Build)
}
func registerPythonBinaryComponents(ctx android.RegistrationContext) {
@ -41,17 +40,7 @@ type bazelPythonBinaryAttributes struct {
Python_version *string
}
func PythonBinaryBp2Build(ctx android.TopDownMutatorContext) {
m, ok := ctx.Module().(*Module)
if !ok || !m.ConvertWithBp2build(ctx) {
return
}
// a Module can be something other than a python_binary_host
if ctx.ModuleType() != "python_binary_host" {
return
}
func pythonBinaryBp2Build(ctx android.TopDownMutatorContext, m *Module) {
var main *string
for _, propIntf := range m.GetProperties() {
if props, ok := propIntf.(*BinaryProperties); ok {

View file

@ -17,8 +17,6 @@ package python
// This file contains the module types for building Python library.
import (
"fmt"
"android/soong/android"
"android/soong/bazel"
@ -27,8 +25,6 @@ import (
func init() {
registerPythonLibraryComponents(android.InitRegistrationContext)
android.RegisterBp2BuildMutator("python_library_host", PythonLibraryHostBp2Build)
android.RegisterBp2BuildMutator("python_library", PythonLibraryBp2Build)
}
func registerPythonLibraryComponents(ctx android.RegistrationContext) {
@ -50,25 +46,7 @@ type bazelPythonLibraryAttributes struct {
Srcs_version *string
}
func PythonLibraryHostBp2Build(ctx android.TopDownMutatorContext) {
pythonLibBp2Build(ctx, "python_library_host")
}
func PythonLibraryBp2Build(ctx android.TopDownMutatorContext) {
pythonLibBp2Build(ctx, "python_library")
}
func pythonLibBp2Build(ctx android.TopDownMutatorContext, modType string) {
m, ok := ctx.Module().(*Module)
if !ok || !m.ConvertWithBp2build(ctx) {
return
}
// a Module can be something other than a `modType`
if ctx.ModuleType() != modType {
return
}
func pythonLibBp2Build(ctx android.TopDownMutatorContext, m *Module) {
// TODO(b/182306917): this doesn't fully handle all nested props versioned
// by the python version, which would have been handled by the version split
// mutator. This is sufficient for very simple python_library modules under
@ -81,9 +59,7 @@ func pythonLibBp2Build(ctx android.TopDownMutatorContext, modType string) {
} else if !py2Enabled && py3Enabled {
python_version = &pyVersion3
} else if !py2Enabled && !py3Enabled {
panic(fmt.Errorf(
"error for '%s' module: bp2build's %s converter doesn't understand having "+
"neither py2 nor py3 enabled", m.Name(), modType))
ctx.ModuleErrorf("bp2build converter doesn't understand having neither py2 nor py3 enabled")
} else {
// do nothing, since python_version defaults to PY2ANDPY3
}

View file

@ -23,6 +23,7 @@ import (
"strings"
"android/soong/bazel"
"github.com/google/blueprint"
"github.com/google/blueprint/proptools"
@ -667,18 +668,25 @@ func (p *Module) createSrcsZip(ctx android.ModuleContext, pkgPath string) androi
}
// isPythonLibModule returns whether the given module is a Python library Module or not
// This is distinguished by the fact that Python libraries are not installable, while other Python
// modules are.
func isPythonLibModule(module blueprint.Module) bool {
if m, ok := module.(*Module); ok {
// Python library has no bootstrapper or installer
if m.bootstrapper == nil && m.installer == nil {
return true
}
return m.isLibrary()
}
return false
}
// This is distinguished by the fact that Python libraries are not installable, while other Python
// modules are.
func (p *Module) isLibrary() bool {
// Python library has no bootstrapper or installer
return p.bootstrapper == nil && p.installer == nil
}
func (p *Module) isBinary() bool {
_, ok := p.bootstrapper.(*binaryDecorator)
return ok
}
// collectPathsFromTransitiveDeps checks for source/data files for duplicate paths
// for module and its transitive dependencies and collects list of data/source file
// zips for transitive dependencies.
@ -752,6 +760,14 @@ func (p *Module) InstallInData() bool {
return true
}
func (p *Module) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
if p.isLibrary() {
pythonLibBp2Build(ctx, p)
} else if p.isBinary() {
pythonBinaryBp2Build(ctx, p)
}
}
var Bool = proptools.Bool
var BoolDefault = proptools.BoolDefault
var String = proptools.String

View file

@ -42,8 +42,6 @@ func init() {
pctx.Import("android/soong/android")
registerShBuildComponents(android.InitRegistrationContext)
android.RegisterBp2BuildMutator("sh_binary", ShBinaryBp2Build)
}
func registerShBuildComponents(ctx android.RegistrationContext) {
@ -540,12 +538,7 @@ type bazelShBinaryAttributes struct {
// visibility
}
func ShBinaryBp2Build(ctx android.TopDownMutatorContext) {
m, ok := ctx.Module().(*ShBinary)
if !ok || !m.ConvertWithBp2build(ctx) {
return
}
func (m *ShBinary) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
srcs := bazel.MakeLabelListAttribute(
android.BazelLabelForModuleSrc(ctx, []string{*m.properties.Src}))