vndk-def: Fix inward customization.
Inward-customized VNDK libraries should be renamed instead of cloned. This commit fixes the algorithm for inward customization and write a unittest to check the correctness. Test: ./tests/test_vndk.py Change-Id: I0d66a93f679be24d7872d6a104497df24f100232
This commit is contained in:
@@ -48,7 +48,7 @@ class ELFLinkerVNDKTest(unittest.TestCase):
|
||||
def is_banned(self, name):
|
||||
return False
|
||||
|
||||
generic_refs_dir = os.path.join(TESTDATA_DIR, 'vndk_ext_ref')
|
||||
generic_refs_dir = os.path.join(TESTDATA_DIR, 'vndk_gr')
|
||||
|
||||
generic_refs = GenericRefs.create_from_dir(generic_refs_dir)
|
||||
|
||||
@@ -80,7 +80,7 @@ class ELFLinkerVNDKTest(unittest.TestCase):
|
||||
def is_banned(self, name):
|
||||
return False
|
||||
|
||||
generic_refs_dir = os.path.join(TESTDATA_DIR, 'vndk_ext_ref')
|
||||
generic_refs_dir = os.path.join(TESTDATA_DIR, 'vndk_gr')
|
||||
|
||||
generic_refs = GenericRefs.create_from_dir(generic_refs_dir)
|
||||
|
||||
@@ -107,6 +107,59 @@ class ELFLinkerVNDKTest(unittest.TestCase):
|
||||
'/vendor/lib64/vndk-ext/libRS.so'],
|
||||
self._get_paths_from_nodes(vndk.vndk_vnd_ext))
|
||||
|
||||
def test_compute_vndk_inward_customization(self):
|
||||
class MockBannedLibs(object):
|
||||
def is_banned(self, name):
|
||||
return False
|
||||
|
||||
generic_refs_dir = os.path.join(TESTDATA_DIR, 'vndk_gr')
|
||||
|
||||
generic_refs = GenericRefs.create_from_dir(generic_refs_dir)
|
||||
|
||||
input_dir = os.path.join(TESTDATA_DIR, 'vndk_inward_customization')
|
||||
|
||||
graph = ELFLinker.create_from_dump(
|
||||
system_dirs=[os.path.join(input_dir, 'system')],
|
||||
vendor_dirs=[os.path.join(input_dir, 'vendor')],
|
||||
generic_refs=generic_refs)
|
||||
|
||||
# Make sure libjpeg.so was loaded from the input dir.
|
||||
libjpeg_32 = graph.get_lib('/system/lib/libjpeg.so')
|
||||
self.assertIsNotNone(libjpeg_32)
|
||||
libjpeg_64 = graph.get_lib('/system/lib64/libjpeg.so')
|
||||
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_customized_for_system=set(),
|
||||
vndk_customized_for_vendor=set(),
|
||||
generic_refs=generic_refs,
|
||||
banned_libs=MockBannedLibs())
|
||||
|
||||
# Check vndk-core libraries.
|
||||
self.assertEqual(['/system/lib/vndk/libRS.so',
|
||||
'/system/lib/vndk/libcutils.so',
|
||||
'/system/lib64/vndk/libRS.so',
|
||||
'/system/lib64/vndk/libcutils.so'],
|
||||
self._get_paths_from_nodes(vndk.vndk_core))
|
||||
|
||||
# Check vndk-indirect libraries.
|
||||
self.assertEqual(['/system/lib/vndk/libjpeg.so',
|
||||
'/system/lib64/vndk/libjpeg.so'],
|
||||
self._get_paths_from_nodes(vndk.vndk_indirect))
|
||||
|
||||
# Check libjpeg.so (inward-customization) has been renamed.
|
||||
self.assertIsNone(graph.get_lib('/system/lib/libjpeg.so'))
|
||||
self.assertIsNone(graph.get_lib('/system/lib64/libjpeg.so'))
|
||||
self.assertIs(libjpeg_32,
|
||||
graph.get_lib('/system/lib/vndk/libjpeg.so'))
|
||||
self.assertIs(libjpeg_64,
|
||||
graph.get_lib('/system/lib64/vndk/libjpeg.so'))
|
||||
|
||||
# Check the absence of vndk-ext libraries.
|
||||
self.assertEqual([], self._get_paths_from_nodes(vndk.vndk_fwk_ext))
|
||||
self.assertEqual([], self._get_paths_from_nodes(vndk.vndk_vnd_ext))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
||||
8
vndk/tools/definition-tool/tests/testdata/test_vndk/vndk_gr/system/lib/libjpeg.so.sym
vendored
Normal file
8
vndk/tools/definition-tool/tests/testdata/test_vndk/vndk_gr/system/lib/libjpeg.so.sym
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
EI_CLASS 32
|
||||
EI_DATA Little-Endian
|
||||
E_MACHINE EM_ARM
|
||||
DT_NEEDED libdl.so
|
||||
DT_NEEDED libc.so
|
||||
DT_NEEDED libm.so
|
||||
EXP_SYMBOL jpeg_CreateCompress
|
||||
EXP_SYMBOL jpeg_CreateDecompress
|
||||
8
vndk/tools/definition-tool/tests/testdata/test_vndk/vndk_gr/system/lib64/libjpeg.so.sym
vendored
Normal file
8
vndk/tools/definition-tool/tests/testdata/test_vndk/vndk_gr/system/lib64/libjpeg.so.sym
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
EI_CLASS 64
|
||||
EI_DATA Little-Endian
|
||||
E_MACHINE EM_AARCH64
|
||||
DT_NEEDED libdl.so
|
||||
DT_NEEDED libc.so
|
||||
DT_NEEDED libm.so
|
||||
EXP_SYMBOL jpeg_CreateCompress
|
||||
EXP_SYMBOL jpeg_CreateDecompress
|
||||
@@ -0,0 +1,11 @@
|
||||
EI_CLASS 32
|
||||
EI_DATA Little-Endian
|
||||
E_MACHINE EM_ARM
|
||||
DT_NEEDED libdl.so
|
||||
DT_NEEDED libjpeg.so
|
||||
EXP_SYMBOL rsContextCreate
|
||||
IMP_SYMBOL dlclose
|
||||
IMP_SYMBOL dlopen
|
||||
IMP_SYMBOL dlsym
|
||||
IMP_SYMBOL jpeg_CreateCompress
|
||||
IMP_SYMBOL jpeg_CreateDecompress
|
||||
@@ -0,0 +1,5 @@
|
||||
EI_CLASS 32
|
||||
EI_DATA Little-Endian
|
||||
E_MACHINE EM_ARM
|
||||
DT_NEEDED libRS.so
|
||||
IMP_SYMBOL rsContextCreate
|
||||
@@ -0,0 +1,12 @@
|
||||
EI_CLASS 32
|
||||
EI_DATA Little-Endian
|
||||
E_MACHINE EM_ARM
|
||||
DT_NEEDED libdl.so
|
||||
DT_NEEDED libm.so
|
||||
EXP_SYMBOL fclose
|
||||
EXP_SYMBOL fopen
|
||||
EXP_SYMBOL fread
|
||||
IMP_SYMBOL dlclose
|
||||
IMP_SYMBOL dlopen
|
||||
IMP_SYMBOL cos
|
||||
IMP_SYMBOL sin
|
||||
@@ -0,0 +1,9 @@
|
||||
EI_CLASS 32
|
||||
EI_DATA Little-Endian
|
||||
E_MACHINE EM_ARM
|
||||
DT_NEEDED libc.so
|
||||
DT_NEEDED libdl.so
|
||||
IMP_SYMBOL dlclose
|
||||
IMP_SYMBOL dlopen
|
||||
IMP_SYMBOL fclose
|
||||
IMP_SYMBOL fopen
|
||||
@@ -0,0 +1,6 @@
|
||||
EI_CLASS 32
|
||||
EI_DATA Little-Endian
|
||||
E_MACHINE EM_ARM
|
||||
EXP_SYMBOL dlclose
|
||||
EXP_SYMBOL dlopen
|
||||
EXP_SYMBOL dlsym
|
||||
@@ -0,0 +1,8 @@
|
||||
EI_CLASS 32
|
||||
EI_DATA Little-Endian
|
||||
E_MACHINE EM_ARM
|
||||
DT_NEEDED libdl.so
|
||||
DT_NEEDED libc.so
|
||||
DT_NEEDED libm.so
|
||||
EXP_SYMBOL jpeg_CreateCompress
|
||||
EXP_SYMBOL jpeg_CreateDecompress
|
||||
@@ -0,0 +1,5 @@
|
||||
EI_CLASS 32
|
||||
EI_DATA Little-Endian
|
||||
E_MACHINE EM_ARM
|
||||
EXP_SYMBOL cos
|
||||
EXP_SYMBOL sin
|
||||
@@ -0,0 +1,11 @@
|
||||
EI_CLASS 64
|
||||
EI_DATA Little-Endian
|
||||
E_MACHINE EM_AARCH64
|
||||
DT_NEEDED libdl.so
|
||||
DT_NEEDED libjpeg.so
|
||||
EXP_SYMBOL rsContextCreate
|
||||
IMP_SYMBOL dlclose
|
||||
IMP_SYMBOL dlopen
|
||||
IMP_SYMBOL dlsym
|
||||
IMP_SYMBOL jpeg_CreateCompress
|
||||
IMP_SYMBOL jpeg_CreateDecompress
|
||||
@@ -0,0 +1,5 @@
|
||||
EI_CLASS 64
|
||||
EI_DATA Little-Endian
|
||||
E_MACHINE EM_AARCH64
|
||||
DT_NEEDED libRS.so
|
||||
IMP_SYMBOL rsContextCreate
|
||||
@@ -0,0 +1,12 @@
|
||||
EI_CLASS 64
|
||||
EI_DATA Little-Endian
|
||||
E_MACHINE EM_AARCH64
|
||||
DT_NEEDED libdl.so
|
||||
DT_NEEDED libm.so
|
||||
EXP_SYMBOL fclose
|
||||
EXP_SYMBOL fopen
|
||||
EXP_SYMBOL fread
|
||||
IMP_SYMBOL dlclose
|
||||
IMP_SYMBOL dlopen
|
||||
IMP_SYMBOL cos
|
||||
IMP_SYMBOL sin
|
||||
@@ -0,0 +1,9 @@
|
||||
EI_CLASS 64
|
||||
EI_DATA Little-Endian
|
||||
E_MACHINE EM_AARCH64
|
||||
DT_NEEDED libc.so
|
||||
DT_NEEDED libdl.so
|
||||
IMP_SYMBOL dlclose
|
||||
IMP_SYMBOL dlopen
|
||||
IMP_SYMBOL fclose
|
||||
IMP_SYMBOL fopen
|
||||
@@ -0,0 +1,6 @@
|
||||
EI_CLASS 64
|
||||
EI_DATA Little-Endian
|
||||
E_MACHINE EM_AARCH64
|
||||
EXP_SYMBOL dlclose
|
||||
EXP_SYMBOL dlopen
|
||||
EXP_SYMBOL dlsym
|
||||
@@ -0,0 +1,8 @@
|
||||
EI_CLASS 64
|
||||
EI_DATA Little-Endian
|
||||
E_MACHINE EM_AARCH64
|
||||
DT_NEEDED libdl.so
|
||||
DT_NEEDED libc.so
|
||||
DT_NEEDED libm.so
|
||||
EXP_SYMBOL jpeg_CreateCompress
|
||||
EXP_SYMBOL jpeg_CreateDecompress
|
||||
@@ -0,0 +1,5 @@
|
||||
EI_CLASS 64
|
||||
EI_DATA Little-Endian
|
||||
E_MACHINE EM_AARCH64
|
||||
EXP_SYMBOL cos
|
||||
EXP_SYMBOL sin
|
||||
@@ -0,0 +1,9 @@
|
||||
EI_CLASS 32
|
||||
EI_DATA Little-Endian
|
||||
E_MACHINE EM_ARM
|
||||
DT_NEEDED libc.so
|
||||
DT_NEEDED libcutils.so
|
||||
DT_NEEDED libdl.so
|
||||
EXP_SYMBOL eglGetDisplay
|
||||
IMP_SYMBOL fclose
|
||||
IMP_SYMBOL fopen
|
||||
@@ -0,0 +1,5 @@
|
||||
EI_CLASS 32
|
||||
EI_DATA Little-Endian
|
||||
E_MACHINE EM_ARM
|
||||
DT_NEEDED libRS.so
|
||||
IMP_SYMBOL rsContextCreate
|
||||
@@ -0,0 +1,9 @@
|
||||
EI_CLASS 64
|
||||
EI_DATA Little-Endian
|
||||
E_MACHINE EM_AARCH64
|
||||
DT_NEEDED libc.so
|
||||
DT_NEEDED libcutils.so
|
||||
DT_NEEDED libdl.so
|
||||
EXP_SYMBOL eglGetDisplay
|
||||
IMP_SYMBOL fclose
|
||||
IMP_SYMBOL fopen
|
||||
@@ -0,0 +1,5 @@
|
||||
EI_CLASS 64
|
||||
EI_DATA Little-Endian
|
||||
E_MACHINE EM_AARCH64
|
||||
DT_NEEDED libRS.so
|
||||
IMP_SYMBOL rsContextCreate
|
||||
@@ -1210,7 +1210,9 @@ class ELFLinker(object):
|
||||
for lib in vndk_customized_candidates:
|
||||
if not lib.imported_ext_symbols:
|
||||
# Inward-customized VNDK-core libraries.
|
||||
add_to_vndk_core(lib)
|
||||
self.rename_lib(lib, PT_SYSTEM,
|
||||
get_vndk_core_lib_name(lib))
|
||||
vndk_core.add(lib)
|
||||
else:
|
||||
# Outward-customized VNDK libraries.
|
||||
|
||||
@@ -1259,15 +1261,19 @@ class ELFLinker(object):
|
||||
vndk_lib_path = get_vndk_core_lib_name(lib)
|
||||
if vndk_lib_path in vndk_core_paths:
|
||||
continue
|
||||
|
||||
vndk_core_paths.add(vndk_lib_path)
|
||||
|
||||
if lib.imported_ext_symbols or \
|
||||
(generic_refs and not generic_refs.is_equivalent_lib(lib)):
|
||||
vndk_fwk_ext.add(lib)
|
||||
if generic_refs:
|
||||
add_to_vndk_core(lib)
|
||||
else:
|
||||
if not generic_refs:
|
||||
vndk_core.add(lib)
|
||||
else:
|
||||
if lib.imported_ext_symbols or \
|
||||
not generic_refs.is_equivalent_lib(lib):
|
||||
vndk_fwk_ext.add(lib)
|
||||
add_to_vndk_core(lib)
|
||||
else:
|
||||
self.rename_lib(lib, PT_SYSTEM, vndk_lib_path)
|
||||
vndk_core.add(lib)
|
||||
|
||||
# Truncate all vendor libs and resolve it again.
|
||||
VENDOR_SEARCH_PATH32 = (
|
||||
|
||||
Reference in New Issue
Block a user