Merge "Create public stub for platform's sysprop_library"
This commit is contained in:
32
java/java.go
32
java/java.go
@@ -594,8 +594,36 @@ func (j *Module) deps(ctx android.BottomUpMutatorContext) {
|
||||
}
|
||||
}
|
||||
|
||||
ctx.AddVariationDependencies(nil, libTag, j.properties.Libs...)
|
||||
ctx.AddVariationDependencies(nil, staticLibTag, j.properties.Static_libs...)
|
||||
syspropPublicStubs := syspropPublicStubs(ctx.Config())
|
||||
|
||||
// rewriteSyspropLibs validates if a java module can link against platform's sysprop_library,
|
||||
// and redirects dependency to public stub depending on the link type.
|
||||
rewriteSyspropLibs := func(libs []string, prop string) []string {
|
||||
// make a copy
|
||||
ret := android.CopyOf(libs)
|
||||
|
||||
for idx, lib := range libs {
|
||||
stub, ok := syspropPublicStubs[lib]
|
||||
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
|
||||
linkType, _ := j.getLinkType(ctx.ModuleName())
|
||||
if linkType == javaSystem {
|
||||
ret[idx] = stub
|
||||
} else if linkType != javaPlatform {
|
||||
ctx.PropertyErrorf("sdk_version",
|
||||
"can't link against sysprop_library %q from a module using public or core API",
|
||||
lib)
|
||||
}
|
||||
}
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
ctx.AddVariationDependencies(nil, libTag, rewriteSyspropLibs(j.properties.Libs, "libs")...)
|
||||
ctx.AddVariationDependencies(nil, staticLibTag, rewriteSyspropLibs(j.properties.Static_libs, "static_libs")...)
|
||||
|
||||
ctx.AddFarVariationDependencies(ctx.Config().BuildOSCommonTarget.Variations(), pluginTag, j.properties.Plugins...)
|
||||
ctx.AddFarVariationDependencies(ctx.Config().BuildOSCommonTarget.Variations(), exportedPluginTag, j.properties.Exported_plugins...)
|
||||
|
60
java/sysprop.go
Normal file
60
java/sysprop.go
Normal file
@@ -0,0 +1,60 @@
|
||||
// Copyright (C) 2019 The Android Open Source Project
|
||||
//
|
||||
// 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 java
|
||||
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"android/soong/android"
|
||||
)
|
||||
|
||||
type syspropLibraryInterface interface {
|
||||
BaseModuleName() string
|
||||
Owner() string
|
||||
HasPublicStub() bool
|
||||
JavaPublicStubName() string
|
||||
}
|
||||
|
||||
var (
|
||||
syspropPublicStubsKey = android.NewOnceKey("syspropPublicStubsJava")
|
||||
syspropPublicStubsLock sync.Mutex
|
||||
)
|
||||
|
||||
func init() {
|
||||
android.PreDepsMutators(func(ctx android.RegisterMutatorsContext) {
|
||||
ctx.BottomUp("sysprop_java", SyspropMutator).Parallel()
|
||||
})
|
||||
}
|
||||
|
||||
func syspropPublicStubs(config android.Config) map[string]string {
|
||||
return config.Once(syspropPublicStubsKey, func() interface{} {
|
||||
return make(map[string]string)
|
||||
}).(map[string]string)
|
||||
}
|
||||
|
||||
// gather list of sysprop libraries owned by platform.
|
||||
func SyspropMutator(mctx android.BottomUpMutatorContext) {
|
||||
if m, ok := mctx.Module().(syspropLibraryInterface); ok {
|
||||
if m.Owner() != "Platform" || !m.HasPublicStub() {
|
||||
return
|
||||
}
|
||||
|
||||
syspropPublicStubs := syspropPublicStubs(mctx.Config())
|
||||
syspropPublicStubsLock.Lock()
|
||||
defer syspropPublicStubsLock.Unlock()
|
||||
|
||||
syspropPublicStubs[m.BaseModuleName()] = m.JavaPublicStubName()
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user