aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Android.bp61
-rw-r--r--rust/drm_wrapper.h22
2 files changed, 79 insertions, 4 deletions
diff --git a/Android.bp b/Android.bp
index 7ed9174e..ea471952 100644
--- a/Android.bp
+++ b/Android.bp
@@ -81,7 +81,10 @@ cc_library_headers {
vendor_available: true,
host_supported: true,
defaults: ["libdrm_defaults"],
- export_include_dirs: ["include/drm", "android"],
+ export_include_dirs: [
+ "include/drm",
+ "android",
+ ],
apex_available: [
"//apex_available:platform",
"com.android.virt",
@@ -92,14 +95,22 @@ cc_library_headers {
cc_library {
name: "libdrm",
recovery_available: true,
- vendor_available: true,
host_supported: true,
+ vendor_available: true,
+ product_available: true,
+ apex_available: [
+ "//apex_available:platform",
+ "//apex_available:anyapex",
+ ],
defaults: [
"libdrm_defaults",
"libdrm_sources",
],
- export_include_dirs: ["include/drm", "android"],
+ export_include_dirs: [
+ "include/drm",
+ "android",
+ ],
cflags: [
"-Wno-enum-conversion",
@@ -107,8 +118,50 @@ cc_library {
"-Wno-sign-compare",
"-Wno-tautological-compare",
],
+}
+
+// Rust bindings for libdrm, generated in a way compatible with drm-ffi crate.
+rust_bindgen {
+ name: "libdrm_sys",
+ crate_name: "drm_sys",
+ wrapper_src: "rust/drm_wrapper.h",
+ source_stem: "bindings",
+ bindgen_flags: [
+ "--ctypes-prefix=core::ffi",
+ "--no-prepend-enum-name",
+ "--with-derive-default",
+ "--with-derive-hash",
+ "--with-derive-eq",
+ "--blocklist-type=drm_handle_t",
+ "--blocklist-type=__BINDGEN_TMP_.*",
+ "--blocklist-type=drm_control_DRM_ADD_COMMAND",
+ "--allowlist-type=_?DRM_.*|drm_.*|hdr_.*",
+ "--allowlist-var=_?DRM_.*|drm_.*",
+ "--constified-enum-module=drm_control_.*",
+ "--constified-enum-module=drm_buf_desc_.*",
+ "--constified-enum-module=drm_map_type",
+ "--constified-enum-module=drm_map_flags",
+ "--constified-enum-module=drm_stat_type",
+ "--constified-enum-module=drm_lock_flags",
+ "--constified-enum-module=drm_dma_flags",
+ "--constified-enum-module=drm_ctx_flags",
+ "--constified-enum-module=drm_drawable_info_type_t",
+ "--constified-enum-module=drm_vblank_seq_type",
+ "--constified-enum-module=drm_mode_subconnector",
+ ],
+ shared_libs: [
+ "libdrm",
+ "libcutils",
+ "liblog",
+ ],
+ host_supported: true,
+ vendor_available: true,
+ product_available: true,
apex_available: [
+ "//apex_available:anyapex",
"//apex_available:platform",
- "com.android.virt",
+ ],
+ visibility: [
+ "//external/rust/crates/drm-ffi",
],
}
diff --git a/rust/drm_wrapper.h b/rust/drm_wrapper.h
new file mode 100644
index 00000000..98d877e1
--- /dev/null
+++ b/rust/drm_wrapper.h
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2024 Google LLC
+ */
+
+#include <fcntl.h>
+#include <xf86drm.h>
+#include <xf86drmMode.h>
+
+// bindgen doesn't create constants for macros that expand to other macros
+// https://github.com/Smithay/drm-rs/blob/328742fddc675b3370057b382eb54acbc9b48c79/drm-ffi/drm-sys/build.rs#L110
+
+const unsigned int __BINDGEN_TMP_DRM_MODE_PROP_OBJECT = DRM_MODE_PROP_OBJECT;
+#undef DRM_MODE_PROP_OBJECT
+const unsigned int DRM_MODE_PROP_OBJECT = __BINDGEN_TMP_DRM_MODE_PROP_OBJECT;
+#define DRM_MODE_PROP_OBJECT DRM_MODE_PROP_OBJECT
+
+const unsigned int __BINDGEN_TMP_DRM_MODE_PROP_SIGNED_RANGE =
+ DRM_MODE_PROP_SIGNED_RANGE;
+#undef DRM_MODE_PROP_SIGNED_RANGE
+const unsigned int DRM_MODE_PROP_SIGNED_RANGE =
+ __BINDGEN_TMP_DRM_MODE_PROP_SIGNED_RANGE;
+#define DRM_MODE_PROP_SIGNED_RANGE DRM_MODE_PROP_SIGNED_RANGE