vndk-def: Add regex matching to tag file reader

This commit add regular expression support to tag file reader and stop
hard coding SP-HAL in vndk_definition_tool.py.

Test: ./tests/run.py
Test: Run vndk_definition_tool.py for a device and all outputs are same
Change-Id: Iae2631a965045e80c7373970e3f1e61209f3006a
This commit is contained in:
Logan Chien
2017-11-13 18:55:45 +08:00
parent 32f6640b14
commit 32f89a67fe
4 changed files with 115 additions and 70 deletions

View File

@@ -505,3 +505,14 @@ Path,Tag,Comments
/vendor/${LIB}/librilutils.so,VND-ONLY,
/vendor/${LIB}/libtinycompress.so,VND-ONLY,
/vendor/${LIB}/libwebrtc_audio_preprocessing.so,VND-ONLY,
[regex]^.*/android\.hardware\.graphics\.mapper@\d+\.\d+-impl\.so$,SP-HAL,
[regex]^.*/android\.hardware\.renderscript@1\.0-impl\.so$,SP-HAL,
[regex]^.*/gralloc\..*\.so$,SP-HAL,
[regex]^/vendor/.*/libEGL_.*\.so$,SP-HAL,
[regex]^/vendor/.*/libGLES_.*\.so$,SP-HAL,
[regex]^/vendor/.*/libGLESv1_CM_.*\.so$,SP-HAL,
[regex]^/vendor/.*/libGLESv2_.*\.so$,SP-HAL,
[regex]^/vendor/.*/libGLESv3_.*\.so$,SP-HAL,
[regex]^/vendor/.*/libPVRRS\.so$,SP-HAL,
[regex]^/vendor/.*/libRSDriver.*\.so$,SP-HAL,
[regex]^/vendor/.*/vulkan.*\.so$,SP-HAL,
1 Path Tag Comments
505 /vendor/${LIB}/librilutils.so VND-ONLY
506 /vendor/${LIB}/libtinycompress.so VND-ONLY
507 /vendor/${LIB}/libwebrtc_audio_preprocessing.so VND-ONLY
508 [regex]^.*/android\.hardware\.graphics\.mapper@\d+\.\d+-impl\.so$ SP-HAL
509 [regex]^.*/android\.hardware\.renderscript@1\.0-impl\.so$ SP-HAL
510 [regex]^.*/gralloc\..*\.so$ SP-HAL
511 [regex]^/vendor/.*/libEGL_.*\.so$ SP-HAL
512 [regex]^/vendor/.*/libGLES_.*\.so$ SP-HAL
513 [regex]^/vendor/.*/libGLESv1_CM_.*\.so$ SP-HAL
514 [regex]^/vendor/.*/libGLESv2_.*\.so$ SP-HAL
515 [regex]^/vendor/.*/libGLESv3_.*\.so$ SP-HAL
516 [regex]^/vendor/.*/libPVRRS\.so$ SP-HAL
517 [regex]^/vendor/.*/libRSDriver.*\.so$ SP-HAL
518 [regex]^/vendor/.*/vulkan.*\.so$ SP-HAL

View File

