libhidladapter: Support for HIDL adapters

A HIDL adapter takes an x.(y+1) interface and registers
it as an x.y interface for testing.

This library allows someone or something to run an adapter.

Note: this requires b/62303973 to properly mock a lower interface version.
Note: this requires adapters to run as root to get around sepolicy.

Bug: 37518178
Test: can switch out implementations
~/android/master$ lshal | grep hidl.allocator
Y android.hidl.allocator@1.0::IAllocator/ashmem                               0/1        652    471
~/android/master$ lshal | grep hidl.allocator
Y android.hidl.allocator@1.0::IAllocator/ashmem                               0/1        7635   471
~/android/master$ lshal | grep hidl.allocator
Y android.hidl.allocator@1.0::IAllocator/ashmem                               0/1        652    471

Change-Id: Ic72feb3a2fd4649e67b396c33b9a292e9c0a944a
diff --git a/transport/allocator/1.0/Android.bp b/transport/allocator/1.0/Android.bp
index c64a039..e518028 100644
--- a/transport/allocator/1.0/Android.bp
+++ b/transport/allocator/1.0/Android.bp
@@ -60,3 +60,76 @@
         "libutils",
     ],
 }
+
+genrule {
+    name: "android.hidl.allocator@1.0-adapter-helper_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hidl:system/libhidl/transport android.hidl.allocator@1.0",
+    srcs: [
+        ":android.hidl.allocator@1.0_hal",
+    ],
+    out: [
+        "android/hidl/allocator/1.0/AAllocator.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hidl.allocator@1.0-adapter-helper_genc++_headers",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hidl:system/libhidl/transport android.hidl.allocator@1.0",
+    srcs: [
+        ":android.hidl.allocator@1.0_hal",
+    ],
+    out: [
+        "android/hidl/allocator/1.0/AAllocator.h",
+    ],
+}
+
+
+cc_library {
+    name: "android.hidl.allocator@1.0-adapter-helper",
+    defaults: ["hidl-module-defaults"],
+    generated_sources: ["android.hidl.allocator@1.0-adapter-helper_genc++"],
+    generated_headers: ["android.hidl.allocator@1.0-adapter-helper_genc++_headers"],
+    export_generated_headers: ["android.hidl.allocator@1.0-adapter-helper_genc++_headers"],
+    vendor_available: true,
+    shared_libs: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "liblog",
+        "libutils",
+        "libcutils",
+        "libhidladapter",
+        "android.hidl.allocator@1.0",
+        "android.hidl.base@1.0-adapter-helper",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "libhidladapter",
+        "android.hidl.allocator@1.0",
+        "android.hidl.base@1.0-adapter-helper",
+    ],
+}
+
+genrule {
+    name: "android.hidl.allocator@1.0-adapter_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hidl:system/libhidl/transport android.hidl.allocator@1.0",
+    out: ["main.cpp"]}
+
+cc_test {
+    name: "android.hidl.allocator@1.0-adapter",
+    shared_libs: [
+        "libhidladapter",
+        "libhidlbase",
+        "libhidltransport",
+        "libutils",
+        "android.hidl.allocator@1.0",
+        "android.hidl.allocator@1.0-adapter-helper",
+    ],
+    generated_sources: ["android.hidl.allocator@1.0-adapter_genc++"],
+}
diff --git a/transport/base/1.0/Android.bp b/transport/base/1.0/Android.bp
index 8382824..dd4a814 100644
--- a/transport/base/1.0/Android.bp
+++ b/transport/base/1.0/Android.bp
@@ -40,3 +40,71 @@
 }
 
 // android.hidl.base@1.0 is exported from libhidltransport
+
+genrule {
+    name: "android.hidl.base@1.0-adapter-helper_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hidl:system/libhidl/transport android.hidl.base@1.0",
+    srcs: [
+        ":android.hidl.base@1.0_hal",
+    ],
+    out: [
+        "android/hidl/base/1.0/ABase.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hidl.base@1.0-adapter-helper_genc++_headers",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hidl:system/libhidl/transport android.hidl.base@1.0",
+    srcs: [
+        ":android.hidl.base@1.0_hal",
+    ],
+    out: [
+        "android/hidl/base/1.0/ABase.h",
+    ],
+}
+
+
+cc_library {
+    name: "android.hidl.base@1.0-adapter-helper",
+    defaults: ["hidl-module-defaults"],
+    generated_sources: ["android.hidl.base@1.0-adapter-helper_genc++"],
+    generated_headers: ["android.hidl.base@1.0-adapter-helper_genc++_headers"],
+    export_generated_headers: ["android.hidl.base@1.0-adapter-helper_genc++_headers"],
+    vendor_available: true,
+    shared_libs: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "liblog",
+        "libutils",
+        "libcutils",
+        "libhidladapter",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "libhidladapter",
+    ],
+}
+
+genrule {
+    name: "android.hidl.base@1.0-adapter_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hidl:system/libhidl/transport android.hidl.base@1.0",
+    out: ["main.cpp"]}
+
+cc_test {
+    name: "android.hidl.base@1.0-adapter",
+    shared_libs: [
+        "libhidladapter",
+        "libhidlbase",
+        "libhidltransport",
+        "libutils",
+        "android.hidl.base@1.0-adapter-helper",
+    ],
+    generated_sources: ["android.hidl.base@1.0-adapter_genc++"],
+}
diff --git a/transport/manager/1.0/Android.bp b/transport/manager/1.0/Android.bp
index 8bdbfa5..fc5e901 100644
--- a/transport/manager/1.0/Android.bp
+++ b/transport/manager/1.0/Android.bp
@@ -43,3 +43,75 @@
 }
 
 // android.hidl.manager@1.0 is exported from libhidltransport
