Record module type statistics

Creates a build_system_stats.txt build artifact that contains statistics
on how many BUILD_* modules are defined in a build. Also writes out
information about the Soong module types sent from the Soong build.

Change-Id: Iaf0c7062f542dc6942b5349854f3d49267cac4a5
This commit is contained in:
Dan Willemsen 2016-07-25 16:03:53 -07:00
parent 854dd1ffcf
commit 1684b32620
30 changed files with 82 additions and 0 deletions

View file

@ -386,7 +386,15 @@ ifneq (,$(TARGET_BUILD_APPS))
endif endif
# ----------------------------------------------------------------- # -----------------------------------------------------------------
# build system stats
BUILD_SYSTEM_STATS := $(PRODUCT_OUT)/build_system_stats.txt
$(BUILD_SYSTEM_STATS):
@rm -f $@
@$(foreach s,$(STATS.MODULE_TYPE),echo "modules_type_make,$(s),$(words $(STATS.MODULE_TYPE.$(s)))" >>$@;)
@$(foreach s,$(STATS.SOONG_MODULE_TYPE),echo "modules_type_soong,$(s),$(STATS.SOONG_MODULE_TYPE.$(s))" >>$@;)
$(call dist-for-goals,droidcore,$(BUILD_SYSTEM_STATS))
# -----------------------------------------------------------------
# The dev key is used to sign this package, and as the key required # The dev key is used to sign this package, and as the key required
# for future OTA packages installed by this system. Actual product # for future OTA packages installed by this system. Actual product
# deliverables will be re-signed by hand. We expect this file to # deliverables will be re-signed by hand. We expect this file to

View file

@ -14,6 +14,9 @@
# limitations under the License. # limitations under the License.
# #
# Catch users that directly include base_rules.mk
$(call record-module-type,base_rules)
# Users can define base-rules-hook in their buildspec.mk to perform # Users can define base-rules-hook in their buildspec.mk to perform
# arbitrary operations as each module is included. # arbitrary operations as each module is included.
ifdef base-rules-hook ifdef base-rules-hook

View file

@ -215,6 +215,7 @@ LOCAL_COPY_TO_INTERMEDIATE_LIBRARIES:=
LOCAL_LOGTAGS_FILES:= LOCAL_LOGTAGS_FILES:=
LOCAL_EXTRACT_APK:= LOCAL_EXTRACT_APK:=
LOCAL_EXTRACT_DPI_APK:= LOCAL_EXTRACT_DPI_APK:=
LOCAL_RECORDED_MODULE_TYPE:=
# arch specific variables # arch specific variables
LOCAL_SRC_FILES_$(TARGET_ARCH):= LOCAL_SRC_FILES_$(TARGET_ARCH):=

View file

@ -1,6 +1,7 @@
########################################################### ###########################################################
## Copy headers to the install tree ## Copy headers to the install tree
########################################################### ###########################################################
$(call record-module-type,COPY_HEADERS)
ifneq ($(strip $(LOCAL_IS_HOST_MODULE)),) ifneq ($(strip $(LOCAL_IS_HOST_MODULE)),)
my_prefix := HOST_ my_prefix := HOST_
else else

View file

