Merge "Enforce RROs for all the build-time ROs"

am: 4b4e203a0b

Change-Id: I20085da5a39005733c9f10e751cef58ae20a9f7d
This commit is contained in:
Jaekyun Seok
2017-03-30 03:43:31 +00:00
committed by android-build-merger
5 changed files with 192 additions and 0 deletions

View File

@@ -3306,3 +3306,40 @@ include $(BUILD_SYSTEM)/distdir.mk
# sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
# -e '/^$$/ d' -e 's/$$/ :/' < $*.d >> $*.P; \
# rm -f $*.d
###########################################################
# Append the information to generate a RRO package for the
# source module.
#
# $(1): Source module name.
# $(2): Whether $(3) is a manifest package name or not.
# $(3): Manifest package name if $(2) is true.
# Otherwise, android manifest file path of the
# source module.
# $(4): Whether LOCAL_EXPORT_PACKAGE_RESOURCES is set or
# not for the source module.
# $(5): Resource overlay list.
###########################################################
define append_enforce_rro_sources
$(eval ENFORCE_RRO_SOURCES += \
$(strip $(1))||$(strip $(2))||$(strip $(3))||$(strip $(4))||$(call normalize-path-list, $(strip $(5))))
endef
###########################################################
# Generate all RRO packages for source modules stored in
# ENFORCE_RRO_SOURCES
###########################################################
define generate_all_enforce_rro_packages
$(foreach source,$(ENFORCE_RRO_SOURCES), \
$(eval _o := $(subst ||,$(space),$(source))) \
$(eval enforce_rro_source_module := $(word 1,$(_o))) \
$(eval enforce_rro_source_is_manifest_package_name := $(word 2,$(_o))) \
$(eval enforce_rro_source_manifest_package_info := $(word 3,$(_o))) \
$(eval enforce_rro_use_res_lib := $(word 4,$(_o))) \
$(eval enforce_rro_source_overlays := $(subst :, ,$(word 5,$(_o)))) \
$(eval enforce_rro_module := $(enforce_rro_source_module)__auto_generated_rro) \
$(eval include $(BUILD_SYSTEM)/generate_enforce_rro.mk) \
$(eval ALL_MODULES.$(enforce_rro_source_module).REQUIRED += $(enforce_rro_module)) \
)
endef

View File

@@ -0,0 +1,30 @@
include $(CLEAR_VARS)
LOCAL_PACKAGE_NAME := $(enforce_rro_module)
intermediates := $(call intermediates-dir-for,APPS,$(LOCAL_PACKAGE_NAME),,COMMON)
rro_android_manifest_file := $(intermediates)/AndroidManifest.xml
ifeq (true,$(enforce_rro_source_is_manifest_package_name))
$(rro_android_manifest_file): PRIVATE_PACKAGE_NAME := $(enforce_rro_source_manifest_package_info)
$(rro_android_manifest_file): build/tools/generate-enforce-rro-android-manifest.py
$(hide) build/tools/generate-enforce-rro-android-manifest.py -u -p $(PRIVATE_PACKAGE_NAME) -o $@
else
$(rro_android_manifest_file): PRIVATE_SOURCE_MANIFEST_FILE := $(enforce_rro_source_manifest_package_info)
$(rro_android_manifest_file): $(enforce_rro_source_manifest_package_info) build/tools/generate-enforce-rro-android-manifest.py
$(hide) build/tools/generate-enforce-rro-android-manifest.py -p $(PRIVATE_SOURCE_MANIFEST_FILE) -o $@
endif
LOCAL_PATH:= $(intermediates)
ifeq ($(enforce_rro_use_res_lib),true)
LOCAL_RES_LIBRARIES := $(enforce_rro_source_module)
endif
LOCAL_FULL_MANIFEST_FILE := $(rro_android_manifest_file)
LOCAL_CERTIFICATE := platform
LOCAL_AAPT_FLAGS += --auto-add-overlay
LOCAL_RESOURCE_DIR := $(enforce_rro_source_overlays)
include $(BUILD_RRO_PACKAGE)

View File

@@ -497,6 +497,10 @@ ADDITIONAL_DEFAULT_PROPERTIES := $(strip $(ADDITIONAL_DEFAULT_PROPERTIES))
ADDITIONAL_BUILD_PROPERTIES := $(strip $(ADDITIONAL_BUILD_PROPERTIES))
.KATI_READONLY := ADDITIONAL_BUILD_PROPERTIES
ifeq ($(BOARD_ENFORCE_RRO),true)
ENFORCE_RRO_SOURCES :=
endif
ifneq ($(ONE_SHOT_MAKEFILE),)
# We've probably been invoked by the "mm" shell function
# with a subdirectory's makefile.
@@ -563,6 +567,13 @@ endif # ONE_SHOT_MAKEFILE
# All module makefiles have been included at this point.
# -------------------------------------------------------------------
# -------------------------------------------------------------------
# Enforce to generate all RRO packages for modules having resource
# overlays.
# -------------------------------------------------------------------
ifeq ($(BOARD_ENFORCE_RRO),true)
$(call generate_all_enforce_rro_packages)
endif
# -------------------------------------------------------------------
# Fix up CUSTOM_MODULES to refer to installed files rather than

View File

@@ -100,7 +100,32 @@ package_resource_overlays := $(strip \
$(wildcard $(foreach dir, $(DEVICE_PACKAGE_OVERLAYS), \
$(addprefix $(dir)/, $(LOCAL_RESOURCE_DIR)))))
enforce_rro_enabled :=
ifeq ($(BOARD_ENFORCE_RRO),true)
ifeq (,$(filter $(LOCAL_PACKAGE_NAME), $(BOARD_ENFORCE_RRO_EXEMPT_SOURCES)))
ifneq ($(package_resource_overlays),)
enforce_rro_enabled := true
endif
endif
ifdef enforce_rro_enabled
ifeq (,$(LOCAL_MODULE_PATH))
ifeq (true,$(LOCAL_PROPRIETARY_MODULE))
enforce_rro_enabled :=
else ifeq (true,$(LOCAL_OEM_MODULE))
enforce_rro_enabled :=
else ifeq (true,$(LOCAL_ODM_MODULE))
enforce_rro_enabled :=
endif
else ifeq ($(filter $(TARGET_OUT)/%,$(LOCAL_MODULE_PATH)),)
enforce_rro_enabled :=
endif
endif
endif
ifndef enforce_rro_enabled
LOCAL_RESOURCE_DIR := $(package_resource_overlays) $(LOCAL_RESOURCE_DIR)
endif
all_assets := $(strip \
$(foreach dir, $(LOCAL_ASSET_DIR), \
@@ -645,3 +670,27 @@ endif # skip_definition
# Reset internal variables.
all_res_assets :=
ifdef enforce_rro_enabled
ifdef LOCAL_EXPORT_PACKAGE_RESOURCES
enforce_rro_use_res_lib := true
else
enforce_rro_use_res_lib := false
endif
ifdef LOCAL_MANIFEST_PACKAGE_NAME
enforce_rro_is_manifest_package_name := true
enforce_rro_manifest_package_info := $(LOCAL_MANIFEST_PACKAGE_NAME)
else
enforce_rro_is_manifest_package_name := false
enforce_rro_manifest_package_info := $(full_android_manifest)
endif
$(call append_enforce_rro_sources, \
$(my_register_name), \
$(enforce_rro_is_manifest_package_name), \
$(enforce_rro_manifest_package_info), \
$(enforce_rro_use_res_lib), \
$(package_resource_overlays) \
)
endif # enforce_rro_enabled