vndk-def: Update pre-defined vndk-stable list.
This commit adds more libraries to vndk-stable and removes the closure
computation. We should include all dependencies in our pre-defined
list.
Test: ./tests/test_elf_linker.py
Change-Id: I93b90f462a0008a706a245edd6559c0f6f359618
diff --git a/vndk/tools/definition-tool/tests/test_elf_linker.py b/vndk/tools/definition-tool/tests/test_elf_linker.py
index 673c514..037e626 100755
--- a/vndk/tools/definition-tool/tests/test_elf_linker.py
+++ b/vndk/tools/definition-tool/tests/test_elf_linker.py
@@ -237,61 +237,73 @@
node = graph.get_lib('/vendor/lib64/libEGL.so')
self.assertEqual([], self._get_paths_from_nodes(node.users))
- def test_compute_vndk_stable(self):
+ def test_compute_predefined_vndk_stable(self):
+ lib_names = (
+ # SP-HAL VNDK-stable
+ 'libhidlmemory',
+
+ # HIDL interfaces.
+ 'android.hardware.graphics.allocator@2.0',
+ 'android.hardware.graphics.common@1.0',
+ 'android.hardware.graphics.mapper@2.0',
+ 'android.hidl.base@1.0',
+
+ # SP-NDK VNDK-stable (HIDL related)
+ 'libhidl-gen-utils',
+ 'libhidlbase',
+ 'libhidltransport',
+ 'libhwbinder',
+
+ # SP-NDK VNDK-stable (HIDL related)
+ 'libcutils',
+ 'liblzma',
+
+ # SP-NDK VNDK-stable (should be removed)
+ 'libbacktrace',
+ 'libbase',
+ 'libc++',
+ 'libunwind',
+ 'libziparchive',
+
+ # Bad VNDK-stable (must be removed)
+ 'libhardware',
+ 'libnativeloader',
+ 'libvintf',
+
+ # SP-NDK VNDK-stable (UI-related)
+ 'libnativewindow',
+ 'libsync',
+
+ # SP-NDK dependencies (SP-NDK only)
+ 'libui',
+ 'libutils',
+ )
+
+ # Add VNDK-stable libraries.
gb = GraphBuilder()
+ for name in lib_names:
+ gb.add_multilib(PT_SYSTEM, name, extra_dir='vndk-stable')
- # HIDL libraries.
- gb.add_multilib(PT_SYSTEM, 'libhidlbase', extra_dir='vndk-stable')
- gb.add_multilib(PT_SYSTEM, 'libhidltransport', extra_dir='vndk-stable')
- gb.add_multilib(PT_SYSTEM, 'libhidlmemory', extra_dir='vndk-stable')
- gb.add_multilib(PT_SYSTEM, 'libfmp', extra_dir='vndk-stable')
- gb.add_multilib(PT_SYSTEM, 'libhwbinder', extra_dir='vndk-stable')
-
- # UI libraries.
- # TODO: Add libui.so here.
+ # Add some unrelated libraries.
+ gb.add_multilib(PT_SYSTEM, 'libfoo')
+ gb.add_multilib(PT_SYSTEM, 'libbar', extra_dir='vndk-stable')
gb.resolve()
- # Compute VNDK-stable.
+ # Compute VNDK-stable and check the result.
vndk_stable = set(
- lib.path for lib in gb.graph.compute_vndk_stable(False))
+ lib.path for lib in gb.graph.compute_predefined_vndk_stable())
- for lib in ('lib', 'lib64'):
- # Check HIDL libraries.
- self.assertIn('/system/' + lib + '/vndk-stable/libhidlbase.so',
- vndk_stable)
- self.assertIn('/system/' + lib + '/vndk-stable/libhidltransport.so',
- vndk_stable)
- self.assertIn('/system/' + lib + '/vndk-stable/libhidlmemory.so',
- vndk_stable)
- self.assertIn('/system/' + lib + '/vndk-stable/libfmp.so',
- vndk_stable)
- self.assertIn('/system/' + lib + '/vndk-stable/libhwbinder.so',
- vndk_stable)
+ for lib_dir_name in ('lib', 'lib64'):
+ lib_dir = '/system/' + lib_dir_name + '/vndk-stable'
+ for name in lib_names:
+ self.assertIn(os.path.join(lib_dir, name + '.so'), vndk_stable)
- # TODO: Check libui.so here.
+ self.assertNotIn('/system/lib/libfoo.so', vndk_stable)
+ self.assertNotIn('/system/lib64/libfoo.so', vndk_stable)
- def test_compute_vndk_stable_closure(self):
- gb = GraphBuilder()
-
- libc = gb.add_lib(PT_SYSTEM, ELF.ELFCLASS64, 'libc')
-
- libhidlbase = gb.add_lib(PT_SYSTEM, ELF.ELFCLASS64, 'libhidlbase',
- dt_needed=['libfoo.so'],
- extra_dir='vndk-stable')
-
- libfoo = gb.add_lib(PT_SYSTEM, ELF.ELFCLASS64, 'libfoo')
-
- gb.resolve()
-
- # Compute VNDK-stable.
- vndk_stable = gb.graph.compute_vndk_stable(False)
- vndk_stable_closure = gb.graph.compute_vndk_stable(True)
-
- self.assertSetEqual({libhidlbase}, vndk_stable)
- self.assertSetEqual({libhidlbase, libfoo}, vndk_stable_closure)
- self.assertNotIn(libc, vndk_stable)
- self.assertNotIn(libc, vndk_stable_closure)
+ self.assertNotIn('/system/lib/vndk-stable/libbar.so', vndk_stable)
+ self.assertNotIn('/system/lib64/vndk-stable/libbar.so', vndk_stable)
def test_compute_sp_hal(self):
gb = GraphBuilder()
diff --git a/vndk/tools/definition-tool/vndk_definition_tool.py b/vndk/tools/definition-tool/vndk_definition_tool.py
index 19e9268..c1a3032 100755
--- a/vndk/tools/definition-tool/vndk_definition_tool.py
+++ b/vndk/tools/definition-tool/vndk_definition_tool.py
@@ -901,26 +901,48 @@
return libs
- def compute_vndk_stable(self, closure):
+ def compute_predefined_vndk_stable(self):
"""Find all vndk stable libraries."""
path_patterns = (
- # HIDL libraries used by android.hardware.graphics.mapper@2.0-impl.
+ # SP-HAL VNDK-stable
+ '^.*/libhidlmemory\\.so$',
+
+ # SP-NDK VNDK-stable
+ '^.*/android\\.hardware\\.graphics\\.allocator@2\\.0\\.so$',
+ '^.*/android\\.hardware\\.graphics\\.common@1\\.0\\.so$',
+ '^.*/android\\.hardware\\.graphics\\.mapper@2\\.0\\.so$',
+ '^.*/android\\.hidl\\.base@1\\.0\\.so$',
+ '^.*/libcutils\\.so$',
+ '^.*/libhidl-gen-utils\\.so$',
'^.*/libhidlbase\\.so$',
'^.*/libhidltransport\\.so$',
- '^.*/libhidlmemory\\.so$',
- '^.*/libfmp\\.so$',
'^.*/libhwbinder\\.so$',
+ '^.*/liblzma\\.so$',
+ '^.*/libnativewindow\\.so$',
+ '^.*/libsync\\.so$',
- # UI libraries used by libEGL.
- #'^.*/libui\\.so$',
- #'^.*/libnativewindow\\.so$',
+ # SP-NDK VNDK-stable (should to be removed)
+ '^.*/libbacktrace\\.so$',
+ '^.*/libbase\\.so$',
+ '^.*/libc\\+\\+\\.so$',
+ '^.*/libunwind\\.so$',
+ '^.*/libziparchive\\.so$',
+
+ # SP-NDK dependencies (SP-NDK only)
+ '^.*/libui\\.so$',
+ '^.*/libutils\\.so$',
+
+ # Bad vndk-stable (must be removed)
+ '^.*/libhardware\\.so$',
+ '^.*/libnativeloader\\.so$',
+ '^.*/libvintf\\.so$',
)
def is_excluded_libs(lib):
return lib.is_ndk
- return self.compute_matched_libs(path_patterns, closure,
+ return self.compute_matched_libs(path_patterns, False,
is_excluded_libs)
def compute_sp_hal(self, vndk_stable, closure):
@@ -1713,7 +1735,7 @@
self._warn_banned_vendor_lib_deps(graph, banned_libs)
# Compute sp-hal and vndk-stable.
- vndk_stable = graph.compute_vndk_stable(closure=True)
+ vndk_stable = graph.compute_predefined_vndk_stable()
sp_hals = graph.compute_sp_hal(vndk_stable, closure=False)
sp_hals_closure = graph.compute_sp_hal(vndk_stable, closure=True)
@@ -1909,20 +1931,17 @@
class VNDKStableCommand(ELFGraphCommand):
def __init__(self):
super(VNDKStableCommand, self).__init__(
- 'vndk-stable', help='Find transitive closure of VNDK stable')
+ 'vndk-stable', help='List pre-defined VNDK stable')
def add_argparser_options(self, parser):
super(VNDKStableCommand, self).add_argparser_options(parser)
- parser.add_argument('--closure', action='store_true',
- help='show the closure')
-
def main(self, args):
graph = ELFLinker.create(args.system, args.system_dir_as_vendor,
args.vendor, args.vendor_dir_as_system,
args.load_extra_deps)
- vndk_stable = graph.compute_vndk_stable(closure=args.closure)
+ vndk_stable = graph.compute_predefined_vndk_stable()
for lib in sorted_lib_path_list(vndk_stable):
print(lib)
return 0
@@ -1944,7 +1963,7 @@
args.vendor, args.vendor_dir_as_system,
args.load_extra_deps)
- vndk_stable = graph.compute_vndk_stable(closure=True)
+ vndk_stable = graph.compute_predefined_vndk_stable()
sp_hals = graph.compute_sp_hal(vndk_stable, closure=args.closure)
for lib in sorted_lib_path_list(sp_hals):
print(lib)