diff --git a/android/sdk.go b/android/sdk.go index 5c7b329a9..731bdff11 100644 --- a/android/sdk.go +++ b/android/sdk.go @@ -304,10 +304,11 @@ type SdkMemberType interface { // SdkAware and be added with an SdkMemberTypeDependencyTag tag. HasTransitiveSdkMembers() bool - // Add dependencies from the SDK module to all the variants the member - // contributes to the SDK. The exact set of variants required is determined - // by the SDK and its properties. The dependencies must be added with the - // supplied tag. + // Add dependencies from the SDK module to all the module variants the member + // type contributes to the SDK. `names` is the list of module names given in + // the member type property (as returned by SdkPropertyName()) in the SDK + // module. The exact set of variants required is determined by the SDK and its + // properties. The dependencies must be added with the supplied tag. // // The BottomUpMutatorContext provided is for the SDK module. AddDependencies(mctx BottomUpMutatorContext, dependencyTag blueprint.DependencyTag, names []string) diff --git a/cc/library_headers.go b/cc/library_headers.go index 88cf7afdd..b7ab3907c 100644 --- a/cc/library_headers.go +++ b/cc/library_headers.go @@ -29,7 +29,7 @@ var headersLibrarySdkMemberType = &librarySdkMemberType{ SupportsSdk: true, }, prebuiltModuleType: "cc_prebuilt_library_headers", - linkTypes: nil, + noOutputFiles: true, } func RegisterLibraryHeadersBuildComponents(ctx android.RegistrationContext) { diff --git a/cc/library_sdk_member.go b/cc/library_sdk_member.go index 843ebb04a..69c3d18d2 100644 --- a/cc/library_sdk_member.go +++ b/cc/library_sdk_member.go @@ -18,6 +18,7 @@ import ( "path/filepath" "android/soong/android" + "github.com/google/blueprint" "github.com/google/blueprint/proptools" ) @@ -53,7 +54,10 @@ type librarySdkMemberType struct { prebuiltModuleType string - // The set of link types supported, set of "static", "shared". + noOutputFiles bool // True if there are no srcs files. + + // The set of link types supported. A set of "static", "shared", or nil to + // skip link type variations. linkTypes []string } @@ -327,7 +331,7 @@ func (p *nativeLibInfoProperties) PopulateFromVariant(variant android.SdkAware) // If the library has some link types then it produces an output binary file, otherwise it // is header only. - if p.memberType.linkTypes != nil { + if !p.memberType.noOutputFiles { p.outputFile = ccModule.OutputFile().Path() } diff --git a/cc/object.go b/cc/object.go index 74badc96a..19decec37 100644 --- a/cc/object.go +++ b/cc/object.go @@ -26,6 +26,16 @@ import ( func init() { android.RegisterModuleType("cc_object", ObjectFactory) + android.RegisterSdkMemberType(ccObjectSdkMemberType) +} + +var ccObjectSdkMemberType = &librarySdkMemberType{ + SdkMemberTypeBase: android.SdkMemberTypeBase{ + PropertyName: "native_objects", + SupportsSdk: true, + }, + prebuiltModuleType: "cc_prebuilt_object", + linkTypes: nil, } type objectLinker struct { @@ -67,6 +77,7 @@ func ObjectFactory() android.Module { // Clang's address-significance tables are incompatible with ld -r. module.compiler.appendCflags([]string{"-fno-addrsig"}) + module.sdkMemberTypes = []android.SdkMemberType{ccObjectSdkMemberType} return module.Init() } diff --git a/sdk/cc_sdk_test.go b/sdk/cc_sdk_test.go index 6f9dc3c17..6727b4bf0 100644 --- a/sdk/cc_sdk_test.go +++ b/sdk/cc_sdk_test.go @@ -225,6 +225,63 @@ func TestSdkWithCc(t *testing.T) { `) } +func TestSnapshotWithObject(t *testing.T) { + result := testSdkWithCc(t, ` + sdk { + name: "mysdk", + native_objects: ["crtobj"], + } + + cc_object { + name: "crtobj", + stl: "none", + } + `) + + result.CheckSnapshot("mysdk", "", + checkAndroidBpContents(` +// This is auto-generated. DO NOT EDIT. + +cc_prebuilt_object { + name: "mysdk_crtobj@current", + sdk_member_name: "crtobj", + stl: "none", + arch: { + arm64: { + srcs: ["arm64/lib/crtobj.o"], + }, + arm: { + srcs: ["arm/lib/crtobj.o"], + }, + }, +} + +cc_prebuilt_object { + name: "crtobj", + prefer: false, + stl: "none", + arch: { + arm64: { + srcs: ["arm64/lib/crtobj.o"], + }, + arm: { + srcs: ["arm/lib/crtobj.o"], + }, + }, +} + +sdk_snapshot { + name: "mysdk@current", + native_objects: ["mysdk_crtobj@current"], +} +`), + checkAllCopyRules(` +.intermediates/crtobj/android_arm64_armv8-a/crtobj.o -> arm64/lib/crtobj.o +.intermediates/crtobj/android_arm_armv7-a-neon/crtobj.o -> arm/lib/crtobj.o +`), + ) +} + func TestSnapshotWithCcDuplicateHeaders(t *testing.T) { result := testSdkWithCc(t, ` sdk {