Enforce RROs for all the build-time ROs
This CL is to generate every static RRO package for its target package
automatically at build-time.
BOARD_ENFORCE_RRO build variable is added to specify whether enforcing
RRO is required or not.
BOARD_ENFORCE_RRO_EXEMPT_SOURCES build variable is added to specify
the module list of which item should be exempt from enforcing RRO.
Test: tested on bullhead and sailfish
Bug: 34097942
Change-Id: I455b2ce34e66c57a540c299b5e378b7c4e78d5b8
diff --git a/core/package_internal.mk b/core/package_internal.mk
index b47b351..e26b3c7 100644
--- a/core/package_internal.mk
+++ b/core/package_internal.mk
@@ -96,7 +96,32 @@
$(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), \
@@ -652,3 +677,27 @@
# 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
\ No newline at end of file