1// Copyright (C) 2019 The Android Open Source Project 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 15package java 16 17import ( 18 "sync" 19 20 "android/soong/android" 21) 22 23type syspropLibraryInterface interface { 24 BaseModuleName() string 25 Owner() string 26 HasPublicStub() bool 27 JavaPublicStubName() string 28} 29 30var ( 31 syspropPublicStubsKey = android.NewOnceKey("syspropPublicStubsJava") 32 syspropPublicStubsLock sync.Mutex 33) 34 35func init() { 36 android.PreDepsMutators(func(ctx android.RegisterMutatorsContext) { 37 ctx.BottomUp("sysprop_java", SyspropMutator).Parallel() 38 }) 39} 40 41func syspropPublicStubs(config android.Config) map[string]string { 42 return config.Once(syspropPublicStubsKey, func() interface{} { 43 return make(map[string]string) 44 }).(map[string]string) 45} 46 47// gather list of sysprop libraries owned by platform. 48func SyspropMutator(mctx android.BottomUpMutatorContext) { 49 if m, ok := mctx.Module().(syspropLibraryInterface); ok { 50 if m.Owner() != "Platform" || !m.HasPublicStub() { 51 return 52 } 53 54 syspropPublicStubs := syspropPublicStubs(mctx.Config()) 55 syspropPublicStubsLock.Lock() 56 defer syspropPublicStubsLock.Unlock() 57 58 syspropPublicStubs[m.BaseModuleName()] = m.JavaPublicStubName() 59 } 60} 61