vndk-def: Add sp-both-vndk-stable
This commit extracts sp-both-vndk-stable from sp-ndk-vndk-stable.
If a vndk-stable library is used by both SP-NDK and SP-HAL, then it
will belong to sp-both-vndk-stable.
Separating these libraries into another set makes it easier to:
1. Check whether a library is used by SP-HAL.
2. Estimate how many libraries will be loaded twice.
Test: Run vndk_definition_tool.py against sailfish image and only
sp-ndk-vndk-stable set is changed.
Change-Id: I2272086417c7dca515544520df5877bf6804a5e9
diff --git a/vndk/tools/definition-tool/tests/test_elf_linker.py b/vndk/tools/definition-tool/tests/test_elf_linker.py
index 358a4c5..7b5930b 100755
--- a/vndk/tools/definition-tool/tests/test_elf_linker.py
+++ b/vndk/tools/definition-tool/tests/test_elf_linker.py
@@ -389,10 +389,14 @@
# LL-NDK (should be excluded from result)
gb.add_multilib(PT_SYSTEM, 'libc')
+ # SP-Both VNDK-stable
+ gb.add_multilib(PT_SYSTEM, 'libsp_both_vs')
+
# SP-NDK VNDK-stable
gb.add_multilib(PT_SYSTEM, 'libcutils_dep', dt_needed=['libc.so'])
gb.add_multilib(PT_SYSTEM, 'libcutils',
- dt_needed=['libc.so', 'libcutils_dep.so'])
+ dt_needed=['libc.so', 'libcutils_dep.so',
+ 'libsp_both_vs.so'])
# SP-NDK dependencies
gb.add_multilib(PT_SYSTEM, 'libutils',
@@ -410,7 +414,7 @@
# SP-HAL VNDK-stable
gb.add_multilib(PT_SYSTEM, 'libhidlbase')
gb.add_multilib(PT_SYSTEM, 'libhidlmemory',
- dt_needed=['libhidlbase.so'])
+ dt_needed=['libhidlbase.so', 'libsp_both_vs.so'])
# SP-HAL
gb.add_multilib(PT_VENDOR, 'libEGL_chipset', extra_dir='egl',
@@ -433,6 +437,7 @@
self.assertEqual(2 * 2, len(sp_lib.sp_hal_vndk_stable))
self.assertEqual(2 * 1, len(sp_lib.sp_ndk))
self.assertEqual(2 * 3, len(sp_lib.sp_ndk_vndk_stable))
+ self.assertEqual(2 * 1, len(sp_lib.sp_both_vndk_stable))
sp_hal = self._get_paths_from_nodes(sp_lib.sp_hal)
sp_hal_dep = self._get_paths_from_nodes(sp_lib.sp_hal_dep)
@@ -443,7 +448,14 @@
sp_ndk_vndk_stable = self._get_paths_from_nodes(
sp_lib.sp_ndk_vndk_stable)
+ sp_both_vndk_stable = self._get_paths_from_nodes(
+ sp_lib.sp_both_vndk_stable)
+
for lib_dir in ('lib', 'lib64'):
+ # SP-Both
+ self.assertIn('/system/{}/libsp_both_vs.so'.format(lib_dir),
+ sp_both_vndk_stable)
+
# SP-NDK dependencies
self.assertIn('/system/{}/libcutils.so'.format(lib_dir),
sp_ndk_vndk_stable)
diff --git a/vndk/tools/definition-tool/tests/test_vndk.py b/vndk/tools/definition-tool/tests/test_vndk.py
index 5908e5e..f03a45e 100755
--- a/vndk/tools/definition-tool/tests/test_vndk.py
+++ b/vndk/tools/definition-tool/tests/test_vndk.py
@@ -43,7 +43,7 @@
graph, generic_refs = self._create_graph_gr(input_dir, generic_refs_dir)
vndk = graph._compute_vndk(
- sp_lib=SPLibResult(set(), set(), set(), set(), set()),
+ sp_lib=SPLibResult(set(), set(), set(), set(), set(), set()),
vndk_customized_for_system=set(),
vndk_customized_for_vendor=set(),
generic_refs=generic_refs,
@@ -98,7 +98,7 @@
# Compute vndk sets and move libraries to the correct directories.
vndk = graph._compute_vndk(
- sp_lib=SPLibResult(set(), set(), set(), set(), set()),
+ sp_lib=SPLibResult(set(), set(), set(), set(), set(), set()),
vndk_customized_for_system=set(),
vndk_customized_for_vendor=set(),
generic_refs=generic_refs,
diff --git a/vndk/tools/definition-tool/vndk_definition_tool.py b/vndk/tools/definition-tool/vndk_definition_tool.py
index b77d16a..75b8f79 100755
--- a/vndk/tools/definition-tool/vndk_definition_tool.py
+++ b/vndk/tools/definition-tool/vndk_definition_tool.py
@@ -622,6 +622,7 @@
VNDKResult = collections.namedtuple(
'VNDKResult',
'sp_hal sp_hal_dep sp_hal_vndk_stable sp_ndk sp_ndk_vndk_stable '
+ 'sp_both_vndk_stable '
'extra_vendor_lib vndk_core vndk_indirect vndk_fwk_ext vndk_vnd_ext')
def print_vndk_lib(vndk_lib, file=sys.stdout):
@@ -645,7 +646,8 @@
SPLibResult = collections.namedtuple(
'SPLibResult',
- 'sp_hal sp_hal_dep sp_hal_vndk_stable sp_ndk sp_ndk_vndk_stable')
+ 'sp_hal sp_hal_dep sp_hal_vndk_stable sp_ndk sp_ndk_vndk_stable '
+ 'sp_both_vndk_stable')
def print_sp_lib(sp_lib, file=sys.stdout):
# SP-NDK
@@ -662,6 +664,10 @@
for lib in sorted_lib_path_list(sp_lib.sp_hal_vndk_stable):
print('sp-hal-vndk-stable:', lib, file=file)
+ # SP-both
+ for lib in sorted_lib_path_list(sp_lib.sp_both_vndk_stable):
+ print('sp-both-vndk-stable:', lib, file=file)
+
class ELFResolver(object):
def __init__(self, lib_set, default_search_path):
@@ -1037,6 +1043,7 @@
sp_ndk = self.compute_sp_ndk()
sp_ndk_closure = self.compute_closure(sp_ndk, is_ndk)
+ sp_ndk_vndk_stable = sp_ndk_closure - sp_ndk
sp_hal = self.compute_predefined_sp_hal()
sp_hal_closure = self.compute_closure(sp_hal, is_ndk)
@@ -1053,11 +1060,12 @@
else:
sp_hal_dep.add(lib)
- sp_ndk_vndk_stable = sp_ndk_closure - sp_ndk
- sp_hal_vndk_stable = sp_hal_vndk_stable - sp_ndk - sp_ndk_vndk_stable
+ sp_both_vndk_stable = sp_ndk_vndk_stable & sp_hal_vndk_stable
+ sp_ndk_vndk_stable -= sp_both_vndk_stable
+ sp_hal_vndk_stable -= sp_both_vndk_stable
return SPLibResult(sp_hal, sp_hal_dep, sp_hal_vndk_stable, sp_ndk,
- sp_ndk_vndk_stable)
+ sp_ndk_vndk_stable, sp_both_vndk_stable)
def _po_component_sorted(self, lib_set, get_successors,
get_strong_successors):
@@ -1196,7 +1204,8 @@
def _compute_vndk(self, sp_lib, vndk_customized_for_system,
vndk_customized_for_vendor, generic_refs, banned_libs):
# Compute sp-hal and vndk-stable.
- vndk_stable = sp_lib.sp_hal_vndk_stable | sp_lib.sp_ndk_vndk_stable
+ vndk_stable = sp_lib.sp_hal_vndk_stable | sp_lib.sp_ndk_vndk_stable | \
+ sp_lib.sp_both_vndk_stable
sp_hal_closure = sp_lib.sp_hal | sp_lib.sp_hal_dep
# Normalize partition tags. We expect many violations from the
@@ -1501,6 +1510,7 @@
return VNDKResult(
sp_lib.sp_hal, sp_lib.sp_hal_dep, sp_lib.sp_hal_vndk_stable,
sp_lib.sp_ndk, sp_lib.sp_ndk_vndk_stable,
+ sp_lib.sp_both_vndk_stable,
extra_vendor_lib, vndk_core, vndk_indirect,
vndk_fwk_ext, vndk_vnd_ext)