1463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross// Copyright 2015 Google Inc. All rights reserved. 2463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross// 3463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross// Licensed under the Apache License, Version 2.0 (the "License"); 4463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross// you may not use this file except in compliance with the License. 5463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross// You may obtain a copy of the License at 6463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross// 7463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross// http://www.apache.org/licenses/LICENSE-2.0 8463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross// 9463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross// Unless required by applicable law or agreed to in writing, software 10463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross// distributed under the License is distributed on an "AS IS" BASIS, 11463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross// See the License for the specific language governing permissions and 13463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross// limitations under the License. 14463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross 15463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Crosspackage soong 16463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross 17463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Crossimport "github.com/google/blueprint" 18463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross 19463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Crosstype moduleType struct { 20463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross name string 21463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross factory blueprint.ModuleFactory 22463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross} 23463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross 24463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Crossvar moduleTypes []moduleType 25463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross 26463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Crosstype singleton struct { 27463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross name string 28463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross factory blueprint.SingletonFactory 29463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross} 30463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross 31463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Crossvar singletons []singleton 32463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross 336362e278481ea0cb14d31cd7fd3760116b6d7643Colin Crosstype mutator struct { 346362e278481ea0cb14d31cd7fd3760116b6d7643Colin Cross name string 356362e278481ea0cb14d31cd7fd3760116b6d7643Colin Cross bottomUpMutator blueprint.BottomUpMutator 366362e278481ea0cb14d31cd7fd3760116b6d7643Colin Cross topDownMutator blueprint.TopDownMutator 37463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross} 38463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross 396362e278481ea0cb14d31cd7fd3760116b6d7643Colin Crossvar mutators []mutator 40463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross 41463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Crossfunc RegisterModuleType(name string, factory blueprint.ModuleFactory) { 42463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross moduleTypes = append(moduleTypes, moduleType{name, factory}) 43463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross} 44463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross 45463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Crossfunc RegisterSingletonType(name string, factory blueprint.SingletonFactory) { 46463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross singletons = append(singletons, singleton{name, factory}) 47463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross} 48463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross 496362e278481ea0cb14d31cd7fd3760116b6d7643Colin Crossfunc RegisterBottomUpMutator(name string, m blueprint.BottomUpMutator) { 506362e278481ea0cb14d31cd7fd3760116b6d7643Colin Cross mutators = append(mutators, mutator{name: name, bottomUpMutator: m}) 516362e278481ea0cb14d31cd7fd3760116b6d7643Colin Cross} 526362e278481ea0cb14d31cd7fd3760116b6d7643Colin Cross 536362e278481ea0cb14d31cd7fd3760116b6d7643Colin Crossfunc RegisterTopDownMutator(name string, m blueprint.TopDownMutator) { 546362e278481ea0cb14d31cd7fd3760116b6d7643Colin Cross mutators = append(mutators, mutator{name: name, topDownMutator: m}) 55463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross} 56463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross 57463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Crossfunc NewContext() *blueprint.Context { 58463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross ctx := blueprint.NewContext() 59463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross 60463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross for _, t := range moduleTypes { 61463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross ctx.RegisterModuleType(t.name, t.factory) 62463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross } 63463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross 64463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross for _, t := range singletons { 65463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross ctx.RegisterSingletonType(t.name, t.factory) 66463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross } 67463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross 686362e278481ea0cb14d31cd7fd3760116b6d7643Colin Cross for _, t := range mutators { 696362e278481ea0cb14d31cd7fd3760116b6d7643Colin Cross if t.bottomUpMutator != nil { 706362e278481ea0cb14d31cd7fd3760116b6d7643Colin Cross ctx.RegisterBottomUpMutator(t.name, t.bottomUpMutator) 716362e278481ea0cb14d31cd7fd3760116b6d7643Colin Cross } 726362e278481ea0cb14d31cd7fd3760116b6d7643Colin Cross if t.topDownMutator != nil { 736362e278481ea0cb14d31cd7fd3760116b6d7643Colin Cross ctx.RegisterTopDownMutator(t.name, t.topDownMutator) 746362e278481ea0cb14d31cd7fd3760116b6d7643Colin Cross } 75463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross } 76463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross 77463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross return ctx 78463a90e5872d6c8cf26a2302e7ad1586957304a0Colin Cross} 79