Loading android/sdk.go +13 −0 Original line number Diff line number Diff line Loading @@ -661,6 +661,10 @@ type SdkMemberType interface { // an Android.bp file. 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, // false otherwise. UsableWithSdkAndSdkSnapshot() bool Loading Loading @@ -773,6 +777,11 @@ type SdkMemberTypeBase struct { // property to be specifiable in an Android.bp file. 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 HostOsDependent bool Loading @@ -793,6 +802,10 @@ func (b *SdkMemberTypeBase) RequiresBpProperty() bool { return !b.BpPropertyNotRequired } func (b *SdkMemberTypeBase) SupportedBuildReleases() string { return b.SupportedBuildReleaseSpecification } func (b *SdkMemberTypeBase) UsableWithSdkAndSdkSnapshot() bool { return b.SupportsSdk } Loading java/java.go +3 −0 Original line number Diff line number Diff line Loading @@ -164,6 +164,9 @@ var ( android.SdkMemberTypeBase{ PropertyName: "java_systemserver_libs", SupportsSdk: true, // This was only added in Tiramisu. SupportedBuildReleaseSpecification: "Tiramisu+", }, func(ctx android.SdkMemberContext, j *Library) android.Path { // Java systemserver libs are only provided in the SDK to provide access to their dex Loading java/systemserver_classpath_fragment.go +3 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,9 @@ func init() { SdkMemberTypeBase: android.SdkMemberTypeBase{ PropertyName: "systemserverclasspath_fragments", SupportsSdk: true, // This was only added in Tiramisu. SupportedBuildReleaseSpecification: "Tiramisu+", }, }) } Loading sdk/systemserverclasspath_fragment_sdk_test.go +34 −4 Original line number Diff line number Diff line Loading @@ -22,13 +22,16 @@ import ( "android/soong/java" ) func TestSnapshotWithSystemServerClasspathFragment(t *testing.T) { func testSnapshotWithSystemServerClasspathFragment(t *testing.T, targetBuildRelease string, expectedSdkSnapshot string) { result := android.GroupFixturePreparers( prepareForSdkTestWithJava, java.PrepareForTestWithJavaDefaultModules, java.PrepareForTestWithJavaSdkLibraryFiles, java.FixtureWithLastReleaseApis("mysdklibrary"), dexpreopt.FixtureSetApexSystemServerJars("myapex:mylib", "myapex:mysdklibrary"), android.FixtureModifyEnv(func(env map[string]string) { env["SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE"] = targetBuildRelease }), prepareForSdkTestWithApex, android.FixtureWithRootAndroidBp(` Loading Loading @@ -83,7 +86,34 @@ func TestSnapshotWithSystemServerClasspathFragment(t *testing.T) { ).RunTest(t) 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. java_sdk_library_import { Loading Loading @@ -120,6 +150,6 @@ prebuilt_systemserverclasspath_fragment { "mysdklibrary", ], } `), ) `) }) } sdk/update.go +29 −3 Original line number Diff line number Diff line Loading @@ -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 // which they are concatenated is the order in which the member types were registered in the // 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) byName := make(map[string]*sdkMember) Loading Loading @@ -268,13 +268,39 @@ func (s *sdk) groupMemberVariantsByMemberThenType(ctx android.ModuleContext, mem } var members []*sdkMember for _, memberListProperty := range s.memberTypeListProperties() { membersOfType := byType[memberListProperty.memberType] memberType := memberListProperty.memberType if !isMemberTypeSupportedByTargetBuildRelease(memberType, targetBuildRelease) { continue } membersOfType := byType[memberType] members = append(members, membersOfType...) } 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 { for _, v := range variants { if v == newVariant { Loading Loading @@ -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 // type together. members := s.groupMemberVariantsByMemberThenType(ctx, memberVariantDeps) members := s.groupMemberVariantsByMemberThenType(ctx, targetBuildRelease, memberVariantDeps) // Create the prebuilt modules for each of the member modules. traits := s.gatherTraits() Loading Loading
android/sdk.go +13 −0 Original line number Diff line number Diff line Loading @@ -661,6 +661,10 @@ type SdkMemberType interface { // an Android.bp file. 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, // false otherwise. UsableWithSdkAndSdkSnapshot() bool Loading Loading @@ -773,6 +777,11 @@ type SdkMemberTypeBase struct { // property to be specifiable in an Android.bp file. 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 HostOsDependent bool Loading @@ -793,6 +802,10 @@ func (b *SdkMemberTypeBase) RequiresBpProperty() bool { return !b.BpPropertyNotRequired } func (b *SdkMemberTypeBase) SupportedBuildReleases() string { return b.SupportedBuildReleaseSpecification } func (b *SdkMemberTypeBase) UsableWithSdkAndSdkSnapshot() bool { return b.SupportsSdk } Loading
java/java.go +3 −0 Original line number Diff line number Diff line Loading @@ -164,6 +164,9 @@ var ( android.SdkMemberTypeBase{ PropertyName: "java_systemserver_libs", SupportsSdk: true, // This was only added in Tiramisu. SupportedBuildReleaseSpecification: "Tiramisu+", }, func(ctx android.SdkMemberContext, j *Library) android.Path { // Java systemserver libs are only provided in the SDK to provide access to their dex Loading
java/systemserver_classpath_fragment.go +3 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,9 @@ func init() { SdkMemberTypeBase: android.SdkMemberTypeBase{ PropertyName: "systemserverclasspath_fragments", SupportsSdk: true, // This was only added in Tiramisu. SupportedBuildReleaseSpecification: "Tiramisu+", }, }) } Loading
sdk/systemserverclasspath_fragment_sdk_test.go +34 −4 Original line number Diff line number Diff line Loading @@ -22,13 +22,16 @@ import ( "android/soong/java" ) func TestSnapshotWithSystemServerClasspathFragment(t *testing.T) { func testSnapshotWithSystemServerClasspathFragment(t *testing.T, targetBuildRelease string, expectedSdkSnapshot string) { result := android.GroupFixturePreparers( prepareForSdkTestWithJava, java.PrepareForTestWithJavaDefaultModules, java.PrepareForTestWithJavaSdkLibraryFiles, java.FixtureWithLastReleaseApis("mysdklibrary"), dexpreopt.FixtureSetApexSystemServerJars("myapex:mylib", "myapex:mysdklibrary"), android.FixtureModifyEnv(func(env map[string]string) { env["SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE"] = targetBuildRelease }), prepareForSdkTestWithApex, android.FixtureWithRootAndroidBp(` Loading Loading @@ -83,7 +86,34 @@ func TestSnapshotWithSystemServerClasspathFragment(t *testing.T) { ).RunTest(t) 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. java_sdk_library_import { Loading Loading @@ -120,6 +150,6 @@ prebuilt_systemserverclasspath_fragment { "mysdklibrary", ], } `), ) `) }) }
sdk/update.go +29 −3 Original line number Diff line number Diff line Loading @@ -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 // which they are concatenated is the order in which the member types were registered in the // 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) byName := make(map[string]*sdkMember) Loading Loading @@ -268,13 +268,39 @@ func (s *sdk) groupMemberVariantsByMemberThenType(ctx android.ModuleContext, mem } var members []*sdkMember for _, memberListProperty := range s.memberTypeListProperties() { membersOfType := byType[memberListProperty.memberType] memberType := memberListProperty.memberType if !isMemberTypeSupportedByTargetBuildRelease(memberType, targetBuildRelease) { continue } membersOfType := byType[memberType] members = append(members, membersOfType...) } 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 { for _, v := range variants { if v == newVariant { Loading Loading @@ -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 // type together. members := s.groupMemberVariantsByMemberThenType(ctx, memberVariantDeps) members := s.groupMemberVariantsByMemberThenType(ctx, targetBuildRelease, memberVariantDeps) // Create the prebuilt modules for each of the member modules. traits := s.gatherTraits() Loading