c3d87d3112
To support dist-for-goals in Soong, we need to define all phony rules in Make so that dist-for-goals can insert additional dependencies on them. Collect all the phony rules in phonySingleton and write them out as Make rules when Soong is embedded in Make, or as blueprint.Phony rules when Soong is run standalone. Test: m checkbuild Change-Id: I68201eff30744b0f487fc4f11f033767b53a627d
75 lines
1.9 KiB
Go
75 lines
1.9 KiB
Go
// Copyright 2020 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 (
|
|
"sync"
|
|
|
|
"github.com/google/blueprint"
|
|
)
|
|
|
|
var phonyMapOnceKey = NewOnceKey("phony")
|
|
|
|
type phonyMap map[string]Paths
|
|
|
|
var phonyMapLock sync.Mutex
|
|
|
|
func getPhonyMap(config Config) phonyMap {
|
|
return config.Once(phonyMapOnceKey, func() interface{} {
|
|
return make(phonyMap)
|
|
}).(phonyMap)
|
|
}
|
|
|
|
func addPhony(config Config, name string, deps ...Path) {
|
|
phonyMap := getPhonyMap(config)
|
|
phonyMapLock.Lock()
|
|
defer phonyMapLock.Unlock()
|
|
phonyMap[name] = append(phonyMap[name], deps...)
|
|
}
|
|
|
|
type phonySingleton struct {
|
|
phonyMap phonyMap
|
|
phonyList []string
|
|
}
|
|
|
|
var _ SingletonMakeVarsProvider = (*phonySingleton)(nil)
|
|
|
|
func (p *phonySingleton) GenerateBuildActions(ctx SingletonContext) {
|
|
p.phonyMap = getPhonyMap(ctx.Config())
|
|
p.phonyList = SortedStringKeys(p.phonyMap)
|
|
for _, phony := range p.phonyList {
|
|
p.phonyMap[phony] = SortedUniquePaths(p.phonyMap[phony])
|
|
}
|
|
|
|
if !ctx.Config().EmbeddedInMake() {
|
|
for _, phony := range p.phonyList {
|
|
ctx.Build(pctx, BuildParams{
|
|
Rule: blueprint.Phony,
|
|
Outputs: []WritablePath{PathForPhony(ctx, phony)},
|
|
Implicits: p.phonyMap[phony],
|
|
})
|
|
}
|
|
}
|
|
}
|
|
|
|
func (p phonySingleton) MakeVars(ctx MakeVarsContext) {
|
|
for _, phony := range p.phonyList {
|
|
ctx.Phony(phony, p.phonyMap[phony]...)
|
|
}
|
|
}
|
|
|
|
func phonySingletonFactory() Singleton {
|
|
return &phonySingleton{}
|
|
}
|