From 65494b962b5a1fc90fe09046763b25cb91b5ec63 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Thu, 7 Feb 2019 14:25:51 -0800 Subject: [PATCH] Make MakeVarsContext a PathContext Expose all of SingletonContext to makeVarsContext, and then export the subset of it that is used through MakeVarsContext.SingletonContext, plus what is necessary for PathContext, directly through MakeVarsContext. Test: m checkbuild Change-Id: Ie00f36e577fe110b6fa03b901da489d8547773c6 --- android/makevars.go | 41 ++++++++++++++++++++++++--------------- android/singleton.go | 5 +++++ cc/makevars.go | 2 +- java/support_libraries.go | 9 ++++----- 4 files changed, 35 insertions(+), 22 deletions(-) diff --git a/android/makevars.go b/android/makevars.go index 3a7ec6e01..366bb6b61 100644 --- a/android/makevars.go +++ b/android/makevars.go @@ -22,6 +22,8 @@ import ( "strconv" "strings" + "github.com/google/blueprint" + "github.com/google/blueprint/pathtools" "github.com/google/blueprint/proptools" ) @@ -38,7 +40,21 @@ func androidMakeVarsProvider(ctx MakeVarsContext) { type MakeVarsContext interface { Config() Config DeviceConfig() DeviceConfig - SingletonContext() SingletonContext + AddNinjaFileDeps(deps ...string) + Fs() pathtools.FileSystem + + ModuleName(module blueprint.Module) string + ModuleDir(module blueprint.Module) string + ModuleSubDir(module blueprint.Module) string + ModuleType(module blueprint.Module) string + BlueprintFile(module blueprint.Module) string + + ModuleErrorf(module blueprint.Module, format string, args ...interface{}) + Errorf(format string, args ...interface{}) + Failed() bool + + VisitAllModules(visit func(Module)) + VisitAllModulesIf(pred func(Module) bool, visit func(Module)) // Verify the make variable matches the Soong version, fail the build // if it does not. If the make variable is empty, just set it. @@ -66,6 +82,8 @@ type MakeVarsContext interface { CheckRaw(name, value string) } +var _ PathContext = MakeVarsContext(nil) + type MakeVarsProvider func(ctx MakeVarsContext) func RegisterMakeVarsProvider(pctx PackageContext, provider MakeVarsProvider) { @@ -92,8 +110,8 @@ type makeVarsProvider struct { var makeVarsProviders []makeVarsProvider type makeVarsContext struct { + SingletonContext config Config - ctx SingletonContext pctx PackageContext vars []makeVarsVariable } @@ -121,9 +139,8 @@ func (s *makeVarsSingleton) GenerateBuildActions(ctx SingletonContext) { vars := []makeVarsVariable{} for _, provider := range makeVarsProviders { mctx := &makeVarsContext{ - config: ctx.Config(), - ctx: ctx, - pctx: provider.pctx, + SingletonContext: ctx, + pctx: provider.pctx, } provider.call(mctx) @@ -229,22 +246,14 @@ my_check_failed := return buf.Bytes() } -func (c *makeVarsContext) Config() Config { - return c.config -} - func (c *makeVarsContext) DeviceConfig() DeviceConfig { - return DeviceConfig{c.config.deviceConfig} -} - -func (c *makeVarsContext) SingletonContext() SingletonContext { - return c.ctx + return DeviceConfig{c.Config().deviceConfig} } var ninjaDescaper = strings.NewReplacer("$$", "$") func (c *makeVarsContext) Eval(ninjaStr string) (string, error) { - s, err := c.ctx.Eval(c.pctx, ninjaStr) + s, err := c.SingletonContext.Eval(c.pctx, ninjaStr) if err != nil { return "", err } @@ -265,7 +274,7 @@ func (c *makeVarsContext) addVariableRaw(name, value string, strict, sort bool) func (c *makeVarsContext) addVariable(name, ninjaStr string, strict, sort bool) { value, err := c.Eval(ninjaStr) if err != nil { - c.ctx.Errorf(err.Error()) + c.SingletonContext.Errorf(err.Error()) } c.addVariableRaw(name, value, strict, sort) } diff --git a/android/singleton.go b/android/singleton.go index f926435b1..05ec6b542 100644 --- a/android/singleton.go +++ b/android/singleton.go @@ -22,6 +22,7 @@ import ( // SingletonContext type SingletonContext interface { Config() Config + DeviceConfig() DeviceConfig ModuleName(module blueprint.Module) string ModuleDir(module blueprint.Module) string @@ -93,6 +94,10 @@ func (s singletonContextAdaptor) Config() Config { return s.SingletonContext.Config().(Config) } +func (s singletonContextAdaptor) DeviceConfig() DeviceConfig { + return DeviceConfig{s.Config().deviceConfig} +} + func (s singletonContextAdaptor) Variable(pctx PackageContext, name, value string) { s.SingletonContext.Variable(pctx.PackageContext, name, value) } diff --git a/cc/makevars.go b/cc/makevars.go index d91735f1f..4a9ade2d4 100644 --- a/cc/makevars.go +++ b/cc/makevars.go @@ -100,7 +100,7 @@ func makeVarsProvider(ctx android.MakeVarsContext) { // Filter vendor_public_library that are exported to make exportedVendorPublicLibraries := []string{} - ctx.SingletonContext().VisitAllModules(func(module android.Module) { + ctx.VisitAllModules(func(module android.Module) { if ccModule, ok := module.(*Module); ok { baseName := ccModule.BaseModuleName() if inList(baseName, vendorPublicLibraries) && module.ExportedToMake() { diff --git a/java/support_libraries.go b/java/support_libraries.go index 320afae19..5a72f41a9 100644 --- a/java/support_libraries.go +++ b/java/support_libraries.go @@ -28,9 +28,8 @@ func init() { func supportLibrariesMakeVarsProvider(ctx android.MakeVarsContext) { var supportAars, supportJars []string - sctx := ctx.SingletonContext() - sctx.VisitAllModules(func(module android.Module) { - dir := sctx.ModuleDir(module) + ctx.VisitAllModules(func(module android.Module) { + dir := ctx.ModuleDir(module) switch { case strings.HasPrefix(dir, "prebuilts/sdk/current/extras"), dir == "prebuilts/sdk/current/androidx", @@ -43,7 +42,7 @@ func supportLibrariesMakeVarsProvider(ctx android.MakeVarsContext) { return } - name := sctx.ModuleName(module) + name := ctx.ModuleName(module) if strings.HasSuffix(name, "-nodeps") { return } @@ -54,7 +53,7 @@ func supportLibrariesMakeVarsProvider(ctx android.MakeVarsContext) { case *Library, *Import: supportJars = append(supportJars, name) default: - sctx.ModuleErrorf(module, "unknown module type %t", module) + ctx.ModuleErrorf(module, "unknown module type %t", module) } })