@ -3022,6 +3022,48 @@ $(strip $(if $(filter $(TARGET_ARCH),$(1)),$(TARGET_ARCH),\
$(if $(filter $(TARGET_2ND_ARCH),$(1)),$(TARGET_2ND_ARCH),$(if $(1),none)))) $(if $(filter $(TARGET_2ND_ARCH),$(1)),$(TARGET_2ND_ARCH),$(if $(1),none))))
endef endef
# ###############################################################
# Set up statistics gathering
# ###############################################################
STATS.MODULE_TYPE := \
HOST_STATIC_LIBRARY \
HOST_SHARED_LIBRARY \
STATIC_LIBRARY \
SHARED_LIBRARY \
EXECUTABLE \
HOST_EXECUTABLE \
PACKAGE \
PHONY_PACKAGE \
HOST_PREBUILT \
PREBUILT \
MULTI_PREBUILT \
JAVA_LIBRARY \
STATIC_JAVA_LIBRARY \
HOST_JAVA_LIBRARY \
DROIDDOC \
COPY_HEADERS \
NATIVE_TEST \
NATIVE_BENCHMARK \
HOST_NATIVE_TEST \
FUZZ_TEST \
HOST_FUZZ_TEST \
STATIC_TEST_LIBRARY \
HOST_STATIC_TEST_LIBRARY \
NOTICE_FILE \
HOST_DALVIK_JAVA_LIBRARY \
HOST_DALVIK_STATIC_JAVA_LIBRARY \
base_rules
$(foreach $(s),$(STATS.MODULE_TYPE),$(eval STATS.MODULE_TYPE.$(s) :=))
define record-module-type
$(strip $(if $(LOCAL_RECORDED_MODULE_TYPE),,
$(if $(filter-out $(SOONG_ANDROID_MK),$(LOCAL_MODULE_MAKEFILE)),
$(if $(filter $(1),$(STATS.MODULE_TYPE)),
$(eval LOCAL_RECORDED_MODULE_TYPE := true)
$(eval STATS.MODULE_TYPE.$(1) += 1),
$(error Invalid module type: $(1))))))
endef
########################################################### ###########################################################
## Other includes ## Other includes
########################################################### ###########################################################

View file

@ -14,6 +14,7 @@
# limitations under the License. # limitations under the License.
# #
$(call record-module-type,DROIDDOC)
## ##
## ##
## Common to both droiddoc and javadoc ## Common to both droiddoc and javadoc

View file

@ -16,6 +16,7 @@ ifneq ($(filter address,$(SANITIZE_TARGET)),)
endif endif
ifneq (true,$(my_skip_this_target)) ifneq (true,$(my_skip_this_target))
$(call record-module-type,EXECUTABLE)
ifeq ($(TARGET_TRANSLATE_2ND_ARCH),true) ifeq ($(TARGET_TRANSLATE_2ND_ARCH),true)
# If a native test explicity specifies to build only for the translation arch, # If a native test explicity specifies to build only for the translation arch,

View file

@ -2,6 +2,7 @@
## A thin wrapper around BUILD_EXECUTABLE ## A thin wrapper around BUILD_EXECUTABLE
## Common flags for fuzz tests are added. ## Common flags for fuzz tests are added.
########################################### ###########################################
$(call record-module-type,FUZZ_TEST)
ifdef LOCAL_SDK_VERSION ifdef LOCAL_SDK_VERSION
$(error $(LOCAL_PATH): $(LOCAL_MODULE): NDK fuzz tests are not supported.) $(error $(LOCAL_PATH): $(LOCAL_MODULE): NDK fuzz tests are not supported.)

View file

@ -13,6 +13,7 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
# #
$(call record-module-type,HOST_DALVIK_JAVA_LIBRARY)
# #
# Rules for building a host dalvik java library. These libraries # Rules for building a host dalvik java library. These libraries

View file

@ -13,6 +13,7 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
# #
$(call record-module-type,HOST_DALVIK_STATIC_JAVA_LIBRARY)
# #
# Rules for building a host dalvik static java library. # Rules for building a host dalvik static java library.

View file

@ -1,3 +1,4 @@
$(call record-module-type,HOST_EXECUTABLE)
LOCAL_IS_HOST_MODULE := true LOCAL_IS_HOST_MODULE := true
my_prefix := HOST_ my_prefix := HOST_
LOCAL_HOST_PREFIX := LOCAL_HOST_PREFIX :=

View file

@ -2,6 +2,7 @@
## A thin wrapper around BUILD_HOST_EXECUTABLE ## A thin wrapper around BUILD_HOST_EXECUTABLE
## Common flags for host fuzz tests are added. ## Common flags for host fuzz tests are added.
################################################ ################################################
$(call record-module-type,HOST_FUZZ_TEST)
LOCAL_CFLAGS += -fsanitize-coverage=edge,indirect-calls,8bit-counters,trace-cmp LOCAL_CFLAGS += -fsanitize-coverage=edge,indirect-calls,8bit-counters,trace-cmp
LOCAL_STATIC_LIBRARIES += libLLVMFuzzer LOCAL_STATIC_LIBRARIES += libLLVMFuzzer

