vndk-def: Compute sp-lib in compute_vndk()
This commit extracts some sp-lib related code from VNDKCommand.main()
into compute_vndk() to simplify the API.
For the unit test, we will run ELFLinker._compute_vndk() so that we can
mock SPLibResult.
Test: ./tests/run.py
Change-Id: Ic43df22a4d178b96a4228097af625b153f8cc5a3
diff --git a/vndk/tools/definition-tool/README.md b/vndk/tools/definition-tool/README.md
index 1314446..dbda891 100644
--- a/vndk/tools/definition-tool/README.md
+++ b/vndk/tools/definition-tool/README.md
@@ -88,7 +88,7 @@
- The libraries will be installed to `/vendor/lib[64]/vndk-$VND-ext`
-10. **extra-vendor**
+10. **extra-vendor-lib**
- This contains the extra libraries that have to be copied from
`/system/lib[64]` to `/vendor/lib[64]`.
diff --git a/vndk/tools/definition-tool/tests/test_vndk.py b/vndk/tools/definition-tool/tests/test_vndk.py
index 36e9d3d..5908e5e 100755
--- a/vndk/tools/definition-tool/tests/test_vndk.py
+++ b/vndk/tools/definition-tool/tests/test_vndk.py
@@ -10,7 +10,7 @@
from compat import StringIO
from vndk_definition_tool import (ELF, ELFLinker, PT_SYSTEM, PT_VENDOR,
- GenericRefs)
+ GenericRefs, SPLibResult)
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
TESTDATA_DIR = os.path.join(SCRIPT_DIR ,'testdata', 'test_vndk')
@@ -42,9 +42,8 @@
def _create_graph_vndk(self, input_dir, generic_refs_dir):
graph, generic_refs = self._create_graph_gr(input_dir, generic_refs_dir)
- vndk = graph.compute_vndk(
- sp_hals=set(),
- vndk_stable=set(),
+ vndk = graph._compute_vndk(
+ sp_lib=SPLibResult(set(), set(), set(), set(), set()),
vndk_customized_for_system=set(),
vndk_customized_for_vendor=set(),
generic_refs=generic_refs,
@@ -98,9 +97,8 @@
self.assertIsNotNone(libjpeg_64)
# Compute vndk sets and move libraries to the correct directories.
- vndk = graph.compute_vndk(
- sp_hals=set(),
- vndk_stable=set(),
+ vndk = graph._compute_vndk(
+ sp_lib=SPLibResult(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 681d7f8..b77d16a 100755
--- a/vndk/tools/definition-tool/vndk_definition_tool.py
+++ b/vndk/tools/definition-tool/vndk_definition_tool.py
@@ -621,7 +621,26 @@
VNDKResult = collections.namedtuple(
'VNDKResult',
- 'extra_vendor_libs vndk_core vndk_indirect vndk_fwk_ext vndk_vnd_ext')
+ 'sp_hal sp_hal_dep sp_hal_vndk_stable sp_ndk sp_ndk_vndk_stable '
+ 'extra_vendor_lib vndk_core vndk_indirect vndk_fwk_ext vndk_vnd_ext')
+
+def print_vndk_lib(vndk_lib, file=sys.stdout):
+ # SP-NDK and SP-HAL
+ print_sp_lib(vndk_lib, file=file)
+
+ # VNDK (framework)
+ for lib in sorted_lib_path_list(vndk_lib.vndk_core):
+ print('vndk-core:', lib, file=file)
+ for lib in sorted_lib_path_list(vndk_lib.vndk_indirect):
+ print('vndk-indirect:', lib, file=file)
+ for lib in sorted_lib_path_list(vndk_lib.vndk_fwk_ext):
+ print('vndk-fwk-ext:', lib, file=file)
+
+ # VNDK (vendor)
+ for lib in sorted_lib_path_list(vndk_lib.vndk_vnd_ext):
+ print('vndk-vnd-ext:', lib, file=file)
+ for lib in sorted_lib_path_list(vndk_lib.extra_vendor_lib):
+ print('extra-vendor-lib:', lib, file=file)
SPLibResult = collections.namedtuple(
@@ -1168,8 +1187,23 @@
return (vndk_core, vndk_fwk_ext, vndk_vnd_ext)
- def compute_vndk(self, sp_hals, vndk_stable, vndk_customized_for_system,
+ def compute_vndk(self, vndk_customized_for_system,
vndk_customized_for_vendor, generic_refs, banned_libs):
+ return self._compute_vndk(
+ self.compute_sp_lib(generic_refs), vndk_customized_for_system,
+ vndk_customized_for_vendor, generic_refs, banned_libs)
+
+ 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
+ sp_hal_closure = sp_lib.sp_hal | sp_lib.sp_hal_dep
+
+ # Normalize partition tags. We expect many violations from the
+ # pre-Treble world. Guess a resolution for the incorrect partition
+ # tag.
+ self.normalize_partition_tags(sp_lib.sp_hal, generic_refs)
+
# ELF resolvers.
VNDK_CORE_SEARCH_PATH32 = (
'/system/lib/vndk',
@@ -1210,7 +1244,7 @@
# Collect VNDK candidates.
def is_not_vndk(lib):
return (lib.is_ndk or banned_libs.is_banned(lib.path) or
- (lib in sp_hals) or (lib in vndk_stable))
+ (lib in sp_hal_closure) or (lib in vndk_stable))
def collect_libs_with_partition_user(lib_set, partition):
result = set()
@@ -1227,7 +1261,7 @@
vndk_visited = set(vndk_candidates)
# Sets for missing libraries.
- extra_vendor_libs = set()
+ extra_vendor_lib = set()
def get_vndk_core_lib_name(lib):
lib_name = os.path.basename(lib.path)
@@ -1364,7 +1398,7 @@
for lib in prev_vndk_candidates:
category = generic_refs.classify_lib(lib)
if category == GenericRefs.NEW_LIB:
- extra_vendor_libs.add(lib)
+ extra_vendor_lib.add(lib)
add_deps_to_vndk_candidate(lib)
elif category == GenericRefs.EXPORT_EQUAL:
vndk_customized_candidates.add(lib)
@@ -1464,8 +1498,11 @@
else:
vndk_indirect.add(lib)
- return VNDKResult(extra_vendor_libs, vndk_core, vndk_indirect,
- vndk_fwk_ext, vndk_vnd_ext)
+ 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,
+ extra_vendor_lib, vndk_core, vndk_indirect,
+ vndk_fwk_ext, vndk_vnd_ext)
def compute_vndk_cap(self, banned_libs):
# ELF files on vendor partitions are banned unconditionally. ELF files
@@ -1820,17 +1857,6 @@
if args.warn_banned_vendor_lib_deps:
self._warn_banned_vendor_lib_deps(graph, banned_libs)
- # Compute sp-hal and vndk-stable.
- sp_lib = graph.compute_sp_lib(generic_refs)
-
- vndk_stable = sp_lib.sp_hal_vndk_stable | sp_lib.sp_ndk_vndk_stable
- sp_hal_closure = sp_lib.sp_hal | sp_lib.sp_hal_dep
-
- # Normalize partition tags. We expect many violations from the
- # pre-Treble world. Guess a resolution for the incorrect partition
- # tag.
- graph.normalize_partition_tags(sp_lib.sp_hal, generic_refs)
-
# User may specify the partition for outward-customized vndk libs. The
# following code converts the path into ELFLinkData.
vndk_customized_for_system = set()
@@ -1854,32 +1880,17 @@
args.outward_customization_for_vendor, lambda x: None))
# Compute vndk heuristics.
- vndk = graph.compute_vndk(
- sp_hal_closure, vndk_stable, vndk_customized_for_system,
- vndk_customized_for_vendor, generic_refs, banned_libs)
+ vndk_lib = graph.compute_vndk(vndk_customized_for_system,
+ vndk_customized_for_vendor, generic_refs,
+ banned_libs)
if args.warn_high_level_ndk_deps:
self._warn_high_level_ndk_deps(
- (vndk.vndk_core, vndk.vndk_indirect, vndk.vndk_fwk_ext,
- vndk.vndk_vnd_ext))
+ (vndk_lib.vndk_core, vndk_lib.vndk_indirect,
+ vndk_lib.vndk_fwk_ext, vndk_lib.vndk_vnd_ext))
- # SP-NDK and SP-HAL
- print_sp_lib(sp_lib)
-
- # VNDK (framework)
- for lib in sorted_lib_path_list(vndk.vndk_core):
- print('vndk-core:', lib)
- for lib in sorted_lib_path_list(vndk.vndk_indirect):
- print('vndk-indirect:', lib)
- for lib in sorted_lib_path_list(vndk.vndk_fwk_ext):
- print('vndk-fwk-ext:', lib)
-
- # VNDK (vendor)
- for lib in sorted_lib_path_list(vndk.vndk_vnd_ext):
- print('vndk-vnd-ext:', lib)
- for lib in sorted_lib_path_list(vndk.extra_vendor_libs):
- print('extra-vendor-lib:', lib)
-
+ # Print results.
+ print_vndk_lib(vndk_lib)
return 0