diff --git a/cc/image_sdk_traits.go b/cc/image_sdk_traits.go index 371bb24e8..1d282301c 100644 --- a/cc/image_sdk_traits.go +++ b/cc/image_sdk_traits.go @@ -19,6 +19,7 @@ import "android/soong/android" // This file contains support for the image variant sdk traits. func init() { + android.RegisterSdkMemberTrait(ramdiskImageRequiredSdkTrait) android.RegisterSdkMemberTrait(recoveryImageRequiredSdkTrait) } @@ -26,6 +27,12 @@ type imageSdkTraitStruct struct { android.SdkMemberTraitBase } +var ramdiskImageRequiredSdkTrait android.SdkMemberTrait = &imageSdkTraitStruct{ + SdkMemberTraitBase: android.SdkMemberTraitBase{ + PropertyName: "ramdisk_image_required", + }, +} + var recoveryImageRequiredSdkTrait android.SdkMemberTrait = &imageSdkTraitStruct{ SdkMemberTraitBase: android.SdkMemberTraitBase{ PropertyName: "recovery_image_required", diff --git a/cc/library_headers.go b/cc/library_headers.go index 4022392bb..cabeb0156 100644 --- a/cc/library_headers.go +++ b/cc/library_headers.go @@ -35,6 +35,7 @@ var headersLibrarySdkMemberType = &librarySdkMemberType{ HostOsDependent: true, Traits: []android.SdkMemberTrait{ nativeBridgeSdkTrait, + ramdiskImageRequiredSdkTrait, recoveryImageRequiredSdkTrait, }, }, diff --git a/cc/library_sdk_member.go b/cc/library_sdk_member.go index a28ccd062..8988de2e5 100644 --- a/cc/library_sdk_member.go +++ b/cc/library_sdk_member.go @@ -134,6 +134,16 @@ func (mt *librarySdkMemberType) AddDependencies(ctx android.SdkDependencyContext targets: targets, }) + // If required add additional dependencies on the image:ramdisk variants. + if ctx.RequiresTrait(lib, ramdiskImageRequiredSdkTrait) { + memberDependencies = append(memberDependencies, memberDependency{ + imageVariations: []blueprint.Variation{{Mutator: "image", Variation: android.RamdiskVariation}}, + // Only add a dependency on the first target as that is the only one which will have an + // image:ramdisk variant. + targets: targets[:1], + }) + } + // If required add additional dependencies on the image:recovery variants. if ctx.RequiresTrait(lib, recoveryImageRequiredSdkTrait) { memberDependencies = append(memberDependencies, memberDependency{ @@ -199,6 +209,10 @@ func (mt *librarySdkMemberType) AddPrebuiltModule(ctx android.SdkMemberContext, pbm.AddProperty("native_bridge_supported", true) } + if ctx.RequiresTrait(ramdiskImageRequiredSdkTrait) { + pbm.AddProperty("ramdisk_available", true) + } + if ctx.RequiresTrait(recoveryImageRequiredSdkTrait) { pbm.AddProperty("recovery_available", true) } diff --git a/sdk/cc_sdk_test.go b/sdk/cc_sdk_test.go index 7afdac4a0..cd63dac8c 100644 --- a/sdk/cc_sdk_test.go +++ b/sdk/cc_sdk_test.go @@ -2126,6 +2126,10 @@ myinclude/Test.h -> include/myinclude/Test.h ) } + t.Run("ramdisk", func(t *testing.T) { + testImageVariant(t, "ramdisk_available", "ramdisk_image_required") + }) + t.Run("recovery", func(t *testing.T) { testImageVariant(t, "recovery_available", "recovery_image_required") })