Merge "vndk-def: Add regex matching to tag file reader"
diff --git a/vndk/tools/definition-tool/datasets/eligible-list-o-release.csv b/vndk/tools/definition-tool/datasets/eligible-list-o-release.csv
index 3c3159f..4e0a8c72 100644
--- a/vndk/tools/definition-tool/datasets/eligible-list-o-release.csv
+++ b/vndk/tools/definition-tool/datasets/eligible-list-o-release.csv
@@ -505,3 +505,14 @@
/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,
diff --git a/vndk/tools/definition-tool/datasets/minimum_tag_file.csv b/vndk/tools/definition-tool/datasets/minimum_tag_file.csv
index 563f870..2fa6ad8 100644
--- a/vndk/tools/definition-tool/datasets/minimum_tag_file.csv
+++ b/vndk/tools/definition-tool/datasets/minimum_tag_file.csv
@@ -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,
diff --git a/vndk/tools/definition-tool/tools/update_dataset.py b/vndk/tools/definition-tool/tools/update_dataset.py
index 63053a6..383a207 100755
--- a/vndk/tools/definition-tool/tools/update_dataset.py
+++ b/vndk/tools/definition-tool/tools/update_dataset.py
@@ -67,8 +67,12 @@
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 @@
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')
diff --git a/vndk/tools/definition-tool/vndk_definition_tool.py b/vndk/tools/definition-tool/vndk_definition_tool.py
index 29510fd..8613e85 100755
--- a/vndk/tools/definition-tool/vndk_definition_tool.py
+++ b/vndk/tools/definition-tool/vndk_definition_tool.py
@@ -700,17 +700,27 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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."""