1 // Copyright 2015 Google Inc. All rights reserved. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package android 16 17 import ( 18 "github.com/google/blueprint" 19 ) 20 21 type moduleType struct { 22 name string 23 factory blueprint.ModuleFactory 24 } 25 26 var moduleTypes []moduleType 27 28 type singleton struct { 29 name string 30 factory blueprint.SingletonFactory 31 } 32 33 var singletons []singleton 34 35 type mutator struct { 36 name string 37 bottomUpMutator blueprint.BottomUpMutator 38 topDownMutator blueprint.TopDownMutator 39 parallel bool 40 } 41 42 var mutators []*mutator 43 44 func RegisterModuleType(name string, factory blueprint.ModuleFactory) { 45 moduleTypes = append(moduleTypes, moduleType{name, factory}) 46 } 47 48 func RegisterSingletonType(name string, factory blueprint.SingletonFactory) { 49 singletons = append(singletons, singleton{name, factory}) 50 } 51 52 func NewContext() *blueprint.Context { 53 ctx := blueprint.NewContext() 54 55 for _, t := range moduleTypes { 56 ctx.RegisterModuleType(t.name, t.factory) 57 } 58 59 for _, t := range singletons { 60 ctx.RegisterSingletonType(t.name, t.factory) 61 } 62 63 registerMutators(ctx) 64 65 ctx.RegisterSingletonType("env", EnvSingleton) 66 67 return ctx 68 } 69