diff --git a/android/sdk.go b/android/sdk.go index 8115b690b..2c38f564c 100644 --- a/android/sdk.go +++ b/android/sdk.go @@ -466,8 +466,7 @@ func RegisterSdkMemberType(memberType SdkMemberType) { // Base structure for all implementations of SdkMemberProperties. // -// Contains common properties that apply across many different member types. These -// are not affected by the optimization to extract common values. +// Contains common properties that apply across many different member types. type SdkMemberPropertiesBase struct { // The number of unique os types supported by the member variants. // @@ -489,9 +488,7 @@ type SdkMemberPropertiesBase struct { Os OsType `sdk:"keep"` // The setting to use for the compile_multilib property. - // - // This property is set after optimization so there is no point in trying to optimize it. - Compile_multilib string `sdk:"keep"` + Compile_multilib string `android:"arch_variant"` } // The os prefix to use for any file paths in the sdk. diff --git a/cc/binary_sdk_member.go b/cc/binary_sdk_member.go index 372a72e2c..51d8b4e97 100644 --- a/cc/binary_sdk_member.go +++ b/cc/binary_sdk_member.go @@ -140,10 +140,6 @@ func (p *nativeBinaryInfoProperties) PopulateFromVariant(ctx android.SdkMemberCo } func (p *nativeBinaryInfoProperties) AddToPropertySet(ctx android.SdkMemberContext, propertySet android.BpPropertySet) { - if p.Compile_multilib != "" { - propertySet.AddProperty("compile_multilib", p.Compile_multilib) - } - builder := ctx.SnapshotBuilder() if p.outputFile != nil { propertySet.AddProperty("srcs", []string{nativeBinaryPathFor(*p)}) diff --git a/sdk/cc_sdk_test.go b/sdk/cc_sdk_test.go index b168cd036..25d2a86a0 100644 --- a/sdk/cc_sdk_test.go +++ b/sdk/cc_sdk_test.go @@ -73,12 +73,16 @@ func TestSdkCompileMultilibOverride(t *testing.T) { result := testSdkWithCc(t, ` sdk { name: "mysdk", + device_supported: false, + host_supported: true, native_shared_libs: ["sdkmember"], compile_multilib: "64", } cc_library_shared { name: "sdkmember", + device_supported: false, + host_supported: true, srcs: ["Test.cpp"], stl: "none", compile_multilib: "64", @@ -86,8 +90,52 @@ func TestSdkCompileMultilibOverride(t *testing.T) { `) result.CheckSnapshot("mysdk", "", + checkAndroidBpContents(` +// This is auto-generated. DO NOT EDIT. + +cc_prebuilt_library_shared { + name: "mysdk_sdkmember@current", + sdk_member_name: "sdkmember", + device_supported: false, + host_supported: true, + installable: false, + stl: "none", + compile_multilib: "64", + arch: { + x86_64: { + srcs: ["x86_64/lib/sdkmember.so"], + }, + }, +} + +cc_prebuilt_library_shared { + name: "sdkmember", + prefer: false, + device_supported: false, + host_supported: true, + stl: "none", + compile_multilib: "64", + arch: { + x86_64: { + srcs: ["x86_64/lib/sdkmember.so"], + }, + }, +} + +sdk_snapshot { + name: "mysdk@current", + device_supported: false, + host_supported: true, + native_shared_libs: ["mysdk_sdkmember@current"], + target: { + linux_glibc: { + compile_multilib: "64", + }, + }, +} +`), checkAllCopyRules(` -.intermediates/sdkmember/android_arm64_armv8-a_shared/sdkmember.so -> arm64/lib/sdkmember.so +.intermediates/sdkmember/linux_glibc_x86_64_shared/sdkmember.so -> x86_64/lib/sdkmember.so `)) } @@ -271,6 +319,7 @@ cc_prebuilt_object { name: "mysdk_crtobj@current", sdk_member_name: "crtobj", stl: "none", + compile_multilib: "both", arch: { arm64: { srcs: ["arm64/lib/crtobj.o"], @@ -285,6 +334,7 @@ cc_prebuilt_object { name: "crtobj", prefer: false, stl: "none", + compile_multilib: "both", arch: { arm64: { srcs: ["arm64/lib/crtobj.o"], @@ -378,6 +428,7 @@ cc_prebuilt_library_shared { sdk_member_name: "mynativelib", installable: false, stl: "none", + compile_multilib: "both", export_include_dirs: ["include/include"], arch: { arm64: { @@ -394,6 +445,7 @@ cc_prebuilt_library_shared { name: "mynativelib", prefer: false, stl: "none", + compile_multilib: "both", export_include_dirs: ["include/include"], arch: { arm64: { @@ -627,9 +679,9 @@ cc_prebuilt_binary { host_supported: true, installable: false, stl: "none", + compile_multilib: "both", static_executable: true, nocrt: true, - compile_multilib: "both", arch: { x86_64: { srcs: ["x86_64/bin/linker"], @@ -646,9 +698,9 @@ cc_prebuilt_binary { device_supported: false, host_supported: true, stl: "none", + compile_multilib: "both", static_executable: true, nocrt: true, - compile_multilib: "both", arch: { x86_64: { srcs: ["x86_64/bin/linker"], @@ -708,6 +760,7 @@ cc_prebuilt_library_shared { ], installable: false, stl: "none", + compile_multilib: "both", export_include_dirs: ["include/include"], arch: { arm64: { @@ -729,6 +782,7 @@ cc_prebuilt_library_shared { "apex2", ], stl: "none", + compile_multilib: "both", export_include_dirs: ["include/include"], arch: { arm64: { @@ -830,6 +884,7 @@ cc_prebuilt_library_shared { sdk_member_name: "mynativelib", installable: false, stl: "none", + compile_multilib: "both", shared_libs: [ "mysdk_myothernativelib@current", "libc", @@ -848,6 +903,7 @@ cc_prebuilt_library_shared { name: "mynativelib", prefer: false, stl: "none", + compile_multilib: "both", shared_libs: [ "myothernativelib", "libc", @@ -867,6 +923,7 @@ cc_prebuilt_library_shared { sdk_member_name: "myothernativelib", installable: false, stl: "none", + compile_multilib: "both", system_shared_libs: ["libm"], arch: { arm64: { @@ -882,6 +939,7 @@ cc_prebuilt_library_shared { name: "myothernativelib", prefer: false, stl: "none", + compile_multilib: "both", system_shared_libs: ["libm"], arch: { arm64: { @@ -898,6 +956,7 @@ cc_prebuilt_library_shared { sdk_member_name: "mysystemnativelib", installable: false, stl: "none", + compile_multilib: "both", arch: { arm64: { srcs: ["arm64/lib/mysystemnativelib.so"], @@ -912,6 +971,7 @@ cc_prebuilt_library_shared { name: "mysystemnativelib", prefer: false, stl: "none", + compile_multilib: "both", arch: { arm64: { srcs: ["arm64/lib/mysystemnativelib.so"], @@ -983,6 +1043,7 @@ cc_prebuilt_library_shared { installable: false, sdk_version: "minimum", stl: "none", + compile_multilib: "both", export_include_dirs: ["include/include"], arch: { x86_64: { @@ -1003,6 +1064,7 @@ cc_prebuilt_library_shared { host_supported: true, sdk_version: "minimum", stl: "none", + compile_multilib: "both", export_include_dirs: ["include/include"], arch: { x86_64: { @@ -1082,12 +1144,18 @@ cc_prebuilt_library_shared { installable: false, stl: "none", target: { + linux_glibc: { + compile_multilib: "both", + }, linux_glibc_x86_64: { srcs: ["linux_glibc/x86_64/lib/mynativelib.so"], }, linux_glibc_x86: { srcs: ["linux_glibc/x86/lib/mynativelib.so"], }, + windows: { + compile_multilib: "64", + }, windows_x86_64: { srcs: ["windows/x86_64/lib/mynativelib.dll"], }, @@ -1101,12 +1169,18 @@ cc_prebuilt_library_shared { host_supported: true, stl: "none", target: { + linux_glibc: { + compile_multilib: "both", + }, linux_glibc_x86_64: { srcs: ["linux_glibc/x86_64/lib/mynativelib.so"], }, linux_glibc_x86: { srcs: ["linux_glibc/x86/lib/mynativelib.so"], }, + windows: { + compile_multilib: "64", + }, windows_x86_64: { srcs: ["windows/x86_64/lib/mynativelib.dll"], }, @@ -1163,6 +1237,7 @@ cc_prebuilt_library_static { sdk_member_name: "mynativelib", installable: false, stl: "none", + compile_multilib: "both", export_include_dirs: ["include/include"], arch: { arm64: { @@ -1180,6 +1255,7 @@ cc_prebuilt_library_static { name: "mynativelib", prefer: false, stl: "none", + compile_multilib: "both", export_include_dirs: ["include/include"], arch: { arm64: { @@ -1251,6 +1327,7 @@ cc_prebuilt_library_static { host_supported: true, installable: false, stl: "none", + compile_multilib: "both", export_include_dirs: ["include/include"], arch: { x86_64: { @@ -1270,6 +1347,7 @@ cc_prebuilt_library_static { device_supported: false, host_supported: true, stl: "none", + compile_multilib: "both", export_include_dirs: ["include/include"], arch: { x86_64: { @@ -1330,6 +1408,7 @@ cc_prebuilt_library { sdk_member_name: "mynativelib", installable: false, stl: "none", + compile_multilib: "both", export_include_dirs: ["include/include"], arch: { arm64: { @@ -1355,6 +1434,7 @@ cc_prebuilt_library { name: "mynativelib", prefer: false, stl: "none", + compile_multilib: "both", export_include_dirs: ["include/include"], arch: { arm64: { @@ -1434,6 +1514,7 @@ cc_prebuilt_library_static { host_supported: true, installable: false, stl: "none", + compile_multilib: "64", export_include_dirs: ["include/include"], arch: { x86_64: { @@ -1449,6 +1530,7 @@ cc_prebuilt_library_static { device_supported: false, host_supported: true, stl: "none", + compile_multilib: "64", export_include_dirs: ["include/include"], arch: { x86_64: { @@ -1501,6 +1583,7 @@ cc_prebuilt_library_headers { name: "mysdk_mynativeheaders@current", sdk_member_name: "mynativeheaders", stl: "none", + compile_multilib: "both", export_include_dirs: ["include/include"], } @@ -1508,6 +1591,7 @@ cc_prebuilt_library_headers { name: "mynativeheaders", prefer: false, stl: "none", + compile_multilib: "both", export_include_dirs: ["include/include"], } @@ -1553,6 +1637,7 @@ cc_prebuilt_library_headers { device_supported: false, host_supported: true, stl: "none", + compile_multilib: "both", export_include_dirs: ["include/include"], } @@ -1562,6 +1647,7 @@ cc_prebuilt_library_headers { device_supported: false, host_supported: true, stl: "none", + compile_multilib: "both", export_include_dirs: ["include/include"], } @@ -1614,6 +1700,7 @@ cc_prebuilt_library_headers { sdk_member_name: "mynativeheaders", host_supported: true, stl: "none", + compile_multilib: "both", export_system_include_dirs: ["common_os/include/include"], target: { android: { @@ -1630,6 +1717,7 @@ cc_prebuilt_library_headers { prefer: false, host_supported: true, stl: "none", + compile_multilib: "both", export_system_include_dirs: ["common_os/include/include"], target: { android: { @@ -1689,6 +1777,7 @@ cc_prebuilt_library_shared { name: "mysdk_sslnil@current", sdk_member_name: "sslnil", installable: false, + compile_multilib: "both", arch: { arm64: { srcs: ["arm64/lib/sslnil.so"], @@ -1702,6 +1791,7 @@ cc_prebuilt_library_shared { cc_prebuilt_library_shared { name: "sslnil", prefer: false, + compile_multilib: "both", arch: { arm64: { srcs: ["arm64/lib/sslnil.so"], @@ -1716,6 +1806,7 @@ cc_prebuilt_library_shared { name: "mysdk_sslempty@current", sdk_member_name: "sslempty", installable: false, + compile_multilib: "both", system_shared_libs: [], arch: { arm64: { @@ -1730,6 +1821,7 @@ cc_prebuilt_library_shared { cc_prebuilt_library_shared { name: "sslempty", prefer: false, + compile_multilib: "both", system_shared_libs: [], arch: { arm64: { @@ -1745,6 +1837,7 @@ cc_prebuilt_library_shared { name: "mysdk_sslnonempty@current", sdk_member_name: "sslnonempty", installable: false, + compile_multilib: "both", system_shared_libs: ["mysdk_sslnil@current"], arch: { arm64: { @@ -1759,6 +1852,7 @@ cc_prebuilt_library_shared { cc_prebuilt_library_shared { name: "sslnonempty", prefer: false, + compile_multilib: "both", system_shared_libs: ["sslnil"], arch: { arm64: { @@ -1807,6 +1901,7 @@ cc_prebuilt_library_shared { sdk_member_name: "sslvariants", host_supported: true, installable: false, + compile_multilib: "both", target: { android: { system_shared_libs: [], @@ -1830,6 +1925,7 @@ cc_prebuilt_library_shared { name: "sslvariants", prefer: false, host_supported: true, + compile_multilib: "both", target: { android: { system_shared_libs: [], @@ -1886,6 +1982,7 @@ cc_prebuilt_library_shared { name: "mysdk_stubslib@current", sdk_member_name: "stubslib", installable: false, + compile_multilib: "both", stubs: { versions: ["3"], }, @@ -1902,6 +1999,7 @@ cc_prebuilt_library_shared { cc_prebuilt_library_shared { name: "stubslib", prefer: false, + compile_multilib: "both", stubs: { versions: ["3"], }, @@ -1958,6 +2056,7 @@ cc_prebuilt_library_shared { sdk_member_name: "stubslib", host_supported: true, installable: false, + compile_multilib: "both", stubs: { versions: ["3"], }, @@ -1981,6 +2080,7 @@ cc_prebuilt_library_shared { name: "stubslib", prefer: false, host_supported: true, + compile_multilib: "both", stubs: { versions: ["3"], }, @@ -2036,6 +2136,7 @@ cc_prebuilt_library_shared { host_supported: true, installable: false, unique_host_soname: true, + compile_multilib: "both", target: { android_arm64: { srcs: ["android/arm64/lib/mylib.so"], @@ -2057,6 +2158,7 @@ cc_prebuilt_library_shared { prefer: false, host_supported: true, unique_host_soname: true, + compile_multilib: "both", target: { android_arm64: { srcs: ["android/arm64/lib/mylib.so"], diff --git a/sdk/update.go b/sdk/update.go index 824115138..c80d7d3d2 100644 --- a/sdk/update.go +++ b/sdk/update.go @@ -794,6 +794,17 @@ func (s *snapshotBuilder) isInternalMember(memberName string) bool { return !ok } +// Add the properties from the given SdkMemberProperties to the blueprint +// property set. This handles common properties in SdkMemberPropertiesBase and +// calls the member-specific AddToPropertySet for the rest. +func addSdkMemberPropertiesToSet(ctx *memberContext, memberProperties android.SdkMemberProperties, targetPropertySet android.BpPropertySet) { + if memberProperties.Base().Compile_multilib != "" { + targetPropertySet.AddProperty("compile_multilib", memberProperties.Base().Compile_multilib) + } + + memberProperties.AddToPropertySet(ctx, targetPropertySet) +} + type sdkMemberRef struct { memberType android.SdkMemberType variant android.SdkAware @@ -1009,7 +1020,7 @@ func (osInfo *osTypeSpecificInfo) addToPropertySet(ctx *memberContext, bpModule } // Add the os specific but arch independent properties to the module. - osInfo.Properties.AddToPropertySet(ctx, osPropertySet) + addSdkMemberPropertiesToSet(ctx, osInfo.Properties, osPropertySet) // Add arch (and possibly os) specific sections for each set of arch (and possibly // os) specific properties. @@ -1111,11 +1122,11 @@ func (archInfo *archTypeSpecificInfo) optimizeProperties(ctx *memberContext, com func (archInfo *archTypeSpecificInfo) addToPropertySet(ctx *memberContext, archPropertySet android.BpPropertySet, archOsPrefix string) { archTypeName := archInfo.archType.Name archTypePropertySet := archPropertySet.AddPropertySet(archOsPrefix + archTypeName) - archInfo.Properties.AddToPropertySet(ctx, archTypePropertySet) + addSdkMemberPropertiesToSet(ctx, archInfo.Properties, archTypePropertySet) for _, linkInfo := range archInfo.linkInfos { linkPropertySet := archTypePropertySet.AddPropertySet(linkInfo.linkType) - linkInfo.Properties.AddToPropertySet(ctx, linkPropertySet) + addSdkMemberPropertiesToSet(ctx, linkInfo.Properties, linkPropertySet) } } @@ -1221,7 +1232,7 @@ func (s *sdk) createMemberSnapshot(ctx *memberContext, member *sdkMember, bpModu extractCommonProperties(ctx.sdkMemberContext, commonValueExtractor, commonProperties, osSpecificPropertiesContainers) // Add the common properties to the module. - commonProperties.AddToPropertySet(ctx, bpModule) + addSdkMemberPropertiesToSet(ctx, commonProperties, bpModule) // Create a target property set into which target specific properties can be // added.