diff options
Diffstat (limited to 'android/package_ctx.go')
-rw-r--r-- | android/package_ctx.go | 102 |
1 files changed, 66 insertions, 36 deletions
diff --git a/android/package_ctx.go b/android/package_ctx.go index d32e82b2..1626f766 100644 --- a/android/package_ctx.go +++ b/android/package_ctx.go @@ -22,14 +22,14 @@ import ( "github.com/google/blueprint/pathtools" ) -// AndroidPackageContext is a wrapper for blueprint.PackageContext that adds +// PackageContext is a wrapper for blueprint.PackageContext that adds // some android-specific helper functions. -type AndroidPackageContext struct { +type PackageContext struct { blueprint.PackageContext } -func NewPackageContext(pkgPath string) AndroidPackageContext { - return AndroidPackageContext{blueprint.NewPackageContext(pkgPath)} +func NewPackageContext(pkgPath string) PackageContext { + return PackageContext{blueprint.NewPackageContext(pkgPath)} } // configErrorWrapper can be used with Path functions when a Context is not @@ -39,7 +39,7 @@ func NewPackageContext(pkgPath string) AndroidPackageContext { // The most common use here will be with VariableFunc, where only a config is // provided, and an error should be returned. type configErrorWrapper struct { - pctx AndroidPackageContext + pctx PackageContext config Config errors []error } @@ -61,13 +61,43 @@ func (e *configErrorWrapper) Fs() pathtools.FileSystem { return nil } +// VariableFunc wraps blueprint.PackageContext.VariableFunc, converting the interface{} config +// argument to a Config. +func (p PackageContext) VariableFunc(name string, + f func(Config) (string, error)) blueprint.Variable { + + return p.PackageContext.VariableFunc(name, func(config interface{}) (string, error) { + return f(config.(Config)) + }) +} + +// PoolFunc wraps blueprint.PackageContext.PoolFunc, converting the interface{} config +// argument to a Config. +func (p PackageContext) PoolFunc(name string, + f func(Config) (blueprint.PoolParams, error)) blueprint.Pool { + + return p.PackageContext.PoolFunc(name, func(config interface{}) (blueprint.PoolParams, error) { + return f(config.(Config)) + }) +} + +// RuleFunc wraps blueprint.PackageContext.RuleFunc, converting the interface{} config +// argument to a Config. +func (p PackageContext) RuleFunc(name string, + f func(Config) (blueprint.RuleParams, error), argNames ...string) blueprint.Rule { + + return p.PackageContext.RuleFunc(name, func(config interface{}) (blueprint.RuleParams, error) { + return f(config.(Config)) + }, argNames...) +} + // SourcePathVariable returns a Variable whose value is the source directory // appended with the supplied path. It may only be called during a Go package's // initialization - either from the init() function or as part of a // package-scoped variable's initialization. -func (p AndroidPackageContext) SourcePathVariable(name, path string) blueprint.Variable { - return p.VariableFunc(name, func(config interface{}) (string, error) { - ctx := &configErrorWrapper{p, config.(Config), []error{}} +func (p PackageContext) SourcePathVariable(name, path string) blueprint.Variable { + return p.VariableFunc(name, func(config Config) (string, error) { + ctx := &configErrorWrapper{p, config, []error{}} p := safePathForSource(ctx, path) if len(ctx.errors) > 0 { return "", ctx.errors[0] @@ -80,9 +110,9 @@ func (p AndroidPackageContext) SourcePathVariable(name, path string) blueprint.V // appended with the supplied paths, joined with separator. It may only be // called during a Go package's initialization - either from the init() // function or as part of a package-scoped variable's initialization. -func (p AndroidPackageContext) SourcePathsVariable(name, separator string, paths ...string) blueprint.Variable { - return p.VariableFunc(name, func(config interface{}) (string, error) { - ctx := &configErrorWrapper{p, config.(Config), []error{}} +func (p PackageContext) SourcePathsVariable(name, separator string, paths ...string) blueprint.Variable { + return p.VariableFunc(name, func(config Config) (string, error) { + ctx := &configErrorWrapper{p, config, []error{}} var ret []string for _, path := range paths { p := safePathForSource(ctx, path) @@ -100,14 +130,14 @@ func (p AndroidPackageContext) SourcePathsVariable(name, separator string, paths // The environment variable is not required to point to a path inside the source tree. // It may only be called during a Go package's initialization - either from the init() function or // as part of a package-scoped variable's initialization. -func (p AndroidPackageContext) SourcePathVariableWithEnvOverride(name, path, env string) blueprint.Variable { - return p.VariableFunc(name, func(config interface{}) (string, error) { - ctx := &configErrorWrapper{p, config.(Config), []error{}} +func (p PackageContext) SourcePathVariableWithEnvOverride(name, path, env string) blueprint.Variable { + return p.VariableFunc(name, func(config Config) (string, error) { + ctx := &configErrorWrapper{p, config, []error{}} p := safePathForSource(ctx, path) if len(ctx.errors) > 0 { return "", ctx.errors[0] } - return config.(Config).GetenvWithDefault(env, p.String()), nil + return config.GetenvWithDefault(env, p.String()), nil }) } @@ -115,8 +145,8 @@ func (p AndroidPackageContext) SourcePathVariableWithEnvOverride(name, path, env // in the bin directory for host targets. It may only be called during a Go // package's initialization - either from the init() function or as part of a // package-scoped variable's initialization. -func (p AndroidPackageContext) HostBinToolVariable(name, path string) blueprint.Variable { - return p.VariableFunc(name, func(config interface{}) (string, error) { +func (p PackageContext) HostBinToolVariable(name, path string) blueprint.Variable { + return p.VariableFunc(name, func(config Config) (string, error) { po, err := p.HostBinToolPath(config, path) if err != nil { return "", err @@ -125,8 +155,8 @@ func (p AndroidPackageContext) HostBinToolVariable(name, path string) blueprint. }) } -func (p AndroidPackageContext) HostBinToolPath(config interface{}, path string) (Path, error) { - ctx := &configErrorWrapper{p, config.(Config), []error{}} +func (p PackageContext) HostBinToolPath(config Config, path string) (Path, error) { + ctx := &configErrorWrapper{p, config, []error{}} pa := PathForOutput(ctx, "host", ctx.config.PrebuiltOS(), "bin", path) if len(ctx.errors) > 0 { return nil, ctx.errors[0] @@ -138,9 +168,9 @@ func (p AndroidPackageContext) HostBinToolPath(config interface{}, path string) // tool in the frameworks directory for host targets. It may only be called // during a Go package's initialization - either from the init() function or as // part of a package-scoped variable's initialization. -func (p AndroidPackageContext) HostJavaToolVariable(name, path string) blueprint.Variable { - return p.VariableFunc(name, func(config interface{}) (string, error) { - ctx := &configErrorWrapper{p, config.(Config), []error{}} +func (p PackageContext) HostJavaToolVariable(name, path string) blueprint.Variable { + return p.VariableFunc(name, func(config Config) (string, error) { + ctx := &configErrorWrapper{p, config, []error{}} p := PathForOutput(ctx, "host", ctx.config.PrebuiltOS(), "framework", path) if len(ctx.errors) > 0 { return "", ctx.errors[0] @@ -149,8 +179,8 @@ func (p AndroidPackageContext) HostJavaToolVariable(name, path string) blueprint }) } -func (p AndroidPackageContext) HostJavaToolPath(config interface{}, path string) (Path, error) { - ctx := &configErrorWrapper{p, config.(Config), []error{}} +func (p PackageContext) HostJavaToolPath(config Config, path string) (Path, error) { + ctx := &configErrorWrapper{p, config, []error{}} pa := PathForOutput(ctx, "host", ctx.config.PrebuiltOS(), "framework", path) if len(ctx.errors) > 0 { return nil, ctx.errors[0] @@ -162,9 +192,9 @@ func (p AndroidPackageContext) HostJavaToolPath(config interface{}, path string) // directory appended with the supplied path. It may only be called during a Go // package's initialization - either from the init() function or as part of a // package-scoped variable's initialization. -func (p AndroidPackageContext) IntermediatesPathVariable(name, path string) blueprint.Variable { - return p.VariableFunc(name, func(config interface{}) (string, error) { - ctx := &configErrorWrapper{p, config.(Config), []error{}} +func (p PackageContext) IntermediatesPathVariable(name, path string) blueprint.Variable { + return p.VariableFunc(name, func(config Config) (string, error) { + ctx := &configErrorWrapper{p, config, []error{}} p := PathForIntermediates(ctx, path) if len(ctx.errors) > 0 { return "", ctx.errors[0] @@ -177,11 +207,11 @@ func (p AndroidPackageContext) IntermediatesPathVariable(name, path string) blue // list of present source paths prefixed with the supplied prefix. It may only // be called during a Go package's initialization - either from the init() // function or as part of a package-scoped variable's initialization. -func (p AndroidPackageContext) PrefixedExistentPathsForSourcesVariable( +func (p PackageContext) PrefixedExistentPathsForSourcesVariable( name, prefix string, paths []string) blueprint.Variable { - return p.VariableFunc(name, func(config interface{}) (string, error) { - ctx := &configErrorWrapper{p, config.(Config), []error{}} + return p.VariableFunc(name, func(config Config) (string, error) { + ctx := &configErrorWrapper{p, config, []error{}} paths := ExistentPathsForSources(ctx, "", paths) if len(ctx.errors) > 0 { return "", ctx.errors[0] @@ -196,7 +226,7 @@ type RuleParams struct { } // AndroidStaticRule wraps blueprint.StaticRule and provides a default Pool if none is specified -func (p AndroidPackageContext) AndroidStaticRule(name string, params blueprint.RuleParams, +func (p PackageContext) AndroidStaticRule(name string, params blueprint.RuleParams, argNames ...string) blueprint.Rule { return p.AndroidRuleFunc(name, func(Config) (blueprint.RuleParams, error) { return params, nil @@ -204,16 +234,16 @@ func (p AndroidPackageContext) AndroidStaticRule(name string, params blueprint.R } // AndroidGomaStaticRule wraps blueprint.StaticRule but uses goma's parallelism if goma is enabled -func (p AndroidPackageContext) AndroidGomaStaticRule(name string, params blueprint.RuleParams, +func (p PackageContext) AndroidGomaStaticRule(name string, params blueprint.RuleParams, argNames ...string) blueprint.Rule { return p.StaticRule(name, params, argNames...) } -func (p AndroidPackageContext) AndroidRuleFunc(name string, +func (p PackageContext) AndroidRuleFunc(name string, f func(Config) (blueprint.RuleParams, error), argNames ...string) blueprint.Rule { - return p.PackageContext.RuleFunc(name, func(config interface{}) (blueprint.RuleParams, error) { - params, err := f(config.(Config)) - if config.(Config).UseGoma() && params.Pool == nil { + return p.RuleFunc(name, func(config Config) (blueprint.RuleParams, error) { + params, err := f(config) + if config.UseGoma() && params.Pool == nil { // When USE_GOMA=true is set and the rule is not supported by goma, restrict jobs to the // local parallelism value params.Pool = localPool |