<div dir="ltr"><a class="gmail_plusreply" id="plusReplyChip-0" href="mailto:kieran.bingham@ideasonboard.com" tabindex="-1">+Kieran Bingham</a> since Laurent is out.<br><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Oct 25, 2022 at 9:22 PM Nicholas Roth <<a href="mailto:nicholas@rothemail.net">nicholas@rothemail.net</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><div dir="ltr"><div style="font-size:12.8px"><div style="color:rgb(136,136,136);font-size:12.8px"><div style="font-size:small"><font face="arial, helvetica, sans-serif" color="#000000">> </font><span style="color:rgb(34,34,34)">The two files list third party copyrights, could you please indicate in</span></div><span style="color:rgb(34,34,34);font-size:small">> the commit message where that comes from ? A link to a git tree with the</span><br style="color:rgb(34,34,34);font-size:small"><span style="color:rgb(34,34,34);font-size:small">> code you started from would be good.</span></div><div style="color:rgb(136,136,136);font-size:12.8px"><span style="color:rgb(34,34,34);font-size:small">Happy to: </span><span style="font-size:12.8px;color:rgb(34,34,34)"><a href="https://gitlab.freedesktop.org/mesa/mesa/-/blob/main/android/mesa3d_cross.mk" target="_blank">https://gitlab.freedesktop.org/mesa/mesa/-/blob/main/android/mesa3d_cross.mk</a>. I'll make sure to include this in the commit message.</span></div><div style="font-size:12.8px"><span style="font-size:12.8px"><font color="#000000"><br></font></span></div><div style="font-size:12.8px"><font color="#000000">> I assume this variable, as well as BOARD_LIBCAMERA_IPAS and<br>> BOARD_LIBCAMERA_PIPELINES, need to be defined externally. It would be<br>> nice to add some Android build documentation to the Documentation/<br>> directory.</font></div><div style="font-size:12.8px"><font color="#000000">As this review is already quite large, I've created Bug 164 to track this. For now, would it be possible to link to my doc that covers this </font><span style="font-size:12.8px"><a href="https://docs.google.com/document/d/1Sly_VH3w6wFIdE72WXijQegoHZh8IxEnJ9m0hH7GodU/edit" target="_blank">https://docs.google.com/document/d/1Sly_VH3w6wFIdE72WXijQegoHZh8IxEnJ9m0hH7GodU/edit</a> and reference Bug 164 </span><span style="font-size:12.8px">in the commit message</span><span style="font-size:12.8px">?</span></div></div></div></div></div></div><br style="color:rgb(80,0,80)"><span style="color:rgb(80,0,80)">>> +LOCAL_PATH := $(call my-dir)</span><br style="color:rgb(80,0,80)"><span style="color:rgb(80,0,80)">>> +LIBCAMERA_TOP := $(dir $(LOCAL_PATH))</span><br style="color:rgb(80,0,80)"><span style="color:rgb(80,0,80)">>> +LIBCAMERA_MESON_VERSION := .0.0.1</span><br><div>> Is this something that can be provided by meson, to avoid hardcoding<br>> version numbers in multiple places ? Or can the utils/gen-version.sh<br>> script help ?</div><div>I will investigate whether utils/gen-version.sh can help. I believe running shell scripts is deprecated, but my copy commands at the bottom of Android.mk do the trick, so it _might_ work, at least for now.</div><div><br></div><div>> It would also be nice to avoid hardcoding the list of IPA modules (and<br>> other files below), but I suppose that would be difficult ? Or could<br>> 'meson install' be used to install the files to a directory that would<br>> then be picked by the Android build system ?<br></div><div>We already "meson install" the files to a known location. Those files have to be explicitly accessed, though, because Android needs to transform the .so files after they are built with Makefile targets. This is also why signature verification fundamentally does not work on Android.</div><div><br></div><div>Thanks for your thoughtful responses.</div><div><br></div><div>-Nicholas</div><div><br></div></div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Oct 24, 2022 at 7:08 PM Laurent Pinchart <<a href="mailto:laurent.pinchart@ideasonboard.com" target="_blank">laurent.pinchart@ideasonboard.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi Nicholas,<br>
<br>
Thank you for the patch.<br>
<br>
On Mon, Oct 24, 2022 at 12:55:41AM -0500, Nicholas Roth via libcamera-devel wrote:<br>
> From: Nicholas Roth <<a href="mailto:nicholas@rothemail.net" target="_blank">nicholas@rothemail.net</a>><br>
<br>
The two files list third party copyrights, could you please indicate in<br>
the commit message where that comes from ? A link to a git tree with the<br>
code you started from would be good.<br>
<br>
> ---<br>
> android/Android.mk | 86 ++++++++++++<br>
> android/<a href="http://meson_cross.mk" rel="noreferrer" target="_blank">meson_cross.mk</a> | 296 +++++++++++++++++++++++++++++++++++++++++<br>
> 2 files changed, 382 insertions(+)<br>
> create mode 100644 android/Android.mk<br>
> create mode 100644 android/<a href="http://meson_cross.mk" rel="noreferrer" target="_blank">meson_cross.mk</a><br>
> <br>
> diff --git a/android/Android.mk b/android/Android.mk<br>
> new file mode 100644<br>
> index 00000000..ff0d1472<br>
> --- /dev/null<br>
> +++ b/android/Android.mk<br>
> @@ -0,0 +1,86 @@<br>
> +# SPDX-License-Identifier: Apache-2.0<br>
> +#<br>
> +# Copyright (C) 2021, GlobalLogic Ukraine<br>
> +# Copyright (C) 2021, Roman Stratiienko (<a href="mailto:r.stratiienko@gmail.com" target="_blank">r.stratiienko@gmail.com</a>)<br>
> +#<br>
> +# Android.mk - Android makefile<br>
> +#<br>
> +<br>
> +ifneq ($(filter true, $(BOARD_LIBCAMERA_USES_MESON_BUILD)),)<br>
<br>
I assume this variable, as well as BOARD_LIBCAMERA_IPAS and<br>
BOARD_LIBCAMERA_PIPELINES, need to be defined externally. It would be<br>
nice to add some Android build documentation to the Documentation/<br>
directory.<br>
<br>
> +<br>
> +LOCAL_PATH := $(call my-dir)<br>
> +LIBCAMERA_TOP := $(dir $(LOCAL_PATH))<br>
> +LIBCAMERA_MESON_VERSION := .0.0.1<br>
<br>
Is this something that can be provided by meson, to avoid hardcoding<br>
version numbers in multiple places ? Or can the utils/gen-version.sh<br>
script help ?<br>
<br>
> +<br>
> +include $(CLEAR_VARS)<br>
> +<br>
> +LOCAL_SHARED_LIBRARIES := libc libexif libjpeg libyuv_chromium libdl libyaml<br>
> +MESON_GEN_PKGCONFIGS := libexif libjpeg yaml-0.1 libyuv dl<br>
> +<br>
> +ifeq ($(TARGET_IS_64_BIT),true)<br>
> +LOCAL_MULTILIB := 64<br>
> +else<br>
> +LOCAL_MULTILIB := 32<br>
> +endif<br>
> +include $(LOCAL_PATH)/<a href="http://meson_cross.mk" rel="noreferrer" target="_blank">meson_cross.mk</a><br>
> +<br>
> +ifdef TARGET_2ND_ARCH<br>
> +LOCAL_MULTILIB := 32<br>
> +include $(LOCAL_PATH)/<a href="http://meson_cross.mk" rel="noreferrer" target="_blank">meson_cross.mk</a><br>
> +endif<br>
> +<br>
> +#-------------------------------------------------------------------------------<br>
> +<br>
> +define libcamera-lib<br>
> +LOCAL_MODULE_CLASS := SHARED_LIBRARIES<br>
> +LOCAL_MODULE := $1<br>
> +LOCAL_VENDOR_MODULE := true<br>
> +LOCAL_MODULE_RELATIVE_PATH := $2<br>
> +ifdef TARGET_2ND_ARCH<br>
> +LOCAL_SRC_FILES_$(TARGET_ARCH) := $(call relative_top_path,$(LOCAL_PATH))$($3)<br>
> +LOCAL_SRC_FILES_$(TARGET_2ND_ARCH) := $(call relative_top_path,$(LOCAL_PATH))$(2ND_$3)<br>
> +LOCAL_MULTILIB := both<br>
> +else<br>
> +LOCAL_SRC_FILES := $(call relative_top_path,$(LOCAL_PATH))$($3)<br>
> +endif<br>
> +LOCAL_CHECK_ELF_FILES := false<br>
> +LOCAL_MODULE_SUFFIX := .so$(${4})<br>
> +include $(BUILD_PREBUILT)<br>
> +include $(CLEAR_VARS)<br>
> +endef<br>
> +<br>
> +__MY_SHARED_LIBRARIES := $(LOCAL_SHARED_LIBRARIES)<br>
> +include $(CLEAR_VARS)<br>
> +LOCAL_SHARED_LIBRARIES := $(__MY_SHARED_LIBRARIES)<br>
> +<br>
> +# Modules 'libcamera', produces '/vendor/lib{64}/libcamera.so'<br>
> +$(eval $(call libcamera-lib,libcamera,,LIBCAMERA_BIN,LIBCAMERA_MESON_VERSION))<br>
> +# Modules 'libcamera-base', produces '/vendor/lib{64}/libcamera-base.so'<br>
> +$(eval $(call libcamera-lib,libcamera-base,,LIBCAMERA_BASE_BIN,LIBCAMERA_MESON_VERSION))<br>
> +# Modules 'ipa_rkisp1', produces '/vendor/lib{64}/ipa_rkisp1.so'<br>
> +$(eval $(call libcamera-lib,ipa_rkisp1,,LIBCAMERA_IPA_RKISP1_BIN,))<br>
<br>
It would also be nice to avoid hardcoding the list of IPA modules (and<br>
other files below), but I suppose that would be difficult ? Or could<br>
'meson install' be used to install the files to a directory that would<br>
then be picked by the Android build system ?<br>
<br>
> +# Modules 'ipa_rkisp1', produces '/vendor/lib{64}/ipa_rpi.so'<br>
> +$(eval $(call libcamera-lib,ipa_rpi,,LIBCAMERA_IPA_RASPBERRYPI_BIN,))<br>
> +# Modules 'ipa_rkisp1', produces '/vendor/lib{64}/ipa_ipu3.so'<br>
> +$(eval $(call libcamera-lib,ipa_ipu3,,LIBCAMERA_IPA_IPU3_BIN,))<br>
> +# Modules 'ipa_rkisp1', produces '/vendor/lib{64}/ipa_vimc.so'<br>
> +$(eval $(call libcamera-lib,ipa_vimc,,LIBCAMERA_IPA_VIMC_BIN,))<br>
> +<br>
> +# Modules 'camera.libcamera', produces '/vendor/lib{64}/hw/<a href="http://camera.libcamera.so" rel="noreferrer" target="_blank">camera.libcamera.so</a>' HAL<br>
> +$(eval $(call libcamera-lib,camera.libcamera,hw,LIBCAMERA_HAL_BIN,))<br>
> +<br>
> +LOCAL_SHARED_LIBRARIES += libcamera libcamera-base ipa_rkisp1 ipa_rpi ipa_ipu3 ipa_vimc<br>
> +LOCAL_REQUIRED_MODULES := libcamera libcamera-base ipa_rkisp1 ipa_rpi ipa_ipu3 ipa_vimc<br>
> +<br>
> +$(shell mkdir -p $(TARGET_OUT_VENDOR_ETC)/rkisp1/)<br>
> +$(shell mkdir -p $(TARGET_OUT_VENDOR_ETC)/rpi/)<br>
> +$(shell mkdir -p $(TARGET_OUT_VENDOR_ETC)/ipu3/)<br>
> +$(shell mkdir -p $(TARGET_OUT_VENDOR_ETC)/vimc/)<br>
> +$(shell cp $(LIBCAMERA_IPA_RKISP1_CONFIGS)/* $(TARGET_OUT_VENDOR_ETC)/rkisp1/)<br>
> +$(shell cp $(LIBCAMERA_IPA_RASPBERRYPI_CONFIGS)/* $(TARGET_OUT_VENDOR_ETC)/rpi/)<br>
> +$(shell cp $(LIBCAMERA_IPA_IPU3_CONFIGS)/* $(TARGET_OUT_VENDOR_ETC)/ipu3/)<br>
> +$(shell cp $(LIBCAMERA_IPA_VIMC_CONFIGS)/* $(TARGET_OUT_VENDOR_ETC)/vimc/)<br>
> +<br>
> +#-------------------------------------------------------------------------------<br>
> +<br>
> +endif<br>
> diff --git a/android/<a href="http://meson_cross.mk" rel="noreferrer" target="_blank">meson_cross.mk</a> b/android/<a href="http://meson_cross.mk" rel="noreferrer" target="_blank">meson_cross.mk</a><br>
> new file mode 100644<br>
> index 00000000..bb1661cd<br>
> --- /dev/null<br>
> +++ b/android/<a href="http://meson_cross.mk" rel="noreferrer" target="_blank">meson_cross.mk</a><br>
> @@ -0,0 +1,296 @@<br>
> +# SPDX-License-Identifier: Apache-2.0<br>
> +#<br>
> +# Copyright (C) 2021, GlobalLogic Ukraine<br>
> +# Copyright (C) 2021, Roman Stratiienko (<a href="mailto:r.stratiienko@gmail.com" target="_blank">r.stratiienko@gmail.com</a>)<br>
> +#<br>
> +# <a href="http://meson_cross.mk" rel="noreferrer" target="_blank">meson_cross.mk</a> - Android makefile<br>
> +#<br>
> +<br>
> +# Turn "dir1/dir2/dir3/dir4" into "../../../../"<br>
> +define relative_top_path<br>
> +$(eval __s:=) \<br>
> +$(foreach tmp,$(subst /,$(space),$1),$(eval __s:=$(__s)../)) \<br>
> +$(__s)<br>
> +endef<br>
> +<br>
> +MY_PATH := $(call my-dir)<br>
> +<br>
> +AOSP_ABSOLUTE_PATH := $(realpath .)<br>
> +<br>
> +libcam_m_dummy_$(LOCAL_MULTILIB) := $(TARGET_OUT_INTERMEDIATES)/LIBCAM_DUMMY_$(LOCAL_MULTILIB)/dummy.c<br>
> +<br>
> +$(libcam_m_dummy_$(LOCAL_MULTILIB)):<br>
> + mkdir -p $(dir $@)<br>
> + touch $@<br>
> +<br>
> +LOCAL_SRC_FILES := $(call relative_top_path,$(MY_PATH))$(libcam_m_dummy_$(LOCAL_MULTILIB))<br>
> +LOCAL_VENDOR_MODULE := true<br>
> +LOCAL_MODULE := libcam.dummy.$(LOCAL_MULTILIB)<br>
> +<br>
> +# Prepare intermediate variables by AOSP make/core internals<br>
> +include $(BUILD_SHARED_LIBRARY)<br>
> +<br>
> +LOCAL_PATH := $(MY_PATH)<br>
> +<br>
> +link_deps := \<br>
> + $(built_static_libraries) \<br>
> + $(built_shared_libraries) \<br>
> + $(built_whole_libraries) \<br>
> + $(strip $(all_objects)) \<br>
> + $(my_target_libatomic) \<br>
> + $(my_target_libcrt_builtins) \<br>
> + $(my_target_crtbegin_so_o) \<br>
> + $(my_target_crtend_so_o)<br>
> +<br>
> +# Build using intermediate variables provided by AOSP make/core internals<br>
> +M_TARGET_PREFIX := $(my_2nd_arch_prefix)<br>
> +<br>
> +LIBCAMERA_LIB_DIR := lib$(subst 32,,$(LOCAL_MULTILIB))<br>
> +<br>
> +MESON_OUT_DIR := $($(M_TARGET_PREFIX)TARGET_OUT_INTERMEDIATES)/MESON_LIBCAMERA<br>
> +MESON_GEN_DIR := $(MESON_OUT_DIR)_GEN<br>
> +MESON_GEN_FILES_TARGET := $(MESON_GEN_DIR)/.timestamp<br>
> +<br>
> +$(M_TARGET_PREFIX)LIBCAMERA_BIN := $(MESON_OUT_DIR)/install/usr/local/lib/libcamera.so<br>
> +$(M_TARGET_PREFIX)LIBCAMERA_HAL_BIN := $(MESON_OUT_DIR)/install/usr/local/lib/libcamera-hal.so<br>
> +$(M_TARGET_PREFIX)LIBCAMERA_BASE_BIN := $(MESON_OUT_DIR)/install/usr/local/lib/libcamera-base.so<br>
> +$(M_TARGET_PREFIX)LIBCAMERA_IPA_RKISP1_BIN := $(MESON_OUT_DIR)/install/usr/local/lib/libcamera/ipa_rkisp1.so<br>
> +$(M_TARGET_PREFIX)LIBCAMERA_IPA_RASPBERRYPI_BIN := $(MESON_OUT_DIR)/install/usr/local/lib/libcamera/ipa_rpi.so<br>
> +$(M_TARGET_PREFIX)LIBCAMERA_IPA_IPU3_BIN := $(MESON_OUT_DIR)/install/usr/local/lib/libcamera/ipa_ipu3.so<br>
> +$(M_TARGET_PREFIX)LIBCAMERA_IPA_VIMC_BIN := $(MESON_OUT_DIR)/install/usr/local/lib/libcamera/ipa_vimc.so<br>
> +$(M_TARGET_PREFIX)LIBCAMERA_IPA_RKISP1_CONFIGS := $(MESON_OUT_DIR)/install/usr/local/share/libcamera/ipa/rkisp1<br>
> +$(M_TARGET_PREFIX)LIBCAMERA_IPA_RASPBERRYPI_CONFIGS := $(MESON_OUT_DIR)/install/usr/local/share/libcamera/ipa/raspberrypi<br>
> +$(M_TARGET_PREFIX)LIBCAMERA_IPA_IPU3_CONFIGS := $(MESON_OUT_DIR)/install/usr/local/share/libcamera/ipa/ipu3<br>
> +$(M_TARGET_PREFIX)LIBCAMERA_IPA_VIMC_CONFIGS := $(MESON_OUT_DIR)/install/usr/local/share/libcamera/ipa/vimc<br>
> +<br>
> +LIBCAMERA_BINS := \<br>
> + $($(M_TARGET_PREFIX)LIBCAMERA_BIN) \<br>
> + $($(M_TARGET_PREFIX)LIBCAMERA_HAL_BIN) \<br>
> + $($(M_TARGET_PREFIX)LIBCAMERA_BASE_BIN) \<br>
> + $($(M_TARGET_PREFIX)LIBCAMERA_IPA_RKISP1_BIN) \<br>
> + $($(M_TARGET_PREFIX)LIBCAMERA_IPA_RASPBERRYPI_BIN) \<br>
> + $($(M_TARGET_PREFIX)LIBCAMERA_IPA_IPU3_BIN) \<br>
> + $($(M_TARGET_PREFIX)LIBCAMERA_IPA_VIMC_BIN)<br>
> +<br>
> +MESON_GEN_NINJA := \<br>
> + cd $(MESON_OUT_DIR) && PATH=/usr/bin:/usr/local/bin:$$PATH meson ./build \<br>
> + --cross-file $(AOSP_ABSOLUTE_PATH)/$(MESON_GEN_DIR)/aosp_cross \<br>
> + --buildtype=release \<br>
> + -Dandroid=enabled \<br>
> + -Dipas=$(subst $(space),$(comma),$(BOARD_LIBCAMERA_IPAS)) \<br>
> + -Dpipelines=$(subst $(space),$(comma),$(BOARD_LIBCAMERA_PIPELINES)) \<br>
> + -Dsysconfdir=/vendor/etc \<br>
> + -Dtest=false \<br>
> + -Dallow_unsigned_ipas_in_process=true<br>
> +<br>
> +MESON_BUILD := PATH=/usr/bin:/bin:/sbin:$$PATH ninja -C $(MESON_OUT_DIR)/build<br>
> +<br>
> +$(MESON_GEN_FILES_TARGET): MESON_CPU_FAMILY := $(subst arm64,aarch64,$(TARGET_$(M_TARGET_PREFIX)ARCH))<br>
> +<br>
> +define create-pkgconfig<br>
> +echo -e "Name: $2" \<br>
> + "\nDescription: $2" \<br>
> + "\nVersion: $3" > $1/$2.pc<br>
> +<br>
> +endef<br>
> +<br>
> +# Taken from build/make/core/<a href="http://binary.mk" rel="noreferrer" target="_blank">binary.mk</a>. We need this<br>
> +# to use definitions from build/make/core/<a href="http://definitions.mk" rel="noreferrer" target="_blank">definitions.mk</a><br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_GLOBAL_C_INCLUDES := $(my_target_global_c_includes)<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_GLOBAL_C_SYSTEM_INCLUDES := $(my_target_global_c_system_includes)<br>
> +<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_TARGET_GLOBAL_CFLAGS := $(my_target_global_cflags)<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_TARGET_GLOBAL_CONLYFLAGS := $(my_target_global_conlyflags)<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_TARGET_GLOBAL_CPPFLAGS := $(my_target_global_cppflags)<br>
> +<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_2ND_ARCH_VAR_PREFIX := $(M_TARGET_PREFIX)<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_CC := $(my_cc)<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_LINKER := $(my_linker)<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_CXX := $(my_cxx)<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_CXX_LINK := $(my_cxx_link)<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_YACCFLAGS := $(LOCAL_YACCFLAGS)<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_ASFLAGS := $(my_asflags)<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_CONLYFLAGS := $(my_conlyflags)<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_CFLAGS := $(my_cflags)<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_CPPFLAGS := $(my_cppflags)<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_CFLAGS_NO_OVERRIDE := $(my_cflags_no_override)<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_CPPFLAGS_NO_OVERRIDE := $(my_cppflags_no_override)<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_RTTI_FLAG := $(LOCAL_RTTI_FLAG)<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_DEBUG_CFLAGS := $(debug_cflags)<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_C_INCLUDES := $(my_c_includes)<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_IMPORTED_INCLUDES := $(imported_includes)<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_LDFLAGS := $(my_ldflags)<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_LDLIBS := $(my_ldlibs)<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_TARGET_GLOBAL_LDFLAGS := $(my_target_global_ldflags)<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_TIDY_CHECKS := $(my_tidy_checks)<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_TIDY_FLAGS := $(my_tidy_flags)<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_ARFLAGS := $(my_arflags)<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_ALL_SHARED_LIBRARIES := $(built_shared_libraries)<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_ALL_STATIC_LIBRARIES := $(built_static_libraries)<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_ALL_WHOLE_STATIC_LIBRARIES := $(built_whole_libraries)<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_ALL_OBJECTS := $(strip $(all_objects))<br>
> +<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_ARM_CFLAGS := $(normal_objects_cflags)<br>
> +<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_TARGET_LIBCRT_BUILTINS := $(my_target_libcrt_builtins)<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_TARGET_LIBATOMIC := $(my_target_libatomic)<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_TARGET_CRTBEGIN_SO_O := $(my_target_crtbegin_so_o)<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_TARGET_CRTEND_SO_O := $(my_target_crtend_so_o)<br>
> +##<br>
> +<br>
> +define m-lld-flags<br>
> + -nostdlib -Wl,--gc-sections \<br>
> + $(PRIVATE_TARGET_CRTBEGIN_SO_O) \<br>
> + $(PRIVATE_ALL_OBJECTS) \<br>
> + -Wl,--whole-archive \<br>
> + $(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES) \<br>
> + -Wl,--no-whole-archive \<br>
> + $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--start-group) \<br>
> + $(PRIVATE_ALL_STATIC_LIBRARIES) \<br>
> + $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \<br>
> + $(if $(filter true,$(NATIVE_COVERAGE)),$(PRIVATE_TARGET_COVERAGE_LIB)) \<br>
> + $(PRIVATE_TARGET_LIBCRT_BUILTINS) \<br>
> + $(PRIVATE_TARGET_LIBATOMIC) \<br>
> + $(PRIVATE_TARGET_GLOBAL_LDFLAGS) \<br>
> + $(PRIVATE_LDFLAGS) \<br>
> + $(PRIVATE_ALL_SHARED_LIBRARIES) \<br>
> + $(PRIVATE_TARGET_CRTEND_SO_O) \<br>
> + $(PRIVATE_LDLIBS)<br>
> +endef<br>
> +<br>
> +define m-lld-flags-cleaned<br>
> + $(subst prebuilts/,$(AOSP_ABSOLUTE_PATH)/prebuilts/, \<br>
> + $(subst out/,$(AOSP_ABSOLUTE_PATH)/out/, \<br>
> + $(subst -Wl$(comma)--fatal-warnings,, \<br>
> + $(subst -Wl$(comma)--no-undefined-version,, \<br>
> + $(subst -Wl$(comma)--gc-sections,, \<br>
> + $(patsubst %dummy.o,, \<br>
> + $(m-lld-flags)))))))<br>
> +endef<br>
> +<br>
> +define m-cpp-flags<br>
> + $(PRIVATE_TARGET_GLOBAL_CFLAGS) \<br>
> + $(PRIVATE_TARGET_GLOBAL_CPPFLAGS) \<br>
> + $(PRIVATE_ARM_CFLAGS) \<br>
> + $(PRIVATE_RTTI_FLAG) \<br>
> + $(PRIVATE_CFLAGS) \<br>
> + $(PRIVATE_CPPFLAGS) \<br>
> + $(PRIVATE_DEBUG_CFLAGS) \<br>
> + $(PRIVATE_CFLAGS_NO_OVERRIDE) \<br>
> + $(PRIVATE_CPPFLAGS_NO_OVERRIDE)<br>
> +endef<br>
> +<br>
> +define m-c-flags<br>
> + $(PRIVATE_TARGET_GLOBAL_CFLAGS) \<br>
> + $(PRIVATE_TARGET_GLOBAL_CONLYFLAGS) \<br>
> + $(PRIVATE_ARM_CFLAGS) \<br>
> + $(PRIVATE_CFLAGS) \<br>
> + $(PRIVATE_CONLYFLAGS) \<br>
> + $(PRIVATE_DEBUG_CFLAGS) \<br>
> + $(PRIVATE_CFLAGS_NO_OVERRIDE)<br>
> +endef<br>
> +<br>
> +define filter-c-flags<br>
> + $(subst -std=gnu++17,, \<br>
> + $(subst -fno-rtti,, \<br>
> + $(patsubst -W%,, \<br>
> + $1)))<br>
> +endef<br>
> +<br>
> +define m-c-includes-common<br>
> +$(addprefix -I , $(PRIVATE_C_INCLUDES)) \<br>
> +$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),,\<br>
> + $(addprefix -I ,\<br>
> + $(filter-out $(PRIVATE_C_INCLUDES), \<br>
> + $(PRIVATE_GLOBAL_C_INCLUDES))) \<br>
> + $(addprefix -isystem ,\<br>
> + $(filter-out $(PRIVATE_C_INCLUDES), \<br>
> + $(PRIVATE_GLOBAL_C_SYSTEM_INCLUDES))))<br>
> +endef<br>
> +<br>
> +ifeq ($(shell test $(PLATFORM_SDK_VERSION) -ge 30; echo $$?), 0)<br>
> +# Android 11+<br>
> +define m-c-includes<br>
> +$(foreach i,$(PRIVATE_IMPORTED_INCLUDES),$(EXPORTS.$(i)))\<br>
> +$(m-c-includes-common)<br>
> +endef<br>
> +define postprocess-includes<br>
> +endef<br>
> +else<br>
> +# Android 10,9<br>
> +$(MESON_GEN_FILES_TARGET): PRIVATE_IMPORT_INCLUDES := $(import_includes)<br>
> +define postprocess-includes<br>
> + echo " $$(cat $(PRIVATE_IMPORT_INCLUDES)) " > $(MESON_GEN_DIR)/import_includes && \<br>
> + sed -i -e ':a;N;$$!ba;s/\n/ /g' \<br>
> + -e 's# \{2,\}# #g' \<br>
> + -e 's# -isystem # -isystem#g' \<br>
> + -e 's# -I # -I#g' \<br>
> + -e 's# -I# -I$(AOSP_ABSOLUTE_PATH)/#g' \<br>
> + -e 's# -isystem# -isystem$(AOSP_ABSOLUTE_PATH)/#g' \<br>
> + -e "s# #','#g" $(MESON_GEN_DIR)/import_includes && \<br>
> + sed -i "s#<_IMPORT_INCLUDES>#$$(cat $(MESON_GEN_DIR)/import_includes)#g" $(MESON_GEN_DIR)/aosp_cross<br>
> +endef<br>
> +define m-c-includes<br>
> +<_IMPORT_INCLUDES> $(m-c-includes-common)<br>
> +endef<br>
> +endif<br>
> +<br>
> +define m-c-abs-includes<br>
> + $(subst $(space)-isystem,$(space)-isystem$(AOSP_ABSOLUTE_PATH)/, \<br>
> + $(subst $(space)-I, -I$(AOSP_ABSOLUTE_PATH)/, \<br>
> + $(subst $(space)-I$(space),$(space)-I, \<br>
> + $(subst $(space)-isystem$(space),$(space)-isystem, \<br>
> + $(strip $(m-c-includes))))))<br>
> +endef<br>
> +<br>
> +$(MESON_GEN_FILES_TARGET): MESON_GEN_PKGCONFIGS:=$(MESON_GEN_PKGCONFIGS)<br>
> +$(MESON_GEN_FILES_TARGET): MESON_GEN_DIR:=$(MESON_GEN_DIR)<br>
> +$(MESON_GEN_FILES_TARGET): $(sort $(shell find -L $(LIBCAMERA_TOP) -not -path '*/\.*'))<br>
> + mkdir -p $(dir $@)<br>
> + echo -e "[properties]\n" \<br>
> + "c_args = [$(foreach flag, $(call filter-c-flags,$(m-c-flags) $(m-c-abs-includes)),'$(flag)', )'']\n" \<br>
> + "cpp_args = [$(foreach flag, $(call filter-c-flags,$(m-cpp-flags) $(m-c-abs-includes)),'$(flag)', )'']\n" \<br>
> + "c_link_args = [$(foreach flag, $(m-lld-flags-cleaned),'$(flag)',)'']\n" \<br>
> + "cpp_link_args = [$(foreach flag, $(m-lld-flags-cleaned),'$(flag)',)'']\n" \<br>
> + "needs_exe_wrapper = true\n" \<br>
> + "[binaries]\n" \<br>
> + "ar = '$(AOSP_ABSOLUTE_PATH)/$($($(M_TARGET_PREFIX))TARGET_AR)'\n" \<br>
> + "c = [$(foreach arg,$(PRIVATE_CC),'$(subst prebuilts/,$(AOSP_ABSOLUTE_PATH)/prebuilts/,$(arg))',)'']\n" \<br>
> + "cpp = [$(foreach arg,$(PRIVATE_CXX),'$(subst prebuilts/,$(AOSP_ABSOLUTE_PATH)/prebuilts/,$(arg))',)'']\n" \<br>
> + "c_ld = 'lld'\n" \<br>
> + "cpp_ld = 'lld'\n\n" \<br>
> + "pkgconfig = ['env', 'PKG_CONFIG_LIBDIR=' + '$(AOSP_ABSOLUTE_PATH)/$(MESON_GEN_DIR)', '/usr/bin/pkg-config']\n\n" \<br>
> + "llvm-config = '/dev/null'\n" \<br>
> + "[host_machine]\n" \<br>
> + "system = 'linux'\n" \<br>
> + "cpu_family = '$(MESON_CPU_FAMILY)'\n" \<br>
> + "cpu = '$(MESON_CPU_FAMILY)'\n" \<br>
> + "endian = 'little'" > $(dir $@)/aosp_cross<br>
> +<br>
> + #<br>
> + $(foreach pkg, $(MESON_GEN_PKGCONFIGS), $(call create-pkgconfig,$(dir $@),$(word 1, $(subst :, ,$(pkg))),$(word 2, $(subst :, ,$(pkg)))))<br>
> + touch $@<br>
> +<br>
> +$(MESON_OUT_DIR)/.build.timestamp: MESON_GEN_NINJA:=$(MESON_GEN_NINJA)<br>
> +$(MESON_OUT_DIR)/.build.timestamp: MESON_BUILD:=$(MESON_BUILD)<br>
> +$(MESON_OUT_DIR)/.build.timestamp: $(MESON_GEN_FILES_TARGET) $(link_deps)<br>
> + rm -rf $(dir $@)<br>
> + mkdir -p $(dir $@)<br>
> + mkdir -p $(dir $@)/build<br>
> + # Meson will update timestamps in sources directory, continuously retriggering the build<br>
> + # even if nothing changed. Copy sources into intermediate dir to avoid this effect.<br>
> + cp -r $(LIBCAMERA_TOP)/* $(dir $@)<br>
> + $(MESON_GEN_NINJA)<br>
> + $(MESON_BUILD)<br>
> + touch $@<br>
> +<br>
> +$(MESON_OUT_DIR)/install/.install.timestamp: MESON_BUILD:=$(MESON_BUILD)<br>
> +$(MESON_OUT_DIR)/install/.install.timestamp: $(MESON_OUT_DIR)/.build.timestamp<br>
> + rm -rf $(dir $@)<br>
> + mkdir -p $(dir $@)<br>
> + DESTDIR=$(AOSP_ABSOLUTE_PATH)/$(dir $@) $(MESON_BUILD) install<br>
> + touch $@<br>
> +<br>
> +$(LIBCAMERA_BINS): $(MESON_OUT_DIR)/install/.install.timestamp<br>
> + echo "Build $@"<br>
> + touch $@<br>
<br>
-- <br>
Regards,<br>
<br>
Laurent Pinchart<br>
</blockquote></div></div>
</blockquote></div>