Ying Wang | 5fcf109 | 2015-03-12 18:30:39 -0700 | [diff] [blame] | 1 | # |
| 2 | # Copyright (C) 2015 The Android Open Source Project |
| 3 | # |
| 4 | # Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | # you may not use this file except in compliance with the License. |
| 6 | # You may obtain a copy of the License at |
| 7 | # |
| 8 | # http://www.apache.org/licenses/LICENSE-2.0 |
| 9 | # |
| 10 | # Unless required by applicable law or agreed to in writing, software |
| 11 | # distributed under the License is distributed on an "AS IS" BASIS, |
| 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 13 | # See the License for the specific language governing permissions and |
| 14 | # limitations under the License. |
| 15 | # |
| 16 | |
| 17 | |
| 18 | # Define rule to build one custom image. |
| 19 | # Input variables: my_custom_imag_makefile |
| 20 | |
| 21 | $(call clear-var-list, $(custom_image_parameter_variables)) |
| 22 | |
| 23 | include $(my_custom_imag_makefile) |
| 24 | |
| 25 | my_custom_image_name := $(basename $(notdir $(my_custom_imag_makefile))) |
| 26 | |
| 27 | intermediates := $(call intermediates-dir-for,PACKAGING,$(my_custom_image_name)) |
| 28 | my_built_custom_image := $(intermediates)/$(my_custom_image_name).img |
Ying Wang | 7d51a40 | 2015-03-20 17:43:02 -0700 | [diff] [blame] | 29 | my_staging_dir := $(intermediates)/$(CUSTOM_IMAGE_MOUNT_POINT) |
Ying Wang | 5fcf109 | 2015-03-12 18:30:39 -0700 | [diff] [blame] | 30 | |
| 31 | # Collect CUSTOM_IMAGE_MODULES's installd files and their PICKUP_FILES. |
| 32 | my_built_modules := |
| 33 | my_copy_pairs := |
| 34 | my_pickup_files := |
| 35 | |
| 36 | $(foreach m,$(CUSTOM_IMAGE_MODULES),\ |
| 37 | $(eval _pickup_files := $(strip $(ALL_MODULES.$(m).PICKUP_FILES)\ |
| 38 | $(ALL_MODULES.$(m)$(TARGET_2ND_ARCH_MODULE_SUFFIX).PICKUP_FILES)))\ |
| 39 | $(eval _built_files := $(strip $(ALL_MODULES.$(m).BUILT_INSTALLED)\ |
| 40 | $(ALL_MODULES.$(m)$(TARGET_2ND_ARCH_MODULE_SUFFIX).BUILT_INSTALLED)))\ |
| 41 | $(if $(_pickup_files)$(_built_files),,\ |
| 42 | $(warning Unknown installed file for module '$(m)'))\ |
| 43 | $(eval my_pickup_files += $(_pickup_files))\ |
| 44 | $(foreach i, $(_built_files),\ |
| 45 | $(eval bui_ins := $(subst :,$(space),$(i)))\ |
| 46 | $(eval ins := $(word 2,$(bui_ins)))\ |
| 47 | $(if $(filter $(TARGET_OUT_ROOT)/%,$(ins)),\ |
| 48 | $(eval bui := $(word 1,$(bui_ins)))\ |
| 49 | $(eval my_built_modules += $(bui))\ |
| 50 | $(eval my_copy_dest := $(patsubst $(PRODUCT_OUT)/%,%,$(ins)))\ |
| 51 | $(eval my_copy_dest := $(subst /,$(space),$(my_copy_dest)))\ |
| 52 | $(eval my_copy_dest := $(wordlist 2,999,$(my_copy_dest)))\ |
| 53 | $(eval my_copy_dest := $(subst $(space),/,$(my_copy_dest)))\ |
| 54 | $(eval my_copy_pairs += $(bui):$(my_staging_dir)/$(my_copy_dest)))\ |
| 55 | )) |
| 56 | |
| 57 | # Collect CUSTOM_IMAGE_COPY_FILES. |
| 58 | my_image_copy_files := |
| 59 | $(foreach f,$(CUSTOM_IMAGE_COPY_FILES),\ |
| 60 | $(eval pair := $(subst :,$(space),$(f)))\ |
| 61 | $(eval src := $(word 1,$(pair)))\ |
| 62 | $(eval my_image_copy_files += $(src))\ |
| 63 | $(eval my_copy_pairs += $(src):$(my_staging_dir)/$(word 2,$(pair)))) |
| 64 | |
Bowgo Tsai | 7ea994b | 2017-05-19 23:44:26 +0800 | [diff] [blame] | 65 | ifndef CUSTOM_IMAGE_AVB_KEY_PATH |
| 66 | # If key path isn't specified, use the default signing args. |
| 67 | my_avb_signing_args := $(INTERNAL_AVB_SIGNING_ARGS) |
| 68 | else |
| 69 | my_avb_signing_args := \ |
| 70 | --algorithm $(CUSTOM_IMAGE_AVB_ALGORITHM) --key $(CUSTOM_IMAGE_AVB_KEY_PATH) |
| 71 | endif |
| 72 | |
Ying Wang | 5fcf109 | 2015-03-12 18:30:39 -0700 | [diff] [blame] | 73 | $(my_built_custom_image): PRIVATE_INTERMEDIATES := $(intermediates) |
| 74 | $(my_built_custom_image): PRIVATE_MOUNT_POINT := $(CUSTOM_IMAGE_MOUNT_POINT) |
| 75 | $(my_built_custom_image): PRIVATE_PARTITION_SIZE := $(CUSTOM_IMAGE_PARTITION_SIZE) |
| 76 | $(my_built_custom_image): PRIVATE_FILE_SYSTEM_TYPE := $(CUSTOM_IMAGE_FILE_SYSTEM_TYPE) |
| 77 | $(my_built_custom_image): PRIVATE_STAGING_DIR := $(my_staging_dir) |
| 78 | $(my_built_custom_image): PRIVATE_COPY_PAIRS := $(my_copy_pairs) |
| 79 | $(my_built_custom_image): PRIVATE_PICKUP_FILES := $(my_pickup_files) |
Ying Wang | 7d51a40 | 2015-03-20 17:43:02 -0700 | [diff] [blame] | 80 | $(my_built_custom_image): PRIVATE_SELINUX := $(CUSTOM_IMAGE_SELINUX) |
| 81 | $(my_built_custom_image): PRIVATE_SUPPORT_VERITY := $(CUSTOM_IMAGE_SUPPORT_VERITY) |
Bowgo Tsai | 8ec2a1c | 2017-07-14 21:10:41 +0800 | [diff] [blame^] | 82 | $(my_built_custom_image): PRIVATE_SUPPORT_VERITY_FEC := $(CUSTOM_IMAGE_SUPPORT_VERITY_FEC) |
Ying Wang | 7d51a40 | 2015-03-20 17:43:02 -0700 | [diff] [blame] | 83 | $(my_built_custom_image): PRIVATE_VERITY_KEY := $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VERITY_SIGNING_KEY) |
| 84 | $(my_built_custom_image): PRIVATE_VERITY_BLOCK_DEVICE := $(CUSTOM_IMAGE_VERITY_BLOCK_DEVICE) |
Ying Wang | 5fcf109 | 2015-03-12 18:30:39 -0700 | [diff] [blame] | 85 | $(my_built_custom_image): PRIVATE_DICT_FILE := $(CUSTOM_IMAGE_DICT_FILE) |
Bowgo Tsai | 7ea994b | 2017-05-19 23:44:26 +0800 | [diff] [blame] | 86 | $(my_built_custom_image): PRIVATE_AVB_AVBTOOL := $(AVBTOOL) |
| 87 | $(my_built_custom_image): PRIVATE_AVB_SIGNING_ARGS := $(my_avb_signing_args) |
| 88 | $(my_built_custom_image): PRIVATE_AVB_HASH_ENABLE := $(CUSTOM_IMAGE_AVB_HASH_ENABLE) |
| 89 | $(my_built_custom_image): PRIVATE_AVB_ADD_HASH_FOOTER_ARGS := $(CUSTOM_IMAGE_AVB_ADD_HASH_FOOTER_ARGS) |
| 90 | $(my_built_custom_image): PRIVATE_AVB_HASHTREE_ENABLE := $(CUSTOM_IMAGE_AVB_HASHTREE_ENABLE) |
Sen Jiang | 5b0fe18 | 2017-05-15 14:16:52 -0700 | [diff] [blame] | 91 | $(my_built_custom_image): PRIVATE_AVB_ADD_HASHTREE_FOOTER_ARGS := $(CUSTOM_IMAGE_AVB_ADD_HASHTREE_FOOTER_ARGS) |
Bowgo Tsai | 7ea994b | 2017-05-19 23:44:26 +0800 | [diff] [blame] | 92 | ifeq (true,$(filter true, $(CUSTOM_IMAGE_AVB_HASH_ENABLE) $(CUSTOM_IMAGE_AVB_HASHTREE_ENABLE))) |
Sen Jiang | 5b0fe18 | 2017-05-15 14:16:52 -0700 | [diff] [blame] | 93 | $(my_built_custom_image): $(AVBTOOL) |
Bowgo Tsai | 7ea994b | 2017-05-19 23:44:26 +0800 | [diff] [blame] | 94 | else ifneq (,$(filter true, $(CUSTOM_IMAGE_AVB_HASH_ENABLE) $(CUSTOM_IMAGE_AVB_HASHTREE_ENABLE))) |
| 95 | $(error Cannot set both CUSTOM_IMAGE_AVB_HASH_ENABLE and CUSTOM_IMAGE_AVB_HASHTREE_ENABLE to true) |
Sen Jiang | 5b0fe18 | 2017-05-15 14:16:52 -0700 | [diff] [blame] | 96 | endif |
Bowgo Tsai | 8ec2a1c | 2017-07-14 21:10:41 +0800 | [diff] [blame^] | 97 | ifeq (true,$(CUSTOM_IMAGE_SUPPORT_VERITY_FEC)) |
| 98 | $(my_built_custom_image): $(FEC) |
| 99 | endif |
Howard Chen | 0c5f1e5 | 2017-06-23 12:40:23 +0800 | [diff] [blame] | 100 | my_custom_image_modules_var:=BOARD_$(strip $(call to-upper,$(my_custom_image_name)))_KERNEL_MODULES |
| 101 | my_custom_image_modules:=$($(my_custom_image_modules_var)) |
| 102 | my_custom_image_modules_dep:=$(if $(my_custom_image_modules),$(my_custom_image_modules) $(DEPMOD),) |
| 103 | $(my_built_custom_image): PRIVATE_KERNEL_MODULES := $(my_custom_image_modules) |
| 104 | $(my_built_custom_image): PRIVATE_IMAGE_NAME := $(my_custom_image_name) |
| 105 | $(my_built_custom_image): $(INTERNAL_USERIMAGES_DEPS) $(my_built_modules) $(my_image_copy_files) $(my_custom_image_modules_dep) \ |
Ying Wang | 5fcf109 | 2015-03-12 18:30:39 -0700 | [diff] [blame] | 106 | $(CUSTOM_IMAGE_DICT_FILE) |
| 107 | @echo "Build image $@" |
| 108 | $(hide) rm -rf $(PRIVATE_INTERMEDIATES) && mkdir -p $(PRIVATE_INTERMEDIATES) |
| 109 | $(hide) rm -rf $(PRIVATE_STAGING_DIR) && mkdir -p $(PRIVATE_STAGING_DIR) |
| 110 | # Copy all the files. |
| 111 | $(hide) $(foreach p,$(PRIVATE_COPY_PAIRS),\ |
| 112 | $(eval pair := $(subst :,$(space),$(p)))\ |
| 113 | mkdir -p $(dir $(word 2,$(pair)));\ |
| 114 | cp -Rf $(word 1,$(pair)) $(word 2,$(pair));) |
Howard Chen | 0c5f1e5 | 2017-06-23 12:40:23 +0800 | [diff] [blame] | 115 | $(if $(PRIVATE_KERNEL_MODULES), \ |
| 116 | $(call build-image-kernel-modules,$(PRIVATE_KERNEL_MODULES),$(PRIVATE_STAGING_DIR),$(PRIVATE_IMAGE_NAME)/,$(call intermediates-dir-for,PACKAGING,depmod_$(PRIVATE_IMAGE_NAME)))) |
Ying Wang | 5fcf109 | 2015-03-12 18:30:39 -0700 | [diff] [blame] | 117 | $(if $($(PRIVATE_PICKUP_FILES)),$(hide) cp -Rf $(PRIVATE_PICKUP_FILES) $(PRIVATE_STAGING_DIR)) |
| 118 | # Generate the dict. |
| 119 | $(hide) echo "# For all accepted properties, see BuildImage() in tools/releasetools/build_image.py" > $(PRIVATE_INTERMEDIATES)/image_info.txt |
| 120 | $(hide) echo "mount_point=$(PRIVATE_MOUNT_POINT)" >> $(PRIVATE_INTERMEDIATES)/image_info.txt |
Bowgo Tsai | 7ea994b | 2017-05-19 23:44:26 +0800 | [diff] [blame] | 121 | $(hide) echo "partition_name=$(PRIVATE_MOUNT_POINT)" >> $(PRIVATE_INTERMEDIATES)/image_info.txt |
Ying Wang | 5fcf109 | 2015-03-12 18:30:39 -0700 | [diff] [blame] | 122 | $(hide) echo "fs_type=$(PRIVATE_FILE_SYSTEM_TYPE)" >> $(PRIVATE_INTERMEDIATES)/image_info.txt |
| 123 | $(hide) echo "partition_size=$(PRIVATE_PARTITION_SIZE)" >> $(PRIVATE_INTERMEDIATES)/image_info.txt |
Vikram Dattu | 29e88b8 | 2016-12-16 09:45:19 +0100 | [diff] [blame] | 124 | $(hide) echo "ext_mkuserimg=$(notdir $(MKEXTUSERIMG))" >> $(PRIVATE_INTERMEDIATES)/image_info.txt |
Ying Wang | 7d51a40 | 2015-03-20 17:43:02 -0700 | [diff] [blame] | 125 | $(if $(PRIVATE_SELINUX),$(hide) echo "selinux_fc=$(SELINUX_FC)" >> $(PRIVATE_INTERMEDIATES)/image_info.txt) |
| 126 | $(if $(PRIVATE_SUPPORT_VERITY),\ |
| 127 | $(hide) echo "verity=$(PRIVATE_SUPPORT_VERITY)" >> $(PRIVATE_INTERMEDIATES)/image_info.txt;\ |
| 128 | echo "verity_key=$(PRIVATE_VERITY_KEY)" >> $(PRIVATE_INTERMEDIATES)/image_info.txt;\ |
| 129 | echo "verity_signer_cmd=$(VERITY_SIGNER)" >> $(PRIVATE_INTERMEDIATES)/image_info.txt;\ |
| 130 | echo "verity_block_device=$(PRIVATE_VERITY_BLOCK_DEVICE)" >> $(PRIVATE_INTERMEDIATES)/image_info.txt) |
Bowgo Tsai | 8ec2a1c | 2017-07-14 21:10:41 +0800 | [diff] [blame^] | 131 | $(if $(PRIVATE_SUPPORT_VERITY_FEC),\ |
| 132 | $(hide) echo "verity_fec=$(PRIVATE_SUPPORT_VERITY_FEC)" >> $(PRIVATE_INTERMEDIATES)/image_info.txt) |
Bowgo Tsai | 7ea994b | 2017-05-19 23:44:26 +0800 | [diff] [blame] | 133 | $(hide) echo "avb_avbtool=$(PRIVATE_AVB_AVBTOOL)" >> $(PRIVATE_INTERMEDIATES)/image_info.txt |
| 134 | $(hide) echo "avb_signing_args=$(PRIVATE_AVB_SIGNING_ARGS)" >> $(PRIVATE_INTERMEDIATES)/image_info.txt |
| 135 | $(if $(PRIVATE_AVB_HASH_ENABLE),\ |
| 136 | $(hide) echo "avb_hash_enable=$(PRIVATE_AVB_HASH_ENABLE)" >> $(PRIVATE_INTERMEDIATES)/image_info.txt;\ |
| 137 | echo "avb_add_hash_footer_args=$(PRIVATE_AVB_ADD_HASH_FOOTER_ARGS)" >> $(PRIVATE_INTERMEDIATES)/image_info.txt) |
| 138 | $(if $(PRIVATE_AVB_HASHTREE_ENABLE),\ |
| 139 | $(hide) echo "avb_hashtree_enable=$(PRIVATE_AVB_HASHTREE_ENABLE)" >> $(PRIVATE_INTERMEDIATES)/image_info.txt;\ |
Sen Jiang | 5b0fe18 | 2017-05-15 14:16:52 -0700 | [diff] [blame] | 140 | echo "avb_add_hashtree_footer_args=$(PRIVATE_AVB_ADD_HASHTREE_FOOTER_ARGS)" >> $(PRIVATE_INTERMEDIATES)/image_info.txt) |
Ying Wang | 5fcf109 | 2015-03-12 18:30:39 -0700 | [diff] [blame] | 141 | $(if $(PRIVATE_DICT_FILE),\ |
| 142 | $(hide) echo "# Properties from $(PRIVATE_DICT_FILE)" >> $(PRIVATE_INTERMEDIATES)/image_info.txt;\ |
Ying Wang | 7d51a40 | 2015-03-20 17:43:02 -0700 | [diff] [blame] | 143 | cat $(PRIVATE_DICT_FILE) >> $(PRIVATE_INTERMEDIATES)/image_info.txt) |
Ying Wang | 5fcf109 | 2015-03-12 18:30:39 -0700 | [diff] [blame] | 144 | # Generate the image. |
leozwang | 92eb570 | 2015-06-17 00:29:33 -0700 | [diff] [blame] | 145 | $(if $(filter oem,$(PRIVATE_MOUNT_POINT)), \ |
| 146 | $(hide) echo "oem.buildnumber=$(BUILD_NUMBER)" >> $(PRIVATE_STAGING_DIR)/oem.prop) |
Ying Wang | 5fcf109 | 2015-03-12 18:30:39 -0700 | [diff] [blame] | 147 | $(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \ |
| 148 | ./build/tools/releasetools/build_image.py \ |
Thierry Strudel | 6b74f21 | 2015-07-13 14:40:36 -0700 | [diff] [blame] | 149 | $(PRIVATE_STAGING_DIR) $(PRIVATE_INTERMEDIATES)/image_info.txt $@ $(TARGET_OUT) |
Ying Wang | 5fcf109 | 2015-03-12 18:30:39 -0700 | [diff] [blame] | 150 | |
| 151 | my_installed_custom_image := $(PRODUCT_OUT)/$(notdir $(my_built_custom_image)) |
| 152 | $(my_installed_custom_image) : $(my_built_custom_image) |
| 153 | $(call copy-file-to-new-target-with-cp) |
| 154 | |
| 155 | .PHONY: $(my_custom_image_name) |
| 156 | custom_images $(my_custom_image_name) : $(my_installed_custom_image) |
| 157 | |
| 158 | # Archive the built image. |
| 159 | $(call dist-for-goals, $(my_custom_image_name) custom_images,$(my_installed_custom_image)) |
Dan Willemsen | f354b17 | 2017-06-20 15:57:32 -0700 | [diff] [blame] | 160 | |
| 161 | my_staging_dir := |
| 162 | my_built_modules := |
| 163 | my_copy_dest := |
| 164 | my_copy_pairs := |
| 165 | my_pickup_files := |