blob: 719279c4a640c0f96f5d1511439ddb190fc4192f [file] [log] [blame]
Ying Wang5fcf1092015-03-12 18:30:39 -07001#
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
23include $(my_custom_imag_makefile)
24
25my_custom_image_name := $(basename $(notdir $(my_custom_imag_makefile)))
26
27intermediates := $(call intermediates-dir-for,PACKAGING,$(my_custom_image_name))
28my_built_custom_image := $(intermediates)/$(my_custom_image_name).img
Ying Wang7d51a402015-03-20 17:43:02 -070029my_staging_dir := $(intermediates)/$(CUSTOM_IMAGE_MOUNT_POINT)
Ying Wang5fcf1092015-03-12 18:30:39 -070030
31# Collect CUSTOM_IMAGE_MODULES's installd files and their PICKUP_FILES.
32my_built_modules :=
33my_copy_pairs :=
34my_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.
58my_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 Tsai7ea994b2017-05-19 23:44:26 +080065ifndef CUSTOM_IMAGE_AVB_KEY_PATH
66# If key path isn't specified, use the default signing args.
67my_avb_signing_args := $(INTERNAL_AVB_SIGNING_ARGS)
68else
69my_avb_signing_args := \
70 --algorithm $(CUSTOM_IMAGE_AVB_ALGORITHM) --key $(CUSTOM_IMAGE_AVB_KEY_PATH)
71endif
72
Ying Wang5fcf1092015-03-12 18:30:39 -070073$(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 Wang7d51a402015-03-20 17:43:02 -070080$(my_built_custom_image): PRIVATE_SELINUX := $(CUSTOM_IMAGE_SELINUX)
81$(my_built_custom_image): PRIVATE_SUPPORT_VERITY := $(CUSTOM_IMAGE_SUPPORT_VERITY)
Bowgo Tsai8ec2a1c2017-07-14 21:10:41 +080082$(my_built_custom_image): PRIVATE_SUPPORT_VERITY_FEC := $(CUSTOM_IMAGE_SUPPORT_VERITY_FEC)
Ying Wang7d51a402015-03-20 17:43:02 -070083$(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 Wang5fcf1092015-03-12 18:30:39 -070085$(my_built_custom_image): PRIVATE_DICT_FILE := $(CUSTOM_IMAGE_DICT_FILE)
Bowgo Tsai7ea994b2017-05-19 23:44:26 +080086$(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 Jiang5b0fe182017-05-15 14:16:52 -070091$(my_built_custom_image): PRIVATE_AVB_ADD_HASHTREE_FOOTER_ARGS := $(CUSTOM_IMAGE_AVB_ADD_HASHTREE_FOOTER_ARGS)
Bowgo Tsai7ea994b2017-05-19 23:44:26 +080092ifeq (true,$(filter true, $(CUSTOM_IMAGE_AVB_HASH_ENABLE) $(CUSTOM_IMAGE_AVB_HASHTREE_ENABLE)))
Sen Jiang5b0fe182017-05-15 14:16:52 -070093 $(my_built_custom_image): $(AVBTOOL)
Bowgo Tsai7ea994b2017-05-19 23:44:26 +080094else 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 Jiang5b0fe182017-05-15 14:16:52 -070096endif
Bowgo Tsai8ec2a1c2017-07-14 21:10:41 +080097ifeq (true,$(CUSTOM_IMAGE_SUPPORT_VERITY_FEC))
98 $(my_built_custom_image): $(FEC)
99endif
Howard Chen0c5f1e52017-06-23 12:40:23 +0800100my_custom_image_modules_var:=BOARD_$(strip $(call to-upper,$(my_custom_image_name)))_KERNEL_MODULES
101my_custom_image_modules:=$($(my_custom_image_modules_var))
102my_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 Wang5fcf1092015-03-12 18:30:39 -0700106 $(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 Chen0c5f1e52017-06-23 12:40:23 +0800115 $(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 Wang5fcf1092015-03-12 18:30:39 -0700117 $(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 Tsai7ea994b2017-05-19 23:44:26 +0800121 $(hide) echo "partition_name=$(PRIVATE_MOUNT_POINT)" >> $(PRIVATE_INTERMEDIATES)/image_info.txt
Ying Wang5fcf1092015-03-12 18:30:39 -0700122 $(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 Dattu29e88b82016-12-16 09:45:19 +0100124 $(hide) echo "ext_mkuserimg=$(notdir $(MKEXTUSERIMG))" >> $(PRIVATE_INTERMEDIATES)/image_info.txt
Ying Wang7d51a402015-03-20 17:43:02 -0700125 $(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 Tsai8ec2a1c2017-07-14 21:10:41 +0800131 $(if $(PRIVATE_SUPPORT_VERITY_FEC),\
132 $(hide) echo "verity_fec=$(PRIVATE_SUPPORT_VERITY_FEC)" >> $(PRIVATE_INTERMEDIATES)/image_info.txt)
Bowgo Tsai7ea994b2017-05-19 23:44:26 +0800133 $(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 Jiang5b0fe182017-05-15 14:16:52 -0700140 echo "avb_add_hashtree_footer_args=$(PRIVATE_AVB_ADD_HASHTREE_FOOTER_ARGS)" >> $(PRIVATE_INTERMEDIATES)/image_info.txt)
Ying Wang5fcf1092015-03-12 18:30:39 -0700141 $(if $(PRIVATE_DICT_FILE),\
142 $(hide) echo "# Properties from $(PRIVATE_DICT_FILE)" >> $(PRIVATE_INTERMEDIATES)/image_info.txt;\
Ying Wang7d51a402015-03-20 17:43:02 -0700143 cat $(PRIVATE_DICT_FILE) >> $(PRIVATE_INTERMEDIATES)/image_info.txt)
Ying Wang5fcf1092015-03-12 18:30:39 -0700144 # Generate the image.
leozwang92eb5702015-06-17 00:29:33 -0700145 $(if $(filter oem,$(PRIVATE_MOUNT_POINT)), \
146 $(hide) echo "oem.buildnumber=$(BUILD_NUMBER)" >> $(PRIVATE_STAGING_DIR)/oem.prop)
Ying Wang5fcf1092015-03-12 18:30:39 -0700147 $(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \
148 ./build/tools/releasetools/build_image.py \
Thierry Strudel6b74f212015-07-13 14:40:36 -0700149 $(PRIVATE_STAGING_DIR) $(PRIVATE_INTERMEDIATES)/image_info.txt $@ $(TARGET_OUT)
Ying Wang5fcf1092015-03-12 18:30:39 -0700150
151my_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)
156custom_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 Willemsenf354b172017-06-20 15:57:32 -0700160
161my_staging_dir :=
162my_built_modules :=
163my_copy_dest :=
164my_copy_pairs :=
165my_pickup_files :=