summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Yun <justinyun@google.com>2017-12-01 15:30:08 +0900
committerJustin Yun <justinyun@google.com>2017-12-08 10:41:37 +0900
commit1f04810bf3bf8e37266b1eae0a27a0e54921556a (patch)
treee7a6e90168a9fdbf19db222eddd3cabc65890e3a
parent53c59e642744eda0a892424651d0704bec352ca4 (diff)
downloadlibhidl-1f04810bf3bf8e37266b1eae0a27a0e54921556a.tar.gz
Insert vndk version to hal library path strings
If ro.vndk.version has <version>, "vndk-sp-<version>" 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
-rw-r--r--base/HidlInternal.cpp21
-rw-r--r--base/include/hidl/HidlInternal.h12
-rw-r--r--transport/ServiceManagement.cpp14
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 <hidl/HidlInternal.h>
#include <android-base/logging.h>
+#include <android-base/properties.h>
+#include <android-base/stringprintf.h>
#include <cutils/properties.h>
#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 <set>
#include <hidl/HidlBinderSupport.h>
+#include <hidl/HidlInternal.h>
#include <hidl/ServiceManagement.h>
#include <hidl/Status.h>
#include <android-base/logging.h>
#include <android-base/properties.h>
+#include <android-base/stringprintf.h>
#include <hwbinder/IPCThreadState.h>
#include <hwbinder/Parcel.h>
#include <vndksupport/linker.h>
@@ -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<std::string> 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<void> 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<std::pair<Arch, std::vector<const char*>>> 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<std::string, InstanceDebugInfo> map;
for (const auto &pair : sAllPaths) {
Arch arch = pair.first;