From 956dcccf76bb176b45cc098808cb7ac5dcb5e8f7 Mon Sep 17 00:00:00 2001 From: Ying Wang Date: Fri, 28 Aug 2015 11:47:03 -0700 Subject: [PATCH] Move Java stuff out of base_rules.mk - Moved the target-only .aidl and .logtag rules to java.mk. - Moved the .proto rules, Java library dependency calculation, Java resource processing and Java-related target-specific and global variables setup to a new java_common.java, which is shared by both target and host Java modules. - Minor cleanup for the moved code. Bug: 23597357 Change-Id: Ic3eb72e26bb1a663e5739abe0a935f96b88bc352 --- core/base_rules.mk | 403 ------------------------------- core/host_dalvik_java_library.mk | 11 +- core/host_java_library.mk | 6 +- core/java.mk | 82 +++++-- core/java_common.mk | 332 +++++++++++++++++++++++++ 5 files changed, 409 insertions(+), 425 deletions(-) create mode 100644 core/java_common.mk diff --git a/core/base_rules.mk b/core/base_rules.mk index 3fedabc60c..e4a662631c 100644 --- a/core/base_rules.mk +++ b/core/base_rules.mk @@ -195,295 +195,6 @@ endif LOCAL_INTERMEDIATE_TARGETS += $(LOCAL_BUILT_MODULE) -########################################################### -## AIDL: Compile .aidl files to .java -########################################################### - -aidl_sources := $(filter %.aidl,$(LOCAL_SRC_FILES)) - -ifneq ($(strip $(aidl_sources)),) - -aidl_java_sources := $(patsubst %.aidl,%.java,$(addprefix $(intermediates.COMMON)/src/, $(aidl_sources))) -aidl_sources := $(addprefix $(TOP_DIR)$(LOCAL_PATH)/, $(aidl_sources)) - -aidl_preprocess_import := -LOCAL_SDK_VERSION:=$(strip $(LOCAL_SDK_VERSION)) -ifdef LOCAL_SDK_VERSION -ifneq ($(filter current system_current, $(LOCAL_SDK_VERSION)$(TARGET_BUILD_APPS)),) - # LOCAL_SDK_VERSION is current and no TARGET_BUILD_APPS - aidl_preprocess_import := $(TARGET_OUT_COMMON_INTERMEDIATES)/framework.aidl -else - aidl_preprocess_import := $(HISTORICAL_SDK_VERSIONS_ROOT)/$(LOCAL_SDK_VERSION)/framework.aidl -endif # not current or system_current -else -# build against the platform. -LOCAL_AIDL_INCLUDES += $(FRAMEWORKS_BASE_JAVA_SRC_DIRS) -endif # LOCAL_SDK_VERSION -$(aidl_java_sources): PRIVATE_AIDL_FLAGS := -b $(addprefix -p,$(aidl_preprocess_import)) -I$(LOCAL_PATH) -I$(LOCAL_PATH)/src $(addprefix -I,$(LOCAL_AIDL_INCLUDES)) - -$(aidl_java_sources): $(intermediates.COMMON)/src/%.java: \ - $(TOPDIR)$(LOCAL_PATH)/%.aidl \ - $(LOCAL_MODULE_MAKEFILE) \ - $(LOCAL_ADDITIONAL_DEPENDENCIES) \ - $(AIDL) \ - $(aidl_preprocess_import) - $(transform-aidl-to-java) --include $(aidl_java_sources:%.java=%.P) - -else -aidl_java_sources := -endif - -########################################################### -## logtags: Add .logtags files to global list, emit java source -########################################################### - -logtags_sources := $(filter %.logtags,$(LOCAL_SRC_FILES)) - -ifneq ($(strip $(logtags_sources)),) - -event_log_tags := $(addprefix $(LOCAL_PATH)/,$(logtags_sources)) - -# Emit a java source file with constants for the tags, if -# LOCAL_MODULE_CLASS is "APPS" or "JAVA_LIBRARIES". -ifneq ($(filter $(LOCAL_MODULE_CLASS),APPS JAVA_LIBRARIES),) - -logtags_java_sources := $(patsubst %.logtags,%.java,$(addprefix $(intermediates.COMMON)/src/, $(logtags_sources))) -logtags_sources := $(addprefix $(TOP_DIR)$(LOCAL_PATH)/, $(logtags_sources)) - -$(logtags_java_sources): $(intermediates.COMMON)/src/%.java: $(TOPDIR)$(LOCAL_PATH)/%.logtags $(TARGET_OUT_COMMON_INTERMEDIATES)/all-event-log-tags.txt - $(transform-logtags-to-java) - -endif - -else -logtags_java_sources := -event_log_tags := -endif - -########################################################### -## .proto files: Compile proto files to .java -########################################################### -proto_sources := $(filter %.proto,$(LOCAL_SRC_FILES)) -# Because names of the .java files compiled from .proto files are unknown until the -# .proto files are compiled, we use a timestamp file as depedency. -proto_java_sources_file_stamp := -ifneq ($(proto_sources),) -proto_sources_fullpath := $(addprefix $(TOP_DIR)$(LOCAL_PATH)/, $(proto_sources)) -# By putting the generated java files into $(LOCAL_INTERMEDIATE_SOURCE_DIR), they will be -# automatically found by the java compiling function transform-java-to-classes.jar. -ifneq ($(LOCAL_INTERMEDIATE_SOURCE_DIR),) -proto_java_intemediate_dir := $(LOCAL_INTERMEDIATE_SOURCE_DIR)/proto -else -# LOCAL_INTERMEDIATE_SOURCE_DIR may be not defined in non-java modules. -proto_java_intemediate_dir := $(intermediates)/proto -endif -proto_java_sources_file_stamp := $(proto_java_intemediate_dir)/Proto.stamp -proto_java_sources_dir := $(proto_java_intemediate_dir)/src - -$(proto_java_sources_file_stamp): PRIVATE_PROTO_INCLUDES := $(TOP) -$(proto_java_sources_file_stamp): PRIVATE_PROTO_SRC_FILES := $(proto_sources_fullpath) -$(proto_java_sources_file_stamp): PRIVATE_PROTO_JAVA_OUTPUT_DIR := $(proto_java_sources_dir) -ifeq ($(LOCAL_PROTOC_OPTIMIZE_TYPE),micro) -$(proto_java_sources_file_stamp): PRIVATE_PROTO_JAVA_OUTPUT_OPTION := --javamicro_out -else - ifeq ($(LOCAL_PROTOC_OPTIMIZE_TYPE),nano) -$(proto_java_sources_file_stamp): PRIVATE_PROTO_JAVA_OUTPUT_OPTION := --javanano_out - else -$(proto_java_sources_file_stamp): PRIVATE_PROTO_JAVA_OUTPUT_OPTION := --java_out - endif -endif -$(proto_java_sources_file_stamp): PRIVATE_PROTOC_FLAGS := $(LOCAL_PROTOC_FLAGS) -$(proto_java_sources_file_stamp): PRIVATE_PROTO_JAVA_OUTPUT_PARAMS := $(LOCAL_PROTO_JAVA_OUTPUT_PARAMS) -$(proto_java_sources_file_stamp) : $(proto_sources_fullpath) $(PROTOC) - $(call transform-proto-to-java) - -#TODO: protoc should output the dependencies introduced by imports. - -LOCAL_INTERMEDIATE_TARGETS += $(proto_java_sources_file_stamp) -endif # proto_sources - - -########################################################### -## Java: Compile .java files to .class -########################################################### -#TODO: pull this into java.make once host and target are combined - -java_sources := $(addprefix $(TOP_DIR)$(LOCAL_PATH)/, $(filter %.java,$(LOCAL_SRC_FILES))) $(aidl_java_sources) $(logtags_java_sources) \ - $(filter %.java,$(LOCAL_GENERATED_SOURCES)) -all_java_sources := $(java_sources) $(addprefix $($(my_prefix)OUT_COMMON_INTERMEDIATES)/, $(filter %.java,$(LOCAL_INTERMEDIATE_SOURCES))) - -## Java resources ######################################### - -# Look for resource files in any specified directories. -# Non-java and non-doc files will be picked up as resources -# and included in the output jar file. -java_resource_file_groups := - -LOCAL_JAVA_RESOURCE_DIRS := $(strip $(LOCAL_JAVA_RESOURCE_DIRS)) -ifneq ($(LOCAL_JAVA_RESOURCE_DIRS),) - # This makes a list of words like - # ::: :: : - # where each of the files is relative to the directory it's grouped with. - # Directories that don't contain any resource files will result in groups - # that end with a colon, and they are stripped out in the next step. - java_resource_file_groups += \ - $(foreach dir,$(LOCAL_JAVA_RESOURCE_DIRS), \ - $(subst $(space),:,$(strip \ - $(TOP_DIR)$(LOCAL_PATH)/$(dir): \ - $(patsubst ./%,%,$(shell cd $(TOP_DIR)$(LOCAL_PATH)/$(dir) && \ - find . \ - -type d -a -name ".svn" -prune -o \ - -type f \ - -a \! -name "*.java" \ - -a \! -name "package.html" \ - -a \! -name "overview.html" \ - -a \! -name ".*.swp" \ - -a \! -name ".DS_Store" \ - -a \! -name "*~" \ - -print \ - )) \ - )) \ - ) - java_resource_file_groups := $(filter-out %:,$(java_resource_file_groups)) -endif # LOCAL_JAVA_RESOURCE_DIRS - -LOCAL_JAVA_RESOURCE_FILES := $(strip $(LOCAL_JAVA_RESOURCE_FILES)) -ifneq ($(LOCAL_JAVA_RESOURCE_FILES),) - java_resource_file_groups += \ - $(foreach f,$(LOCAL_JAVA_RESOURCE_FILES), \ - $(patsubst %/,%,$(dir $(f)))::$(notdir $(f)) \ - ) -endif # LOCAL_JAVA_RESOURCE_FILES - -ifdef java_resource_file_groups - # The full paths to all resources, used for dependencies. - java_resource_sources := \ - $(foreach group,$(java_resource_file_groups), \ - $(addprefix $(word 1,$(subst :,$(space),$(group)))/, \ - $(wordlist 2,9999,$(subst :,$(space),$(group))) \ - ) \ - ) - # The arguments to jar that will include these files in a jar file. - # Quote the file name to handle special characters (such as #) correctly. - extra_jar_args := \ - $(foreach group,$(java_resource_file_groups), \ - $(addprefix -C "$(word 1,$(subst :,$(space),$(group)))" , \ - $(foreach w, $(wordlist 2,9999,$(subst :,$(space),$(group))), "$(w)" ) \ - ) \ - ) - java_resource_file_groups := -else - java_resource_sources := - extra_jar_args := -endif # java_resource_file_groups - -## PRIVATE java vars ###################################### -# LOCAL_SOURCE_FILES_ALL_GENERATED is set only if the module does not have static source files, -# but generated source files in its LOCAL_INTERMEDIATE_SOURCE_DIR. -# You have to set up the dependency in some other way. -need_compile_java := $(strip $(all_java_sources)$(all_res_assets))$(LOCAL_STATIC_JAVA_LIBRARIES)$(filter true,$(LOCAL_SOURCE_FILES_ALL_GENERATED)) -ifdef need_compile_java - -full_static_java_libs := \ - $(foreach lib,$(LOCAL_STATIC_JAVA_LIBRARIES), \ - $(call intermediates-dir-for, \ - JAVA_LIBRARIES,$(lib),$(LOCAL_IS_HOST_MODULE),COMMON)/javalib.jar) - -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_INSTALL_DIR := $(dir $(LOCAL_INSTALLED_MODULE)) -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_CLASS_INTERMEDIATES_DIR := $(intermediates)/classes -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_SOURCE_INTERMEDIATES_DIR := $(intermediates)/src -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JAVA_SOURCES := $(all_java_sources) -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JAVA_OBJECTS := $(patsubst %.java,%.class,$(LOCAL_SRC_FILES)) -ifeq ($(my_prefix),TARGET_) -ifeq ($(LOCAL_SDK_VERSION),) -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH := -bootclasspath $(call java-lib-files,core-libart) -else -ifeq ($(LOCAL_SDK_VERSION)$(TARGET_BUILD_APPS),current) -# LOCAL_SDK_VERSION is current and no TARGET_BUILD_APPS. -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH := -bootclasspath $(call java-lib-files,android_stubs_current) -else ifeq ($(LOCAL_SDK_VERSION)$(TARGET_BUILD_APPS),system_current) -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH := -bootclasspath $(call java-lib-files,android_system_stubs_current) -else -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH := -bootclasspath $(call java-lib-files,sdk_v$(LOCAL_SDK_VERSION)) -endif # current or system_current -endif # LOCAL_SDK_VERSION -endif # TARGET_ -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_RESOURCE_DIR := $(LOCAL_RESOURCE_DIR) -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_ASSET_DIR := $(LOCAL_ASSET_DIR) -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_STATIC_JAVA_LIBRARIES := $(full_static_java_libs) - -# full_java_libs: The list of files that should be used as the classpath. -# Using this list as a dependency list WILL NOT WORK. -# full_java_lib_deps: Should be specified as a prerequisite of this module -# to guarantee that the files in full_java_libs will -# be up-to-date. -ifdef LOCAL_IS_HOST_MODULE -ifeq ($(USE_CORE_LIB_BOOTCLASSPATH),true) -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH := -bootclasspath $(call java-lib-files,core-libart-hostdex,$(LOCAL_IS_HOST_MODULE)) - -full_shared_java_libs := $(call java-lib-files,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE)) -full_java_lib_deps := $(call java-lib-deps,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE)) \ - $(full_shared_java_libs) -else -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH := - -full_shared_java_libs := $(addprefix $(HOST_OUT_JAVA_LIBRARIES)/,\ - $(addsuffix $(COMMON_JAVA_PACKAGE_SUFFIX),$(LOCAL_JAVA_LIBRARIES))) -full_java_lib_deps := $(full_shared_java_libs) -endif # USE_CORE_LIB_BOOTCLASSPATH -else # !LOCAL_IS_HOST_MODULE -full_shared_java_libs := $(call java-lib-files,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE)) -full_java_lib_deps := $(call java-lib-deps,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE)) -endif # !LOCAL_IS_HOST_MODULE -full_java_libs := $(full_shared_java_libs) $(full_static_java_libs) $(LOCAL_CLASSPATH) -full_java_lib_deps += $(full_static_java_libs) $(LOCAL_CLASSPATH) - -# This is set by packages that are linking to other packages that export -# shared libraries, allowing them to make use of the code in the linked apk. -apk_libraries := $(sort $(LOCAL_APK_LIBRARIES) $(LOCAL_RES_LIBRARIES)) -ifneq ($(apk_libraries),) - link_apk_libraries := \ - $(foreach lib,$(apk_libraries), \ - $(call intermediates-dir-for, \ - APPS,$(lib),,COMMON)/classes.jar) - - # link against the jar with full original names (before proguard processing). - full_shared_java_libs += $(link_apk_libraries) - full_java_libs += $(link_apk_libraries) - full_java_lib_deps += $(link_apk_libraries) -endif - -# This is set by packages that contain instrumentation, allowing them to -# link against the package they are instrumenting. Currently only one such -# package is allowed. -LOCAL_INSTRUMENTATION_FOR := $(strip $(LOCAL_INSTRUMENTATION_FOR)) -ifdef LOCAL_INSTRUMENTATION_FOR - ifneq ($(words $(LOCAL_INSTRUMENTATION_FOR)),1) - $(error \ - $(LOCAL_PATH): Multiple LOCAL_INSTRUMENTATION_FOR members defined) - endif - - link_instr_intermediates_dir.COMMON := $(call intermediates-dir-for, \ - APPS,$(LOCAL_INSTRUMENTATION_FOR),,COMMON) - # link against the jar with full original names (before proguard processing). - link_instr_classes_jar := $(link_instr_intermediates_dir.COMMON)/classes.jar - full_java_libs += $(link_instr_classes_jar) - full_java_lib_deps += $(link_instr_classes_jar) -endif - -endif # need_compile_java - -# We may want to add jar manifest or jar resource files even if there is no java code at all. -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_EXTRA_JAR_ARGS := $(extra_jar_args) -jar_manifest_file := -ifneq ($(strip $(LOCAL_JAR_MANIFEST)),) -jar_manifest_file := $(LOCAL_PATH)/$(LOCAL_JAR_MANIFEST) -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JAR_MANIFEST := $(jar_manifest_file) -else -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JAR_MANIFEST := -endif - ########################################################### ## make clean- targets ########################################################### @@ -500,35 +211,10 @@ $(cleantarget):: ########################################################### ## Common definitions for module. ########################################################### - -# aapt doesn't accept multiple --extra-packages flags. -# We have to collapse them into a single --extra-packages flag here. -LOCAL_AAPT_FLAGS := $(strip $(LOCAL_AAPT_FLAGS)) -ifdef LOCAL_AAPT_FLAGS -ifeq ($(filter 0 1,$(words $(filter --extra-packages,$(LOCAL_AAPT_FLAGS)))),) -aapt_flags := $(subst --extra-packages$(space),--extra-packages@,$(LOCAL_AAPT_FLAGS)) -aapt_flags_extra_packages := $(patsubst --extra-packages@%,%,$(filter --extra-packages@%,$(aapt_flags))) -aapt_flags_extra_packages := $(sort $(subst :,$(space),$(aapt_flags_extra_packages))) -LOCAL_AAPT_FLAGS := $(filter-out --extra-packages@%,$(aapt_flags)) \ - --extra-packages $(subst $(space),:,$(aapt_flags_extra_packages)) -aapt_flags_extra_packages := -aapt_flags := -endif -endif - -# Propagate local configuration options to this target. $(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_PATH:=$(LOCAL_PATH) -$(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_AAPT_FLAGS:= $(LOCAL_AAPT_FLAGS) $(PRODUCT_AAPT_FLAGS) -$(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_JAVA_LIBRARIES:= $(LOCAL_JAVA_LIBRARIES) -$(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_MANIFEST_PACKAGE_NAME:= $(LOCAL_MANIFEST_PACKAGE_NAME) -$(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_MANIFEST_INSTRUMENTATION_FOR:= $(LOCAL_MANIFEST_INSTRUMENTATION_FOR) - -$(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_ALL_JAVA_LIBRARIES:= $(full_java_libs) $(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_IS_HOST_MODULE := $(LOCAL_IS_HOST_MODULE) $(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_HOST:= $(my_host) - $(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_INTERMEDIATES_DIR:= $(intermediates) - $(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_2ND_ARCH_VAR_PREFIX := $(LOCAL_2ND_ARCH_VAR_PREFIX) # Tell the module and all of its sub-modules who it is. @@ -652,10 +338,6 @@ my_required_modules += $(LOCAL_REQUIRED_MODULES_$($(my_prefix)OS)) endif ALL_MODULES.$(my_register_name).REQUIRED := \ $(strip $(ALL_MODULES.$(my_register_name).REQUIRED) $(my_required_modules)) -ALL_MODULES.$(my_register_name).EVENT_LOG_TAGS := \ - $(ALL_MODULES.$(my_register_name).EVENT_LOG_TAGS) $(event_log_tags) -ALL_MODULES.$(my_register_name).INTERMEDIATE_SOURCE_DIR := \ - $(ALL_MODULES.$(my_register_name).INTERMEDIATE_SOURCE_DIR) $(LOCAL_INTERMEDIATE_SOURCE_DIR) ALL_MODULES.$(my_register_name).MAKEFILE := \ $(ALL_MODULES.$(my_register_name).MAKEFILE) $(LOCAL_MODULE_MAKEFILE) ifdef LOCAL_MODULE_OWNER @@ -665,9 +347,6 @@ endif ifdef LOCAL_2ND_ARCH_VAR_PREFIX ALL_MODULES.$(my_register_name).FOR_2ND_ARCH := true endif -ifdef aidl_sources -ALL_MODULES.$(my_register_name).AIDL_FILES := $(aidl_sources) -endif INSTALLABLE_FILES.$(LOCAL_INSTALLED_MODULE).MODULE := $(my_register_name) @@ -721,90 +400,8 @@ $(j_or_n)-$(h_or_t)-tests $(j_or_n)-tests $(h_or_t)-tests : $(my_checked_module) endif endif -########################################################### -# JACK -########################################################### -ifdef LOCAL_JACK_ENABLED -ifdef need_compile_java - -full_static_jack_libs := \ - $(foreach lib,$(LOCAL_STATIC_JAVA_LIBRARIES), \ - $(call intermediates-dir-for, \ - JAVA_LIBRARIES,$(lib),$(LOCAL_IS_HOST_MODULE),COMMON)/classes.jack) - -ifeq ($(my_prefix),TARGET_) -ifeq ($(LOCAL_SDK_VERSION),) -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH_JAVA_LIBRARIES := $(call jack-lib-files,core-libart) -else -ifeq ($(LOCAL_SDK_VERSION)$(TARGET_BUILD_APPS),current) -# LOCAL_SDK_VERSION is current and no TARGET_BUILD_APPS. -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH_JAVA_LIBRARIES := $(call jack-lib-files,android_stubs_current) -else ifeq ($(LOCAL_SDK_VERSION)$(TARGET_BUILD_APPS),system_current) -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH_JAVA_LIBRARIES := $(call jack-lib-files,android_system_stubs_current) -else -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH_JAVA_LIBRARIES := $(call jack-lib-files,sdk_v$(LOCAL_SDK_VERSION)) -endif # current or system_current -endif # LOCAL_SDK_VERSION -endif # TARGET_ - -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_STATIC_JACK_LIBRARIES := $(full_static_jack_libs) -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JACK_VM_ARGS := $(LOCAL_JACK_VM_ARGS) -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JACK_EXTRA_ARGS := $(LOCAL_JACK_EXTRA_ARGS) - -ifdef LOCAL_IS_HOST_MODULE -ifeq ($(USE_CORE_LIB_BOOTCLASSPATH),true) -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH_JAVA_LIBRARIES := $(call jack-lib-files,core-libart-hostdex,$(LOCAL_IS_HOST_MODULE)) -full_shared_jack_libs := $(call jack-lib-files,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE)) -full_jack_lib_deps := $(call jack-lib-deps,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE)) -else -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH_JAVA_LIBRARIES := -full_shared_jack_libs := $(call jack-lib-deps,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE)) -full_jack_lib_deps := $(full_shared_jack_libs) -endif # USE_CORE_LIB_BOOTCLASSPATH -else # !LOCAL_IS_HOST_MODULE -full_shared_jack_libs := $(call jack-lib-files,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE)) -full_jack_lib_deps := $(call jack-lib-deps,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE)) -endif # !LOCAL_IS_HOST_MODULE -full_jack_libs := $(full_shared_jack_libs) $(full_static_jack_libs) $(LOCAL_JACK_CLASSPATH) -full_jack_lib_deps += $(full_static_jack_libs) $(LOCAL_JACK_CLASSPATH) - -# This is set by packages that are linking to other packages that export -# shared libraries, allowing them to make use of the code in the linked apk. -ifneq ($(apk_libraries),) - link_apk_jack_libraries := \ - $(foreach lib,$(apk_libraries), \ - $(call intermediates-dir-for, \ - APPS,$(lib),,COMMON)/classes.jack) - - # link against the jar with full original names (before proguard processing). - full_shared_jack_libs += $(link_apk_jack_libraries) - full_jack_libs += $(link_apk_jack_libraries) - full_jack_lib_deps += $(link_apk_jack_libraries) -endif - -# This is set by packages that contain instrumentation, allowing them to -# link against the package they are instrumenting. Currently only one such -# package is allowed. -ifdef LOCAL_INSTRUMENTATION_FOR - - # link against the jar with full original names (before proguard processing). - link_instr_classes_jack := $(link_instr_intermediates_dir.COMMON)/classes.noshrob.jack - full_jack_libs += $(link_instr_classes_jack) - full_jack_lib_deps += $(link_instr_classes_jack) -endif - -endif # need_compile_java - -# Propagate local configuration options to this target. -$(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_ALL_JACK_LIBRARIES:= $(full_jack_libs) -$(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_JARJAR_RULES := $(LOCAL_JARJAR_RULES) - -endif # LOCAL_JACK_ENABLED - ########################################################### ## NOTICE files ########################################################### include $(BUILD_NOTICE_FILE) - -#:vi noexpandtab diff --git a/core/host_dalvik_java_library.mk b/core/host_dalvik_java_library.mk index 4814d70875..7f59272863 100644 --- a/core/host_dalvik_java_library.mk +++ b/core/host_dalvik_java_library.mk @@ -50,6 +50,11 @@ java_alternative_checked_module := $(full_classes_compiled_jar) ####################################### include $(BUILD_SYSTEM)/base_rules.mk ####################################### +java_sources := $(addprefix $(LOCAL_PATH)/, $(filter %.java,$(LOCAL_SRC_FILES))) \ + $(filter %.java,$(LOCAL_GENERATED_SOURCES)) +all_java_sources := $(java_sources) + +include $(BUILD_SYSTEM)/java_common.mk $(full_classes_compiled_jar): PRIVATE_JAVAC_DEBUG_FLAGS := -g @@ -59,12 +64,6 @@ java_alternative_checked_module := # Run build/tools/java-layers.py for more details. layers_file := $(addprefix $(LOCAL_PATH)/, $(LOCAL_JAVA_LAYERS_FILE)) -$(LOCAL_INTERMEDIATE_TARGETS): \ - PRIVATE_CLASS_INTERMEDIATES_DIR := $(intermediates.COMMON)/classes -$(LOCAL_INTERMEDIATE_TARGETS): \ - PRIVATE_SOURCE_INTERMEDIATES_DIR := $(LOCAL_INTERMEDIATE_SOURCE_DIR) -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_RMTYPEDEFS := - $(cleantarget): PRIVATE_CLEAN_FILES += $(intermediates.COMMON) $(full_classes_compiled_jar): PRIVATE_JAVA_LAYERS_FILE := $(layers_file) diff --git a/core/host_java_library.mk b/core/host_java_library.mk index 47189d7d05..8ae2e47d93 100644 --- a/core/host_java_library.mk +++ b/core/host_java_library.mk @@ -43,7 +43,11 @@ LOCAL_INTERMEDIATE_TARGETS += \ include $(BUILD_SYSTEM)/base_rules.mk ####################################### -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_RMTYPEDEFS := +java_sources := $(addprefix $(LOCAL_PATH)/, $(filter %.java,$(LOCAL_SRC_FILES))) \ + $(filter %.java,$(LOCAL_GENERATED_SOURCES)) +all_java_sources := $(java_sources) + +include $(BUILD_SYSTEM)/java_common.mk ifeq (true,$(LOCAL_EMMA_INSTRUMENT)) $(full_classes_emma_jar): PRIVATE_EMMA_COVERAGE_FILE := $(intermediates.COMMON)/coverage.em diff --git a/core/java.mk b/core/java.mk index f2959734bd..2b48c0c187 100644 --- a/core/java.mk +++ b/core/java.mk @@ -1,3 +1,4 @@ +# Target Java. # Requires: # LOCAL_MODULE_SUFFIX # LOCAL_MODULE_CLASS @@ -265,6 +266,64 @@ LOCAL_INTERMEDIATE_TARGETS += $(RenderScript_file_stamp) LOCAL_RESOURCE_DIR := $(LOCAL_INTERMEDIATE_SOURCE_DIR)/renderscript/res $(LOCAL_RESOURCE_DIR) endif + +########################################################### +## AIDL: Compile .aidl files to .java +########################################################### +aidl_sources := $(filter %.aidl,$(LOCAL_SRC_FILES)) + +ifneq ($(strip $(aidl_sources)),) +aidl_java_sources := $(patsubst %.aidl,%.java,$(addprefix $(intermediates.COMMON)/src/, $(aidl_sources))) +aidl_sources := $(addprefix $(LOCAL_PATH)/, $(aidl_sources)) + +aidl_preprocess_import := +ifdef LOCAL_SDK_VERSION +ifneq ($(filter current system_current, $(LOCAL_SDK_VERSION)$(TARGET_BUILD_APPS)),) + # LOCAL_SDK_VERSION is current and no TARGET_BUILD_APPS + aidl_preprocess_import := $(TARGET_OUT_COMMON_INTERMEDIATES)/framework.aidl +else + aidl_preprocess_import := $(HISTORICAL_SDK_VERSIONS_ROOT)/$(LOCAL_SDK_VERSION)/framework.aidl +endif # not current or system_current +else +# build against the platform. +LOCAL_AIDL_INCLUDES += $(FRAMEWORKS_BASE_JAVA_SRC_DIRS) +endif # LOCAL_SDK_VERSION +$(aidl_java_sources): PRIVATE_AIDL_FLAGS := -b $(addprefix -p,$(aidl_preprocess_import)) -I$(LOCAL_PATH) -I$(LOCAL_PATH)/src $(addprefix -I,$(LOCAL_AIDL_INCLUDES)) + +$(aidl_java_sources): $(intermediates.COMMON)/src/%.java: \ + $(LOCAL_PATH)/%.aidl \ + $(LOCAL_MODULE_MAKEFILE) \ + $(LOCAL_ADDITIONAL_DEPENDENCIES) \ + $(AIDL) \ + $(aidl_preprocess_import) + $(transform-aidl-to-java) +-include $(aidl_java_sources:%.java=%.P) + +else +aidl_java_sources := +endif + +########################################################### +## logtags: Add .logtags files to global list, emit java source +########################################################### +logtags_sources := $(filter %.logtags,$(LOCAL_SRC_FILES)) + +ifneq ($(strip $(logtags_sources)),) +event_log_tags := $(addprefix $(LOCAL_PATH)/,$(logtags_sources)) + +logtags_java_sources := $(patsubst %.logtags,%.java,$(addprefix $(intermediates.COMMON)/src/, $(logtags_sources))) +logtags_sources := $(addprefix $(LOCAL_PATH)/, $(logtags_sources)) + +$(logtags_java_sources): $(intermediates.COMMON)/src/%.java: $(LOCAL_PATH)/%.logtags $(TARGET_OUT_COMMON_INTERMEDIATES)/all-event-log-tags.txt + $(transform-logtags-to-java) + +else +logtags_java_sources := +event_log_tags := +endif + +########################################## + # All of the rules after full_classes_compiled_jar are very unlikely # to fail except for bugs in their respective tools. If you would # like to run these rules, add the "all" modifier goal to the make @@ -275,17 +334,20 @@ else java_alternative_checked_module := endif -# TODO: It looks like the only thing we need from base_rules is -# all_java_sources. See if we can get that by adding a -# common_java.mk, and moving the include of base_rules.mk to -# after all the declarations. - ####################################### include $(BUILD_SYSTEM)/base_rules.mk ####################################### java_alternative_checked_module := + +########################################## +java_sources := $(addprefix $(LOCAL_PATH)/, $(filter %.java,$(LOCAL_SRC_FILES))) $(aidl_java_sources) $(logtags_java_sources) \ + $(filter %.java,$(LOCAL_GENERATED_SOURCES)) +all_java_sources := $(java_sources) $(addprefix $(TARGET_OUT_COMMON_INTERMEDIATES)/, $(filter %.java,$(LOCAL_INTERMEDIATE_SOURCES))) + +include $(BUILD_SYSTEM)/java_common.mk + ####################################### # defines built_odex along with rule to install odex include $(BUILD_SYSTEM)/dex_preopt_odex_install.mk @@ -320,16 +382,6 @@ $(LOCAL_INSTALLED_MODULE) : $(installed_rs_compatibility_jni_libs) endif endif -# We use intermediates.COMMON because the classes.jar/.dex files will be -# common even if LOCAL_BUILT_MODULE isn't. -# -# Override some target variables that base_rules set up for us. -$(LOCAL_INTERMEDIATE_TARGETS): \ - PRIVATE_CLASS_INTERMEDIATES_DIR := $(intermediates.COMMON)/classes -$(LOCAL_INTERMEDIATE_TARGETS): \ - PRIVATE_SOURCE_INTERMEDIATES_DIR := $(LOCAL_INTERMEDIATE_SOURCE_DIR) -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_RMTYPEDEFS := $(LOCAL_RMTYPEDEFS) - # Since we're using intermediates.COMMON, make sure that it gets cleaned # properly. $(cleantarget): PRIVATE_CLEAN_FILES += $(intermediates.COMMON) diff --git a/core/java_common.mk b/core/java_common.mk new file mode 100644 index 0000000000..f66a54d905 --- /dev/null +++ b/core/java_common.mk @@ -0,0 +1,332 @@ +# Common to host and target Java modules. + +########################################################### +## .proto files: Compile proto files to .java +########################################################### +proto_sources := $(filter %.proto,$(LOCAL_SRC_FILES)) +# Because names of the .java files compiled from .proto files are unknown until the +# .proto files are compiled, we use a timestamp file as depedency. +proto_java_sources_file_stamp := +ifneq ($(proto_sources),) +proto_sources_fullpath := $(addprefix $(LOCAL_PATH)/, $(proto_sources)) + +# By putting the generated java files into $(LOCAL_INTERMEDIATE_SOURCE_DIR), they will be +# automatically found by the java compiling function transform-java-to-classes.jar. +proto_java_intemediate_dir := $(LOCAL_INTERMEDIATE_SOURCE_DIR)/proto +proto_java_sources_file_stamp := $(proto_java_intemediate_dir)/Proto.stamp +proto_java_sources_dir := $(proto_java_intemediate_dir)/src + +$(proto_java_sources_file_stamp): PRIVATE_PROTO_INCLUDES := $(TOP) +$(proto_java_sources_file_stamp): PRIVATE_PROTO_SRC_FILES := $(proto_sources_fullpath) +$(proto_java_sources_file_stamp): PRIVATE_PROTO_JAVA_OUTPUT_DIR := $(proto_java_sources_dir) +ifeq ($(LOCAL_PROTOC_OPTIMIZE_TYPE),micro) +$(proto_java_sources_file_stamp): PRIVATE_PROTO_JAVA_OUTPUT_OPTION := --javamicro_out +else + ifeq ($(LOCAL_PROTOC_OPTIMIZE_TYPE),nano) +$(proto_java_sources_file_stamp): PRIVATE_PROTO_JAVA_OUTPUT_OPTION := --javanano_out + else +$(proto_java_sources_file_stamp): PRIVATE_PROTO_JAVA_OUTPUT_OPTION := --java_out + endif +endif +$(proto_java_sources_file_stamp): PRIVATE_PROTOC_FLAGS := $(LOCAL_PROTOC_FLAGS) +$(proto_java_sources_file_stamp): PRIVATE_PROTO_JAVA_OUTPUT_PARAMS := $(LOCAL_PROTO_JAVA_OUTPUT_PARAMS) +$(proto_java_sources_file_stamp) : $(proto_sources_fullpath) $(PROTOC) + $(call transform-proto-to-java) + +#TODO: protoc should output the dependencies introduced by imports. +endif # proto_sources + +######################################### +## Java resources + +# Look for resource files in any specified directories. +# Non-java and non-doc files will be picked up as resources +# and included in the output jar file. +java_resource_file_groups := + +LOCAL_JAVA_RESOURCE_DIRS := $(strip $(LOCAL_JAVA_RESOURCE_DIRS)) +ifneq ($(LOCAL_JAVA_RESOURCE_DIRS),) + # This makes a list of words like + # ::: :: : + # where each of the files is relative to the directory it's grouped with. + # Directories that don't contain any resource files will result in groups + # that end with a colon, and they are stripped out in the next step. + java_resource_file_groups += \ + $(foreach dir,$(LOCAL_JAVA_RESOURCE_DIRS), \ + $(subst $(space),:,$(strip \ + $(LOCAL_PATH)/$(dir): \ + $(patsubst ./%,%,$(shell cd $(LOCAL_PATH)/$(dir) && \ + find . \ + -type d -a -name ".svn" -prune -o \ + -type f \ + -a \! -name "*.java" \ + -a \! -name "package.html" \ + -a \! -name "overview.html" \ + -a \! -name ".*.swp" \ + -a \! -name ".DS_Store" \ + -a \! -name "*~" \ + -print \ + )) \ + )) \ + ) + java_resource_file_groups := $(filter-out %:,$(java_resource_file_groups)) +endif # LOCAL_JAVA_RESOURCE_DIRS + +LOCAL_JAVA_RESOURCE_FILES := $(strip $(LOCAL_JAVA_RESOURCE_FILES)) +ifneq ($(LOCAL_JAVA_RESOURCE_FILES),) + java_resource_file_groups += \ + $(foreach f,$(LOCAL_JAVA_RESOURCE_FILES), \ + $(patsubst %/,%,$(dir $(f)))::$(notdir $(f)) \ + ) +endif # LOCAL_JAVA_RESOURCE_FILES + +ifdef java_resource_file_groups + # The full paths to all resources, used for dependencies. + java_resource_sources := \ + $(foreach group,$(java_resource_file_groups), \ + $(addprefix $(word 1,$(subst :,$(space),$(group)))/, \ + $(wordlist 2,9999,$(subst :,$(space),$(group))) \ + ) \ + ) + # The arguments to jar that will include these files in a jar file. + # Quote the file name to handle special characters (such as #) correctly. + extra_jar_args := \ + $(foreach group,$(java_resource_file_groups), \ + $(addprefix -C "$(word 1,$(subst :,$(space),$(group)))" , \ + $(foreach w, $(wordlist 2,9999,$(subst :,$(space),$(group))), "$(w)" ) \ + ) \ + ) + java_resource_file_groups := +else + java_resource_sources := + extra_jar_args := +endif # java_resource_file_groups + +###################################### +## PRIVATE java vars +# LOCAL_SOURCE_FILES_ALL_GENERATED is set only if the module does not have static source files, +# but generated source files in its LOCAL_INTERMEDIATE_SOURCE_DIR. +# You have to set up the dependency in some other way. +need_compile_java := $(strip $(all_java_sources)$(all_res_assets)$(java_resource_sources))$(LOCAL_STATIC_JAVA_LIBRARIES)$(filter true,$(LOCAL_SOURCE_FILES_ALL_GENERATED)) +ifdef need_compile_java + +full_static_java_libs := \ + $(foreach lib,$(LOCAL_STATIC_JAVA_LIBRARIES), \ + $(call intermediates-dir-for, \ + JAVA_LIBRARIES,$(lib),$(LOCAL_IS_HOST_MODULE),COMMON)/javalib.jar) + +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_STATIC_JAVA_LIBRARIES := $(full_static_java_libs) + +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_RESOURCE_DIR := $(LOCAL_RESOURCE_DIR) +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_ASSET_DIR := $(LOCAL_ASSET_DIR) + +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_CLASS_INTERMEDIATES_DIR := $(intermediates.COMMON)/classes +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_SOURCE_INTERMEDIATES_DIR := $(intermediates.COMMON)/src +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JAVA_SOURCES := $(all_java_sources) + +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_RMTYPEDEFS := $(LOCAL_RMTYPEDEFS) + +# full_java_libs: The list of files that should be used as the classpath. +# Using this list as a dependency list WILL NOT WORK. +# full_java_lib_deps: Should be specified as a prerequisite of this module +# to guarantee that the files in full_java_libs will +# be up-to-date. +ifndef LOCAL_IS_HOST_MODULE +ifeq ($(LOCAL_SDK_VERSION),) +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH := -bootclasspath $(call java-lib-files,core-libart) +else +ifeq ($(LOCAL_SDK_VERSION)$(TARGET_BUILD_APPS),current) +# LOCAL_SDK_VERSION is current and no TARGET_BUILD_APPS. +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH := -bootclasspath $(call java-lib-files,android_stubs_current) +else ifeq ($(LOCAL_SDK_VERSION)$(TARGET_BUILD_APPS),system_current) +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH := -bootclasspath $(call java-lib-files,android_system_stubs_current) +else +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH := -bootclasspath $(call java-lib-files,sdk_v$(LOCAL_SDK_VERSION)) +endif # current or system_current +endif # LOCAL_SDK_VERSION + +full_shared_java_libs := $(call java-lib-files,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE)) +full_java_lib_deps := $(call java-lib-deps,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE)) + +else # LOCAL_IS_HOST_MODULE + +ifeq ($(USE_CORE_LIB_BOOTCLASSPATH),true) +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH := -bootclasspath $(call java-lib-files,core-libart-hostdex,$(LOCAL_IS_HOST_MODULE)) + +full_shared_java_libs := $(call java-lib-files,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE)) +full_java_lib_deps := $(call java-lib-deps,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE)) \ + $(full_shared_java_libs) +else +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH := + +full_shared_java_libs := $(addprefix $(HOST_OUT_JAVA_LIBRARIES)/,\ + $(addsuffix $(COMMON_JAVA_PACKAGE_SUFFIX),$(LOCAL_JAVA_LIBRARIES))) +full_java_lib_deps := $(full_shared_java_libs) +endif # USE_CORE_LIB_BOOTCLASSPATH +endif # !LOCAL_IS_HOST_MODULE + +full_java_libs := $(full_shared_java_libs) $(full_static_java_libs) $(LOCAL_CLASSPATH) +full_java_lib_deps := $(full_java_lib_deps) $(full_static_java_libs) $(LOCAL_CLASSPATH) + +ifndef LOCAL_IS_HOST_MODULE +# This is set by packages that are linking to other packages that export +# shared libraries, allowing them to make use of the code in the linked apk. +apk_libraries := $(sort $(LOCAL_APK_LIBRARIES) $(LOCAL_RES_LIBRARIES)) +ifneq ($(apk_libraries),) + link_apk_libraries := \ + $(foreach lib,$(apk_libraries), \ + $(call intermediates-dir-for, \ + APPS,$(lib),,COMMON)/classes.jar) + + # link against the jar with full original names (before proguard processing). + full_shared_java_libs += $(link_apk_libraries) + full_java_libs += $(link_apk_libraries) + full_java_lib_deps += $(link_apk_libraries) +endif + +# This is set by packages that contain instrumentation, allowing them to +# link against the package they are instrumenting. Currently only one such +# package is allowed. +LOCAL_INSTRUMENTATION_FOR := $(strip $(LOCAL_INSTRUMENTATION_FOR)) +ifdef LOCAL_INSTRUMENTATION_FOR + ifneq ($(words $(LOCAL_INSTRUMENTATION_FOR)),1) + $(error \ + $(LOCAL_PATH): Multiple LOCAL_INSTRUMENTATION_FOR members defined) + endif + + link_instr_intermediates_dir.COMMON := $(call intermediates-dir-for, \ + APPS,$(LOCAL_INSTRUMENTATION_FOR),,COMMON) + # link against the jar with full original names (before proguard processing). + link_instr_classes_jar := $(link_instr_intermediates_dir.COMMON)/classes.jar + full_java_libs += $(link_instr_classes_jar) + full_java_lib_deps += $(link_instr_classes_jar) +endif # LOCAL_INSTRUMENTATION_FOR +endif # LOCAL_IS_HOST_MODULE + +endif # need_compile_java + +# We may want to add jar manifest or jar resource files even if there is no java code at all. +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_EXTRA_JAR_ARGS := $(extra_jar_args) +jar_manifest_file := +ifneq ($(strip $(LOCAL_JAR_MANIFEST)),) +jar_manifest_file := $(LOCAL_PATH)/$(LOCAL_JAR_MANIFEST) +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JAR_MANIFEST := $(jar_manifest_file) +else +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JAR_MANIFEST := +endif + +########################################################## +ifndef LOCAL_IS_HOST_MODULE +## AAPT Flags +# aapt doesn't accept multiple --extra-packages flags. +# We have to collapse them into a single --extra-packages flag here. +LOCAL_AAPT_FLAGS := $(strip $(LOCAL_AAPT_FLAGS)) +ifdef LOCAL_AAPT_FLAGS +ifeq ($(filter 0 1,$(words $(filter --extra-packages,$(LOCAL_AAPT_FLAGS)))),) +aapt_flags := $(subst --extra-packages$(space),--extra-packages@,$(LOCAL_AAPT_FLAGS)) +aapt_flags_extra_packages := $(patsubst --extra-packages@%,%,$(filter --extra-packages@%,$(aapt_flags))) +aapt_flags_extra_packages := $(sort $(subst :,$(space),$(aapt_flags_extra_packages))) +LOCAL_AAPT_FLAGS := $(filter-out --extra-packages@%,$(aapt_flags)) \ + --extra-packages $(subst $(space),:,$(aapt_flags_extra_packages)) +aapt_flags_extra_packages := +aapt_flags := +endif +endif + +$(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_AAPT_FLAGS := $(LOCAL_AAPT_FLAGS) $(PRODUCT_AAPT_FLAGS) +$(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_MANIFEST_PACKAGE_NAME := $(LOCAL_MANIFEST_PACKAGE_NAME) +$(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_MANIFEST_INSTRUMENTATION_FOR := $(LOCAL_MANIFEST_INSTRUMENTATION_FOR) + +ifdef event_log_tags +ALL_MODULES.$(my_register_name).EVENT_LOG_TAGS := \ + $(ALL_MODULES.$(my_register_name).EVENT_LOG_TAGS) $(event_log_tags) +endif +ifdef aidl_sources +ALL_MODULES.$(my_register_name).AIDL_FILES := $(aidl_sources) +endif +endif # !LOCAL_IS_HOST_MODULE + +$(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_ALL_JAVA_LIBRARIES := $(full_java_libs) + +ALL_MODULES.$(my_register_name).INTERMEDIATE_SOURCE_DIR := \ + $(ALL_MODULES.$(my_register_name).INTERMEDIATE_SOURCE_DIR) $(LOCAL_INTERMEDIATE_SOURCE_DIR) + +########################################################### +# JACK +########################################################### +ifdef LOCAL_JACK_ENABLED +ifdef need_compile_java + +full_static_jack_libs := \ + $(foreach lib,$(LOCAL_STATIC_JAVA_LIBRARIES), \ + $(call intermediates-dir-for, \ + JAVA_LIBRARIES,$(lib),$(LOCAL_IS_HOST_MODULE),COMMON)/classes.jack) + +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_STATIC_JACK_LIBRARIES := $(full_static_jack_libs) +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JACK_VM_ARGS := $(LOCAL_JACK_VM_ARGS) +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JACK_EXTRA_ARGS := $(LOCAL_JACK_EXTRA_ARGS) + +ifndef LOCAL_IS_HOST_MODULE +ifeq ($(LOCAL_SDK_VERSION),) +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH_JAVA_LIBRARIES := $(call jack-lib-files,core-libart) +else +ifeq ($(LOCAL_SDK_VERSION)$(TARGET_BUILD_APPS),current) +# LOCAL_SDK_VERSION is current and no TARGET_BUILD_APPS. +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH_JAVA_LIBRARIES := $(call jack-lib-files,android_stubs_current) +else ifeq ($(LOCAL_SDK_VERSION)$(TARGET_BUILD_APPS),system_current) +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH_JAVA_LIBRARIES := $(call jack-lib-files,android_system_stubs_current) +else +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH_JAVA_LIBRARIES := $(call jack-lib-files,sdk_v$(LOCAL_SDK_VERSION)) +endif # current or system_current +endif # LOCAL_SDK_VERSION + +full_shared_jack_libs := $(call jack-lib-files,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE)) +full_jack_lib_deps := $(call jack-lib-deps,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE)) + +else # LOCAL_IS_HOST_MODULE + +ifeq ($(USE_CORE_LIB_BOOTCLASSPATH),true) +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH_JAVA_LIBRARIES := $(call jack-lib-files,core-libart-hostdex,$(LOCAL_IS_HOST_MODULE)) +full_shared_jack_libs := $(call jack-lib-files,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE)) +full_jack_lib_deps := $(call jack-lib-deps,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE)) +else +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH_JAVA_LIBRARIES := +full_shared_jack_libs := $(call jack-lib-deps,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE)) +full_jack_lib_deps := $(full_shared_jack_libs) +endif # USE_CORE_LIB_BOOTCLASSPATH +endif # !LOCAL_IS_HOST_MODULE +full_jack_libs := $(full_shared_jack_libs) $(full_static_jack_libs) $(LOCAL_JACK_CLASSPATH) +full_jack_lib_deps += $(full_static_jack_libs) $(LOCAL_JACK_CLASSPATH) + +ifndef LOCAL_IS_HOST_MODULE +# This is set by packages that are linking to other packages that export +# shared libraries, allowing them to make use of the code in the linked apk. +ifneq ($(apk_libraries),) + link_apk_jack_libraries := \ + $(foreach lib,$(apk_libraries), \ + $(call intermediates-dir-for, \ + APPS,$(lib),,COMMON)/classes.jack) + + # link against the jar with full original names (before proguard processing). + full_shared_jack_libs += $(link_apk_jack_libraries) + full_jack_libs += $(link_apk_jack_libraries) + full_jack_lib_deps += $(link_apk_jack_libraries) +endif + +# This is set by packages that contain instrumentation, allowing them to +# link against the package they are instrumenting. Currently only one such +# package is allowed. +ifdef LOCAL_INSTRUMENTATION_FOR + # link against the jar with full original names (before proguard processing). + link_instr_classes_jack := $(link_instr_intermediates_dir.COMMON)/classes.noshrob.jack + full_jack_libs += $(link_instr_classes_jack) + full_jack_lib_deps += $(link_instr_classes_jack) +endif # LOCAL_INSTRUMENTATION_FOR +endif # !LOCAL_IS_HOST_MODULE + +# Propagate local configuration options to this target. +$(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_ALL_JACK_LIBRARIES:= $(full_jack_libs) +$(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_JARJAR_RULES := $(LOCAL_JARJAR_RULES) + +endif # need_compile_java +endif # LOCAL_JACK_ENABLED