Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3e8c964f authored by Cole Faust's avatar Cole Faust Committed by Gerrit Code Review
Browse files

Merge "Always merge build files"

parents 0178442b 324a92e4
Loading
Loading
Loading
Loading
+11 −31
Original line number Diff line number Diff line
@@ -46,10 +46,7 @@ var (
		"bionic":                                Bp2BuildDefaultTrueRecursively,
		"bootable/recovery/tools/recovery_l10n": Bp2BuildDefaultTrue,

		"build/bazel/examples/apex/minimal":           Bp2BuildDefaultTrueRecursively,
		"build/bazel/examples/soong_config_variables": Bp2BuildDefaultTrueRecursively,
		"build/bazel/examples/python":                 Bp2BuildDefaultTrueRecursively,
		"build/bazel/examples/gensrcs":                Bp2BuildDefaultTrueRecursively,
		"build/bazel":                        Bp2BuildDefaultTrueRecursively,
		"build/make/target/product/security": Bp2BuildDefaultTrue,
		"build/make/tools/signapk":           Bp2BuildDefaultTrue,
		"build/make/tools/zipalign":          Bp2BuildDefaultTrueRecursively,
@@ -282,24 +279,7 @@ var (
		// This is actually build/bazel/build.BAZEL symlinked to ./BUILD
		".":/*recursive = */ false,

		// build/bazel/examples/apex/... BUILD files should be generated, so
		// build/bazel is not recursive. Instead list each subdirectory under
		// build/bazel explicitly.
		"build/bazel":/* recursive = */ false,
		"build/bazel/ci/dist":/* recursive = */ false,
		"build/bazel/examples/android_app":/* recursive = */ true,
		"build/bazel/examples/cc":/* recursive = */ true,
		"build/bazel/examples/java":/* recursive = */ true,
		"build/bazel/examples/partitions":/* recursive = */ true,
		"build/bazel/bazel_skylib":/* recursive = */ true,
		"build/bazel/rules":/* recursive = */ true,
		"build/bazel/rules_cc":/* recursive = */ true,
		"build/bazel/scripts":/* recursive = */ true,
		"build/bazel/tests":/* recursive = */ true,
		"build/bazel/platforms":/* recursive = */ true,
		"build/bazel/product_config":/* recursive = */ true,
		"build/bazel/product_variables":/* recursive = */ true,
		"build/bazel/vendor/google":/* recursive = */ true,
		"build/bazel":/* recursive = */ true,
		"build/bazel_common_rules":/* recursive = */ true,
		// build/make/tools/signapk BUILD file is generated, so build/make/tools is not recursive.
		"build/make/tools":/* recursive = */ false,
+29 −41
Original line number Diff line number Diff line
@@ -211,7 +211,7 @@ func (b *BazelModuleBase) GetBazelLabel(ctx BazelConversionPathContext, module b
	return "" // no label for unconverted module
}

type bp2BuildConversionAllowlist struct {
type Bp2BuildConversionAllowlist struct {
	// Configure modules in these directories to enable bp2build_available: true or false by default.
	defaultConfig allowlists.Bp2BuildConfig

@@ -241,14 +241,14 @@ type bp2BuildConversionAllowlist struct {

// GenerateCcLibraryStaticOnly returns whether a cc_library module should only
// generate a static version of itself based on the current global configuration.
func (a bp2BuildConversionAllowlist) GenerateCcLibraryStaticOnly(moduleName string) bool {
func (a Bp2BuildConversionAllowlist) GenerateCcLibraryStaticOnly(moduleName string) bool {
	return a.ccLibraryStaticOnly[moduleName]
}

// NewBp2BuildAllowlist creates a new, empty bp2BuildConversionAllowlist
// NewBp2BuildAllowlist creates a new, empty Bp2BuildConversionAllowlist
// which can be populated using builder pattern Set* methods
func NewBp2BuildAllowlist() bp2BuildConversionAllowlist {
	return bp2BuildConversionAllowlist{
func NewBp2BuildAllowlist() Bp2BuildConversionAllowlist {
	return Bp2BuildConversionAllowlist{
		allowlists.Bp2BuildConfig{},
		map[string]bool{},
		map[string]bool{},
@@ -259,7 +259,7 @@ func NewBp2BuildAllowlist() bp2BuildConversionAllowlist {
}

// SetDefaultConfig copies the entries from defaultConfig into the allowlist
func (a bp2BuildConversionAllowlist) SetDefaultConfig(defaultConfig allowlists.Bp2BuildConfig) bp2BuildConversionAllowlist {
func (a Bp2BuildConversionAllowlist) SetDefaultConfig(defaultConfig allowlists.Bp2BuildConfig) Bp2BuildConversionAllowlist {
	if a.defaultConfig == nil {
		a.defaultConfig = allowlists.Bp2BuildConfig{}
	}
@@ -271,7 +271,7 @@ func (a bp2BuildConversionAllowlist) SetDefaultConfig(defaultConfig allowlists.B
}

// SetKeepExistingBuildFile copies the entries from keepExistingBuildFile into the allowlist
func (a bp2BuildConversionAllowlist) SetKeepExistingBuildFile(keepExistingBuildFile map[string]bool) bp2BuildConversionAllowlist {
func (a Bp2BuildConversionAllowlist) SetKeepExistingBuildFile(keepExistingBuildFile map[string]bool) Bp2BuildConversionAllowlist {
	if a.keepExistingBuildFile == nil {
		a.keepExistingBuildFile = map[string]bool{}
	}
@@ -283,7 +283,7 @@ func (a bp2BuildConversionAllowlist) SetKeepExistingBuildFile(keepExistingBuildF
}

// SetModuleAlwaysConvertList copies the entries from moduleAlwaysConvert into the allowlist
func (a bp2BuildConversionAllowlist) SetModuleAlwaysConvertList(moduleAlwaysConvert []string) bp2BuildConversionAllowlist {
func (a Bp2BuildConversionAllowlist) SetModuleAlwaysConvertList(moduleAlwaysConvert []string) Bp2BuildConversionAllowlist {
	if a.moduleAlwaysConvert == nil {
		a.moduleAlwaysConvert = map[string]bool{}
	}
@@ -295,7 +295,7 @@ func (a bp2BuildConversionAllowlist) SetModuleAlwaysConvertList(moduleAlwaysConv
}

// SetModuleTypeAlwaysConvertList copies the entries from moduleTypeAlwaysConvert into the allowlist
func (a bp2BuildConversionAllowlist) SetModuleTypeAlwaysConvertList(moduleTypeAlwaysConvert []string) bp2BuildConversionAllowlist {
func (a Bp2BuildConversionAllowlist) SetModuleTypeAlwaysConvertList(moduleTypeAlwaysConvert []string) Bp2BuildConversionAllowlist {
	if a.moduleTypeAlwaysConvert == nil {
		a.moduleTypeAlwaysConvert = map[string]bool{}
	}
@@ -307,7 +307,7 @@ func (a bp2BuildConversionAllowlist) SetModuleTypeAlwaysConvertList(moduleTypeAl
}

// SetModuleDoNotConvertList copies the entries from moduleDoNotConvert into the allowlist
func (a bp2BuildConversionAllowlist) SetModuleDoNotConvertList(moduleDoNotConvert []string) bp2BuildConversionAllowlist {
func (a Bp2BuildConversionAllowlist) SetModuleDoNotConvertList(moduleDoNotConvert []string) Bp2BuildConversionAllowlist {
	if a.moduleDoNotConvert == nil {
		a.moduleDoNotConvert = map[string]bool{}
	}
@@ -319,7 +319,7 @@ func (a bp2BuildConversionAllowlist) SetModuleDoNotConvertList(moduleDoNotConver
}

// SetCcLibraryStaticOnlyList copies the entries from ccLibraryStaticOnly into the allowlist
func (a bp2BuildConversionAllowlist) SetCcLibraryStaticOnlyList(ccLibraryStaticOnly []string) bp2BuildConversionAllowlist {
func (a Bp2BuildConversionAllowlist) SetCcLibraryStaticOnlyList(ccLibraryStaticOnly []string) Bp2BuildConversionAllowlist {
	if a.ccLibraryStaticOnly == nil {
		a.ccLibraryStaticOnly = map[string]bool{}
	}
@@ -330,33 +330,15 @@ func (a bp2BuildConversionAllowlist) SetCcLibraryStaticOnlyList(ccLibraryStaticO
	return a
}

var bp2BuildAllowListKey = NewOnceKey("Bp2BuildAllowlist")
var bp2buildAllowlist OncePer

func GetBp2BuildAllowList() bp2BuildConversionAllowlist {
	return bp2buildAllowlist.Once(bp2BuildAllowListKey, func() interface{} {
		return NewBp2BuildAllowlist().SetDefaultConfig(allowlists.Bp2buildDefaultConfig).
			SetKeepExistingBuildFile(allowlists.Bp2buildKeepExistingBuildFile).
			SetModuleAlwaysConvertList(allowlists.Bp2buildModuleAlwaysConvertList).
			SetModuleTypeAlwaysConvertList(allowlists.Bp2buildModuleTypeAlwaysConvertList).
			SetModuleDoNotConvertList(allowlists.Bp2buildModuleDoNotConvertList).
			SetCcLibraryStaticOnlyList(allowlists.Bp2buildCcLibraryStaticOnlyList)
	}).(bp2BuildConversionAllowlist)
}

// ShouldKeepExistingBuildFileForDir returns whether an existing BUILD file should be
// added to the build symlink forest based on the current global configuration.
func ShouldKeepExistingBuildFileForDir(dir string) bool {
	return shouldKeepExistingBuildFileForDir(GetBp2BuildAllowList(), dir)
}

func shouldKeepExistingBuildFileForDir(allowlist bp2BuildConversionAllowlist, dir string) bool {
	if _, ok := allowlist.keepExistingBuildFile[dir]; ok {
func (a Bp2BuildConversionAllowlist) ShouldKeepExistingBuildFileForDir(dir string) bool {
	if _, ok := a.keepExistingBuildFile[dir]; ok {
		// Exact dir match
		return true
	}
	// Check if subtree match
	for prefix, recursive := range allowlist.keepExistingBuildFile {
	for prefix, recursive := range a.keepExistingBuildFile {
		if recursive {
			if strings.HasPrefix(dir, prefix+"/") {
				return true
@@ -367,6 +349,20 @@ func shouldKeepExistingBuildFileForDir(allowlist bp2BuildConversionAllowlist, di
	return false
}

var bp2BuildAllowListKey = NewOnceKey("Bp2BuildAllowlist")
var bp2buildAllowlist OncePer

func GetBp2BuildAllowList() Bp2BuildConversionAllowlist {
	return bp2buildAllowlist.Once(bp2BuildAllowListKey, func() interface{} {
		return NewBp2BuildAllowlist().SetDefaultConfig(allowlists.Bp2buildDefaultConfig).
			SetKeepExistingBuildFile(allowlists.Bp2buildKeepExistingBuildFile).
			SetModuleAlwaysConvertList(allowlists.Bp2buildModuleAlwaysConvertList).
			SetModuleTypeAlwaysConvertList(allowlists.Bp2buildModuleTypeAlwaysConvertList).
			SetModuleDoNotConvertList(allowlists.Bp2buildModuleDoNotConvertList).
			SetCcLibraryStaticOnlyList(allowlists.Bp2buildCcLibraryStaticOnlyList)
	}).(Bp2BuildConversionAllowlist)
}

// MixedBuildsEnabled returns true if a module is ready to be replaced by a
// converted or handcrafted Bazel target. As a side effect, calling this
// method will also log whether this module is mixed build enabled for
@@ -431,7 +427,7 @@ func (b *BazelModuleBase) shouldConvertWithBp2build(ctx bazelOtherModuleContext,
	}

	moduleName := module.Name()
	allowlist := ctx.Config().bp2buildPackageConfig
	allowlist := ctx.Config().Bp2buildPackageConfig
	moduleNameAllowed := allowlist.moduleAlwaysConvert[moduleName]
	moduleTypeAllowed := allowlist.moduleTypeAlwaysConvert[ctx.OtherModuleType(module)]
	allowlistConvert := moduleNameAllowed || moduleTypeAllowed
@@ -447,14 +443,6 @@ func (b *BazelModuleBase) shouldConvertWithBp2build(ctx bazelOtherModuleContext,
		return false
	}

	if allowlistConvert && shouldKeepExistingBuildFileForDir(allowlist, packagePath) {
		if moduleNameAllowed {
			ctx.ModuleErrorf("A module cannot be in a directory listed in keepExistingBuildFile"+
				" and also be in moduleAlwaysConvert. Directory: '%s'", packagePath)
			return false
		}
	}

	// This is a tristate value: true, false, or unset.
	if ok, directoryPath := bp2buildDefaultTrueRecursively(packagePath, allowlist.defaultConfig); ok {
		if moduleNameAllowed {
+9 −30
Original line number Diff line number Diff line
@@ -158,7 +158,7 @@ func (m TestBazelModule) GenerateBuildActions(blueprint.ModuleContext) {

type TestBazelConversionContext struct {
	omc       bazel.OtherModuleTestContext
	allowlist bp2BuildConversionAllowlist
	allowlist Bp2BuildConversionAllowlist
	errors    []string
}

@@ -183,7 +183,7 @@ func (bcc *TestBazelConversionContext) ModuleErrorf(format string, args ...inter
func (bcc *TestBazelConversionContext) Config() Config {
	return Config{
		&config{
			bp2buildPackageConfig: bcc.allowlist,
			Bp2buildPackageConfig: bcc.allowlist,
		},
	}
}
@@ -202,7 +202,7 @@ func TestBp2BuildAllowlist(t *testing.T) {
		shouldConvert  bool
		expectedErrors []string
		module         TestBazelModule
		allowlist      bp2BuildConversionAllowlist
		allowlist      Bp2BuildConversionAllowlist
	}{
		{
			description:   "allowlist enables module",
@@ -215,7 +215,7 @@ func TestBp2BuildAllowlist(t *testing.T) {
				},
				BazelModuleBase: bazelableBazelModuleBase,
			},
			allowlist: bp2BuildConversionAllowlist{
			allowlist: Bp2BuildConversionAllowlist{
				moduleAlwaysConvert: map[string]bool{
					"foo": true,
				},
@@ -233,7 +233,7 @@ func TestBp2BuildAllowlist(t *testing.T) {
				},
				BazelModuleBase: bazelableBazelModuleBase,
			},
			allowlist: bp2BuildConversionAllowlist{
			allowlist: Bp2BuildConversionAllowlist{
				moduleAlwaysConvert: map[string]bool{
					"foo": true,
				},
@@ -254,7 +254,7 @@ func TestBp2BuildAllowlist(t *testing.T) {
				},
				BazelModuleBase: bazelableBazelModuleBase,
			},
			allowlist: bp2BuildConversionAllowlist{
			allowlist: Bp2BuildConversionAllowlist{
				moduleAlwaysConvert: map[string]bool{
					"foo": true,
				},
@@ -263,27 +263,6 @@ func TestBp2BuildAllowlist(t *testing.T) {
				},
			},
		},
		{
			description:    "module in allowlist and existing BUILD file",
			shouldConvert:  false,
			expectedErrors: []string{"A module cannot be in a directory listed in keepExistingBuildFile and also be in moduleAlwaysConvert. Directory: 'existing/build/dir'"},
			module: TestBazelModule{
				TestModuleInfo: bazel.TestModuleInfo{
					ModuleName: "foo",
					Typ:        "rule1",
					Dir:        "existing/build/dir",
				},
				BazelModuleBase: bazelableBazelModuleBase,
			},
			allowlist: bp2BuildConversionAllowlist{
				moduleAlwaysConvert: map[string]bool{
					"foo": true,
				},
				keepExistingBuildFile: map[string]bool{
					"existing/build/dir": true,
				},
			},
		},
		{
			description:    "module allowlist and enabled directory",
			shouldConvert:  false,
@@ -296,7 +275,7 @@ func TestBp2BuildAllowlist(t *testing.T) {
				},
				BazelModuleBase: bazelableBazelModuleBase,
			},
			allowlist: bp2BuildConversionAllowlist{
			allowlist: Bp2BuildConversionAllowlist{
				moduleAlwaysConvert: map[string]bool{
					"foo": true,
				},
@@ -317,7 +296,7 @@ func TestBp2BuildAllowlist(t *testing.T) {
				},
				BazelModuleBase: bazelableBazelModuleBase,
			},
			allowlist: bp2BuildConversionAllowlist{
			allowlist: Bp2BuildConversionAllowlist{
				moduleAlwaysConvert: map[string]bool{
					"foo": true,
				},
@@ -344,7 +323,7 @@ func TestBp2BuildAllowlist(t *testing.T) {
					},
				},
			},
			allowlist: bp2BuildConversionAllowlist{
			allowlist: Bp2BuildConversionAllowlist{
				moduleAlwaysConvert: map[string]bool{
					"foo": true,
				},
+2 −2
Original line number Diff line number Diff line
@@ -189,7 +189,7 @@ type config struct {
	mockBpList string

	BuildMode                      SoongBuildMode
	bp2buildPackageConfig          bp2BuildConversionAllowlist
	Bp2buildPackageConfig          Bp2BuildConversionAllowlist
	Bp2buildSoongConfigDefinitions soongconfig.Bp2BuildSoongConfigDefinitions

	// If testAllowNonExistentPaths is true then PathForSource and PathForModuleSrc won't error
@@ -482,7 +482,7 @@ func NewConfig(moduleListFile string, buildMode SoongBuildMode, runGoTests bool,

	config.BuildMode = buildMode
	config.BazelContext, err = NewBazelContext(config)
	config.bp2buildPackageConfig = GetBp2BuildAllowList()
	config.Bp2buildPackageConfig = GetBp2BuildAllowList()

	return Config{config}, err
}
+2 −2
Original line number Diff line number Diff line
@@ -213,8 +213,8 @@ func (ctx *TestContext) FinalDepsMutators(f RegisterMutatorFunc) {
	ctx.finalDeps = append(ctx.finalDeps, f)
}

func (ctx *TestContext) RegisterBp2BuildConfig(config bp2BuildConversionAllowlist) {
	ctx.config.bp2buildPackageConfig = config
func (ctx *TestContext) RegisterBp2BuildConfig(config Bp2BuildConversionAllowlist) {
	ctx.config.Bp2buildPackageConfig = config
}

// PreArchBp2BuildMutators adds mutators to be register for converting Android Blueprint modules
Loading