+
+genrule {
+    name: "android.hidl.manager@1.0-adapter-helper_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hidl:system/libhidl/transport android.hidl.manager@1.0",
+    srcs: [
+        ":android.hidl.manager@1.0_hal",
+    ],
+    out: [
+        "android/hidl/manager/1.0/AServiceManager.cpp",
+        "android/hidl/manager/1.0/AServiceNotification.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hidl.manager@1.0-adapter-helper_genc++_headers",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hidl:system/libhidl/transport android.hidl.manager@1.0",
+    srcs: [
+        ":android.hidl.manager@1.0_hal",
+    ],
+    out: [
+        "android/hidl/manager/1.0/AServiceManager.h",
+        "android/hidl/manager/1.0/AServiceNotification.h",
+    ],
+}
+
+
+cc_library {
+    name: "android.hidl.manager@1.0-adapter-helper",
+    defaults: ["hidl-module-defaults"],
+    generated_sources: ["android.hidl.manager@1.0-adapter-helper_genc++"],
+    generated_headers: ["android.hidl.manager@1.0-adapter-helper_genc++_headers"],
+    export_generated_headers: ["android.hidl.manager@1.0-adapter-helper_genc++_headers"],
+    vendor_available: true,
+    shared_libs: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "liblog",
+        "libutils",
+        "libcutils",
+        "libhidladapter",
+        "android.hidl.base@1.0-adapter-helper",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "libhidladapter",
+        "android.hidl.base@1.0-adapter-helper",
+    ],
+}
+
+genrule {
+    name: "android.hidl.manager@1.0-adapter_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hidl:system/libhidl/transport android.hidl.manager@1.0",
+    out: ["main.cpp"]}
+
+cc_test {
+    name: "android.hidl.manager@1.0-adapter",
+    shared_libs: [
+        "libhidladapter",
+        "libhidlbase",
+        "libhidltransport",
+        "libutils",
+        "android.hidl.manager@1.0-adapter-helper",
+    ],
+    generated_sources: ["android.hidl.manager@1.0-adapter_genc++"],
+}
diff --git a/transport/manager/1.1/Android.bp b/transport/manager/1.1/Android.bp
index 5a1bf00..3b0682a 100644
--- a/transport/manager/1.1/Android.bp
+++ b/transport/manager/1.1/Android.bp
@@ -36,3 +36,75 @@
 }
 
 // android.hidl.manager@1.1 is exported from libhidltransport
+
+genrule {
+    name: "android.hidl.manager@1.1-adapter-helper_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hidl:system/libhidl/transport android.hidl.manager@1.1",
+    srcs: [
+        ":android.hidl.manager@1.1_hal",
+    ],
+    out: [
+        "android/hidl/manager/1.1/AServiceManager.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hidl.manager@1.1-adapter-helper_genc++_headers",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hidl:system/libhidl/transport android.hidl.manager@1.1",
+    srcs: [
+        ":android.hidl.manager@1.1_hal",
+    ],
+    out: [
+        "android/hidl/manager/1.1/AServiceManager.h",
+    ],
+}
+
+
+cc_library {
+    name: "android.hidl.manager@1.1-adapter-helper",
+    defaults: ["hidl-module-defaults"],
+    generated_sources: ["android.hidl.manager@1.1-adapter-helper_genc++"],
+    generated_headers: ["android.hidl.manager@1.1-adapter-helper_genc++_headers"],
+    export_generated_headers: ["android.hidl.manager@1.1-adapter-helper_genc++_headers"],
+    vendor_available: true,
+    shared_libs: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "liblog",
+        "libutils",
+        "libcutils",
+        "libhidladapter",
+        "android.hidl.base@1.0-adapter-helper",
+        "android.hidl.manager@1.0-adapter-helper",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "libhidladapter",
+        "android.hidl.base@1.0-adapter-helper",
+        "android.hidl.manager@1.0-adapter-helper",
+    ],
+}
+
+genrule {
+    name: "android.hidl.manager@1.1-adapter_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hidl:system/libhidl/transport android.hidl.manager@1.1",
+    out: ["main.cpp"]}
+
+cc_test {
+    name: "android.hidl.manager@1.1-adapter",
+    shared_libs: [
+        "libhidladapter",
+        "libhidlbase",
+        "libhidltransport",
+        "libutils",
+        "android.hidl.manager@1.1-adapter-helper",
+    ],
+    generated_sources: ["android.hidl.manager@1.1-adapter_genc++"],
+}
diff --git a/transport/memory/1.0/Android.bp b/transport/memory/1.0/Android.bp
index b6044c2..a3be879 100644
--- a/transport/memory/1.0/Android.bp
+++ b/transport/memory/1.0/Android.bp
@@ -68,3 +68,78 @@
         "libutils",
     ],
 }