View file

@ -14,6 +14,8 @@
# limitations under the License. # limitations under the License.
# #
$(call record-module-type,HOST_JAVA_LIBRARY)
# #
# Standard rules for building a host java library. # Standard rules for building a host java library.
# #

View file

@ -2,6 +2,7 @@
## A thin wrapper around BUILD_HOST_EXECUTABLE ## A thin wrapper around BUILD_HOST_EXECUTABLE
## Common flags for host native tests are added. ## Common flags for host native tests are added.
################################################ ################################################
$(call record-module-type,HOST_NATIVE_TEST)
ifdef LOCAL_MODULE_CLASS ifdef LOCAL_MODULE_CLASS
ifneq ($(LOCAL_MODULE_CLASS),NATIVE_TESTS) ifneq ($(LOCAL_MODULE_CLASS),NATIVE_TESTS)

View file

@ -14,5 +14,6 @@
# limitations under the License. # limitations under the License.
# #
$(call record-module-type,HOST_PREBUILT)
LOCAL_IS_HOST_MODULE := true LOCAL_IS_HOST_MODULE := true
include $(BUILD_MULTI_PREBUILT) include $(BUILD_MULTI_PREBUILT)

View file

@ -1,3 +1,4 @@
$(call record-module-type,HOST_SHARED_LIBRARY)
LOCAL_IS_HOST_MODULE := true LOCAL_IS_HOST_MODULE := true
my_prefix := HOST_ my_prefix := HOST_
LOCAL_HOST_PREFIX := LOCAL_HOST_PREFIX :=

View file

@ -1,3 +1,4 @@
$(call record-module-type,HOST_STATIC_LIBRARY)
LOCAL_IS_HOST_MODULE := true LOCAL_IS_HOST_MODULE := true
my_prefix := HOST_ my_prefix := HOST_
LOCAL_HOST_PREFIX := LOCAL_HOST_PREFIX :=

View file

@ -2,6 +2,7 @@
## A thin wrapper around BUILD_HOST_STATIC_LIBRARY ## A thin wrapper around BUILD_HOST_STATIC_LIBRARY
## Common flags for host native tests are added. ## Common flags for host native tests are added.
################################################## ##################################################
$(call record-module-type,HOST_STATIC_TEST_LIBRARY)
include $(BUILD_SYSTEM)/host_test_internal.mk include $(BUILD_SYSTEM)/host_test_internal.mk

View file

@ -2,6 +2,7 @@
## Standard rules for building a java library. ## Standard rules for building a java library.
## ##
########################################################### ###########################################################
$(call record-module-type,JAVA_LIBRARY)
ifdef LOCAL_IS_HOST_MODULE ifdef LOCAL_IS_HOST_MODULE
$(error $(LOCAL_PATH): Host java libraries must use BUILD_HOST_JAVA_LIBRARY) $(error $(LOCAL_PATH): Host java libraries must use BUILD_HOST_JAVA_LIBRARY)

View file

@ -14,6 +14,7 @@
# limitations under the License. # limitations under the License.
# #
$(call record-module-type,MULTI_PREBUILT)
ifneq ($(LOCAL_MODULE)$(LOCAL_MODULE_CLASS),) ifneq ($(LOCAL_MODULE)$(LOCAL_MODULE_CLASS),)
$(error $(LOCAL_PATH): LOCAL_MODULE or LOCAL_MODULE_CLASS not needed by \ $(error $(LOCAL_PATH): LOCAL_MODULE or LOCAL_MODULE_CLASS not needed by \
BUILD_MULTI_PREBUILT, use BUILD_PREBUILT instead!) BUILD_MULTI_PREBUILT, use BUILD_PREBUILT instead!)

View file

@ -2,6 +2,7 @@
## A thin wrapper around BUILD_EXECUTABLE ## A thin wrapper around BUILD_EXECUTABLE
## Common flags for native benchmarks are added. ## Common flags for native benchmarks are added.
########################################### ###########################################
$(call record-module-type,NATIVE_BENCHMARK)
LOCAL_STATIC_LIBRARIES += libgoogle-benchmark LOCAL_STATIC_LIBRARIES += libgoogle-benchmark