@@ -1,45 +1,56 @@
Path,Tag
/system/${LIB}/libEGL.so,SP-NDK
/system/${LIB}/libGLESv1_CM.so,SP-NDK
/system/${LIB}/libGLESv2.so,SP-NDK
/system/${LIB}/libGLESv3.so,SP-NDK
/system/${LIB}/libandroid_net.so,LL-NDK
/system/${LIB}/libc.so,LL-NDK
/system/${LIB}/libdl.so,LL-NDK
/system/${LIB}/libft2.so,FWK-ONLY-RS
/system/${LIB}/liblog.so,LL-NDK
/system/${LIB}/libm.so,LL-NDK
/system/${LIB}/libmediandk.so,FWK-ONLY-RS
/system/${LIB}/libnativewindow.so,SP-NDK
/system/${LIB}/libstdc++.so,LL-NDK
/system/${LIB}/libsync.so,SP-NDK
/system/${LIB}/libvndksupport.so,LL-NDK
/system/${LIB}/libvulkan.so,SP-NDK
/system/${LIB}/libz.so,LL-NDK
/system/${LIB}/vndk-sp/android.hardware.graphics.allocator@2.0.so,VNDK-SP
/system/${LIB}/vndk-sp/android.hardware.graphics.common@1.0.so,VNDK-SP
/system/${LIB}/vndk-sp/android.hardware.graphics.mapper@2.0.so,VNDK-SP
/system/${LIB}/vndk-sp/android.hardware.renderscript@1.0.so,VNDK-SP
/system/${LIB}/vndk-sp/android.hidl.base@1.0.so,VNDK-SP
/system/${LIB}/vndk-sp/android.hidl.memory@1.0.so,VNDK-SP
/system/${LIB}/vndk-sp/libRSCpuRef.so,VNDK-SP
/system/${LIB}/vndk-sp/libRSDriver.so,VNDK-SP
/system/${LIB}/vndk-sp/libRS_internal.so,VNDK-SP
/system/${LIB}/vndk-sp/libbacktrace.so,VNDK-SP-Indirect
/system/${LIB}/vndk-sp/libbase.so,VNDK-SP
/system/${LIB}/vndk-sp/libbcinfo.so,VNDK-SP
/system/${LIB}/vndk-sp/libblas.so,VNDK-SP-Indirect-Private
/system/${LIB}/vndk-sp/libc++.so,VNDK-SP
/system/${LIB}/vndk-sp/libcompiler_rt.so,VNDK-SP-Indirect-Private
/system/${LIB}/vndk-sp/libcutils.so,VNDK-SP
/system/${LIB}/vndk-sp/libft2.so,FWK-ONLY-RS
/system/${LIB}/vndk-sp/libhardware.so,VNDK-SP
/system/${LIB}/vndk-sp/libhidlbase.so,VNDK-SP
/system/${LIB}/vndk-sp/libhidlmemory.so,VNDK-SP
/system/${LIB}/vndk-sp/libhidltransport.so,VNDK-SP
/system/${LIB}/vndk-sp/libhwbinder.so,VNDK-SP
/system/${LIB}/vndk-sp/libion.so,VNDK-SP
/system/${LIB}/vndk-sp/liblzma.so,VNDK-SP-Indirect
/system/${LIB}/vndk-sp/libmediandk.so,FWK-ONLY-RS
/system/${LIB}/vndk-sp/libunwind.so,VNDK-SP-Indirect
/system/${LIB}/vndk-sp/libutils.so,VNDK-SP
Path,Tag,Comments
/system/${LIB}/libEGL.so,SP-NDK,
/system/${LIB}/libGLESv1_CM.so,SP-NDK,
/system/${LIB}/libGLESv2.so,SP-NDK,
/system/${LIB}/libGLESv3.so,SP-NDK,
/system/${LIB}/libandroid_net.so,LL-NDK,
/system/${LIB}/libc.so,LL-NDK,
/system/${LIB}/libdl.so,LL-NDK,
/system/${LIB}/libft2.so,FWK-ONLY-RS,
/system/${LIB}/liblog.so,LL-NDK,
/system/${LIB}/libm.so,LL-NDK,
/system/${LIB}/libmediandk.so,FWK-ONLY-RS,
/system/${LIB}/libnativewindow.so,SP-NDK,
/system/${LIB}/libstdc++.so,LL-NDK,
/system/${LIB}/libsync.so,SP-NDK,
/system/${LIB}/libvndksupport.so,LL-NDK,
/system/${LIB}/libvulkan.so,SP-NDK,
/system/${LIB}/libz.so,LL-NDK,
/system/${LIB}/vndk-sp/android.hardware.graphics.allocator@2.0.so,VNDK-SP,
/system/${LIB}/vndk-sp/android.hardware.graphics.common@1.0.so,VNDK-SP,
/system/${LIB}/vndk-sp/android.hardware.graphics.mapper@2.0.so,VNDK-SP,
/system/${LIB}/vndk-sp/android.hardware.renderscript@1.0.so,VNDK-SP,
/system/${LIB}/vndk-sp/android.hidl.base@1.0.so,VNDK-SP,
/system/${LIB}/vndk-sp/android.hidl.memory@1.0.so,VNDK-SP,
/system/${LIB}/vndk-sp/libRSCpuRef.so,VNDK-SP,
/system/${LIB}/vndk-sp/libRSDriver.so,VNDK-SP,
/system/${LIB}/vndk-sp/libRS_internal.so,VNDK-SP,
/system/${LIB}/vndk-sp/libbacktrace.so,VNDK-SP-Indirect,
/system/${LIB}/vndk-sp/libbase.so,VNDK-SP,
/system/${LIB}/vndk-sp/libbcinfo.so,VNDK-SP,
/system/${LIB}/vndk-sp/libblas.so,VNDK-SP-Indirect-Private,
/system/${LIB}/vndk-sp/libc++.so,VNDK-SP,
/system/${LIB}/vndk-sp/libcompiler_rt.so,VNDK-SP-Indirect-Private,
/system/${LIB}/vndk-sp/libcutils.so,VNDK-SP,
/system/${LIB}/vndk-sp/libft2.so,FWK-ONLY-RS,
/system/${LIB}/vndk-sp/libhardware.so,VNDK-SP,
/system/${LIB}/vndk-sp/libhidlbase.so,VNDK-SP,
/system/${LIB}/vndk-sp/libhidlmemory.so,VNDK-SP,
/system/${LIB}/vndk-sp/libhidltransport.so,VNDK-SP,
/system/${LIB}/vndk-sp/libhwbinder.so,VNDK-SP,
/system/${LIB}/vndk-sp/libion.so,VNDK-SP,
/system/${LIB}/vndk-sp/liblzma.so,VNDK-SP-Indirect,
/system/${LIB}/vndk-sp/libmediandk.so,FWK-ONLY-RS,
/system/${LIB}/vndk-sp/libunwind.so,VNDK-SP-Indirect,
/system/${LIB}/vndk-sp/libutils.so,VNDK-SP,
[regex]^.*/android\.hardware\.graphics\.mapper@\d+\.\d+-impl\.so$,SP-HAL,
[regex]^.*/android\.hardware\.renderscript@1\.0-impl\.so$,SP-HAL,
[regex]^.*/gralloc\..*\.so$,SP-HAL,
[regex]^/vendor/.*/libEGL_.*\.so$,SP-HAL,
[regex]^/vendor/.*/libGLES_.*\.so$,SP-HAL,
[regex]^/vendor/.*/libGLESv1_CM_.*\.so$,SP-HAL,
[regex]^/vendor/.*/libGLESv2_.*\.so$,SP-HAL,
[regex]^/vendor/.*/libGLESv3_.*\.so$,SP-HAL,
[regex]^/vendor/.*/libPVRRS\.so$,SP-HAL,
[regex]^/vendor/.*/libRSDriver.*\.so$,SP-HAL,
[regex]^/vendor/.*/vulkan.*\.so$,SP-HAL,
1 Path Tag Comments
2 /system/${LIB}/libEGL.so SP-NDK
3 /system/${LIB}/libGLESv1_CM.so SP-NDK
4 /system/${LIB}/libGLESv2.so SP-NDK
5 /system/${LIB}/libGLESv3.so SP-NDK
6 /system/${LIB}/libandroid_net.so LL-NDK
7 /system/${LIB}/libc.so LL-NDK
8 /system/${LIB}/libdl.so LL-NDK
9 /system/${LIB}/libft2.so FWK-ONLY-RS
10 /system/${LIB}/liblog.so LL-NDK
11 /system/${LIB}/libm.so LL-NDK
12 /system/${LIB}/libmediandk.so FWK-ONLY-RS
13 /system/${LIB}/libnativewindow.so SP-NDK
14 /system/${LIB}/libstdc++.so LL-NDK
15 /system/${LIB}/libsync.so SP-NDK
16 /system/${LIB}/libvndksupport.so LL-NDK
17 /system/${LIB}/libvulkan.so SP-NDK
18 /system/${LIB}/libz.so LL-NDK
19 /system/${LIB}/vndk-sp/android.hardware.graphics.allocator@2.0.so VNDK-SP
20 /system/${LIB}/vndk-sp/android.hardware.graphics.common@1.0.so VNDK-SP
21 /system/${LIB}/vndk-sp/android.hardware.graphics.mapper@2.0.so VNDK-SP
22 /system/${LIB}/vndk-sp/android.hardware.renderscript@1.0.so VNDK-SP
23 /system/${LIB}/vndk-sp/android.hidl.base@1.0.so VNDK-SP
24 /system/${LIB}/vndk-sp/android.hidl.memory@1.0.so VNDK-SP
25 /system/${LIB}/vndk-sp/libRSCpuRef.so VNDK-SP
26 /system/${LIB}/vndk-sp/libRSDriver.so VNDK-SP
27 /system/${LIB}/vndk-sp/libRS_internal.so VNDK-SP
28 /system/${LIB}/vndk-sp/libbacktrace.so VNDK-SP-Indirect
29 /system/${LIB}/vndk-sp/libbase.so VNDK-SP
30 /system/${LIB}/vndk-sp/libbcinfo.so VNDK-SP
31 /system/${LIB}/vndk-sp/libblas.so VNDK-SP-Indirect-Private
32 /system/${LIB}/vndk-sp/libc++.so VNDK-SP
33 /system/${LIB}/vndk-sp/libcompiler_rt.so VNDK-SP-Indirect-Private
34 /system/${LIB}/vndk-sp/libcutils.so VNDK-SP
35 /system/${LIB}/vndk-sp/libft2.so FWK-ONLY-RS
36 /system/${LIB}/vndk-sp/libhardware.so VNDK-SP
37 /system/${LIB}/vndk-sp/libhidlbase.so VNDK-SP
38 /system/${LIB}/vndk-sp/libhidlmemory.so VNDK-SP
39 /system/${LIB}/vndk-sp/libhidltransport.so VNDK-SP
40 /system/${LIB}/vndk-sp/libhwbinder.so VNDK-SP
41 /system/${LIB}/vndk-sp/libion.so VNDK-SP
42 /system/${LIB}/vndk-sp/liblzma.so VNDK-SP-Indirect
43 /system/${LIB}/vndk-sp/libmediandk.so FWK-ONLY-RS
44 /system/${LIB}/vndk-sp/libunwind.so VNDK-SP-Indirect
45 /system/${LIB}/vndk-sp/libutils.so VNDK-SP
46 [regex]^.*/android\.hardware\.graphics\.mapper@\d+\.\d+-impl\.so$ SP-HAL
47 [regex]^.*/android\.hardware\.renderscript@1\.0-impl\.so$ SP-HAL
48 [regex]^.*/gralloc\..*\.so$ SP-HAL
49 [regex]^/vendor/.*/libEGL_.*\.so$ SP-HAL
50 [regex]^/vendor/.*/libGLES_.*\.so$ SP-HAL
51 [regex]^/vendor/.*/libGLESv1_CM_.*\.so$ SP-HAL
52 [regex]^/vendor/.*/libGLESv2_.*\.so$ SP-HAL
53 [regex]^/vendor/.*/libGLESv3_.*\.so$ SP-HAL
54 [regex]^/vendor/.*/libPVRRS\.so$ SP-HAL
55 [regex]^/vendor/.*/libRSDriver.*\.so$ SP-HAL
56 [regex]^/vendor/.*/vulkan.*\.so$ SP-HAL

