From 529113098350c026ec521258d4c6fba51f285a48 Mon Sep 17 00:00:00 2001 From: Ying Wang Date: Wed, 26 May 2010 13:13:56 -0700 Subject: [PATCH] Cherry-pick unbundled build changes from master Change-Id: I82cab32f00b7b729d9b01c8e1532c8bf0ad2fb92 --- core/base_rules.mk | 3 ++- core/main.mk | 26 ++++++++++++++++++++++++-- core/package.mk | 4 ++++ core/product.mk | 19 ++++++++++++++----- core/product_config.mk | 39 +++++++++++++++++++++++++++++++++------ target/product/AndroidProducts.mk | 7 +++++++ 6 files changed, 84 insertions(+), 14 deletions(-) diff --git a/core/base_rules.mk b/core/base_rules.mk index 0ad797a88..f0cbdca8c 100644 --- a/core/base_rules.mk +++ b/core/base_rules.mk @@ -235,7 +235,8 @@ endif ########################################################### #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) +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 ######################################### diff --git a/core/main.mk b/core/main.mk index f830f03c1..9485a02fa 100644 --- a/core/main.mk +++ b/core/main.mk @@ -689,8 +689,21 @@ droidcore: files \ # The actual files built by the droidcore target changes depending # on the build variant. .PHONY: droid tests -droid tests: droidcore - +ifeq ($(strip $(is_unbundled_app_build)),true) +unbundled_build_modules := +ifdef UNBUNDLED_APPS +unbundled_build_modules := $(UNBUNDLED_APPS) +else # UNBUNDLED_APPS +# Otherwise we build all modules in the source tree. +unbundled_build_modules := $(sort $(call get-tagged-modules,$(ALL_MODULE_TAGS))) +endif # UNBUNDLED_APPS +droid: $(unbundled_build_modules) +else # is_unbundled_app_build +droid: droidcore +endif # is_unbundled_app_build +tests: droidcore + +ifneq ($(strip $(is_unbundled_app_build)),true) $(call dist-for-goals, droid, \ $(INTERNAL_UPDATE_PACKAGE_TARGET) \ $(INTERNAL_OTA_PACKAGE_TARGET) \ @@ -715,6 +728,15 @@ $(call dist-for-goals, droid, \ ) endif +else # is_unbundled_app_build +# dist the unbundled app. +ifdef UNBUNDLED_APPS + $(call dist-for-goals,droid, \ + $(foreach m,$(UNBUNDLED_APPS),$(ALL_MODULES.$(m).INSTALLED)) \ + ) +endif # UNBUNDLED_APPS +endif # is_unbundled_app_build + .PHONY: docs docs: $(ALL_DOCS) diff --git a/core/package.mk b/core/package.mk index 24807f9e4..d5de77b26 100644 --- a/core/package.mk +++ b/core/package.mk @@ -304,6 +304,10 @@ PACKAGES.$(LOCAL_PACKAGE_NAME).CERTIFICATE := $(certificate) # Define the rule to build the actual package. $(LOCAL_BUILT_MODULE): $(AAPT) | $(ZIPALIGN) $(LOCAL_BUILT_MODULE): PRIVATE_JNI_SHARED_LIBRARIES := $(jni_shared_libraries) +ifeq ($(strip $(is_unbundled_app_build)),true) + # Include all resources for unbundled apps. + $(LOCAL_BUILT_MODULE): PRODUCT_AAPT_CONFIG := +endif $(LOCAL_BUILT_MODULE): $(all_res_assets) $(jni_shared_libraries) $(full_android_manifest) @echo "target Package: $(PRIVATE_MODULE) ($@)" $(create-empty-package) diff --git a/core/product.mk b/core/product.mk index eca98ed72..38d11482f 100644 --- a/core/product.mk +++ b/core/product.mk @@ -29,13 +29,13 @@ $(shell test -d device && find device -maxdepth 6 -name AndroidProducts.mk) \ endef # -# Returns the sorted concatenation of all PRODUCT_MAKEFILES -# variables set in all AndroidProducts.mk files. -# $(call ) isn't necessary. +# Returns the sorted concatenation of PRODUCT_MAKEFILES +# variables set in the given AndroidProducts.mk files. +# $(1): the list of AndroidProducts.mk files. # -define get-all-product-makefiles +define get-product-makefiles $(sort \ - $(foreach f,$(_find-android-products-files), \ + $(foreach f,$(1), \ $(eval PRODUCT_MAKEFILES :=) \ $(eval LOCAL_DIR := $(patsubst %/,%,$(dir $(f)))) \ $(eval include $(f)) \ @@ -47,6 +47,15 @@ $(sort \ endef # +# Returns the sorted concatenation of all PRODUCT_MAKEFILES +# variables set in all AndroidProducts.mk files. +# $(call ) isn't necessary. +# +define get-all-product-makefiles +$(call get-product-makefiles,$(_find-android-products-files)) +endef + +# # Functions for including product makefiles # diff --git a/core/product_config.mk b/core/product_config.mk index ffb8d27a8..e86b04073 100644 --- a/core/product_config.mk +++ b/core/product_config.mk @@ -149,6 +149,27 @@ endif # else: Use the value set in the environment or buildspec.mk. # --------------------------------------------------------------- +# Provide "APP-" targets, which lets you build +# an unbundled app. +# +unbundled_goals := $(strip $(filter APP-%,$(MAKECMDGOALS))) +ifdef unbundled_goals + ifneq ($(words $(unbundled_goals)),1) + $(error Only one APP-* goal may be specified; saw "$(unbundled_goals)")) + endif + UNBUNDLED_APPS := $(strip $(subst -, ,$(patsubst APP-%,%,$(unbundled_goals)))) + ifneq ($(filter $(DEFAULT_GOAL),$(MAKECMDGOALS)),) + MAKECMDGOALS := $(patsubst $(unbundled_goals),,$(MAKECMDGOALS)) + else + MAKECMDGOALS := $(patsubst $(unbundled_goals),$(DEFAULT_GOAL),$(MAKECMDGOALS)) + endif + is_unbundled_app_build := true + +.PHONY: $(unbundled_goals) +$(unbundled_goals): $(MAKECMDGOALS) +endif # unbundled_goals + +# --------------------------------------------------------------- # Include the product definitions. # We need to do this to translate TARGET_PRODUCT into its # underlying TARGET_DEVICE before we start defining any rules. @@ -157,12 +178,18 @@ include $(BUILD_SYSTEM)/node_fns.mk include $(BUILD_SYSTEM)/product.mk include $(BUILD_SYSTEM)/device.mk -# Read in all of the product definitions specified by the AndroidProducts.mk -# files in the tree. -# -#TODO: when we start allowing direct pointers to product files, -# guarantee that they're in this list. -$(call import-products, $(get-all-product-makefiles)) +ifeq ($(strip $(is_unbundled_app_build)),true) + # An unbundled app build needs only the core product makefiles. + $(call import-products,$(call get-product-makefiles,\ + $(SRC_TARGET_DIR)/product/AndroidProducts.mk)) +else + # Read in all of the product definitions specified by the AndroidProducts.mk + # files in the tree. + # + #TODO: when we start allowing direct pointers to product files, + # guarantee that they're in this list. + $(call import-products, $(get-all-product-makefiles)) +endif # is_unbundled_app_build $(check-all-products) #$(dump-products) #$(error done) diff --git a/target/product/AndroidProducts.mk b/target/product/AndroidProducts.mk index 27749681a..798c35c40 100644 --- a/target/product/AndroidProducts.mk +++ b/target/product/AndroidProducts.mk @@ -25,9 +25,16 @@ # it includes. # +ifeq ($(strip $(is_unbundled_app_build)),true) +# An unbundled app build needs only generic.mk. +PRODUCT_MAKEFILES := \ + $(LOCAL_DIR)/core.mk \ + $(LOCAL_DIR)/generic.mk +else PRODUCT_MAKEFILES := \ $(LOCAL_DIR)/core.mk \ $(LOCAL_DIR)/generic.mk \ $(LOCAL_DIR)/full.mk \ $(LOCAL_DIR)/sdk.mk \ $(LOCAL_DIR)/sim.mk +endif -- 2.11.0