2009-03-04 04:28:42 +01:00
|
|
|
# Put some miscellaneous rules here
|
|
|
|
|
2014-03-02 00:32:04 +01:00
|
|
|
# HACK: clear LOCAL_PATH from including last build target before calling
|
|
|
|
# intermedites-dir-for
|
|
|
|
LOCAL_PATH := $(BUILD_SYSTEM)
|
|
|
|
|
2009-03-04 04:28:42 +01:00
|
|
|
# Pick a reasonable string to use to identify files.
|
2017-02-22 02:23:02 +01:00
|
|
|
ifneq (,$(filter eng.%,$(BUILD_NUMBER)))
|
2009-03-04 04:28:42 +01:00
|
|
|
# BUILD_NUMBER has a timestamp in it, which means that
|
|
|
|
# it will change every time. Pick a stable value.
|
|
|
|
FILE_NAME_TAG := eng.$(USER)
|
|
|
|
else
|
|
|
|
FILE_NAME_TAG := $(BUILD_NUMBER)
|
|
|
|
endif
|
|
|
|
|
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# Define rules to copy PRODUCT_COPY_FILES defined by the product.
|
2012-09-21 01:35:36 +02:00
|
|
|
# PRODUCT_COPY_FILES contains words like <source file>:<dest file>[:<owner>].
|
2009-03-04 04:28:42 +01:00
|
|
|
# <dest file> is relative to $(PRODUCT_OUT), so it should look like,
|
|
|
|
# e.g., "system/etc/file.xml".
|
2010-03-02 01:18:59 +01:00
|
|
|
# The filter part means "only eval the copy-one-file rule if this
|
2010-11-03 05:31:47 +01:00
|
|
|
# src:dest pair is the first one to match the same dest"
|
2011-09-29 22:23:25 +02:00
|
|
|
#$(1): the src:dest pair
|
|
|
|
define check-product-copy-files
|
2014-01-22 05:25:46 +01:00
|
|
|
$(if $(filter %.apk, $(call word-colon, 2, $(1))),$(error \
|
2011-09-29 22:23:25 +02:00
|
|
|
Prebuilt apk found in PRODUCT_COPY_FILES: $(1), use BUILD_PREBUILT instead!))
|
|
|
|
endef
|
2012-09-06 03:08:29 +02:00
|
|
|
# filter out the duplicate <source file>:<dest file> pairs.
|
|
|
|
unique_product_copy_files_pairs :=
|
2009-03-04 04:28:42 +01:00
|
|
|
$(foreach cf,$(PRODUCT_COPY_FILES), \
|
2012-09-06 03:08:29 +02:00
|
|
|
$(if $(filter $(unique_product_copy_files_pairs),$(cf)),,\
|
|
|
|
$(eval unique_product_copy_files_pairs += $(cf))))
|
|
|
|
unique_product_copy_files_destinations :=
|
|
|
|
$(foreach cf,$(unique_product_copy_files_pairs), \
|
2010-11-03 05:31:47 +01:00
|
|
|
$(eval _src := $(call word-colon,1,$(cf))) \
|
|
|
|
$(eval _dest := $(call word-colon,2,$(cf))) \
|
2011-09-29 22:23:25 +02:00
|
|
|
$(call check-product-copy-files,$(cf)) \
|
2011-12-16 20:54:25 +01:00
|
|
|
$(if $(filter $(unique_product_copy_files_destinations),$(_dest)), \
|
|
|
|
$(info PRODUCT_COPY_FILES $(cf) ignored.), \
|
2010-11-03 05:31:47 +01:00
|
|
|
$(eval _fulldest := $(call append-path,$(PRODUCT_OUT),$(_dest))) \
|
2012-05-14 23:39:00 +02:00
|
|
|
$(if $(filter %.xml,$(_dest)),\
|
|
|
|
$(eval $(call copy-xml-file-checked,$(_src),$(_fulldest))),\
|
2017-09-19 14:10:31 +02:00
|
|
|
$(if $(and $(filter %.jar,$(_dest)),$(filter $(basename $(notdir $(_dest))),$(PRODUCT_LOADED_BY_PRIVILEGED_MODULES))),\
|
|
|
|
$(eval $(call copy-and-uncompress-dexs,$(_src),$(_fulldest))), \
|
|
|
|
$(eval $(call copy-one-file,$(_src),$(_fulldest))))) \
|
2010-11-03 05:31:47 +01:00
|
|
|
$(eval ALL_DEFAULT_INSTALLED_MODULES += $(_fulldest)) \
|
2011-06-18 02:05:35 +02:00
|
|
|
$(eval unique_product_copy_files_destinations += $(_dest))))
|
2012-09-06 03:08:29 +02:00
|
|
|
unique_product_copy_files_pairs :=
|
2011-06-18 02:05:35 +02:00
|
|
|
unique_product_copy_files_destinations :=
|
2009-03-04 04:28:42 +01:00
|
|
|
|
2016-02-23 22:40:07 +01:00
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# Define rules to copy headers defined in copy_headers.mk
|
|
|
|
# If more than one makefile declared a header, print a warning,
|
|
|
|
# then copy the last one defined. This matches the previous make
|
|
|
|
# behavior.
|
|
|
|
$(foreach dest,$(ALL_COPIED_HEADERS), \
|
|
|
|
$(eval _srcs := $(ALL_COPIED_HEADERS.$(dest).SRC)) \
|
|
|
|
$(eval _src := $(word $(words $(_srcs)),$(_srcs))) \
|
|
|
|
$(if $(call streq,$(_src),$(_srcs)),, \
|
|
|
|
$(warning Duplicate header copy: $(dest)) \
|
|
|
|
$(warning Defined in: $(ALL_COPIED_HEADERS.$(dest).MAKEFILE))) \
|
|
|
|
$(eval $(call copy-one-header,$(_src),$(dest))))
|
|
|
|
all_copied_headers: $(ALL_COPIED_HEADERS)
|
|
|
|
|
2009-03-04 04:28:42 +01:00
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# docs/index.html
|
2012-04-03 03:21:36 +02:00
|
|
|
ifeq (,$(TARGET_BUILD_APPS))
|
2009-03-04 04:28:42 +01:00
|
|
|
gen := $(OUT_DOCS)/index.html
|
|
|
|
ALL_DOCS += $(gen)
|
|
|
|
$(gen): frameworks/base/docs/docs-redirect-index.html
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
@cp -f $< $@
|
2012-04-03 03:21:36 +02:00
|
|
|
endif
|
2009-03-04 04:28:42 +01:00
|
|
|
|
2017-10-04 19:20:20 +02:00
|
|
|
ndk_doxygen_out := $(OUT_NDK_DOCS)
|
|
|
|
ndk_headers := $(SOONG_OUT_DIR)/ndk/sysroot/usr/include
|
|
|
|
ndk_docs_src_dir := frameworks/native/docs
|
|
|
|
ndk_doxyfile := $(ndk_docs_src_dir)/Doxyfile
|
|
|
|
ifneq ($(wildcard $(ndk_docs_src_dir)),)
|
|
|
|
ndk_docs_srcs := $(addprefix $(ndk_docs_src_dir)/,\
|
|
|
|
$(call find-files-in-subdirs,$(ndk_docs_src_dir),"*",.))
|
|
|
|
$(ndk_doxygen_out)/index.html: $(ndk_docs_srcs) $(SOONG_OUT_DIR)/ndk.timestamp
|
|
|
|
@mkdir -p $(ndk_doxygen_out)
|
|
|
|
@echo "Generating NDK docs to $(ndk_doxygen_out)"
|
|
|
|
@( cat $(ndk_doxyfile); \
|
|
|
|
echo "INPUT=$(ndk_headers)"; \
|
|
|
|
echo "HTML_OUTPUT=$(ndk_doxygen_out)" \
|
|
|
|
) | doxygen -
|
|
|
|
|
|
|
|
# Note: Not a part of the docs target because we don't have doxygen available.
|
|
|
|
# You can run this target locally if you have doxygen installed.
|
|
|
|
ndk-docs: $(ndk_doxygen_out)/index.html
|
|
|
|
.PHONY: ndk-docs
|
|
|
|
endif
|
|
|
|
|
2017-01-31 12:07:02 +01:00
|
|
|
# -----------------------------------------------------------------
|
2017-03-03 04:40:21 +01:00
|
|
|
# property_overrides_split_enabled
|
|
|
|
property_overrides_split_enabled :=
|
|
|
|
ifeq ($(BOARD_PROPERTY_OVERRIDES_SPLIT_ENABLED), true)
|
|
|
|
property_overrides_split_enabled := true
|
2017-01-31 12:07:02 +01:00
|
|
|
endif
|
|
|
|
|
2009-03-04 04:28:42 +01:00
|
|
|
# -----------------------------------------------------------------
|
2017-05-01 15:56:26 +02:00
|
|
|
# prop.default
|
|
|
|
ifdef property_overrides_split_enabled
|
|
|
|
INSTALLED_DEFAULT_PROP_TARGET := $(TARGET_OUT)/etc/prop.default
|
|
|
|
else
|
|
|
|
# legacy path
|
2009-03-04 04:28:42 +01:00
|
|
|
INSTALLED_DEFAULT_PROP_TARGET := $(TARGET_ROOT_OUT)/default.prop
|
2017-05-01 15:56:26 +02:00
|
|
|
endif
|
2009-03-04 04:28:42 +01:00
|
|
|
ALL_DEFAULT_INSTALLED_MODULES += $(INSTALLED_DEFAULT_PROP_TARGET)
|
2017-01-20 05:17:12 +01:00
|
|
|
FINAL_DEFAULT_PROPERTIES := \
|
2011-06-18 02:05:35 +02:00
|
|
|
$(call collapse-pairs, $(ADDITIONAL_DEFAULT_PROPERTIES))
|
2017-03-03 04:40:21 +01:00
|
|
|
ifndef property_overrides_split_enabled
|
2017-01-31 12:07:02 +01:00
|
|
|
FINAL_DEFAULT_PROPERTIES += \
|
|
|
|
$(call collapse-pairs, $(PRODUCT_DEFAULT_PROPERTY_OVERRIDES))
|
|
|
|
endif
|
2017-01-20 05:17:12 +01:00
|
|
|
FINAL_DEFAULT_PROPERTIES := $(call uniq-pairs-by-first-component, \
|
|
|
|
$(FINAL_DEFAULT_PROPERTIES),=)
|
2009-03-04 04:28:42 +01:00
|
|
|
|
2015-05-07 05:44:22 +02:00
|
|
|
intermediate_system_build_prop := $(call intermediates-dir-for,ETC,system_build_prop)/build.prop
|
|
|
|
|
|
|
|
$(INSTALLED_DEFAULT_PROP_TARGET): $(intermediate_system_build_prop)
|
2009-03-04 04:28:42 +01:00
|
|
|
@echo Target buildinfo: $@
|
|
|
|
@mkdir -p $(dir $@)
|
2017-05-01 15:56:26 +02:00
|
|
|
@rm -f $@
|
2009-03-04 04:28:42 +01:00
|
|
|
$(hide) echo "#" > $@; \
|
|
|
|
echo "# ADDITIONAL_DEFAULT_PROPERTIES" >> $@; \
|
|
|
|
echo "#" >> $@;
|
2017-01-20 05:17:12 +01:00
|
|
|
$(hide) $(foreach line,$(FINAL_DEFAULT_PROPERTIES), \
|
2010-09-07 19:51:12 +02:00
|
|
|
echo "$(line)" >> $@;)
|
2015-05-07 05:44:22 +02:00
|
|
|
$(hide) echo "#" >> $@; \
|
|
|
|
echo "# BOOTIMAGE_BUILD_PROPERTIES" >> $@; \
|
|
|
|
echo "#" >> $@;
|
2015-08-18 05:44:29 +02:00
|
|
|
$(hide) echo ro.bootimage.build.date=`$(DATE_FROM_FILE)`>>$@
|
|
|
|
$(hide) echo ro.bootimage.build.date.utc=`$(DATE_FROM_FILE) +%s`>>$@
|
2015-07-21 21:54:17 +02:00
|
|
|
$(hide) echo ro.bootimage.build.fingerprint="$(BUILD_FINGERPRINT_FROM_FILE)">>$@
|
2015-05-07 05:44:22 +02:00
|
|
|
$(hide) build/tools/post_process_props.py $@
|
2017-05-01 15:56:26 +02:00
|
|
|
ifdef property_overrides_split_enabled
|
|
|
|
$(hide) mkdir -p $(TARGET_ROOT_OUT)
|
|
|
|
$(hide) ln -sf system/etc/prop.default $(TARGET_ROOT_OUT)/default.prop
|
|
|
|
endif
|
2009-03-04 04:28:42 +01:00
|
|
|
|
2017-01-31 12:07:02 +01:00
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# vendor default.prop
|
|
|
|
INSTALLED_VENDOR_DEFAULT_PROP_TARGET :=
|
2017-03-03 04:40:21 +01:00
|
|
|
ifdef property_overrides_split_enabled
|
2017-01-31 12:07:02 +01:00
|
|
|
INSTALLED_VENDOR_DEFAULT_PROP_TARGET := $(TARGET_OUT_VENDOR)/default.prop
|
|
|
|
ALL_DEFAULT_INSTALLED_MODULES += $(INSTALLED_VENDOR_DEFAULT_PROP_TARGET)
|
|
|
|
|
2017-10-10 06:53:32 +02:00
|
|
|
ifdef BOARD_VNDK_VERSION
|
|
|
|
FINAL_VENDOR_DEFAULT_PROPERTIES := ro.vndk.version=${BOARD_VNDK_VERSION}
|
|
|
|
else
|
|
|
|
FINAL_VENDOR_DEFAULT_PROPERTIES :=
|
|
|
|
endif
|
2017-01-31 12:07:02 +01:00
|
|
|
FINAL_VENDOR_DEFAULT_PROPERTIES += \
|
|
|
|
$(call collapse-pairs, $(PRODUCT_DEFAULT_PROPERTY_OVERRIDES))
|
|
|
|
FINAL_VENDOR_DEFAULT_PROPERTIES := $(call uniq-pairs-by-first-component, \
|
|
|
|
$(FINAL_VENDOR_DEFAULT_PROPERTIES),=)
|
|
|
|
|
|
|
|
$(INSTALLED_VENDOR_DEFAULT_PROP_TARGET): $(INSTALLED_DEFAULT_PROP_TARGET)
|
|
|
|
@echo Target buildinfo: $@
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
$(hide) echo "#" > $@; \
|
|
|
|
echo "# ADDITIONAL VENDOR DEFAULT PROPERTIES" >> $@; \
|
|
|
|
echo "#" >> $@;
|
|
|
|
$(hide) $(foreach line,$(FINAL_VENDOR_DEFAULT_PROPERTIES), \
|
|
|
|
echo "$(line)" >> $@;)
|
|
|
|
$(hide) build/tools/post_process_props.py $@
|
|
|
|
|
2017-03-03 04:40:21 +01:00
|
|
|
endif # property_overrides_split_enabled
|
2017-01-31 12:07:02 +01:00
|
|
|
|
2009-03-04 04:28:42 +01:00
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# build.prop
|
|
|
|
INSTALLED_BUILD_PROP_TARGET := $(TARGET_OUT)/build.prop
|
|
|
|
ALL_DEFAULT_INSTALLED_MODULES += $(INSTALLED_BUILD_PROP_TARGET)
|
2017-01-20 05:17:12 +01:00
|
|
|
FINAL_BUILD_PROPERTIES := \
|
2011-06-18 02:05:35 +02:00
|
|
|
$(call collapse-pairs, $(ADDITIONAL_BUILD_PROPERTIES))
|
2017-01-20 05:17:12 +01:00
|
|
|
FINAL_BUILD_PROPERTIES := $(call uniq-pairs-by-first-component, \
|
|
|
|
$(FINAL_BUILD_PROPERTIES),=)
|
2009-03-04 04:28:42 +01:00
|
|
|
|
|
|
|
# A list of arbitrary tags describing the build configuration.
|
|
|
|
# Force ":=" so we can use +=
|
|
|
|
BUILD_VERSION_TAGS := $(BUILD_VERSION_TAGS)
|
|
|
|
ifeq ($(TARGET_BUILD_TYPE),debug)
|
|
|
|
BUILD_VERSION_TAGS += debug
|
|
|
|
endif
|
2011-10-05 21:41:56 +02:00
|
|
|
# The "test-keys" tag marks builds signed with the old test keys,
|
|
|
|
# which are available in the SDK. "dev-keys" marks builds signed with
|
|
|
|
# non-default dev keys (usually private keys from a vendor directory).
|
|
|
|
# Both of these tags will be removed and replaced with "release-keys"
|
|
|
|
# when the target-files is signed in a post-build step.
|
|
|
|
ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/target/product/security/testkey)
|
2013-07-23 20:51:04 +02:00
|
|
|
BUILD_KEYS := test-keys
|
2011-10-05 21:41:56 +02:00
|
|
|
else
|
2013-07-23 20:51:04 +02:00
|
|
|
BUILD_KEYS := dev-keys
|
2011-10-05 21:41:56 +02:00
|
|
|
endif
|
2013-07-23 20:51:04 +02:00
|
|
|
BUILD_VERSION_TAGS += $(BUILD_KEYS)
|
2009-03-04 04:28:42 +01:00
|
|
|
BUILD_VERSION_TAGS := $(subst $(space),$(comma),$(sort $(BUILD_VERSION_TAGS)))
|
|
|
|
|
|
|
|
# A human-readable string that descibes this build in detail.
|
2015-07-17 02:15:19 +02:00
|
|
|
build_desc := $(TARGET_PRODUCT)-$(TARGET_BUILD_VARIANT) $(PLATFORM_VERSION) $(BUILD_ID) $(BUILD_NUMBER_FROM_FILE) $(BUILD_VERSION_TAGS)
|
2015-05-07 05:44:22 +02:00
|
|
|
$(intermediate_system_build_prop): PRIVATE_BUILD_DESC := $(build_desc)
|
2009-03-04 04:28:42 +01:00
|
|
|
|
2014-03-22 00:20:05 +01:00
|
|
|
# The string used to uniquely identify the combined build and product; used by the OTA server.
|
2009-03-04 04:28:42 +01:00
|
|
|
ifeq (,$(strip $(BUILD_FINGERPRINT)))
|
2014-06-13 03:42:53 +02:00
|
|
|
ifneq ($(filter eng.%,$(BUILD_NUMBER)),)
|
2017-10-18 19:46:36 +02:00
|
|
|
BF_BUILD_NUMBER := $(USER)$(shell $(DATE) +%m%d%H%M)
|
2014-06-13 03:42:53 +02:00
|
|
|
else
|
|
|
|
BF_BUILD_NUMBER := $(BUILD_NUMBER)
|
|
|
|
endif
|
|
|
|
BUILD_FINGERPRINT := $(PRODUCT_BRAND)/$(TARGET_PRODUCT)/$(TARGET_DEVICE):$(PLATFORM_VERSION)/$(BUILD_ID)/$(BF_BUILD_NUMBER):$(TARGET_BUILD_VARIANT)/$(BUILD_VERSION_TAGS)
|
2009-03-04 04:28:42 +01:00
|
|
|
endif
|
|
|
|
ifneq ($(words $(BUILD_FINGERPRINT)),1)
|
|
|
|
$(error BUILD_FINGERPRINT cannot contain spaces: "$(BUILD_FINGERPRINT)")
|
|
|
|
endif
|
|
|
|
|
2015-07-22 01:22:51 +02:00
|
|
|
$(shell mkdir -p $(PRODUCT_OUT) && echo $(BUILD_FINGERPRINT) > $(PRODUCT_OUT)/build_fingerprint.txt)
|
2015-07-17 02:15:19 +02:00
|
|
|
BUILD_FINGERPRINT_FROM_FILE := $$(cat $(PRODUCT_OUT)/build_fingerprint.txt)
|
|
|
|
|
2014-03-22 00:20:05 +01:00
|
|
|
# The string used to uniquely identify the system build; used by the OTA server.
|
|
|
|
# This purposefully excludes any product-specific variables.
|
|
|
|
ifeq (,$(strip $(BUILD_THUMBPRINT)))
|
|
|
|
BUILD_THUMBPRINT := $(PLATFORM_VERSION)/$(BUILD_ID)/$(BUILD_NUMBER):$(TARGET_BUILD_VARIANT)/$(BUILD_VERSION_TAGS)
|
|
|
|
endif
|
|
|
|
ifneq ($(words $(BUILD_THUMBPRINT)),1)
|
|
|
|
$(error BUILD_THUMBPRINT cannot contain spaces: "$(BUILD_THUMBPRINT)")
|
|
|
|
endif
|
|
|
|
|
2014-10-08 03:42:11 +02:00
|
|
|
KNOWN_OEM_THUMBPRINT_PROPERTIES := \
|
|
|
|
ro.product.brand \
|
|
|
|
ro.product.name \
|
|
|
|
ro.product.device
|
|
|
|
OEM_THUMBPRINT_PROPERTIES := $(filter $(KNOWN_OEM_THUMBPRINT_PROPERTIES),\
|
|
|
|
$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_OEM_PROPERTIES))
|
|
|
|
|
2009-03-25 06:40:59 +01:00
|
|
|
# Display parameters shown under Settings -> About Phone
|
|
|
|
ifeq ($(TARGET_BUILD_VARIANT),user)
|
|
|
|
# User builds should show:
|
|
|
|
# release build number or branch.buld_number non-release builds
|
|
|
|
|
|
|
|
# Dev. branches should have DISPLAY_BUILD_NUMBER set
|
2017-02-22 02:23:02 +01:00
|
|
|
ifeq (true,$(DISPLAY_BUILD_NUMBER))
|
2015-07-17 02:15:19 +02:00
|
|
|
BUILD_DISPLAY_ID := $(BUILD_ID).$(BUILD_NUMBER_FROM_FILE) $(BUILD_KEYS)
|
2009-03-25 06:40:59 +01:00
|
|
|
else
|
2013-07-23 20:51:04 +02:00
|
|
|
BUILD_DISPLAY_ID := $(BUILD_ID) $(BUILD_KEYS)
|
2009-03-25 06:40:59 +01:00
|
|
|
endif
|
|
|
|
else
|
|
|
|
# Non-user builds should show detailed build information
|
|
|
|
BUILD_DISPLAY_ID := $(build_desc)
|
|
|
|
endif
|
|
|
|
|
2015-01-15 19:16:24 +01:00
|
|
|
# Accepts a whitespace separated list of product locales such as
|
|
|
|
# (en_US en_AU en_GB...) and returns the first locale in the list with
|
|
|
|
# underscores replaced with hyphens. In the example above, this will
|
|
|
|
# return "en-US".
|
|
|
|
define get-default-product-locale
|
|
|
|
$(strip $(subst _,-, $(firstword $(1))))
|
2009-03-04 04:28:42 +01:00
|
|
|
endef
|
|
|
|
|
|
|
|
BUILDINFO_SH := build/tools/buildinfo.sh
|
2017-02-27 05:12:07 +01:00
|
|
|
VENDOR_BUILDINFO_SH := build/tools/vendor_buildinfo.sh
|
2012-09-28 18:33:45 +02:00
|
|
|
|
2017-05-09 18:54:49 +02:00
|
|
|
# TARGET_BUILD_FLAVOR and ro.build.flavor are used only by the test
|
|
|
|
# harness to distinguish builds. Only add _asan for a sanitized build
|
|
|
|
# if it isn't already a part of the flavor (via a dedicated lunch
|
|
|
|
# config for example).
|
2015-10-29 02:45:03 +01:00
|
|
|
TARGET_BUILD_FLAVOR := $(TARGET_PRODUCT)-$(TARGET_BUILD_VARIANT)
|
2017-08-14 16:57:37 +02:00
|
|
|
ifneq (, $(filter address, $(SANITIZE_TARGET)))
|
2017-05-09 18:54:49 +02:00
|
|
|
ifeq (,$(findstring _asan,$(TARGET_BUILD_FLAVOR)))
|
2015-10-29 02:45:03 +01:00
|
|
|
TARGET_BUILD_FLAVOR := $(TARGET_BUILD_FLAVOR)_asan
|
|
|
|
endif
|
2017-05-09 18:54:49 +02:00
|
|
|
endif
|
2015-10-29 02:45:03 +01:00
|
|
|
|
2012-09-28 18:33:45 +02:00
|
|
|
ifdef TARGET_SYSTEM_PROP
|
|
|
|
system_prop_file := $(TARGET_SYSTEM_PROP)
|
|
|
|
else
|
|
|
|
system_prop_file := $(wildcard $(TARGET_DEVICE_DIR)/system.prop)
|
|
|
|
endif
|
2017-10-25 05:08:32 +02:00
|
|
|
$(intermediate_system_build_prop): $(BUILDINFO_SH) $(INTERNAL_BUILD_ID_MAKEFILE) $(BUILD_SYSTEM)/version_defaults.mk $(system_prop_file) $(INSTALLED_ANDROID_INFO_TXT_TARGET)
|
2009-03-04 04:28:42 +01:00
|
|
|
@echo Target buildinfo: $@
|
|
|
|
@mkdir -p $(dir $@)
|
2014-03-19 01:20:10 +01:00
|
|
|
$(hide) echo > $@
|
|
|
|
ifneq ($(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_OEM_PROPERTIES),)
|
|
|
|
$(hide) echo "#" >> $@; \
|
|
|
|
echo "# PRODUCT_OEM_PROPERTIES" >> $@; \
|
2014-03-22 00:20:05 +01:00
|
|
|
echo "#" >> $@;
|
2014-03-19 01:20:10 +01:00
|
|
|
$(hide) $(foreach prop,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_OEM_PROPERTIES), \
|
|
|
|
echo "import /oem/oem.prop $(prop)" >> $@;)
|
|
|
|
endif
|
2009-03-04 04:28:42 +01:00
|
|
|
$(hide) TARGET_BUILD_TYPE="$(TARGET_BUILD_VARIANT)" \
|
2015-10-29 02:45:03 +01:00
|
|
|
TARGET_BUILD_FLAVOR="$(TARGET_BUILD_FLAVOR)" \
|
2009-03-04 04:28:42 +01:00
|
|
|
TARGET_DEVICE="$(TARGET_DEVICE)" \
|
|
|
|
PRODUCT_NAME="$(TARGET_PRODUCT)" \
|
|
|
|
PRODUCT_BRAND="$(PRODUCT_BRAND)" \
|
2015-01-15 19:16:24 +01:00
|
|
|
PRODUCT_DEFAULT_LOCALE="$(call get-default-product-locale,$(PRODUCT_LOCALES))" \
|
2009-05-20 22:37:35 +02:00
|
|
|
PRODUCT_DEFAULT_WIFI_CHANNELS="$(PRODUCT_DEFAULT_WIFI_CHANNELS)" \
|
2009-03-04 04:28:42 +01:00
|
|
|
PRODUCT_MODEL="$(PRODUCT_MODEL)" \
|
|
|
|
PRODUCT_MANUFACTURER="$(PRODUCT_MANUFACTURER)" \
|
|
|
|
PRIVATE_BUILD_DESC="$(PRIVATE_BUILD_DESC)" \
|
|
|
|
BUILD_ID="$(BUILD_ID)" \
|
|
|
|
BUILD_DISPLAY_ID="$(BUILD_DISPLAY_ID)" \
|
2015-08-12 00:25:12 +02:00
|
|
|
DATE="$(DATE_FROM_FILE)" \
|
2015-07-17 02:15:19 +02:00
|
|
|
BUILD_NUMBER="$(BUILD_NUMBER_FROM_FILE)" \
|
2015-06-30 02:20:43 +02:00
|
|
|
BOARD_BUILD_SYSTEM_ROOT_IMAGE="$(BOARD_BUILD_SYSTEM_ROOT_IMAGE)" \
|
2015-11-11 19:22:48 +01:00
|
|
|
AB_OTA_UPDATER="$(AB_OTA_UPDATER)" \
|
2009-03-04 04:28:42 +01:00
|
|
|
PLATFORM_VERSION="$(PLATFORM_VERSION)" \
|
2015-08-13 01:11:20 +02:00
|
|
|
PLATFORM_SECURITY_PATCH="$(PLATFORM_SECURITY_PATCH)" \
|
|
|
|
PLATFORM_BASE_OS="$(PLATFORM_BASE_OS)" \
|
2009-03-04 04:28:42 +01:00
|
|
|
PLATFORM_SDK_VERSION="$(PLATFORM_SDK_VERSION)" \
|
2015-05-21 22:49:05 +02:00
|
|
|
PLATFORM_PREVIEW_SDK_VERSION="$(PLATFORM_PREVIEW_SDK_VERSION)" \
|
2009-05-08 21:06:17 +02:00
|
|
|
PLATFORM_VERSION_CODENAME="$(PLATFORM_VERSION_CODENAME)" \
|
2014-04-25 01:19:14 +02:00
|
|
|
PLATFORM_VERSION_ALL_CODENAMES="$(PLATFORM_VERSION_ALL_CODENAMES)" \
|
2009-03-04 04:28:42 +01:00
|
|
|
BUILD_VERSION_TAGS="$(BUILD_VERSION_TAGS)" \
|
2015-07-17 02:15:19 +02:00
|
|
|
BUILD_FINGERPRINT="$(BUILD_FINGERPRINT_FROM_FILE)" \
|
2014-10-08 03:42:11 +02:00
|
|
|
$(if $(OEM_THUMBPRINT_PROPERTIES),BUILD_THUMBPRINT="$(BUILD_THUMBPRINT)") \
|
2014-03-26 18:33:55 +01:00
|
|
|
TARGET_CPU_ABI_LIST="$(TARGET_CPU_ABI_LIST)" \
|
2014-04-07 12:01:54 +02:00
|
|
|
TARGET_CPU_ABI_LIST_32_BIT="$(TARGET_CPU_ABI_LIST_32_BIT)" \
|
|
|
|
TARGET_CPU_ABI_LIST_64_BIT="$(TARGET_CPU_ABI_LIST_64_BIT)" \
|
2009-05-22 00:45:30 +02:00
|
|
|
TARGET_CPU_ABI="$(TARGET_CPU_ABI)" \
|
2009-11-07 00:12:00 +01:00
|
|
|
TARGET_CPU_ABI2="$(TARGET_CPU_ABI2)" \
|
2010-11-09 17:53:01 +01:00
|
|
|
TARGET_AAPT_CHARACTERISTICS="$(TARGET_AAPT_CHARACTERISTICS)" \
|
2014-03-19 01:20:10 +01:00
|
|
|
bash $(BUILDINFO_SH) >> $@
|
2012-04-12 17:00:58 +02:00
|
|
|
$(hide) $(foreach file,$(system_prop_file), \
|
|
|
|
if [ -f "$(file)" ]; then \
|
|
|
|
echo "#" >> $@; \
|
|
|
|
echo Target buildinfo from: "$(file)"; \
|
|
|
|
echo "# from $(file)" >> $@; \
|
|
|
|
echo "#" >> $@; \
|
|
|
|
cat $(file) >> $@; \
|
|
|
|
fi;)
|
2017-01-20 05:17:12 +01:00
|
|
|
$(if $(FINAL_BUILD_PROPERTIES), \
|
2009-03-04 04:28:42 +01:00
|
|
|
$(hide) echo >> $@; \
|
|
|
|
echo "#" >> $@; \
|
|
|
|
echo "# ADDITIONAL_BUILD_PROPERTIES" >> $@; \
|
|
|
|
echo "#" >> $@; )
|
2017-01-20 05:17:12 +01:00
|
|
|
$(hide) $(foreach line,$(FINAL_BUILD_PROPERTIES), \
|
2010-09-07 19:51:12 +02:00
|
|
|
echo "$(line)" >> $@;)
|
2015-02-06 19:12:55 +01:00
|
|
|
$(hide) cat $(INSTALLED_ANDROID_INFO_TXT_TARGET) | grep 'require version-' | sed -e 's/require version-/ro.build.expect./g' >> $@
|
2014-03-19 01:20:10 +01:00
|
|
|
$(hide) build/tools/post_process_props.py $@ $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SYSTEM_PROPERTY_BLACKLIST)
|
2009-03-04 04:28:42 +01:00
|
|
|
|
|
|
|
build_desc :=
|
|
|
|
|
2015-05-07 05:44:22 +02:00
|
|
|
ifeq (,$(filter true, $(TARGET_NO_KERNEL) $(TARGET_NO_RECOVERY)))
|
|
|
|
INSTALLED_RECOVERYIMAGE_TARGET := $(PRODUCT_OUT)/recovery.img
|
|
|
|
else
|
|
|
|
INSTALLED_RECOVERYIMAGE_TARGET :=
|
|
|
|
endif
|
|
|
|
|
|
|
|
$(INSTALLED_BUILD_PROP_TARGET): $(intermediate_system_build_prop) $(INSTALLED_RECOVERYIMAGE_TARGET)
|
|
|
|
@echo "Target build info: $@"
|
2017-10-22 11:11:47 +02:00
|
|
|
$(hide) grep -v 'ro.product.first_api_level' $(intermediate_system_build_prop) > $@
|
2015-05-07 05:44:22 +02:00
|
|
|
ifdef INSTALLED_RECOVERYIMAGE_TARGET
|
|
|
|
$(hide) echo ro.expect.recovery_id=`cat $(RECOVERYIMAGE_ID_FILE)` >> $@
|
|
|
|
endif
|
|
|
|
|
2014-07-22 02:21:20 +02:00
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# vendor build.prop
|
|
|
|
#
|
2016-01-10 15:18:54 +01:00
|
|
|
# For verifying that the vendor build is what we think it is
|
2014-07-22 02:21:20 +02:00
|
|
|
INSTALLED_VENDOR_BUILD_PROP_TARGET := $(TARGET_OUT_VENDOR)/build.prop
|
|
|
|
ALL_DEFAULT_INSTALLED_MODULES += $(INSTALLED_VENDOR_BUILD_PROP_TARGET)
|
2017-01-31 12:07:02 +01:00
|
|
|
|
2017-03-03 04:40:21 +01:00
|
|
|
ifdef property_overrides_split_enabled
|
2017-01-31 12:07:02 +01:00
|
|
|
FINAL_VENDOR_BUILD_PROPERTIES += \
|
|
|
|
$(call collapse-pairs, $(PRODUCT_PROPERTY_OVERRIDES))
|
|
|
|
FINAL_VENDOR_BUILD_PROPERTIES := $(call uniq-pairs-by-first-component, \
|
|
|
|
$(FINAL_VENDOR_BUILD_PROPERTIES),=)
|
2017-03-03 04:40:21 +01:00
|
|
|
endif # property_overrides_split_enabled
|
2017-01-31 12:07:02 +01:00
|
|
|
|
2017-10-22 11:11:47 +02:00
|
|
|
$(INSTALLED_VENDOR_BUILD_PROP_TARGET): $(VENDOR_BUILDINFO_SH) $(intermediate_system_build_prop)
|
2014-07-22 02:21:20 +02:00
|
|
|
@echo Target vendor buildinfo: $@
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
$(hide) echo > $@
|
2017-10-24 04:47:43 +02:00
|
|
|
$(hide) grep 'ro.product.first_api_level' $(intermediate_system_build_prop) >> $@ || true
|
2015-08-12 00:25:12 +02:00
|
|
|
$(hide) echo ro.vendor.build.date=`$(DATE_FROM_FILE)`>>$@
|
|
|
|
$(hide) echo ro.vendor.build.date.utc=`$(DATE_FROM_FILE) +%s`>>$@
|
2015-07-17 02:15:19 +02:00
|
|
|
$(hide) echo ro.vendor.build.fingerprint="$(BUILD_FINGERPRINT_FROM_FILE)">>$@
|
2017-10-02 21:29:41 +02:00
|
|
|
$(hide) TARGET_DEVICE="$(TARGET_DEVICE)" \
|
|
|
|
PRODUCT_NAME="$(TARGET_PRODUCT)" \
|
|
|
|
PRODUCT_BRAND="$(PRODUCT_BRAND)" \
|
|
|
|
PRODUCT_MODEL="$(PRODUCT_MODEL)" \
|
|
|
|
PRODUCT_MANUFACTURER="$(PRODUCT_MANUFACTURER)" \
|
|
|
|
TARGET_BOOTLOADER_BOARD_NAME="$(TARGET_BOOTLOADER_BOARD_NAME)" \
|
2017-02-27 05:12:07 +01:00
|
|
|
TARGET_BOARD_PLATFORM="$(TARGET_BOARD_PLATFORM)" \
|
|
|
|
bash $(VENDOR_BUILDINFO_SH) >> $@
|
2017-10-25 05:08:32 +02:00
|
|
|
ifdef property_overrides_split_enabled
|
2017-01-31 12:07:02 +01:00
|
|
|
$(hide) echo "#" >> $@; \
|
|
|
|
echo "# ADDITIONAL VENDOR BUILD PROPERTIES" >> $@; \
|
|
|
|
echo "#" >> $@;
|
|
|
|
$(hide) $(foreach line,$(FINAL_VENDOR_BUILD_PROPERTIES), \
|
|
|
|
echo "$(line)" >> $@;)
|
|
|
|
$(hide) build/tools/post_process_props.py $@
|
2017-03-03 04:40:21 +01:00
|
|
|
endif # property_overrides_split_enabled
|
2014-07-22 02:21:20 +02:00
|
|
|
|
2015-01-14 00:30:34 +01:00
|
|
|
# ----------------------------------------------------------------
|
|
|
|
|
2009-03-04 04:28:42 +01:00
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# sdk-build.prop
|
|
|
|
#
|
|
|
|
# There are certain things in build.prop that we don't want to
|
|
|
|
# ship with the sdk; remove them.
|
|
|
|
|
|
|
|
# This must be a list of entire property keys followed by
|
|
|
|
# "=" characters, without any internal spaces.
|
|
|
|
sdk_build_prop_remove := \
|
|
|
|
ro.build.user= \
|
|
|
|
ro.build.host= \
|
|
|
|
ro.product.brand= \
|
|
|
|
ro.product.manufacturer= \
|
|
|
|
ro.product.device=
|
|
|
|
# TODO: Remove this soon-to-be obsolete property
|
|
|
|
sdk_build_prop_remove += ro.build.product=
|
|
|
|
INSTALLED_SDK_BUILD_PROP_TARGET := $(PRODUCT_OUT)/sdk/sdk-build.prop
|
|
|
|
$(INSTALLED_SDK_BUILD_PROP_TARGET): $(INSTALLED_BUILD_PROP_TARGET)
|
|
|
|
@echo SDK buildinfo: $@
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
$(hide) grep -v "$(subst $(space),\|,$(strip \
|
|
|
|
$(sdk_build_prop_remove)))" $< > $@.tmp
|
|
|
|
$(hide) for x in $(sdk_build_prop_remove); do \
|
|
|
|
echo "$$x"generic >> $@.tmp; done
|
|
|
|
$(hide) mv $@.tmp $@
|
|
|
|
|
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# package stats
|
|
|
|
PACKAGE_STATS_FILE := $(PRODUCT_OUT)/package-stats.txt
|
|
|
|
PACKAGES_TO_STAT := \
|
|
|
|
$(sort $(filter $(TARGET_OUT)/% $(TARGET_OUT_DATA)/%, \
|
|
|
|
$(filter %.jar %.apk, $(ALL_DEFAULT_INSTALLED_MODULES))))
|
|
|
|
$(PACKAGE_STATS_FILE): $(PACKAGES_TO_STAT)
|
|
|
|
@echo Package stats: $@
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
$(hide) rm -f $@
|
2015-08-23 18:40:05 +02:00
|
|
|
ifeq ($(PACKAGES_TO_STAT),)
|
|
|
|
# Create empty package stats file if target builds no jar(s) or apk(s).
|
|
|
|
$(hide) touch $@
|
|
|
|
else
|
2009-03-04 04:28:42 +01:00
|
|
|
$(hide) build/tools/dump-package-stats $^ > $@
|
2015-08-23 18:40:05 +02:00
|
|
|
endif
|
2009-03-04 04:28:42 +01:00
|
|
|
|
|
|
|
.PHONY: package-stats
|
|
|
|
package-stats: $(PACKAGE_STATS_FILE)
|
|
|
|
|
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# Cert-to-package mapping. Used by the post-build signing tools.
|
2012-10-26 18:21:28 +02:00
|
|
|
# Use a macro to add newline to each echo command
|
|
|
|
define _apkcerts_echo_with_newline
|
|
|
|
$(hide) echo $(1)
|
|
|
|
|
|
|
|
endef
|
|
|
|
|
2009-03-04 04:28:42 +01:00
|
|
|
name := $(TARGET_PRODUCT)
|
|
|
|
ifeq ($(TARGET_BUILD_TYPE),debug)
|
|
|
|
name := $(name)_debug
|
|
|
|
endif
|
|
|
|
name := $(name)-apkcerts-$(FILE_NAME_TAG)
|
|
|
|
intermediates := \
|
|
|
|
$(call intermediates-dir-for,PACKAGING,apkcerts)
|
|
|
|
APKCERTS_FILE := $(intermediates)/$(name).txt
|
2011-02-15 19:56:18 +01:00
|
|
|
# We don't need to really build all the modules.
|
|
|
|
# TODO: rebuild APKCERTS_FILE if any app change its cert.
|
2010-07-24 01:42:13 +02:00
|
|
|
$(APKCERTS_FILE):
|
2009-03-04 04:28:42 +01:00
|
|
|
@echo APK certs list: $@
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
@rm -f $@
|
2012-10-26 18:21:28 +02:00
|
|
|
$(foreach p,$(PACKAGES),\
|
|
|
|
$(if $(PACKAGES.$(p).EXTERNAL_KEY),\
|
|
|
|
$(call _apkcerts_echo_with_newline,\
|
|
|
|
'name="$(p).apk" certificate="EXTERNAL" \
|
|
|
|
private_key=""' >> $@),\
|
|
|
|
$(call _apkcerts_echo_with_newline,\
|
|
|
|
'name="$(p).apk" certificate="$(PACKAGES.$(p).CERTIFICATE)" \
|
|
|
|
private_key="$(PACKAGES.$(p).PRIVATE_KEY)"' >> $@)))
|
|
|
|
# In case value of PACKAGES is empty.
|
2011-09-26 21:05:06 +02:00
|
|
|
$(hide) touch $@
|
2009-03-04 04:28:42 +01:00
|
|
|
|
|
|
|
.PHONY: apkcerts-list
|
|
|
|
apkcerts-list: $(APKCERTS_FILE)
|
|
|
|
|
2011-02-15 19:56:18 +01:00
|
|
|
ifneq (,$(TARGET_BUILD_APPS))
|
|
|
|
$(call dist-for-goals, apps_only, $(APKCERTS_FILE):apkcerts.txt)
|
|
|
|
endif
|
2010-07-24 01:42:13 +02:00
|
|
|
|
2009-06-15 23:30:14 +02:00
|
|
|
# -----------------------------------------------------------------
|
2016-07-26 01:03:53 +02:00
|
|
|
# build system stats
|
|
|
|
BUILD_SYSTEM_STATS := $(PRODUCT_OUT)/build_system_stats.txt
|
|
|
|
$(BUILD_SYSTEM_STATS):
|
|
|
|
@rm -f $@
|
|
|
|
@$(foreach s,$(STATS.MODULE_TYPE),echo "modules_type_make,$(s),$(words $(STATS.MODULE_TYPE.$(s)))" >>$@;)
|
|
|
|
@$(foreach s,$(STATS.SOONG_MODULE_TYPE),echo "modules_type_soong,$(s),$(STATS.SOONG_MODULE_TYPE.$(s))" >>$@;)
|
|
|
|
$(call dist-for-goals,droidcore,$(BUILD_SYSTEM_STATS))
|
2009-06-15 23:30:14 +02:00
|
|
|
|
2016-08-26 22:27:13 +02:00
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# Modules ready to be converted to Soong, ordered by how many
|
|
|
|
# modules depend on them.
|
|
|
|
SOONG_CONV := $(sort $(SOONG_CONV))
|
|
|
|
SOONG_CONV_DATA := $(call intermediates-dir-for,PACKAGING,soong_conversion)/soong_conv_data
|
|
|
|
$(SOONG_CONV_DATA):
|
|
|
|
@rm -f $@
|
|
|
|
@$(foreach s,$(SOONG_CONV),echo "$(s),$(sort $(SOONG_CONV.$(s).PROBLEMS)),$(sort $(filter-out $(SOONG_ALREADY_CONV),$(SOONG_CONV.$(s).DEPS)))" >>$@;)
|
|
|
|
|
|
|
|
SOONG_TO_CONVERT_SCRIPT := build/tools/soong_to_convert.py
|
|
|
|
SOONG_TO_CONVERT := $(PRODUCT_OUT)/soong_to_convert.txt
|
|
|
|
$(SOONG_TO_CONVERT): $(SOONG_CONV_DATA) $(SOONG_TO_CONVERT_SCRIPT)
|
|
|
|
@rm -f $@
|
|
|
|
$(hide) $(SOONG_TO_CONVERT_SCRIPT) $< >$@
|
|
|
|
$(call dist-for-goals,droidcore,$(SOONG_TO_CONVERT))
|
|
|
|
|
2009-06-15 23:30:14 +02:00
|
|
|
# -----------------------------------------------------------------
|
2011-10-04 19:50:08 +02:00
|
|
|
# The dev key is used to sign this package, and as the key required
|
2009-06-15 23:30:14 +02:00
|
|
|
# for future OTA packages installed by this system. Actual product
|
|
|
|
# deliverables will be re-signed by hand. We expect this file to
|
|
|
|
# exist with the suffixes ".x509.pem" and ".pk8".
|
2011-10-04 19:50:08 +02:00
|
|
|
DEFAULT_KEY_CERT_PAIR := $(DEFAULT_SYSTEM_DEV_CERTIFICATE)
|
2009-06-15 23:30:14 +02:00
|
|
|
|
|
|
|
|
2011-07-12 07:11:46 +02:00
|
|
|
# Rules that need to be present for the all targets, even
|
2009-03-04 04:28:42 +01:00
|
|
|
# if they don't do anything.
|
|
|
|
.PHONY: systemimage
|
|
|
|
systemimage:
|
|
|
|
|
2010-02-17 01:01:43 +01:00
|
|
|
# -----------------------------------------------------------------
|
|
|
|
|
|
|
|
.PHONY: event-log-tags
|
|
|
|
|
2010-07-14 19:22:54 +02:00
|
|
|
# Produce an event logs tag file for everything we know about, in order
|
|
|
|
# to properly allocate numbers. Then produce a file that's filtered
|
|
|
|
# for what's going to be installed.
|
|
|
|
|
|
|
|
all_event_log_tags_file := $(TARGET_OUT_COMMON_INTERMEDIATES)/all-event-log-tags.txt
|
|
|
|
|
2012-04-12 22:25:54 +02:00
|
|
|
event_log_tags_file := $(TARGET_OUT)/etc/event-log-tags
|
|
|
|
|
2010-07-14 19:22:54 +02:00
|
|
|
# Include tags from all packages that we know about
|
|
|
|
all_event_log_tags_src := \
|
|
|
|
$(sort $(foreach m, $(ALL_MODULES), $(ALL_MODULES.$(m).EVENT_LOG_TAGS)))
|
|
|
|
|
2012-04-12 22:25:54 +02:00
|
|
|
# PDK builds will already have a full list of tags that needs to get merged
|
|
|
|
# in with the ones from source
|
|
|
|
pdk_fusion_log_tags_file := $(patsubst $(PRODUCT_OUT)/%,$(_pdk_fusion_intermediates)/%,$(filter $(event_log_tags_file),$(ALL_PDK_FUSION_FILES)))
|
|
|
|
|
|
|
|
$(all_event_log_tags_file): PRIVATE_SRC_FILES := $(all_event_log_tags_src) $(pdk_fusion_log_tags_file)
|
2016-03-28 20:29:21 +02:00
|
|
|
$(all_event_log_tags_file): $(all_event_log_tags_src) $(pdk_fusion_log_tags_file) $(MERGETAGS) build/tools/event_log_tags.py
|
2010-07-14 19:22:54 +02:00
|
|
|
$(hide) mkdir -p $(dir $@)
|
2016-03-28 20:29:21 +02:00
|
|
|
$(hide) $(MERGETAGS) -o $@ $(PRIVATE_SRC_FILES)
|
2010-07-14 19:22:54 +02:00
|
|
|
|
2011-02-23 21:17:29 +01:00
|
|
|
# Include tags from all packages included in this product, plus all
|
|
|
|
# tags that are part of the system (ie, not in a vendor/ or device/
|
|
|
|
# directory).
|
2010-02-17 01:01:43 +01:00
|
|
|
event_log_tags_src := \
|
|
|
|
$(sort $(foreach m,\
|
|
|
|
$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES) \
|
|
|
|
$(call module-names-for-tag-list,user), \
|
2011-02-23 21:17:29 +01:00
|
|
|
$(ALL_MODULES.$(m).EVENT_LOG_TAGS)) \
|
|
|
|
$(filter-out vendor/% device/% out/%,$(all_event_log_tags_src)))
|
2010-02-17 01:01:43 +01:00
|
|
|
|
2012-04-12 22:25:54 +02:00
|
|
|
$(event_log_tags_file): PRIVATE_SRC_FILES := $(event_log_tags_src) $(pdk_fusion_log_tags_file)
|
2010-07-14 19:22:54 +02:00
|
|
|
$(event_log_tags_file): PRIVATE_MERGED_FILE := $(all_event_log_tags_file)
|
2016-03-28 20:29:21 +02:00
|
|
|
$(event_log_tags_file): $(event_log_tags_src) $(all_event_log_tags_file) $(pdk_fusion_log_tags_file) $(MERGETAGS) build/tools/event_log_tags.py
|
2010-02-17 01:01:43 +01:00
|
|
|
$(hide) mkdir -p $(dir $@)
|
2016-03-28 20:29:21 +02:00
|
|
|
$(hide) $(MERGETAGS) -o $@ -m $(PRIVATE_MERGED_FILE) $(PRIVATE_SRC_FILES)
|
2010-02-17 01:01:43 +01:00
|
|
|
|
|
|
|
event-log-tags: $(event_log_tags_file)
|
|
|
|
|
|
|
|
ALL_DEFAULT_INSTALLED_MODULES += $(event_log_tags_file)
|
|
|
|
|
2010-07-14 19:22:54 +02:00
|
|
|
|
2009-03-04 04:28:42 +01:00
|
|
|
# #################################################################
|
|
|
|
# Targets for boot/OS images
|
|
|
|
# #################################################################
|
2014-01-14 01:14:20 +01:00
|
|
|
ifneq ($(strip $(TARGET_NO_BOOTLOADER)),true)
|
|
|
|
INSTALLED_BOOTLOADER_MODULE := $(PRODUCT_OUT)/bootloader
|
|
|
|
ifeq ($(strip $(TARGET_BOOTLOADER_IS_2ND)),true)
|
|
|
|
INSTALLED_2NDBOOTLOADER_TARGET := $(PRODUCT_OUT)/2ndbootloader
|
|
|
|
else
|
|
|
|
INSTALLED_2NDBOOTLOADER_TARGET :=
|
|
|
|
endif
|
|
|
|
else
|
|
|
|
INSTALLED_BOOTLOADER_MODULE :=
|
|
|
|
INSTALLED_2NDBOOTLOADER_TARGET :=
|
|
|
|
endif # TARGET_NO_BOOTLOADER
|
|
|
|
ifneq ($(strip $(TARGET_NO_KERNEL)),true)
|
|
|
|
INSTALLED_KERNEL_TARGET := $(PRODUCT_OUT)/kernel
|
|
|
|
else
|
|
|
|
INSTALLED_KERNEL_TARGET :=
|
|
|
|
endif
|
2009-03-04 04:28:42 +01:00
|
|
|
|
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# the ramdisk
|
|
|
|
INTERNAL_RAMDISK_FILES := $(filter $(TARGET_ROOT_OUT)/%, \
|
|
|
|
$(ALL_GENERATED_SOURCES) \
|
|
|
|
$(ALL_DEFAULT_INSTALLED_MODULES))
|
|
|
|
|
2009-04-10 04:31:12 +02:00
|
|
|
BUILT_RAMDISK_TARGET := $(PRODUCT_OUT)/ramdisk.img
|
|
|
|
|
|
|
|
# We just build this directly to the install location.
|
|
|
|
INSTALLED_RAMDISK_TARGET := $(BUILT_RAMDISK_TARGET)
|
2012-08-14 00:03:00 +02:00
|
|
|
$(INSTALLED_RAMDISK_TARGET): $(MKBOOTFS) $(INTERNAL_RAMDISK_FILES) | $(MINIGZIP)
|
2009-03-04 04:28:42 +01:00
|
|
|
$(call pretty,"Target ram disk: $@")
|
2015-07-09 18:54:55 +02:00
|
|
|
$(hide) $(MKBOOTFS) -d $(TARGET_OUT) $(TARGET_ROOT_OUT) | $(MINIGZIP) > $@
|
2009-03-04 04:28:42 +01:00
|
|
|
|
2013-08-09 01:34:29 +02:00
|
|
|
.PHONY: ramdisk-nodeps
|
|
|
|
ramdisk-nodeps: $(MKBOOTFS) | $(MINIGZIP)
|
|
|
|
@echo "make $@: ignoring dependencies"
|
2015-07-09 18:54:55 +02:00
|
|
|
$(hide) $(MKBOOTFS) -d $(TARGET_OUT) $(TARGET_ROOT_OUT) | $(MINIGZIP) > $(INSTALLED_RAMDISK_TARGET)
|
2009-03-04 04:28:42 +01:00
|
|
|
|
|
|
|
ifneq ($(strip $(TARGET_NO_KERNEL)),true)
|
|
|
|
|
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# the boot image, which is a collection of other images.
|
|
|
|
INTERNAL_BOOTIMAGE_ARGS := \
|
|
|
|
$(addprefix --second ,$(INSTALLED_2NDBOOTLOADER_TARGET)) \
|
2015-04-09 00:11:47 +02:00
|
|
|
--kernel $(INSTALLED_KERNEL_TARGET)
|
|
|
|
|
|
|
|
ifneq ($(BOARD_BUILD_SYSTEM_ROOT_IMAGE),true)
|
|
|
|
INTERNAL_BOOTIMAGE_ARGS += --ramdisk $(INSTALLED_RAMDISK_TARGET)
|
|
|
|
endif
|
|
|
|
|
2009-03-04 04:28:42 +01:00
|
|
|
INTERNAL_BOOTIMAGE_FILES := $(filter-out --%,$(INTERNAL_BOOTIMAGE_ARGS))
|
|
|
|
|
2009-05-08 04:43:08 +02:00
|
|
|
ifdef BOARD_KERNEL_BASE
|
|
|
|
INTERNAL_BOOTIMAGE_ARGS += --base $(BOARD_KERNEL_BASE)
|
|
|
|
endif
|
|
|
|
|
2010-08-23 21:56:25 +02:00
|
|
|
ifdef BOARD_KERNEL_PAGESIZE
|
|
|
|
INTERNAL_BOOTIMAGE_ARGS += --pagesize $(BOARD_KERNEL_PAGESIZE)
|
|
|
|
endif
|
|
|
|
|
2016-05-27 18:49:49 +02:00
|
|
|
ifeq ($(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VERITY),true)
|
|
|
|
ifeq ($(BOARD_BUILD_SYSTEM_ROOT_IMAGE),true)
|
|
|
|
VERITY_KEYID := veritykeyid=id:`openssl x509 -in $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VERITY_SIGNING_KEY).x509.pem -text \
|
|
|
|
| grep keyid | sed 's/://g' | tr -d '[:space:]' | tr '[:upper:]' '[:lower:]' | sed 's/keyid//g'`
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
2016-10-06 01:57:27 +02:00
|
|
|
INTERNAL_KERNEL_CMDLINE := $(strip $(BOARD_KERNEL_CMDLINE) buildvariant=$(TARGET_BUILD_VARIANT) $(VERITY_KEYID))
|
|
|
|
ifdef INTERNAL_KERNEL_CMDLINE
|
|
|
|
INTERNAL_BOOTIMAGE_ARGS += --cmdline "$(INTERNAL_KERNEL_CMDLINE)"
|
2016-05-27 18:49:49 +02:00
|
|
|
endif
|
|
|
|
|
2016-03-15 17:49:30 +01:00
|
|
|
INTERNAL_MKBOOTIMG_VERSION_ARGS := \
|
|
|
|
--os_version $(PLATFORM_VERSION) \
|
|
|
|
--os_patch_level $(PLATFORM_SECURITY_PATCH)
|
|
|
|
|
2009-03-04 04:28:42 +01:00
|
|
|
INSTALLED_BOOTIMAGE_TARGET := $(PRODUCT_OUT)/boot.img
|
|
|
|
|
2015-11-11 04:21:34 +01:00
|
|
|
# BOARD_USES_RECOVERY_AS_BOOT = true must have BOARD_BUILD_SYSTEM_ROOT_IMAGE = true.
|
|
|
|
ifeq ($(BOARD_USES_RECOVERY_AS_BOOT),true)
|
|
|
|
ifneq ($(BOARD_BUILD_SYSTEM_ROOT_IMAGE),true)
|
|
|
|
$(error BOARD_BUILD_SYSTEM_ROOT_IMAGE must be enabled for BOARD_USES_RECOVERY_AS_BOOT.)
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
Update for new Android Verified Boot (AVB).
This updates the build system for the new Android Verified Boot
codebase. As this is based on Brillo Verified Boot, this change replaces
the existing BVB support.
Android Verified Boot is enabled by the BOARD_AVB_ENABLE variable
BOARD_AVB_ENABLE := true
This will make the build system create vbmeta.img which will contain a
hash descriptor for boot.img, a hashtree descriptor for system.img, a
kernel-cmdline descriptor for setting up dm-verity for system.img and
append a hash-tree to system.img.
Additionally, the descriptors are left in boot.img and system.img so a
third party can create their own vbmeta.img file linking - using the
option --chain_partition - to these images. If this is not needed
footers can be erased using the 'avbtool erase_footer' command. It's
also harmless to just leave them in the images.
By default, the algorithm SHA256_RSA4096 is used with a test key from
the AVB source directory. This can be overriden by the
BOARD_AVB_ALGORITHM and BOARD_AVB_KEY_PATH variables to use e.g. a
4096-bit RSA key and SHA-512:
BOARD_AVB_ALGORITHM := SHA512_RSA4096
BOARD_AVB_KEY_PATH := /path/to/rsa_key_4096bits.pem
To prevent rollback attacks, the rollback index should be increased on a
regular basis. The rollback index can be set with the
BOARD_AVB_ROLLBACK_INDEX variable:
BOARD_AVB_ROLLBACK_INDEX := 5
If this is not set, the rollback index defaults to 0.
The variable BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS can be used to specify
additional options passed to 'avbtool make_vbmeta_image'. Typical
options to be used here include '--prop', '--prop_from_file', and
'--chain_partition'.
The variable BOARD_AVBTOOL_BOOT_ADD_HASH_FOOTER_ARGS can be used to
specify additional options passed to 'avbtool add_hash_footer' for
boot.img. Typical options to be used here include '--hash_algorithm' and
'--salt'.
The variable BOARD_AVBTOOL_SYSTEM_ADD_HASHTREE_FOOTER_ARGS can be used
to specify additional options passed to 'avbtool add_hashtree_footer'
for systems.img. Typical options to be used here include
'--hash_algorithm', '--salt', and '--block_size'.
Bug: 31264226
Test: aosp_x86_64-eng 'm' and 'm dist' successful.
Change-Id: Ic9a61cfc65c148b12996e57f04da5432eef6b982
2016-09-28 23:55:27 +02:00
|
|
|
# We build recovery as boot image if BOARD_USES_RECOVERY_AS_BOOT is true.
|
|
|
|
ifneq ($(BOARD_USES_RECOVERY_AS_BOOT),true)
|
|
|
|
ifeq ($(TARGET_BOOTIMAGE_USE_EXT2),true)
|
|
|
|
$(error TARGET_BOOTIMAGE_USE_EXT2 is not supported anymore)
|
|
|
|
|
|
|
|
else ifeq (true,$(BOARD_AVB_ENABLE)) # TARGET_BOOTIMAGE_USE_EXT2 != true
|
2016-01-29 22:59:17 +01:00
|
|
|
|
2017-05-26 12:30:04 +02:00
|
|
|
$(INSTALLED_BOOTIMAGE_TARGET): $(MKBOOTIMG) $(AVBTOOL) $(INTERNAL_BOOTIMAGE_FILES) $(BOARD_AVB_BOOT_KEY_PATH)
|
2016-01-29 22:59:17 +01:00
|
|
|
$(call pretty,"Target boot image: $@")
|
Update for new Android Verified Boot (AVB).
This updates the build system for the new Android Verified Boot
codebase. As this is based on Brillo Verified Boot, this change replaces
the existing BVB support.
Android Verified Boot is enabled by the BOARD_AVB_ENABLE variable
BOARD_AVB_ENABLE := true
This will make the build system create vbmeta.img which will contain a
hash descriptor for boot.img, a hashtree descriptor for system.img, a
kernel-cmdline descriptor for setting up dm-verity for system.img and
append a hash-tree to system.img.
Additionally, the descriptors are left in boot.img and system.img so a
third party can create their own vbmeta.img file linking - using the
option --chain_partition - to these images. If this is not needed
footers can be erased using the 'avbtool erase_footer' command. It's
also harmless to just leave them in the images.
By default, the algorithm SHA256_RSA4096 is used with a test key from
the AVB source directory. This can be overriden by the
BOARD_AVB_ALGORITHM and BOARD_AVB_KEY_PATH variables to use e.g. a
4096-bit RSA key and SHA-512:
BOARD_AVB_ALGORITHM := SHA512_RSA4096
BOARD_AVB_KEY_PATH := /path/to/rsa_key_4096bits.pem
To prevent rollback attacks, the rollback index should be increased on a
regular basis. The rollback index can be set with the
BOARD_AVB_ROLLBACK_INDEX variable:
BOARD_AVB_ROLLBACK_INDEX := 5
If this is not set, the rollback index defaults to 0.
The variable BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS can be used to specify
additional options passed to 'avbtool make_vbmeta_image'. Typical
options to be used here include '--prop', '--prop_from_file', and
'--chain_partition'.
The variable BOARD_AVBTOOL_BOOT_ADD_HASH_FOOTER_ARGS can be used to
specify additional options passed to 'avbtool add_hash_footer' for
boot.img. Typical options to be used here include '--hash_algorithm' and
'--salt'.
The variable BOARD_AVBTOOL_SYSTEM_ADD_HASHTREE_FOOTER_ARGS can be used
to specify additional options passed to 'avbtool add_hashtree_footer'
for systems.img. Typical options to be used here include
'--hash_algorithm', '--salt', and '--block_size'.
Bug: 31264226
Test: aosp_x86_64-eng 'm' and 'm dist' successful.
Change-Id: Ic9a61cfc65c148b12996e57f04da5432eef6b982
2016-09-28 23:55:27 +02:00
|
|
|
$(hide) $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) $(INTERNAL_MKBOOTIMG_VERSION_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $@
|
2016-01-29 22:59:17 +01:00
|
|
|
$(hide) $(call assert-max-image-size,$@,$(BOARD_BOOTIMAGE_PARTITION_SIZE))
|
Update for new Android Verified Boot (AVB).
This updates the build system for the new Android Verified Boot
codebase. As this is based on Brillo Verified Boot, this change replaces
the existing BVB support.
Android Verified Boot is enabled by the BOARD_AVB_ENABLE variable
BOARD_AVB_ENABLE := true
This will make the build system create vbmeta.img which will contain a
hash descriptor for boot.img, a hashtree descriptor for system.img, a
kernel-cmdline descriptor for setting up dm-verity for system.img and
append a hash-tree to system.img.
Additionally, the descriptors are left in boot.img and system.img so a
third party can create their own vbmeta.img file linking - using the
option --chain_partition - to these images. If this is not needed
footers can be erased using the 'avbtool erase_footer' command. It's
also harmless to just leave them in the images.
By default, the algorithm SHA256_RSA4096 is used with a test key from
the AVB source directory. This can be overriden by the
BOARD_AVB_ALGORITHM and BOARD_AVB_KEY_PATH variables to use e.g. a
4096-bit RSA key and SHA-512:
BOARD_AVB_ALGORITHM := SHA512_RSA4096
BOARD_AVB_KEY_PATH := /path/to/rsa_key_4096bits.pem
To prevent rollback attacks, the rollback index should be increased on a
regular basis. The rollback index can be set with the
BOARD_AVB_ROLLBACK_INDEX variable:
BOARD_AVB_ROLLBACK_INDEX := 5
If this is not set, the rollback index defaults to 0.
The variable BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS can be used to specify
additional options passed to 'avbtool make_vbmeta_image'. Typical
options to be used here include '--prop', '--prop_from_file', and
'--chain_partition'.
The variable BOARD_AVBTOOL_BOOT_ADD_HASH_FOOTER_ARGS can be used to
specify additional options passed to 'avbtool add_hash_footer' for
boot.img. Typical options to be used here include '--hash_algorithm' and
'--salt'.
The variable BOARD_AVBTOOL_SYSTEM_ADD_HASHTREE_FOOTER_ARGS can be used
to specify additional options passed to 'avbtool add_hashtree_footer'
for systems.img. Typical options to be used here include
'--hash_algorithm', '--salt', and '--block_size'.
Bug: 31264226
Test: aosp_x86_64-eng 'm' and 'm dist' successful.
Change-Id: Ic9a61cfc65c148b12996e57f04da5432eef6b982
2016-09-28 23:55:27 +02:00
|
|
|
$(hide) $(AVBTOOL) add_hash_footer \
|
|
|
|
--image $@ \
|
|
|
|
--partition_size $(BOARD_BOOTIMAGE_PARTITION_SIZE) \
|
2017-05-26 12:30:04 +02:00
|
|
|
--partition_name boot $(INTERNAL_AVB_BOOT_SIGNING_ARGS) \
|
Update for new Android Verified Boot (AVB).
This updates the build system for the new Android Verified Boot
codebase. As this is based on Brillo Verified Boot, this change replaces
the existing BVB support.
Android Verified Boot is enabled by the BOARD_AVB_ENABLE variable
BOARD_AVB_ENABLE := true
This will make the build system create vbmeta.img which will contain a
hash descriptor for boot.img, a hashtree descriptor for system.img, a
kernel-cmdline descriptor for setting up dm-verity for system.img and
append a hash-tree to system.img.
Additionally, the descriptors are left in boot.img and system.img so a
third party can create their own vbmeta.img file linking - using the
option --chain_partition - to these images. If this is not needed
footers can be erased using the 'avbtool erase_footer' command. It's
also harmless to just leave them in the images.
By default, the algorithm SHA256_RSA4096 is used with a test key from
the AVB source directory. This can be overriden by the
BOARD_AVB_ALGORITHM and BOARD_AVB_KEY_PATH variables to use e.g. a
4096-bit RSA key and SHA-512:
BOARD_AVB_ALGORITHM := SHA512_RSA4096
BOARD_AVB_KEY_PATH := /path/to/rsa_key_4096bits.pem
To prevent rollback attacks, the rollback index should be increased on a
regular basis. The rollback index can be set with the
BOARD_AVB_ROLLBACK_INDEX variable:
BOARD_AVB_ROLLBACK_INDEX := 5
If this is not set, the rollback index defaults to 0.
The variable BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS can be used to specify
additional options passed to 'avbtool make_vbmeta_image'. Typical
options to be used here include '--prop', '--prop_from_file', and
'--chain_partition'.
The variable BOARD_AVBTOOL_BOOT_ADD_HASH_FOOTER_ARGS can be used to
specify additional options passed to 'avbtool add_hash_footer' for
boot.img. Typical options to be used here include '--hash_algorithm' and
'--salt'.
The variable BOARD_AVBTOOL_SYSTEM_ADD_HASHTREE_FOOTER_ARGS can be used
to specify additional options passed to 'avbtool add_hashtree_footer'
for systems.img. Typical options to be used here include
'--hash_algorithm', '--salt', and '--block_size'.
Bug: 31264226
Test: aosp_x86_64-eng 'm' and 'm dist' successful.
Change-Id: Ic9a61cfc65c148b12996e57f04da5432eef6b982
2016-09-28 23:55:27 +02:00
|
|
|
$(BOARD_AVB_BOOT_ADD_HASH_FOOTER_ARGS)
|
2016-01-29 22:59:17 +01:00
|
|
|
|
|
|
|
.PHONY: bootimage-nodeps
|
2017-05-26 12:30:04 +02:00
|
|
|
bootimage-nodeps: $(MKBOOTIMG) $(AVBTOOL) $(BOARD_AVB_BOOT_KEY_PATH)
|
2016-01-29 22:59:17 +01:00
|
|
|
@echo "make $@: ignoring dependencies"
|
Update for new Android Verified Boot (AVB).
This updates the build system for the new Android Verified Boot
codebase. As this is based on Brillo Verified Boot, this change replaces
the existing BVB support.
Android Verified Boot is enabled by the BOARD_AVB_ENABLE variable
BOARD_AVB_ENABLE := true
This will make the build system create vbmeta.img which will contain a
hash descriptor for boot.img, a hashtree descriptor for system.img, a
kernel-cmdline descriptor for setting up dm-verity for system.img and
append a hash-tree to system.img.
Additionally, the descriptors are left in boot.img and system.img so a
third party can create their own vbmeta.img file linking - using the
option --chain_partition - to these images. If this is not needed
footers can be erased using the 'avbtool erase_footer' command. It's
also harmless to just leave them in the images.
By default, the algorithm SHA256_RSA4096 is used with a test key from
the AVB source directory. This can be overriden by the
BOARD_AVB_ALGORITHM and BOARD_AVB_KEY_PATH variables to use e.g. a
4096-bit RSA key and SHA-512:
BOARD_AVB_ALGORITHM := SHA512_RSA4096
BOARD_AVB_KEY_PATH := /path/to/rsa_key_4096bits.pem
To prevent rollback attacks, the rollback index should be increased on a
regular basis. The rollback index can be set with the
BOARD_AVB_ROLLBACK_INDEX variable:
BOARD_AVB_ROLLBACK_INDEX := 5
If this is not set, the rollback index defaults to 0.
The variable BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS can be used to specify
additional options passed to 'avbtool make_vbmeta_image'. Typical
options to be used here include '--prop', '--prop_from_file', and
'--chain_partition'.
The variable BOARD_AVBTOOL_BOOT_ADD_HASH_FOOTER_ARGS can be used to
specify additional options passed to 'avbtool add_hash_footer' for
boot.img. Typical options to be used here include '--hash_algorithm' and
'--salt'.
The variable BOARD_AVBTOOL_SYSTEM_ADD_HASHTREE_FOOTER_ARGS can be used
to specify additional options passed to 'avbtool add_hashtree_footer'
for systems.img. Typical options to be used here include
'--hash_algorithm', '--salt', and '--block_size'.
Bug: 31264226
Test: aosp_x86_64-eng 'm' and 'm dist' successful.
Change-Id: Ic9a61cfc65c148b12996e57f04da5432eef6b982
2016-09-28 23:55:27 +02:00
|
|
|
$(hide) $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) $(INTERNAL_MKBOOTIMG_VERSION_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $(INSTALLED_BOOTIMAGE_TARGET)
|
2016-01-29 22:59:17 +01:00
|
|
|
$(hide) $(call assert-max-image-size,$(INSTALLED_BOOTIMAGE_TARGET),$(BOARD_BOOTIMAGE_PARTITION_SIZE))
|
Update for new Android Verified Boot (AVB).
This updates the build system for the new Android Verified Boot
codebase. As this is based on Brillo Verified Boot, this change replaces
the existing BVB support.
Android Verified Boot is enabled by the BOARD_AVB_ENABLE variable
BOARD_AVB_ENABLE := true
This will make the build system create vbmeta.img which will contain a
hash descriptor for boot.img, a hashtree descriptor for system.img, a
kernel-cmdline descriptor for setting up dm-verity for system.img and
append a hash-tree to system.img.
Additionally, the descriptors are left in boot.img and system.img so a
third party can create their own vbmeta.img file linking - using the
option --chain_partition - to these images. If this is not needed
footers can be erased using the 'avbtool erase_footer' command. It's
also harmless to just leave them in the images.
By default, the algorithm SHA256_RSA4096 is used with a test key from
the AVB source directory. This can be overriden by the
BOARD_AVB_ALGORITHM and BOARD_AVB_KEY_PATH variables to use e.g. a
4096-bit RSA key and SHA-512:
BOARD_AVB_ALGORITHM := SHA512_RSA4096
BOARD_AVB_KEY_PATH := /path/to/rsa_key_4096bits.pem
To prevent rollback attacks, the rollback index should be increased on a
regular basis. The rollback index can be set with the
BOARD_AVB_ROLLBACK_INDEX variable:
BOARD_AVB_ROLLBACK_INDEX := 5
If this is not set, the rollback index defaults to 0.
The variable BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS can be used to specify
additional options passed to 'avbtool make_vbmeta_image'. Typical
options to be used here include '--prop', '--prop_from_file', and
'--chain_partition'.
The variable BOARD_AVBTOOL_BOOT_ADD_HASH_FOOTER_ARGS can be used to
specify additional options passed to 'avbtool add_hash_footer' for
boot.img. Typical options to be used here include '--hash_algorithm' and
'--salt'.
The variable BOARD_AVBTOOL_SYSTEM_ADD_HASHTREE_FOOTER_ARGS can be used
to specify additional options passed to 'avbtool add_hashtree_footer'
for systems.img. Typical options to be used here include
'--hash_algorithm', '--salt', and '--block_size'.
Bug: 31264226
Test: aosp_x86_64-eng 'm' and 'm dist' successful.
Change-Id: Ic9a61cfc65c148b12996e57f04da5432eef6b982
2016-09-28 23:55:27 +02:00
|
|
|
$(hide) $(AVBTOOL) add_hash_footer \
|
|
|
|
--image $@ \
|
|
|
|
--partition_size $(BOARD_BOOTIMAGE_PARTITION_SIZE) \
|
2017-05-26 12:30:04 +02:00
|
|
|
--partition_name boot $(INTERNAL_AVB_BOOT_SIGNING_ARGS) \
|
Update for new Android Verified Boot (AVB).
This updates the build system for the new Android Verified Boot
codebase. As this is based on Brillo Verified Boot, this change replaces
the existing BVB support.
Android Verified Boot is enabled by the BOARD_AVB_ENABLE variable
BOARD_AVB_ENABLE := true
This will make the build system create vbmeta.img which will contain a
hash descriptor for boot.img, a hashtree descriptor for system.img, a
kernel-cmdline descriptor for setting up dm-verity for system.img and
append a hash-tree to system.img.
Additionally, the descriptors are left in boot.img and system.img so a
third party can create their own vbmeta.img file linking - using the
option --chain_partition - to these images. If this is not needed
footers can be erased using the 'avbtool erase_footer' command. It's
also harmless to just leave them in the images.
By default, the algorithm SHA256_RSA4096 is used with a test key from
the AVB source directory. This can be overriden by the
BOARD_AVB_ALGORITHM and BOARD_AVB_KEY_PATH variables to use e.g. a
4096-bit RSA key and SHA-512:
BOARD_AVB_ALGORITHM := SHA512_RSA4096
BOARD_AVB_KEY_PATH := /path/to/rsa_key_4096bits.pem
To prevent rollback attacks, the rollback index should be increased on a
regular basis. The rollback index can be set with the
BOARD_AVB_ROLLBACK_INDEX variable:
BOARD_AVB_ROLLBACK_INDEX := 5
If this is not set, the rollback index defaults to 0.
The variable BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS can be used to specify
additional options passed to 'avbtool make_vbmeta_image'. Typical
options to be used here include '--prop', '--prop_from_file', and
'--chain_partition'.
The variable BOARD_AVBTOOL_BOOT_ADD_HASH_FOOTER_ARGS can be used to
specify additional options passed to 'avbtool add_hash_footer' for
boot.img. Typical options to be used here include '--hash_algorithm' and
'--salt'.
The variable BOARD_AVBTOOL_SYSTEM_ADD_HASHTREE_FOOTER_ARGS can be used
to specify additional options passed to 'avbtool add_hashtree_footer'
for systems.img. Typical options to be used here include
'--hash_algorithm', '--salt', and '--block_size'.
Bug: 31264226
Test: aosp_x86_64-eng 'm' and 'm dist' successful.
Change-Id: Ic9a61cfc65c148b12996e57f04da5432eef6b982
2016-09-28 23:55:27 +02:00
|
|
|
$(BOARD_AVB_BOOT_ADD_HASH_FOOTER_ARGS)
|
2016-01-29 22:59:17 +01:00
|
|
|
|
Update for new Android Verified Boot (AVB).
This updates the build system for the new Android Verified Boot
codebase. As this is based on Brillo Verified Boot, this change replaces
the existing BVB support.
Android Verified Boot is enabled by the BOARD_AVB_ENABLE variable
BOARD_AVB_ENABLE := true
This will make the build system create vbmeta.img which will contain a
hash descriptor for boot.img, a hashtree descriptor for system.img, a
kernel-cmdline descriptor for setting up dm-verity for system.img and
append a hash-tree to system.img.
Additionally, the descriptors are left in boot.img and system.img so a
third party can create their own vbmeta.img file linking - using the
option --chain_partition - to these images. If this is not needed
footers can be erased using the 'avbtool erase_footer' command. It's
also harmless to just leave them in the images.
By default, the algorithm SHA256_RSA4096 is used with a test key from
the AVB source directory. This can be overriden by the
BOARD_AVB_ALGORITHM and BOARD_AVB_KEY_PATH variables to use e.g. a
4096-bit RSA key and SHA-512:
BOARD_AVB_ALGORITHM := SHA512_RSA4096
BOARD_AVB_KEY_PATH := /path/to/rsa_key_4096bits.pem
To prevent rollback attacks, the rollback index should be increased on a
regular basis. The rollback index can be set with the
BOARD_AVB_ROLLBACK_INDEX variable:
BOARD_AVB_ROLLBACK_INDEX := 5
If this is not set, the rollback index defaults to 0.
The variable BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS can be used to specify
additional options passed to 'avbtool make_vbmeta_image'. Typical
options to be used here include '--prop', '--prop_from_file', and
'--chain_partition'.
The variable BOARD_AVBTOOL_BOOT_ADD_HASH_FOOTER_ARGS can be used to
specify additional options passed to 'avbtool add_hash_footer' for
boot.img. Typical options to be used here include '--hash_algorithm' and
'--salt'.
The variable BOARD_AVBTOOL_SYSTEM_ADD_HASHTREE_FOOTER_ARGS can be used
to specify additional options passed to 'avbtool add_hashtree_footer'
for systems.img. Typical options to be used here include
'--hash_algorithm', '--salt', and '--block_size'.
Bug: 31264226
Test: aosp_x86_64-eng 'm' and 'm dist' successful.
Change-Id: Ic9a61cfc65c148b12996e57f04da5432eef6b982
2016-09-28 23:55:27 +02:00
|
|
|
else ifeq (true,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_BOOT_SIGNER)) # BOARD_AVB_ENABLE != true
|
2014-07-09 05:07:41 +02:00
|
|
|
|
|
|
|
$(INSTALLED_BOOTIMAGE_TARGET): $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_FILES) $(BOOT_SIGNER)
|
|
|
|
$(call pretty,"Target boot image: $@")
|
2016-03-15 17:49:30 +01:00
|
|
|
$(hide) $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) $(INTERNAL_MKBOOTIMG_VERSION_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $@
|
2014-11-07 05:38:00 +01:00
|
|
|
$(BOOT_SIGNER) /boot $@ $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VERITY_SIGNING_KEY).pk8 $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VERITY_SIGNING_KEY).x509.pem $@
|
2014-07-09 05:07:41 +02:00
|
|
|
$(hide) $(call assert-max-image-size,$@,$(BOARD_BOOTIMAGE_PARTITION_SIZE))
|
|
|
|
|
|
|
|
.PHONY: bootimage-nodeps
|
|
|
|
bootimage-nodeps: $(MKBOOTIMG) $(BOOT_SIGNER)
|
|
|
|
@echo "make $@: ignoring dependencies"
|
2016-03-15 17:49:30 +01:00
|
|
|
$(hide) $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) $(INTERNAL_MKBOOTIMG_VERSION_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $(INSTALLED_BOOTIMAGE_TARGET)
|
2014-11-07 05:38:00 +01:00
|
|
|
$(BOOT_SIGNER) /boot $(INSTALLED_BOOTIMAGE_TARGET) $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VERITY_SIGNING_KEY).pk8 $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VERITY_SIGNING_KEY).x509.pem $(INSTALLED_BOOTIMAGE_TARGET)
|
2014-07-09 05:07:41 +02:00
|
|
|
$(hide) $(call assert-max-image-size,$(INSTALLED_BOOTIMAGE_TARGET),$(BOARD_BOOTIMAGE_PARTITION_SIZE))
|
|
|
|
|
2015-04-07 16:08:59 +02:00
|
|
|
else ifeq (true,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VBOOT)) # PRODUCT_SUPPORTS_BOOT_SIGNER != true
|
2015-03-03 17:54:11 +01:00
|
|
|
|
2017-02-23 07:54:39 +01:00
|
|
|
$(INSTALLED_BOOTIMAGE_TARGET): $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_FILES) $(VBOOT_SIGNER) $(FUTILITY)
|
2015-03-03 17:54:11 +01:00
|
|
|
$(call pretty,"Target boot image: $@")
|
2016-03-15 17:49:30 +01:00
|
|
|
$(hide) $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) $(INTERNAL_MKBOOTIMG_VERSION_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $@.unsigned
|
2015-08-07 20:58:05 +02:00
|
|
|
$(VBOOT_SIGNER) $(FUTILITY) $@.unsigned $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VBOOT_SIGNING_KEY).vbpubk $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VBOOT_SIGNING_KEY).vbprivk $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VBOOT_SIGNING_SUBKEY).vbprivk $@.keyblock $@
|
2015-03-03 17:54:11 +01:00
|
|
|
$(hide) $(call assert-max-image-size,$@,$(BOARD_BOOTIMAGE_PARTITION_SIZE))
|
|
|
|
|
|
|
|
.PHONY: bootimage-nodeps
|
2017-02-23 07:54:39 +01:00
|
|
|
bootimage-nodeps: $(MKBOOTIMG) $(VBOOT_SIGNER) $(FUTILITY)
|
2015-03-03 17:54:11 +01:00
|
|
|
@echo "make $@: ignoring dependencies"
|
2016-03-15 17:49:30 +01:00
|
|
|
$(hide) $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) $(INTERNAL_MKBOOTIMG_VERSION_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $(INSTALLED_BOOTIMAGE_TARGET).unsigned
|
2015-08-07 20:58:05 +02:00
|
|
|
$(VBOOT_SIGNER) $(FUTILITY) $(INSTALLED_BOOTIMAGE_TARGET).unsigned $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VBOOT_SIGNING_KEY).vbpubk $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VBOOT_SIGNING_KEY).vbprivk $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VBOOT_SIGNING_SUBKEY).vbprivk $(INSTALLED_BOOTIMAGE_TARGET).keyblock $(INSTALLED_BOOTIMAGE_TARGET)
|
2015-03-03 17:54:11 +01:00
|
|
|
$(hide) $(call assert-max-image-size,$(INSTALLED_BOOTIMAGE_TARGET),$(BOARD_BOOTIMAGE_PARTITION_SIZE))
|
|
|
|
|
|
|
|
else # PRODUCT_SUPPORTS_VBOOT != true
|
2009-03-04 04:28:42 +01:00
|
|
|
|
|
|
|
$(INSTALLED_BOOTIMAGE_TARGET): $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_FILES)
|
|
|
|
$(call pretty,"Target boot image: $@")
|
2016-03-15 17:49:30 +01:00
|
|
|
$(hide) $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) $(INTERNAL_MKBOOTIMG_VERSION_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $@
|
2014-06-16 23:19:36 +02:00
|
|
|
$(hide) $(call assert-max-image-size,$@,$(BOARD_BOOTIMAGE_PARTITION_SIZE))
|
2013-08-09 01:34:29 +02:00
|
|
|
|
|
|
|
.PHONY: bootimage-nodeps
|
|
|
|
bootimage-nodeps: $(MKBOOTIMG)
|
|
|
|
@echo "make $@: ignoring dependencies"
|
2016-03-15 17:49:30 +01:00
|
|
|
$(hide) $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) $(INTERNAL_MKBOOTIMG_VERSION_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $(INSTALLED_BOOTIMAGE_TARGET)
|
2014-06-16 23:19:36 +02:00
|
|
|
$(hide) $(call assert-max-image-size,$(INSTALLED_BOOTIMAGE_TARGET),$(BOARD_BOOTIMAGE_PARTITION_SIZE))
|
2013-08-09 01:34:29 +02:00
|
|
|
|
2009-03-04 04:28:42 +01:00
|
|
|
endif # TARGET_BOOTIMAGE_USE_EXT2
|
2015-11-11 04:21:34 +01:00
|
|
|
endif # BOARD_USES_RECOVERY_AS_BOOT
|
2009-03-04 04:28:42 +01:00
|
|
|
|
|
|
|
else # TARGET_NO_KERNEL
|
2016-10-06 01:57:27 +02:00
|
|
|
INTERNAL_KERNEL_CMDLINE := $(strip $(BOARD_KERNEL_CMDLINE))
|
2009-03-04 04:28:42 +01:00
|
|
|
# HACK: The top-level targets depend on the bootimage. Not all targets
|
|
|
|
# can produce a bootimage, though, and emulator targets need the ramdisk
|
|
|
|
# instead. Fake it out by calling the ramdisk the bootimage.
|
|
|
|
# TODO: make the emulator use bootimages, and make mkbootimg accept
|
|
|
|
# kernel-less inputs.
|
|
|
|
INSTALLED_BOOTIMAGE_TARGET := $(INSTALLED_RAMDISK_TARGET)
|
|
|
|
endif
|
|
|
|
|
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# NOTICE files
|
|
|
|
#
|
2012-03-01 12:34:41 +01:00
|
|
|
# We are required to publish the licenses for all code under BSD, GPL and
|
|
|
|
# Apache licenses (and possibly other more exotic ones as well). We err on the
|
|
|
|
# side of caution, so the licenses for other third-party code are included here
|
|
|
|
# too.
|
|
|
|
#
|
2009-03-04 04:28:42 +01:00
|
|
|
# This needs to be before the systemimage rules, because it adds to
|
|
|
|
# ALL_DEFAULT_INSTALLED_MODULES, which those use to pick which files
|
|
|
|
# go into the systemimage.
|
|
|
|
|
2012-02-29 20:18:08 +01:00
|
|
|
.PHONY: notice_files
|
|
|
|
|
2017-04-19 08:26:47 +02:00
|
|
|
# Create the rule to combine the files into text and html/xml forms
|
|
|
|
# $(1) - xml_excluded_vendor|xml_vendor|html
|
|
|
|
# $(2) - Plain text output file
|
|
|
|
# $(3) - HTML/XML output file
|
|
|
|
# $(4) - File title
|
|
|
|
# $(5) - Directory to use. Notice files are all $(4)/src. Other
|
2009-03-04 04:28:42 +01:00
|
|
|
# directories in there will be used for scratch
|
2017-04-19 08:26:47 +02:00
|
|
|
# $(6) - Dependencies for the output files
|
2009-03-04 04:28:42 +01:00
|
|
|
#
|
|
|
|
# The algorithm here is that we go collect a hash for each of the notice
|
|
|
|
# files and write the names of the files that match that hash. Then
|
|
|
|
# to generate the real files, we go print out all of the files and their
|
|
|
|
# hashes.
|
|
|
|
#
|
|
|
|
# These rules are fairly complex, so they depend on this makefile so if
|
|
|
|
# it changes, they'll run again.
|
|
|
|
#
|
|
|
|
# TODO: We could clean this up so that we just record the locations of the
|
|
|
|
# original notice files instead of making rules to copy them somwehere.
|
|
|
|
# Then we could traverse that without quite as much bash drama.
|
|
|
|
define combine-notice-files
|
2017-04-19 08:26:47 +02:00
|
|
|
$(2) $(3): PRIVATE_MESSAGE := $(4)
|
|
|
|
$(2) $(3): PRIVATE_DIR := $(5)
|
|
|
|
$(2) : $(3)
|
|
|
|
$(3) : $(6) $(BUILD_SYSTEM)/Makefile build/tools/generate-notice-files.py
|
|
|
|
build/tools/generate-notice-files.py --text-output $(2) \
|
|
|
|
$(if $(filter $(1),xml_excluded_vendor),-e vendor --xml-output, \
|
|
|
|
$(if $(filter $(1),xml_vendor),-i vendor --xml-output, \
|
|
|
|
--html-output)) $(3) \
|
|
|
|
-t $$(PRIVATE_MESSAGE) -s $$(PRIVATE_DIR)/src
|
|
|
|
notice_files: $(2) $(3)
|
2009-03-04 04:28:42 +01:00
|
|
|
endef
|
|
|
|
|
|
|
|
# TODO These intermediate NOTICE.txt/NOTICE.html files should go into
|
|
|
|
# TARGET_OUT_NOTICE_FILES now that the notice files are gathered from
|
|
|
|
# the src subdirectory.
|
|
|
|
|
2012-02-29 20:18:08 +01:00
|
|
|
target_notice_file_txt := $(TARGET_OUT_INTERMEDIATES)/NOTICE.txt
|
2017-04-19 08:26:47 +02:00
|
|
|
target_notice_file_html_or_xml := $(TARGET_OUT_INTERMEDIATES)/NOTICE.html
|
|
|
|
target_notice_file_html_or_xml_gz := $(TARGET_OUT_INTERMEDIATES)/NOTICE.html.gz
|
|
|
|
installed_notice_html_or_xml_gz := $(TARGET_OUT)/etc/NOTICE.html.gz
|
2012-02-29 20:18:08 +01:00
|
|
|
tools_notice_file_txt := $(HOST_OUT_INTERMEDIATES)/NOTICE.txt
|
2009-03-04 04:28:42 +01:00
|
|
|
tools_notice_file_html := $(HOST_OUT_INTERMEDIATES)/NOTICE.html
|
|
|
|
|
2017-04-19 08:26:47 +02:00
|
|
|
ifeq ($(PRODUCT_FULL_TREBLE),true)
|
|
|
|
target_notice_file_html_or_xml := $(TARGET_OUT_INTERMEDIATES)/NOTICE.xml
|
|
|
|
target_notice_file_html_or_xml_gz := $(TARGET_OUT_INTERMEDIATES)/NOTICE.xml.gz
|
|
|
|
installed_notice_html_or_xml_gz := $(TARGET_OUT)/etc/NOTICE.xml.gz
|
|
|
|
|
|
|
|
target_vendor_notice_file_txt := $(TARGET_OUT_INTERMEDIATES)/NOTICE_VENDOR.txt
|
|
|
|
target_vendor_notice_file_xml := $(TARGET_OUT_INTERMEDIATES)/NOTICE_VENDOR.xml
|
|
|
|
target_vendor_notice_file_xml_gz := $(TARGET_OUT_INTERMEDIATES)/NOTICE_VENDOR.xml.gz
|
|
|
|
installed_vendor_notice_xml_gz := $(TARGET_OUT_VENDOR)/etc/NOTICE.xml.gz
|
|
|
|
endif
|
|
|
|
|
2013-08-23 05:02:03 +02:00
|
|
|
ifndef TARGET_BUILD_APPS
|
2009-03-04 04:28:42 +01:00
|
|
|
kernel_notice_file := $(TARGET_OUT_NOTICE_FILES)/src/kernel.txt
|
2017-02-23 22:17:46 +01:00
|
|
|
winpthreads_notice_file := $(TARGET_OUT_NOTICE_FILES)/src/winpthreads.txt
|
2012-04-10 02:04:12 +02:00
|
|
|
pdk_fusion_notice_files := $(filter $(TARGET_OUT_NOTICE_FILES)/%, $(ALL_PDK_FUSION_FILES))
|
2009-03-04 04:28:42 +01:00
|
|
|
|
2017-04-19 08:26:47 +02:00
|
|
|
ifdef target_vendor_notice_file_xml_gz
|
|
|
|
$(eval $(call combine-notice-files, xml_excluded_vendor, \
|
2012-02-29 20:18:08 +01:00
|
|
|
$(target_notice_file_txt), \
|
2017-04-19 08:26:47 +02:00
|
|
|
$(target_notice_file_html_or_xml), \
|
2009-03-04 04:28:42 +01:00
|
|
|
"Notices for files contained in the filesystem images in this directory:", \
|
|
|
|
$(TARGET_OUT_NOTICE_FILES), \
|
2012-04-10 02:04:12 +02:00
|
|
|
$(ALL_DEFAULT_INSTALLED_MODULES) $(kernel_notice_file) $(pdk_fusion_notice_files)))
|
2017-04-19 08:26:47 +02:00
|
|
|
$(eval $(call combine-notice-files, xml_vendor, \
|
|
|
|
$(target_vendor_notice_file_txt), \
|
|
|
|
$(target_vendor_notice_file_xml), \
|
|
|
|
"Notices for files contained in the vendor filesystem image in this directory:", \
|
|
|
|
$(TARGET_OUT_NOTICE_FILES), \
|
|
|
|
$(target_notice_file_html_or_xml)))
|
|
|
|
else
|
|
|
|
$(eval $(call combine-notice-files, html, \
|
|
|
|
$(target_notice_file_txt), \
|
|
|
|
$(target_notice_file_html_or_xml), \
|
|
|
|
"Notices for files contained in the filesystem images in this directory:", \
|
|
|
|
$(TARGET_OUT_NOTICE_FILES), \
|
|
|
|
$(ALL_DEFAULT_INSTALLED_MODULES) $(kernel_notice_file) $(pdk_fusion_notice_files)))
|
|
|
|
endif
|
2009-03-04 04:28:42 +01:00
|
|
|
|
2017-04-19 08:26:47 +02:00
|
|
|
$(eval $(call combine-notice-files, html, \
|
2012-02-29 20:18:08 +01:00
|
|
|
$(tools_notice_file_txt), \
|
2009-03-04 04:28:42 +01:00
|
|
|
$(tools_notice_file_html), \
|
|
|
|
"Notices for files contained in the tools directory:", \
|
|
|
|
$(HOST_OUT_NOTICE_FILES), \
|
2017-02-23 22:17:46 +01:00
|
|
|
$(ALL_DEFAULT_INSTALLED_MODULES) \
|
|
|
|
$(winpthreads_notice_file)))
|
2009-03-04 04:28:42 +01:00
|
|
|
|
|
|
|
# Install the html file at /system/etc/NOTICE.html.gz.
|
|
|
|
# This is not ideal, but this is very late in the game, after a lot of
|
|
|
|
# the module processing has already been done -- in fact, we used the
|
|
|
|
# fact that all that has been done to get the list of modules that we
|
|
|
|
# need notice files for.
|
2017-04-19 08:26:47 +02:00
|
|
|
$(target_notice_file_html_or_xml_gz): $(target_notice_file_html_or_xml) | $(MINIGZIP)
|
2009-06-15 23:30:14 +02:00
|
|
|
$(hide) $(MINIGZIP) -9 < $< > $@
|
2017-04-19 08:26:47 +02:00
|
|
|
$(installed_notice_html_or_xml_gz): $(target_notice_file_html_or_xml_gz)
|
2009-03-04 04:28:42 +01:00
|
|
|
$(copy-file-to-target)
|
2009-04-30 22:52:50 +02:00
|
|
|
|
2017-04-19 08:26:47 +02:00
|
|
|
ifdef target_vendor_notice_file_xml_gz
|
|
|
|
# Install the vendor html file at /vendor/etc/NOTICE.xml.gz.
|
|
|
|
$(target_vendor_notice_file_xml_gz): $(target_vendor_notice_file_xml) | $(MINIGZIP)
|
|
|
|
$(hide) $(MINIGZIP) -9 < $< > $@
|
|
|
|
$(installed_vendor_notice_xml_gz): $(target_vendor_notice_file_xml_gz)
|
|
|
|
$(copy-file-to-target)
|
|
|
|
endif
|
|
|
|
|
2009-04-30 22:52:50 +02:00
|
|
|
# if we've been run my mm, mmm, etc, don't reinstall this every time
|
|
|
|
ifeq ($(ONE_SHOT_MAKEFILE),)
|
2017-04-19 08:26:47 +02:00
|
|
|
ALL_DEFAULT_INSTALLED_MODULES += $(installed_notice_html_or_xml_gz)
|
|
|
|
ifdef target_vendor_notice_file_xml_gz
|
|
|
|
ALL_DEFAULT_INSTALLED_MODULES += $(installed_vendor_notice_xml_gz)
|
|
|
|
endif
|
2009-04-30 22:52:50 +02:00
|
|
|
endif
|
2013-08-23 05:02:03 +02:00
|
|
|
endif # TARGET_BUILD_APPS
|
2009-03-04 04:28:42 +01:00
|
|
|
|
|
|
|
# The kernel isn't really a module, so to get its module file in there, we
|
|
|
|
# make the target NOTICE files depend on this particular file too, which will
|
|
|
|
# then be in the right directory for the find in combine-notice-files to work.
|
|
|
|
$(kernel_notice_file): \
|
2015-11-09 01:28:15 +01:00
|
|
|
$(BUILD_SYSTEM)/LINUX_KERNEL_COPYING \
|
2009-03-04 04:28:42 +01:00
|
|
|
| $(ACP)
|
|
|
|
@echo Copying: $@
|
|
|
|
$(hide) mkdir -p $(dir $@)
|
|
|
|
$(hide) $(ACP) $< $@
|
|
|
|
|
2017-02-23 22:17:46 +01:00
|
|
|
$(winpthreads_notice_file): \
|
|
|
|
$(BUILD_SYSTEM)/WINPTHREADS_COPYING \
|
|
|
|
| $(ACP)
|
|
|
|
@echo Copying: $@
|
|
|
|
$(hide) mkdir -p $(dir $@)
|
|
|
|
$(hide) $(ACP) $< $@
|
2009-03-04 04:28:42 +01:00
|
|
|
|
2009-06-15 23:30:14 +02:00
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# Build a keystore with the authorized keys in it, used to verify the
|
|
|
|
# authenticity of downloaded OTA packages.
|
|
|
|
#
|
|
|
|
# This rule adds to ALL_DEFAULT_INSTALLED_MODULES, so it needs to come
|
|
|
|
# before the rules that use that variable to build the image.
|
2015-10-29 22:26:18 +01:00
|
|
|
ALL_DEFAULT_INSTALLED_MODULES += $(TARGET_OUT_ETC)/security/otacerts.zip
|
|
|
|
$(TARGET_OUT_ETC)/security/otacerts.zip: KEY_CERT_PAIR := $(DEFAULT_KEY_CERT_PAIR)
|
2015-10-30 00:33:05 +01:00
|
|
|
$(TARGET_OUT_ETC)/security/otacerts.zip: $(addsuffix .x509.pem,$(DEFAULT_KEY_CERT_PAIR)) | $(ZIPTIME)
|
2009-06-15 23:30:14 +02:00
|
|
|
$(hide) rm -f $@
|
|
|
|
$(hide) mkdir -p $(dir $@)
|
2015-10-30 00:33:05 +01:00
|
|
|
$(hide) zip -qjX $@ $<
|
|
|
|
$(remove-timestamps-from-package)
|
2009-06-15 23:30:14 +02:00
|
|
|
|
2017-03-29 05:48:18 +02:00
|
|
|
# Carry the public key for update_engine if it's a non-IoT target that
|
2016-01-21 05:58:20 +01:00
|
|
|
# uses the AB updater. We use the same key as otacerts but in RSA public key
|
|
|
|
# format.
|
|
|
|
ifeq ($(AB_OTA_UPDATER),true)
|
2017-03-29 05:48:18 +02:00
|
|
|
ifneq ($(PRODUCT_IOT),true)
|
2016-01-21 23:28:50 +01:00
|
|
|
ALL_DEFAULT_INSTALLED_MODULES += $(TARGET_OUT_ETC)/update_engine/update-payload-key.pub.pem
|
|
|
|
$(TARGET_OUT_ETC)/update_engine/update-payload-key.pub.pem: $(addsuffix .x509.pem,$(DEFAULT_KEY_CERT_PAIR))
|
2016-01-21 05:58:20 +01:00
|
|
|
$(hide) rm -f $@
|
|
|
|
$(hide) mkdir -p $(dir $@)
|
|
|
|
$(hide) openssl x509 -pubkey -noout -in $< > $@
|
2016-08-04 05:52:54 +02:00
|
|
|
|
|
|
|
ALL_DEFAULT_INSTALLED_MODULES += $(TARGET_RECOVERY_ROOT_OUT)/etc/update_engine/update-payload-key.pub.pem
|
|
|
|
$(TARGET_RECOVERY_ROOT_OUT)/etc/update_engine/update-payload-key.pub.pem: $(TARGET_OUT_ETC)/update_engine/update-payload-key.pub.pem
|
|
|
|
$(hide) cp -f $< $@
|
2016-01-21 05:58:20 +01:00
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
2009-06-15 23:30:14 +02:00
|
|
|
.PHONY: otacerts
|
|
|
|
otacerts: $(TARGET_OUT_ETC)/security/otacerts.zip
|
|
|
|
|
|
|
|
|
2009-03-04 04:28:42 +01:00
|
|
|
# #################################################################
|
|
|
|
# Targets for user images
|
|
|
|
# #################################################################
|
|
|
|
|
2010-06-16 23:31:34 +02:00
|
|
|
INTERNAL_USERIMAGES_EXT_VARIANT :=
|
2009-03-04 04:28:42 +01:00
|
|
|
ifeq ($(TARGET_USERIMAGES_USE_EXT2),true)
|
2010-05-07 11:23:59 +02:00
|
|
|
INTERNAL_USERIMAGES_USE_EXT := true
|
|
|
|
INTERNAL_USERIMAGES_EXT_VARIANT := ext2
|
|
|
|
else
|
|
|
|
ifeq ($(TARGET_USERIMAGES_USE_EXT3),true)
|
|
|
|
INTERNAL_USERIMAGES_USE_EXT := true
|
|
|
|
INTERNAL_USERIMAGES_EXT_VARIANT := ext3
|
|
|
|
else
|
|
|
|
ifeq ($(TARGET_USERIMAGES_USE_EXT4),true)
|
|
|
|
INTERNAL_USERIMAGES_USE_EXT := true
|
|
|
|
INTERNAL_USERIMAGES_EXT_VARIANT := ext4
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
2014-10-23 05:01:22 +02:00
|
|
|
# These options tell the recovery updater/installer how to mount the partitions writebale.
|
|
|
|
# <fstype>=<fstype_opts>[|<fstype_opts>]...
|
|
|
|
# fstype_opts := <opt>[,<opt>]...
|
|
|
|
# opt := <name>[=<value>]
|
2014-10-24 01:27:03 +02:00
|
|
|
# The following worked on Nexus devices with Kernel 3.1, 3.4, 3.10
|
|
|
|
DEFAULT_TARGET_RECOVERY_FSTYPE_MOUNT_OPTIONS := ext4=max_batch_time=0,commit=1,data=ordered,barrier=1,errors=panic,nodelalloc
|
2014-10-23 05:01:22 +02:00
|
|
|
|
2010-11-18 00:40:38 +01:00
|
|
|
ifneq (true,$(TARGET_USERIMAGES_SPARSE_EXT_DISABLED))
|
|
|
|
INTERNAL_USERIMAGES_SPARSE_EXT_FLAG := -s
|
|
|
|
endif
|
|
|
|
|
2010-05-07 11:23:59 +02:00
|
|
|
ifeq ($(INTERNAL_USERIMAGES_USE_EXT),true)
|
2014-06-16 23:17:40 +02:00
|
|
|
INTERNAL_USERIMAGES_DEPS := $(SIMG2IMG)
|
|
|
|
INTERNAL_USERIMAGES_DEPS += $(MKEXTUSERIMG) $(MAKE_EXT4FS) $(E2FSCK)
|
|
|
|
ifeq ($(TARGET_USERIMAGES_USE_F2FS),true)
|
|
|
|
INTERNAL_USERIMAGES_DEPS += $(MKF2FSUSERIMG) $(MAKE_F2FS)
|
|
|
|
endif
|
2009-03-04 04:28:42 +01:00
|
|
|
endif
|
2014-06-16 23:17:40 +02:00
|
|
|
|
2017-06-21 22:51:46 +02:00
|
|
|
ifeq ($(BOARD_AVB_ENABLE),true)
|
|
|
|
INTERNAL_USERIMAGES_DEPS += $(AVBTOOL)
|
|
|
|
endif
|
|
|
|
|
2015-12-16 03:00:14 +01:00
|
|
|
ifneq (true,$(TARGET_USERIMAGES_SPARSE_SQUASHFS_DISABLED))
|
|
|
|
INTERNAL_USERIMAGES_SPARSE_SQUASHFS_FLAG := -s
|
|
|
|
endif
|
2016-02-09 23:12:47 +01:00
|
|
|
ifneq ($(filter $(BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE) $(BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE),squashfs),)
|
2015-06-25 00:42:19 +02:00
|
|
|
INTERNAL_USERIMAGES_DEPS += $(MAKE_SQUASHFS) $(MKSQUASHFSUSERIMG) $(IMG2SIMG)
|
2015-03-03 21:30:37 +01:00
|
|
|
endif
|
|
|
|
|
2011-11-01 02:13:30 +01:00
|
|
|
INTERNAL_USERIMAGES_BINARY_PATHS := $(sort $(dir $(INTERNAL_USERIMAGES_DEPS)))
|
2009-03-04 04:28:42 +01:00
|
|
|
|
2014-04-29 01:27:32 +02:00
|
|
|
ifeq (true,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VERITY))
|
2014-04-17 03:49:56 +02:00
|
|
|
INTERNAL_USERIMAGES_DEPS += $(BUILD_VERITY_TREE) $(APPEND2SIMG) $(VERITY_SIGNER)
|
2015-05-20 08:30:57 +02:00
|
|
|
ifeq (true,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VERITY_FEC))
|
|
|
|
INTERNAL_USERIMAGES_DEPS += $(FEC)
|
|
|
|
endif
|
2013-06-17 02:26:08 +02:00
|
|
|
endif
|
|
|
|
|
Add /file_contexts.bin only to devices which need it
/file_contexts.bin is needed only by devices which do not have
PRODUCT_FULL_TREBLE set to true. Adding this file to devices which
have PRODUCT_FULL_TREBLE set to true causes confusion and wastes
about 800 kB of space.
/file_contexts.bin was being added unconditionally to all devices due
to the build system needing the combined file_contexts file for
host-side labelling of filesystems in images and for inclusion into
target files ZIP (again, to be used for host-side labelling later).
This change switches these targets to depend on the same file, but
from intermediates directory. As a result, everything continues to
work just fine, but without pulling in /file_contexts.bin. On devices
which need /file_contexts.bin, it is pulled in by
system/core/init/Android.mk.
Test: /file_contexts.bin still there on bullhead, but not there on
sailfish with PRODUCT_FULL_TREBLE set to true.
Test: Clean build, device boots up with, no new denials.
Reboot to recovery, recovery boots up fine too, no denials.
This was tested on sailfish-eng and marlin-eng.
Bug: 36002414
Change-Id: I9bbbb08bbf7d874bba0bafcc19bcbf9eec564326
2017-03-13 21:28:34 +01:00
|
|
|
SELINUX_FC := $(call intermediates-dir-for,ETC,file_contexts.bin)/file_contexts.bin
|
2012-11-21 19:47:00 +01:00
|
|
|
INTERNAL_USERIMAGES_DEPS += $(SELINUX_FC)
|
|
|
|
|
2016-03-03 06:07:23 +01:00
|
|
|
INTERNAL_USERIMAGES_DEPS += $(BLK_ALLOC_TO_BASE_FS)
|
|
|
|
|
2017-03-11 01:53:45 +01:00
|
|
|
ifeq ($(INTERNAL_USERIMAGES_USE_EXT),true)
|
|
|
|
INTERNAL_USERIMAGES_DEPS += $(MKE2FS_CONF)
|
|
|
|
endif
|
|
|
|
|
2011-10-29 02:02:30 +02:00
|
|
|
# $(1): the path of the output dictionary file
|
2013-02-27 22:54:02 +01:00
|
|
|
# $(2): additional "key=value" pairs to append to the dictionary file.
|
2011-10-29 02:02:30 +02:00
|
|
|
define generate-userimage-prop-dictionary
|
2016-12-16 09:45:19 +01:00
|
|
|
$(hide) echo "ext_mkuserimg=$(notdir $(MKEXTUSERIMG))" >> $(1)
|
2011-10-29 02:02:30 +02:00
|
|
|
$(if $(INTERNAL_USERIMAGES_EXT_VARIANT),$(hide) echo "fs_type=$(INTERNAL_USERIMAGES_EXT_VARIANT)" >> $(1))
|
|
|
|
$(if $(BOARD_SYSTEMIMAGE_PARTITION_SIZE),$(hide) echo "system_size=$(BOARD_SYSTEMIMAGE_PARTITION_SIZE)" >> $(1))
|
2015-03-03 21:30:37 +01:00
|
|
|
$(if $(BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE),$(hide) echo "system_fs_type=$(BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE)" >> $(1))
|
2016-10-20 19:58:12 +02:00
|
|
|
$(if $(BOARD_SYSTEMIMAGE_EXTFS_INODE_COUNT),$(hide) echo "system_extfs_inode_count=$(BOARD_SYSTEMIMAGE_EXTFS_INODE_COUNT)" >> $(1))
|
2014-11-19 03:03:13 +01:00
|
|
|
$(if $(BOARD_SYSTEMIMAGE_JOURNAL_SIZE),$(hide) echo "system_journal_size=$(BOARD_SYSTEMIMAGE_JOURNAL_SIZE)" >> $(1))
|
2015-06-23 20:16:05 +02:00
|
|
|
$(if $(BOARD_HAS_EXT4_RESERVED_BLOCKS),$(hide) echo "has_ext4_reserved_blocks=$(BOARD_HAS_EXT4_RESERVED_BLOCKS)" >> $(1))
|
2015-06-17 21:35:15 +02:00
|
|
|
$(if $(BOARD_SYSTEMIMAGE_SQUASHFS_COMPRESSOR),$(hide) echo "system_squashfs_compressor=$(BOARD_SYSTEMIMAGE_SQUASHFS_COMPRESSOR)" >> $(1))
|
|
|
|
$(if $(BOARD_SYSTEMIMAGE_SQUASHFS_COMPRESSOR_OPT),$(hide) echo "system_squashfs_compressor_opt=$(BOARD_SYSTEMIMAGE_SQUASHFS_COMPRESSOR_OPT)" >> $(1))
|
2016-05-24 21:59:30 +02:00
|
|
|
$(if $(BOARD_SYSTEMIMAGE_SQUASHFS_BLOCK_SIZE),$(hide) echo "system_squashfs_block_size=$(BOARD_SYSTEMIMAGE_SQUASHFS_BLOCK_SIZE)" >> $(1))
|
2016-06-16 00:53:07 +02:00
|
|
|
$(if $(BOARD_SYSTEMIMAGE_SQUASHFS_DISABLE_4K_ALIGN),$(hide) echo "system_squashfs_disable_4k_align=$(BOARD_SYSTEMIMAGE_SQUASHFS_DISABLE_4K_ALIGN)" >> $(1))
|
2016-04-23 02:22:07 +02:00
|
|
|
$(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SYSTEM_BASE_FS_PATH),$(hide) echo "system_base_fs_file=$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SYSTEM_BASE_FS_PATH)" >> $(1))
|
2017-05-03 22:43:27 +02:00
|
|
|
$(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SYSTEM_HEADROOM),$(hide) echo "system_headroom=$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SYSTEM_HEADROOM)" >> $(1))
|
2014-06-16 23:17:40 +02:00
|
|
|
$(if $(BOARD_USERDATAIMAGE_FILE_SYSTEM_TYPE),$(hide) echo "userdata_fs_type=$(BOARD_USERDATAIMAGE_FILE_SYSTEM_TYPE)" >> $(1))
|
2011-10-29 02:02:30 +02:00
|
|
|
$(if $(BOARD_USERDATAIMAGE_PARTITION_SIZE),$(hide) echo "userdata_size=$(BOARD_USERDATAIMAGE_PARTITION_SIZE)" >> $(1))
|
2017-01-06 01:48:14 +01:00
|
|
|
$(if $(BOARD_FLASH_LOGICAL_BLOCK_SIZE), $(hide) echo "flash_logical_block_size=$(BOARD_FLASH_LOGICAL_BLOCK_SIZE)" >> $(1))
|
|
|
|
$(if $(BOARD_FLASH_ERASE_BLOCK_SIZE), $(hide) echo "flash_erase_block_size=$(BOARD_FLASH_ERASE_BLOCK_SIZE)" >> $(1))
|
2011-11-04 19:37:01 +01:00
|
|
|
$(if $(BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE),$(hide) echo "cache_fs_type=$(BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE)" >> $(1))
|
|
|
|
$(if $(BOARD_CACHEIMAGE_PARTITION_SIZE),$(hide) echo "cache_size=$(BOARD_CACHEIMAGE_PARTITION_SIZE)" >> $(1))
|
2013-03-20 19:02:05 +01:00
|
|
|
$(if $(BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE),$(hide) echo "vendor_fs_type=$(BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE)" >> $(1))
|
2016-10-20 19:58:12 +02:00
|
|
|
$(if $(BOARD_VENDORIMAGE_EXTFS_INODE_COUNT),$(hide) echo "vendor_extfs_inode_count=$(BOARD_VENDORIMAGE_EXTFS_INODE_COUNT)" >> $(1))
|
2013-03-20 19:02:05 +01:00
|
|
|
$(if $(BOARD_VENDORIMAGE_PARTITION_SIZE),$(hide) echo "vendor_size=$(BOARD_VENDORIMAGE_PARTITION_SIZE)" >> $(1))
|
2014-11-19 03:03:13 +01:00
|
|
|
$(if $(BOARD_VENDORIMAGE_JOURNAL_SIZE),$(hide) echo "vendor_journal_size=$(BOARD_VENDORIMAGE_JOURNAL_SIZE)" >> $(1))
|
2016-02-10 00:40:38 +01:00
|
|
|
$(if $(BOARD_VENDORIMAGE_SQUASHFS_COMPRESSOR),$(hide) echo "vendor_squashfs_compressor=$(BOARD_VENDORIMAGE_SQUASHFS_COMPRESSOR)" >> $(1))
|
|
|
|
$(if $(BOARD_VENDORIMAGE_SQUASHFS_COMPRESSOR_OPT),$(hide) echo "vendor_squashfs_compressor_opt=$(BOARD_VENDORIMAGE_SQUASHFS_COMPRESSOR_OPT)" >> $(1))
|
2016-05-24 21:59:30 +02:00
|
|
|
$(if $(BOARD_VENDORIMAGE_SQUASHFS_BLOCK_SIZE),$(hide) echo "vendor_squashfs_block_size=$(BOARD_VENDORIMAGE_SQUASHFS_BLOCK_SIZE)" >> $(1))
|
2016-06-16 00:53:07 +02:00
|
|
|
$(if $(BOARD_VENDORIMAGE_SQUASHFS_DISABLE_4K_ALIGN),$(hide) echo "vendor_squashfs_disable_4k_align=$(BOARD_VENDORIMAGE_SQUASHFS_DISABLE_4K_ALIGN)" >> $(1))
|
2016-04-23 02:22:07 +02:00
|
|
|
$(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VENDOR_BASE_FS_PATH),$(hide) echo "vendor_base_fs_file=$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VENDOR_BASE_FS_PATH)" >> $(1))
|
2014-03-12 01:13:27 +01:00
|
|
|
$(if $(BOARD_OEMIMAGE_PARTITION_SIZE),$(hide) echo "oem_size=$(BOARD_OEMIMAGE_PARTITION_SIZE)" >> $(1))
|
2014-11-19 03:03:13 +01:00
|
|
|
$(if $(BOARD_OEMIMAGE_JOURNAL_SIZE),$(hide) echo "oem_journal_size=$(BOARD_OEMIMAGE_JOURNAL_SIZE)" >> $(1))
|
2016-10-20 19:58:12 +02:00
|
|
|
$(if $(BOARD_OEMIMAGE_EXTFS_INODE_COUNT),$(hide) echo "oem_extfs_inode_count=$(BOARD_OEMIMAGE_EXTFS_INODE_COUNT)" >> $(1))
|
2011-10-29 02:02:30 +02:00
|
|
|
$(if $(INTERNAL_USERIMAGES_SPARSE_EXT_FLAG),$(hide) echo "extfs_sparse_flag=$(INTERNAL_USERIMAGES_SPARSE_EXT_FLAG)" >> $(1))
|
2015-12-16 03:00:14 +01:00
|
|
|
$(if $(INTERNAL_USERIMAGES_SPARSE_SQUASHFS_FLAG),$(hide) echo "squashfs_sparse_flag=$(INTERNAL_USERIMAGES_SPARSE_SQUASHFS_FLAG)" >> $(1))
|
2012-11-21 19:47:00 +01:00
|
|
|
$(hide) echo "selinux_fc=$(SELINUX_FC)" >> $(1)
|
2015-04-07 16:08:59 +02:00
|
|
|
$(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_BOOT_SIGNER),$(hide) echo "boot_signer=$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_BOOT_SIGNER)" >> $(1))
|
2014-07-11 00:42:38 +02:00
|
|
|
$(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VERITY),$(hide) echo "verity=$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VERITY)" >> $(1))
|
2014-11-14 02:54:30 +01:00
|
|
|
$(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VERITY),$(hide) echo "verity_key=$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VERITY_SIGNING_KEY)" >> $(1))
|
2015-06-02 11:03:27 +02:00
|
|
|
$(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VERITY),$(hide) echo "verity_signer_cmd=$(notdir $(VERITY_SIGNER))" >> $(1))
|
2015-05-20 08:30:57 +02:00
|
|
|
$(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VERITY_FEC),$(hide) echo "verity_fec=$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VERITY_FEC)" >> $(1))
|
2017-10-11 10:21:48 +02:00
|
|
|
$(if $(filter eng, $(TARGET_BUILD_VARIANT)),$(hide) echo "verity_disable=true" >> $(1))
|
2014-07-11 00:42:38 +02:00
|
|
|
$(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SYSTEM_VERITY_PARTITION),$(hide) echo "system_verity_block_device=$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SYSTEM_VERITY_PARTITION)" >> $(1))
|
|
|
|
$(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VENDOR_VERITY_PARTITION),$(hide) echo "vendor_verity_block_device=$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VENDOR_VERITY_PARTITION)" >> $(1))
|
2015-03-30 08:07:41 +02:00
|
|
|
$(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VBOOT),$(hide) echo "vboot=$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VBOOT)" >> $(1))
|
|
|
|
$(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VBOOT),$(hide) echo "vboot_key=$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VBOOT_SIGNING_KEY)" >> $(1))
|
2015-08-07 20:58:05 +02:00
|
|
|
$(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VBOOT),$(hide) echo "vboot_subkey=$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VBOOT_SIGNING_SUBKEY)" >> $(1))
|
2017-02-23 20:03:45 +01:00
|
|
|
$(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VBOOT),$(hide) echo "futility=$(notdir $(FUTILITY))" >> $(1))
|
2015-03-30 08:07:41 +02:00
|
|
|
$(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VBOOT),$(hide) echo "vboot_signer_cmd=$(VBOOT_SIGNER)" >> $(1))
|
2017-05-17 01:27:25 +02:00
|
|
|
$(if $(BOARD_AVB_ENABLE),$(hide) echo "avb_avbtool=$(notdir $(AVBTOOL))" >> $(1))
|
2017-05-26 12:30:04 +02:00
|
|
|
$(if $(BOARD_AVB_ENABLE),$(hide) echo "avb_system_hashtree_enable=$(BOARD_AVB_ENABLE)" >> $(1))
|
|
|
|
$(if $(BOARD_AVB_ENABLE),$(hide) echo "avb_system_add_hashtree_footer_args=$(BOARD_AVB_SYSTEM_ADD_HASHTREE_FOOTER_ARGS)" >> $(1))
|
|
|
|
$(if $(BOARD_AVB_ENABLE),\
|
|
|
|
$(if $(BOARD_AVB_SYSTEM_KEY_PATH),\
|
|
|
|
$(hide) echo "avb_system_key_path=$(BOARD_AVB_SYSTEM_KEY_PATH)" >> $(1)
|
|
|
|
$(hide) echo "avb_system_algorithm=$(BOARD_AVB_SYSTEM_ALGORITHM)" >> $(1)
|
|
|
|
$(hide) echo "avb_system_rollback_index_location=$(BOARD_AVB_SYSTEM_ROLLBACK_INDEX_LOCATION)" >> $(1)))
|
|
|
|
$(if $(BOARD_AVB_ENABLE),$(hide) echo "avb_vendor_hashtree_enable=$(BOARD_AVB_ENABLE)" >> $(1))
|
|
|
|
$(if $(BOARD_AVB_ENABLE),$(hide) echo "avb_vendor_add_hashtree_footer_args=$(BOARD_AVB_VENDOR_ADD_HASHTREE_FOOTER_ARGS)" >> $(1))
|
|
|
|
$(if $(BOARD_AVB_ENABLE),\
|
|
|
|
$(if $(BOARD_AVB_VENDOR_KEY_PATH),\
|
|
|
|
$(hide) echo "avb_vendor_key_path=$(BOARD_AVB_VENDOR_KEY_PATH)" >> $(1)
|
|
|
|
$(hide) echo "avb_vendor_algorithm=$(BOARD_AVB_VENDOR_ALGORITHM)" >> $(1)
|
|
|
|
$(hide) echo "avb_vendor_rollback_index_location=$(BOARD_AVB_VENDOR_ROLLBACK_INDEX_LOCATION)" >> $(1)))
|
2015-11-11 04:21:34 +01:00
|
|
|
$(if $(filter true,$(BOARD_USES_RECOVERY_AS_BOOT)),\
|
|
|
|
$(hide) echo "recovery_as_boot=true" >> $(1))
|
2015-03-25 03:07:40 +01:00
|
|
|
$(if $(filter true,$(BOARD_BUILD_SYSTEM_ROOT_IMAGE)),\
|
|
|
|
$(hide) echo "system_root_image=true" >> $(1);\
|
|
|
|
echo "ramdisk_dir=$(TARGET_ROOT_OUT)" >> $(1))
|
2013-02-27 22:54:02 +01:00
|
|
|
$(if $(2),$(hide) $(foreach kv,$(2),echo "$(kv)" >> $(1);))
|
2011-10-29 02:02:30 +02:00
|
|
|
endef
|
|
|
|
|
2017-07-06 08:34:31 +02:00
|
|
|
# $(1): modules list
|
|
|
|
# $(2): output dir
|
|
|
|
# $(3): mount point
|
|
|
|
# $(4): staging dir
|
|
|
|
# Depmod requires a well-formed kernel version so 0.0 is used as a placeholder.
|
|
|
|
define build-image-kernel-modules
|
|
|
|
$(hide) rm -rf $(2)/lib/modules
|
|
|
|
$(hide) mkdir -p $(2)/lib/modules
|
|
|
|
$(hide) cp $(1) $(2)/lib/modules/
|
|
|
|
$(hide) rm -rf $(4)
|
|
|
|
$(hide) mkdir -p $(4)/lib/modules/0.0/$(3)lib/modules
|
|
|
|
$(hide) cp $(1) $(4)/lib/modules/0.0/$(3)lib/modules
|
|
|
|
$(hide) $(DEPMOD) -b $(4) 0.0
|
|
|
|
$(hide) sed -e 's/\(.*modules.*\):/\/\1:/g' -e 's/ \([^ ]*modules[^ ]*\)/ \/\1/g' $(4)/lib/modules/0.0/modules.dep > $(2)/lib/modules/modules.dep
|
|
|
|
$(hide) cp $(4)/lib/modules/0.0/modules.alias $(2)/lib/modules
|
|
|
|
endef
|
|
|
|
|
2009-07-02 18:00:54 +02:00
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# Recovery image
|
2009-07-08 02:14:25 +02:00
|
|
|
|
2015-11-11 04:21:34 +01:00
|
|
|
# Recovery image exists if we are building recovery, or building recovery as boot.
|
|
|
|
ifneq (,$(INSTALLED_RECOVERYIMAGE_TARGET)$(filter true,$(BOARD_USES_RECOVERY_AS_BOOT)))
|
2009-07-02 18:00:54 +02:00
|
|
|
|
2015-03-10 20:02:57 +01:00
|
|
|
INTERNAL_RECOVERYIMAGE_FILES := $(filter $(TARGET_RECOVERY_OUT)/%, \
|
|
|
|
$(ALL_DEFAULT_INSTALLED_MODULES))
|
|
|
|
|
2009-07-02 18:00:54 +02:00
|
|
|
recovery_initrc := $(call include-path-for, recovery)/etc/init.rc
|
2017-03-10 21:53:02 +01:00
|
|
|
recovery_sepolicy := \
|
|
|
|
$(TARGET_RECOVERY_ROOT_OUT)/sepolicy \
|
2017-06-13 17:30:46 +02:00
|
|
|
$(TARGET_RECOVERY_ROOT_OUT)/plat_file_contexts \
|
|
|
|
$(TARGET_RECOVERY_ROOT_OUT)/nonplat_file_contexts \
|
2017-03-10 21:53:02 +01:00
|
|
|
$(TARGET_RECOVERY_ROOT_OUT)/plat_property_contexts \
|
|
|
|
$(TARGET_RECOVERY_ROOT_OUT)/nonplat_property_contexts
|
|
|
|
# Passed into rsync from non-recovery root to recovery root, to avoid overwriting recovery-specific
|
|
|
|
# SELinux files
|
|
|
|
IGNORE_RECOVERY_SEPOLICY := $(patsubst $(TARGET_RECOVERY_OUT)/%,--exclude=/%,$(recovery_sepolicy))
|
|
|
|
|
2009-07-02 18:00:54 +02:00
|
|
|
recovery_kernel := $(INSTALLED_KERNEL_TARGET) # same as a non-recovery system
|
|
|
|
recovery_ramdisk := $(PRODUCT_OUT)/ramdisk-recovery.img
|
2017-01-31 12:07:02 +01:00
|
|
|
recovery_build_props := $(intermediate_system_build_prop)
|
2017-03-03 04:40:21 +01:00
|
|
|
ifdef property_overrides_split_enabled
|
2017-01-31 12:07:02 +01:00
|
|
|
recovery_build_props += $(INSTALLED_VENDOR_BUILD_PROP_TARGET)
|
|
|
|
endif
|
2009-07-02 18:00:54 +02:00
|
|
|
recovery_resources_common := $(call include-path-for, recovery)/res
|
2013-03-07 00:04:31 +01:00
|
|
|
|
2014-05-13 00:32:20 +02:00
|
|
|
# Set recovery_density to the density bucket of the device.
|
|
|
|
recovery_density := unknown
|
|
|
|
ifneq (,$(PRODUCT_AAPT_PREF_CONFIG))
|
|
|
|
# If PRODUCT_AAPT_PREF_CONFIG includes a dpi bucket, then use that value.
|
|
|
|
recovery_density := $(filter %dpi,$(PRODUCT_AAPT_PREF_CONFIG))
|
|
|
|
else
|
2014-12-03 01:13:09 +01:00
|
|
|
# Otherwise, use the default medium density.
|
|
|
|
recovery_densities := mdpi
|
2014-05-13 00:32:20 +02:00
|
|
|
endif
|
|
|
|
|
|
|
|
ifneq (,$(wildcard $(recovery_resources_common)-$(recovery_density)))
|
|
|
|
recovery_resources_common := $(recovery_resources_common)-$(recovery_density)
|
2014-04-04 22:51:15 +02:00
|
|
|
else
|
|
|
|
recovery_resources_common := $(recovery_resources_common)-xhdpi
|
|
|
|
endif
|
|
|
|
|
2014-05-13 00:32:20 +02:00
|
|
|
# Select the 18x32 font on high-density devices (xhdpi and up); and
|
|
|
|
# the 12x22 font on other devices. Note that the font selected here
|
|
|
|
# can be overridden for a particular device by putting a font.png in
|
|
|
|
# its private recovery resources.
|
|
|
|
|
2015-04-08 23:14:43 +02:00
|
|
|
ifneq (,$(filter xxxhdpi 560dpi xxhdpi 400dpi xhdpi,$(recovery_density)))
|
2013-03-07 00:04:31 +01:00
|
|
|
recovery_font := $(call include-path-for, recovery)/fonts/18x32.png
|
|
|
|
else
|
|
|
|
recovery_font := $(call include-path-for, recovery)/fonts/12x22.png
|
|
|
|
endif
|
|
|
|
|
2015-08-06 20:47:47 +02:00
|
|
|
ifndef TARGET_PRIVATE_RES_DIRS
|
|
|
|
TARGET_PRIVATE_RES_DIRS := $(wildcard $(TARGET_DEVICE_DIR)/recovery/res)
|
|
|
|
endif
|
2009-07-02 18:00:54 +02:00
|
|
|
recovery_resource_deps := $(shell find $(recovery_resources_common) \
|
2015-08-06 20:47:47 +02:00
|
|
|
$(TARGET_PRIVATE_RES_DIRS) -type f)
|
2012-09-28 18:33:45 +02:00
|
|
|
ifdef TARGET_RECOVERY_FSTAB
|
|
|
|
recovery_fstab := $(TARGET_RECOVERY_FSTAB)
|
|
|
|
else
|
2010-09-21 03:04:41 +02:00
|
|
|
recovery_fstab := $(strip $(wildcard $(TARGET_DEVICE_DIR)/recovery.fstab))
|
2012-09-28 18:33:45 +02:00
|
|
|
endif
|
2016-06-10 19:11:54 +02:00
|
|
|
ifdef TARGET_RECOVERY_WIPE
|
|
|
|
recovery_wipe := $(TARGET_RECOVERY_WIPE)
|
2016-06-01 08:56:23 +02:00
|
|
|
else
|
2016-06-10 19:11:54 +02:00
|
|
|
recovery_wipe :=
|
2016-06-01 08:56:23 +02:00
|
|
|
endif
|
2015-07-22 21:33:18 +02:00
|
|
|
|
2015-11-11 04:21:34 +01:00
|
|
|
# Prior to A/B update, we used to have:
|
|
|
|
# boot.img + recovery-from-boot.p + recovery-resource.dat = recovery.img.
|
|
|
|
# recovery-resource.dat is needed only if we carry a patch of the boot and
|
|
|
|
# recovery images and invoke install-recovery.sh on the first boot post an
|
|
|
|
# OTA update.
|
|
|
|
#
|
|
|
|
# We no longer need that if one of the following conditions holds:
|
|
|
|
# a) We carry a full copy of the recovery image
|
|
|
|
# (BOARD_USES_FULL_RECOVERY_IMAGE = true);
|
|
|
|
# b) We build a single image that contains boot and recovery both
|
|
|
|
# (BOARD_USES_RECOVERY_AS_BOOT = true).
|
|
|
|
|
|
|
|
ifeq (,$(filter true, $(BOARD_USES_FULL_RECOVERY_IMAGE) $(BOARD_USES_RECOVERY_AS_BOOT)))
|
2012-08-21 00:38:58 +02:00
|
|
|
# Named '.dat' so we don't attempt to use imgdiff for patching it.
|
|
|
|
RECOVERY_RESOURCE_ZIP := $(TARGET_OUT)/etc/recovery-resource.dat
|
2015-07-22 21:33:18 +02:00
|
|
|
else
|
|
|
|
RECOVERY_RESOURCE_ZIP :=
|
|
|
|
endif
|
2009-07-02 18:00:54 +02:00
|
|
|
|
2015-08-06 20:47:47 +02:00
|
|
|
ifeq ($(TARGET_PRIVATE_RES_DIRS),)
|
2009-07-02 18:00:54 +02:00
|
|
|
$(info No private recovery resources for TARGET_DEVICE $(TARGET_DEVICE))
|
|
|
|
endif
|
|
|
|
|
2010-09-21 03:04:41 +02:00
|
|
|
ifeq ($(recovery_fstab),)
|
|
|
|
$(info No recovery.fstab for TARGET_DEVICE $(TARGET_DEVICE))
|
|
|
|
endif
|
|
|
|
|
2009-07-02 18:00:54 +02:00
|
|
|
INTERNAL_RECOVERYIMAGE_ARGS := \
|
|
|
|
$(addprefix --second ,$(INSTALLED_2NDBOOTLOADER_TARGET)) \
|
|
|
|
--kernel $(recovery_kernel) \
|
|
|
|
--ramdisk $(recovery_ramdisk)
|
|
|
|
|
|
|
|
# Assumes this has already been stripped
|
2016-10-06 01:57:27 +02:00
|
|
|
ifdef INTERNAL_KERNEL_CMDLINE
|
|
|
|
INTERNAL_RECOVERYIMAGE_ARGS += --cmdline "$(INTERNAL_KERNEL_CMDLINE)"
|
2009-07-02 18:00:54 +02:00
|
|
|
endif
|
|
|
|
ifdef BOARD_KERNEL_BASE
|
|
|
|
INTERNAL_RECOVERYIMAGE_ARGS += --base $(BOARD_KERNEL_BASE)
|
|
|
|
endif
|
2010-08-25 23:29:34 +02:00
|
|
|
ifdef BOARD_KERNEL_PAGESIZE
|
|
|
|
INTERNAL_RECOVERYIMAGE_ARGS += --pagesize $(BOARD_KERNEL_PAGESIZE)
|
|
|
|
endif
|
2009-07-02 18:00:54 +02:00
|
|
|
|
|
|
|
# Keys authorized to sign OTA packages this build will accept. The
|
2011-10-04 19:50:08 +02:00
|
|
|
# build always uses dev-keys for this; release packaging tools will
|
2009-07-02 18:00:54 +02:00
|
|
|
# substitute other keys for this one.
|
2011-10-04 19:50:08 +02:00
|
|
|
OTA_PUBLIC_KEYS := $(DEFAULT_SYSTEM_DEV_CERTIFICATE).x509.pem
|
2009-07-02 18:00:54 +02:00
|
|
|
|
|
|
|
# Generate a file containing the keys that will be read by the
|
|
|
|
# recovery binary.
|
|
|
|
RECOVERY_INSTALL_OTA_KEYS := \
|
|
|
|
$(call intermediates-dir-for,PACKAGING,ota_keys)/keys
|
|
|
|
DUMPKEY_JAR := $(HOST_OUT_JAVA_LIBRARIES)/dumpkey.jar
|
|
|
|
$(RECOVERY_INSTALL_OTA_KEYS): PRIVATE_OTA_PUBLIC_KEYS := $(OTA_PUBLIC_KEYS)
|
2011-03-16 15:49:13 +01:00
|
|
|
$(RECOVERY_INSTALL_OTA_KEYS): extra_keys := $(patsubst %,%.x509.pem,$(PRODUCT_EXTRA_RECOVERY_KEYS))
|
2011-02-01 23:13:52 +01:00
|
|
|
$(RECOVERY_INSTALL_OTA_KEYS): $(OTA_PUBLIC_KEYS) $(DUMPKEY_JAR) $(extra_keys)
|
|
|
|
@echo "DumpPublicKey: $@ <= $(PRIVATE_OTA_PUBLIC_KEYS) $(extra_keys)"
|
2009-07-02 18:00:54 +02:00
|
|
|
@rm -rf $@
|
|
|
|
@mkdir -p $(dir $@)
|
2017-06-30 22:55:38 +02:00
|
|
|
$(JAVA) -jar $(DUMPKEY_JAR) $(PRIVATE_OTA_PUBLIC_KEYS) $(extra_keys) > $@
|
2009-07-02 18:00:54 +02:00
|
|
|
|
2015-05-07 05:44:22 +02:00
|
|
|
RECOVERYIMAGE_ID_FILE := $(PRODUCT_OUT)/recovery.id
|
2017-02-22 10:27:10 +01:00
|
|
|
|
2015-01-30 23:05:22 +01:00
|
|
|
# $(1): output file
|
|
|
|
define build-recoveryimage-target
|
|
|
|
@echo ----- Making recovery image ------
|
|
|
|
$(hide) mkdir -p $(TARGET_RECOVERY_OUT)
|
2016-01-12 20:34:58 +01:00
|
|
|
$(hide) mkdir -p $(TARGET_RECOVERY_ROOT_OUT)/etc $(TARGET_RECOVERY_ROOT_OUT)/sdcard $(TARGET_RECOVERY_ROOT_OUT)/tmp
|
2015-01-30 23:05:22 +01:00
|
|
|
@echo Copying baseline ramdisk...
|
2017-03-10 21:53:02 +01:00
|
|
|
# Use rsync because "cp -Rf" fails to overwrite broken symlinks on Mac.
|
|
|
|
$(hide) rsync -a --exclude=etc --exclude=sdcard $(IGNORE_RECOVERY_SEPOLICY) $(IGNORE_CACHE_LINK) $(TARGET_ROOT_OUT) $(TARGET_RECOVERY_OUT)
|
2017-07-28 14:22:05 +02:00
|
|
|
# Copy adbd from system/bin to recovery/root/sbin
|
|
|
|
$(hide) cp -f $(TARGET_OUT_EXECUTABLES)/adbd $(TARGET_RECOVERY_ROOT_OUT)/sbin/adbd
|
2015-01-30 23:05:22 +01:00
|
|
|
@echo Modifying ramdisk contents...
|
2017-02-22 10:27:10 +01:00
|
|
|
$(if $(BOARD_RECOVERY_KERNEL_MODULES), \
|
|
|
|
$(call build-image-kernel-modules,$(BOARD_RECOVERY_KERNEL_MODULES),$(TARGET_RECOVERY_ROOT_OUT),,$(call intermediates-dir-for,PACKAGING,depmod_recovery)))
|
2017-09-25 11:50:41 +02:00
|
|
|
# Removes $(TARGET_RECOVERY_ROOT_OUT)/init*.rc EXCEPT init.recovery*.rc.
|
|
|
|
$(hide) find $(TARGET_RECOVERY_ROOT_OUT) -maxdepth 1 -name 'init*.rc' -type f -not -name "init.recovery.*.rc" | xargs rm -f
|
2015-01-30 23:05:22 +01:00
|
|
|
$(hide) cp -f $(recovery_initrc) $(TARGET_RECOVERY_ROOT_OUT)/
|
2015-04-02 21:48:32 +02:00
|
|
|
$(hide) cp $(TARGET_ROOT_OUT)/init.recovery.*.rc $(TARGET_RECOVERY_ROOT_OUT)/ || true # Ignore error when the src file doesn't exist.
|
2015-01-30 23:05:22 +01:00
|
|
|
$(hide) mkdir -p $(TARGET_RECOVERY_ROOT_OUT)/res
|
|
|
|
$(hide) rm -rf $(TARGET_RECOVERY_ROOT_OUT)/res/*
|
|
|
|
$(hide) cp -rf $(recovery_resources_common)/* $(TARGET_RECOVERY_ROOT_OUT)/res
|
|
|
|
$(hide) cp -f $(recovery_font) $(TARGET_RECOVERY_ROOT_OUT)/res/images/font.png
|
2015-08-06 20:47:47 +02:00
|
|
|
$(hide) $(foreach item,$(TARGET_PRIVATE_RES_DIRS), \
|
|
|
|
cp -rf $(item) $(TARGET_RECOVERY_ROOT_OUT)/$(newline))
|
2015-01-30 23:05:22 +01:00
|
|
|
$(hide) $(foreach item,$(recovery_fstab), \
|
|
|
|
cp -f $(item) $(TARGET_RECOVERY_ROOT_OUT)/etc/recovery.fstab)
|
2016-06-10 19:11:54 +02:00
|
|
|
$(if $(strip $(recovery_wipe)), \
|
|
|
|
$(hide) cp -f $(recovery_wipe) $(TARGET_RECOVERY_ROOT_OUT)/etc/recovery.wipe)
|
2015-01-30 23:05:22 +01:00
|
|
|
$(hide) cp $(RECOVERY_INSTALL_OTA_KEYS) $(TARGET_RECOVERY_ROOT_OUT)/res/keys
|
2017-01-31 12:07:02 +01:00
|
|
|
$(hide) cat $(INSTALLED_DEFAULT_PROP_TARGET) \
|
2017-05-01 15:56:26 +02:00
|
|
|
> $(TARGET_RECOVERY_ROOT_OUT)/prop.default
|
2017-01-31 12:07:02 +01:00
|
|
|
$(if $(INSTALLED_VENDOR_DEFAULT_PROP_TARGET), \
|
|
|
|
$(hide) cat $(INSTALLED_VENDOR_DEFAULT_PROP_TARGET) \
|
2017-05-01 15:56:26 +02:00
|
|
|
>> $(TARGET_RECOVERY_ROOT_OUT)/prop.default)
|
2017-01-31 12:07:02 +01:00
|
|
|
$(hide) cat $(recovery_build_props) \
|
2017-05-01 15:56:26 +02:00
|
|
|
>> $(TARGET_RECOVERY_ROOT_OUT)/prop.default
|
|
|
|
$(hide) ln -sf prop.default $(TARGET_RECOVERY_ROOT_OUT)/default.prop
|
2016-07-22 20:03:31 +02:00
|
|
|
$(BOARD_RECOVERY_IMAGE_PREPARE)
|
2015-07-30 23:34:01 +02:00
|
|
|
$(if $(filter true,$(BOARD_BUILD_SYSTEM_ROOT_IMAGE)), \
|
|
|
|
$(hide) mkdir -p $(TARGET_RECOVERY_ROOT_OUT)/system_root; \
|
|
|
|
rm -rf $(TARGET_RECOVERY_ROOT_OUT)/system; \
|
|
|
|
ln -sf /system_root/system $(TARGET_RECOVERY_ROOT_OUT)/system) # Mount the system_root_image to /system_root and symlink /system.
|
2015-07-09 18:54:55 +02:00
|
|
|
$(hide) $(MKBOOTFS) -d $(TARGET_OUT) $(TARGET_RECOVERY_ROOT_OUT) | $(MINIGZIP) > $(recovery_ramdisk)
|
2015-03-30 08:07:41 +02:00
|
|
|
$(if $(filter true,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VBOOT)), \
|
2016-03-15 17:49:30 +01:00
|
|
|
$(hide) $(MKBOOTIMG) $(INTERNAL_RECOVERYIMAGE_ARGS) $(INTERNAL_MKBOOTIMG_VERSION_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $(1).unsigned, \
|
|
|
|
$(hide) $(MKBOOTIMG) $(INTERNAL_RECOVERYIMAGE_ARGS) $(INTERNAL_MKBOOTIMG_VERSION_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $(1) --id > $(RECOVERYIMAGE_ID_FILE))
|
2015-04-07 16:08:59 +02:00
|
|
|
$(if $(filter true,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_BOOT_SIGNER)),\
|
2016-08-08 19:51:10 +02:00
|
|
|
$(if $(filter true,$(BOARD_USES_RECOVERY_AS_BOOT)),\
|
|
|
|
$(BOOT_SIGNER) /boot $(1) $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VERITY_SIGNING_KEY).pk8 $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VERITY_SIGNING_KEY).x509.pem $(1),\
|
|
|
|
$(BOOT_SIGNER) /recovery $(1) $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VERITY_SIGNING_KEY).pk8 $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VERITY_SIGNING_KEY).x509.pem $(1)\
|
|
|
|
)\
|
|
|
|
)
|
2015-03-30 08:07:41 +02:00
|
|
|
$(if $(filter true,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VBOOT)), \
|
2015-08-07 20:58:05 +02:00
|
|
|
$(VBOOT_SIGNER) $(FUTILITY) $(1).unsigned $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VBOOT_SIGNING_KEY).vbpubk $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VBOOT_SIGNING_KEY).vbprivk $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VBOOT_SIGNING_SUBKEY).vbprivk $(1).keyblock $(1))
|
2016-10-06 21:02:48 +02:00
|
|
|
$(if $(and $(filter true,$(BOARD_USES_RECOVERY_AS_BOOT)),$(filter true,$(BOARD_AVB_ENABLE))), \
|
|
|
|
$(hide) $(AVBTOOL) add_hash_footer \
|
|
|
|
--image $(1) \
|
|
|
|
--partition_size $(BOARD_BOOTIMAGE_PARTITION_SIZE) \
|
2017-05-26 12:30:04 +02:00
|
|
|
--partition_name boot $(INTERNAL_AVB_BOOT_SIGNING_ARGS) \
|
2016-10-06 21:02:48 +02:00
|
|
|
$(BOARD_AVB_BOOT_ADD_HASH_FOOTER_ARGS))
|
2016-08-08 19:51:10 +02:00
|
|
|
$(if $(filter true,$(BOARD_USES_RECOVERY_AS_BOOT)), \
|
2015-11-11 04:21:34 +01:00
|
|
|
$(hide) $(call assert-max-image-size,$(1),$(BOARD_BOOTIMAGE_PARTITION_SIZE)), \
|
|
|
|
$(hide) $(call assert-max-image-size,$(1),$(BOARD_RECOVERYIMAGE_PARTITION_SIZE)))
|
2015-01-30 23:05:22 +01:00
|
|
|
@echo ----- Made recovery image: $(1) --------
|
|
|
|
endef
|
|
|
|
|
2017-07-28 14:22:05 +02:00
|
|
|
ADBD := $(TARGET_OUT_EXECUTABLES)/adbd
|
|
|
|
|
2015-11-11 04:21:34 +01:00
|
|
|
ifeq ($(BOARD_USES_RECOVERY_AS_BOOT),true)
|
2016-03-10 21:57:33 +01:00
|
|
|
ifeq (true,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_BOOT_SIGNER))
|
|
|
|
$(INSTALLED_BOOTIMAGE_TARGET) : $(BOOT_SIGNER)
|
|
|
|
endif
|
|
|
|
ifeq (true,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VBOOT))
|
|
|
|
$(INSTALLED_BOOTIMAGE_TARGET) : $(VBOOT_SIGNER)
|
|
|
|
endif
|
2017-05-04 22:58:04 +02:00
|
|
|
ifeq (true,$(BOARD_AVB_ENABLE))
|
2017-05-26 12:30:04 +02:00
|
|
|
$(INSTALLED_BOOTIMAGE_TARGET) : $(AVBTOOL) $(BOARD_AVB_BOOT_KEY_PATH)
|
2017-05-04 22:58:04 +02:00
|
|
|
endif
|
2017-07-28 14:22:05 +02:00
|
|
|
$(INSTALLED_BOOTIMAGE_TARGET): $(MKBOOTFS) $(MKBOOTIMG) $(MINIGZIP) $(ADBD) \
|
2015-11-11 04:21:34 +01:00
|
|
|
$(INSTALLED_RAMDISK_TARGET) \
|
|
|
|
$(INTERNAL_RECOVERYIMAGE_FILES) \
|
2016-12-17 01:53:52 +01:00
|
|
|
$(recovery_initrc) $(recovery_sepolicy) $(recovery_kernel) \
|
2015-11-11 04:21:34 +01:00
|
|
|
$(INSTALLED_2NDBOOTLOADER_TARGET) \
|
2017-01-31 12:07:02 +01:00
|
|
|
$(recovery_build_props) $(recovery_resource_deps) \
|
2015-11-11 04:21:34 +01:00
|
|
|
$(recovery_fstab) \
|
2017-01-31 12:07:02 +01:00
|
|
|
$(RECOVERY_INSTALL_OTA_KEYS) \
|
2017-02-22 10:27:10 +01:00
|
|
|
$(INSTALLED_VENDOR_DEFAULT_PROP_TARGET) \
|
|
|
|
$(BOARD_RECOVERY_KERNEL_MODULES) \
|
|
|
|
$(DEPMOD)
|
2015-11-11 04:21:34 +01:00
|
|
|
$(call pretty,"Target boot image from recovery: $@")
|
|
|
|
$(call build-recoveryimage-target, $@)
|
|
|
|
endif
|
|
|
|
|
2017-07-28 14:22:05 +02:00
|
|
|
$(INSTALLED_RECOVERYIMAGE_TARGET): $(MKBOOTFS) $(MKBOOTIMG) $(MINIGZIP) $(ADBD) \
|
2009-07-02 18:00:54 +02:00
|
|
|
$(INSTALLED_RAMDISK_TARGET) \
|
|
|
|
$(INSTALLED_BOOTIMAGE_TARGET) \
|
2015-03-10 20:02:57 +01:00
|
|
|
$(INTERNAL_RECOVERYIMAGE_FILES) \
|
2016-12-17 01:53:52 +01:00
|
|
|
$(recovery_initrc) $(recovery_sepolicy) $(recovery_kernel) \
|
2009-07-02 18:00:54 +02:00
|
|
|
$(INSTALLED_2NDBOOTLOADER_TARGET) \
|
2017-01-31 12:07:02 +01:00
|
|
|
$(recovery_build_props) $(recovery_resource_deps) \
|
2010-09-21 03:04:41 +02:00
|
|
|
$(recovery_fstab) \
|
2017-01-31 12:07:02 +01:00
|
|
|
$(RECOVERY_INSTALL_OTA_KEYS) \
|
2017-02-22 10:27:10 +01:00
|
|
|
$(INSTALLED_VENDOR_DEFAULT_PROP_TARGET) \
|
|
|
|
$(BOARD_RECOVERY_KERNEL_MODULES) \
|
|
|
|
$(DEPMOD)
|
2015-01-30 23:05:22 +01:00
|
|
|
$(call build-recoveryimage-target, $@)
|
2009-07-02 18:00:54 +02:00
|
|
|
|
2015-12-22 18:47:46 +01:00
|
|
|
ifdef RECOVERY_RESOURCE_ZIP
|
2015-10-30 00:33:05 +01:00
|
|
|
$(RECOVERY_RESOURCE_ZIP): $(INSTALLED_RECOVERYIMAGE_TARGET) | $(ZIPTIME)
|
2012-09-04 23:45:11 +02:00
|
|
|
$(hide) mkdir -p $(dir $@)
|
2015-10-30 00:33:05 +01:00
|
|
|
$(hide) find $(TARGET_RECOVERY_ROOT_OUT)/res -type f | sort | zip -0qrjX $@ -@
|
|
|
|
$(remove-timestamps-from-package)
|
2015-07-22 21:33:18 +02:00
|
|
|
endif
|
2012-08-21 00:38:58 +02:00
|
|
|
|
2015-01-30 23:05:22 +01:00
|
|
|
.PHONY: recoveryimage-nodeps
|
|
|
|
recoveryimage-nodeps:
|
|
|
|
@echo "make $@: ignoring dependencies"
|
|
|
|
$(call build-recoveryimage-target, $(INSTALLED_RECOVERYIMAGE_TARGET))
|
|
|
|
|
2015-07-22 21:33:18 +02:00
|
|
|
else # INSTALLED_RECOVERYIMAGE_TARGET not defined
|
2012-08-21 00:38:58 +02:00
|
|
|
RECOVERY_RESOURCE_ZIP :=
|
2009-07-02 18:00:54 +02:00
|
|
|
endif
|
|
|
|
|
|
|
|
.PHONY: recoveryimage
|
2012-08-21 00:38:58 +02:00
|
|
|
recoveryimage: $(INSTALLED_RECOVERYIMAGE_TARGET) $(RECOVERY_RESOURCE_ZIP)
|
2009-07-02 18:00:54 +02:00
|
|
|
|
2017-10-04 14:22:41 +02:00
|
|
|
ifneq ($(BOARD_NAND_PAGE_SIZE),)
|
|
|
|
$(error MTD device is no longer supported and thus BOARD_NAND_PAGE_SIZE is deprecated.)
|
2010-02-05 22:34:34 +01:00
|
|
|
endif
|
|
|
|
|
2017-10-04 14:22:41 +02:00
|
|
|
ifneq ($(BOARD_NAND_SPARE_SIZE),)
|
|
|
|
$(error MTD device is no longer supported and thus BOARD_NAND_SPARE_SIZE is deprecated.)
|
2010-08-06 21:19:29 +02:00
|
|
|
endif
|
|
|
|
|
2009-03-04 04:28:42 +01:00
|
|
|
# -----------------------------------------------------------------
|
2010-09-27 19:37:25 +02:00
|
|
|
# system image
|
2009-03-04 04:28:42 +01:00
|
|
|
#
|
2012-08-09 00:27:00 +02:00
|
|
|
# Remove overridden packages from $(ALL_PDK_FUSION_FILES)
|
|
|
|
PDK_FUSION_SYSIMG_FILES := \
|
|
|
|
$(filter-out $(foreach p,$(overridden_packages),$(p) %/$(p).apk), \
|
|
|
|
$(ALL_PDK_FUSION_FILES))
|
2009-03-04 04:28:42 +01:00
|
|
|
|
|
|
|
INTERNAL_SYSTEMIMAGE_FILES := $(filter $(TARGET_OUT)/%, \
|
2012-03-14 02:58:27 +01:00
|
|
|
$(ALL_GENERATED_SOURCES) \
|
2012-08-21 00:38:58 +02:00
|
|
|
$(ALL_DEFAULT_INSTALLED_MODULES) \
|
|
|
|
$(PDK_FUSION_SYSIMG_FILES) \
|
|
|
|
$(RECOVERY_RESOURCE_ZIP))
|
2012-03-14 02:58:27 +01:00
|
|
|
|
2012-08-14 00:03:00 +02:00
|
|
|
FULL_SYSTEMIMAGE_DEPS := $(INTERNAL_SYSTEMIMAGE_FILES) $(INTERNAL_USERIMAGES_DEPS)
|
2017-03-25 00:06:31 +01:00
|
|
|
|
|
|
|
# ASAN libraries in the system image - add dependency.
|
|
|
|
ASAN_IN_SYSTEM_INSTALLED := $(TARGET_OUT)/asan.tar.bz2
|
|
|
|
ifneq (,$(SANITIZE_TARGET))
|
|
|
|
ifeq (true,$(SANITIZE_TARGET_SYSTEM))
|
|
|
|
FULL_SYSTEMIMAGE_DEPS += $(ASAN_IN_SYSTEM_INSTALLED)
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
2011-09-10 01:35:53 +02:00
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# installed file list
|
|
|
|
# Depending on anything that $(BUILT_SYSTEMIMAGE) depends on.
|
|
|
|
# We put installed-files.txt ahead of image itself in the dependency graph
|
|
|
|
# so that we can get the size stat even if the build fails due to too large
|
|
|
|
# system image.
|
|
|
|
INSTALLED_FILES_FILE := $(PRODUCT_OUT)/installed-files.txt
|
2017-03-16 17:41:19 +01:00
|
|
|
$(INSTALLED_FILES_FILE): $(FULL_SYSTEMIMAGE_DEPS) $(FILESLIST)
|
2011-09-10 01:35:53 +02:00
|
|
|
@echo Installed file list: $@
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
@rm -f $@
|
2017-03-16 17:41:19 +01:00
|
|
|
$(hide) $(FILESLIST) $(TARGET_OUT) > $(@:.txt=.json)
|
2016-10-11 07:48:10 +02:00
|
|
|
$(hide) build/tools/fileslist_util.py -c $(@:.txt=.json) > $@
|
2011-09-10 01:35:53 +02:00
|
|
|
|
|
|
|
.PHONY: installed-file-list
|
|
|
|
installed-file-list: $(INSTALLED_FILES_FILE)
|
2013-03-02 01:45:35 +01:00
|
|
|
|
|
|
|
$(call dist-for-goals, sdk win_sdk sdk_addon, $(INSTALLED_FILES_FILE))
|
2011-09-10 01:35:53 +02:00
|
|
|
|
|
|
|
systemimage_intermediates := \
|
2011-11-04 19:37:01 +01:00
|
|
|
$(call intermediates-dir-for,PACKAGING,systemimage)
|
2011-09-10 01:35:53 +02:00
|
|
|
BUILT_SYSTEMIMAGE := $(systemimage_intermediates)/system.img
|
|
|
|
|
2014-06-19 05:26:24 +02:00
|
|
|
# Create symlink /system/vendor to /vendor if necessary.
|
2016-06-17 23:07:37 +02:00
|
|
|
ifdef BOARD_USES_VENDORIMAGE
|
2014-06-19 05:26:24 +02:00
|
|
|
define create-system-vendor-symlink
|
2014-07-17 21:56:49 +02:00
|
|
|
$(hide) if [ -d $(TARGET_OUT)/vendor ] && [ ! -h $(TARGET_OUT)/vendor ]; then \
|
|
|
|
echo 'Non-symlink $(TARGET_OUT)/vendor detected!' 1>&2; \
|
|
|
|
echo 'You cannot install files to $(TARGET_OUT)/vendor while building a separate vendor.img!' 1>&2; \
|
|
|
|
exit 1; \
|
|
|
|
fi
|
2014-06-19 05:26:24 +02:00
|
|
|
$(hide) ln -sf /vendor $(TARGET_OUT)/vendor
|
|
|
|
endef
|
|
|
|
else
|
|
|
|
define create-system-vendor-symlink
|
|
|
|
endef
|
|
|
|
endif
|
|
|
|
|
2009-03-04 04:28:42 +01:00
|
|
|
# $(1): output file
|
|
|
|
define build-systemimage-target
|
2011-10-29 02:02:30 +02:00
|
|
|
@echo "Target system fs image: $(1)"
|
2014-06-19 05:26:24 +02:00
|
|
|
$(call create-system-vendor-symlink)
|
2011-10-29 02:02:30 +02:00
|
|
|
@mkdir -p $(dir $(1)) $(systemimage_intermediates) && rm -rf $(systemimage_intermediates)/system_image_info.txt
|
2013-06-17 02:26:08 +02:00
|
|
|
$(call generate-userimage-prop-dictionary, $(systemimage_intermediates)/system_image_info.txt, \
|
2014-05-06 07:19:37 +02:00
|
|
|
skip_fsck=true)
|
2011-10-29 02:02:30 +02:00
|
|
|
$(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \
|
|
|
|
./build/tools/releasetools/build_image.py \
|
2015-07-09 18:54:55 +02:00
|
|
|
$(TARGET_OUT) $(systemimage_intermediates)/system_image_info.txt $(1) $(TARGET_OUT) \
|
2014-08-13 21:36:05 +02:00
|
|
|
|| ( echo "Out of space? the tree size of $(TARGET_OUT) is (MB): " 1>&2 ;\
|
|
|
|
du -sm $(TARGET_OUT) 1>&2;\
|
2015-06-23 20:16:05 +02:00
|
|
|
if [ "$(INTERNAL_USERIMAGES_EXT_VARIANT)" == "ext4" ]; then \
|
|
|
|
maxsize=$(BOARD_SYSTEMIMAGE_PARTITION_SIZE); \
|
|
|
|
if [ "$(BOARD_HAS_EXT4_RESERVED_BLOCKS)" == "true" ]; then \
|
|
|
|
maxsize=$$((maxsize - 4096 * 4096)); \
|
|
|
|
fi; \
|
|
|
|
echo "The max is $$(( maxsize / 1048576 )) MB." 1>&2 ;\
|
|
|
|
else \
|
|
|
|
echo "The max is $$(( $(BOARD_SYSTEMIMAGE_PARTITION_SIZE) / 1048576 )) MB." 1>&2 ;\
|
|
|
|
fi; \
|
2014-08-19 21:21:35 +02:00
|
|
|
mkdir -p $(DIST_DIR); cp $(INSTALLED_FILES_FILE) $(DIST_DIR)/installed-files-rescued.txt; \
|
2014-08-13 21:36:05 +02:00
|
|
|
exit 1 )
|
2009-03-04 04:28:42 +01:00
|
|
|
endef
|
|
|
|
|
2016-04-19 11:41:27 +02:00
|
|
|
$(BUILT_SYSTEMIMAGE): $(FULL_SYSTEMIMAGE_DEPS) $(INSTALLED_FILES_FILE) $(BUILD_IMAGE_SRCS)
|
2009-03-04 04:28:42 +01:00
|
|
|
$(call build-systemimage-target,$@)
|
|
|
|
|
|
|
|
INSTALLED_SYSTEMIMAGE := $(PRODUCT_OUT)/system.img
|
2010-09-27 19:37:25 +02:00
|
|
|
SYSTEMIMAGE_SOURCE_DIR := $(TARGET_OUT)
|
2009-03-04 04:28:42 +01:00
|
|
|
|
2009-07-24 00:12:53 +02:00
|
|
|
# The system partition needs room for the recovery image as well. We
|
|
|
|
# now store the recovery image as a binary patch using the boot image
|
|
|
|
# as the source (since they are very similar). Generate the patch so
|
|
|
|
# we can see how big it's going to be, and include that in the system
|
|
|
|
# image size check calculation.
|
2009-07-24 22:52:32 +02:00
|
|
|
ifneq ($(INSTALLED_RECOVERYIMAGE_TARGET),)
|
2015-07-22 21:33:18 +02:00
|
|
|
ifneq ($(BOARD_USES_FULL_RECOVERY_IMAGE),true)
|
2009-07-24 00:12:53 +02:00
|
|
|
intermediates := $(call intermediates-dir-for,PACKAGING,recovery_patch)
|
|
|
|
RECOVERY_FROM_BOOT_PATCH := $(intermediates)/recovery_from_boot.p
|
|
|
|
$(RECOVERY_FROM_BOOT_PATCH): $(INSTALLED_RECOVERYIMAGE_TARGET) \
|
|
|
|
$(INSTALLED_BOOTIMAGE_TARGET) \
|
2009-07-24 03:27:43 +02:00
|
|
|
$(HOST_OUT_EXECUTABLES)/imgdiff \
|
|
|
|
$(HOST_OUT_EXECUTABLES)/bsdiff
|
2009-07-24 00:12:53 +02:00
|
|
|
@echo "Construct recovery from boot"
|
|
|
|
mkdir -p $(dir $@)
|
2009-07-24 03:48:38 +02:00
|
|
|
PATH=$(HOST_OUT_EXECUTABLES):$$PATH $(HOST_OUT_EXECUTABLES)/imgdiff $(INSTALLED_BOOTIMAGE_TARGET) $(INSTALLED_RECOVERYIMAGE_TARGET) $@
|
2015-07-22 21:33:18 +02:00
|
|
|
else # $(BOARD_USES_FULL_RECOVERY_IMAGE) == true
|
|
|
|
RECOVERY_FROM_BOOT_PATCH := $(INSTALLED_RECOVERYIMAGE_TARGET)
|
|
|
|
endif
|
2009-07-24 22:52:32 +02:00
|
|
|
endif
|
|
|
|
|
2009-07-24 00:12:53 +02:00
|
|
|
|
2016-03-01 02:52:39 +01:00
|
|
|
$(INSTALLED_SYSTEMIMAGE): $(BUILT_SYSTEMIMAGE) $(RECOVERY_FROM_BOOT_PATCH)
|
2009-03-04 04:28:42 +01:00
|
|
|
@echo "Install system fs image: $@"
|
|
|
|
$(copy-file-to-target)
|
2014-06-16 23:19:36 +02:00
|
|
|
$(hide) $(call assert-max-image-size,$@ $(RECOVERY_FROM_BOOT_PATCH),$(BOARD_SYSTEMIMAGE_PARTITION_SIZE))
|
2009-03-04 04:28:42 +01:00
|
|
|
|
|
|
|
systemimage: $(INSTALLED_SYSTEMIMAGE)
|
|
|
|
|
|
|
|
.PHONY: systemimage-nodeps snod
|
|
|
|
systemimage-nodeps snod: $(filter-out systemimage-nodeps snod,$(MAKECMDGOALS)) \
|
2010-05-10 22:04:47 +02:00
|
|
|
| $(INTERNAL_USERIMAGES_DEPS)
|
2009-03-04 04:28:42 +01:00
|
|
|
@echo "make $@: ignoring dependencies"
|
|
|
|
$(call build-systemimage-target,$(INSTALLED_SYSTEMIMAGE))
|
2014-06-16 23:19:36 +02:00
|
|
|
$(hide) $(call assert-max-image-size,$(INSTALLED_SYSTEMIMAGE),$(BOARD_SYSTEMIMAGE_PARTITION_SIZE))
|
2009-03-04 04:28:42 +01:00
|
|
|
|
2012-02-24 20:05:48 +01:00
|
|
|
ifneq (,$(filter systemimage-nodeps snod, $(MAKECMDGOALS)))
|
|
|
|
ifeq (true,$(WITH_DEXPREOPT))
|
|
|
|
$(warning Warning: with dexpreopt enabled, you may need a full rebuild.)
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
2017-06-21 01:57:52 +02:00
|
|
|
.PHONY: sync
|
|
|
|
sync: $(INTERNAL_SYSTEMIMAGE_FILES)
|
|
|
|
|
2009-03-04 04:28:42 +01:00
|
|
|
#######
|
|
|
|
## system tarball
|
|
|
|
define build-systemtarball-target
|
2014-06-19 05:26:24 +02:00
|
|
|
$(call pretty,"Target system fs tarball: $(INSTALLED_SYSTEMTARBALL_TARGET)")
|
|
|
|
$(call create-system-vendor-symlink)
|
|
|
|
$(MKTARBALL) $(FS_GET_STATS) \
|
|
|
|
$(PRODUCT_OUT) system $(PRIVATE_SYSTEM_TAR) \
|
2015-07-09 18:54:55 +02:00
|
|
|
$(INSTALLED_SYSTEMTARBALL_TARGET) $(TARGET_OUT)
|
2009-03-04 04:28:42 +01:00
|
|
|
endef
|
|
|
|
|
2010-06-11 21:05:57 +02:00
|
|
|
ifndef SYSTEM_TARBALL_FORMAT
|
|
|
|
SYSTEM_TARBALL_FORMAT := bz2
|
|
|
|
endif
|
|
|
|
|
2009-03-04 04:28:42 +01:00
|
|
|
system_tar := $(PRODUCT_OUT)/system.tar
|
2010-06-11 21:05:57 +02:00
|
|
|
INSTALLED_SYSTEMTARBALL_TARGET := $(system_tar).$(SYSTEM_TARBALL_FORMAT)
|
2009-03-04 04:28:42 +01:00
|
|
|
$(INSTALLED_SYSTEMTARBALL_TARGET): PRIVATE_SYSTEM_TAR := $(system_tar)
|
|
|
|
$(INSTALLED_SYSTEMTARBALL_TARGET): $(FS_GET_STATS) $(INTERNAL_SYSTEMIMAGE_FILES)
|
|
|
|
$(build-systemtarball-target)
|
|
|
|
|
|
|
|
.PHONY: systemtarball-nodeps
|
|
|
|
systemtarball-nodeps: $(FS_GET_STATS) \
|
|
|
|
$(filter-out systemtarball-nodeps stnod,$(MAKECMDGOALS))
|
|
|
|
$(build-systemtarball-target)
|
|
|
|
|
|
|
|
.PHONY: stnod
|
|
|
|
stnod: systemtarball-nodeps
|
|
|
|
|
2016-03-11 19:32:01 +01:00
|
|
|
# -----------------------------------------------------------------
|
2012-04-10 02:04:12 +02:00
|
|
|
## platform.zip: system, plus other files to be used in PDK fusion build,
|
|
|
|
## in a zip file
|
2013-07-22 23:54:58 +02:00
|
|
|
##
|
|
|
|
## PDK_PLATFORM_ZIP_PRODUCT_BINARIES is used to store specified files to platform.zip.
|
|
|
|
## The variable will be typically set from BoardConfig.mk.
|
|
|
|
## Files under out dir will be rejected to prevent possible conflicts with other rules.
|
2016-03-11 19:32:01 +01:00
|
|
|
pdk_odex_javalibs := $(strip $(foreach m,$(DEXPREOPT.MODULES.JAVA_LIBRARIES),\
|
|
|
|
$(if $(filter $(DEXPREOPT.$(m).INSTALLED),$(ALL_DEFAULT_INSTALLED_MODULES)),$(m))))
|
|
|
|
pdk_odex_apps := $(strip $(foreach m,$(DEXPREOPT.MODULES.APPS),\
|
|
|
|
$(if $(filter $(DEXPREOPT.$(m).INSTALLED),$(ALL_DEFAULT_INSTALLED_MODULES)),$(m))))
|
|
|
|
pdk_classes_dex := $(strip \
|
|
|
|
$(foreach m,$(pdk_odex_javalibs),$(call intermediates-dir-for,JAVA_LIBRARIES,$(m),,COMMON)/javalib.jar) \
|
|
|
|
$(foreach m,$(pdk_odex_apps),$(call intermediates-dir-for,APPS,$(m))/package.dex.apk))
|
|
|
|
|
|
|
|
pdk_odex_config_mk := $(PRODUCT_OUT)/pdk_dexpreopt_config.mk
|
|
|
|
$(pdk_odex_config_mk): PRIVATE_JAVA_LIBRARIES := $(pdk_odex_javalibs)
|
|
|
|
$(pdk_odex_config_mk): PRIVATE_APPS := $(pdk_odex_apps)
|
|
|
|
$(pdk_odex_config_mk) :
|
|
|
|
@echo "PDK odex config makefile: $@"
|
|
|
|
$(hide) mkdir -p $(dir $@)
|
|
|
|
$(hide) echo "# Auto-generated. Do not modify." > $@
|
|
|
|
$(hide) echo "PDK.DEXPREOPT.JAVA_LIBRARIES:=$(PRIVATE_JAVA_LIBRARIES)" >> $@
|
|
|
|
$(hide) echo "PDK.DEXPREOPT.APPS:=$(PRIVATE_APPS)" >> $@
|
|
|
|
$(foreach m,$(PRIVATE_JAVA_LIBRARIES),\
|
|
|
|
$(hide) echo "PDK.DEXPREOPT.$(m).SRC:=$(patsubst $(OUT_DIR)/%,%,$(call intermediates-dir-for,JAVA_LIBRARIES,$(m),,COMMON)/javalib.jar)" >> $@$(newline)\
|
|
|
|
$(hide) echo "PDK.DEXPREOPT.$(m).DEX_PREOPT:=$(DEXPREOPT.$(m).DEX_PREOPT)" >> $@$(newline)\
|
|
|
|
$(hide) echo "PDK.DEXPREOPT.$(m).MULTILIB:=$(DEXPREOPT.$(m).MULTILIB)" >> $@$(newline)\
|
|
|
|
$(hide) echo "PDK.DEXPREOPT.$(m).DEX_PREOPT_FLAGS:=$(DEXPREOPT.$(m).DEX_PREOPT_FLAGS)" >> $@$(newline)\
|
|
|
|
)
|
|
|
|
$(foreach m,$(PRIVATE_APPS),\
|
|
|
|
$(hide) echo "PDK.DEXPREOPT.$(m).SRC:=$(patsubst $(OUT_DIR)/%,%,$(call intermediates-dir-for,APPS,$(m))/package.dex.apk)" >> $@$(newline)\
|
|
|
|
$(hide) echo "PDK.DEXPREOPT.$(m).DEX_PREOPT:=$(DEXPREOPT.$(m).DEX_PREOPT)" >> $@$(newline)\
|
|
|
|
$(hide) echo "PDK.DEXPREOPT.$(m).MULTILIB:=$(DEXPREOPT.$(m).MULTILIB)" >> $@$(newline)\
|
|
|
|
$(hide) echo "PDK.DEXPREOPT.$(m).DEX_PREOPT_FLAGS:=$(DEXPREOPT.$(m).DEX_PREOPT_FLAGS)" >> $@$(newline)\
|
|
|
|
$(hide) echo "PDK.DEXPREOPT.$(m).PRIVILEGED_MODULE:=$(DEXPREOPT.$(m).PRIVILEGED_MODULE)" >> $@$(newline)\
|
2017-03-21 02:31:17 +01:00
|
|
|
$(hide) echo "PDK.DEXPREOPT.$(m).VENDOR_MODULE:=$(DEXPREOPT.$(m).VENDOR_MODULE)" >> $@$(newline)\
|
2016-03-11 19:32:01 +01:00
|
|
|
$(hide) echo "PDK.DEXPREOPT.$(m).TARGET_ARCH:=$(DEXPREOPT.$(m).TARGET_ARCH)" >> $@$(newline)\
|
|
|
|
$(hide) echo "PDK.DEXPREOPT.$(m).STRIPPED_SRC:=$(patsubst $(PRODUCT_OUT)/%,%,$(DEXPREOPT.$(m).INSTALLED_STRIPPED))" >> $@$(newline)\
|
|
|
|
)
|
|
|
|
|
2013-07-22 23:54:58 +02:00
|
|
|
PDK_PLATFORM_ZIP_PRODUCT_BINARIES := $(filter-out $(OUT_DIR)/%,$(PDK_PLATFORM_ZIP_PRODUCT_BINARIES))
|
2012-05-16 19:32:41 +02:00
|
|
|
INSTALLED_PLATFORM_ZIP := $(PRODUCT_OUT)/platform.zip
|
2016-03-11 19:32:01 +01:00
|
|
|
|
|
|
|
$(INSTALLED_PLATFORM_ZIP): PRIVATE_DEX_FILES := $(pdk_classes_dex)
|
|
|
|
$(INSTALLED_PLATFORM_ZIP): PRIVATE_ODEX_CONFIG := $(pdk_odex_config_mk)
|
|
|
|
$(INSTALLED_PLATFORM_ZIP) : $(INTERNAL_SYSTEMIMAGE_FILES) $(pdk_odex_config_mk)
|
2012-05-16 19:32:41 +02:00
|
|
|
$(call pretty,"Platform zip package: $(INSTALLED_PLATFORM_ZIP)")
|
2012-03-30 22:52:54 +02:00
|
|
|
$(hide) rm -f $@
|
2015-10-30 00:33:05 +01:00
|
|
|
$(hide) cd $(dir $@) && zip -qryX $(notdir $@) \
|
2012-04-10 02:04:12 +02:00
|
|
|
$(TARGET_COPY_OUT_SYSTEM) \
|
2012-08-01 02:13:20 +02:00
|
|
|
$(patsubst $(PRODUCT_OUT)/%, %, $(TARGET_OUT_NOTICE_FILES)) \
|
|
|
|
$(addprefix symbols/,$(PDK_SYMBOL_FILES_LIST))
|
2014-07-17 02:46:35 +02:00
|
|
|
ifdef BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE
|
2015-10-30 00:33:05 +01:00
|
|
|
$(hide) cd $(dir $@) && zip -qryX $(notdir $@) \
|
2014-07-17 02:46:35 +02:00
|
|
|
$(TARGET_COPY_OUT_VENDOR)
|
|
|
|
endif
|
2013-12-19 04:36:44 +01:00
|
|
|
ifneq ($(PDK_PLATFORM_JAVA_ZIP_CONTENTS),)
|
2015-10-30 00:33:05 +01:00
|
|
|
$(hide) cd $(OUT_DIR) && zip -qryX $(patsubst $(OUT_DIR)/%,%,$@) $(PDK_PLATFORM_JAVA_ZIP_CONTENTS)
|
2012-05-16 19:32:41 +02:00
|
|
|
endif
|
2013-07-22 23:54:58 +02:00
|
|
|
ifneq ($(PDK_PLATFORM_ZIP_PRODUCT_BINARIES),)
|
2015-10-30 00:33:05 +01:00
|
|
|
$(hide) zip -qryX $@ $(PDK_PLATFORM_ZIP_PRODUCT_BINARIES)
|
2013-07-22 23:54:58 +02:00
|
|
|
endif
|
2016-03-11 19:32:01 +01:00
|
|
|
@# Add dex-preopt files and config.
|
|
|
|
$(if $(PRIVATE_DEX_FILES),$(hide) cd $(OUT_DIR) && zip -qryX $(patsubst $(OUT_DIR)/%,%,$@ $(PRIVATE_DEX_FILES)))
|
|
|
|
$(hide) zip -qryXj $@ $(PRIVATE_ODEX_CONFIG)
|
2012-03-30 22:52:54 +02:00
|
|
|
|
|
|
|
.PHONY: platform
|
2012-05-16 19:32:41 +02:00
|
|
|
platform: $(INSTALLED_PLATFORM_ZIP)
|
|
|
|
|
|
|
|
.PHONY: platform-java
|
|
|
|
platform-java: platform
|
2012-03-30 22:52:54 +02:00
|
|
|
|
|
|
|
# Dist the platform.zip
|
2012-05-30 02:55:46 +02:00
|
|
|
ifneq (,$(filter platform platform-java, $(MAKECMDGOALS)))
|
|
|
|
$(call dist-for-goals, platform platform-java, $(INSTALLED_PLATFORM_ZIP))
|
2012-03-30 22:52:54 +02:00
|
|
|
endif
|
2009-03-04 04:28:42 +01:00
|
|
|
|
2016-03-11 19:32:01 +01:00
|
|
|
# -----------------------------------------------------------------
|
2010-06-05 00:24:49 +02:00
|
|
|
## boot tarball
|
|
|
|
define build-boottarball-target
|
2010-06-24 23:02:00 +02:00
|
|
|
$(hide) echo "Target boot fs tarball: $(INSTALLED_BOOTTARBALL_TARGET)"
|
2010-06-05 00:24:49 +02:00
|
|
|
$(hide) mkdir -p $(PRODUCT_OUT)/boot
|
|
|
|
$(hide) cp -f $(INTERNAL_BOOTIMAGE_FILES) $(PRODUCT_OUT)/boot/.
|
2016-10-06 01:57:27 +02:00
|
|
|
$(hide) echo $(INTERNAL_KERNEL_CMDLINE) > $(PRODUCT_OUT)/boot/cmdline
|
2010-06-05 00:24:49 +02:00
|
|
|
$(hide) $(MKTARBALL) $(FS_GET_STATS) \
|
|
|
|
$(PRODUCT_OUT) boot $(PRIVATE_BOOT_TAR) \
|
2015-07-09 18:54:55 +02:00
|
|
|
$(INSTALLED_BOOTTARBALL_TARGET) $(TARGET_OUT)
|
2010-06-05 00:24:49 +02:00
|
|
|
endef
|
|
|
|
|
|
|
|
ifndef BOOT_TARBALL_FORMAT
|
|
|
|
BOOT_TARBALL_FORMAT := bz2
|
|
|
|
endif
|
|
|
|
|
|
|
|
boot_tar := $(PRODUCT_OUT)/boot.tar
|
|
|
|
INSTALLED_BOOTTARBALL_TARGET := $(boot_tar).$(BOOT_TARBALL_FORMAT)
|
|
|
|
$(INSTALLED_BOOTTARBALL_TARGET): PRIVATE_BOOT_TAR := $(boot_tar)
|
|
|
|
$(INSTALLED_BOOTTARBALL_TARGET): $(FS_GET_STATS) $(INTERNAL_BOOTIMAGE_FILES)
|
|
|
|
$(build-boottarball-target)
|
|
|
|
|
|
|
|
.PHONY: boottarball-nodeps btnod
|
|
|
|
boottarball-nodeps btnod: $(FS_GET_STATS) \
|
|
|
|
$(filter-out boottarball-nodeps btnod,$(MAKECMDGOALS))
|
|
|
|
$(build-boottarball-target)
|
|
|
|
|
|
|
|
|
2009-03-04 04:28:42 +01:00
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# data partition image
|
|
|
|
INTERNAL_USERDATAIMAGE_FILES := \
|
2011-11-04 19:37:01 +01:00
|
|
|
$(filter $(TARGET_OUT_DATA)/%,$(ALL_DEFAULT_INSTALLED_MODULES))
|
2009-03-04 04:28:42 +01:00
|
|
|
|
2013-03-15 18:32:29 +01:00
|
|
|
# Don't build userdata.img if it's extfs but no partition size
|
|
|
|
skip_userdata.img :=
|
|
|
|
ifdef INTERNAL_USERIMAGES_EXT_VARIANT
|
|
|
|
ifndef BOARD_USERDATAIMAGE_PARTITION_SIZE
|
|
|
|
skip_userdata.img := true
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifneq ($(skip_userdata.img),true)
|
2011-10-29 02:02:30 +02:00
|
|
|
userdataimage_intermediates := \
|
2011-11-04 19:37:01 +01:00
|
|
|
$(call intermediates-dir-for,PACKAGING,userdata)
|
2011-10-29 02:02:30 +02:00
|
|
|
BUILT_USERDATAIMAGE_TARGET := $(PRODUCT_OUT)/userdata.img
|
2009-03-04 04:28:42 +01:00
|
|
|
|
|
|
|
define build-userdataimage-target
|
2011-10-29 02:02:30 +02:00
|
|
|
$(call pretty,"Target userdata fs image: $(INSTALLED_USERDATAIMAGE_TARGET)")
|
|
|
|
@mkdir -p $(TARGET_OUT_DATA)
|
|
|
|
@mkdir -p $(userdataimage_intermediates) && rm -rf $(userdataimage_intermediates)/userdata_image_info.txt
|
2013-02-27 22:54:02 +01:00
|
|
|
$(call generate-userimage-prop-dictionary, $(userdataimage_intermediates)/userdata_image_info.txt, skip_fsck=true)
|
2011-10-29 02:02:30 +02:00
|
|
|
$(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \
|
|
|
|
./build/tools/releasetools/build_image.py \
|
2015-07-09 18:54:55 +02:00
|
|
|
$(TARGET_OUT_DATA) $(userdataimage_intermediates)/userdata_image_info.txt $(INSTALLED_USERDATAIMAGE_TARGET) $(TARGET_OUT)
|
2014-06-16 23:19:36 +02:00
|
|
|
$(hide) $(call assert-max-image-size,$(INSTALLED_USERDATAIMAGE_TARGET),$(BOARD_USERDATAIMAGE_PARTITION_SIZE))
|
2009-03-04 04:28:42 +01:00
|
|
|
endef
|
2009-04-10 04:31:12 +02:00
|
|
|
|
|
|
|
# We just build this directly to the install location.
|
|
|
|
INSTALLED_USERDATAIMAGE_TARGET := $(BUILT_USERDATAIMAGE_TARGET)
|
2017-03-25 00:06:31 +01:00
|
|
|
INSTALLED_USERDATAIMAGE_TARGET_DEPS := \
|
|
|
|
$(INTERNAL_USERIMAGES_DEPS) \
|
|
|
|
$(INTERNAL_USERDATAIMAGE_FILES) \
|
|
|
|
$(BUILD_IMAGE_SRCS)
|
|
|
|
$(INSTALLED_USERDATAIMAGE_TARGET): $(INSTALLED_USERDATAIMAGE_TARGET_DEPS)
|
2009-03-04 04:28:42 +01:00
|
|
|
$(build-userdataimage-target)
|
|
|
|
|
|
|
|
.PHONY: userdataimage-nodeps
|
2010-05-10 22:04:47 +02:00
|
|
|
userdataimage-nodeps: | $(INTERNAL_USERIMAGES_DEPS)
|
2009-03-04 04:28:42 +01:00
|
|
|
$(build-userdataimage-target)
|
|
|
|
|
2013-03-15 18:32:29 +01:00
|
|
|
endif # not skip_userdata.img
|
|
|
|
skip_userdata.img :=
|
2012-10-15 23:36:22 +02:00
|
|
|
|
2017-03-25 00:06:31 +01:00
|
|
|
# ASAN libraries in the system image - build rule.
|
|
|
|
ASAN_OUT_DIRS_FOR_SYSTEM_INSTALL := $(sort $(patsubst $(PRODUCT_OUT)/%,%,\
|
|
|
|
$(TARGET_OUT_SHARED_LIBRARIES) \
|
|
|
|
$(2ND_TARGET_OUT_SHARED_LIBRARIES) \
|
|
|
|
$(TARGET_OUT_VENDOR_SHARED_LIBRARIES) \
|
|
|
|
$(2ND_TARGET_OUT_VENDOR_SHARED_LIBRARIES)))
|
2017-03-31 01:54:23 +02:00
|
|
|
# Extra options: Enforce the system user for the files to avoid having to change ownership.
|
|
|
|
ASAN_SYSTEM_INSTALL_OPTIONS := --owner=1000 --group=1000
|
2017-03-25 00:06:31 +01:00
|
|
|
# Note: experimentally, it seems not worth it to try to get "best" compression. We don't save
|
|
|
|
# enough space.
|
|
|
|
$(ASAN_IN_SYSTEM_INSTALLED): $(INSTALLED_USERDATAIMAGE_TARGET_DEPS)
|
2017-03-31 01:54:23 +02:00
|
|
|
tar cfj $(ASAN_IN_SYSTEM_INSTALLED) $(ASAN_SYSTEM_INSTALL_OPTIONS) -C $(TARGET_OUT_DATA)/.. $(ASAN_OUT_DIRS_FOR_SYSTEM_INSTALL) >/dev/null
|
2017-03-25 00:06:31 +01:00
|
|
|
|
2009-03-04 04:28:42 +01:00
|
|
|
#######
|
|
|
|
## data partition tarball
|
|
|
|
define build-userdatatarball-target
|
|
|
|
$(call pretty,"Target userdata fs tarball: " \
|
|
|
|
"$(INSTALLED_USERDATATARBALL_TARGET)")
|
|
|
|
$(MKTARBALL) $(FS_GET_STATS) \
|
|
|
|
$(PRODUCT_OUT) data $(PRIVATE_USERDATA_TAR) \
|
2015-07-09 18:54:55 +02:00
|
|
|
$(INSTALLED_USERDATATARBALL_TARGET) $(TARGET_OUT)
|
2009-03-04 04:28:42 +01:00
|
|
|
endef
|
|
|
|
|
|
|
|
userdata_tar := $(PRODUCT_OUT)/userdata.tar
|
|
|
|
INSTALLED_USERDATATARBALL_TARGET := $(userdata_tar).bz2
|
|
|
|
$(INSTALLED_USERDATATARBALL_TARGET): PRIVATE_USERDATA_TAR := $(userdata_tar)
|
|
|
|
$(INSTALLED_USERDATATARBALL_TARGET): $(FS_GET_STATS) $(INTERNAL_USERDATAIMAGE_FILES)
|
|
|
|
$(build-userdatatarball-target)
|
|
|
|
|
2016-08-17 01:36:05 +02:00
|
|
|
$(call dist-for-goals,userdatatarball,$(INSTALLED_USERDATATARBALL_TARGET))
|
|
|
|
|
2009-03-04 04:28:42 +01:00
|
|
|
.PHONY: userdatatarball-nodeps
|
|
|
|
userdatatarball-nodeps: $(FS_GET_STATS)
|
|
|
|
$(build-userdatatarball-target)
|
|
|
|
|
|
|
|
|
2016-04-08 21:08:03 +02:00
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# partition table image
|
|
|
|
ifdef BOARD_BPT_INPUT_FILES
|
|
|
|
|
|
|
|
BUILT_BPTIMAGE_TARGET := $(PRODUCT_OUT)/partition-table.img
|
2016-08-19 19:59:57 +02:00
|
|
|
BUILT_BPTJSON_TARGET := $(PRODUCT_OUT)/partition-table.bpt
|
2016-04-08 21:08:03 +02:00
|
|
|
|
|
|
|
INTERNAL_BVBTOOL_MAKE_TABLE_ARGS := \
|
|
|
|
--output_gpt $(BUILT_BPTIMAGE_TARGET) \
|
2016-08-19 19:59:57 +02:00
|
|
|
--output_json $(BUILT_BPTJSON_TARGET) \
|
2016-04-08 21:08:03 +02:00
|
|
|
$(foreach file, $(BOARD_BPT_INPUT_FILES), --input $(file))
|
|
|
|
|
|
|
|
ifdef BOARD_BPT_DISK_SIZE
|
|
|
|
INTERNAL_BVBTOOL_MAKE_TABLE_ARGS += --disk_size $(BOARD_BPT_DISK_SIZE)
|
|
|
|
endif
|
|
|
|
|
|
|
|
define build-bptimage-target
|
|
|
|
$(call pretty,"Target partition table image: $(INSTALLED_BPTIMAGE_TARGET)")
|
|
|
|
$(hide) $(BPTTOOL) make_table $(INTERNAL_BVBTOOL_MAKE_TABLE_ARGS) $(BOARD_BPT_MAKE_TABLE_ARGS)
|
|
|
|
endef
|
|
|
|
|
|
|
|
INSTALLED_BPTIMAGE_TARGET := $(BUILT_BPTIMAGE_TARGET)
|
2016-08-19 19:59:57 +02:00
|
|
|
$(BUILT_BPTJSON_TARGET): $(INSTALLED_BPTIMAGE_TARGET)
|
|
|
|
$(hide) touch -c $(BUILT_BPTJSON_TARGET)
|
|
|
|
|
2016-04-08 21:08:03 +02:00
|
|
|
$(INSTALLED_BPTIMAGE_TARGET): $(BPTTOOL) $(BOARD_BPT_INPUT_FILES)
|
|
|
|
$(build-bptimage-target)
|
|
|
|
|
|
|
|
.PHONY: bptimage-nodeps
|
|
|
|
bptimage-nodeps:
|
|
|
|
$(build-bptimage-target)
|
|
|
|
|
|
|
|
endif # BOARD_BPT_INPUT_FILES
|
|
|
|
|
2011-11-04 19:37:01 +01:00
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# cache partition image
|
|
|
|
ifdef BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE
|
|
|
|
INTERNAL_CACHEIMAGE_FILES := \
|
|
|
|
$(filter $(TARGET_OUT_CACHE)/%,$(ALL_DEFAULT_INSTALLED_MODULES))
|
|
|
|
|
|
|
|
cacheimage_intermediates := \
|
|
|
|
$(call intermediates-dir-for,PACKAGING,cache)
|
|
|
|
BUILT_CACHEIMAGE_TARGET := $(PRODUCT_OUT)/cache.img
|
|
|
|
|
|
|
|
define build-cacheimage-target
|
|
|
|
$(call pretty,"Target cache fs image: $(INSTALLED_CACHEIMAGE_TARGET)")
|
|
|
|
@mkdir -p $(TARGET_OUT_CACHE)
|
|
|
|
@mkdir -p $(cacheimage_intermediates) && rm -rf $(cacheimage_intermediates)/cache_image_info.txt
|
2013-02-27 22:54:02 +01:00
|
|
|
$(call generate-userimage-prop-dictionary, $(cacheimage_intermediates)/cache_image_info.txt, skip_fsck=true)
|
2011-11-04 19:37:01 +01:00
|
|
|
$(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \
|
|
|
|
./build/tools/releasetools/build_image.py \
|
2015-07-09 18:54:55 +02:00
|
|
|
$(TARGET_OUT_CACHE) $(cacheimage_intermediates)/cache_image_info.txt $(INSTALLED_CACHEIMAGE_TARGET) $(TARGET_OUT)
|
2014-06-16 23:19:36 +02:00
|
|
|
$(hide) $(call assert-max-image-size,$(INSTALLED_CACHEIMAGE_TARGET),$(BOARD_CACHEIMAGE_PARTITION_SIZE))
|
2011-11-04 19:37:01 +01:00
|
|
|
endef
|
|
|
|
|
|
|
|
# We just build this directly to the install location.
|
|
|
|
INSTALLED_CACHEIMAGE_TARGET := $(BUILT_CACHEIMAGE_TARGET)
|
2016-04-19 11:41:27 +02:00
|
|
|
$(INSTALLED_CACHEIMAGE_TARGET): $(INTERNAL_USERIMAGES_DEPS) $(INTERNAL_CACHEIMAGE_FILES) $(BUILD_IMAGE_SRCS)
|
2011-11-04 19:37:01 +01:00
|
|
|
$(build-cacheimage-target)
|
|
|
|
|
|
|
|
.PHONY: cacheimage-nodeps
|
|
|
|
cacheimage-nodeps: | $(INTERNAL_USERIMAGES_DEPS)
|
|
|
|
$(build-cacheimage-target)
|
|
|
|
|
2016-05-14 00:26:09 +02:00
|
|
|
else # BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE
|
|
|
|
# we need to ignore the broken cache link when doing the rsync
|
|
|
|
IGNORE_CACHE_LINK := --exclude=cache
|
2011-11-04 19:37:01 +01:00
|
|
|
endif # BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE
|
|
|
|
|
2016-06-16 23:47:10 +02:00
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# system_other partition image
|
|
|
|
ifeq ($(BOARD_USES_SYSTEM_OTHER_ODEX),true)
|
|
|
|
BOARD_USES_SYSTEM_OTHER := true
|
|
|
|
|
|
|
|
# Marker file to identify that odex files are installed
|
|
|
|
INSTALLED_SYSTEM_OTHER_ODEX_MARKER := $(TARGET_OUT_SYSTEM_OTHER)/system-other-odex-marker
|
|
|
|
ALL_DEFAULT_INSTALLED_MODULES += $(INSTALLED_SYSTEM_OTHER_ODEX_MARKER)
|
|
|
|
$(INSTALLED_SYSTEM_OTHER_ODEX_MARKER):
|
|
|
|
$(hide) touch $@
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifdef BOARD_USES_SYSTEM_OTHER
|
|
|
|
INTERNAL_SYSTEMOTHERIMAGE_FILES := \
|
|
|
|
$(filter $(TARGET_OUT_SYSTEM_OTHER)/%,\
|
|
|
|
$(ALL_DEFAULT_INSTALLED_MODULES)\
|
|
|
|
$(ALL_PDK_FUSION_FILES))
|
|
|
|
|
|
|
|
INSTALLED_FILES_FILE_SYSTEMOTHER := $(PRODUCT_OUT)/installed-files-system-other.txt
|
2017-03-16 17:41:19 +01:00
|
|
|
$(INSTALLED_FILES_FILE_SYSTEMOTHER) : $(INTERNAL_SYSTEMOTHERIMAGE_FILES) $(FILESLIST)
|
2016-06-16 23:47:10 +02:00
|
|
|
@echo Installed file list: $@
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
@rm -f $@
|
2017-03-16 17:41:19 +01:00
|
|
|
$(hide) $(FILESLIST) $(TARGET_OUT_SYSTEM_OTHER) > $(@:.txt=.json)
|
2016-10-11 07:48:10 +02:00
|
|
|
$(hide) build/tools/fileslist_util.py -c $(@:.txt=.json) > $@
|
2016-06-16 23:47:10 +02:00
|
|
|
|
|
|
|
systemotherimage_intermediates := \
|
|
|
|
$(call intermediates-dir-for,PACKAGING,system_other)
|
|
|
|
BUILT_SYSTEMOTHERIMAGE_TARGET := $(PRODUCT_OUT)/system_other.img
|
|
|
|
|
|
|
|
# Note that we assert the size is SYSTEMIMAGE_PARTITION_SIZE since this is the 'b' system image.
|
|
|
|
define build-systemotherimage-target
|
|
|
|
$(call pretty,"Target system_other fs image: $(INSTALLED_SYSTEMOTHERIMAGE_TARGET)")
|
|
|
|
@mkdir -p $(TARGET_OUT_SYSTEM_OTHER)
|
|
|
|
@mkdir -p $(systemotherimage_intermediates) && rm -rf $(systemotherimage_intermediates)/system_other_image_info.txt
|
|
|
|
$(call generate-userimage-prop-dictionary, $(systemotherimage_intermediates)/system_other_image_info.txt, skip_fsck=true)
|
|
|
|
$(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \
|
|
|
|
./build/tools/releasetools/build_image.py \
|
|
|
|
$(TARGET_OUT_SYSTEM_OTHER) $(systemotherimage_intermediates)/system_other_image_info.txt $(INSTALLED_SYSTEMOTHERIMAGE_TARGET) $(TARGET_OUT)
|
|
|
|
$(hide) $(call assert-max-image-size,$(INSTALLED_SYSTEMOTHERIMAGE_TARGET),$(BOARD_SYSTEMIMAGE_PARTITION_SIZE))
|
|
|
|
endef
|
|
|
|
|
|
|
|
# We just build this directly to the install location.
|
|
|
|
INSTALLED_SYSTEMOTHERIMAGE_TARGET := $(BUILT_SYSTEMOTHERIMAGE_TARGET)
|
2017-06-16 19:24:54 +02:00
|
|
|
ifneq (true,$(SANITIZE_LITE))
|
|
|
|
# Only create system_other when not building the second stage of a SANITIZE_LITE build.
|
2016-06-16 23:47:10 +02:00
|
|
|
$(INSTALLED_SYSTEMOTHERIMAGE_TARGET): $(INTERNAL_USERIMAGES_DEPS) $(INTERNAL_SYSTEMOTHERIMAGE_FILES) $(INSTALLED_FILES_FILE_SYSTEMOTHER)
|
|
|
|
$(build-systemotherimage-target)
|
2017-06-16 19:24:54 +02:00
|
|
|
endif
|
2016-06-16 23:47:10 +02:00
|
|
|
|
|
|
|
.PHONY: systemotherimage-nodeps
|
|
|
|
systemotherimage-nodeps: | $(INTERNAL_USERIMAGES_DEPS)
|
|
|
|
$(build-systemotherimage-target)
|
|
|
|
|
|
|
|
endif # BOARD_USES_SYSTEM_OTHER
|
|
|
|
|
|
|
|
|
2013-03-20 19:02:05 +01:00
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# vendor partition image
|
|
|
|
ifdef BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE
|
|
|
|
INTERNAL_VENDORIMAGE_FILES := \
|
2014-07-17 02:46:35 +02:00
|
|
|
$(filter $(TARGET_OUT_VENDOR)/%,\
|
|
|
|
$(ALL_DEFAULT_INSTALLED_MODULES)\
|
|
|
|
$(ALL_PDK_FUSION_FILES))
|
|
|
|
|
|
|
|
# platform.zip depends on $(INTERNAL_VENDORIMAGE_FILES).
|
|
|
|
$(INSTALLED_PLATFORM_ZIP) : $(INTERNAL_VENDORIMAGE_FILES)
|
2013-03-20 19:02:05 +01:00
|
|
|
|
2015-09-15 23:22:12 +02:00
|
|
|
INSTALLED_FILES_FILE_VENDOR := $(PRODUCT_OUT)/installed-files-vendor.txt
|
2017-03-16 17:41:19 +01:00
|
|
|
$(INSTALLED_FILES_FILE_VENDOR) : $(INTERNAL_VENDORIMAGE_FILES) $(FILESLIST)
|
2015-09-15 23:22:12 +02:00
|
|
|
@echo Installed file list: $@
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
@rm -f $@
|
2017-03-16 17:41:19 +01:00
|
|
|
$(hide) $(FILESLIST) $(TARGET_OUT_VENDOR) > $(@:.txt=.json)
|
2016-10-11 07:48:10 +02:00
|
|
|
$(hide) build/tools/fileslist_util.py -c $(@:.txt=.json) > $@
|
2015-09-15 23:22:12 +02:00
|
|
|
|
2013-03-20 19:02:05 +01:00
|
|
|
vendorimage_intermediates := \
|
|
|
|
$(call intermediates-dir-for,PACKAGING,vendor)
|
|
|
|
BUILT_VENDORIMAGE_TARGET := $(PRODUCT_OUT)/vendor.img
|
|
|
|
define build-vendorimage-target
|
|
|
|
$(call pretty,"Target vendor fs image: $(INSTALLED_VENDORIMAGE_TARGET)")
|
|
|
|
@mkdir -p $(TARGET_OUT_VENDOR)
|
|
|
|
@mkdir -p $(vendorimage_intermediates) && rm -rf $(vendorimage_intermediates)/vendor_image_info.txt
|
|
|
|
$(call generate-userimage-prop-dictionary, $(vendorimage_intermediates)/vendor_image_info.txt, skip_fsck=true)
|
2017-02-22 10:27:10 +01:00
|
|
|
$(if $(BOARD_VENDOR_KERNEL_MODULES), \
|
|
|
|
$(call build-image-kernel-modules,$(BOARD_VENDOR_KERNEL_MODULES),$(TARGET_OUT_VENDOR),vendor/,$(call intermediates-dir-for,PACKAGING,depmod_vendor)))
|
2013-03-20 19:02:05 +01:00
|
|
|
$(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \
|
|
|
|
./build/tools/releasetools/build_image.py \
|
2015-07-09 18:54:55 +02:00
|
|
|
$(TARGET_OUT_VENDOR) $(vendorimage_intermediates)/vendor_image_info.txt $(INSTALLED_VENDORIMAGE_TARGET) $(TARGET_OUT)
|
2014-06-16 23:19:36 +02:00
|
|
|
$(hide) $(call assert-max-image-size,$(INSTALLED_VENDORIMAGE_TARGET),$(BOARD_VENDORIMAGE_PARTITION_SIZE))
|
2013-03-20 19:02:05 +01:00
|
|
|
endef
|
|
|
|
|
|
|
|
# We just build this directly to the install location.
|
|
|
|
INSTALLED_VENDORIMAGE_TARGET := $(BUILT_VENDORIMAGE_TARGET)
|
2017-02-22 10:27:10 +01:00
|
|
|
$(INSTALLED_VENDORIMAGE_TARGET): $(INTERNAL_USERIMAGES_DEPS) $(INTERNAL_VENDORIMAGE_FILES) $(INSTALLED_FILES_FILE_VENDOR) $(BUILD_IMAGE_SRCS) $(DEPMOD) $(BOARD_VENDOR_KERNEL_MODULES)
|
2013-03-20 19:02:05 +01:00
|
|
|
$(build-vendorimage-target)
|
|
|
|
|
2017-03-07 21:10:09 +01:00
|
|
|
.PHONY: vendorimage-nodeps vnod
|
|
|
|
vendorimage-nodeps vnod: | $(INTERNAL_USERIMAGES_DEPS) $(DEPMOD)
|
2013-03-20 19:02:05 +01:00
|
|
|
$(build-vendorimage-target)
|
|
|
|
|
2017-06-21 01:57:52 +02:00
|
|
|
sync: $(INTERNAL_VENDORIMAGE_FILES)
|
|
|
|
|
2016-06-17 23:07:37 +02:00
|
|
|
else ifdef BOARD_PREBUILT_VENDORIMAGE
|
|
|
|
INSTALLED_VENDORIMAGE_TARGET := $(PRODUCT_OUT)/vendor.img
|
|
|
|
$(eval $(call copy-one-file,$(BOARD_PREBUILT_VENDORIMAGE),$(INSTALLED_VENDORIMAGE_TARGET)))
|
|
|
|
endif
|
2013-03-20 19:02:05 +01:00
|
|
|
|
2017-04-27 09:34:50 +02:00
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# dtbo image
|
|
|
|
ifdef BOARD_PREBUILT_DTBOIMAGE
|
|
|
|
INSTALLED_DTBOIMAGE_TARGET := $(PRODUCT_OUT)/dtbo.img
|
|
|
|
|
|
|
|
ifeq ($(BOARD_AVB_ENABLE),true)
|
2017-05-26 12:30:04 +02:00
|
|
|
$(INSTALLED_DTBOIMAGE_TARGET): $(BOARD_PREBUILT_DTBOIMAGE) $(AVBTOOL) $(BOARD_AVB_DTBO_KEY_PATH)
|
2017-04-27 09:34:50 +02:00
|
|
|
cp $(BOARD_PREBUILT_DTBOIMAGE) $@
|
|
|
|
$(AVBTOOL) add_hash_footer \
|
|
|
|
--image $@ \
|
|
|
|
--partition_size $(BOARD_DTBOIMG_PARTITION_SIZE) \
|
2017-05-26 12:30:04 +02:00
|
|
|
--partition_name dtbo $(INTERNAL_AVB_DTBO_SIGNING_ARGS) \
|
2017-04-27 09:34:50 +02:00
|
|
|
$(BOARD_AVB_DTBO_ADD_HASH_FOOTER_ARGS)
|
|
|
|
else
|
|
|
|
$(INSTALLED_DTBOIMAGE_TARGET): $(BOARD_PREBUILT_DTBOIMAGE)
|
|
|
|
cp $(BOARD_PREBUILT_DTBOIMAGE) $@
|
|
|
|
endif
|
|
|
|
|
|
|
|
endif
|
|
|
|
|
2017-06-20 11:38:21 +02:00
|
|
|
# Convert to lower case without requiring a shell, which isn't cacheable.
|
|
|
|
to-lower = $(subst A,a,$(subst B,b,$(subst C,c,$(subst D,d,$(subst E,e,$(subst F,f,$(subst G,g,\
|
|
|
|
$(subst H,h,$(subst I,i,$(subst J,j,$(subst K,k,$(subst L,l,$(subst M,m,$(subst N,n,$(subst O,o,\
|
|
|
|
$(subst P,p,$(subst Q,q,$(subst R,r,$(subst S,s,$(subst T,t,$(subst U,u,$(subst V,v,$(subst W,w,\
|
|
|
|
$(subst X,x,$(subst Y,y,$(subst Z,z,$1))))))))))))))))))))))))))
|
2017-06-29 10:09:52 +02:00
|
|
|
# Convert to upper case without requiring a shell, which isn't cacheable.
|
|
|
|
to-upper=$(subst a,A,$(subst b,B,$(subst c,C,$(subst d,D,$(subst e,E,$(subst f,F,$(subst g,G,\
|
|
|
|
$(subst h,H,$(subst i,I,$(subst j,J,$(subst k,K,$(subst l,L,$(subst m,M,$(subst n,N,$(subst o,O,\
|
|
|
|
$(subst p,P,$(subst q,Q,$(subst r,R,$(subst s,S,$(subst t,T,$(subst u,U,$(subst v,V,$(subst w,W,\
|
|
|
|
$(subst x,X,$(subst y,Y,$(subst z,Z,$1))))))))))))))))))))))))))
|
2017-06-20 11:38:21 +02:00
|
|
|
|
2017-03-31 09:21:26 +02:00
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# vbmeta image
|
|
|
|
ifeq ($(BOARD_AVB_ENABLE),true)
|
|
|
|
|
|
|
|
BUILT_VBMETAIMAGE_TARGET := $(PRODUCT_OUT)/vbmeta.img
|
2017-05-26 12:30:04 +02:00
|
|
|
AVB_CHAIN_KEY_DIR := $(TARGET_OUT_INTERMEDIATES)/avb_chain_keys
|
2017-03-31 09:21:26 +02:00
|
|
|
|
2017-05-26 12:30:04 +02:00
|
|
|
ifdef BOARD_AVB_KEY_PATH
|
|
|
|
$(if $(BOARD_AVB_ALGORITHM),,$(error BOARD_AVB_ALGORITHM is not defined))
|
|
|
|
else
|
|
|
|
# If key path isn't specified, use the 4096-bit test key.
|
|
|
|
BOARD_AVB_ALGORITHM := SHA256_RSA4096
|
|
|
|
BOARD_AVB_KEY_PATH := external/avb/test/data/testkey_rsa4096.pem
|
|
|
|
endif
|
|
|
|
|
|
|
|
INTERNAL_AVB_SIGNING_ARGS := \
|
|
|
|
--algorithm $(BOARD_AVB_ALGORITHM) --key $(BOARD_AVB_KEY_PATH)
|
|
|
|
|
|
|
|
BOOT_FOOTER_ARGS := BOARD_AVB_BOOT_ADD_HASH_FOOTER_ARGS
|
|
|
|
DTBO_FOOTER_ARGS := BOARD_AVB_DTBO_ADD_HASH_FOOTER_ARGS
|
|
|
|
SYSTEM_FOOTER_ARGS := BOARD_AVB_SYSTEM_ADD_HASHTREE_FOOTER_ARGS
|
|
|
|
VENDOR_FOOTER_ARGS := BOARD_AVB_VENDOR_ADD_HASHTREE_FOOTER_ARGS
|
|
|
|
|
|
|
|
# Check and set required build variables for a chain partition.
|
|
|
|
# $(1): the partition to enable AVB chain, e.g., BOOT or SYSTEM.
|
|
|
|
define check-and-set-avb-chain-args
|
|
|
|
$(eval PART := $(1))
|
2017-06-20 11:38:21 +02:00
|
|
|
$(eval part=$(call to-lower,$(PART)))
|
2017-05-26 12:30:04 +02:00
|
|
|
|
|
|
|
$(eval _key_path := BOARD_AVB_$(PART)_KEY_PATH)
|
|
|
|
$(eval _signing_algorithm := BOARD_AVB_$(PART)_ALGORITHM)
|
|
|
|
$(eval _rollback_index := BOARD_AVB_$(PART)_ROLLBACK_INDEX)
|
|
|
|
$(eval _rollback_index_location := BOARD_AVB_$(PART)_ROLLBACK_INDEX_LOCATION)
|
|
|
|
$(if $($(_key_path)),,$(error $(_key_path) is not defined))
|
|
|
|
$(if $($(_signing_algorithm)),,$(error $(_signing_algorithm) is not defined))
|
|
|
|
$(if $($(_rollback_index)),,$(error $(_rollback_index) is not defined))
|
|
|
|
$(if $($(_rollback_index_location)),,$(error $(_rollback_index_location) is not defined))
|
|
|
|
|
|
|
|
# Set INTERNAL_AVB_(PART)_SIGNING_ARGS
|
|
|
|
$(eval _signing_args := INTERNAL_AVB_$(PART)_SIGNING_ARGS)
|
|
|
|
$(eval $(_signing_args) := \
|
|
|
|
--algorithm $($(_signing_algorithm)) --key $($(_key_path)))
|
|
|
|
|
|
|
|
$(eval INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS += \
|
|
|
|
--chain_partition $(part):$($(_rollback_index_location)):$(AVB_CHAIN_KEY_DIR)/$(part).avbpubkey)
|
|
|
|
|
|
|
|
# Set rollback_index via footer args
|
|
|
|
$(eval _footer_args := $(PART)_FOOTER_ARGS)
|
|
|
|
$(eval $($(_footer_args)) += --rollback_index $($(_rollback_index)))
|
|
|
|
endef
|
|
|
|
|
|
|
|
ifdef BOARD_AVB_BOOT_KEY_PATH
|
|
|
|
$(eval $(call check-and-set-avb-chain-args,BOOT))
|
|
|
|
else
|
|
|
|
INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS += \
|
|
|
|
--include_descriptors_from_image $(INSTALLED_BOOTIMAGE_TARGET)
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifdef BOARD_AVB_SYSTEM_KEY_PATH
|
|
|
|
$(eval $(call check-and-set-avb-chain-args,SYSTEM))
|
|
|
|
else
|
|
|
|
INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS += \
|
|
|
|
--include_descriptors_from_image $(INSTALLED_SYSTEMIMAGE)
|
|
|
|
endif
|
2017-03-31 09:21:26 +02:00
|
|
|
|
|
|
|
ifdef INSTALLED_VENDORIMAGE_TARGET
|
2017-05-26 12:30:04 +02:00
|
|
|
ifdef BOARD_AVB_VENDOR_KEY_PATH
|
|
|
|
$(eval $(call check-and-set-avb-chain-args,VENDOR))
|
|
|
|
else
|
2017-03-31 09:21:26 +02:00
|
|
|
INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS += \
|
|
|
|
--include_descriptors_from_image $(INSTALLED_VENDORIMAGE_TARGET)
|
|
|
|
endif
|
2017-05-26 12:30:04 +02:00
|
|
|
endif
|
2017-03-31 09:21:26 +02:00
|
|
|
|
2017-04-27 09:34:50 +02:00
|
|
|
ifdef INSTALLED_DTBOIMAGE_TARGET
|
2017-05-26 12:30:04 +02:00
|
|
|
ifdef BOARD_AVB_DTBO_KEY_PATH
|
|
|
|
$(eval $(call check-and-set-avb-chain-args,DTBO))
|
|
|
|
else
|
2017-04-27 09:34:50 +02:00
|
|
|
INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS += \
|
2017-05-31 06:46:33 +02:00
|
|
|
--include_descriptors_from_image $(INSTALLED_DTBOIMAGE_TARGET)
|
2017-04-27 09:34:50 +02:00
|
|
|
endif
|
2017-05-26 12:30:04 +02:00
|
|
|
endif
|
2017-04-27 09:34:50 +02:00
|
|
|
|
2017-06-30 06:12:15 +02:00
|
|
|
BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS += --padding_size 4096
|
2017-06-13 05:27:06 +02:00
|
|
|
|
2017-05-26 12:30:04 +02:00
|
|
|
# Add kernel cmdline descriptor for kernel to mount system.img as root with
|
|
|
|
# dm-verity. This works when system.img is either chained or not-chained:
|
|
|
|
# - chained: The --setup_as_rootfs_from_kernel option will add dm-verity kernel
|
|
|
|
# cmdline descriptor to system.img
|
|
|
|
# - not-chained: The --include_descriptors_from_image option for make_vbmeta_image
|
|
|
|
# will include the kernel cmdline descriptor from system.img into vbmeta.img
|
2017-04-14 12:50:11 +02:00
|
|
|
ifeq ($(BOARD_BUILD_SYSTEM_ROOT_IMAGE),true)
|
2017-05-26 12:30:04 +02:00
|
|
|
BOARD_AVB_SYSTEM_ADD_HASHTREE_FOOTER_ARGS += --setup_as_rootfs_from_kernel
|
2017-04-14 12:50:11 +02:00
|
|
|
endif
|
|
|
|
|
2017-03-31 09:21:26 +02:00
|
|
|
ifdef BOARD_AVB_ROLLBACK_INDEX
|
2017-05-26 12:30:04 +02:00
|
|
|
BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS += --rollback_index $(BOARD_AVB_ROLLBACK_INDEX)
|
2017-03-31 09:21:26 +02:00
|
|
|
endif
|
|
|
|
|
|
|
|
ifndef BOARD_BOOTIMAGE_PARTITION_SIZE
|
|
|
|
$(error BOARD_BOOTIMAGE_PARTITION_SIZE must be set for BOARD_AVB_ENABLE)
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifndef BOARD_SYSTEMIMAGE_PARTITION_SIZE
|
|
|
|
$(error BOARD_SYSTEMIMAGE_PARTITION_SIZE must be set for BOARD_AVB_ENABLE)
|
|
|
|
endif
|
|
|
|
|
2017-05-26 12:30:04 +02:00
|
|
|
# $(1): the directory to extract public keys to
|
|
|
|
define extract-avb-chain-public-keys
|
|
|
|
$(if $(BOARD_AVB_BOOT_KEY_PATH),\
|
|
|
|
$(hide) $(AVBTOOL) extract_public_key --key $(BOARD_AVB_BOOT_KEY_PATH) \
|
|
|
|
--output $(1)/boot.avbpubkey)
|
|
|
|
$(if $(BOARD_AVB_SYSTEM_KEY_PATH),\
|
|
|
|
$(hide) $(AVBTOOL) extract_public_key --key $(BOARD_AVB_SYSTEM_KEY_PATH) \
|
|
|
|
--output $(1)/system.avbpubkey)
|
|
|
|
$(if $(BOARD_AVB_VENDOR_KEY_PATH),\
|
|
|
|
$(hide) $(AVBTOOL) extract_public_key --key $(BOARD_AVB_VENDOR_KEY_PATH) \
|
|
|
|
--output $(1)/vendor.avbpubkey)
|
|
|
|
$(if $(BOARD_AVB_DTBO_KEY_PATH),\
|
|
|
|
$(hide) $(AVBTOOL) extract_public_key --key $(BOARD_AVB_DTBO_KEY_PATH) \
|
|
|
|
--output $(1)/dtbo.avbpubkey)
|
|
|
|
endef
|
|
|
|
|
2017-03-31 09:21:26 +02:00
|
|
|
define build-vbmetaimage-target
|
|
|
|
$(call pretty,"Target vbmeta image: $(INSTALLED_VBMETAIMAGE_TARGET)")
|
2017-05-26 12:30:04 +02:00
|
|
|
$(hide) mkdir -p $(AVB_CHAIN_KEY_DIR)
|
|
|
|
$(call extract-avb-chain-public-keys, $(AVB_CHAIN_KEY_DIR))
|
2017-03-31 09:21:26 +02:00
|
|
|
$(hide) $(AVBTOOL) make_vbmeta_image \
|
|
|
|
$(INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS) \
|
|
|
|
$(INTERNAL_AVB_SIGNING_ARGS) \
|
|
|
|
$(BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS) \
|
|
|
|
--output $@
|
2017-05-26 12:30:04 +02:00
|
|
|
$(hide) rm -rf $(AVB_CHAIN_KEY_DIR)
|
2017-03-31 09:21:26 +02:00
|
|
|
endef
|
|
|
|
|
|
|
|
INSTALLED_VBMETAIMAGE_TARGET := $(BUILT_VBMETAIMAGE_TARGET)
|
2017-05-26 12:30:04 +02:00
|
|
|
$(INSTALLED_VBMETAIMAGE_TARGET): $(AVBTOOL) $(INSTALLED_BOOTIMAGE_TARGET) $(INSTALLED_SYSTEMIMAGE) $(INSTALLED_VENDORIMAGE_TARGET) $(INSTALLED_DTBOIMAGE_TARGET) $(BOARD_AVB_KEY_PATH)
|
2017-03-31 09:21:26 +02:00
|
|
|
$(build-vbmetaimage-target)
|
|
|
|
|
|
|
|
.PHONY: vbmetaimage-nodeps
|
|
|
|
vbmetaimage-nodeps:
|
|
|
|
$(build-vbmetaimage-target)
|
|
|
|
|
|
|
|
endif # BOARD_AVB_ENABLE
|
|
|
|
|
2009-03-04 04:28:42 +01:00
|
|
|
# -----------------------------------------------------------------
|
2014-11-05 06:17:06 +01:00
|
|
|
# bring in the installer image generation defines if necessary
|
|
|
|
ifeq ($(TARGET_USE_DISKINSTALLER),true)
|
|
|
|
include bootable/diskinstaller/config.mk
|
|
|
|
endif
|
|
|
|
|
2009-03-04 04:28:42 +01:00
|
|
|
# -----------------------------------------------------------------
|
2012-04-19 22:54:39 +02:00
|
|
|
# host tools needed to build dist and OTA packages
|
2009-06-15 23:30:14 +02:00
|
|
|
|
2015-09-22 20:17:52 +02:00
|
|
|
build_ota_package := true
|
|
|
|
ifeq ($(TARGET_SKIP_OTA_PACKAGE),true)
|
|
|
|
build_ota_package := false
|
|
|
|
endif
|
|
|
|
ifeq ($(BUILD_OS),darwin)
|
|
|
|
build_ota_package := false
|
|
|
|
endif
|
|
|
|
ifneq ($(strip $(SANITIZE_TARGET)),)
|
|
|
|
build_ota_package := false
|
|
|
|
endif
|
|
|
|
ifeq ($(TARGET_PRODUCT),sdk)
|
|
|
|
build_ota_package := false
|
|
|
|
endif
|
|
|
|
ifneq ($(filter generic%,$(TARGET_DEVICE)),)
|
|
|
|
build_ota_package := false
|
|
|
|
endif
|
|
|
|
ifeq ($(TARGET_NO_KERNEL),true)
|
|
|
|
build_ota_package := false
|
|
|
|
endif
|
|
|
|
ifeq ($(recovery_fstab),)
|
|
|
|
build_ota_package := false
|
|
|
|
endif
|
2016-02-05 00:09:23 +01:00
|
|
|
ifeq ($(TARGET_BUILD_PDK),true)
|
|
|
|
build_ota_package := false
|
|
|
|
endif
|
2015-09-22 20:17:52 +02:00
|
|
|
|
|
|
|
ifeq ($(build_ota_package),true)
|
2015-08-11 20:24:19 +02:00
|
|
|
OTATOOLS := $(HOST_OUT_EXECUTABLES)/minigzip \
|
|
|
|
$(HOST_OUT_EXECUTABLES)/aapt \
|
2015-04-08 21:24:37 +02:00
|
|
|
$(HOST_OUT_EXECUTABLES)/mkbootfs \
|
|
|
|
$(HOST_OUT_EXECUTABLES)/mkbootimg \
|
|
|
|
$(HOST_OUT_EXECUTABLES)/fs_config \
|
|
|
|
$(HOST_OUT_EXECUTABLES)/zipalign \
|
|
|
|
$(HOST_OUT_EXECUTABLES)/bsdiff \
|
|
|
|
$(HOST_OUT_EXECUTABLES)/imgdiff \
|
|
|
|
$(HOST_OUT_JAVA_LIBRARIES)/dumpkey.jar \
|
|
|
|
$(HOST_OUT_JAVA_LIBRARIES)/signapk.jar \
|
|
|
|
$(HOST_OUT_JAVA_LIBRARIES)/BootSignature.jar \
|
2017-05-17 20:41:50 +02:00
|
|
|
$(HOST_OUT_JAVA_LIBRARIES)/VeritySigner.jar \
|
2017-01-06 23:24:18 +01:00
|
|
|
$(HOST_OUT_EXECUTABLES)/make_ext4fs \
|
|
|
|
$(HOST_OUT_EXECUTABLES)/mkuserimg.sh \
|
|
|
|
$(HOST_OUT_EXECUTABLES)/mke2fs \
|
|
|
|
$(HOST_OUT_EXECUTABLES)/mkuserimg_mke2fs.sh \
|
|
|
|
$(HOST_OUT_EXECUTABLES)/e2fsdroid \
|
2016-04-14 21:11:36 +02:00
|
|
|
$(HOST_OUT_EXECUTABLES)/mksquashfsimage.sh \
|
|
|
|
$(HOST_OUT_EXECUTABLES)/mksquashfs \
|
|
|
|
$(HOST_OUT_EXECUTABLES)/mkf2fsuserimg.sh \
|
|
|
|
$(HOST_OUT_EXECUTABLES)/make_f2fs \
|
2015-04-08 21:24:37 +02:00
|
|
|
$(HOST_OUT_EXECUTABLES)/simg2img \
|
|
|
|
$(HOST_OUT_EXECUTABLES)/e2fsck \
|
|
|
|
$(HOST_OUT_EXECUTABLES)/build_verity_tree \
|
|
|
|
$(HOST_OUT_EXECUTABLES)/verity_signer \
|
2016-11-19 02:04:24 +01:00
|
|
|
$(HOST_OUT_EXECUTABLES)/verity_verifier \
|
2015-04-08 21:24:37 +02:00
|
|
|
$(HOST_OUT_EXECUTABLES)/append2simg \
|
2015-06-25 00:42:19 +02:00
|
|
|
$(HOST_OUT_EXECUTABLES)/img2simg \
|
2015-05-20 08:30:57 +02:00
|
|
|
$(HOST_OUT_EXECUTABLES)/boot_signer \
|
2016-01-04 18:57:32 +01:00
|
|
|
$(HOST_OUT_EXECUTABLES)/fec \
|
2016-01-19 23:47:17 +01:00
|
|
|
$(HOST_OUT_EXECUTABLES)/brillo_update_payload \
|
|
|
|
$(HOST_OUT_EXECUTABLES)/lib/shflags/shflags \
|
2016-03-30 00:12:37 +02:00
|
|
|
$(HOST_OUT_EXECUTABLES)/delta_generator \
|
2017-05-17 01:27:25 +02:00
|
|
|
$(AVBTOOL) \
|
2017-07-07 00:13:59 +02:00
|
|
|
$(BLK_ALLOC_TO_BASE_FS) \
|
|
|
|
$(BRO)
|
2017-02-23 01:38:19 +01:00
|
|
|
|
|
|
|
ifeq (true,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VBOOT))
|
|
|
|
OTATOOLS += \
|
2017-02-23 20:03:45 +01:00
|
|
|
$(FUTILITY) \
|
|
|
|
$(VBOOT_SIGNER)
|
2017-02-23 01:38:19 +01:00
|
|
|
endif
|
2016-01-04 18:57:32 +01:00
|
|
|
|
2015-04-08 21:24:37 +02:00
|
|
|
# Shared libraries.
|
2015-08-11 20:24:19 +02:00
|
|
|
OTATOOLS += \
|
2015-04-13 18:01:24 +02:00
|
|
|
$(HOST_LIBRARY_PATH)/libc++$(HOST_SHLIB_SUFFIX) \
|
|
|
|
$(HOST_LIBRARY_PATH)/liblog$(HOST_SHLIB_SUFFIX) \
|
|
|
|
$(HOST_LIBRARY_PATH)/libcutils$(HOST_SHLIB_SUFFIX) \
|
2015-06-03 08:35:52 +02:00
|
|
|
$(HOST_LIBRARY_PATH)/libselinux$(HOST_SHLIB_SUFFIX) \
|
|
|
|
$(HOST_LIBRARY_PATH)/libcrypto-host$(HOST_SHLIB_SUFFIX) \
|
2015-12-10 03:02:56 +01:00
|
|
|
$(HOST_LIBRARY_PATH)/libext2fs-host$(HOST_SHLIB_SUFFIX) \
|
|
|
|
$(HOST_LIBRARY_PATH)/libext2_blkid-host$(HOST_SHLIB_SUFFIX) \
|
|
|
|
$(HOST_LIBRARY_PATH)/libext2_com_err-host$(HOST_SHLIB_SUFFIX) \
|
|
|
|
$(HOST_LIBRARY_PATH)/libext2_e2p-host$(HOST_SHLIB_SUFFIX) \
|
2017-01-30 21:41:31 +01:00
|
|
|
$(HOST_LIBRARY_PATH)/libext2_misc$(HOST_SHLIB_SUFFIX) \
|
2015-12-10 03:02:56 +01:00
|
|
|
$(HOST_LIBRARY_PATH)/libext2_profile-host$(HOST_SHLIB_SUFFIX) \
|
|
|
|
$(HOST_LIBRARY_PATH)/libext2_quota-host$(HOST_SHLIB_SUFFIX) \
|
2015-12-10 22:38:50 +01:00
|
|
|
$(HOST_LIBRARY_PATH)/libext2_uuid-host$(HOST_SHLIB_SUFFIX) \
|
2016-01-04 18:57:32 +01:00
|
|
|
$(HOST_LIBRARY_PATH)/libconscrypt_openjdk_jni$(HOST_SHLIB_SUFFIX) \
|
|
|
|
$(HOST_LIBRARY_PATH)/libbrillo$(HOST_SHLIB_SUFFIX) \
|
|
|
|
$(HOST_LIBRARY_PATH)/libbrillo-stream$(HOST_SHLIB_SUFFIX) \
|
|
|
|
$(HOST_LIBRARY_PATH)/libchrome$(HOST_SHLIB_SUFFIX) \
|
|
|
|
$(HOST_LIBRARY_PATH)/libcurl-host$(HOST_SHLIB_SUFFIX) \
|
2016-07-23 01:16:30 +02:00
|
|
|
$(HOST_LIBRARY_PATH)/libevent-host$(HOST_SHLIB_SUFFIX) \
|
2016-02-11 18:50:41 +01:00
|
|
|
$(HOST_LIBRARY_PATH)/libprotobuf-cpp-lite$(HOST_SHLIB_SUFFIX) \
|
2016-01-04 18:57:32 +01:00
|
|
|
$(HOST_LIBRARY_PATH)/libssl-host$(HOST_SHLIB_SUFFIX) \
|
2016-03-24 13:57:03 +01:00
|
|
|
$(HOST_LIBRARY_PATH)/libz-host$(HOST_SHLIB_SUFFIX) \
|
2017-01-26 17:16:57 +01:00
|
|
|
$(HOST_LIBRARY_PATH)/libsparse-host$(HOST_SHLIB_SUFFIX) \
|
2016-12-16 16:33:03 +01:00
|
|
|
$(HOST_LIBRARY_PATH)/libbase$(HOST_SHLIB_SUFFIX) \
|
2017-07-07 00:13:59 +02:00
|
|
|
$(HOST_LIBRARY_PATH)/libpcre2$(HOST_SHLIB_SUFFIX) \
|
|
|
|
$(HOST_LIBRARY_PATH)/libbrotli$(HOST_SHLIB_SUFFIX)
|
|
|
|
|
2009-03-04 04:28:42 +01:00
|
|
|
|
2010-06-18 02:52:18 +02:00
|
|
|
.PHONY: otatools
|
|
|
|
otatools: $(OTATOOLS)
|
|
|
|
|
2014-08-22 17:04:58 +02:00
|
|
|
BUILT_OTATOOLS_PACKAGE := $(PRODUCT_OUT)/otatools.zip
|
2015-04-09 01:37:34 +02:00
|
|
|
$(BUILT_OTATOOLS_PACKAGE): zip_root := $(call intermediates-dir-for,PACKAGING,otatools)/otatools
|
2014-08-22 17:04:58 +02:00
|
|
|
|
2017-05-17 20:41:50 +02:00
|
|
|
OTATOOLS_DEPS := \
|
|
|
|
system/extras/verity/build_verity_metadata.py \
|
|
|
|
system/extras/ext4_utils/mke2fs.conf \
|
2017-05-17 01:27:25 +02:00
|
|
|
external/avb/test/data/testkey_rsa4096.pem \
|
2017-09-01 01:36:32 +02:00
|
|
|
$(shell find system/update_engine/scripts -name \*.pyc -prune -o -type f -print | sort) \
|
2017-05-17 20:41:50 +02:00
|
|
|
$(shell find build/target/product/security -type f -name \*.x509.pem -o -name \*.pk8 -o \
|
|
|
|
-name verity_key | sort) \
|
|
|
|
$(shell find device vendor -type f -name \*.pk8 -o -name verifiedboot\* -o \
|
|
|
|
-name \*.x509.pem -o -name oem\*.prop | sort)
|
|
|
|
|
|
|
|
OTATOOLS_RELEASETOOLS := \
|
|
|
|
$(shell find build/tools/releasetools -name \*.pyc -prune -o -type f | sort)
|
|
|
|
|
|
|
|
ifeq (true,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VBOOT))
|
|
|
|
OTATOOLS_DEPS += \
|
|
|
|
$(shell find external/vboot_reference/tests/devkeys -type f | sort)
|
|
|
|
endif
|
|
|
|
|
|
|
|
$(BUILT_OTATOOLS_PACKAGE): $(OTATOOLS) $(OTATOOLS_DEPS) $(OTATOOLS_RELEASETOOLS) | $(ACP)
|
2014-08-22 17:04:58 +02:00
|
|
|
@echo "Package OTA tools: $@"
|
|
|
|
$(hide) rm -rf $@ $(zip_root)
|
2017-05-17 20:41:50 +02:00
|
|
|
$(hide) mkdir -p $(dir $@) $(zip_root)/bin $(zip_root)/framework $(zip_root)/releasetools
|
2015-04-08 21:24:37 +02:00
|
|
|
$(call copy-files-with-structure,$(OTATOOLS),$(HOST_OUT)/,$(zip_root))
|
2014-08-22 17:04:58 +02:00
|
|
|
$(hide) $(ACP) -r -d -p build/tools/releasetools/* $(zip_root)/releasetools
|
|
|
|
$(hide) rm -rf $@ $(zip_root)/releasetools/*.pyc
|
2015-10-30 00:33:05 +01:00
|
|
|
$(hide) (cd $(zip_root) && zip -qryX $(abspath $@) *)
|
2017-05-17 20:41:50 +02:00
|
|
|
$(hide) echo $(OTATOOLS_DEPS) | xargs zip -qryX $(abspath $@)>/dev/null || true
|
2014-08-22 17:04:58 +02:00
|
|
|
|
|
|
|
.PHONY: otatools-package
|
|
|
|
otatools-package: $(BUILT_OTATOOLS_PACKAGE)
|
|
|
|
|
2015-09-22 20:17:52 +02:00
|
|
|
endif # build_ota_package
|
2014-08-22 17:04:58 +02:00
|
|
|
|
2009-03-04 04:28:42 +01:00
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# A zip of the directories that map to the target filesystem.
|
|
|
|
# This zip can be used to create an OTA package or filesystem image
|
|
|
|
# as a post-build step.
|
|
|
|
#
|
|
|
|
name := $(TARGET_PRODUCT)
|
|
|
|
ifeq ($(TARGET_BUILD_TYPE),debug)
|
|
|
|
name := $(name)_debug
|
|
|
|
endif
|
|
|
|
name := $(name)-target_files-$(FILE_NAME_TAG)
|
|
|
|
|
|
|
|
intermediates := $(call intermediates-dir-for,PACKAGING,target_files)
|
|
|
|
BUILT_TARGET_FILES_PACKAGE := $(intermediates)/$(name).zip
|
|
|
|
$(BUILT_TARGET_FILES_PACKAGE): intermediates := $(intermediates)
|
|
|
|
$(BUILT_TARGET_FILES_PACKAGE): \
|
|
|
|
zip_root := $(intermediates)/$(name)
|
|
|
|
|
|
|
|
# $(1): Directory to copy
|
|
|
|
# $(2): Location to copy it to
|
|
|
|
# The "ls -A" is to prevent "acp s/* d" from failing if s is empty.
|
|
|
|
define package_files-copy-root
|
|
|
|
if [ -d "$(strip $(1))" -a "$$(ls -A $(1))" ]; then \
|
|
|
|
mkdir -p $(2) && \
|
|
|
|
$(ACP) -rd $(strip $(1))/* $(2); \
|
|
|
|
fi
|
|
|
|
endef
|
|
|
|
|
2015-11-30 21:22:24 +01:00
|
|
|
built_ota_tools :=
|
2015-06-23 03:35:35 +02:00
|
|
|
|
|
|
|
# We can't build static executables when SANITIZE_TARGET=address
|
2015-09-18 20:54:43 +02:00
|
|
|
ifeq ($(strip $(SANITIZE_TARGET)),)
|
2015-06-23 03:35:35 +02:00
|
|
|
built_ota_tools += \
|
|
|
|
$(call intermediates-dir-for,EXECUTABLES,updater,,,$(TARGET_PREFER_32_BIT))/updater
|
|
|
|
endif
|
|
|
|
|
2009-03-04 04:28:42 +01:00
|
|
|
$(BUILT_TARGET_FILES_PACKAGE): PRIVATE_OTA_TOOLS := $(built_ota_tools)
|
|
|
|
|
2009-06-18 02:09:40 +02:00
|
|
|
$(BUILT_TARGET_FILES_PACKAGE): PRIVATE_RECOVERY_API_VERSION := $(RECOVERY_API_VERSION)
|
2013-02-22 01:27:25 +01:00
|
|
|
$(BUILT_TARGET_FILES_PACKAGE): PRIVATE_RECOVERY_FSTAB_VERSION := $(RECOVERY_FSTAB_VERSION)
|
2009-06-18 02:09:40 +02:00
|
|
|
|
2009-09-30 18:20:32 +02:00
|
|
|
ifeq ($(TARGET_RELEASETOOLS_EXTENSIONS),)
|
|
|
|
# default to common dir for device vendor
|
2017-03-21 23:47:37 +01:00
|
|
|
tool_extensions := $(TARGET_DEVICE_DIR)/../common
|
2009-09-30 18:20:32 +02:00
|
|
|
else
|
2017-03-21 23:47:37 +01:00
|
|
|
tool_extensions := $(TARGET_RELEASETOOLS_EXTENSIONS)
|
2009-09-30 18:20:32 +02:00
|
|
|
endif
|
2017-03-21 23:47:37 +01:00
|
|
|
tool_extension := $(wildcard $(tool_extensions)/releasetools.py)
|
|
|
|
$(BUILT_TARGET_FILES_PACKAGE): PRIVATE_TOOL_EXTENSIONS := $(tool_extensions)
|
|
|
|
$(BUILT_TARGET_FILES_PACKAGE): PRIVATE_TOOL_EXTENSION := $(tool_extension)
|
2009-09-30 18:20:32 +02:00
|
|
|
|
2016-03-08 01:51:01 +01:00
|
|
|
ifeq ($(AB_OTA_UPDATER),true)
|
|
|
|
# Build zlib fingerprint if using the AB Updater.
|
2016-05-10 09:40:38 +02:00
|
|
|
updater_dep := $(TARGET_OUT_COMMON_GEN)/zlib_fingerprint
|
2017-03-21 23:47:37 +01:00
|
|
|
updater_dep += system/update_engine/update_engine.conf
|
2016-03-08 01:51:01 +01:00
|
|
|
else
|
2015-10-02 08:53:31 +02:00
|
|
|
# Build OTA tools if not using the AB Updater.
|
2016-05-10 09:40:38 +02:00
|
|
|
updater_dep := $(built_ota_tools)
|
2015-10-02 08:53:31 +02:00
|
|
|
endif
|
2016-05-10 09:40:38 +02:00
|
|
|
$(BUILT_TARGET_FILES_PACKAGE): $(updater_dep)
|
2015-10-02 08:53:31 +02:00
|
|
|
|
2015-11-11 04:21:34 +01:00
|
|
|
# If we are using recovery as boot, output recovery files to BOOT/.
|
|
|
|
ifeq ($(BOARD_USES_RECOVERY_AS_BOOT),true)
|
|
|
|
$(BUILT_TARGET_FILES_PACKAGE): PRIVATE_RECOVERY_OUT := BOOT
|
|
|
|
else
|
|
|
|
$(BUILT_TARGET_FILES_PACKAGE): PRIVATE_RECOVERY_OUT := RECOVERY
|
|
|
|
endif
|
|
|
|
|
2017-03-21 23:47:37 +01:00
|
|
|
ifeq ($(AB_OTA_UPDATER),true)
|
|
|
|
ifdef BRILLO_VENDOR_PARTITIONS
|
|
|
|
$(BUILT_TARGET_FILES_PACKAGE): $(foreach p,$(BRILLO_VENDOR_PARTITIONS),\
|
|
|
|
$(call word-colon,1,$(p))/$(call word-colon,2,$(p)))
|
|
|
|
endif
|
|
|
|
ifdef OSRELEASED_DIRECTORY
|
|
|
|
$(BUILT_TARGET_FILES_PACKAGE): $(TARGET_OUT_OEM)/$(OSRELEASED_DIRECTORY)/product_id
|
|
|
|
$(BUILT_TARGET_FILES_PACKAGE): $(TARGET_OUT_OEM)/$(OSRELEASED_DIRECTORY)/product_version
|
|
|
|
$(BUILT_TARGET_FILES_PACKAGE): $(TARGET_OUT_ETC)/$(OSRELEASED_DIRECTORY)/system_version
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
2017-03-06 04:56:52 +01:00
|
|
|
# Run fs_config while creating the target files package
|
|
|
|
# $1: root directory
|
|
|
|
# $2: add prefix
|
|
|
|
define fs_config
|
|
|
|
(cd $(1); find . -type d | sed 's,$$,/,'; find . \! -type d) | cut -c 3- | sort | sed 's,^,$(2),' | $(HOST_OUT_EXECUTABLES)/fs_config -C -D $(TARGET_OUT) -S $(SELINUX_FC)
|
|
|
|
endef
|
|
|
|
|
2009-03-04 04:28:42 +01:00
|
|
|
# Depending on the various images guarantees that the underlying
|
|
|
|
# directories are up-to-date.
|
|
|
|
$(BUILT_TARGET_FILES_PACKAGE): \
|
|
|
|
$(INSTALLED_BOOTIMAGE_TARGET) \
|
|
|
|
$(INSTALLED_RADIOIMAGE_TARGET) \
|
|
|
|
$(INSTALLED_RECOVERYIMAGE_TARGET) \
|
2017-03-22 00:01:02 +01:00
|
|
|
$(FULL_SYSTEMIMAGE_DEPS) \
|
2009-03-04 04:28:42 +01:00
|
|
|
$(INSTALLED_USERDATAIMAGE_TARGET) \
|
2011-11-04 19:37:01 +01:00
|
|
|
$(INSTALLED_CACHEIMAGE_TARGET) \
|
2013-03-20 19:02:05 +01:00
|
|
|
$(INSTALLED_VENDORIMAGE_TARGET) \
|
2017-04-27 09:34:50 +02:00
|
|
|
$(INSTALLED_DTBOIMAGE_TARGET) \
|
2017-03-22 00:01:02 +01:00
|
|
|
$(INTERNAL_SYSTEMOTHERIMAGE_FILES) \
|
2009-03-04 04:28:42 +01:00
|
|
|
$(INSTALLED_ANDROID_INFO_TXT_TARGET) \
|
2017-03-21 23:47:37 +01:00
|
|
|
$(INSTALLED_KERNEL_TARGET) \
|
|
|
|
$(INSTALLED_2NDBOOTLOADER_TARGET) \
|
|
|
|
$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SYSTEM_BASE_FS_PATH) \
|
|
|
|
$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VENDOR_BASE_FS_PATH) \
|
2013-09-08 02:10:29 +02:00
|
|
|
$(SELINUX_FC) \
|
2009-03-04 04:28:42 +01:00
|
|
|
$(APKCERTS_FILE) \
|
2016-08-07 05:15:06 +02:00
|
|
|
$(SOONG_ZIP) \
|
2010-03-16 01:52:32 +01:00
|
|
|
$(HOST_OUT_EXECUTABLES)/fs_config \
|
2017-03-24 06:09:06 +01:00
|
|
|
$(HOST_OUT_EXECUTABLES)/imgdiff \
|
|
|
|
$(HOST_OUT_EXECUTABLES)/bsdiff \
|
2017-03-22 00:01:02 +01:00
|
|
|
$(BUILD_IMAGE_SRCS) \
|
2017-04-04 22:01:18 +02:00
|
|
|
$(INSTALLED_VENDOR_MANIFEST) \
|
|
|
|
$(INSTALLED_VENDOR_MATRIX) \
|
2015-11-04 19:06:25 +01:00
|
|
|
| $(ACP)
|
2009-03-04 04:28:42 +01:00
|
|
|
@echo "Package target files: $@"
|
2017-03-23 21:09:21 +01:00
|
|
|
$(call create-system-vendor-symlink)
|
2016-08-07 05:15:06 +02:00
|
|
|
$(hide) rm -rf $@ $@.list $(zip_root)
|
2009-03-04 04:28:42 +01:00
|
|
|
$(hide) mkdir -p $(dir $@) $(zip_root)
|
2015-11-11 04:21:34 +01:00
|
|
|
ifneq (,$(INSTALLED_RECOVERYIMAGE_TARGET)$(filter true,$(BOARD_USES_RECOVERY_AS_BOOT)))
|
2009-03-04 04:28:42 +01:00
|
|
|
@# Components of the recovery image
|
2015-11-11 04:21:34 +01:00
|
|
|
$(hide) mkdir -p $(zip_root)/$(PRIVATE_RECOVERY_OUT)
|
2009-03-04 04:28:42 +01:00
|
|
|
$(hide) $(call package_files-copy-root, \
|
2015-11-11 04:21:34 +01:00
|
|
|
$(TARGET_RECOVERY_ROOT_OUT),$(zip_root)/$(PRIVATE_RECOVERY_OUT)/RAMDISK)
|
2009-03-04 04:28:42 +01:00
|
|
|
ifdef INSTALLED_KERNEL_TARGET
|
2017-03-21 23:47:37 +01:00
|
|
|
$(hide) cp $(INSTALLED_KERNEL_TARGET) $(zip_root)/$(PRIVATE_RECOVERY_OUT)/kernel
|
2009-03-04 04:28:42 +01:00
|
|
|
endif
|
|
|
|
ifdef INSTALLED_2NDBOOTLOADER_TARGET
|
2017-03-21 23:47:37 +01:00
|
|
|
$(hide) cp $(INSTALLED_2NDBOOTLOADER_TARGET) $(zip_root)/$(PRIVATE_RECOVERY_OUT)/second
|
2009-03-04 04:28:42 +01:00
|
|
|
endif
|
2016-10-06 01:57:27 +02:00
|
|
|
ifdef INTERNAL_KERNEL_CMDLINE
|
|
|
|
$(hide) echo "$(INTERNAL_KERNEL_CMDLINE)" > $(zip_root)/$(PRIVATE_RECOVERY_OUT)/cmdline
|
2009-06-17 18:07:09 +02:00
|
|
|
endif
|
|
|
|
ifdef BOARD_KERNEL_BASE
|
2015-11-11 04:21:34 +01:00
|
|
|
$(hide) echo "$(BOARD_KERNEL_BASE)" > $(zip_root)/$(PRIVATE_RECOVERY_OUT)/base
|
2010-08-25 23:29:34 +02:00
|
|
|
endif
|
|
|
|
ifdef BOARD_KERNEL_PAGESIZE
|
2015-11-11 04:21:34 +01:00
|
|
|
$(hide) echo "$(BOARD_KERNEL_PAGESIZE)" > $(zip_root)/$(PRIVATE_RECOVERY_OUT)/pagesize
|
2009-03-04 04:28:42 +01:00
|
|
|
endif
|
2015-11-11 04:21:34 +01:00
|
|
|
endif # INSTALLED_RECOVERYIMAGE_TARGET defined or BOARD_USES_RECOVERY_AS_BOOT is true
|
2009-03-04 04:28:42 +01:00
|
|
|
@# Components of the boot image
|
|
|
|
$(hide) mkdir -p $(zip_root)/BOOT
|
2015-07-22 03:01:20 +02:00
|
|
|
ifeq ($(BOARD_BUILD_SYSTEM_ROOT_IMAGE),true)
|
|
|
|
$(hide) mkdir -p $(zip_root)/ROOT
|
|
|
|
$(hide) $(call package_files-copy-root, \
|
|
|
|
$(TARGET_ROOT_OUT),$(zip_root)/ROOT)
|
|
|
|
else
|
2009-03-04 04:28:42 +01:00
|
|
|
$(hide) $(call package_files-copy-root, \
|
|
|
|
$(TARGET_ROOT_OUT),$(zip_root)/BOOT/RAMDISK)
|
2015-07-22 03:01:20 +02:00
|
|
|
endif
|
2015-11-11 04:21:34 +01:00
|
|
|
@# If we are using recovery as boot, this is already done when processing recovery.
|
|
|
|
ifneq ($(BOARD_USES_RECOVERY_AS_BOOT),true)
|
2009-03-04 04:28:42 +01:00
|
|
|
ifdef INSTALLED_KERNEL_TARGET
|
2017-03-21 23:47:37 +01:00
|
|
|
$(hide) cp $(INSTALLED_KERNEL_TARGET) $(zip_root)/BOOT/kernel
|
2009-03-04 04:28:42 +01:00
|
|
|
endif
|
|
|
|
ifdef INSTALLED_2NDBOOTLOADER_TARGET
|
2017-03-21 23:47:37 +01:00
|
|
|
$(hide) cp $(INSTALLED_2NDBOOTLOADER_TARGET) $(zip_root)/BOOT/second
|
2009-03-04 04:28:42 +01:00
|
|
|
endif
|
2016-10-06 01:57:27 +02:00
|
|
|
ifdef INTERNAL_KERNEL_CMDLINE
|
|
|
|
$(hide) echo "$(INTERNAL_KERNEL_CMDLINE)" > $(zip_root)/BOOT/cmdline
|
2009-03-04 04:28:42 +01:00
|
|
|
endif
|
2009-06-17 18:07:09 +02:00
|
|
|
ifdef BOARD_KERNEL_BASE
|
|
|
|
$(hide) echo "$(BOARD_KERNEL_BASE)" > $(zip_root)/BOOT/base
|
2010-08-25 23:29:34 +02:00
|
|
|
endif
|
|
|
|
ifdef BOARD_KERNEL_PAGESIZE
|
|
|
|
$(hide) echo "$(BOARD_KERNEL_PAGESIZE)" > $(zip_root)/BOOT/pagesize
|
2009-06-17 18:07:09 +02:00
|
|
|
endif
|
2015-11-11 04:21:34 +01:00
|
|
|
endif # BOARD_USES_RECOVERY_AS_BOOT
|
2009-06-20 02:12:18 +02:00
|
|
|
$(hide) $(foreach t,$(INSTALLED_RADIOIMAGE_TARGET),\
|
|
|
|
mkdir -p $(zip_root)/RADIO; \
|
2017-03-21 23:47:37 +01:00
|
|
|
cp $(t) $(zip_root)/RADIO/$(notdir $(t));)
|
2009-03-04 04:28:42 +01:00
|
|
|
@# Contents of the system image
|
|
|
|
$(hide) $(call package_files-copy-root, \
|
|
|
|
$(SYSTEMIMAGE_SOURCE_DIR),$(zip_root)/SYSTEM)
|
|
|
|
@# Contents of the data image
|
|
|
|
$(hide) $(call package_files-copy-root, \
|
|
|
|
$(TARGET_OUT_DATA),$(zip_root)/DATA)
|
2013-03-20 19:02:05 +01:00
|
|
|
ifdef BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE
|
|
|
|
@# Contents of the vendor image
|
|
|
|
$(hide) $(call package_files-copy-root, \
|
|
|
|
$(TARGET_OUT_VENDOR),$(zip_root)/VENDOR)
|
2016-06-16 23:47:10 +02:00
|
|
|
endif
|
|
|
|
ifdef INSTALLED_SYSTEMOTHERIMAGE_TARGET
|
|
|
|
@# Contents of the system_other image
|
|
|
|
$(hide) $(call package_files-copy-root, \
|
|
|
|
$(TARGET_OUT_SYSTEM_OTHER),$(zip_root)/SYSTEM_OTHER)
|
2013-03-20 19:02:05 +01:00
|
|
|
endif
|
2009-03-04 04:28:42 +01:00
|
|
|
@# Extra contents of the OTA package
|
2015-10-02 08:53:31 +02:00
|
|
|
$(hide) mkdir -p $(zip_root)/OTA
|
2017-03-21 23:47:37 +01:00
|
|
|
$(hide) cp $(INSTALLED_ANDROID_INFO_TXT_TARGET) $(zip_root)/OTA/
|
2015-10-02 08:53:31 +02:00
|
|
|
ifneq ($(AB_OTA_UPDATER),true)
|
2015-12-07 19:45:19 +01:00
|
|
|
ifneq ($(built_ota_tools),)
|
2015-10-02 08:53:31 +02:00
|
|
|
$(hide) mkdir -p $(zip_root)/OTA/bin
|
2017-03-21 23:47:37 +01:00
|
|
|
$(hide) cp $(PRIVATE_OTA_TOOLS) $(zip_root)/OTA/bin/
|
2015-12-07 19:45:19 +01:00
|
|
|
endif
|
2015-10-02 08:53:31 +02:00
|
|
|
endif
|
2009-06-15 23:30:14 +02:00
|
|
|
@# Files that do not end up in any images, but are necessary to
|
2009-03-04 04:28:42 +01:00
|
|
|
@# build them.
|
|
|
|
$(hide) mkdir -p $(zip_root)/META
|
2017-03-21 23:47:37 +01:00
|
|
|
$(hide) cp $(APKCERTS_FILE) $(zip_root)/META/apkcerts.txt
|
|
|
|
ifneq ($(tool_extension),)
|
|
|
|
$(hide) cp $(PRIVATE_TOOL_EXTENSION) $(zip_root)/META/
|
|
|
|
endif
|
2015-03-25 03:07:40 +01:00
|
|
|
$(hide) echo "$(PRODUCT_OTA_PUBLIC_KEYS)" > $(zip_root)/META/otakeys.txt
|
2017-03-21 23:47:37 +01:00
|
|
|
$(hide) cp $(SELINUX_FC) $(zip_root)/META/file_contexts.bin
|
2010-09-17 02:44:38 +02:00
|
|
|
$(hide) echo "recovery_api_version=$(PRIVATE_RECOVERY_API_VERSION)" > $(zip_root)/META/misc_info.txt
|
2013-02-22 01:27:25 +01:00
|
|
|
$(hide) echo "fstab_version=$(PRIVATE_RECOVERY_FSTAB_VERSION)" >> $(zip_root)/META/misc_info.txt
|
2010-07-02 00:30:11 +02:00
|
|
|
ifdef BOARD_FLASH_BLOCK_SIZE
|
2010-09-17 02:44:38 +02:00
|
|
|
$(hide) echo "blocksize=$(BOARD_FLASH_BLOCK_SIZE)" >> $(zip_root)/META/misc_info.txt
|
2010-07-02 00:30:11 +02:00
|
|
|
endif
|
|
|
|
ifdef BOARD_BOOTIMAGE_PARTITION_SIZE
|
2011-01-14 20:30:56 +01:00
|
|
|
$(hide) echo "boot_size=$(BOARD_BOOTIMAGE_PARTITION_SIZE)" >> $(zip_root)/META/misc_info.txt
|
2010-07-02 00:30:11 +02:00
|
|
|
endif
|
2015-11-11 04:21:34 +01:00
|
|
|
ifeq ($(BOARD_USES_RECOVERY_AS_BOOT),)
|
|
|
|
$(hide) echo "recovery_as_boot=$(BOARD_USES_RECOVERY_AS_BOOT)" >> $(zip_root)/META/misc_info.txt
|
|
|
|
endif
|
2015-10-28 03:25:18 +01:00
|
|
|
ifeq ($(INSTALLED_RECOVERYIMAGE_TARGET),)
|
|
|
|
$(hide) echo "no_recovery=true" >> $(zip_root)/META/misc_info.txt
|
|
|
|
endif
|
2010-07-02 00:30:11 +02:00
|
|
|
ifdef BOARD_RECOVERYIMAGE_PARTITION_SIZE
|
2011-01-14 20:30:56 +01:00
|
|
|
$(hide) echo "recovery_size=$(BOARD_RECOVERYIMAGE_PARTITION_SIZE)" >> $(zip_root)/META/misc_info.txt
|
2014-10-23 05:01:22 +02:00
|
|
|
endif
|
2015-06-23 20:16:05 +02:00
|
|
|
ifdef BOARD_HAS_EXT4_RESERVED_BLOCKS
|
|
|
|
$(hide) echo "has_ext4_reserved_blocks=$(BOARD_HAS_EXT4_RESERVED_BLOCKS)" >> $(zip_root)/META/misc_info.txt
|
|
|
|
endif
|
2014-10-23 05:01:22 +02:00
|
|
|
ifdef TARGET_RECOVERY_FSTYPE_MOUNT_OPTIONS
|
|
|
|
@# TARGET_RECOVERY_FSTYPE_MOUNT_OPTIONS can be empty to indicate that nothing but defaults should be used.
|
|
|
|
$(hide) echo "recovery_mount_options=$(TARGET_RECOVERY_FSTYPE_MOUNT_OPTIONS)" >> $(zip_root)/META/misc_info.txt
|
|
|
|
else
|
|
|
|
$(hide) echo "recovery_mount_options=$(DEFAULT_TARGET_RECOVERY_FSTYPE_MOUNT_OPTIONS)" >> $(zip_root)/META/misc_info.txt
|
2010-07-02 00:30:11 +02:00
|
|
|
endif
|
2017-03-21 23:47:37 +01:00
|
|
|
$(hide) echo "tool_extensions=$(PRIVATE_TOOL_EXTENSIONS)" >> $(zip_root)/META/misc_info.txt
|
2011-10-04 19:50:08 +02:00
|
|
|
$(hide) echo "default_system_dev_certificate=$(DEFAULT_SYSTEM_DEV_CERTIFICATE)" >> $(zip_root)/META/misc_info.txt
|
2011-03-16 15:49:13 +01:00
|
|
|
ifdef PRODUCT_EXTRA_RECOVERY_KEYS
|
|
|
|
$(hide) echo "extra_recovery_keys=$(PRODUCT_EXTRA_RECOVERY_KEYS)" >> $(zip_root)/META/misc_info.txt
|
2010-08-26 05:39:41 +02:00
|
|
|
endif
|
2013-04-18 00:19:19 +02:00
|
|
|
$(hide) echo 'mkbootimg_args=$(BOARD_MKBOOTIMG_ARGS)' >> $(zip_root)/META/misc_info.txt
|
2016-03-15 17:49:30 +01:00
|
|
|
$(hide) echo 'mkbootimg_version_args=$(INTERNAL_MKBOOTIMG_VERSION_ARGS)' >> $(zip_root)/META/misc_info.txt
|
2013-11-25 23:44:12 +01:00
|
|
|
$(hide) echo "multistage_support=1" >> $(zip_root)/META/misc_info.txt
|
2017-03-01 23:36:26 +01:00
|
|
|
$(hide) echo "blockimgdiff_versions=3,4" >> $(zip_root)/META/misc_info.txt
|
2014-10-08 03:42:11 +02:00
|
|
|
ifneq ($(OEM_THUMBPRINT_PROPERTIES),)
|
2014-03-22 00:20:05 +01:00
|
|
|
# OTA scripts are only interested in fingerprint related properties
|
2014-10-08 03:42:11 +02:00
|
|
|
$(hide) echo "oem_fingerprint_properties=$(OEM_THUMBPRINT_PROPERTIES)" >> $(zip_root)/META/misc_info.txt
|
2015-06-25 22:56:53 +02:00
|
|
|
endif
|
2016-03-30 00:12:37 +02:00
|
|
|
ifneq ($(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SYSTEM_BASE_FS_PATH),)
|
2017-03-21 23:47:37 +01:00
|
|
|
$(hide) cp $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SYSTEM_BASE_FS_PATH) \
|
2016-03-30 00:12:37 +02:00
|
|
|
$(zip_root)/META/$(notdir $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SYSTEM_BASE_FS_PATH))
|
|
|
|
endif
|
|
|
|
ifneq ($(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VENDOR_BASE_FS_PATH),)
|
2017-03-21 23:47:37 +01:00
|
|
|
$(hide) cp $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VENDOR_BASE_FS_PATH) \
|
2016-03-30 00:12:37 +02:00
|
|
|
$(zip_root)/META/$(notdir $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VENDOR_BASE_FS_PATH))
|
|
|
|
endif
|
2015-09-18 20:54:43 +02:00
|
|
|
ifneq ($(strip $(SANITIZE_TARGET)),)
|
2015-06-25 22:56:53 +02:00
|
|
|
# We need to create userdata.img with real data because the instrumented libraries are in userdata.img.
|
|
|
|
$(hide) echo "userdata_img_with_data=true" >> $(zip_root)/META/misc_info.txt
|
2015-07-22 21:33:18 +02:00
|
|
|
endif
|
|
|
|
ifeq ($(BOARD_USES_FULL_RECOVERY_IMAGE),true)
|
|
|
|
$(hide) echo "full_recovery_image=true" >> $(zip_root)/META/misc_info.txt
|
2016-01-29 22:59:17 +01:00
|
|
|
endif
|
Update for new Android Verified Boot (AVB).
This updates the build system for the new Android Verified Boot
codebase. As this is based on Brillo Verified Boot, this change replaces
the existing BVB support.
Android Verified Boot is enabled by the BOARD_AVB_ENABLE variable
BOARD_AVB_ENABLE := true
This will make the build system create vbmeta.img which will contain a
hash descriptor for boot.img, a hashtree descriptor for system.img, a
kernel-cmdline descriptor for setting up dm-verity for system.img and
append a hash-tree to system.img.
Additionally, the descriptors are left in boot.img and system.img so a
third party can create their own vbmeta.img file linking - using the
option --chain_partition - to these images. If this is not needed
footers can be erased using the 'avbtool erase_footer' command. It's
also harmless to just leave them in the images.
By default, the algorithm SHA256_RSA4096 is used with a test key from
the AVB source directory. This can be overriden by the
BOARD_AVB_ALGORITHM and BOARD_AVB_KEY_PATH variables to use e.g. a
4096-bit RSA key and SHA-512:
BOARD_AVB_ALGORITHM := SHA512_RSA4096
BOARD_AVB_KEY_PATH := /path/to/rsa_key_4096bits.pem
To prevent rollback attacks, the rollback index should be increased on a
regular basis. The rollback index can be set with the
BOARD_AVB_ROLLBACK_INDEX variable:
BOARD_AVB_ROLLBACK_INDEX := 5
If this is not set, the rollback index defaults to 0.
The variable BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS can be used to specify
additional options passed to 'avbtool make_vbmeta_image'. Typical
options to be used here include '--prop', '--prop_from_file', and
'--chain_partition'.
The variable BOARD_AVBTOOL_BOOT_ADD_HASH_FOOTER_ARGS can be used to
specify additional options passed to 'avbtool add_hash_footer' for
boot.img. Typical options to be used here include '--hash_algorithm' and
'--salt'.
The variable BOARD_AVBTOOL_SYSTEM_ADD_HASHTREE_FOOTER_ARGS can be used
to specify additional options passed to 'avbtool add_hashtree_footer'
for systems.img. Typical options to be used here include
'--hash_algorithm', '--salt', and '--block_size'.
Bug: 31264226
Test: aosp_x86_64-eng 'm' and 'm dist' successful.
Change-Id: Ic9a61cfc65c148b12996e57f04da5432eef6b982
2016-09-28 23:55:27 +02:00
|
|
|
ifeq ($(BOARD_AVB_ENABLE),true)
|
2017-05-26 12:30:04 +02:00
|
|
|
$(hide) echo "avb_enable=true" >> $(zip_root)/META/misc_info.txt
|
|
|
|
$(hide) echo "avb_vbmeta_key_path=$(BOARD_AVB_KEY_PATH)" >> $(zip_root)/META/misc_info.txt
|
|
|
|
$(hide) echo "avb_vbmeta_algorithm=$(BOARD_AVB_ALGORITHM)" >> $(zip_root)/META/misc_info.txt
|
|
|
|
$(hide) echo "avb_vbmeta_args=$(BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS)" >> $(zip_root)/META/misc_info.txt
|
|
|
|
$(hide) echo "avb_boot_add_hash_footer_args=$(BOARD_AVB_BOOT_ADD_HASH_FOOTER_ARGS)" >> $(zip_root)/META/misc_info.txt
|
|
|
|
ifdef BOARD_AVB_BOOT_KEY_PATH
|
|
|
|
$(hide) echo "avb_boot_key_path=$(BOARD_AVB_BOOT_KEY_PATH)" >> $(zip_root)/META/misc_info.txt
|
|
|
|
$(hide) echo "avb_boot_algorithm=$(BOARD_AVB_BOOT_ALGORITHM)" >> $(zip_root)/META/misc_info.txt
|
|
|
|
$(hide) echo "avb_boot_rollback_index_location=$(BOARD_AVB_BOOT_ROLLBACK_INDEX_LOCATION)" >> $(zip_root)/META/misc_info.txt
|
|
|
|
endif # BOARD_AVB_BOOT_KEY_PATH
|
|
|
|
endif # BOARD_AVB_ENABLE
|
2016-04-08 21:08:03 +02:00
|
|
|
ifdef BOARD_BPT_INPUT_FILES
|
|
|
|
$(hide) echo "board_bpt_enable=true" >> $(zip_root)/META/misc_info.txt
|
|
|
|
$(hide) echo "board_bpt_make_table_args=$(BOARD_BPT_MAKE_TABLE_ARGS)" >> $(zip_root)/META/misc_info.txt
|
|
|
|
$(hide) echo "board_bpt_input_files=$(BOARD_BPT_INPUT_FILES)" >> $(zip_root)/META/misc_info.txt
|
|
|
|
endif
|
|
|
|
ifdef BOARD_BPT_DISK_SIZE
|
|
|
|
$(hide) echo "board_bpt_disk_size=$(BOARD_BPT_DISK_SIZE)" >> $(zip_root)/META/misc_info.txt
|
2014-03-22 00:20:05 +01:00
|
|
|
endif
|
2011-10-29 02:02:30 +02:00
|
|
|
$(call generate-userimage-prop-dictionary, $(zip_root)/META/misc_info.txt)
|
2015-08-19 03:03:56 +02:00
|
|
|
ifneq ($(INSTALLED_RECOVERYIMAGE_TARGET),)
|
2015-03-25 14:06:30 +01:00
|
|
|
$(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH MKBOOTIMG=$(MKBOOTIMG) \
|
2015-02-10 02:20:06 +01:00
|
|
|
./build/tools/releasetools/make_recovery_patch $(zip_root) $(zip_root)
|
2015-09-25 03:12:33 +02:00
|
|
|
endif
|
2015-09-30 04:05:37 +02:00
|
|
|
ifeq ($(AB_OTA_UPDATER),true)
|
|
|
|
@# When using the A/B updater, include the updater config files in the zip.
|
2017-03-21 23:47:37 +01:00
|
|
|
$(hide) cp $(TOPDIR)system/update_engine/update_engine.conf $(zip_root)/META/update_engine_config.txt
|
|
|
|
$(hide) cp $(TARGET_OUT_COMMON_GEN)/zlib_fingerprint $(zip_root)/META/zlib_fingerprint.txt
|
2015-10-23 03:15:27 +02:00
|
|
|
$(hide) for part in $(AB_OTA_PARTITIONS); do \
|
2015-10-02 02:38:09 +02:00
|
|
|
echo "$${part}" >> $(zip_root)/META/ab_partitions.txt; \
|
|
|
|
done
|
2015-11-12 22:53:25 +01:00
|
|
|
$(hide) for conf in $(AB_OTA_POSTINSTALL_CONFIG); do \
|
|
|
|
echo "$${conf}" >> $(zip_root)/META/postinstall_config.txt; \
|
|
|
|
done
|
2015-11-05 11:04:04 +01:00
|
|
|
@# Include the build type in META/misc_info.txt so the server can easily differentiate production builds.
|
|
|
|
$(hide) echo "build_type=$(TARGET_BUILD_VARIANT)" >> $(zip_root)/META/misc_info.txt
|
2015-11-11 04:21:34 +01:00
|
|
|
$(hide) echo "ab_update=true" >> $(zip_root)/META/misc_info.txt
|
2016-05-11 07:48:13 +02:00
|
|
|
ifdef BRILLO_VENDOR_PARTITIONS
|
|
|
|
$(hide) mkdir -p $(zip_root)/VENDOR_IMAGES
|
|
|
|
$(hide) for f in $(BRILLO_VENDOR_PARTITIONS); do \
|
|
|
|
pair1="$$(echo $$f | awk -F':' '{print $$1}')"; \
|
|
|
|
pair2="$$(echo $$f | awk -F':' '{print $$2}')"; \
|
|
|
|
src=$${pair1}/$${pair2}; \
|
|
|
|
dest=$(zip_root)/VENDOR_IMAGES/$${pair2}; \
|
|
|
|
mkdir -p $$(dirname "$${dest}"); \
|
2017-03-21 23:47:37 +01:00
|
|
|
cp $${src} $${dest}; \
|
2016-05-11 07:48:13 +02:00
|
|
|
done;
|
|
|
|
endif
|
2015-10-09 00:32:40 +02:00
|
|
|
ifdef OSRELEASED_DIRECTORY
|
2017-03-21 23:47:37 +01:00
|
|
|
$(hide) cp $(TARGET_OUT_OEM)/$(OSRELEASED_DIRECTORY)/product_id $(zip_root)/META/product_id.txt
|
|
|
|
$(hide) cp $(TARGET_OUT_OEM)/$(OSRELEASED_DIRECTORY)/product_version $(zip_root)/META/product_version.txt
|
|
|
|
$(hide) cp $(TARGET_OUT_ETC)/$(OSRELEASED_DIRECTORY)/system_version $(zip_root)/META/system_version.txt
|
2015-10-09 00:32:40 +02:00
|
|
|
endif
|
2015-09-30 04:05:37 +02:00
|
|
|
endif
|
2015-09-25 03:12:33 +02:00
|
|
|
ifeq ($(BREAKPAD_GENERATE_SYMBOLS),true)
|
2015-09-30 04:05:37 +02:00
|
|
|
@# If breakpad symbols have been generated, add them to the zip.
|
2015-09-25 03:12:33 +02:00
|
|
|
$(hide) $(ACP) -r $(TARGET_OUT_BREAKPAD) $(zip_root)/BREAKPAD
|
2016-06-17 23:07:37 +02:00
|
|
|
endif
|
|
|
|
ifdef BOARD_PREBUILT_VENDORIMAGE
|
|
|
|
$(hide) mkdir -p $(zip_root)/IMAGES
|
|
|
|
$(hide) cp $(INSTALLED_VENDORIMAGE_TARGET) $(zip_root)/IMAGES/
|
2017-05-13 02:50:46 +02:00
|
|
|
endif
|
|
|
|
ifdef BOARD_PREBUILT_DTBOIMAGE
|
2017-05-31 06:46:33 +02:00
|
|
|
$(hide) mkdir -p $(zip_root)/PREBUILT_IMAGES
|
|
|
|
$(hide) cp $(INSTALLED_DTBOIMAGE_TARGET) $(zip_root)/PREBUILT_IMAGES/
|
|
|
|
$(hide) echo "has_dtbo=true" >> $(zip_root)/META/misc_info.txt
|
|
|
|
ifeq ($(BOARD_AVB_ENABLE),true)
|
|
|
|
$(hide) echo "dtbo_size=$(BOARD_DTBOIMG_PARTITION_SIZE)" >> $(zip_root)/META/misc_info.txt
|
2017-05-26 12:30:04 +02:00
|
|
|
$(hide) echo "avb_dtbo_add_hash_footer_args=$(BOARD_AVB_DTBO_ADD_HASH_FOOTER_ARGS)" >> $(zip_root)/META/misc_info.txt
|
|
|
|
ifdef BOARD_AVB_DTBO_KEY_PATH
|
|
|
|
$(hide) echo "avb_dtbo_key_path=$(BOARD_AVB_DTBO_KEY_PATH)" >> $(zip_root)/META/misc_info.txt
|
|
|
|
$(hide) echo "avb_dtbo_algorithm=$(BOARD_AVB_DTBO_ALGORITHM)" >> $(zip_root)/META/misc_info.txt
|
|
|
|
$(hide) echo "avb_dtbo_rollback_index_location=$(BOARD_AVB_DTBO_ROLLBACK_INDEX_LOCATION)" \
|
2017-05-31 06:46:33 +02:00
|
|
|
>> $(zip_root)/META/misc_info.txt
|
2017-05-26 12:30:04 +02:00
|
|
|
endif # BOARD_AVB_DTBO_KEY_PATH
|
|
|
|
endif # BOARD_AVB_ENABLE
|
|
|
|
endif # BOARD_PREBUILT_DTBOIMAGE
|
2017-06-17 00:30:23 +02:00
|
|
|
@# The radio images in BOARD_PACK_RADIOIMAGES will be additionally copied from RADIO/ into
|
|
|
|
@# IMAGES/, which then will be added into <product>-img.zip. Such images must be listed in
|
|
|
|
@# INSTALLED_RADIOIMAGE_TARGET.
|
|
|
|
$(hide) $(foreach part,$(BOARD_PACK_RADIOIMAGES), \
|
|
|
|
echo $(part) >> $(zip_root)/META/pack_radioimages.txt;)
|
2014-06-17 00:16:31 +02:00
|
|
|
@# Run fs_config on all the system, vendor, boot ramdisk,
|
|
|
|
@# and recovery ramdisk files in the zip, and save the output
|
2017-03-06 04:56:52 +01:00
|
|
|
$(hide) $(call fs_config,$(zip_root)/SYSTEM,system/) > $(zip_root)/META/filesystem_config.txt
|
|
|
|
ifdef BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE
|
|
|
|
$(hide) $(call fs_config,$(zip_root)/VENDOR,vendor/) > $(zip_root)/META/vendor_filesystem_config.txt
|
|
|
|
endif
|
2015-07-22 03:01:20 +02:00
|
|
|
ifeq ($(BOARD_BUILD_SYSTEM_ROOT_IMAGE),true)
|
2017-03-06 04:56:52 +01:00
|
|
|
$(hide) $(call fs_config,$(zip_root)/ROOT,) > $(zip_root)/META/root_filesystem_config.txt
|
2015-07-22 03:01:20 +02:00
|
|
|
endif
|
2017-03-06 04:56:52 +01:00
|
|
|
$(hide) $(call fs_config,$(zip_root)/BOOT/RAMDISK,) > $(zip_root)/META/boot_filesystem_config.txt
|
2015-10-28 03:25:18 +01:00
|
|
|
ifneq ($(INSTALLED_RECOVERYIMAGE_TARGET),)
|
2017-03-06 04:56:52 +01:00
|
|
|
$(hide) $(call fs_config,$(zip_root)/RECOVERY/RAMDISK,) > $(zip_root)/META/recovery_filesystem_config.txt
|
2016-06-16 23:47:10 +02:00
|
|
|
endif
|
|
|
|
ifdef INSTALLED_SYSTEMOTHERIMAGE_TARGET
|
2017-03-06 04:56:52 +01:00
|
|
|
$(hide) $(call fs_config,$(zip_root)/SYSTEM_OTHER,system/) > $(zip_root)/META/system_other_filesystem_config.txt
|
2015-10-28 03:25:18 +01:00
|
|
|
endif
|
2017-05-22 23:02:27 +02:00
|
|
|
|
|
|
|
ifeq ($(PRODUCT_FULL_TREBLE),true)
|
2017-04-04 22:01:18 +02:00
|
|
|
@# Metadata for compatibility verification.
|
2017-04-14 09:00:46 +02:00
|
|
|
$(hide) cp $(BUILT_SYSTEM_MANIFEST) $(zip_root)/META/system_manifest.xml
|
2017-05-16 03:00:37 +02:00
|
|
|
$(hide) cp $(BUILT_SYSTEM_COMPATIBILITY_MATRIX) $(zip_root)/META/system_matrix.xml
|
2017-04-14 09:00:46 +02:00
|
|
|
ifdef BUILT_VENDOR_MANIFEST
|
|
|
|
$(hide) cp $(BUILT_VENDOR_MANIFEST) $(zip_root)/META/vendor_manifest.xml
|
2017-04-04 22:01:18 +02:00
|
|
|
endif
|
2017-04-14 09:00:46 +02:00
|
|
|
ifdef BUILT_VENDOR_MATRIX
|
|
|
|
$(hide) cp $(BUILT_VENDOR_MATRIX) $(zip_root)/META/vendor_matrix.xml
|
2017-05-22 23:02:27 +02:00
|
|
|
endif
|
2017-04-04 22:01:18 +02:00
|
|
|
endif
|
|
|
|
|
2015-03-25 14:06:30 +01:00
|
|
|
$(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH MKBOOTIMG=$(MKBOOTIMG) \
|
2017-03-06 04:56:52 +01:00
|
|
|
./build/tools/releasetools/add_img_to_target_files -a -v -p $(HOST_OUT) $(zip_root)
|
|
|
|
@# Zip everything up, preserving symlinks and placing META/ files first to
|
|
|
|
@# help early validation of the .zip file while uploading it.
|
|
|
|
$(hide) find $(zip_root)/META | sort >$@.list
|
2017-03-21 02:22:43 +01:00
|
|
|
$(hide) find $(zip_root) -path $(zip_root)/META -prune -o -print | sort >>$@.list
|
2017-03-06 04:56:52 +01:00
|
|
|
$(hide) $(SOONG_ZIP) -d -o $@ -C $(zip_root) -l $@.list
|
2010-03-16 01:52:32 +01:00
|
|
|
|
2013-03-20 19:02:05 +01:00
|
|
|
.PHONY: target-files-package
|
2009-03-04 04:28:42 +01:00
|
|
|
target-files-package: $(BUILT_TARGET_FILES_PACKAGE)
|
|
|
|
|
2014-04-15 02:25:43 +02:00
|
|
|
ifneq ($(filter $(MAKECMDGOALS),target-files-package),)
|
|
|
|
$(call dist-for-goals, target-files-package, $(BUILT_TARGET_FILES_PACKAGE))
|
|
|
|
endif
|
2009-06-16 03:56:51 +02:00
|
|
|
|
2016-10-14 22:23:06 +02:00
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# NDK Sysroot Package
|
|
|
|
NDK_SYSROOT_TARGET := $(PRODUCT_OUT)/ndk_sysroot.tar.bz2
|
|
|
|
$(NDK_SYSROOT_TARGET): ndk
|
|
|
|
@echo Package NDK sysroot...
|
|
|
|
$(hide) tar cjf $@ -C $(SOONG_OUT_DIR) ndk
|
|
|
|
|
|
|
|
$(call dist-for-goals,sdk,$(NDK_SYSROOT_TARGET))
|
|
|
|
|
2015-08-11 20:24:19 +02:00
|
|
|
ifeq ($(build_ota_package),true)
|
2010-10-20 23:01:09 +02:00
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# OTA update package
|
|
|
|
|
2009-06-15 23:30:14 +02:00
|
|
|
name := $(TARGET_PRODUCT)
|
|
|
|
ifeq ($(TARGET_BUILD_TYPE),debug)
|
|
|
|
name := $(name)_debug
|
|
|
|
endif
|
|
|
|
name := $(name)-ota-$(FILE_NAME_TAG)
|
|
|
|
|
|
|
|
INTERNAL_OTA_PACKAGE_TARGET := $(PRODUCT_OUT)/$(name).zip
|
|
|
|
|
|
|
|
$(INTERNAL_OTA_PACKAGE_TARGET): KEY_CERT_PAIR := $(DEFAULT_KEY_CERT_PAIR)
|
|
|
|
|
2017-04-20 00:54:22 +02:00
|
|
|
ifeq ($(AB_OTA_UPDATER),true)
|
|
|
|
$(INTERNAL_OTA_PACKAGE_TARGET): $(BRILLO_UPDATE_PAYLOAD)
|
2017-07-07 00:13:59 +02:00
|
|
|
else
|
|
|
|
$(INTERNAL_OTA_PACKAGE_TARGET): $(BRO)
|
2017-04-20 00:54:22 +02:00
|
|
|
endif
|
|
|
|
|
2016-05-10 09:40:38 +02:00
|
|
|
$(INTERNAL_OTA_PACKAGE_TARGET): $(BUILT_TARGET_FILES_PACKAGE) \
|
|
|
|
build/tools/releasetools/ota_from_target_files
|
2009-06-15 23:30:14 +02:00
|
|
|
@echo "Package OTA: $@"
|
2015-02-10 02:20:06 +01:00
|
|
|
$(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH MKBOOTIMG=$(MKBOOTIMG) \
|
2012-11-26 01:53:44 +01:00
|
|
|
./build/tools/releasetools/ota_from_target_files -v \
|
2014-02-20 22:22:07 +01:00
|
|
|
--block \
|
2017-03-21 22:44:27 +01:00
|
|
|
--extracted_input_target_files $(patsubst %.zip,%,$(BUILT_TARGET_FILES_PACKAGE)) \
|
2009-06-18 17:35:12 +02:00
|
|
|
-p $(HOST_OUT) \
|
2012-02-09 19:36:21 +01:00
|
|
|
-k $(KEY_CERT_PAIR) \
|
2014-04-16 02:40:21 +02:00
|
|
|
$(if $(OEM_OTA_CONFIG), -o $(OEM_OTA_CONFIG)) \
|
2012-02-09 19:36:21 +01:00
|
|
|
$(BUILT_TARGET_FILES_PACKAGE) $@
|
2009-06-15 23:30:14 +02:00
|
|
|
|
|
|
|
.PHONY: otapackage
|
|
|
|
otapackage: $(INTERNAL_OTA_PACKAGE_TARGET)
|
|
|
|
|
2015-08-11 20:24:19 +02:00
|
|
|
endif # build_ota_package
|
2014-06-03 23:07:27 +02:00
|
|
|
|
2010-10-20 23:01:09 +02:00
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# The update package
|
|
|
|
|
|
|
|
name := $(TARGET_PRODUCT)
|
|
|
|
ifeq ($(TARGET_BUILD_TYPE),debug)
|
|
|
|
name := $(name)_debug
|
|
|
|
endif
|
|
|
|
name := $(name)-img-$(FILE_NAME_TAG)
|
|
|
|
|
|
|
|
INTERNAL_UPDATE_PACKAGE_TARGET := $(PRODUCT_OUT)/$(name).zip
|
|
|
|
|
2016-08-07 05:15:06 +02:00
|
|
|
$(INTERNAL_UPDATE_PACKAGE_TARGET): $(BUILT_TARGET_FILES_PACKAGE) $(ZIP2ZIP)
|
2010-10-20 23:01:09 +02:00
|
|
|
@echo "Package: $@"
|
2016-08-07 05:15:06 +02:00
|
|
|
$(hide) $(ZIP2ZIP) -i $(BUILT_TARGET_FILES_PACKAGE) -o $@ \
|
|
|
|
OTA/android-info.txt:android-info.txt "IMAGES/*.img:."
|
2010-10-20 23:01:09 +02:00
|
|
|
|
|
|
|
.PHONY: updatepackage
|
|
|
|
updatepackage: $(INTERNAL_UPDATE_PACKAGE_TARGET)
|
|
|
|
|
2009-03-04 04:28:42 +01:00
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# A zip of the symbols directory. Keep the full paths to make it
|
|
|
|
# more obvious where these files came from.
|
|
|
|
#
|
|
|
|
name := $(TARGET_PRODUCT)
|
|
|
|
ifeq ($(TARGET_BUILD_TYPE),debug)
|
|
|
|
name := $(name)_debug
|
|
|
|
endif
|
|
|
|
name := $(name)-symbols-$(FILE_NAME_TAG)
|
|
|
|
|
|
|
|
SYMBOLS_ZIP := $(PRODUCT_OUT)/$(name).zip
|
2017-10-20 20:37:33 +02:00
|
|
|
# For apps_only build we'll establish the dependency later in build/make/core/main.mk.
|
2014-10-24 20:36:59 +02:00
|
|
|
ifndef TARGET_BUILD_APPS
|
2016-05-10 09:40:38 +02:00
|
|
|
$(SYMBOLS_ZIP): $(INSTALLED_SYSTEMIMAGE) \
|
|
|
|
$(INSTALLED_BOOTIMAGE_TARGET) \
|
|
|
|
$(INSTALLED_USERDATAIMAGE_TARGET) \
|
|
|
|
$(INSTALLED_VENDORIMAGE_TARGET) \
|
|
|
|
$(updater_dep)
|
2014-10-24 20:36:59 +02:00
|
|
|
endif
|
2016-08-07 05:15:06 +02:00
|
|
|
$(SYMBOLS_ZIP): PRIVATE_LIST_FILE := $(call intermediates-dir-for,PACKAGING,symbols)/filelist
|
|
|
|
$(SYMBOLS_ZIP): $(SOONG_ZIP)
|
2009-03-04 04:28:42 +01:00
|
|
|
@echo "Package symbols: $@"
|
2016-08-07 05:15:06 +02:00
|
|
|
$(hide) rm -rf $@ $(PRIVATE_LIST_FILE)
|
|
|
|
$(hide) mkdir -p $(dir $@) $(TARGET_OUT_UNSTRIPPED) $(dir $(PRIVATE_LIST_FILE))
|
|
|
|
$(hide) find $(TARGET_OUT_UNSTRIPPED) | sort >$(PRIVATE_LIST_FILE)
|
2017-01-31 05:42:28 +01:00
|
|
|
$(hide) $(SOONG_ZIP) -d -o $@ -C $(OUT_DIR)/.. -l $(PRIVATE_LIST_FILE)
|
2016-09-12 22:56:50 +02:00
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# A zip of the coverage directory.
|
|
|
|
#
|
|
|
|
name := $(TARGET_PRODUCT)
|
|
|
|
ifeq ($(TARGET_BUILD_TYPE),debug)
|
|
|
|
name := $(name)_debug
|
|
|
|
endif
|
|
|
|
name := $(name)-coverage-$(FILE_NAME_TAG)
|
|
|
|
COVERAGE_ZIP := $(PRODUCT_OUT)/$(name).zip
|
|
|
|
ifndef TARGET_BUILD_APPS
|
|
|
|
$(COVERAGE_ZIP): $(INSTALLED_SYSTEMIMAGE) \
|
|
|
|
$(INSTALLED_BOOTIMAGE_TARGET) \
|
|
|
|
$(INSTALLED_USERDATAIMAGE_TARGET) \
|
|
|
|
$(INSTALLED_VENDORIMAGE_TARGET)
|
|
|
|
endif
|
|
|
|
$(COVERAGE_ZIP): PRIVATE_LIST_FILE := $(call intermediates-dir-for,PACKAGING,coverage)/filelist
|
|
|
|
$(COVERAGE_ZIP): $(SOONG_ZIP)
|
|
|
|
@echo "Package coverage: $@"
|
|
|
|
$(hide) rm -rf $@ $(PRIVATE_LIST_FILE)
|
|
|
|
$(hide) mkdir -p $(dir $@) $(TARGET_OUT_COVERAGE) $(dir $(PRIVATE_LIST_FILE))
|
|
|
|
$(hide) find $(TARGET_OUT_COVERAGE) | sort >$(PRIVATE_LIST_FILE)
|
|
|
|
$(hide) $(SOONG_ZIP) -d -o $@ -C $(TARGET_OUT_COVERAGE) -l $(PRIVATE_LIST_FILE)
|
2009-03-04 04:28:42 +01:00
|
|
|
|
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# A zip of the Android Apps. Not keeping full path so that we don't
|
|
|
|
# include product names when distributing
|
|
|
|
#
|
|
|
|
name := $(TARGET_PRODUCT)
|
|
|
|
ifeq ($(TARGET_BUILD_TYPE),debug)
|
|
|
|
name := $(name)_debug
|
|
|
|
endif
|
|
|
|
name := $(name)-apps-$(FILE_NAME_TAG)
|
|
|
|
|
|
|
|
APPS_ZIP := $(PRODUCT_OUT)/$(name).zip
|
2015-11-04 19:06:25 +01:00
|
|
|
$(APPS_ZIP): $(INSTALLED_SYSTEMIMAGE)
|
2009-03-04 04:28:42 +01:00
|
|
|
@echo "Package apps: $@"
|
|
|
|
$(hide) rm -rf $@
|
|
|
|
$(hide) mkdir -p $(dir $@)
|
2015-08-23 18:40:05 +02:00
|
|
|
$(hide) apps_to_zip=`find $(TARGET_OUT_APPS) $(TARGET_OUT_APPS_PRIVILEGED) -mindepth 2 -maxdepth 3 -name "*.apk"`; \
|
|
|
|
if [ -z "$$apps_to_zip" ]; then \
|
|
|
|
echo "No apps to zip up. Generating empty apps archive." ; \
|
|
|
|
a=$$(mktemp /tmp/XXXXXXX) && touch $$a && zip $@ $$a && zip -d $@ $$a; \
|
|
|
|
else \
|
2015-10-30 00:33:05 +01:00
|
|
|
zip -qjX $@ $$apps_to_zip; \
|
2015-08-23 18:40:05 +02:00
|
|
|
fi
|
2010-04-23 20:54:37 +02:00
|
|
|
|
2012-08-15 21:22:44 +02:00
|
|
|
ifeq (true,$(EMMA_INSTRUMENT))
|
2017-09-27 23:28:41 +02:00
|
|
|
#------------------------------------------------------------------
|
|
|
|
# An archive of classes for use in generating code-coverage reports
|
|
|
|
# These are the uninstrumented versions of any classes that were
|
|
|
|
# to be instrumented.
|
2017-10-20 20:37:33 +02:00
|
|
|
# Any dependencies are set up later in build/make/core/main.mk.
|
2017-09-27 23:28:41 +02:00
|
|
|
|
|
|
|
JACOCO_REPORT_CLASSES_ALL := $(PRODUCT_OUT)/jacoco-report-classes-all.jar
|
2017-04-12 01:36:46 +02:00
|
|
|
$(JACOCO_REPORT_CLASSES_ALL) :
|
|
|
|
@echo "Collecting uninstrumented classes"
|
|
|
|
$(hide) find $(TARGET_COMMON_OUT_ROOT) $(HOST_COMMON_OUT_ROOT) -name "jacoco-report-classes.jar" | \
|
|
|
|
zip -@ -0 -q -X $@
|
|
|
|
# Meaning of these options:
|
|
|
|
# -@ scan stdin for file paths to add to the zip
|
|
|
|
# -0 don't do any compression
|
|
|
|
# -q supress most output
|
|
|
|
# -X skip storing extended file attributes
|
|
|
|
|
2012-08-15 21:22:44 +02:00
|
|
|
endif # EMMA_INSTRUMENT=true
|
|
|
|
|
2017-04-12 01:36:46 +02:00
|
|
|
|
2013-08-23 05:52:47 +02:00
|
|
|
#------------------------------------------------------------------
|
|
|
|
# A zip of Proguard obfuscation dictionary files.
|
|
|
|
# Only for apps_only build.
|
|
|
|
#
|
|
|
|
ifdef TARGET_BUILD_APPS
|
2013-08-29 03:38:25 +02:00
|
|
|
PROGUARD_DICT_ZIP := $(PRODUCT_OUT)/$(TARGET_PRODUCT)-proguard-dict-$(FILE_NAME_TAG).zip
|
2017-10-20 20:37:33 +02:00
|
|
|
# the dependency will be set up later in build/make/core/main.mk.
|
2013-08-23 05:52:47 +02:00
|
|
|
$(PROGUARD_DICT_ZIP) :
|
|
|
|
@echo "Packaging Proguard obfuscation dictionary files."
|
2017-09-27 23:28:41 +02:00
|
|
|
$(hide) dict_files=`find $(TARGET_OUT_COMMON_INTERMEDIATES)/APPS -name proguard_dictionary`; \
|
2013-08-23 05:52:47 +02:00
|
|
|
if [ -n "$$dict_files" ]; then \
|
2013-11-26 02:39:50 +01:00
|
|
|
unobfuscated_jars=$${dict_files//proguard_dictionary/classes.jar}; \
|
2015-10-30 00:33:05 +01:00
|
|
|
zip -qX $@ $$dict_files $$unobfuscated_jars; \
|
2013-08-23 05:52:47 +02:00
|
|
|
else \
|
2015-02-26 18:36:27 +01:00
|
|
|
touch $(dir $@)/zipdummy; \
|
|
|
|
(cd $(dir $@) && zip -q $(notdir $@) zipdummy); \
|
|
|
|
zip -qd $@ zipdummy; \
|
|
|
|
rm $(dir $@)/zipdummy; \
|
2013-08-23 05:52:47 +02:00
|
|
|
fi
|
|
|
|
|
|
|
|
endif # TARGET_BUILD_APPS
|
|
|
|
|
2009-03-04 04:28:42 +01:00
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# dalvik something
|
|
|
|
.PHONY: dalvikfiles
|
|
|
|
dalvikfiles: $(INTERNAL_DALVIK_MODULES)
|
|
|
|
|
2017-08-01 21:02:09 +02:00
|
|
|
ifeq ($(BUILD_QEMU_IMAGES),true)
|
|
|
|
INSTALLED_QEMU_SYSTEMIMAGE := $(PRODUCT_OUT)/system-qemu.img
|
|
|
|
MK_QEMU_IMAGE_SH := device/generic/goldfish/tools/mk_qemu_image.sh
|
|
|
|
SGDISK_HOST := $(HOST_OUT_EXECUTABLES)/sgdisk
|
|
|
|
$(INSTALLED_QEMU_SYSTEMIMAGE): $(INSTALLED_SYSTEMIMAGE) $(MK_QEMU_IMAGE_SH) $(SGDISK_HOST)
|
|
|
|
@echo Create system-qemu.img
|
|
|
|
(export SGDISK=$(SGDISK_HOST); $(MK_QEMU_IMAGE_SH) ${PRODUCT_OUT}/system.img)
|
|
|
|
|
|
|
|
systemimage: $(INSTALLED_QEMU_SYSTEMIMAGE)
|
|
|
|
droidcore: $(INSTALLED_QEMU_SYSTEMIMAGE)
|
|
|
|
ifeq ($(BOARD_USES_VENDORIMAGE),true)
|
|
|
|
INSTALLED_QEMU_VENDORIMAGE := $(PRODUCT_OUT)/vendor-qemu.img
|
|
|
|
$(INSTALLED_QEMU_VENDORIMAGE): $(INSTALLED_VENDORIMAGE_TARGET) $(MK_QEMU_IMAGE_SH) $(SGDISK_HOST)
|
|
|
|
@echo Create vendor-qemu.img
|
|
|
|
(export SGDISK=$(SGDISK_HOST); $(MK_QEMU_IMAGE_SH) ${PRODUCT_OUT}/vendor.img)
|
|
|
|
|
|
|
|
vendorimage: $(INSTALLED_QEMU_VENDORIMAGE)
|
|
|
|
droidcore: $(INSTALLED_QEMU_VENDORIMAGE)
|
|
|
|
endif
|
|
|
|
endif
|
2009-03-04 04:28:42 +01:00
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# The emulator package
|
2012-07-26 19:15:21 +02:00
|
|
|
ifeq ($(BUILD_EMULATOR),true)
|
2009-03-04 04:28:42 +01:00
|
|
|
INTERNAL_EMULATOR_PACKAGE_FILES += \
|
|
|
|
$(HOST_OUT_EXECUTABLES)/emulator$(HOST_EXECUTABLE_SUFFIX) \
|
2012-01-07 01:44:06 +01:00
|
|
|
prebuilts/qemu-kernel/$(TARGET_ARCH)/kernel-qemu \
|
2009-03-04 04:28:42 +01:00
|
|
|
$(INSTALLED_RAMDISK_TARGET) \
|
|
|
|
$(INSTALLED_SYSTEMIMAGE) \
|
|
|
|
$(INSTALLED_USERDATAIMAGE_TARGET)
|
|
|
|
|
|
|
|
name := $(TARGET_PRODUCT)-emulator-$(FILE_NAME_TAG)
|
|
|
|
|
|
|
|
INTERNAL_EMULATOR_PACKAGE_TARGET := $(PRODUCT_OUT)/$(name).zip
|
|
|
|
|
2015-11-04 19:06:25 +01:00
|
|
|
$(INTERNAL_EMULATOR_PACKAGE_TARGET): $(INTERNAL_EMULATOR_PACKAGE_FILES)
|
2009-03-04 04:28:42 +01:00
|
|
|
@echo "Package: $@"
|
2015-10-30 00:33:05 +01:00
|
|
|
$(hide) zip -qjX $@ $(INTERNAL_EMULATOR_PACKAGE_FILES)
|
2009-03-04 04:28:42 +01:00
|
|
|
|
2012-07-26 19:15:21 +02:00
|
|
|
endif
|
2009-03-04 04:28:42 +01:00
|
|
|
# -----------------------------------------------------------------
|
2012-02-28 00:49:23 +01:00
|
|
|
# Old PDK stuffs, retired
|
2009-03-04 04:28:42 +01:00
|
|
|
# The pdk package (Platform Development Kit)
|
|
|
|
|
2012-02-28 00:49:23 +01:00
|
|
|
#ifneq (,$(filter pdk,$(MAKECMDGOALS)))
|
|
|
|
# include development/pdk/Pdk.mk
|
|
|
|
#endif
|
|
|
|
|
2009-03-04 04:28:42 +01:00
|
|
|
|
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# The SDK
|
|
|
|
|
|
|
|
# The SDK includes host-specific components, so it belongs under HOST_OUT.
|
2014-06-03 01:16:53 +02:00
|
|
|
sdk_dir := $(HOST_OUT)/sdk/$(TARGET_PRODUCT)
|
2009-03-04 04:28:42 +01:00
|
|
|
|
|
|
|
# Build a name that looks like:
|
|
|
|
#
|
|
|
|
# linux-x86 --> android-sdk_12345_linux-x86
|
|
|
|
# darwin-x86 --> android-sdk_12345_mac-x86
|
|
|
|
# windows-x86 --> android-sdk_12345_windows
|
|
|
|
#
|
|
|
|
sdk_name := android-sdk_$(FILE_NAME_TAG)
|
|
|
|
ifeq ($(HOST_OS),darwin)
|
2009-04-13 17:31:16 +02:00
|
|
|
INTERNAL_SDK_HOST_OS_NAME := mac
|
2009-03-04 04:28:42 +01:00
|
|
|
else
|
2009-04-13 17:31:16 +02:00
|
|
|
INTERNAL_SDK_HOST_OS_NAME := $(HOST_OS)
|
2009-03-04 04:28:42 +01:00
|
|
|
endif
|
|
|
|
ifneq ($(HOST_OS),windows)
|
2014-06-09 21:31:12 +02:00
|
|
|
INTERNAL_SDK_HOST_OS_NAME := $(INTERNAL_SDK_HOST_OS_NAME)-$(SDK_HOST_ARCH)
|
2009-03-04 04:28:42 +01:00
|
|
|
endif
|
2009-04-13 17:31:16 +02:00
|
|
|
sdk_name := $(sdk_name)_$(INTERNAL_SDK_HOST_OS_NAME)
|
2009-03-04 04:28:42 +01:00
|
|
|
|
|
|
|
sdk_dep_file := $(sdk_dir)/sdk_deps.mk
|
|
|
|
|
|
|
|
ATREE_FILES :=
|
|
|
|
-include $(sdk_dep_file)
|
|
|
|
|
|
|
|
# if we don't have a real list, then use "everything"
|
|
|
|
ifeq ($(strip $(ATREE_FILES)),)
|
|
|
|
ATREE_FILES := \
|
|
|
|
$(ALL_DEFAULT_INSTALLED_MODULES) \
|
|
|
|
$(INSTALLED_RAMDISK_TARGET) \
|
|
|
|
$(ALL_DOCS) \
|
|
|
|
$(ALL_SDK_FILES)
|
|
|
|
endif
|
|
|
|
|
|
|
|
atree_dir := development/build
|
|
|
|
|
2011-03-23 11:20:14 +01:00
|
|
|
|
2009-03-04 04:28:42 +01:00
|
|
|
sdk_atree_files := \
|
|
|
|
$(atree_dir)/sdk.exclude.atree \
|
2014-06-09 21:31:12 +02:00
|
|
|
$(atree_dir)/sdk-$(HOST_OS)-$(SDK_HOST_ARCH).atree
|
2009-03-04 04:28:42 +01:00
|
|
|
|
2011-06-23 12:49:02 +02:00
|
|
|
# development/build/sdk-android-<abi>.atree is used to differentiate
|
|
|
|
# between architecture models (e.g. ARMv5TE versus ARMv7) when copying
|
|
|
|
# files like the kernel image. We use TARGET_CPU_ABI because we don't
|
|
|
|
# have a better way to distinguish between CPU models.
|
|
|
|
ifneq (,$(strip $(wildcard $(atree_dir)/sdk-android-$(TARGET_CPU_ABI).atree)))
|
|
|
|
sdk_atree_files += $(atree_dir)/sdk-android-$(TARGET_CPU_ABI).atree
|
|
|
|
endif
|
|
|
|
|
2014-02-28 17:45:59 +01:00
|
|
|
ifneq ($(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SDK_ATREE_FILES),)
|
|
|
|
sdk_atree_files += $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SDK_ATREE_FILES)
|
|
|
|
else
|
|
|
|
sdk_atree_files += $(atree_dir)/sdk.atree
|
|
|
|
endif
|
|
|
|
|
2014-08-12 00:20:02 +02:00
|
|
|
include $(BUILD_SYSTEM)/sdk_font.mk
|
2014-08-01 19:14:15 +02:00
|
|
|
|
2009-03-04 04:28:42 +01:00
|
|
|
deps := \
|
|
|
|
$(target_notice_file_txt) \
|
|
|
|
$(tools_notice_file_txt) \
|
|
|
|
$(OUT_DOCS)/offline-sdk-timestamp \
|
2010-04-01 02:29:04 +02:00
|
|
|
$(SYMBOLS_ZIP) \
|
2016-09-12 22:56:50 +02:00
|
|
|
$(COVERAGE_ZIP) \
|
2009-06-16 06:25:32 +02:00
|
|
|
$(INSTALLED_SYSTEMIMAGE) \
|
2017-08-01 21:02:09 +02:00
|
|
|
$(INSTALLED_QEMU_SYSTEMIMAGE) \
|
2017-08-14 23:52:20 +02:00
|
|
|
$(INSTALLED_QEMU_VENDORIMAGE) \
|
2009-06-16 06:25:32 +02:00
|
|
|
$(INSTALLED_USERDATAIMAGE_TARGET) \
|
|
|
|
$(INSTALLED_RAMDISK_TARGET) \
|
2009-03-04 04:28:42 +01:00
|
|
|
$(INSTALLED_SDK_BUILD_PROP_TARGET) \
|
2010-04-01 02:29:04 +02:00
|
|
|
$(INSTALLED_BUILD_PROP_TARGET) \
|
2009-03-04 04:28:42 +01:00
|
|
|
$(ATREE_FILES) \
|
2014-02-18 23:29:59 +01:00
|
|
|
$(sdk_atree_files) \
|
2009-03-04 04:28:42 +01:00
|
|
|
$(HOST_OUT_EXECUTABLES)/atree \
|
2014-08-01 19:14:15 +02:00
|
|
|
$(HOST_OUT_EXECUTABLES)/line_endings \
|
2014-08-12 00:20:02 +02:00
|
|
|
$(SDK_FONT_DEPS)
|
2009-03-04 04:28:42 +01:00
|
|
|
|
|
|
|
INTERNAL_SDK_TARGET := $(sdk_dir)/$(sdk_name).zip
|
|
|
|
$(INTERNAL_SDK_TARGET): PRIVATE_NAME := $(sdk_name)
|
|
|
|
$(INTERNAL_SDK_TARGET): PRIVATE_DIR := $(sdk_dir)/$(sdk_name)
|
|
|
|
$(INTERNAL_SDK_TARGET): PRIVATE_DEP_FILE := $(sdk_dep_file)
|
|
|
|
$(INTERNAL_SDK_TARGET): PRIVATE_INPUT_FILES := $(sdk_atree_files)
|
|
|
|
|
|
|
|
# Set SDK_GNU_ERROR to non-empty to fail when a GNU target is built.
|
|
|
|
#
|
|
|
|
#SDK_GNU_ERROR := true
|
|
|
|
|
2015-11-04 19:06:25 +01:00
|
|
|
$(INTERNAL_SDK_TARGET): $(deps)
|
2009-03-04 04:28:42 +01:00
|
|
|
@echo "Package SDK: $@"
|
|
|
|
$(hide) rm -rf $(PRIVATE_DIR) $@
|
|
|
|
$(hide) for f in $(target_gnu_MODULES); do \
|
|
|
|
if [ -f $$f ]; then \
|
|
|
|
echo SDK: $(if $(SDK_GNU_ERROR),ERROR:,warning:) \
|
|
|
|
including GNU target $$f >&2; \
|
|
|
|
FAIL=$(SDK_GNU_ERROR); \
|
|
|
|
fi; \
|
|
|
|
done; \
|
|
|
|
if [ $$FAIL ]; then exit 1; fi
|
2014-08-12 19:23:58 +02:00
|
|
|
$(hide) echo $(notdir $(SDK_FONT_DEPS)) | tr " " "\n" > $(SDK_FONT_TEMP)/fontsInSdk.txt
|
2009-03-04 04:28:42 +01:00
|
|
|
$(hide) ( \
|
2012-06-07 04:33:31 +02:00
|
|
|
ATREE_STRIP="strip -x" \
|
2009-03-04 04:28:42 +01:00
|
|
|
$(HOST_OUT_EXECUTABLES)/atree \
|
|
|
|
$(addprefix -f ,$(PRIVATE_INPUT_FILES)) \
|
|
|
|
-m $(PRIVATE_DEP_FILE) \
|
|
|
|
-I . \
|
|
|
|
-I $(PRODUCT_OUT) \
|
|
|
|
-I $(HOST_OUT) \
|
|
|
|
-I $(TARGET_COMMON_OUT_ROOT) \
|
|
|
|
-v "PLATFORM_NAME=android-$(PLATFORM_VERSION)" \
|
2011-01-05 23:58:17 +01:00
|
|
|
-v "OUT_DIR=$(OUT_DIR)" \
|
2011-11-16 01:29:16 +01:00
|
|
|
-v "HOST_OUT=$(HOST_OUT)" \
|
2011-02-19 00:06:20 +01:00
|
|
|
-v "TARGET_ARCH=$(TARGET_ARCH)" \
|
|
|
|
-v "TARGET_CPU_ABI=$(TARGET_CPU_ABI)" \
|
2011-08-25 14:28:03 +02:00
|
|
|
-v "DLL_EXTENSION=$(HOST_SHLIB_SUFFIX)" \
|
2014-08-12 00:20:02 +02:00
|
|
|
-v "FONT_OUT=$(SDK_FONT_TEMP)" \
|
2009-03-04 04:28:42 +01:00
|
|
|
-o $(PRIVATE_DIR) && \
|
|
|
|
cp -f $(target_notice_file_txt) \
|
2011-09-21 19:22:19 +02:00
|
|
|
$(PRIVATE_DIR)/system-images/android-$(PLATFORM_VERSION)/$(TARGET_CPU_ABI)/NOTICE.txt && \
|
2011-03-15 21:28:40 +01:00
|
|
|
cp -f $(tools_notice_file_txt) $(PRIVATE_DIR)/platform-tools/NOTICE.txt && \
|
2009-03-04 04:28:42 +01:00
|
|
|
HOST_OUT_EXECUTABLES=$(HOST_OUT_EXECUTABLES) HOST_OS=$(HOST_OS) \
|
2011-02-01 22:30:00 +01:00
|
|
|
development/build/tools/sdk_clean.sh $(PRIVATE_DIR) && \
|
2009-03-04 04:28:42 +01:00
|
|
|
chmod -R ug+rwX $(PRIVATE_DIR) && \
|
2015-10-30 00:33:05 +01:00
|
|
|
cd $(dir $@) && zip -rqX $(notdir $@) $(PRIVATE_NAME) \
|
2009-03-04 04:28:42 +01:00
|
|
|
) || ( rm -rf $(PRIVATE_DIR) $@ && exit 44 )
|
|
|
|
|
2010-04-17 02:50:09 +02:00
|
|
|
|
|
|
|
# Is a Windows SDK requested? If so, we need some definitions from here
|
|
|
|
# in order to find the Linux SDK used to create the Windows one.
|
2011-02-16 01:09:36 +01:00
|
|
|
MAIN_SDK_NAME := $(sdk_name)
|
|
|
|
MAIN_SDK_DIR := $(sdk_dir)
|
|
|
|
MAIN_SDK_ZIP := $(INTERNAL_SDK_TARGET)
|
2015-01-27 21:47:10 +01:00
|
|
|
ifneq ($(filter win_sdk winsdk-tools,$(MAKECMDGOALS)),)
|
2010-04-17 02:50:09 +02:00
|
|
|
include $(TOPDIR)development/build/tools/windows_sdk.mk
|
|
|
|
endif
|
|
|
|
|
2009-03-04 04:28:42 +01:00
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# Findbugs
|
|
|
|
INTERNAL_FINDBUGS_XML_TARGET := $(PRODUCT_OUT)/findbugs.xml
|
|
|
|
INTERNAL_FINDBUGS_HTML_TARGET := $(PRODUCT_OUT)/findbugs.html
|
|
|
|
$(INTERNAL_FINDBUGS_XML_TARGET): $(ALL_FINDBUGS_FILES)
|
|
|
|
@echo UnionBugs: $@
|
2014-05-20 10:04:16 +02:00
|
|
|
$(hide) $(FINDBUGS_DIR)/unionBugs $(ALL_FINDBUGS_FILES) \
|
2009-03-04 04:28:42 +01:00
|
|
|
> $@
|
|
|
|
$(INTERNAL_FINDBUGS_HTML_TARGET): $(INTERNAL_FINDBUGS_XML_TARGET)
|
|
|
|
@echo ConvertXmlToText: $@
|
2014-05-20 10:04:16 +02:00
|
|
|
$(hide) $(FINDBUGS_DIR)/convertXmlToText -html:fancy.xsl \
|
2013-08-09 01:34:29 +02:00
|
|
|
$(INTERNAL_FINDBUGS_XML_TARGET) > $@
|
2009-03-04 04:28:42 +01:00
|
|
|
|
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# Findbugs
|
|
|
|
|
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# These are some additional build tasks that need to be run.
|
2013-08-09 01:34:29 +02:00
|
|
|
ifneq ($(dont_bother),true)
|
2009-03-04 04:28:42 +01:00
|
|
|
include $(sort $(wildcard $(BUILD_SYSTEM)/tasks/*.mk))
|
2010-11-12 15:46:00 +01:00
|
|
|
-include $(sort $(wildcard vendor/*/build/tasks/*.mk))
|
2012-04-16 19:03:16 +02:00
|
|
|
-include $(sort $(wildcard device/*/build/tasks/*.mk))
|
2015-08-21 00:39:56 +02:00
|
|
|
-include $(sort $(wildcard product/*/build/tasks/*.mk))
|
2014-09-06 02:47:34 +02:00
|
|
|
# Also the project-specific tasks
|
|
|
|
-include $(sort $(wildcard vendor/*/*/build/tasks/*.mk))
|
|
|
|
-include $(sort $(wildcard device/*/*/build/tasks/*.mk))
|
2015-08-21 00:39:56 +02:00
|
|
|
-include $(sort $(wildcard product/*/*/build/tasks/*.mk))
|
2016-06-21 07:03:24 +02:00
|
|
|
# Also add test specifc tasks
|
|
|
|
include $(sort $(wildcard platform_testing/build/tasks/*.mk))
|
2016-08-31 18:20:51 +02:00
|
|
|
include $(sort $(wildcard test/vts/tools/build/tasks/*.mk))
|
2013-08-09 01:34:29 +02:00
|
|
|
endif
|
2011-02-16 01:09:36 +01:00
|
|
|
|
2015-10-29 00:42:39 +01:00
|
|
|
include $(BUILD_SYSTEM)/product-graph.mk
|
|
|
|
|
2011-02-16 01:09:36 +01:00
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# Create SDK repository packages. Must be done after tasks/* since
|
|
|
|
# we need the addon rules defined.
|
|
|
|
ifneq ($(sdk_repo_goal),)
|
|
|
|
include $(TOPDIR)development/build/tools/sdk_repo.mk
|
|
|
|
endif
|