Merge "Stop exporting systemserverclasspath_fragment when targeting S"

This commit is contained in:
Paul Duffin
2022-07-05 16:44:10 +00:00
committed by Gerrit Code Review
5 changed files with 82 additions and 7 deletions

View File

@@ -661,6 +661,10 @@ type SdkMemberType interface {
// an Android.bp file. // an Android.bp file.
RequiresBpProperty() bool RequiresBpProperty() bool
// SupportedBuildReleases returns the string representation of a set of target build releases that
// support this member type.
SupportedBuildReleases() string
// UsableWithSdkAndSdkSnapshot returns true if the member type supports the sdk/sdk_snapshot, // UsableWithSdkAndSdkSnapshot returns true if the member type supports the sdk/sdk_snapshot,
// false otherwise. // false otherwise.
UsableWithSdkAndSdkSnapshot() bool UsableWithSdkAndSdkSnapshot() bool
@@ -773,6 +777,11 @@ type SdkMemberTypeBase struct {
// property to be specifiable in an Android.bp file. // property to be specifiable in an Android.bp file.
BpPropertyNotRequired bool BpPropertyNotRequired bool
// The name of the first targeted build release.
//
// If not specified then it is assumed to be available on all targeted build releases.
SupportedBuildReleaseSpecification string
SupportsSdk bool SupportsSdk bool
HostOsDependent bool HostOsDependent bool
@@ -793,6 +802,10 @@ func (b *SdkMemberTypeBase) RequiresBpProperty() bool {
return !b.BpPropertyNotRequired return !b.BpPropertyNotRequired
} }
func (b *SdkMemberTypeBase) SupportedBuildReleases() string {
return b.SupportedBuildReleaseSpecification
}
func (b *SdkMemberTypeBase) UsableWithSdkAndSdkSnapshot() bool { func (b *SdkMemberTypeBase) UsableWithSdkAndSdkSnapshot() bool {
return b.SupportsSdk return b.SupportsSdk
} }

View File

@@ -164,6 +164,9 @@ var (
android.SdkMemberTypeBase{ android.SdkMemberTypeBase{
PropertyName: "java_systemserver_libs", PropertyName: "java_systemserver_libs",
SupportsSdk: true, SupportsSdk: true,
// This was only added in Tiramisu.
SupportedBuildReleaseSpecification: "Tiramisu+",
}, },
func(ctx android.SdkMemberContext, j *Library) android.Path { func(ctx android.SdkMemberContext, j *Library) android.Path {
// Java systemserver libs are only provided in the SDK to provide access to their dex // Java systemserver libs are only provided in the SDK to provide access to their dex

View File

@@ -28,6 +28,9 @@ func init() {
SdkMemberTypeBase: android.SdkMemberTypeBase{ SdkMemberTypeBase: android.SdkMemberTypeBase{
PropertyName: "systemserverclasspath_fragments", PropertyName: "systemserverclasspath_fragments",
SupportsSdk: true, SupportsSdk: true,
// This was only added in Tiramisu.
SupportedBuildReleaseSpecification: "Tiramisu+",
}, },
}) })
} }

View File

@@ -22,13 +22,16 @@ import (
"android/soong/java" "android/soong/java"
) )
func TestSnapshotWithSystemServerClasspathFragment(t *testing.T) { func testSnapshotWithSystemServerClasspathFragment(t *testing.T, targetBuildRelease string, expectedSdkSnapshot string) {
result := android.GroupFixturePreparers( result := android.GroupFixturePreparers(
prepareForSdkTestWithJava, prepareForSdkTestWithJava,
java.PrepareForTestWithJavaDefaultModules, java.PrepareForTestWithJavaDefaultModules,
java.PrepareForTestWithJavaSdkLibraryFiles, java.PrepareForTestWithJavaSdkLibraryFiles,
java.FixtureWithLastReleaseApis("mysdklibrary"), java.FixtureWithLastReleaseApis("mysdklibrary"),
dexpreopt.FixtureSetApexSystemServerJars("myapex:mylib", "myapex:mysdklibrary"), dexpreopt.FixtureSetApexSystemServerJars("myapex:mylib", "myapex:mysdklibrary"),
android.FixtureModifyEnv(func(env map[string]string) {
env["SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE"] = targetBuildRelease
}),
prepareForSdkTestWithApex, prepareForSdkTestWithApex,
android.FixtureWithRootAndroidBp(` android.FixtureWithRootAndroidBp(`
@@ -83,7 +86,34 @@ func TestSnapshotWithSystemServerClasspathFragment(t *testing.T) {
).RunTest(t) ).RunTest(t)
CheckSnapshot(t, result, "mysdk", "", CheckSnapshot(t, result, "mysdk", "",
checkAndroidBpContents(` checkAndroidBpContents(expectedSdkSnapshot),
)
}
func TestSnapshotWithSystemServerClasspathFragment(t *testing.T) {
t.Run("target-s", func(t *testing.T) {
testSnapshotWithSystemServerClasspathFragment(t, "S", `
// This is auto-generated. DO NOT EDIT.
java_sdk_library_import {
name: "mysdklibrary",
prefer: false,
visibility: ["//visibility:public"],
apex_available: ["myapex"],
shared_library: false,
public: {
jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
current_api: "sdk_library/public/mysdklibrary.txt",
removed_api: "sdk_library/public/mysdklibrary-removed.txt",
sdk_version: "current",
},
}
`)
})
t.Run("target-t", func(t *testing.T) {
testSnapshotWithSystemServerClasspathFragment(t, "Tiramisu", `
// This is auto-generated. DO NOT EDIT. // This is auto-generated. DO NOT EDIT.
java_sdk_library_import { java_sdk_library_import {
@@ -120,6 +150,6 @@ prebuilt_systemserverclasspath_fragment {
"mysdklibrary", "mysdklibrary",
], ],
} }
`), `)
) })
} }

