Show a patch.

GET /api/1.1/patches/17698/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 17698,
    "url": "https://patchwork.libcamera.org/api/1.1/patches/17698/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/17698/",
    "project": {
        "id": 1,
        "url": "https://patchwork.libcamera.org/api/1.1/projects/1/?format=api",
        "name": "libcamera",
        "link_name": "libcamera",
        "list_id": "libcamera_core",
        "list_email": "libcamera-devel@lists.libcamera.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": ""
    },
    "msgid": "<20221027055515.321791-9-nicholas@rothemail.net>",
    "date": "2022-10-27T05:55:13",
    "name": "[libcamera-devel,08/10] android: add makefiles to build inline with AOSP",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "6abef6b957b7cea89ab2a0342de563095f07bb86",
    "submitter": {
        "id": 97,
        "url": "https://patchwork.libcamera.org/api/1.1/people/97/?format=api",
        "name": "Nicolas Dufresne via libcamera-devel",
        "email": "libcamera-devel@lists.libcamera.org"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/17698/mbox/",
    "series": [
        {
            "id": 3579,
            "url": "https://patchwork.libcamera.org/api/1.1/series/3579/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=3579",
            "date": "2022-10-27T05:55:08",
            "name": "[libcamera-devel,01/10] ipa: workaround libcxx duration limitation",
            "version": 1,
            "mbox": "https://patchwork.libcamera.org/series/3579/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/17698/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/17698/checks/",
    "tags": {},
    "headers": {
        "Return-Path": "<libcamera-devel-bounces@lists.libcamera.org>",
        "X-Original-To": "parsemail@patchwork.libcamera.org",
        "Delivered-To": "parsemail@patchwork.libcamera.org",
        "Received": [
            "from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id A2A1EC3288\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 27 Oct 2022 05:55:34 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 3BB8462F94;\n\tThu, 27 Oct 2022 07:55:34 +0200 (CEST)",
            "from mail-oa1-x36.google.com (mail-oa1-x36.google.com\n\t[IPv6:2001:4860:4864:20::36])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 0561C62F72\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 27 Oct 2022 07:55:27 +0200 (CEST)",
            "by mail-oa1-x36.google.com with SMTP id\n\t586e51a60fabf-13c569e5ff5so290913fac.6\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 26 Oct 2022 22:55:26 -0700 (PDT)",
            "from nroth-pc.attlocal.net\n\t([2600:1700:20:20c0:6406:fc7a:e46d:1666])\n\tby smtp.gmail.com with ESMTPSA id\n\t9-20020a9d0c09000000b00661a05691fasm140021otr.79.2022.10.26.22.55.25\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tWed, 26 Oct 2022 22:55:25 -0700 (PDT)"
        ],
        "DKIM-Signature": [
            "v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1666850134;\n\tbh=uYdZd5ooHVKC5fykrTFeNa3vGKYdFi9HN0ca8IDJYbQ=;\n\th=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=qjOcdIQDd9gAtues2FbPAr5Jv6OguVm+koUiT1sMDX3xEMw7xEfSS6h3ybHgIIVke\n\twbWWlAkz3mjEEGdjyFRCLD30Dl0NBp4PxKbRboUWFm6Mgld5oR15ixBM3fpok5fpa1\n\tCn8jE0DYgWgXamq72rWmB6mdSzJ+LuOumdfLQ4cmogtr8eEAuugXcOCqEBkcHRcgBa\n\tCk/Xu20WrVQHU2N8w/faqESDg+BAX7Ec6QWE8mC9Nw06Lb2X1B/INVXRMaD/8va06O\n\tu55l0NuXobAMWVVmyRe2f3H9pQPHxVJI86JpboZ1i4n0vTvWBAlO5b8CJ/bElQH4Yh\n\tYoZCuVm5FUmsw==",
            "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=rothemail-net.20210112.gappssmtp.com; s=20210112;\n\th=content-transfer-encoding:mime-version:reply-to:references\n\t:in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject\n\t:date:message-id:reply-to;\n\tbh=OrR17ZcndUu6E8+nQhvZfP/G7yO3m+iusFv1/hMho8o=;\n\tb=A57GB5qHzqnT7KLDuLh+L/OBAcFjwbFd9HmKU987uEXYH7dbyve4UQpXkJrjZGKTRZ\n\tjL+mZQuEztTiWOm5SI6WELkAfi8QpZGB4sQ0CpJZNFyYSa4l8peTMwN3T4mU4xXBik1Q\n\tsDGFC2qYwOt6ijy9DpnJ0zH6Fv0+JUSRtxZfPoTXHZFVO8cgXdBOwMfe9wvGm5LcSiYO\n\tp+DafVa9jFmEj3uo6Cu3IWakqK2zSP9gdwcjZBJlpmzWuFHLchFOi5AarLLvqpqtqH39\n\t/SpRVG2et5IF1wDU2QF1LL9Kp2WAD5JzCT5gZuZZbANaWjj1OTGJcPPFbshG4IkG4rwW\n\t1jiA=="
        ],
        "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (2048-bit key; \n\tunprotected)\n\theader.d=rothemail-net.20210112.gappssmtp.com\n\theader.i=@rothemail-net.20210112.gappssmtp.com header.b=\"A57GB5qH\"; \n\tdkim-atps=neutral",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20210112;\n\th=content-transfer-encoding:mime-version:reply-to:references\n\t:in-reply-to:message-id:date:subject:cc:to:from:x-gm-message-state\n\t:from:to:cc:subject:date:message-id:reply-to;\n\tbh=OrR17ZcndUu6E8+nQhvZfP/G7yO3m+iusFv1/hMho8o=;\n\tb=DQjjle3Xo63E8tzDaw9QxhCGJ+inl9pH+RgJI19pZ+MsnZMpHa3OP+DGdMiiDgEAlW\n\tVX5uz2uYhqx/Qzdp2IjE9GUQc2SRWpcOVRHEmfqBzzSeP+FBBAIXGOFop2SPKYpxAuxz\n\tXDuxljOQHhgOiDdCwA/Ue92i7aQs5S+rnJvsPAE/bsnRHyk0H+9BhbYfnPj7zrPtg1Or\n\tSGCy6qmdMwB95Fc8w8UswfmNzd7nZP5C1qtniEXysOddIjlfJEM+jSM2PJlS4fFliWBN\n\tCLYCQhgVWmFFseQGZSdP14DNSSM59YJ2WbCSyba2jSxdSP+3gv0M77ODsjgfD6ADbQmf\n\t0nhQ==",
        "X-Gm-Message-State": "ACrzQf3UXujnQBHY5r3Fd5ZWjwuGIBUhzIFdWXuDqjcL70Bqy7N4AjAj\n\tb+JT+6FWZWOyG/gBj1uFLZz3jBZ71IrRTOxY",
        "X-Google-Smtp-Source": "AMsMyM6jtEjl0gSiZxmUV0Jdq4DVZUiLedWQyyWHM0MJzswgd2bIIq81eo7M8pLq5V8sItygI6x9dQ==",
        "X-Received": "by 2002:a05:6870:eca8:b0:132:df46:5c66 with SMTP id\n\teo40-20020a056870eca800b00132df465c66mr4454889oab.280.1666850126076; \n\tWed, 26 Oct 2022 22:55:26 -0700 (PDT)",
        "To": "libcamera-devel@lists.libcamera.org",
        "Date": "Thu, 27 Oct 2022 00:55:13 -0500",
        "Message-Id": "<20221027055515.321791-9-nicholas@rothemail.net>",
        "X-Mailer": "git-send-email 2.34.1",
        "In-Reply-To": "<20221027055515.321791-1-nicholas@rothemail.net>",
        "References": "<libcamera Android Enhancements>\n\t<20221027055515.321791-1-nicholas@rothemail.net>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[libcamera-devel] [PATCH 08/10] android: add makefiles to build\n\tinline with AOSP",
        "X-BeenThere": "libcamera-devel@lists.libcamera.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "<libcamera-devel.lists.libcamera.org>",
        "List-Unsubscribe": "<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>",
        "List-Archive": "<https://lists.libcamera.org/pipermail/libcamera-devel/>",
        "List-Post": "<mailto:libcamera-devel@lists.libcamera.org>",
        "List-Help": "<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>",
        "List-Subscribe": "<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>",
        "From": "Nicholas Roth via libcamera-devel <libcamera-devel@lists.libcamera.org>",
        "Reply-To": "libcamera-devel@lists.libcamera.org",
        "Cc": "nicholas@rothemail.net",
        "Errors-To": "libcamera-devel-bounces@lists.libcamera.org",
        "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"
    },
    "content": "From: Nicholas Roth <nicholas@rothemail.net>\n\nCurrently, while libcamera advertises Android support, there is no easy\nway to integrate libcamera into an Android distribution.\n\nThis commit adds makefiles that allow libcamera to build inline with\nAOSP, with one example of how to do so documented in [0].\n\nNote that meson_cross.mk is adapted from the Mesa project [1].\n\nAs Android support matures, it will be useful to document how to\nintegrate libcamera for distribution owners [Bug].\n\n[0] https://docs.google.com/document/d/1Sly_VH3w6wFIdE72WXijQegoHZh8IxEnJ9m0hH7GodU/edit\n[1] https://gitlab.freedesktop.org/mesa/mesa/-/blob/main/android/mesa3d_cross.mk\nBug https://bugs.libcamera.org/show_bug.cgi?id=164\n\nSigned-off-by: Nichoals Roth <nicholas@rothemail.net>\n---\n android/Android.mk     |  86 ++++++++++++\n android/meson_cross.mk | 298 +++++++++++++++++++++++++++++++++++++++++\n 2 files changed, 384 insertions(+)\n create mode 100644 android/Android.mk\n create mode 100644 android/meson_cross.mk",
    "diff": "diff --git a/android/Android.mk b/android/Android.mk\nnew file mode 100644\nindex 00000000..ff0d1472\n--- /dev/null\n+++ b/android/Android.mk\n@@ -0,0 +1,86 @@\n+# SPDX-License-Identifier: Apache-2.0\n+#\n+# Copyright (C) 2021, GlobalLogic Ukraine\n+# Copyright (C) 2021, Roman Stratiienko (r.stratiienko@gmail.com)\n+#\n+# Android.mk - Android makefile\n+#\n+\n+ifneq ($(filter true, $(BOARD_LIBCAMERA_USES_MESON_BUILD)),)\n+\n+LOCAL_PATH := $(call my-dir)\n+LIBCAMERA_TOP := $(dir $(LOCAL_PATH))\n+LIBCAMERA_MESON_VERSION := .0.0.1\n+\n+include $(CLEAR_VARS)\n+\n+LOCAL_SHARED_LIBRARIES := libc libexif libjpeg libyuv_chromium libdl libyaml\n+MESON_GEN_PKGCONFIGS := libexif libjpeg yaml-0.1 libyuv dl\n+\n+ifeq ($(TARGET_IS_64_BIT),true)\n+LOCAL_MULTILIB := 64\n+else\n+LOCAL_MULTILIB := 32\n+endif\n+include $(LOCAL_PATH)/meson_cross.mk\n+\n+ifdef TARGET_2ND_ARCH\n+LOCAL_MULTILIB := 32\n+include $(LOCAL_PATH)/meson_cross.mk\n+endif\n+\n+#-------------------------------------------------------------------------------\n+\n+define libcamera-lib\n+LOCAL_MODULE_CLASS := SHARED_LIBRARIES\n+LOCAL_MODULE := $1\n+LOCAL_VENDOR_MODULE := true\n+LOCAL_MODULE_RELATIVE_PATH := $2\n+ifdef TARGET_2ND_ARCH\n+LOCAL_SRC_FILES_$(TARGET_ARCH) := $(call relative_top_path,$(LOCAL_PATH))$($3)\n+LOCAL_SRC_FILES_$(TARGET_2ND_ARCH) := $(call relative_top_path,$(LOCAL_PATH))$(2ND_$3)\n+LOCAL_MULTILIB := both\n+else\n+LOCAL_SRC_FILES := $(call relative_top_path,$(LOCAL_PATH))$($3)\n+endif\n+LOCAL_CHECK_ELF_FILES := false\n+LOCAL_MODULE_SUFFIX := .so$(${4})\n+include $(BUILD_PREBUILT)\n+include $(CLEAR_VARS)\n+endef\n+\n+__MY_SHARED_LIBRARIES := $(LOCAL_SHARED_LIBRARIES)\n+include $(CLEAR_VARS)\n+LOCAL_SHARED_LIBRARIES := $(__MY_SHARED_LIBRARIES)\n+\n+# Modules 'libcamera', produces '/vendor/lib{64}/libcamera.so'\n+$(eval $(call libcamera-lib,libcamera,,LIBCAMERA_BIN,LIBCAMERA_MESON_VERSION))\n+# Modules 'libcamera-base', produces '/vendor/lib{64}/libcamera-base.so'\n+$(eval $(call libcamera-lib,libcamera-base,,LIBCAMERA_BASE_BIN,LIBCAMERA_MESON_VERSION))\n+# Modules 'ipa_rkisp1', produces '/vendor/lib{64}/ipa_rkisp1.so'\n+$(eval $(call libcamera-lib,ipa_rkisp1,,LIBCAMERA_IPA_RKISP1_BIN,))\n+# Modules 'ipa_rkisp1', produces '/vendor/lib{64}/ipa_rpi.so'\n+$(eval $(call libcamera-lib,ipa_rpi,,LIBCAMERA_IPA_RASPBERRYPI_BIN,))\n+# Modules 'ipa_rkisp1', produces '/vendor/lib{64}/ipa_ipu3.so'\n+$(eval $(call libcamera-lib,ipa_ipu3,,LIBCAMERA_IPA_IPU3_BIN,))\n+# Modules 'ipa_rkisp1', produces '/vendor/lib{64}/ipa_vimc.so'\n+$(eval $(call libcamera-lib,ipa_vimc,,LIBCAMERA_IPA_VIMC_BIN,))\n+\n+# Modules 'camera.libcamera', produces '/vendor/lib{64}/hw/camera.libcamera.so' HAL\n+$(eval $(call libcamera-lib,camera.libcamera,hw,LIBCAMERA_HAL_BIN,))\n+\n+LOCAL_SHARED_LIBRARIES += libcamera libcamera-base ipa_rkisp1 ipa_rpi ipa_ipu3 ipa_vimc\n+LOCAL_REQUIRED_MODULES := libcamera libcamera-base ipa_rkisp1 ipa_rpi ipa_ipu3 ipa_vimc\n+\n+$(shell mkdir -p $(TARGET_OUT_VENDOR_ETC)/rkisp1/)\n+$(shell mkdir -p $(TARGET_OUT_VENDOR_ETC)/rpi/)\n+$(shell mkdir -p $(TARGET_OUT_VENDOR_ETC)/ipu3/)\n+$(shell mkdir -p $(TARGET_OUT_VENDOR_ETC)/vimc/)\n+$(shell cp $(LIBCAMERA_IPA_RKISP1_CONFIGS)/* $(TARGET_OUT_VENDOR_ETC)/rkisp1/)\n+$(shell cp $(LIBCAMERA_IPA_RASPBERRYPI_CONFIGS)/* $(TARGET_OUT_VENDOR_ETC)/rpi/)\n+$(shell cp $(LIBCAMERA_IPA_IPU3_CONFIGS)/* $(TARGET_OUT_VENDOR_ETC)/ipu3/)\n+$(shell cp $(LIBCAMERA_IPA_VIMC_CONFIGS)/* $(TARGET_OUT_VENDOR_ETC)/vimc/)\n+\n+#-------------------------------------------------------------------------------\n+\n+endif\ndiff --git a/android/meson_cross.mk b/android/meson_cross.mk\nnew file mode 100644\nindex 00000000..7a222f9c\n--- /dev/null\n+++ b/android/meson_cross.mk\n@@ -0,0 +1,298 @@\n+# SPDX-License-Identifier: Apache-2.0\n+#\n+# Copyright (C) 2021, GlobalLogic Ukraine\n+# Copyright (C) 2021, Roman Stratiienko (r.stratiienko@gmail.com)\n+#\n+# meson_cross.mk - Android makefile\n+#\n+\n+# Turn \"dir1/dir2/dir3/dir4\" into \"../../../../\"\n+define relative_top_path\n+$(eval __s:=) \\\n+$(foreach tmp,$(subst /,$(space),$1),$(eval __s:=$(__s)../)) \\\n+$(__s)\n+endef\n+\n+MY_PATH := $(call my-dir)\n+\n+AOSP_ABSOLUTE_PATH := $(realpath .)\n+\n+libcam_m_dummy_$(LOCAL_MULTILIB) := $(TARGET_OUT_INTERMEDIATES)/LIBCAM_DUMMY_$(LOCAL_MULTILIB)/dummy.c\n+\n+$(libcam_m_dummy_$(LOCAL_MULTILIB)):\n+\tmkdir -p $(dir $@)\n+\ttouch $@\n+\n+LOCAL_SRC_FILES := $(call relative_top_path,$(MY_PATH))$(libcam_m_dummy_$(LOCAL_MULTILIB))\n+LOCAL_VENDOR_MODULE := true\n+LOCAL_MODULE := libcam.dummy.$(LOCAL_MULTILIB)\n+\n+# Prepare intermediate variables by AOSP make/core internals\n+include $(BUILD_SHARED_LIBRARY)\n+\n+LOCAL_PATH := $(MY_PATH)\n+\n+link_deps := \\\n+\t$(built_static_libraries) \\\n+\t$(built_shared_libraries) \\\n+\t$(built_whole_libraries) \\\n+\t$(strip $(all_objects)) \\\n+\t$(my_target_libatomic) \\\n+\t$(my_target_libcrt_builtins) \\\n+\t$(my_target_crtbegin_so_o) \\\n+\t$(my_target_crtend_so_o)\n+\n+# Build using intermediate variables provided by AOSP make/core internals\n+M_TARGET_PREFIX := $(my_2nd_arch_prefix)\n+\n+LIBCAMERA_LIB_DIR := lib$(subst 32,,$(LOCAL_MULTILIB))\n+\n+MESON_OUT_DIR                            := $($(M_TARGET_PREFIX)TARGET_OUT_INTERMEDIATES)/MESON_LIBCAMERA\n+MESON_GEN_DIR                            := $(MESON_OUT_DIR)_GEN\n+MESON_GEN_FILES_TARGET                   := $(MESON_GEN_DIR)/.timestamp\n+\n+$(M_TARGET_PREFIX)LIBCAMERA_BIN := $(MESON_OUT_DIR)/install/usr/local/lib/libcamera.so\n+$(M_TARGET_PREFIX)LIBCAMERA_HAL_BIN := $(MESON_OUT_DIR)/install/usr/local/lib/libcamera-hal.so\n+$(M_TARGET_PREFIX)LIBCAMERA_BASE_BIN := $(MESON_OUT_DIR)/install/usr/local/lib/libcamera-base.so\n+$(M_TARGET_PREFIX)LIBCAMERA_IPA_RKISP1_BIN := $(MESON_OUT_DIR)/install/usr/local/lib/libcamera/ipa_rkisp1.so\n+$(M_TARGET_PREFIX)LIBCAMERA_IPA_RASPBERRYPI_BIN := $(MESON_OUT_DIR)/install/usr/local/lib/libcamera/ipa_rpi.so\n+$(M_TARGET_PREFIX)LIBCAMERA_IPA_IPU3_BIN := $(MESON_OUT_DIR)/install/usr/local/lib/libcamera/ipa_ipu3.so\n+$(M_TARGET_PREFIX)LIBCAMERA_IPA_VIMC_BIN := $(MESON_OUT_DIR)/install/usr/local/lib/libcamera/ipa_vimc.so\n+$(M_TARGET_PREFIX)LIBCAMERA_IPA_RKISP1_CONFIGS := $(MESON_OUT_DIR)/install/usr/local/share/libcamera/ipa/rkisp1\n+$(M_TARGET_PREFIX)LIBCAMERA_IPA_RASPBERRYPI_CONFIGS := $(MESON_OUT_DIR)/install/usr/local/share/libcamera/ipa/raspberrypi\n+$(M_TARGET_PREFIX)LIBCAMERA_IPA_IPU3_CONFIGS := $(MESON_OUT_DIR)/install/usr/local/share/libcamera/ipa/ipu3\n+$(M_TARGET_PREFIX)LIBCAMERA_IPA_VIMC_CONFIGS := $(MESON_OUT_DIR)/install/usr/local/share/libcamera/ipa/vimc\n+\n+LIBCAMERA_BINS := \\\n+\t$($(M_TARGET_PREFIX)LIBCAMERA_BIN) \\\n+\t$($(M_TARGET_PREFIX)LIBCAMERA_HAL_BIN) \\\n+\t$($(M_TARGET_PREFIX)LIBCAMERA_BASE_BIN) \\\n+\t$($(M_TARGET_PREFIX)LIBCAMERA_IPA_RKISP1_BIN) \\\n+\t$($(M_TARGET_PREFIX)LIBCAMERA_IPA_RASPBERRYPI_BIN) \\\n+\t$($(M_TARGET_PREFIX)LIBCAMERA_IPA_IPU3_BIN) \\\n+\t$($(M_TARGET_PREFIX)LIBCAMERA_IPA_VIMC_BIN)\n+\n+MESON_GEN_NINJA := \\\n+\tcd $(MESON_OUT_DIR) && PATH=/usr/bin:/usr/local/bin:$$PATH meson ./build \\\n+\t--cross-file $(AOSP_ABSOLUTE_PATH)/$(MESON_GEN_DIR)/aosp_cross           \\\n+\t--buildtype=release                                                      \\\n+\t-Dandroid=enabled                                                        \\\n+\t-Dipas=$(subst $(space),$(comma),$(BOARD_LIBCAMERA_IPAS))                \\\n+\t-Dpipelines=$(subst $(space),$(comma),$(BOARD_LIBCAMERA_PIPELINES))      \\\n+\t-Dsysconfdir=/vendor/etc                                                 \\\n+\t-Dtest=false                                                             \\\n+\t-Dwerror=false                                                           \\\n+\t-Dallow_unsigned_ipas_in_process=true\n+\n+MESON_BUILD := PATH=/usr/bin:/bin:/sbin:$$PATH ninja -C $(MESON_OUT_DIR)/build\n+\n+$(MESON_GEN_FILES_TARGET): MESON_CPU_FAMILY := $(subst arm64,aarch64,$(TARGET_$(M_TARGET_PREFIX)ARCH))\n+\n+define create-pkgconfig\n+echo -e \"Name: $2\" \\\n+\t\"\\nDescription: $2\" \\\n+\t\"\\nVersion: $3\" > $1/$2.pc\n+\n+endef\n+\n+# Taken from build/make/core/binary.mk. We need this\n+# to use definitions from build/make/core/definitions.mk\n+$(MESON_GEN_FILES_TARGET): PRIVATE_GLOBAL_C_INCLUDES := $(my_target_global_c_includes)\n+$(MESON_GEN_FILES_TARGET): PRIVATE_GLOBAL_C_SYSTEM_INCLUDES := $(my_target_global_c_system_includes)\n+\n+$(MESON_GEN_FILES_TARGET): PRIVATE_TARGET_GLOBAL_CFLAGS := $(my_target_global_cflags)\n+$(MESON_GEN_FILES_TARGET): PRIVATE_TARGET_GLOBAL_CONLYFLAGS := $(my_target_global_conlyflags)\n+$(MESON_GEN_FILES_TARGET): PRIVATE_TARGET_GLOBAL_CPPFLAGS := $(my_target_global_cppflags)\n+\n+$(MESON_GEN_FILES_TARGET): PRIVATE_2ND_ARCH_VAR_PREFIX := $(M_TARGET_PREFIX)\n+$(MESON_GEN_FILES_TARGET): PRIVATE_CC := $(my_cc)\n+$(MESON_GEN_FILES_TARGET): PRIVATE_LINKER := $(my_linker)\n+$(MESON_GEN_FILES_TARGET): PRIVATE_CXX := $(my_cxx)\n+$(MESON_GEN_FILES_TARGET): PRIVATE_CXX_LINK := $(my_cxx_link)\n+$(MESON_GEN_FILES_TARGET): PRIVATE_YACCFLAGS := $(LOCAL_YACCFLAGS)\n+$(MESON_GEN_FILES_TARGET): PRIVATE_ASFLAGS := $(my_asflags)\n+$(MESON_GEN_FILES_TARGET): PRIVATE_CONLYFLAGS := $(my_conlyflags)\n+$(MESON_GEN_FILES_TARGET): PRIVATE_CFLAGS := $(my_cflags)\n+$(MESON_GEN_FILES_TARGET): PRIVATE_CPPFLAGS := $(my_cppflags)\n+$(MESON_GEN_FILES_TARGET): PRIVATE_CFLAGS_NO_OVERRIDE := $(my_cflags_no_override)\n+$(MESON_GEN_FILES_TARGET): PRIVATE_CPPFLAGS_NO_OVERRIDE := $(my_cppflags_no_override)\n+$(MESON_GEN_FILES_TARGET): PRIVATE_RTTI_FLAG := $(LOCAL_RTTI_FLAG)\n+$(MESON_GEN_FILES_TARGET): PRIVATE_DEBUG_CFLAGS := $(debug_cflags)\n+$(MESON_GEN_FILES_TARGET): PRIVATE_C_INCLUDES := $(my_c_includes)\n+$(MESON_GEN_FILES_TARGET): PRIVATE_IMPORTED_INCLUDES := $(imported_includes)\n+$(MESON_GEN_FILES_TARGET): PRIVATE_LDFLAGS := $(my_ldflags)\n+$(MESON_GEN_FILES_TARGET): PRIVATE_LDLIBS := $(my_ldlibs)\n+$(MESON_GEN_FILES_TARGET): PRIVATE_TARGET_GLOBAL_LDFLAGS := $(my_target_global_ldflags)\n+$(MESON_GEN_FILES_TARGET): PRIVATE_TIDY_CHECKS := $(my_tidy_checks)\n+$(MESON_GEN_FILES_TARGET): PRIVATE_TIDY_FLAGS := $(my_tidy_flags)\n+$(MESON_GEN_FILES_TARGET): PRIVATE_ARFLAGS := $(my_arflags)\n+$(MESON_GEN_FILES_TARGET): PRIVATE_ALL_SHARED_LIBRARIES := $(built_shared_libraries)\n+$(MESON_GEN_FILES_TARGET): PRIVATE_ALL_STATIC_LIBRARIES := $(built_static_libraries)\n+$(MESON_GEN_FILES_TARGET): PRIVATE_ALL_WHOLE_STATIC_LIBRARIES := $(built_whole_libraries)\n+$(MESON_GEN_FILES_TARGET): PRIVATE_ALL_OBJECTS := $(strip $(all_objects))\n+\n+$(MESON_GEN_FILES_TARGET): PRIVATE_ARM_CFLAGS := $(normal_objects_cflags)\n+\n+$(MESON_GEN_FILES_TARGET): PRIVATE_TARGET_LIBCRT_BUILTINS := $(my_target_libcrt_builtins)\n+$(MESON_GEN_FILES_TARGET): PRIVATE_TARGET_LIBATOMIC := $(my_target_libatomic)\n+$(MESON_GEN_FILES_TARGET): PRIVATE_TARGET_CRTBEGIN_SO_O := $(my_target_crtbegin_so_o)\n+$(MESON_GEN_FILES_TARGET): PRIVATE_TARGET_CRTEND_SO_O := $(my_target_crtend_so_o)\n+##\n+\n+define m-lld-flags\n+  -nostdlib -Wl,--gc-sections \\\n+  $(PRIVATE_TARGET_CRTBEGIN_SO_O) \\\n+  $(PRIVATE_ALL_OBJECTS) \\\n+  -Wl,--whole-archive \\\n+  $(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES) \\\n+  -Wl,--no-whole-archive \\\n+  $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--start-group) \\\n+  $(PRIVATE_ALL_STATIC_LIBRARIES) \\\n+  $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \\\n+  $(if $(filter true,$(NATIVE_COVERAGE)),$(PRIVATE_TARGET_COVERAGE_LIB)) \\\n+  $(PRIVATE_TARGET_LIBCRT_BUILTINS) \\\n+  $(PRIVATE_TARGET_LIBATOMIC) \\\n+  $(PRIVATE_TARGET_GLOBAL_LDFLAGS) \\\n+  $(PRIVATE_LDFLAGS) \\\n+  $(PRIVATE_ALL_SHARED_LIBRARIES) \\\n+  $(PRIVATE_TARGET_CRTEND_SO_O) \\\n+  $(PRIVATE_LDLIBS)\n+endef\n+\n+define m-lld-flags-cleaned\n+  $(subst prebuilts/,$(AOSP_ABSOLUTE_PATH)/prebuilts/, \\\n+  $(subst out/,$(AOSP_ABSOLUTE_PATH)/out/,             \\\n+  $(subst -Wl$(comma)--fatal-warnings,,                \\\n+  $(subst -Wl$(comma)--no-undefined-version,,          \\\n+  $(subst -Wl$(comma)--gc-sections,,                   \\\n+  $(patsubst %dummy.o,,                                \\\n+    $(m-lld-flags)))))))\n+endef\n+\n+define m-cpp-flags\n+  $(PRIVATE_TARGET_GLOBAL_CFLAGS) \\\n+  $(PRIVATE_TARGET_GLOBAL_CPPFLAGS) \\\n+  $(PRIVATE_ARM_CFLAGS) \\\n+  $(PRIVATE_RTTI_FLAG) \\\n+  $(PRIVATE_CFLAGS) \\\n+  $(PRIVATE_CPPFLAGS) \\\n+  $(PRIVATE_DEBUG_CFLAGS) \\\n+  $(PRIVATE_CFLAGS_NO_OVERRIDE) \\\n+  $(PRIVATE_CPPFLAGS_NO_OVERRIDE)\n+endef\n+\n+define m-c-flags\n+  $(PRIVATE_TARGET_GLOBAL_CFLAGS) \\\n+  $(PRIVATE_TARGET_GLOBAL_CONLYFLAGS) \\\n+  $(PRIVATE_ARM_CFLAGS) \\\n+  $(PRIVATE_CFLAGS) \\\n+  $(PRIVATE_CONLYFLAGS) \\\n+  $(PRIVATE_DEBUG_CFLAGS) \\\n+  $(PRIVATE_CFLAGS_NO_OVERRIDE)\n+endef\n+\n+define filter-c-flags\n+  $(subst -std=gnu++17,, \\\n+  $(subst -stdlib=libc++,, \\\n+  $(subst -fno-rtti,, \\\n+  $(patsubst  -W%,, \\\n+    $1))))\n+endef\n+\n+define m-c-includes-common\n+$(addprefix -I , $(PRIVATE_C_INCLUDES)) \\\n+$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),,\\\n+    $(addprefix -I ,\\\n+        $(filter-out $(PRIVATE_C_INCLUDES), \\\n+            $(PRIVATE_GLOBAL_C_INCLUDES))) \\\n+    $(addprefix -isystem ,\\\n+        $(filter-out $(PRIVATE_C_INCLUDES), \\\n+            $(PRIVATE_GLOBAL_C_SYSTEM_INCLUDES))))\n+endef\n+\n+ifeq ($(shell test $(PLATFORM_SDK_VERSION) -ge 30; echo $$?), 0)\n+# Android 11+\n+define m-c-includes\n+$(foreach i,$(PRIVATE_IMPORTED_INCLUDES),$(EXPORTS.$(i)))\\\n+$(m-c-includes-common)\n+endef\n+define postprocess-includes\n+endef\n+else\n+# Android 10,9\n+$(MESON_GEN_FILES_TARGET): PRIVATE_IMPORT_INCLUDES := $(import_includes)\n+define postprocess-includes\n+\techo \" $$(cat $(PRIVATE_IMPORT_INCLUDES)) \" > $(MESON_GEN_DIR)/import_includes && \\\n+\tsed -i  -e ':a;N;$$!ba;s/\\n/ /g'                                  \\\n+\t\t-e 's# \\{2,\\}# #g'                                        \\\n+\t\t-e 's# -isystem # -isystem#g'                             \\\n+\t\t-e 's# -I # -I#g'                                         \\\n+\t\t-e 's# -I# -I$(AOSP_ABSOLUTE_PATH)/#g'                    \\\n+\t\t-e 's# -isystem# -isystem$(AOSP_ABSOLUTE_PATH)/#g'        \\\n+\t\t-e \"s# #','#g\" $(MESON_GEN_DIR)/import_includes &&        \\\n+\tsed -i \"s#<_IMPORT_INCLUDES>#$$(cat $(MESON_GEN_DIR)/import_includes)#g\" $(MESON_GEN_DIR)/aosp_cross\n+endef\n+define m-c-includes\n+<_IMPORT_INCLUDES> $(m-c-includes-common)\n+endef\n+endif\n+\n+define m-c-abs-includes\n+  $(subst $(space)-isystem,$(space)-isystem$(AOSP_ABSOLUTE_PATH)/, \\\n+  $(subst $(space)-I, -I$(AOSP_ABSOLUTE_PATH)/, \\\n+  $(subst $(space)-I$(space),$(space)-I, \\\n+  $(subst $(space)-isystem$(space),$(space)-isystem, \\\n+    $(strip $(m-c-includes))))))\n+endef\n+\n+$(MESON_GEN_FILES_TARGET): MESON_GEN_PKGCONFIGS:=$(MESON_GEN_PKGCONFIGS)\n+$(MESON_GEN_FILES_TARGET): MESON_GEN_DIR:=$(MESON_GEN_DIR)\n+$(MESON_GEN_FILES_TARGET): $(sort $(shell find -L $(LIBCAMERA_TOP) -not -path '*/\\.*'))\n+\tmkdir -p $(dir $@)\n+\techo -e \"[properties]\\n\"                                                                                                  \\\n+\t\t\"c_args = [$(foreach flag, $(call filter-c-flags,$(m-c-flags) $(m-c-abs-includes)),'$(flag)', )'']\\n\"             \\\n+\t\t\"cpp_args = [$(foreach flag, $(call filter-c-flags,$(m-cpp-flags) $(m-c-abs-includes)),'$(flag)', )'']\\n\"         \\\n+\t\t\"c_link_args = [$(foreach flag, $(m-lld-flags-cleaned),'$(flag)',)'']\\n\"                                          \\\n+\t\t\"cpp_link_args = [$(foreach flag, $(m-lld-flags-cleaned),'$(flag)',)'']\\n\"                                        \\\n+\t\t\"needs_exe_wrapper = true\\n\"                                                                                      \\\n+\t\t\"[binaries]\\n\"                                                                                                    \\\n+\t\t\"ar = '$(AOSP_ABSOLUTE_PATH)/$($($(M_TARGET_PREFIX))TARGET_AR)'\\n\"                                                \\\n+\t\t\"c = [$(foreach arg,$(PRIVATE_CC),'$(subst prebuilts/,$(AOSP_ABSOLUTE_PATH)/prebuilts/,$(arg))',)'']\\n\"           \\\n+\t\t\"cpp = [$(foreach arg,$(PRIVATE_CXX),'$(subst prebuilts/,$(AOSP_ABSOLUTE_PATH)/prebuilts/,$(arg))',)'']\\n\"        \\\n+\t\t\"c_ld = 'lld'\\n\"                                                                                                  \\\n+\t\t\"cpp_ld = 'lld'\\n\\n\"                                                                                              \\\n+\t\t\"pkgconfig = ['env', 'PKG_CONFIG_LIBDIR=' + '$(AOSP_ABSOLUTE_PATH)/$(MESON_GEN_DIR)', '/usr/bin/pkg-config']\\n\\n\" \\\n+\t\t\"llvm-config = '/dev/null'\\n\"                                                                                     \\\n+\t\t\"[host_machine]\\n\"                                                                                                \\\n+\t\t\"system = 'linux'\\n\"                                                                                              \\\n+\t\t\"cpu_family = '$(MESON_CPU_FAMILY)'\\n\"                                                                            \\\n+\t\t\"cpu = '$(MESON_CPU_FAMILY)'\\n\"                                                                                   \\\n+\t\t\"endian = 'little'\" > $(dir $@)/aosp_cross\n+\n+\t#\n+\t$(foreach pkg, $(MESON_GEN_PKGCONFIGS), $(call create-pkgconfig,$(dir $@),$(word 1, $(subst :, ,$(pkg))),$(word 2, $(subst :, ,$(pkg)))))\n+\ttouch $@\n+\n+$(MESON_OUT_DIR)/.build.timestamp: MESON_GEN_NINJA:=$(MESON_GEN_NINJA)\n+$(MESON_OUT_DIR)/.build.timestamp: MESON_BUILD:=$(MESON_BUILD)\n+$(MESON_OUT_DIR)/.build.timestamp: $(MESON_GEN_FILES_TARGET) $(link_deps)\n+\trm -rf $(dir $@)\n+\tmkdir -p $(dir $@)\n+\tmkdir -p $(dir $@)/build\n+\t# Meson will update timestamps in sources directory, continuously retriggering the build\n+\t# even if nothing changed. Copy sources into intermediate dir to avoid this effect.\n+\tcp -r $(LIBCAMERA_TOP)/* $(dir $@)\n+\t$(MESON_GEN_NINJA)\n+\t$(MESON_BUILD)\n+\ttouch $@\n+\n+$(MESON_OUT_DIR)/install/.install.timestamp: MESON_BUILD:=$(MESON_BUILD)\n+$(MESON_OUT_DIR)/install/.install.timestamp: $(MESON_OUT_DIR)/.build.timestamp\n+\trm -rf $(dir $@)\n+\tmkdir -p $(dir $@)\n+\tDESTDIR=$(AOSP_ABSOLUTE_PATH)/$(dir $@) $(MESON_BUILD) install\n+\ttouch $@\n+\n+$(LIBCAMERA_BINS): $(MESON_OUT_DIR)/install/.install.timestamp\n+\techo \"Build $@\"\n+\ttouch $@\n",
    "prefixes": [
        "libcamera-devel",
        "08/10"
    ]
}