3f68a1362b
android.ModuleContext should replace the blueprint.ModuleContext methods with ones that take android.Module parameters instead of blueprint.Module parameters. As a first step, don't include blueprint.ModuleContext in android.ModuleContext and manually specify the methods from blueprint.ModuleContext that we need. Future patches will replace these methods with ones that take android.* types. Also do the same for TopDownMutatorContext. Test: m checkbuild Change-Id: If11c298eed98bc65712b4942d0283cafa058726c
193 lines
5.1 KiB
Go
193 lines
5.1 KiB
Go
// Copyright 2015 Google Inc. All rights reserved.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package android
|
|
|
|
import (
|
|
"github.com/google/blueprint"
|
|
)
|
|
|
|
// Phases:
|
|
// run Pre-arch mutators
|
|
// run archMutator
|
|
// run Pre-deps mutators
|
|
// run depsMutator
|
|
// run PostDeps mutators
|
|
// continue on to GenerateAndroidBuildActions
|
|
|
|
func registerMutatorsToContext(ctx *blueprint.Context, mutators []*mutator) {
|
|
for _, t := range mutators {
|
|
var handle blueprint.MutatorHandle
|
|
if t.bottomUpMutator != nil {
|
|
handle = ctx.RegisterBottomUpMutator(t.name, t.bottomUpMutator)
|
|
} else if t.topDownMutator != nil {
|
|
handle = ctx.RegisterTopDownMutator(t.name, t.topDownMutator)
|
|
}
|
|
if t.parallel {
|
|
handle.Parallel()
|
|
}
|
|
}
|
|
}
|
|
|
|
func registerMutators(ctx *blueprint.Context, preArch, preDeps, postDeps []RegisterMutatorFunc) {
|
|
mctx := ®isterMutatorsContext{}
|
|
|
|
register := func(funcs []RegisterMutatorFunc) {
|
|
for _, f := range funcs {
|
|
f(mctx)
|
|
}
|
|
}
|
|
|
|
register(preArch)
|
|
|
|
register(preDeps)
|
|
|
|
mctx.BottomUp("deps", depsMutator).Parallel()
|
|
|
|
register(postDeps)
|
|
|
|
registerMutatorsToContext(ctx, mctx.mutators)
|
|
}
|
|
|
|
type registerMutatorsContext struct {
|
|
mutators []*mutator
|
|
}
|
|
|
|
type RegisterMutatorsContext interface {
|
|
TopDown(name string, m AndroidTopDownMutator) MutatorHandle
|
|
BottomUp(name string, m AndroidBottomUpMutator) MutatorHandle
|
|
}
|
|
|
|
type RegisterMutatorFunc func(RegisterMutatorsContext)
|
|
|
|
var preArch = []RegisterMutatorFunc{
|
|
func(ctx RegisterMutatorsContext) {
|
|
ctx.TopDown("load_hooks", loadHookMutator).Parallel()
|
|
},
|
|
RegisterPrebuiltsPreArchMutators,
|
|
RegisterDefaultsPreArchMutators,
|
|
}
|
|
|
|
func registerArchMutator(ctx RegisterMutatorsContext) {
|
|
ctx.BottomUp("arch", archMutator).Parallel()
|
|
ctx.TopDown("arch_hooks", archHookMutator).Parallel()
|
|
}
|
|
|
|
var preDeps = []RegisterMutatorFunc{
|
|
registerArchMutator,
|
|
}
|
|
|
|
var postDeps = []RegisterMutatorFunc{
|
|
RegisterPrebuiltsPostDepsMutators,
|
|
}
|
|
|
|
func PreArchMutators(f RegisterMutatorFunc) {
|
|
preArch = append(preArch, f)
|
|
}
|
|
|
|
func PreDepsMutators(f RegisterMutatorFunc) {
|
|
preDeps = append(preDeps, f)
|
|
}
|
|
|
|
func PostDepsMutators(f RegisterMutatorFunc) {
|
|
postDeps = append(postDeps, f)
|
|
}
|
|
|
|
type AndroidTopDownMutator func(TopDownMutatorContext)
|
|
|
|
type TopDownMutatorContext interface {
|
|
blueprint.BaseModuleContext
|
|
androidBaseContext
|
|
|
|
OtherModuleExists(name string) bool
|
|
Rename(name string)
|
|
Module() blueprint.Module
|
|
|
|
OtherModuleName(m blueprint.Module) string
|
|
OtherModuleErrorf(m blueprint.Module, fmt string, args ...interface{})
|
|
OtherModuleDependencyTag(m blueprint.Module) blueprint.DependencyTag
|
|
|
|
CreateModule(blueprint.ModuleFactory, ...interface{})
|
|
|
|
GetDirectDepWithTag(name string, tag blueprint.DependencyTag) blueprint.Module
|
|
GetDirectDep(name string) (blueprint.Module, blueprint.DependencyTag)
|
|
|
|
VisitDirectDeps(visit func(blueprint.Module))
|
|
VisitDirectDepsIf(pred func(blueprint.Module) bool, visit func(blueprint.Module))
|
|
VisitDepsDepthFirst(visit func(blueprint.Module))
|
|
VisitDepsDepthFirstIf(pred func(blueprint.Module) bool, visit func(blueprint.Module))
|
|
WalkDeps(visit func(blueprint.Module, blueprint.Module) bool)
|
|
}
|
|
|
|
type androidTopDownMutatorContext struct {
|
|
blueprint.TopDownMutatorContext
|
|
androidBaseContextImpl
|
|
}
|
|
|
|
type AndroidBottomUpMutator func(BottomUpMutatorContext)
|
|
|
|
type BottomUpMutatorContext interface {
|
|
blueprint.BottomUpMutatorContext
|
|
androidBaseContext
|
|
}
|
|
|
|
type androidBottomUpMutatorContext struct {
|
|
blueprint.BottomUpMutatorContext
|
|
androidBaseContextImpl
|
|
}
|
|
|
|
func (x *registerMutatorsContext) BottomUp(name string, m AndroidBottomUpMutator) MutatorHandle {
|
|
f := func(ctx blueprint.BottomUpMutatorContext) {
|
|
if a, ok := ctx.Module().(Module); ok {
|
|
actx := &androidBottomUpMutatorContext{
|
|
BottomUpMutatorContext: ctx,
|
|
androidBaseContextImpl: a.base().androidBaseContextFactory(ctx),
|
|
}
|
|
m(actx)
|
|
}
|
|
}
|
|
mutator := &mutator{name: name, bottomUpMutator: f}
|
|
x.mutators = append(x.mutators, mutator)
|
|
return mutator
|
|
}
|
|
|
|
func (x *registerMutatorsContext) TopDown(name string, m AndroidTopDownMutator) MutatorHandle {
|
|
f := func(ctx blueprint.TopDownMutatorContext) {
|
|
if a, ok := ctx.Module().(Module); ok {
|
|
actx := &androidTopDownMutatorContext{
|
|
TopDownMutatorContext: ctx,
|
|
androidBaseContextImpl: a.base().androidBaseContextFactory(ctx),
|
|
}
|
|
m(actx)
|
|
}
|
|
}
|
|
mutator := &mutator{name: name, topDownMutator: f}
|
|
x.mutators = append(x.mutators, mutator)
|
|
return mutator
|
|
}
|
|
|
|
type MutatorHandle interface {
|
|
Parallel() MutatorHandle
|
|
}
|
|
|
|
func (mutator *mutator) Parallel() MutatorHandle {
|
|
mutator.parallel = true
|
|
return mutator
|
|
}
|
|
|
|
func depsMutator(ctx BottomUpMutatorContext) {
|
|
if m, ok := ctx.Module().(Module); ok {
|
|
m.DepsMutator(ctx)
|
|
}
|
|
}
|