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:
@@ -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,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,
|
||||
|
||||
|
@@ -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')
|
||||
|
||||
@@ -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."""
|
||||
|
||||
Reference in New Issue
Block a user