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:
@@ -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{
|
||||
|
Reference in New Issue
Block a user