diff --git a/core/Makefile b/core/Makefile index 5b3c4c9149..83683a0a11 100644 --- a/core/Makefile +++ b/core/Makefile @@ -39,6 +39,16 @@ $(if $(filter true,$(BUILD_BROKEN_VINTF_PRODUCT_COPY_FILES)),, \ use ODM_MANIFEST_FILES / vintf_fragments instead!)) \ ) endef + +# TODO(b/140560012): Flip BUILD_BROKEN_ELF_PREBUILT_PRODUCT_COPY_FILES to default +# false after all problematic devices are tagged. +check_elf_prebuilt_product_copy_files := +ifneq (,$(filter false,$(BUILD_BROKEN_ELF_PREBUILT_PRODUCT_COPY_FILES))) +check_elf_prebuilt_product_copy_files := true +endif +check_elf_prebuilt_product_copy_files_hint := \ + found ELF prebuilt in PRODUCT_COPY_FILES, use cc_prebuilt_binary / cc_prebuilt_library_shared instead. + # filter out the duplicate : pairs. unique_product_copy_files_pairs := $(foreach cf,$(PRODUCT_COPY_FILES), \ @@ -59,7 +69,10 @@ $(foreach cf,$(unique_product_copy_files_pairs), \ $(eval $(call copy-and-uncompress-dexs,$(_src),$(_fulldest))), \ $(if $(filter init%rc,$(notdir $(_dest)))$(filter %/etc/init,$(dir $(_dest))),\ $(eval $(call copy-init-script-file-checked,$(_src),$(_fulldest))),\ - $(eval $(call copy-one-file,$(_src),$(_fulldest)))))) \ + $(if $(and $(filter true,$(check_elf_prebuilt_product_copy_files)), \ + $(filter bin lib lib64,$(subst /,$(space),$(_dest)))), \ + $(eval $(call copy-non-elf-file-checked,$(_src),$(_fulldest),$(check_elf_prebuilt_product_copy_files_hint))), \ + $(eval $(call copy-one-file,$(_src),$(_fulldest))))))) \ $(eval unique_product_copy_files_destinations += $(_dest)))) # Dump a list of overriden (and ignored PRODUCT_COPY_FILES entries) diff --git a/core/board_config.mk b/core/board_config.mk index a329cb1f25..2279c3f10e 100644 --- a/core/board_config.mk +++ b/core/board_config.mk @@ -87,6 +87,7 @@ _board_strip_readonly_list += $(_dynamic_partitions_var_list) _build_broken_var_list := \ BUILD_BROKEN_DUP_RULES \ + BUILD_BROKEN_ELF_PREBUILT_PRODUCT_COPY_FILES \ BUILD_BROKEN_OUTSIDE_INCLUDE_DIRS \ BUILD_BROKEN_PREBUILT_ELF_FILES \ BUILD_BROKEN_TREBLE_SYSPROP_NEVERALLOW \ diff --git a/core/definitions.mk b/core/definitions.mk index b714bdb02d..cd92848e01 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -2552,6 +2552,22 @@ $(foreach f, $(1), $(strip \ $(_cmf_dest))) endef +# Copy the file only if it's not an ELF file. For use via $(eval). +# $(1): source file +# $(2): destination file +# $(3): message to print on error +define copy-non-elf-file-checked +$(2): $(1) $(LLVM_READOBJ) + @echo "Copy non-ELF: $$@" + $(hide) \ + if $(LLVM_READOBJ) -h $$< >/dev/null 2>&1; then \ + $(call echo-error,$$@,$(3)); \ + $(call echo-error,$$@,found ELF file: $$<); \ + false; \ + fi + $$(copy-file-to-target) +endef + # The -t option to acp and the -p option to cp is # required for OSX. OSX has a ridiculous restriction # where it's an error for a .a file's modification time