diff options
author | 2022-05-12 20:40:00 -0400 | |
---|---|---|
committer | 2022-05-23 10:51:22 -0400 | |
commit | 96320dfff8fd5859a5e5f2a5c74bf8d79dd6499d (patch) | |
tree | 2daf8bf3214a0fe1d79d0a668c8f56149126e7fd /sdk/cc_sdk_test.go | |
parent | 4dd76eb26c6f673a85d1c33c504e3beb1324bcdb (diff) |
Handle multiple linkages in sdk snapshots
Currently, if the same library is specified for multiple of native_libs,
native_shared_libs, and native_static_libs for different arch/oses,
there can be a few errors:
1. specifying a .so file as `srcs` within a cc_prebuilt_library rather
than being specified only for shared
2. the final type of prebuilt library is dependent on the arch/os
This change introduces:
* an ability for a member type to override the type for specified
properties
* checks for a library being used with incompatible member types
* basing linkage nesting on the member type in addition to variants
This will ensure that the correct library type is used, regardless of
the order of iteration over oses/arches, and support nesting linkages
where necessary but only one linkage variant exists.
Test: soong tests
Test: CI
Change-Id: I81dee013b09b99c34ca6c18f9cfcc12ee56d33d1
Diffstat (limited to 'sdk/cc_sdk_test.go')
-rw-r--r-- | sdk/cc_sdk_test.go | 223 |
1 files changed, 223 insertions, 0 deletions
diff --git a/sdk/cc_sdk_test.go b/sdk/cc_sdk_test.go index 571d21420..a4c7a8559 100644 --- a/sdk/cc_sdk_test.go +++ b/sdk/cc_sdk_test.go @@ -1740,6 +1740,229 @@ myinclude/Test.h -> include/myinclude/Test.h ) } +func TestSnapshotSameLibraryWithNativeLibsAndNativeSharedLib(t *testing.T) { + result := testSdkWithCc(t, ` + module_exports { + host_supported: true, + name: "myexports", + target: { + android: { + native_shared_libs: [ + "mynativelib", + ], + }, + not_windows: { + native_libs: [ + "mynativelib", + ], + }, + }, + } + + cc_library { + name: "mynativelib", + host_supported: true, + srcs: [ + "Test.cpp", + ], + stl: "none", + recovery_available: true, + vendor_available: true, + } + `) + + CheckSnapshot(t, result, "myexports", "", + checkUnversionedAndroidBpContents(` +// This is auto-generated. DO NOT EDIT. + +cc_prebuilt_library { + name: "mynativelib", + prefer: false, + visibility: ["//visibility:public"], + apex_available: ["//apex_available:platform"], + host_supported: true, + vendor_available: true, + stl: "none", + compile_multilib: "both", + target: { + host: { + enabled: false, + }, + android_arm64: { + shared: { + srcs: ["android/arm64/lib/mynativelib.so"], + }, + static: { + enabled: false, + }, + }, + android_arm: { + shared: { + srcs: ["android/arm/lib/mynativelib.so"], + }, + static: { + enabled: false, + }, + }, + linux_glibc_x86_64: { + enabled: true, + static: { + srcs: ["linux_glibc/x86_64/lib/mynativelib.a"], + }, + shared: { + srcs: ["linux_glibc/x86_64/lib/mynativelib.so"], + }, + }, + linux_glibc_x86: { + enabled: true, + static: { + srcs: ["linux_glibc/x86/lib/mynativelib.a"], + }, + shared: { + srcs: ["linux_glibc/x86/lib/mynativelib.so"], + }, + }, + }, +} +`), + checkAllCopyRules(` +.intermediates/mynativelib/android_arm64_armv8-a_shared/mynativelib.so -> android/arm64/lib/mynativelib.so +.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> android/arm/lib/mynativelib.so +.intermediates/mynativelib/linux_glibc_x86_64_static/mynativelib.a -> linux_glibc/x86_64/lib/mynativelib.a +.intermediates/mynativelib/linux_glibc_x86_64_shared/mynativelib.so -> linux_glibc/x86_64/lib/mynativelib.so +.intermediates/mynativelib/linux_glibc_x86_static/mynativelib.a -> linux_glibc/x86/lib/mynativelib.a +.intermediates/mynativelib/linux_glibc_x86_shared/mynativelib.so -> linux_glibc/x86/lib/mynativelib.so +`), + ) +} + +func TestSnapshotSameLibraryWithAndroidNativeLibsAndHostNativeSharedLib(t *testing.T) { + result := testSdkWithCc(t, ` + module_exports { + host_supported: true, + name: "myexports", + target: { + android: { + native_libs: [ + "mynativelib", + ], + }, + not_windows: { + native_shared_libs: [ + "mynativelib", + ], + }, + }, + } + + cc_library { + name: "mynativelib", + host_supported: true, + srcs: [ + "Test.cpp", + ], + stl: "none", + recovery_available: true, + vendor_available: true, + } + `) + + CheckSnapshot(t, result, "myexports", "", + checkUnversionedAndroidBpContents(` +// This is auto-generated. DO NOT EDIT. + +cc_prebuilt_library { + name: "mynativelib", + prefer: false, + visibility: ["//visibility:public"], + apex_available: ["//apex_available:platform"], + host_supported: true, + vendor_available: true, + stl: "none", + compile_multilib: "both", + target: { + host: { + enabled: false, + }, + android_arm64: { + static: { + srcs: ["android/arm64/lib/mynativelib.a"], + }, + shared: { + srcs: ["android/arm64/lib/mynativelib.so"], + }, + }, + android_arm: { + static: { + srcs: ["android/arm/lib/mynativelib.a"], + }, + shared: { + srcs: ["android/arm/lib/mynativelib.so"], + }, + }, + linux_glibc_x86_64: { + enabled: true, + shared: { + srcs: ["linux_glibc/x86_64/lib/mynativelib.so"], + }, + static: { + enabled: false, + }, + }, + linux_glibc_x86: { + enabled: true, + shared: { + srcs: ["linux_glibc/x86/lib/mynativelib.so"], + }, + static: { + enabled: false, + }, + }, + }, +} +`), + checkAllCopyRules(` +.intermediates/mynativelib/android_arm64_armv8-a_static/mynativelib.a -> android/arm64/lib/mynativelib.a +.intermediates/mynativelib/android_arm64_armv8-a_shared/mynativelib.so -> android/arm64/lib/mynativelib.so +.intermediates/mynativelib/android_arm_armv7-a-neon_static/mynativelib.a -> android/arm/lib/mynativelib.a +.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> android/arm/lib/mynativelib.so +.intermediates/mynativelib/linux_glibc_x86_64_shared/mynativelib.so -> linux_glibc/x86_64/lib/mynativelib.so +.intermediates/mynativelib/linux_glibc_x86_shared/mynativelib.so -> linux_glibc/x86/lib/mynativelib.so +`), + ) +} + +func TestSnapshotSameLibraryWithNativeStaticLibsAndNativeSharedLib(t *testing.T) { + testSdkError(t, "Incompatible member types", ` + module_exports { + host_supported: true, + name: "myexports", + target: { + android: { + native_shared_libs: [ + "mynativelib", + ], + }, + not_windows: { + native_static_libs: [ + "mynativelib", + ], + }, + }, + } + + cc_library { + name: "mynativelib", + host_supported: true, + srcs: [ + ], + stl: "none", + recovery_available: true, + vendor_available: true, + } + `) +} + func TestHostSnapshotWithMultiLib64(t *testing.T) { result := testSdkWithCc(t, ` module_exports { |