View File

@@ -239,7 +239,7 @@ func (s *sdk) collectMembers(ctx android.ModuleContext) {
// Finally, the member type slices are concatenated together to form a single slice. The order in // Finally, the member type slices are concatenated together to form a single slice. The order in
// which they are concatenated is the order in which the member types were registered in the // which they are concatenated is the order in which the member types were registered in the
// android.SdkMemberTypesRegistry. // android.SdkMemberTypesRegistry.
func (s *sdk) groupMemberVariantsByMemberThenType(ctx android.ModuleContext, memberVariantDeps []sdkMemberVariantDep) []*sdkMember { func (s *sdk) groupMemberVariantsByMemberThenType(ctx android.ModuleContext, targetBuildRelease *buildRelease, memberVariantDeps []sdkMemberVariantDep) []*sdkMember {
byType := make(map[android.SdkMemberType][]*sdkMember) byType := make(map[android.SdkMemberType][]*sdkMember)
byName := make(map[string]*sdkMember) byName := make(map[string]*sdkMember)
@@ -268,13 +268,39 @@ func (s *sdk) groupMemberVariantsByMemberThenType(ctx android.ModuleContext, mem
} }
var members []*sdkMember var members []*sdkMember
for _, memberListProperty := range s.memberTypeListProperties() { for _, memberListProperty := range s.memberTypeListProperties() {
membersOfType := byType[memberListProperty.memberType] memberType := memberListProperty.memberType
if !isMemberTypeSupportedByTargetBuildRelease(memberType, targetBuildRelease) {
continue
}
membersOfType := byType[memberType]
members = append(members, membersOfType...) members = append(members, membersOfType...)
} }
return members return members
} }
// isMemberTypeSupportedByTargetBuildRelease returns true if the member type is supported by the
// target build release.
func isMemberTypeSupportedByTargetBuildRelease(memberType android.SdkMemberType, targetBuildRelease *buildRelease) bool {
supportedByTargetBuildRelease := true
supportedBuildReleases := memberType.SupportedBuildReleases()
if supportedBuildReleases == "" {
supportedBuildReleases = "S+"
}
set, err := parseBuildReleaseSet(supportedBuildReleases)
if err != nil {
panic(fmt.Errorf("member type %s has invalid supported build releases %q: %s",
memberType.SdkPropertyName(), supportedBuildReleases, err))
}
if !set.contains(targetBuildRelease) {
supportedByTargetBuildRelease = false
}
return supportedByTargetBuildRelease
}
func appendUniqueVariants(variants []android.SdkAware, newVariant android.SdkAware) []android.SdkAware { func appendUniqueVariants(variants []android.SdkAware, newVariant android.SdkAware) []android.SdkAware {
for _, v := range variants { for _, v := range variants {
if v == newVariant { if v == newVariant {
@@ -401,7 +427,7 @@ be unnecessary as every module in the sdk already has its own licenses property.
// Group the variants for each member module together and then group the members of each member // Group the variants for each member module together and then group the members of each member
// type together. // type together.
members := s.groupMemberVariantsByMemberThenType(ctx, memberVariantDeps) members := s.groupMemberVariantsByMemberThenType(ctx, targetBuildRelease, memberVariantDeps)
// Create the prebuilt modules for each of the member modules. // Create the prebuilt modules for each of the member modules.
traits := s.gatherTraits() traits := s.gatherTraits()