View File

@@ -67,8 +67,12 @@ def main():
reader = csv.reader(fp)
header = next(reader)
data = dict()
regex_patterns = []
for path, tag, comments in reader:
data[path] = [path, tag, comments]
if path.startswith('[regex]'):
regex_patterns.append([path, tag, comments])
else:
data[path] = [path, tag, comments]
# Delete non-existing libraries.
installed_paths = load_install_paths(args.module_info)
@@ -100,6 +104,9 @@ def main():
update_tag('/system/${LIB}/' + name + '.so', 'VNDK')
update_tag('/system/${LIB}/vndk/' + name + '.so', 'VNDK')
for regex in regex_patterns:
data[regex[0]] = regex
# Write updated eligible list file.
with open(args.output, 'w') as fp:
writer = csv.writer(fp, lineterminator='\n')

View File

@@ -700,17 +700,27 @@ class TaggedDict(object):
self._path_tag = dict()
for tag in self.TAGS:
setattr(self, tag, set())
self._regex_patterns = []
def add(self, tag, lib):
lib_set = getattr(self, tag)
lib_set.add(lib)
self._path_tag[lib] = tag
def add_regex(self, tag, pattern):
self._regex_patterns.append((re.compile(pattern), tag))
def get_path_tag(self, lib):
try:
return self._path_tag[lib]
except KeyError:
return self.get_path_tag_default(lib)
pass
for pattern, tag in self._regex_patterns:
if pattern.match(lib):
return tag
return self.get_path_tag_default(lib)
def get_path_tag_default(self, lib):
raise NotImplementedError()
@@ -750,6 +760,10 @@ class TaggedDict(object):
def is_fwk_only_rs(tag_bit):
return bool(tag_bit & TaggedDict.FWK_ONLY_RS)
@staticmethod
def is_sp_hal(tag_bit):
return bool(tag_bit & TaggedDict.SP_HAL)
class TaggedPathDict(TaggedDict):
def load_from_csv(self, fp):
@@ -793,6 +807,9 @@ class TaggedPathDict(TaggedDict):
yield pattern
def add(self, tag, path):
if path.startswith('[regex]'):
super(TaggedPathDict, self).add_regex(tag, path[7:])
return
for path in self._enumerate_paths(path):
super(TaggedPathDict, self).add(tag, path)
@@ -800,7 +817,17 @@ class TaggedPathDict(TaggedDict):
return 'vnd_only' if path.startswith('/vendor') else 'fwk_only'
class TaggedLibDict(TaggedDict):
class TaggedLibDict(object):
def __init__(self):
self._path_tag = dict()
for tag in TaggedDict.TAGS:
setattr(self, tag, set())
def add(self, tag, lib):
lib_set = getattr(self, tag)
lib_set.add(lib)
self._path_tag[lib] = tag
@staticmethod
def create_from_graph(graph, tagged_paths, generic_refs=None):
d = TaggedLibDict()
@@ -818,6 +845,12 @@ class TaggedLibDict(TaggedDict):
d.add('vnd_only', lib)
return d
def get_path_tag(self, lib):
try:
return self._path_tag[lib]
except KeyError:
return self.get_path_tag_default(lib)
def get_path_tag_default(self, lib):
return 'vnd_only' if lib.path.startswith('/vendor') else 'fwk_only'
@@ -939,6 +972,10 @@ class ELFLinkData(object):
def is_fwk_only_rs(self):
return TaggedDict.is_fwk_only_rs(self._tag_bit)
@property
def is_sp_hal(self):
return TaggedDict.is_sp_hal(self._tag_bit)
def add_needed_dep(self, dst):
assert dst not in self.deps_needed_hidden
assert self not in dst.users_needed_hidden
@@ -1353,30 +1390,9 @@ class ELFLinker(object):
self._resolve_elf_class_deps(ELF.ELFCLASS32, generic_refs)
self._resolve_elf_class_deps(ELF.ELFCLASS64, generic_refs)
def compute_path_matched_lib(self, path_patterns):
patt = re.compile('|'.join('(?:' + p + ')' for p in path_patterns))
return set(lib for lib in self.all_libs() if patt.match(lib.path))
def compute_predefined_sp_hal(self):
"""Find all same-process HALs."""
path_patterns = (
# OpenGL-related
'^/vendor/.*/libEGL_.*\\.so$',
'^/vendor/.*/libGLES_.*\\.so$',
'^/vendor/.*/libGLESv1_CM_.*\\.so$',
'^/vendor/.*/libGLESv2_.*\\.so$',
'^/vendor/.*/libGLESv3_.*\\.so$',
# Vulkan
'^/vendor/.*/vulkan.*\\.so$',
# libRSDriver
'^.*/android\\.hardware\\.renderscript@1\\.0-impl\\.so$',
'^/vendor/.*/libPVRRS\\.so$',
'^/vendor/.*/libRSDriver.*\\.so$',
# Gralloc mapper
'^.*/gralloc\\..*\\.so$',
'^.*/android\\.hardware\\.graphics\\.mapper@\\d+\\.\\d+-impl\\.so$',
)
return self.compute_path_matched_lib(path_patterns)
return set(lib for lib in self.all_libs() if lib.is_sp_hal)
def compute_sp_ndk(self):
"""Find all SP-NDK libraries."""