View file

@ -2,6 +2,7 @@
## A thin wrapper around BUILD_EXECUTABLE ## A thin wrapper around BUILD_EXECUTABLE
## Common flags for native tests are added. ## Common flags for native tests are added.
########################################### ###########################################
$(call record-module-type,NATIVE_TEST)
ifdef LOCAL_MODULE_CLASS ifdef LOCAL_MODULE_CLASS
ifneq ($(LOCAL_MODULE_CLASS),NATIVE_TESTS) ifneq ($(LOCAL_MODULE_CLASS),NATIVE_TESTS)

View file

@ -1,6 +1,7 @@
########################################################### ###########################################################
## Track NOTICE files ## Track NOTICE files
########################################################### ###########################################################
$(call record-module-type,NOTICE_FILE)
ifneq ($(LOCAL_NOTICE_FILE),) ifneq ($(LOCAL_NOTICE_FILE),)
notice_file:=$(strip $(LOCAL_NOTICE_FILE)) notice_file:=$(strip $(LOCAL_NOTICE_FILE))

View file

@ -2,6 +2,8 @@
# TARGET_ARCH and TARGET_2ND_ARCH. # TARGET_ARCH and TARGET_2ND_ARCH.
# To build it for TARGET_2ND_ARCH in a 64bit product, use "LOCAL_MULTILIB := 32". # To build it for TARGET_2ND_ARCH in a 64bit product, use "LOCAL_MULTILIB := 32".
$(call record-module-type,PACKAGE)
ifeq ($(TARGET_TRANSLATE_2ND_ARCH),true) ifeq ($(TARGET_TRANSLATE_2ND_ARCH),true)
LOCAL_MULTILIB := first LOCAL_MULTILIB := first
endif endif

View file

@ -1,3 +1,4 @@
$(call record-module-type,PHONY_PACKAGE)
ifneq ($(strip $(LOCAL_SRC_FILES)),) ifneq ($(strip $(LOCAL_SRC_FILES)),)
$(error LOCAL_SRC_FILES are not allowed for phony packages) $(error LOCAL_SRC_FILES are not allowed for phony packages)
endif endif

View file

@ -5,6 +5,7 @@
## None. ## None.
## ##
########################################################### ###########################################################
$(call record-module-type,PREBUILT)
ifdef LOCAL_IS_HOST_MODULE ifdef LOCAL_IS_HOST_MODULE
my_prefix := HOST_ my_prefix := HOST_

View file

@ -1,3 +1,4 @@
$(call record-module-type,SHARED_LIBRARY)
my_prefix := TARGET_ my_prefix := TARGET_
include $(BUILD_SYSTEM)/multilib.mk include $(BUILD_SYSTEM)/multilib.mk

View file

@ -19,6 +19,7 @@
# classpaths. They can, however, be included wholesale in # classpaths. They can, however, be included wholesale in
# other java modules. # other java modules.
$(call record-module-type,STATIC_JAVA_LIBRARY)
LOCAL_UNINSTALLABLE_MODULE := true LOCAL_UNINSTALLABLE_MODULE := true
LOCAL_IS_STATIC_JAVA_LIBRARY := true LOCAL_IS_STATIC_JAVA_LIBRARY := true
LOCAL_MODULE_CLASS := JAVA_LIBRARIES LOCAL_MODULE_CLASS := JAVA_LIBRARIES

View file

@ -1,3 +1,4 @@
$(call record-module-type,STATIC_LIBRARY)
my_prefix := TARGET_ my_prefix := TARGET_
include $(BUILD_SYSTEM)/multilib.mk include $(BUILD_SYSTEM)/multilib.mk

View file

@ -2,6 +2,7 @@
## A thin wrapper around BUILD_STATIC_LIBRARY ## A thin wrapper around BUILD_STATIC_LIBRARY
## Common flags for native tests are added. ## Common flags for native tests are added.
############################################# #############################################
$(call record-module-type,STATIC_TEST_LIBRARY)
include $(BUILD_SYSTEM)/target_test_internal.mk include $(BUILD_SYSTEM)/target_test_internal.mk