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)