+
+genrule {
+    name: "android.hidl.memory@1.0-adapter-helper_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hidl:system/libhidl/transport android.hidl.memory@1.0",
+    srcs: [
+        ":android.hidl.memory@1.0_hal",
+    ],
+    out: [
+        "android/hidl/memory/1.0/AMapper.cpp",
+        "android/hidl/memory/1.0/AMemory.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hidl.memory@1.0-adapter-helper_genc++_headers",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hidl:system/libhidl/transport android.hidl.memory@1.0",
+    srcs: [
+        ":android.hidl.memory@1.0_hal",
+    ],
+    out: [
+        "android/hidl/memory/1.0/AMapper.h",
+        "android/hidl/memory/1.0/AMemory.h",
+    ],
+}
+
+
+cc_library {
+    name: "android.hidl.memory@1.0-adapter-helper",
+    defaults: ["hidl-module-defaults"],
+    generated_sources: ["android.hidl.memory@1.0-adapter-helper_genc++"],
+    generated_headers: ["android.hidl.memory@1.0-adapter-helper_genc++_headers"],
+    export_generated_headers: ["android.hidl.memory@1.0-adapter-helper_genc++_headers"],
+    vendor_available: true,
+    shared_libs: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "liblog",
+        "libutils",
+        "libcutils",
+        "libhidladapter",
+        "android.hidl.memory@1.0",
+        "android.hidl.base@1.0-adapter-helper",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "libhidladapter",
+        "android.hidl.memory@1.0",
+        "android.hidl.base@1.0-adapter-helper",
+    ],
+}
+
+genrule {
+    name: "android.hidl.memory@1.0-adapter_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hidl:system/libhidl/transport android.hidl.memory@1.0",
+    out: ["main.cpp"]}
+
+cc_test {
+    name: "android.hidl.memory@1.0-adapter",
+    shared_libs: [
+        "libhidladapter",
+        "libhidlbase",
+        "libhidltransport",
+        "libutils",
+        "android.hidl.memory@1.0",
+        "android.hidl.memory@1.0-adapter-helper",
+    ],
+    generated_sources: ["android.hidl.memory@1.0-adapter_genc++"],
+}
diff --git a/transport/token/1.0/Android.bp b/transport/token/1.0/Android.bp
index 957d1f9..3f9fbdb 100644
--- a/transport/token/1.0/Android.bp
+++ b/transport/token/1.0/Android.bp
@@ -60,3 +60,76 @@
         "libutils",
     ],
 }
+
+genrule {
+    name: "android.hidl.token@1.0-adapter-helper_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hidl:system/libhidl/transport android.hidl.token@1.0",
+    srcs: [
+        ":android.hidl.token@1.0_hal",
+    ],
+    out: [
+        "android/hidl/token/1.0/ATokenManager.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hidl.token@1.0-adapter-helper_genc++_headers",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hidl:system/libhidl/transport android.hidl.token@1.0",
+    srcs: [
+        ":android.hidl.token@1.0_hal",
+    ],
+    out: [
+        "android/hidl/token/1.0/ATokenManager.h",
+    ],
+}
+
+
+cc_library {
+    name: "android.hidl.token@1.0-adapter-helper",
+    defaults: ["hidl-module-defaults"],
+    generated_sources: ["android.hidl.token@1.0-adapter-helper_genc++"],
+    generated_headers: ["android.hidl.token@1.0-adapter-helper_genc++_headers"],
+    export_generated_headers: ["android.hidl.token@1.0-adapter-helper_genc++_headers"],
+    vendor_available: true,
+    shared_libs: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "liblog",
+        "libutils",
+        "libcutils",
+        "libhidladapter",
+        "android.hidl.token@1.0",
+        "android.hidl.base@1.0-adapter-helper",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "libhidladapter",
+        "android.hidl.token@1.0",
+        "android.hidl.base@1.0-adapter-helper",
+    ],
+}
+
+genrule {
+    name: "android.hidl.token@1.0-adapter_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hidl:system/libhidl/transport android.hidl.token@1.0",
+    out: ["main.cpp"]}
+
+cc_test {
+    name: "android.hidl.token@1.0-adapter",
+    shared_libs: [
+        "libhidladapter",
+        "libhidlbase",
+        "libhidltransport",
+        "libutils",
+        "android.hidl.token@1.0",
+        "android.hidl.token@1.0-adapter-helper",
+    ],
+    generated_sources: ["android.hidl.token@1.0-adapter_genc++"],
+}