From 9bc51c1679b6f8e1afa54e0b81af58e812053b0e Mon Sep 17 00:00:00 2001 From: andrew0229 Date: Mon, 1 Apr 2024 11:53:11 +0000 Subject: [PATCH 1/2] not dlclose in ohos Signed-off-by: andrew0229 Change-Id: I83c0201a4d56bf994ab587f195d27435baeb958a --- loader/vk_loader_platform.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/loader/vk_loader_platform.h b/loader/vk_loader_platform.h index ebfa2ebf..7e800851 100644 --- a/loader/vk_loader_platform.h +++ b/loader/vk_loader_platform.h @@ -343,7 +343,11 @@ static inline const char *loader_platform_open_library_error(const char *libPath return dlerror(); #endif } -static inline void loader_platform_close_library(loader_platform_dl_handle library) { dlclose(library); } +static inline void loader_platform_close_library(loader_platform_dl_handle library) { +#if !defined (__OHOS__) + dlclose(library); +#endif +} static inline void *loader_platform_get_proc_address(loader_platform_dl_handle library, const char *name) { assert(library); assert(name); -- Gitee From 0f423eb688bfa59e67bde5254276f62ebb3d9114 Mon Sep 17 00:00:00 2001 From: andrew0229 Date: Mon, 1 Apr 2024 08:12:10 +0000 Subject: [PATCH 2/2] fix layer order and system env Signed-off-by: andrew0229 Change-Id: I297362382ab24de9b4fc0e45e3ea60dff6533feb --- BUILD.gn | 9 +++++---- loader/get_environment.c | 12 ++++++++++++ loader/loader.c | 4 ++-- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/BUILD.gn b/BUILD.gn index 9bc87e7c..43d0c130 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -35,9 +35,7 @@ config("vulkan_internal_config") { ldflags = [ "-Wl,-Bsymbolic" ] defines += [ - "SYSCONFDIR=\"/system/etc\"", - "FALLBACK_CONFIG_DIRS=\"/vendor/etc\"", - "FALLBACK_DATA_DIRS=\"/data\"", + "SYSCONFDIR=\"/system/etc:/system/etc/vulkan/swapchain:/vendor/etc\"", "VK_USE_PLATFORM_OHOS", ] } @@ -95,7 +93,10 @@ ohos_shared_library("vulkan_loader") { configs = [ ":vulkan_internal_config" ] public_configs = [ ":vulkan_loader_config" ] - external_deps = [ "hilog:libhilog" ] + external_deps = [ + "hilog:libhilog", + "init:libbegetutil", + ] public_external_deps = [ "vulkan-headers:vulkan_headers" ] innerapi_tags = [ "platformsdk" ] diff --git a/loader/get_environment.c b/loader/get_environment.c index 41ed61f6..0352f075 100644 --- a/loader/get_environment.c +++ b/loader/get_environment.c @@ -30,6 +30,7 @@ #include "allocation.h" #include "log.h" +#include "param/sys_param.h" // Environment variables #if defined(__linux__) || defined(__APPLE__) || defined(__Fuchsia__) || defined(__QNXNTO__) || defined(__FreeBSD__) || defined(__OpenBSD__) @@ -37,10 +38,21 @@ bool is_high_integrity() { return geteuid() != getuid() || getegid() != getgid(); } char *loader_getenv(const char *name, const struct loader_instance *inst) { +#ifdef __OHOS__ + CachedHandle g_Handle = CachedParameterCreate(name, ""); + int changed = 0; + const char *res = CachedParameterGetChanged(g_Handle, &changed); + loader_log(inst, VULKAN_LOADER_DEBUG_BIT | VULKAN_LOADER_INFO_BIT, 0, "loader_getenv name:%s, res:%s", name, res); + if (res == NULL || res[0] == '\0') { + return NULL; + } + return (char *)res; +#else // No allocation of memory necessary for Linux, but we should at least touch // the inst pointer to get rid of compiler warnings. (void)inst; return getenv(name); +#endif } char *loader_secure_getenv(const char *name, const struct loader_instance *inst) { diff --git a/loader/loader.c b/loader/loader.c index a53ac8c3..f5af6065 100644 --- a/loader/loader.c +++ b/loader/loader.c @@ -2895,7 +2895,7 @@ static VkResult read_data_files_in_search_paths(const struct loader_instance *in char *xdg_config_home = loader_secure_getenv("XDG_CONFIG_HOME", inst); char *xdg_config_dirs = loader_secure_getenv("XDG_CONFIG_DIRS", inst); -#if !defined(__Fuchsia__) && !defined(__QNXNTO__) +#if !defined(__Fuchsia__) && !defined(__QNXNTO__) && !defined(__OHOS__) if (NULL == xdg_config_dirs || '\0' == xdg_config_dirs[0]) { xdg_config_dirs = FALLBACK_CONFIG_DIRS; } @@ -2904,7 +2904,7 @@ static VkResult read_data_files_in_search_paths(const struct loader_instance *in char *xdg_data_home = loader_secure_getenv("XDG_DATA_HOME", inst); char *xdg_data_dirs = loader_secure_getenv("XDG_DATA_DIRS", inst); -#if !defined(__Fuchsia__) && !defined(__QNXNTO__) +#if !defined(__Fuchsia__) && !defined(__QNXNTO__) && !defined(__OHOS__) if (NULL == xdg_data_dirs || '\0' == xdg_data_dirs[0]) { xdg_data_dirs = FALLBACK_DATA_DIRS; } -- Gitee