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
This commit is contained in:
Colin Cross 2019-02-07 14:25:51 -08:00
parent 7cf14099b7
commit 65494b962b
4 changed files with 35 additions and 22 deletions

View File

@ -22,6 +22,8 @@ import (
"strconv" "strconv"
"strings" "strings"
"github.com/google/blueprint"
"github.com/google/blueprint/pathtools"
"github.com/google/blueprint/proptools" "github.com/google/blueprint/proptools"
) )
@ -38,7 +40,21 @@ func androidMakeVarsProvider(ctx MakeVarsContext) {
type MakeVarsContext interface { type MakeVarsContext interface {
Config() Config Config() Config
DeviceConfig() DeviceConfig 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 // Verify the make variable matches the Soong version, fail the build
// if it does not. If the make variable is empty, just set it. // if it does not. If the make variable is empty, just set it.
@ -66,6 +82,8 @@ type MakeVarsContext interface {
CheckRaw(name, value string) CheckRaw(name, value string)
} }
var _ PathContext = MakeVarsContext(nil)
type MakeVarsProvider func(ctx MakeVarsContext) type MakeVarsProvider func(ctx MakeVarsContext)
func RegisterMakeVarsProvider(pctx PackageContext, provider MakeVarsProvider) { func RegisterMakeVarsProvider(pctx PackageContext, provider MakeVarsProvider) {
@ -92,8 +110,8 @@ type makeVarsProvider struct {
var makeVarsProviders []makeVarsProvider var makeVarsProviders []makeVarsProvider
type makeVarsContext struct { type makeVarsContext struct {
SingletonContext
config Config config Config
ctx SingletonContext
pctx PackageContext pctx PackageContext
vars []makeVarsVariable vars []makeVarsVariable
} }
@ -121,8 +139,7 @@ func (s *makeVarsSingleton) GenerateBuildActions(ctx SingletonContext) {
vars := []makeVarsVariable{} vars := []makeVarsVariable{}
for _, provider := range makeVarsProviders { for _, provider := range makeVarsProviders {
mctx := &makeVarsContext{ mctx := &makeVarsContext{
config: ctx.Config(), SingletonContext: ctx,
ctx: ctx,
pctx: provider.pctx, pctx: provider.pctx,
} }
@ -229,22 +246,14 @@ my_check_failed :=
return buf.Bytes() return buf.Bytes()
} }
func (c *makeVarsContext) Config() Config {
return c.config
}
func (c *makeVarsContext) DeviceConfig() DeviceConfig { func (c *makeVarsContext) DeviceConfig() DeviceConfig {
return DeviceConfig{c.config.deviceConfig} return DeviceConfig{c.Config().deviceConfig}
}
func (c *makeVarsContext) SingletonContext() SingletonContext {
return c.ctx
} }
var ninjaDescaper = strings.NewReplacer("$$", "$") var ninjaDescaper = strings.NewReplacer("$$", "$")
func (c *makeVarsContext) Eval(ninjaStr string) (string, error) { 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 { if err != nil {
return "", err 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) { func (c *makeVarsContext) addVariable(name, ninjaStr string, strict, sort bool) {
value, err := c.Eval(ninjaStr) value, err := c.Eval(ninjaStr)
if err != nil { if err != nil {
c.ctx.Errorf(err.Error()) c.SingletonContext.Errorf(err.Error())
} }
c.addVariableRaw(name, value, strict, sort) c.addVariableRaw(name, value, strict, sort)
} }

View File

@ -22,6 +22,7 @@ import (
// SingletonContext // SingletonContext
type SingletonContext interface { type SingletonContext interface {
Config() Config Config() Config
DeviceConfig() DeviceConfig
ModuleName(module blueprint.Module) string ModuleName(module blueprint.Module) string
ModuleDir(module blueprint.Module) string ModuleDir(module blueprint.Module) string
@ -93,6 +94,10 @@ func (s singletonContextAdaptor) Config() Config {
return s.SingletonContext.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) { func (s singletonContextAdaptor) Variable(pctx PackageContext, name, value string) {
s.SingletonContext.Variable(pctx.PackageContext, name, value) s.SingletonContext.Variable(pctx.PackageContext, name, value)
} }

View File

@ -100,7 +100,7 @@ func makeVarsProvider(ctx android.MakeVarsContext) {
// Filter vendor_public_library that are exported to make // Filter vendor_public_library that are exported to make
exportedVendorPublicLibraries := []string{} exportedVendorPublicLibraries := []string{}
ctx.SingletonContext().VisitAllModules(func(module android.Module) { ctx.VisitAllModules(func(module android.Module) {
if ccModule, ok := module.(*Module); ok { if ccModule, ok := module.(*Module); ok {
baseName := ccModule.BaseModuleName() baseName := ccModule.BaseModuleName()
if inList(baseName, vendorPublicLibraries) && module.ExportedToMake() { if inList(baseName, vendorPublicLibraries) && module.ExportedToMake() {

View File

@ -28,9 +28,8 @@ func init() {
func supportLibrariesMakeVarsProvider(ctx android.MakeVarsContext) { func supportLibrariesMakeVarsProvider(ctx android.MakeVarsContext) {
var supportAars, supportJars []string var supportAars, supportJars []string
sctx := ctx.SingletonContext() ctx.VisitAllModules(func(module android.Module) {
sctx.VisitAllModules(func(module android.Module) { dir := ctx.ModuleDir(module)
dir := sctx.ModuleDir(module)
switch { switch {
case strings.HasPrefix(dir, "prebuilts/sdk/current/extras"), case strings.HasPrefix(dir, "prebuilts/sdk/current/extras"),
dir == "prebuilts/sdk/current/androidx", dir == "prebuilts/sdk/current/androidx",
@ -43,7 +42,7 @@ func supportLibrariesMakeVarsProvider(ctx android.MakeVarsContext) {
return return
} }
name := sctx.ModuleName(module) name := ctx.ModuleName(module)
if strings.HasSuffix(name, "-nodeps") { if strings.HasSuffix(name, "-nodeps") {
return return
} }
@ -54,7 +53,7 @@ func supportLibrariesMakeVarsProvider(ctx android.MakeVarsContext) {
case *Library, *Import: case *Library, *Import:
supportJars = append(supportJars, name) supportJars = append(supportJars, name)
default: default:
sctx.ModuleErrorf(module, "unknown module type %t", module) ctx.ModuleErrorf(module, "unknown module type %t", module)
} }
}) })