From 1f04810bf3bf8e37266b1eae0a27a0e54921556a Mon Sep 17 00:00:00 2001 From: Justin Yun Date: Fri, 1 Dec 2017 15:30:08 +0900 Subject: Insert vndk version to hal library path strings If ro.vndk.version has , "vndk-sp-" directory must be used instead of "vndk-sp" directory. Bug: 69984421 Test: 1. build with all vndk snapshot patches included. 2. mv /system/lib[64]/vndk and /system/lib[64]/vndk-sp directories to /system/lib[64]/vndk-28 and /system/lib[64]/vndk-sp-28. 3. set "ro.vndk.version" to 28 in /vendor/default.prop. 4. make vbmeta.img skip verity. 5. "make snod" and "make vnod" to build system/vendor images. 6. flash the image to device and check if YouTube plays with sound. Change-Id: I02473090c8b9a5281a9290c9c0b9ee64702e4304 --- base/HidlInternal.cpp | 21 ++++++++++++++++++++- base/include/hidl/HidlInternal.h | 12 ++++++++---- transport/ServiceManagement.cpp | 14 +++++++++++--- 3 files changed, 39 insertions(+), 8 deletions(-) diff --git a/base/HidlInternal.cpp b/base/HidlInternal.cpp index 6cdc24e..10e250b 100644 --- a/base/HidlInternal.cpp +++ b/base/HidlInternal.cpp @@ -19,6 +19,8 @@ #include #include +#include +#include #include #ifdef LIBHIDL_TARGET_DEBUGGABLE @@ -43,6 +45,21 @@ void logAlwaysFatal(const char* message) { LOG(FATAL) << message; } +std::string getVndkVersionStr() { + static std::string vndkVersion("0"); + // "0" means the vndkVersion must be initialized with the property value. + // Otherwise, return the value. + if (vndkVersion == "0") { + vndkVersion = android::base::GetProperty("ro.vndk.version", ""); + if (vndkVersion != "" && vndkVersion != "current") { + vndkVersion = "-" + vndkVersion; + } else { + vndkVersion = ""; + } + } + return vndkVersion; +} + // ---------------------------------------------------------------------- // HidlInstrumentor implementation. HidlInstrumentor::HidlInstrumentor(const std::string& package, const std::string& interface) @@ -127,8 +144,10 @@ void HidlInstrumentor::registerInstrumentationCallbacks( "") > 0) { instrumentationLibPaths.push_back(instrumentationLibPath); } else { + static std::string halLibPathVndkSp = android::base::StringPrintf( + HAL_LIBRARY_PATH_VNDK_SP_FOR_VERSION, getVndkVersionStr().c_str()); instrumentationLibPaths.push_back(HAL_LIBRARY_PATH_SYSTEM); - instrumentationLibPaths.push_back(HAL_LIBRARY_PATH_VNDK_SP); + instrumentationLibPaths.push_back(halLibPathVndkSp); instrumentationLibPaths.push_back(HAL_LIBRARY_PATH_VENDOR); instrumentationLibPaths.push_back(HAL_LIBRARY_PATH_ODM); } diff --git a/base/include/hidl/HidlInternal.h b/base/include/hidl/HidlInternal.h index 7a8019d..5a08bc3 100644 --- a/base/include/hidl/HidlInternal.h +++ b/base/include/hidl/HidlInternal.h @@ -44,6 +44,10 @@ struct bs_tag {}; //to avoid creating dependencies on liblog. void logAlwaysFatal(const char *message); +// Returns vndk version from "ro.vndk.version" with '-' as a prefix. +// If "ro.vndk.version" is not set or set to "current", it returns empty string. +std::string getVndkVersionStr(); + // HIDL client/server code should *NOT* use this class. // // hidl_pointer wraps a pointer without taking ownership, @@ -101,22 +105,22 @@ private: }; #define HAL_LIBRARY_PATH_SYSTEM_64BIT "/system/lib64/hw/" -#define HAL_LIBRARY_PATH_VNDK_SP_64BIT "/system/lib64/vndk-sp/hw/" +#define HAL_LIBRARY_PATH_VNDK_SP_64BIT_FOR_VERSION "/system/lib64/vndk-sp%s/hw/" #define HAL_LIBRARY_PATH_VENDOR_64BIT "/vendor/lib64/hw/" #define HAL_LIBRARY_PATH_ODM_64BIT "/odm/lib64/hw/" #define HAL_LIBRARY_PATH_SYSTEM_32BIT "/system/lib/hw/" -#define HAL_LIBRARY_PATH_VNDK_SP_32BIT "/system/lib/vndk-sp/hw/" +#define HAL_LIBRARY_PATH_VNDK_SP_32BIT_FOR_VERSION "/system/lib/vndk-sp%s/hw/" #define HAL_LIBRARY_PATH_VENDOR_32BIT "/vendor/lib/hw/" #define HAL_LIBRARY_PATH_ODM_32BIT "/odm/lib/hw/" #if defined(__LP64__) #define HAL_LIBRARY_PATH_SYSTEM HAL_LIBRARY_PATH_SYSTEM_64BIT -#define HAL_LIBRARY_PATH_VNDK_SP HAL_LIBRARY_PATH_VNDK_SP_64BIT +#define HAL_LIBRARY_PATH_VNDK_SP_FOR_VERSION HAL_LIBRARY_PATH_VNDK_SP_64BIT_FOR_VERSION #define HAL_LIBRARY_PATH_VENDOR HAL_LIBRARY_PATH_VENDOR_64BIT #define HAL_LIBRARY_PATH_ODM HAL_LIBRARY_PATH_ODM_64BIT #else #define HAL_LIBRARY_PATH_SYSTEM HAL_LIBRARY_PATH_SYSTEM_32BIT -#define HAL_LIBRARY_PATH_VNDK_SP HAL_LIBRARY_PATH_VNDK_SP_32BIT +#define HAL_LIBRARY_PATH_VNDK_SP_FOR_VERSION HAL_LIBRARY_PATH_VNDK_SP_32BIT_FOR_VERSION #define HAL_LIBRARY_PATH_VENDOR HAL_LIBRARY_PATH_VENDOR_32BIT #define HAL_LIBRARY_PATH_ODM HAL_LIBRARY_PATH_ODM_32BIT #endif diff --git a/transport/ServiceManagement.cpp b/transport/ServiceManagement.cpp index 34e6ea4..357faaf 100644 --- a/transport/ServiceManagement.cpp +++ b/transport/ServiceManagement.cpp @@ -29,11 +29,13 @@ #include #include +#include #include #include #include #include +#include #include #include #include @@ -278,8 +280,10 @@ struct PassthroughServiceManager : IServiceManager1_1 { dlerror(); // clear + static std::string halLibPathVndkSp = android::base::StringPrintf( + HAL_LIBRARY_PATH_VNDK_SP_FOR_VERSION, details::getVndkVersionStr().c_str()); std::vector paths = {HAL_LIBRARY_PATH_ODM, HAL_LIBRARY_PATH_VENDOR, - HAL_LIBRARY_PATH_VNDK_SP, HAL_LIBRARY_PATH_SYSTEM}; + halLibPathVndkSp, HAL_LIBRARY_PATH_SYSTEM}; #ifdef LIBHIDL_TARGET_DEBUGGABLE const char* env = std::getenv("TREBLE_TESTING_OVERRIDE"); @@ -394,13 +398,17 @@ struct PassthroughServiceManager : IServiceManager1_1 { Return debugDump(debugDump_cb _hidl_cb) override { using Arch = ::android::hidl::base::V1_0::DebugInfo::Architecture; using std::literals::string_literals::operator""s; + static std::string halLibPathVndkSp64 = android::base::StringPrintf( + HAL_LIBRARY_PATH_VNDK_SP_64BIT_FOR_VERSION, details::getVndkVersionStr().c_str()); + static std::string halLibPathVndkSp32 = android::base::StringPrintf( + HAL_LIBRARY_PATH_VNDK_SP_32BIT_FOR_VERSION, details::getVndkVersionStr().c_str()); static std::vector>> sAllPaths{ {Arch::IS_64BIT, {HAL_LIBRARY_PATH_ODM_64BIT, HAL_LIBRARY_PATH_VENDOR_64BIT, - HAL_LIBRARY_PATH_VNDK_SP_64BIT, HAL_LIBRARY_PATH_SYSTEM_64BIT}}, + halLibPathVndkSp64.c_str(), HAL_LIBRARY_PATH_SYSTEM_64BIT}}, {Arch::IS_32BIT, {HAL_LIBRARY_PATH_ODM_32BIT, HAL_LIBRARY_PATH_VENDOR_32BIT, - HAL_LIBRARY_PATH_VNDK_SP_32BIT, HAL_LIBRARY_PATH_SYSTEM_32BIT}}}; + halLibPathVndkSp32.c_str(), HAL_LIBRARY_PATH_SYSTEM_32BIT}}}; std::map map; for (const auto &pair : sAllPaths) { Arch arch = pair.first; -- cgit v1.2.3