From 37ad8c4f646854c8f1f6257c04c417f237789990 Mon Sep 17 00:00:00 2001 From: Yifan Hong Date: Thu, 29 Mar 2018 10:51:48 -0700 Subject: [PATCH 1/4] matrix: define LOCAL_MODULE for all modules. Test: m framework_compatibility_matrix -j Bug: 65028233 Change-Id: Iab61771b8ebe0e1b771404bb25a0a04caf399585 Merged-In: Iab61771b8ebe0e1b771404bb25a0a04caf399585 --- compatibility_matrices/Android.mk | 8 ++++++-- compatibility_matrices/compatibility_matrix.mk | 8 ++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/compatibility_matrices/Android.mk b/compatibility_matrices/Android.mk index a10d808d33..35a390a93a 100644 --- a/compatibility_matrices/Android.mk +++ b/compatibility_matrices/Android.mk @@ -30,18 +30,21 @@ LOCAL_GEN_FILE_DEPENDENCIES := include $(CLEAR_VARS) +LOCAL_MODULE := framework_compatibility_matrix.legacy.xml LOCAL_MODULE_STEM := compatibility_matrix.legacy.xml LOCAL_SRC_FILES := $(LOCAL_MODULE_STEM) LOCAL_KERNEL_VERSIONS := 3.18.0 4.4.0 4.9.0 include $(BUILD_FRAMEWORK_COMPATIBILITY_MATRIX) include $(CLEAR_VARS) +LOCAL_MODULE := framework_compatibility_matrix.1.xml LOCAL_MODULE_STEM := compatibility_matrix.1.xml LOCAL_SRC_FILES := $(LOCAL_MODULE_STEM) LOCAL_KERNEL_VERSIONS := 3.18.0 4.4.0 4.9.0 include $(BUILD_FRAMEWORK_COMPATIBILITY_MATRIX) include $(CLEAR_VARS) +LOCAL_MODULE := framework_compatibility_matrix.2.xml LOCAL_MODULE_STEM := compatibility_matrix.2.xml LOCAL_SRC_FILES := $(LOCAL_MODULE_STEM) LOCAL_KERNEL_VERSIONS := 3.18.0 4.4.0 4.9.0 @@ -50,6 +53,7 @@ include $(BUILD_FRAMEWORK_COMPATIBILITY_MATRIX) # TODO(b/72409164): STOPSHIP: update kernel version requirements include $(CLEAR_VARS) +LOCAL_MODULE := framework_compatibility_matrix.current.xml LOCAL_MODULE_STEM := compatibility_matrix.current.xml LOCAL_SRC_FILES := $(LOCAL_MODULE_STEM) LOCAL_KERNEL_VERSIONS := 4.4.0 4.9.0 @@ -58,9 +62,9 @@ include $(BUILD_FRAMEWORK_COMPATIBILITY_MATRIX) # Framework Compatibility Matrix (common to all FCM versions) include $(CLEAR_VARS) -LOCAL_MODULE_STEM := compatibility_matrix.device.xml -# define LOCAL_MODULE and LOCAL_MODULE_CLASS for local-generated-sources-dir. LOCAL_MODULE := framework_compatibility_matrix.device.xml +LOCAL_MODULE_STEM := compatibility_matrix.device.xml +# define LOCAL_MODULE_CLASS for local-generated-sources-dir. LOCAL_MODULE_CLASS := ETC ifndef DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE diff --git a/compatibility_matrices/compatibility_matrix.mk b/compatibility_matrices/compatibility_matrix.mk index abc679656b..2d6c5d0057 100644 --- a/compatibility_matrices/compatibility_matrix.mk +++ b/compatibility_matrices/compatibility_matrix.mk @@ -25,12 +25,12 @@ endef # $(warning $(call remove-minor-revision,3.18.0)) -ifndef LOCAL_MODULE_STEM -$(error LOCAL_MODULE_STEM must be defined.) +ifndef LOCAL_MODULE +$(error LOCAL_MODULE must be defined.) endif -ifndef LOCAL_MODULE -LOCAL_MODULE := framework_$(LOCAL_MODULE_STEM) +ifndef LOCAL_MODULE_STEM +LOCAL_MODULE_STEM := $(LOCAL_MODULE) endif ifndef LOCAL_MODULE_CLASS From b2a83d17706752c2c54b5a571f2194db8c803829 Mon Sep 17 00:00:00 2001 From: Yifan Hong Date: Thu, 29 Mar 2018 10:57:12 -0700 Subject: [PATCH 2/4] matrix: IGNORE_TARGET_FCM_VERSION -> VINTF_* All "private" environment variables to assemble_vintf (inserted by the build rules, not build system variables) should have this prefix (to distinguish against, e.g. PRODUCT_ENFORCE_VINTF_MANIFEST) Test: m framework_compatibility_matrix -j Bug: 65028233 Change-Id: Iaefa88cefc0918fb86235ea6fcd8e367cbd82788 Merged-In: Iaefa88cefc0918fb86235ea6fcd8e367cbd82788 --- compatibility_matrices/Android.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compatibility_matrices/Android.mk b/compatibility_matrices/Android.mk index 35a390a93a..d24d8e9ff8 100644 --- a/compatibility_matrices/Android.mk +++ b/compatibility_matrices/Android.mk @@ -82,7 +82,7 @@ my_gen_check_manifest := $(local-generated-sources-dir)/manifest.check.xml $(my_gen_check_manifest): PRIVATE_SRC_FILE := $(my_manifest_src_file) $(my_gen_check_manifest): $(my_manifest_src_file) $(HOST_OUT_EXECUTABLES)/assemble_vintf BOARD_SEPOLICY_VERS=$(BOARD_SEPOLICY_VERS) \ - IGNORE_TARGET_FCM_VERSION=true \ + VINTF_IGNORE_TARGET_FCM_VERSION=true \ $(HOST_OUT_EXECUTABLES)/assemble_vintf -i $(PRIVATE_SRC_FILE) -o $@ LOCAL_GEN_FILE_DEPENDENCIES += $(my_gen_check_manifest) From 4d6c4a96ae8a720d906cc744dfe5bd5ca9b037be Mon Sep 17 00:00:00 2001 From: Yifan Hong Date: Thu, 29 Mar 2018 10:06:10 -0700 Subject: [PATCH 3/4] matrix: generalize case for LOCAL_WARN_REQUIRED_HALS Add LOCAL_ASSEMBLE_VINTF_ENV_VARS_OVERRIDE and LOCAL_ASSEMBLE_VINTF_ERROR_MESSAGE for a more generic case. Test: m framework_compatibility_matrix.xml -j Bug: 65028233 Change-Id: Iec142d161daa18122e7a6daebb82c7230cb98ba6 Merged-In: Iec142d161daa18122e7a6daebb82c7230cb98ba6 --- compatibility_matrices/Android.mk | 6 ++-- .../compatibility_matrix.mk | 34 ++++++++++++++++--- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/compatibility_matrices/Android.mk b/compatibility_matrices/Android.mk index d24d8e9ff8..dd7165d55f 100644 --- a/compatibility_matrices/Android.mk +++ b/compatibility_matrices/Android.mk @@ -21,8 +21,9 @@ BUILD_FRAMEWORK_COMPATIBILITY_MATRIX := $(LOCAL_PATH)/compatibility_matrix.mk # Clear potential input variables to BUILD_FRAMEWORK_COMPATIBILITY_MATRIX LOCAL_ADD_VBMETA_VERSION := LOCAL_ASSEMBLE_VINTF_ENV_VARS := +LOCAL_ASSEMBLE_VINTF_ENV_VARS_OVERRIDE := +LOCAL_ASSEMBLE_VINTF_ERROR_MESSAGE := LOCAL_ASSEMBLE_VINTF_FLAGS := -LOCAL_WARN_REQUIRED_HALS := LOCAL_KERNEL_VERSIONS := LOCAL_GEN_FILE_DEPENDENCIES := @@ -99,7 +100,8 @@ LOCAL_ASSEMBLE_VINTF_ENV_VARS := \ PLATFORM_SEPOLICY_VERSION \ PLATFORM_SEPOLICY_COMPAT_VERSIONS -LOCAL_WARN_REQUIRED_HALS := \ +LOCAL_ASSEMBLE_VINTF_ENV_VARS_OVERRIDE := PRODUCT_ENFORCE_VINTF_MANIFEST=true +LOCAL_ASSEMBLE_VINTF_ERROR_MESSAGE := \ "Error: DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX cannot contain required HALs." include $(BUILD_FRAMEWORK_COMPATIBILITY_MATRIX) diff --git a/compatibility_matrices/compatibility_matrix.mk b/compatibility_matrices/compatibility_matrix.mk index 2d6c5d0057..6dc2b4fb69 100644 --- a/compatibility_matrices/compatibility_matrix.mk +++ b/compatibility_matrices/compatibility_matrix.mk @@ -25,6 +25,27 @@ endef # $(warning $(call remove-minor-revision,3.18.0)) +##### Input Variables: +# LOCAL_MODULE: required. Module name for the build system. +# LOCAL_MODULE_CLASS: optional. Default is ETC. +# LOCAL_MODULE_PATH: optional. Path of output file. Default is $(TARGET_OUT)/etc/vintf. +# LOCAL_MODULE_STEM: optional. Name of output file. Default is $(LOCAL_MODULE). +# LOCAL_SRC_FILES: required. Local source files provided to assemble_vintf +# (command line argument -i). +# LOCAL_GENERATED_SOURCES: optional. Global source files provided to assemble_vintf +# (command line argument -i). +# +# LOCAL_ADD_VBMETA_VERSION: Use AVBTOOL to add avb version to the output matrix +# (corresponds to tag) +# LOCAL_ASSEMBLE_VINTF_ENV_VARS: Add a list of environment variable names from global variables in +# the build system that is lazily evaluated (e.g. PRODUCT_ENFORCE_VINTF_MANIFEST). +# LOCAL_ASSEMBLE_VINTF_ENV_VARS_OVERRIDE: Add a list of environment variables that is local to +# assemble_vintf invocation. Format is "VINTF_ENFORCE_NO_UNUSED_HALS=true". +# LOCAL_ASSEMBLE_VINTF_FLAGS: Add additional command line arguments to assemble_vintf invocation. +# LOCAL_KERNEL_VERSIONS: Parse kernel configurations and add to the output matrix +# (corresponds to tags.) +# LOCAL_GEN_FILE_DEPENDENCIES: A list of additional dependencies for the generated file. + ifndef LOCAL_MODULE $(error LOCAL_MODULE must be defined.) endif @@ -81,13 +102,17 @@ my_matrix_src_files := \ $(addprefix $(LOCAL_PATH)/,$(LOCAL_SRC_FILES)) \ $(LOCAL_GENERATED_SOURCES) -ifneq (,$(strip $(LOCAL_WARN_REQUIRED_HALS))) -$(GEN): PRIVATE_ADDITIONAL_ENV_VARS += PRODUCT_ENFORCE_VINTF_MANIFEST=true -$(GEN): PRIVATE_COMMAND_TAIL := || (echo $(strip $(LOCAL_WARN_REQUIRED_HALS)) && false) +$(GEN): PRIVATE_ADDITIONAL_ENV_VARS := $(LOCAL_ASSEMBLE_VINTF_ENV_VARS_OVERRIDE) + +ifneq (,$(strip $(LOCAL_ASSEMBLE_VINTF_ERROR_MESSAGE))) +$(GEN): PRIVATE_COMMAND_TAIL := || (echo $(strip $(LOCAL_ASSEMBLE_VINTF_ERROR_MESSAGE)) && false) endif $(GEN): PRIVATE_SRC_FILES := $(my_matrix_src_files) $(GEN): $(my_matrix_src_files) $(HOST_OUT_EXECUTABLES)/assemble_vintf + $(foreach varname,$(PRIVATE_ENV_VARS),\ + $(if $(findstring $(varname),$(PRIVATE_ADDITIONAL_ENV_VARS)),\ + $(error $(varname) should not be overridden by LOCAL_ASSEMBLE_VINTF_ENV_VARS_OVERRIDE.))) $(foreach varname,$(PRIVATE_ENV_VARS),$(varname)="$($(varname))") \ $(PRIVATE_ADDITIONAL_ENV_VARS) \ $(HOST_OUT_EXECUTABLES)/assemble_vintf \ @@ -101,8 +126,9 @@ LOCAL_GENERATED_SOURCES := LOCAL_ADD_VBMETA_VERSION := LOCAL_ASSEMBLE_VINTF_ENV_VARS := +LOCAL_ASSEMBLE_VINTF_ENV_VARS_OVERRIDE := +LOCAL_ASSEMBLE_VINTF_ERROR_MESSAGE := LOCAL_ASSEMBLE_VINTF_FLAGS := -LOCAL_WARN_REQUIRED_HALS := LOCAL_KERNEL_VERSIONS := LOCAL_GEN_FILE_DEPENDENCIES := my_matrix_src_files := From e62d476e3dac6c8c38ebc87ca11e25b4fdf396fa Mon Sep 17 00:00:00 2001 From: Yifan Hong Date: Wed, 28 Mar 2018 10:27:10 -0700 Subject: [PATCH 4/4] matrix: ENFORCE_NO_UNUSED_HALS Enforce that all hals in the device manifest are in framework compatibility matrix -- at build time. Bug: 65028233 Test: build a phone without DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX. Change-Id: Ibf220f80ca3621ddbf8288d372d5f40336e45248 Merged-In: Ibf220f80ca3621ddbf8288d372d5f40336e45248 --- compatibility_matrices/Android.mk | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/compatibility_matrices/Android.mk b/compatibility_matrices/Android.mk index dd7165d55f..23be7de2f9 100644 --- a/compatibility_matrices/Android.mk +++ b/compatibility_matrices/Android.mk @@ -127,6 +127,14 @@ endif LOCAL_ASSEMBLE_VINTF_ENV_VARS := PRODUCT_ENFORCE_VINTF_MANIFEST +# TODO(b/65028233): Enforce no "unused HALs" for devices that does not define +# DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE as well +ifeq (true,$(strip $(PRODUCT_ENFORCE_VINTF_MANIFEST))) +ifdef DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE +LOCAL_ASSEMBLE_VINTF_ENV_VARS_OVERRIDE := VINTF_ENFORCE_NO_UNUSED_HALS=true +endif +endif + include $(BUILD_FRAMEWORK_COMPATIBILITY_MATRIX) BUILT_SYSTEM_COMPATIBILITY_MATRIX := $(LOCAL_BUILT_MODULE)