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 3c3159fea..4e0a8c724 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 @@ 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, diff --git a/vndk/tools/definition-tool/datasets/minimum_tag_file.csv b/vndk/tools/definition-tool/datasets/minimum_tag_file.csv index 563f8700a..2fa6ad840 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 63053a64c..383a20776 100755 --- a/vndk/tools/definition-tool/tools/update_dataset.py +++ b/vndk/tools/definition-tool/tools/update_dataset.py @@ -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') diff --git a/vndk/tools/definition-tool/vndk_definition_tool.py b/vndk/tools/definition-tool/vndk_definition_tool.py index 29510fd6f..8613e85fd 100755 --- a/vndk/tools/definition-tool/vndk_definition_tool.py +++ b/vndk/tools/definition-tool/vndk_definition_tool.py @@ -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."""