Mixed bazel/soong build prototype for genrule

With this change, bazel_module is a specifiable property on
genrule module definitions. With bazel-enabled mode, soong_build will
defer to Bazel for information on these modules.

source build/soong/bazelenv.sh to enter bazel-enabled mode.

Test: Manually verified on bionic/libc genrules using aosp_cf_x86_phone-userdebug
Change-Id: I3619848186d50be7273a5eba31c79989b981d408
This commit is contained in:
Chris Parsons
2020-09-29 02:23:17 -04:00
parent 5cc622ad78
commit f3c96efea4
9 changed files with 483 additions and 45 deletions

View File

@@ -128,7 +128,7 @@ var _ PathContext = MakeVarsContext(nil)
type MakeVarsProvider func(ctx MakeVarsContext)
func RegisterMakeVarsProvider(pctx PackageContext, provider MakeVarsProvider) {
makeVarsProviders = append(makeVarsProviders, makeVarsProvider{pctx, provider})
makeVarsInitProviders = append(makeVarsInitProviders, makeVarsProvider{pctx, provider})
}
// SingletonMakeVarsProvider is a Singleton with an extra method to provide extra values to be exported to Make.
@@ -142,7 +142,8 @@ type SingletonMakeVarsProvider interface {
// registerSingletonMakeVarsProvider adds a singleton that implements SingletonMakeVarsProvider to the list of
// MakeVarsProviders to run.
func registerSingletonMakeVarsProvider(singleton SingletonMakeVarsProvider) {
makeVarsProviders = append(makeVarsProviders, makeVarsProvider{pctx, SingletonmakeVarsProviderAdapter(singleton)})
singletonMakeVarsProviders = append(singletonMakeVarsProviders,
makeVarsProvider{pctx, SingletonmakeVarsProviderAdapter(singleton)})
}
// SingletonmakeVarsProviderAdapter converts a SingletonMakeVarsProvider to a MakeVarsProvider.
@@ -171,7 +172,11 @@ type makeVarsProvider struct {
call MakeVarsProvider
}
var makeVarsProviders []makeVarsProvider
// Collection of makevars providers that are registered in init() methods.
var makeVarsInitProviders []makeVarsProvider
// Collection of singleton makevars providers that are not registered as part of init() methods.
var singletonMakeVarsProviders []makeVarsProvider
type makeVarsContext struct {
SingletonContext
@@ -219,7 +224,7 @@ func (s *makeVarsSingleton) GenerateBuildActions(ctx SingletonContext) {
var vars []makeVarsVariable
var dists []dist
var phonies []phony
for _, provider := range makeVarsProviders {
for _, provider := range append(makeVarsInitProviders) {
mctx := &makeVarsContext{
SingletonContext: ctx,
pctx: provider.pctx,
@@ -232,6 +237,25 @@ func (s *makeVarsSingleton) GenerateBuildActions(ctx SingletonContext) {
dists = append(dists, mctx.dists...)
}
for _, provider := range append(singletonMakeVarsProviders) {
mctx := &makeVarsContext{
SingletonContext: ctx,
pctx: provider.pctx,
}
provider.call(mctx)
vars = append(vars, mctx.vars...)
phonies = append(phonies, mctx.phonies...)
dists = append(dists, mctx.dists...)
}
// Clear singleton makevars providers after use. Since these are in-memory
// singletons, this ensures state is reset if the build tree is processed
// multiple times.
// TODO(cparsons): Clean up makeVarsProviders to be part of the context.
singletonMakeVarsProviders = nil
ctx.VisitAllModules(func(m Module) {
if provider, ok := m.(ModuleMakeVarsProvider); ok && m.Enabled() {
mctx := &makeVarsContext{