Create (API) bp2build converters for droidstubs
- The converter runs for api_bp2build, not bp2build workspace - Since droidstubs is an internal module created by java_sdk_library, the conversion encompasses the latter as well - Since droidstubs do not have an api_surface attribute, this conversion uses naming convention to infer the api_surface represented by the api file e.g. *stubs.source -> publicapi, *stubs.source.system -> systemapi) - Also adds an SdkIntraCore enum to represent the API surface provided by one core module to another There is also ongoing work to check in java_api_contribution modules in Soong. Once we have that, we can update this converter to operate on that module type instead Test: go test ./bp2build Change-Id: Ia85828e04c738d9ffcc524856d7c3034ee29bbf9
This commit is contained in:
@@ -18,11 +18,13 @@ import (
|
||||
"fmt"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"sort"
|
||||
"strings"
|
||||
|
||||
"github.com/google/blueprint/proptools"
|
||||
|
||||
"android/soong/android"
|
||||
"android/soong/bazel"
|
||||
"android/soong/java/config"
|
||||
"android/soong/remoteexec"
|
||||
)
|
||||
@@ -834,6 +836,74 @@ func (d *Droidstubs) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||
}
|
||||
}
|
||||
|
||||
var _ android.ApiProvider = (*Droidstubs)(nil)
|
||||
|
||||
type bazelJavaApiContributionAttributes struct {
|
||||
Api bazel.LabelAttribute
|
||||
Api_surface *string
|
||||
}
|
||||
|
||||
func (d *Droidstubs) ConvertWithApiBp2build(ctx android.TopDownMutatorContext) {
|
||||
props := bazel.BazelTargetModuleProperties{
|
||||
Rule_class: "java_api_contribution",
|
||||
Bzl_load_location: "//build/bazel/rules/apis:java_api_contribution.bzl",
|
||||
}
|
||||
apiFile := d.properties.Check_api.Current.Api_file
|
||||
// Do not generate a target if check_api is not set
|
||||
if apiFile == nil {
|
||||
return
|
||||
}
|
||||
attrs := &bazelJavaApiContributionAttributes{
|
||||
Api: *bazel.MakeLabelAttribute(
|
||||
android.BazelLabelForModuleSrcSingle(ctx, proptools.String(apiFile)).Label,
|
||||
),
|
||||
Api_surface: proptools.StringPtr(bazelApiSurfaceName(d.Name())),
|
||||
}
|
||||
ctx.CreateBazelTargetModule(props, android.CommonAttributes{
|
||||
Name: android.ApiContributionTargetName(ctx.ModuleName()),
|
||||
}, attrs)
|
||||
}
|
||||
|
||||
// TODO (b/262014796): Export the API contributions of CorePlatformApi
|
||||
// A map to populate the api surface of a droidstub from a substring appearing in its name
|
||||
// This map assumes that droidstubs (either checked-in or created by java_sdk_library)
|
||||
// use a strict naming convention
|
||||
var (
|
||||
droidstubsModuleNamingToSdkKind = map[string]android.SdkKind{
|
||||
//public is commented out since the core libraries use public in their java_sdk_library names
|
||||
"intracore": android.SdkIntraCore,
|
||||
"intra.core": android.SdkIntraCore,
|
||||
"system_server": android.SdkSystemServer,
|
||||
"system-server": android.SdkSystemServer,
|
||||
"system": android.SdkSystem,
|
||||
"module_lib": android.SdkModule,
|
||||
"module-lib": android.SdkModule,
|
||||
"test": android.SdkTest,
|
||||
}
|
||||
)
|
||||
|
||||
// A helper function that returns the api surface of the corresponding java_api_contribution Bazel target
|
||||
// The api_surface is populated using the naming convention of the droidstubs module.
|
||||
func bazelApiSurfaceName(name string) string {
|
||||
// Sort the keys so that longer strings appear first
|
||||
// Otherwise substrings like system will match both system and system_server
|
||||
sortedKeys := make([]string, 0)
|
||||
for key := range droidstubsModuleNamingToSdkKind {
|
||||
sortedKeys = append(sortedKeys, key)
|
||||
}
|
||||
sort.Slice(sortedKeys, func(i, j int) bool {
|
||||
return len(sortedKeys[i]) > len(sortedKeys[j])
|
||||
})
|
||||
for _, sortedKey := range sortedKeys {
|
||||
if strings.Contains(name, sortedKey) {
|
||||
sdkKind := droidstubsModuleNamingToSdkKind[sortedKey]
|
||||
return sdkKind.String() + "api"
|
||||
}
|
||||
}
|
||||
// Default is publicapi
|
||||
return android.SdkPublic.String() + "api"
|
||||
}
|
||||
|
||||
func StubsDefaultsFactory() android.Module {
|
||||
module := &DocDefaults{}
|
||||
|
||||
|
Reference in New Issue
Block a user