blob: 6dc2b4fb69b3f73a6b373f9a1594b44212b794a9 [file] [log] [blame]
Yifan Hong44c9b2e2018-01-23 14:34:41 -08001#
2# Copyright (C) 2018 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
Yifan Hong94b7d2c2018-01-23 15:38:49 -080017###########################################################
18## Remove minor revision from a kernel version. For example,
19## 3.18.0 becomes 3.18.
20## $(1): kernel version
21###########################################################
22define remove-minor-revision
23$(strip $(subst $(space),.,$(wordlist 1,2,$(subst .,$(space),$(strip $(1))))))
24endef
25
26# $(warning $(call remove-minor-revision,3.18.0))
27
Yifan Hong3693fe42018-03-29 10:06:10 -070028##### Input Variables:
29# LOCAL_MODULE: required. Module name for the build system.
30# LOCAL_MODULE_CLASS: optional. Default is ETC.
31# LOCAL_MODULE_PATH: optional. Path of output file. Default is $(TARGET_OUT)/etc/vintf.
32# LOCAL_MODULE_STEM: optional. Name of output file. Default is $(LOCAL_MODULE).
33# LOCAL_SRC_FILES: required. Local source files provided to assemble_vintf
34# (command line argument -i).
35# LOCAL_GENERATED_SOURCES: optional. Global source files provided to assemble_vintf
36# (command line argument -i).
37#
38# LOCAL_ADD_VBMETA_VERSION: Use AVBTOOL to add avb version to the output matrix
39# (corresponds to <avb><vbmeta-version> tag)
40# LOCAL_ASSEMBLE_VINTF_ENV_VARS: Add a list of environment variable names from global variables in
41# the build system that is lazily evaluated (e.g. PRODUCT_ENFORCE_VINTF_MANIFEST).
42# LOCAL_ASSEMBLE_VINTF_ENV_VARS_OVERRIDE: Add a list of environment variables that is local to
43# assemble_vintf invocation. Format is "VINTF_ENFORCE_NO_UNUSED_HALS=true".
44# LOCAL_ASSEMBLE_VINTF_FLAGS: Add additional command line arguments to assemble_vintf invocation.
45# LOCAL_KERNEL_VERSIONS: Parse kernel configurations and add to the output matrix
46# (corresponds to <kernel> tags.)
47# LOCAL_GEN_FILE_DEPENDENCIES: A list of additional dependencies for the generated file.
48
Yifan Hong7831d432018-03-29 10:51:48 -070049ifndef LOCAL_MODULE
50$(error LOCAL_MODULE must be defined.)
Yifan Hong44c9b2e2018-01-23 14:34:41 -080051endif
52
Yifan Hong7831d432018-03-29 10:51:48 -070053ifndef LOCAL_MODULE_STEM
54LOCAL_MODULE_STEM := $(LOCAL_MODULE)
Yifan Hongfee9ea42018-03-23 12:03:33 -070055endif
56
57ifndef LOCAL_MODULE_CLASS
Yifan Hong44c9b2e2018-01-23 14:34:41 -080058LOCAL_MODULE_CLASS := ETC
Yifan Hongfee9ea42018-03-23 12:03:33 -070059endif
Yifan Hong44c9b2e2018-01-23 14:34:41 -080060
61ifndef LOCAL_MODULE_PATH
62LOCAL_MODULE_PATH := $(TARGET_OUT)/etc/vintf
63endif
64
65GEN := $(local-generated-sources-dir)/$(LOCAL_MODULE_STEM)
66
67$(GEN): PRIVATE_ENV_VARS := $(LOCAL_ASSEMBLE_VINTF_ENV_VARS)
68$(GEN): PRIVATE_FLAGS := $(LOCAL_ASSEMBLE_VINTF_FLAGS)
69
70$(GEN): $(LOCAL_GEN_FILE_DEPENDENCIES)
71
72ifeq (true,$(strip $(LOCAL_ADD_VBMETA_VERSION)))
73ifeq (true,$(BOARD_AVB_ENABLE))
74$(GEN): $(AVBTOOL)
75# INTERNAL_AVB_SYSTEM_SIGNING_ARGS consists of BOARD_AVB_SYSTEM_KEY_PATH and
76# BOARD_AVB_SYSTEM_ALGORITHM. We should add the dependency of key path, which
77# is a file, here.
78$(GEN): $(BOARD_AVB_SYSTEM_KEY_PATH)
79# Use deferred assignment (=) instead of immediate assignment (:=).
80# Otherwise, cannot get INTERNAL_AVB_SYSTEM_SIGNING_ARGS.
81$(GEN): FRAMEWORK_VBMETA_VERSION = $$("$(AVBTOOL)" add_hashtree_footer \
82 --print_required_libavb_version \
83 $(INTERNAL_AVB_SYSTEM_SIGNING_ARGS) \
84 $(BOARD_AVB_SYSTEM_ADD_HASHTREE_FOOTER_ARGS))
85else
86$(GEN): FRAMEWORK_VBMETA_VERSION := 0.0
87endif # BOARD_AVB_ENABLE
88$(GEN): PRIVATE_ENV_VARS += FRAMEWORK_VBMETA_VERSION
89endif # LOCAL_ADD_VBMETA_VERSION
90
91ifneq (,$(strip $(LOCAL_KERNEL_VERSIONS)))
92$(GEN): PRIVATE_KERNEL_CONFIG_DATA := kernel/configs
93$(GEN): PRIVATE_KERNEL_VERSIONS := $(LOCAL_KERNEL_VERSIONS)
94$(GEN): $(foreach version,$(PRIVATE_KERNEL_VERSIONS),\
Yifan Hong94b7d2c2018-01-23 15:38:49 -080095 $(wildcard $(PRIVATE_KERNEL_CONFIG_DATA)/android-$(call remove-minor-revision,$(version))/android-base*.cfg))
Yifan Hong44c9b2e2018-01-23 14:34:41 -080096$(GEN): PRIVATE_FLAGS += $(foreach version,$(PRIVATE_KERNEL_VERSIONS),\
97 --kernel=$(version):$(call normalize-path-list,\
Yifan Hong94b7d2c2018-01-23 15:38:49 -080098 $(wildcard $(PRIVATE_KERNEL_CONFIG_DATA)/android-$(call remove-minor-revision,$(version))/android-base*.cfg)))
Yifan Hong44c9b2e2018-01-23 14:34:41 -080099endif
100
101my_matrix_src_files := \
102 $(addprefix $(LOCAL_PATH)/,$(LOCAL_SRC_FILES)) \
103 $(LOCAL_GENERATED_SOURCES)
104
Yifan Hong3693fe42018-03-29 10:06:10 -0700105$(GEN): PRIVATE_ADDITIONAL_ENV_VARS := $(LOCAL_ASSEMBLE_VINTF_ENV_VARS_OVERRIDE)
106
107ifneq (,$(strip $(LOCAL_ASSEMBLE_VINTF_ERROR_MESSAGE)))
108$(GEN): PRIVATE_COMMAND_TAIL := || (echo $(strip $(LOCAL_ASSEMBLE_VINTF_ERROR_MESSAGE)) && false)
Yifan Hongfee9ea42018-03-23 12:03:33 -0700109endif
110
Yifan Hong44c9b2e2018-01-23 14:34:41 -0800111$(GEN): PRIVATE_SRC_FILES := $(my_matrix_src_files)
112$(GEN): $(my_matrix_src_files) $(HOST_OUT_EXECUTABLES)/assemble_vintf
Yifan Hong3693fe42018-03-29 10:06:10 -0700113 $(foreach varname,$(PRIVATE_ENV_VARS),\
114 $(if $(findstring $(varname),$(PRIVATE_ADDITIONAL_ENV_VARS)),\
115 $(error $(varname) should not be overridden by LOCAL_ASSEMBLE_VINTF_ENV_VARS_OVERRIDE.)))
Yifan Hongb426af32018-02-02 12:47:48 -0800116 $(foreach varname,$(PRIVATE_ENV_VARS),$(varname)="$($(varname))") \
Yifan Hongfee9ea42018-03-23 12:03:33 -0700117 $(PRIVATE_ADDITIONAL_ENV_VARS) \
Yifan Hong44c9b2e2018-01-23 14:34:41 -0800118 $(HOST_OUT_EXECUTABLES)/assemble_vintf \
119 -i $(call normalize-path-list,$(PRIVATE_SRC_FILES)) \
120 -o $@ \
Yifan Hongfee9ea42018-03-23 12:03:33 -0700121 $(PRIVATE_FLAGS) $(PRIVATE_COMMAND_TAIL)
Yifan Hong44c9b2e2018-01-23 14:34:41 -0800122
123LOCAL_PREBUILT_MODULE_FILE := $(GEN)
124LOCAL_SRC_FILES :=
125LOCAL_GENERATED_SOURCES :=
126
127LOCAL_ADD_VBMETA_VERSION :=
128LOCAL_ASSEMBLE_VINTF_ENV_VARS :=
Yifan Hong3693fe42018-03-29 10:06:10 -0700129LOCAL_ASSEMBLE_VINTF_ENV_VARS_OVERRIDE :=
130LOCAL_ASSEMBLE_VINTF_ERROR_MESSAGE :=
Yifan Hong44c9b2e2018-01-23 14:34:41 -0800131LOCAL_ASSEMBLE_VINTF_FLAGS :=
132LOCAL_KERNEL_VERSIONS :=
133LOCAL_GEN_FILE_DEPENDENCIES :=
134my_matrix_src_files :=
135
136include $(BUILD_PREBUILT)
Yifan Hong94b7d2c2018-01-23 15:38:49 -0800137
138remove-minor-revision :=