{"id":17720,"url":"https://patchwork.libcamera.org/api/patches/17720/?format=json","web_url":"https://patchwork.libcamera.org/patch/17720/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20221028031726.4849-9-nicholas@rothemail.net>","date":"2022-10-28T03:17:24","name":"[libcamera-devel,v5,08/10] android: add makefiles to build inline with AOSP","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"6abef6b957b7cea89ab2a0342de563095f07bb86","submitter":{"id":97,"url":"https://patchwork.libcamera.org/api/people/97/?format=json","name":"Nicolas Dufresne via libcamera-devel","email":"libcamera-devel@lists.libcamera.org"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/17720/mbox/","series":[{"id":3583,"url":"https://patchwork.libcamera.org/api/series/3583/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=3583","date":"2022-10-28T03:17:17","name":"[libcamera-devel,v5,01/10] ipa: workaround libcxx duration limitation","version":5,"mbox":"https://patchwork.libcamera.org/series/3583/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/17720/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/17720/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 D7372BD16B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 28 Oct 2022 03:17:44 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 81A9962FD1;\n\tFri, 28 Oct 2022 05:17:44 +0200 (CEST)","from mail-oi1-x22e.google.com (mail-oi1-x22e.google.com\n\t[IPv6:2607:f8b0:4864:20::22e])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 33FA962FC2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 28 Oct 2022 05:17:37 +0200 (CEST)","by mail-oi1-x22e.google.com with SMTP id u132so4980257oib.0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 27 Oct 2022 20:17:37 -0700 (PDT)","from nroth-pc.attlocal.net\n\t([2600:1700:20:20c0:293a:90ce:6463:244d])\n\tby smtp.gmail.com with ESMTPSA id\n\tfp19-20020a056870659300b0013626c1a5f6sm1527738oab.10.2022.10.27.20.17.34\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tThu, 27 Oct 2022 20:17:34 -0700 (PDT)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1666927064;\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=svD/T0/MvM/at9rbCP4ev0GSozrepvf/KnXfofjByZ/GbVZK3h28SXpGO1Sd/QzDH\n\tr1L2qU/eehhrnV9hrnr6FY0OaJ5etegZGhMm+Ljk4t/WU+/yh58835I/f1eu9pTamd\n\tMoKjPQNjuF93MZeWIvfhJ8TvUaCcVQgO+3+MLm/kLM6VvPduT87Lxx4uWvXUZ6fKJK\n\tt/ZY2HlGxEfWFJwjFl93nnZYap9+LeTZ10nLkobvrpjvgW189LicCSaT6+646sasmf\n\tDSOa3Q8N9+ALmtyNQGQcpxqkwYkMitG3mjjEFjpw1y9h2ex03xQLsCn2oAHjbmoJ77\n\t+tewqw6SV8UEQ==","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=A8G7lV+a7Xy1zltZ9rZcH0zDeEiF1+Zhy3eEX/x8DxTKIJzdy/JywZhnk7Yptbp5Ik\n\tal6/tVQFfT6Hzu/0g6HuDrctlZ32pxvoSbmaTF+xSe17CAngYnkzmDZwG7Xb8oiAruoF\n\t95jxYnjE2i9kF7dUb3PQI5MpgETuzGZxVWc4a/bEauK4ixH7iXl7yXIzRIMlPeEZ0mt+\n\tg12ZJPNCeXVEgj+YDfCuHcar5ZOEYXrBsZMlIX5SfWb1st8D82fiaDhIHjauP7ZICaab\n\tmUGbCPE/VmMSF/fFU1uilDFbGR+KxINkZWkeO8tBbzmuWeEeNAXT8glqDPjQSofck3W1\n\tC/RA=="],"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=\"A8G7lV+a\"; \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=kdBXD6fTA+1zZNtrOfZpHNkBpW41NIcEH28/pWN+72ZlaWtjsn07nRx0X30BO2z5RU\n\t76Kkuna6y1M/zC+XoRi3GpzZleQRNC3Qi+ZHPZaTh6lyL1MHzVzj8Xt98kgzuSCweLAG\n\tA4/yB5yfhqToPXDTLblK8VdFqHw23E9+ZoKBnPRRUczppWSmqKMhjYOPh8/DlIaTO90T\n\tNi1wf8bN9nU/+jZaB2q5BSeD5d5LeB282sJmPHSRZR+vK8lj05ctgdynr+SPez4Ibz7p\n\t8YrwZuCAx5VDuozXTOoXiMSCd8lIom1gYLv+TPMF0MG/UlQIIq2xMC0N6uXyZML9enLr\n\t2Y4Q==","X-Gm-Message-State":"ACrzQf1kK0zUz7Kzdr6WXGZnCQLZXNQV+nz8miHI5i07l/vs3y6FZEvz\n\t/yOePFbfMPbVyLm8UNRghBgSOWl0h3yCl3/2P6Q=","X-Google-Smtp-Source":"AMsMyM6NnQus5BGPnUvehcP9CigNJbonA4ws3JhbvmFJCOZRD86Pp3E0hxJBrZsGhgQ2ynRVB7D5FA==","X-Received":"by 2002:a05:6808:130c:b0:355:39af:eb4f with SMTP id\n\ty12-20020a056808130c00b0035539afeb4fmr7071526oiv.218.1666927055332; \n\tThu, 27 Oct 2022 20:17:35 -0700 (PDT)","To":"libcamera-devel@lists.libcamera.org","Date":"Thu, 27 Oct 2022 22:17:24 -0500","Message-Id":"<20221028031726.4849-9-nicholas@rothemail.net>","X-Mailer":"git-send-email 2.34.1","In-Reply-To":"<20221028031726.4849-1-nicholas@rothemail.net>","References":"<20221027224135.348115-1-nicholas@rothemail.net>\n\t<20221028031726.4849-1-nicholas@rothemail.net>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","Subject":"[libcamera-devel] [PATCH v5 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","v5","08/10"]}