From 1f26384f2a46cb326b7ad0bff69084caa51e19f1 Mon Sep 17 00:00:00 2001 From: Jason Macnak Date: Wed, 18 Sep 2024 13:27:18 -0700 Subject: [PATCH] Support drm hwcomposer as an apex ... so that Cuttlefish can runtime select between drm_hwcomposer and ranchu. Drops the libbinder to avoid error: APEX can't use libbinder (must use libbinder_ndk) and fixes a couple includes. Bug: b/348466630 Test: cvd start Test: cvd start --hwcomposer=drm_hwcomposer Change-Id: I50681677d89c56fb6761b740a465bf92890157ea --- Android.bp | 58 +++++++++++++++++++++++++++++++++++- hwc3/CommandResultWriter.h | 2 ++ hwc3/Utils.h | 1 + hwc3/hwc3-apex-file-contexts | 3 ++ hwc3/hwc3-apex-manifest.json | 5 ++++ hwc3/service.cpp | 1 - 6 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 hwc3/hwc3-apex-file-contexts create mode 100644 hwc3/hwc3-apex-manifest.json diff --git a/Android.bp b/Android.bp index 2266e59..e38192d 100644 --- a/Android.bp +++ b/Android.bp @@ -177,7 +177,6 @@ cc_binary { shared_libs: [ "android.hardware.graphics.composer3-V3-ndk", "libbase", - "libbinder", "libbinder_ndk", "liblog", "libutils", @@ -225,3 +224,60 @@ filegroup { name: "drm_hwcomposer_platformmediatek", srcs: ["bufferinfo/legacy/BufferInfoMaliMediatek.cpp"], } + +prebuilt_etc { + name: "drm_hwcomposer_hwc3_apex_vintf", + src: "hwc3/hwc3-drm.xml", + sub_dir: "vintf", + vendor: true, + installable: false, +} + +prebuilt_etc { + name: "drm_hwcomposer_hwc3_apex_init_rc", + filename_from_src: true, + vendor: true, + src: ":gen-drm_hwcomposer_hwc3_apex_init_rc", +} + +genrule { + name: "gen-drm_hwcomposer_hwc3_apex_init_rc", + srcs: ["hwc3/hwc3-drm.rc"], + out: ["hwc3-drm.apex.rc"], + cmd: "sed " + + // Update the binary location to inside the Apex: + "-e 's%/vendor/bin/%/apex/com.android.hardware.graphics.composer/bin/%' " + + "$(in) > $(out)", +} + +filegroup { + name: "drm_hwcomposer_hwc3_apex_file_contexts", + srcs: [ + "hwc3/hwc3-apex-file-contexts", + ], +} + +filegroup { + name: "drm_hwcomposer_hwc3_apex_manifest", + srcs: [ + "hwc3/hwc3-apex-manifest.json", + ], +} + +apex { + name: "com.android.hardware.graphics.composer.drm_hwcomposer", + key: "com.android.hardware.key", + certificate: ":com.android.hardware.certificate", + file_contexts: ":drm_hwcomposer_hwc3_apex_file_contexts", + manifest: ":drm_hwcomposer_hwc3_apex_manifest", + vendor: true, + updatable: false, + soc_specific: true, + binaries: [ + "android.hardware.composer.hwc3-service.drm", + ], + prebuilts: [ + "drm_hwcomposer_hwc3_apex_init_rc", + "drm_hwcomposer_hwc3_apex_vintf", + ], +} diff --git a/hwc3/CommandResultWriter.h b/hwc3/CommandResultWriter.h index fa96f33..aae6817 100644 --- a/hwc3/CommandResultWriter.h +++ b/hwc3/CommandResultWriter.h @@ -17,6 +17,8 @@ #include #include +#include + #include "Utils.h" #include "aidl/android/hardware/graphics/composer3/CommandError.h" #include "aidl/android/hardware/graphics/composer3/CommandResultPayload.h" diff --git a/hwc3/Utils.h b/hwc3/Utils.h index 23d6bdc..2e21b97 100644 --- a/hwc3/Utils.h +++ b/hwc3/Utils.h @@ -18,6 +18,7 @@ #include #include +#include #include diff --git a/hwc3/hwc3-apex-file-contexts b/hwc3/hwc3-apex-file-contexts new file mode 100644 index 0000000..5c8de15 --- /dev/null +++ b/hwc3/hwc3-apex-file-contexts @@ -0,0 +1,3 @@ +(/.*)? u:object_r:vendor_file:s0 +/etc(/.*)? u:object_r:vendor_configs_file:s0 +/bin/hw/android\.hardware\.composer\.hwc3-service\.drm u:object_r:hal_graphics_composer_default_exec:s0 \ No newline at end of file diff --git a/hwc3/hwc3-apex-manifest.json b/hwc3/hwc3-apex-manifest.json new file mode 100644 index 0000000..fa9e626 --- /dev/null +++ b/hwc3/hwc3-apex-manifest.json @@ -0,0 +1,5 @@ +{ + "name": "com.android.hardware.graphics.composer", + "version": 1, + "vendorBootstrap": true +} \ No newline at end of file diff --git a/hwc3/service.cpp b/hwc3/service.cpp index 920260a..d91ce9e 100644 --- a/hwc3/service.cpp +++ b/hwc3/service.cpp @@ -19,7 +19,6 @@ #include #include -#include #include #include "Composer.h"