From 2f62247b61085c24f263e16ff84bbedf0449242f Mon Sep 17 00:00:00 2001 From: Fabian Leutenegger Date: Thu, 23 Jan 2025 14:59:39 +0100 Subject: [PATCH] camera: Fix ELF check failures --- Android.bp | 83 ++++++++++++++++++++++ Android.mk | 1 - camera-vendor.mk | 11 ++- extract-files.sh | 2 +- proprietary-files.txt | 6 +- proprietary/system/lib64/libgui-xiaomi.so | Bin 1923433 -> 1834264 bytes setup-makefiles.sh | 21 ++++++ 7 files changed, 113 insertions(+), 11 deletions(-) diff --git a/Android.bp b/Android.bp index 4b76612..8373dd7 100644 --- a/Android.bp +++ b/Android.bp @@ -3,6 +3,89 @@ // This file is generated by vendor/xiaomi/camera/setup-makefiles.sh soong_namespace { + imports: [ + ], +} + +cc_prebuilt_library_shared { + name: "libcamera_algoup_jni.xiaomi", + owner: "xiaomi", + strip: { + none: true, + }, + target: { + android_arm64: { + srcs: ["proprietary/system/lib64/libcamera_algoup_jni.xiaomi.so"], + shared_libs: ["libandroid", "libandroid_runtime", "libbase", "libbinder", "libcamera_client", "libcamera_metadata", "libcutils", "libgui-xiaomi", "liblog", "libmedia_jni_utils", "libnativehelper", "libnativewindow", "libui", "libutils", "libvndksupport", "android.hidl.token@1.0-utils", "libc++", "libc", "libm", "libdl", ], + }, + }, + compile_multilib: "64", + prefer: true, +} + +cc_prebuilt_library_shared { + name: "libcamera_mianode_jni.xiaomi", + owner: "xiaomi", + strip: { + none: true, + }, + target: { + android_arm64: { + srcs: ["proprietary/system/lib64/libcamera_mianode_jni.xiaomi.so"], + shared_libs: ["libandroid", "libbinder", "libcamera_client", "libcamera_metadata", "libcutils", "libgui-xiaomi", "liblog", "libmedia_jni_utils", "libui", "libutils", "libvndksupport", "libxml2", "libc++", "libc", "libm", "libdl", ], + }, + }, + compile_multilib: "64", + prefer: true, +} + +cc_prebuilt_library_shared { + name: "libgui-xiaomi", + owner: "xiaomi", + strip: { + none: true, + }, + target: { + android_arm64: { + srcs: ["proprietary/system/lib64/libgui-xiaomi.so"], + shared_libs: ["android.hardware.graphics.common-V5-ndk", "android.hardware.graphics.bufferqueue@1.0", "android.hardware.graphics.bufferqueue@2.0", "android.hardware.graphics.common@1.1", "android.hardware.graphics.common@1.2", "android.hidl.token@1.0-utils", "libbase", "libcutils", "libEGL", "libGLESv2", "libhidlbase", "liblog", "libnativewindow", "libsync", "libui", "libutils", "libvndksupport", "libbinder", "libc++", "libc", "libm", "libdl", ], + }, + }, + compile_multilib: "64", + prefer: true, +} + +cc_prebuilt_library_shared { + name: "libmicampostproc_client", + owner: "xiaomi", + strip: { + none: true, + }, + target: { + android_arm64: { + srcs: ["proprietary/system/lib64/libmicampostproc_client.so"], + shared_libs: ["liblog", "libutils", "libcutils", "libhardware", "libnativewindow", "libEGL", "libGLESv2", "libfmq", "libgui", "libui", "libcamera_client", "libcamera_metadata", "libmedia_jni_utils", "libnativehelper", "libhidlbase", "libhidltransport", "vendor.xiaomi.hardware.campostproc@1.0_system", "libc++", "libc", "libm", "libdl", ], + }, + }, + compile_multilib: "64", + prefer: true, +} + +cc_prebuilt_library_shared { + name: "vendor.xiaomi.hardware.campostproc@1.0_system", + stem: "vendor.xiaomi.hardware.campostproc@1.0", + owner: "xiaomi", + strip: { + none: true, + }, + target: { + android_arm64: { + srcs: ["proprietary/system/lib64/vendor.xiaomi.hardware.campostproc@1.0.so"], + shared_libs: ["android.hardware.camera.common@1.0", "libhidlbase", "liblog", "libutils", "libcutils", "libc++", "libc", "libm", "libdl", ], + }, + }, + compile_multilib: "64", + prefer: true, } android_app_import { diff --git a/Android.mk b/Android.mk index 9d5b89e..59d655d 100644 --- a/Android.mk +++ b/Android.mk @@ -3,7 +3,6 @@ # This file is generated by vendor/xiaomi/camera/setup-makefiles.sh LOCAL_PATH := $(call my-dir) - ifneq ($(filter fuxi nuwa ishtar vermeer,$(TARGET_DEVICE)),) CAMERA_LIBRARIES := libcamera_algoup_jni.xiaomi.so libcamera_mianode_jni.xiaomi.so diff --git a/camera-vendor.mk b/camera-vendor.mk index 4e859e1..61a7a1c 100644 --- a/camera-vendor.mk +++ b/camera-vendor.mk @@ -5,12 +5,11 @@ PRODUCT_SOONG_NAMESPACES += \ vendor/xiaomi/camera -PRODUCT_COPY_FILES += \ - vendor/xiaomi/camera/proprietary/system/lib64/libgui-xiaomi.so:$(TARGET_COPY_OUT_SYSTEM)/lib64/libgui-xiaomi.so \ - vendor/xiaomi/camera/proprietary/system/lib64/libcamera_algoup_jni.xiaomi.so:$(TARGET_COPY_OUT_SYSTEM)/lib64/libcamera_algoup_jni.xiaomi.so \ - vendor/xiaomi/camera/proprietary/system/lib64/libcamera_mianode_jni.xiaomi.so:$(TARGET_COPY_OUT_SYSTEM)/lib64/libcamera_mianode_jni.xiaomi.so \ - vendor/xiaomi/camera/proprietary/system/lib64/libmicampostproc_client.so:$(TARGET_COPY_OUT_SYSTEM)/lib64/libmicampostproc_client.so \ - vendor/xiaomi/camera/proprietary/system/lib64/vendor.xiaomi.hardware.campostproc@1.0.so:$(TARGET_COPY_OUT_SYSTEM)/lib64/vendor.xiaomi.hardware.campostproc@1.0.so PRODUCT_PACKAGES += \ + libcamera_algoup_jni.xiaomi \ + libcamera_mianode_jni.xiaomi \ + libgui-xiaomi \ + libmicampostproc_client \ + vendor.xiaomi.hardware.campostproc@1.0_system \ MiuiCamera diff --git a/extract-files.sh b/extract-files.sh index cc7af13..76f18f2 100755 --- a/extract-files.sh +++ b/extract-files.sh @@ -56,7 +56,7 @@ function blob_fixup() { case "${1}" in system/lib64/libgui-xiaomi.so) [ "$2" = "" ] && return 0 - patchelf --set-soname libgui-xiaomi.so "${2}" + sed -i "s/android.hardware.graphics.common-V4-ndk.so/android.hardware.graphics.common-V5-ndk.so/" "${2}" ;; system/lib64/libcamera_algoup_jni.xiaomi.so|system/lib64/libcamera_mianode_jni.xiaomi.so) [ "$2" = "" ] && return 0 diff --git a/proprietary-files.txt b/proprietary-files.txt index 3c1f299..0610c5e 100644 --- a/proprietary-files.txt +++ b/proprietary-files.txt @@ -1,7 +1,7 @@ -# Unpinned blobs from ishtar_global-user 13 TKQ1.221114.001 V816.0.6.0.UMAMIXM release-keys +# Unpinned blobs from vermeer_global-user 13 TKQ1.221114.001 V816.0.2.0.UNKMIXM release-keys product/priv-app/MiuiCamera/MiuiCamera.apk:system/priv-app/MiuiCamera/MiuiCamera.apk;OVERRIDES=Aperture,Camera,Camera2,GoogleCameraGo -system/lib64/libgui.so:system/lib64/libgui-xiaomi.so +system/lib64/libgui.so:system/lib64/libgui-xiaomi.so;FIX_SONAME system_ext/lib64/libcamera_algoup_jni.xiaomi.so:system/lib64/libcamera_algoup_jni.xiaomi.so system_ext/lib64/libcamera_mianode_jni.xiaomi.so:system/lib64/libcamera_mianode_jni.xiaomi.so system_ext/lib64/libmicampostproc_client.so:system/lib64/libmicampostproc_client.so -system_ext/lib64/vendor.xiaomi.hardware.campostproc@1.0.so:system/lib64/vendor.xiaomi.hardware.campostproc@1.0.so +system_ext/lib64/vendor.xiaomi.hardware.campostproc@1.0.so:system/lib64/vendor.xiaomi.hardware.campostproc@1.0.so;MODULE_SUFFIX=_system diff --git a/proprietary/system/lib64/libgui-xiaomi.so b/proprietary/system/lib64/libgui-xiaomi.so index b5b00761be759a65ce522f1732c08008d9fa6d7a..ae75edb1d2b2aba167e2ed1be1efc2cf6aa2dae6 100644 GIT binary patch delta 251012 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 diff --git a/setup-makefiles.sh b/setup-makefiles.sh index fe77686..98a5e3c 100755 --- a/setup-makefiles.sh +++ b/setup-makefiles.sh @@ -24,6 +24,27 @@ if [ ! -f "${HELPER}" ]; then fi source "${HELPER}" +function lib_to_package_fixup_vendor_variants() { + if [ "$2" != "system" ]; then + return 1 + fi + + case "$1" in + vendor.xiaomi.hardware.campostproc@1.0) + echo "$1_system" + ;; + *) + return 1 + ;; + esac +} + +function lib_to_package_fixup() { + lib_to_package_fixup_clang_rt_ubsan_standalone "$1" || + lib_to_package_fixup_proto_3_9_1 "$1" || + lib_to_package_fixup_vendor_variants "$@" +} + # Initialize the helper setup_vendor "${DEVICE}" "${VENDOR}" "${ANDROID_ROOT}" true