From 16fa4b290e8ce76652c9ba0ba16b80578456ab95 Mon Sep 17 00:00:00 2001 From: Joe Onorato Date: Wed, 9 Jun 2010 16:35:58 -0700 Subject: [PATCH 1/2] Rename is_unbundled_app_build and UNBUNDLED_APP_BUILD to TARGET_BUILD_APPS. Change-Id: I79e6f60e009dad3a48709962347441e4ca0c337a --- core/envsetup.mk | 1 + core/main.mk | 87 ++++++++++++++++--------------- core/package.mk | 2 +- core/product_config.mk | 7 ++- target/product/AndroidProducts.mk | 2 +- tools/Android.mk | 3 +- 6 files changed, 52 insertions(+), 50 deletions(-) diff --git a/core/envsetup.mk b/core/envsetup.mk index f8a202745c..86aa2f3aed 100644 --- a/core/envsetup.mk +++ b/core/envsetup.mk @@ -342,6 +342,7 @@ $(info TARGET_PRODUCT=$(TARGET_PRODUCT)) $(info TARGET_BUILD_VARIANT=$(TARGET_BUILD_VARIANT)) $(info TARGET_SIMULATOR=$(TARGET_SIMULATOR)) $(info TARGET_BUILD_TYPE=$(TARGET_BUILD_TYPE)) +$(info TARGET_BUILD_APPS=$(TARGET_BUILD_APPS)) $(info TARGET_ARCH=$(TARGET_ARCH)) $(info HOST_ARCH=$(HOST_ARCH)) $(info HOST_OS=$(HOST_OS)) diff --git a/core/main.mk b/core/main.mk index 9485a02fa7..8cf21bc104 100644 --- a/core/main.mk +++ b/core/main.mk @@ -688,54 +688,55 @@ droidcore: files \ # The actual files built by the droidcore target changes depending # on the build variant. +ifneq ($(TARGET_BUILD_APPS),) + unbundled_build_modules := + ifneq ($(filter all,$(TARGET_BUILD_APPS)),) + # If they used the magic goal "all" then build everything + unbundled_build_modules := $(sort $(call get-tagged-modules,$(ALL_MODULE_TAGS))) + else + unbundled_build_modules := $(TARGET_BUILD_APPS) + endif + default_goal_deps := $(unbundled_build_modules) +else # TARGET_BUILD_APPS + default_goal_deps := droidcore +endif # TARGET_BUILD_APPS + .PHONY: droid tests -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 +droid: $(default_goal_deps) tests: droidcore -ifneq ($(strip $(is_unbundled_app_build)),true) -$(call dist-for-goals, droid, \ - $(INTERNAL_UPDATE_PACKAGE_TARGET) \ - $(INTERNAL_OTA_PACKAGE_TARGET) \ - $(SYMBOLS_ZIP) \ - $(APPS_ZIP) \ - $(INTERNAL_EMULATOR_PACKAGE_TARGET) \ - $(PACKAGE_STATS_FILE) \ - $(INSTALLED_FILES_FILE) \ - $(INSTALLED_BUILD_PROP_TARGET) \ - $(BUILT_TARGET_FILES_PACKAGE) \ - $(INSTALLED_ANDROID_INFO_TXT_TARGET) \ - ) - -# Tests are installed in userdata.img. If we're building the tests -# variant, copy it for "make tests dist". Also copy a zip of the -# contents of userdata.img, so that people can easily extract a -# single .apk. -ifeq ($(TARGET_BUILD_VARIANT),tests) -$(call dist-for-goals, droid, \ - $(INSTALLED_USERDATAIMAGE_TARGET) \ - $(BUILT_TESTS_ZIP_PACKAGE) \ - ) -endif - -else # is_unbundled_app_build -# dist the unbundled app. -ifdef UNBUNDLED_APPS +ifneq ($(TARGET_BUILD_APPS),) + # dist the unbundled app. $(call dist-for-goals,droid, \ - $(foreach m,$(UNBUNDLED_APPS),$(ALL_MODULES.$(m).INSTALLED)) \ + $(foreach m,$(unbundled_build_modules),$(ALL_MODULES.$(m).INSTALLED)) \ ) -endif # UNBUNDLED_APPS -endif # is_unbundled_app_build + +else # TARGET_BUILD_APPS + + $(call dist-for-goals, droid, \ + $(INTERNAL_UPDATE_PACKAGE_TARGET) \ + $(INTERNAL_OTA_PACKAGE_TARGET) \ + $(SYMBOLS_ZIP) \ + $(APPS_ZIP) \ + $(INTERNAL_EMULATOR_PACKAGE_TARGET) \ + $(PACKAGE_STATS_FILE) \ + $(INSTALLED_FILES_FILE) \ + $(INSTALLED_BUILD_PROP_TARGET) \ + $(BUILT_TARGET_FILES_PACKAGE) \ + $(INSTALLED_ANDROID_INFO_TXT_TARGET) \ + ) + + # Tests are installed in userdata.img. If we're building the tests + # variant, copy it for "make tests dist". Also copy a zip of the + # contents of userdata.img, so that people can easily extract a + # single .apk. + ifeq ($(TARGET_BUILD_VARIANT),tests) + $(call dist-for-goals, droid, \ + $(INSTALLED_USERDATAIMAGE_TARGET) \ + $(BUILT_TESTS_ZIP_PACKAGE) \ + ) + endif +endif # TARGET_BUILD_APPS .PHONY: docs docs: $(ALL_DOCS) diff --git a/core/package.mk b/core/package.mk index e7be05fdcf..cdeefb4a9b 100644 --- a/core/package.mk +++ b/core/package.mk @@ -311,7 +311,7 @@ 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) +ifneq ($(TARGET_BUILD_APPS),) # Include all resources for unbundled apps. $(LOCAL_BUILT_MODULE): PRODUCT_AAPT_CONFIG := endif diff --git a/core/product_config.mk b/core/product_config.mk index e86b04073d..04f6ce1d1d 100644 --- a/core/product_config.mk +++ b/core/product_config.mk @@ -157,13 +157,12 @@ 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)))) + TARGET_BUILD_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) @@ -178,7 +177,7 @@ include $(BUILD_SYSTEM)/node_fns.mk include $(BUILD_SYSTEM)/product.mk include $(BUILD_SYSTEM)/device.mk -ifeq ($(strip $(is_unbundled_app_build)),true) +ifneq ($(strip $(TARGET_BUILD_APPS)),) # An unbundled app build needs only the core product makefiles. $(call import-products,$(call get-product-makefiles,\ $(SRC_TARGET_DIR)/product/AndroidProducts.mk)) @@ -189,7 +188,7 @@ else #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 +endif # TARGET_BUILD_APPS $(check-all-products) #$(dump-products) #$(error done) diff --git a/target/product/AndroidProducts.mk b/target/product/AndroidProducts.mk index 798c35c408..3581da3605 100644 --- a/target/product/AndroidProducts.mk +++ b/target/product/AndroidProducts.mk @@ -25,8 +25,8 @@ # it includes. # -ifeq ($(strip $(is_unbundled_app_build)),true) # An unbundled app build needs only generic.mk. +ifneq ($(TARGET_BUILD_APPS),) PRODUCT_MAKEFILES := \ $(LOCAL_DIR)/core.mk \ $(LOCAL_DIR)/generic.mk diff --git a/tools/Android.mk b/tools/Android.mk index aea27857fb..fa9d0b7176 100644 --- a/tools/Android.mk +++ b/tools/Android.mk @@ -16,7 +16,8 @@ LOCAL_PATH := $(my-dir) -ifeq ($(strip $(is_unbundled_app_build)),true) +# If we're building only unbundled apps, this is the only tool we need. +ifneq ($(TARGET_BUILD_APPS),) include $(LOCAL_PATH)/signapk/Android.mk else include $(call first-makefiles-under,$(LOCAL_PATH)) From da12daf15f2e6aef7e94f340d23bc435ddc025f4 Mon Sep 17 00:00:00 2001 From: Joe Onorato Date: Wed, 9 Jun 2010 18:18:31 -0700 Subject: [PATCH 2/2] Add a tapas command. (Actually there was a tapas command that just called choosecombo). The new better tapas command is for building unbundled apps. Run it with one or more modules to build and optionally a build variant. tapas [variant] App1 App2 ... If you don't supply a build variant, it defaults to eng. Change-Id: I02214abd0b5ad02e364fcb024e10cf6ad17a9e68 --- core/main.mk | 33 ++++++++++++++++------------- envsetup.sh | 45 ++++++++++++++++++++++++++++++++-------- tools/signapk/Android.mk | 7 +++++-- 3 files changed, 60 insertions(+), 25 deletions(-) diff --git a/core/main.mk b/core/main.mk index 8cf21bc104..ddd05bb8e1 100644 --- a/core/main.mk +++ b/core/main.mk @@ -46,6 +46,7 @@ TOPDIR := BUILD_SYSTEM := $(TOPDIR)build/core # This is the default target. It must be the first declared target. +.PHONY: droid DEFAULT_GOAL := droid $(DEFAULT_GOAL): @@ -686,9 +687,9 @@ droidcore: files \ $(INSTALLED_USERDATAIMAGE_TARGET) \ $(INSTALLED_FILES_FILE) -# The actual files built by the droidcore target changes depending -# on the build variant. ifneq ($(TARGET_BUILD_APPS),) + # If this build is just for apps, only build apps and not the full system by default. + unbundled_build_modules := ifneq ($(filter all,$(TARGET_BUILD_APPS)),) # If they used the magic goal "all" then build everything @@ -696,24 +697,19 @@ ifneq ($(TARGET_BUILD_APPS),) else unbundled_build_modules := $(TARGET_BUILD_APPS) endif - default_goal_deps := $(unbundled_build_modules) -else # TARGET_BUILD_APPS - default_goal_deps := droidcore -endif # TARGET_BUILD_APPS -.PHONY: droid tests -droid: $(default_goal_deps) -tests: droidcore - -ifneq ($(TARGET_BUILD_APPS),) # dist the unbundled app. - $(call dist-for-goals,droid, \ + $(call dist-for-goals,apps_only, \ $(foreach m,$(unbundled_build_modules),$(ALL_MODULES.$(m).INSTALLED)) \ ) -else # TARGET_BUILD_APPS +.PHONY: apps_only +apps_only: $(unbundled_build_modules) - $(call dist-for-goals, droid, \ +droid: apps_only + +else # TARGET_BUILD_APPS + $(call dist-for-goals, droidcore, \ $(INTERNAL_UPDATE_PACKAGE_TARGET) \ $(INTERNAL_OTA_PACKAGE_TARGET) \ $(SYMBOLS_ZIP) \ @@ -736,8 +732,16 @@ else # TARGET_BUILD_APPS $(BUILT_TESTS_ZIP_PACKAGE) \ ) endif + +# Building a full system-- the default is to build droidcore +droid: droidcore + endif # TARGET_BUILD_APPS + +.PHONY: droid tests +tests: droidcore + .PHONY: docs docs: $(ALL_DOCS) @@ -782,3 +786,4 @@ modules: .PHONY: showcommands showcommands: @echo >/dev/null + diff --git a/envsetup.sh b/envsetup.sh index 9c6e695360..f4dfc557a6 100644 --- a/envsetup.sh +++ b/envsetup.sh @@ -56,6 +56,7 @@ function check_product() CALLED_FROM_SETUP=true BUILD_SYSTEM=build/core \ TARGET_PRODUCT=$1 TARGET_BUILD_VARIANT= \ TARGET_SIMULATOR= TARGET_BUILD_TYPE= \ + TARGET_BUILD_APPS= \ get_build_var TARGET_DEVICE > /dev/null # hide successful answers, but allow the errors to show } @@ -150,9 +151,14 @@ function set_sequence_number() function settitle() { if [ "$STAY_OFF_MY_LAWN" = "" ]; then - local product=$(get_build_var TARGET_PRODUCT) - local variant=$(get_build_var TARGET_BUILD_VARIANT) - export PROMPT_COMMAND="echo -ne \"\033]0;[${product}-${variant}] ${USER}@${HOSTNAME}: ${PWD}\007\"" + local product=$TARGET_PRODUCT + local variant=$TARGET_BUILD_VARIANT + local apps=$TARGET_BUILD_APPS + if [ -z "$apps" ]; then + export PROMPT_COMMAND="echo -ne \"\033]0;[${product}-${variant}] ${USER}@${HOSTNAME}: ${PWD}\007\"" + else + export PROMPT_COMMAND="echo -ne \"\033]0;[$apps $variant] ${USER}@${HOSTNAME}: ${PWD}\007\"" + fi fi } @@ -376,11 +382,6 @@ function choosevariant() done } -function tapas() -{ - choosecombo -} - function choosecombo() { choosesim $1 @@ -432,7 +433,6 @@ function print_lunch_menu() echo echo "You're building on" $uname echo - echo ${LUNCH_MENU_CHOICES[@]} echo "Lunch menu... pick a combo:" local i=1 @@ -484,6 +484,8 @@ function lunch() return 1 fi + export TARGET_BUILD_APPS= + # special case the simulator if [ "$selection" = "simulator" ] then @@ -530,6 +532,31 @@ function lunch() printconfig } +# Configures the build to build unbundled apps. +# Run tapas with one ore more app names (from LOCAL_PACKAGE_NAME) +function tapas() +{ + local variant=$(echo -n $(echo $* | xargs -n 1 echo | grep -E '^(user|userdebug|eng)$')) + local apps=$(echo -n $(echo $* | xargs -n 1 echo | grep -E -v '^(user|userdebug|eng)$')) + + if [ $(echo $variant | wc -w) -gt 1 ]; then + echo "tapas: Error: Multiple build variants supplied: $variant" + return + fi + if [ -z "$variant" ]; then + variant=eng + fi + + export TARGET_PRODUCT=generic + export TARGET_BUILD_VARIANT=$variant + export TARGET_SIMULATOR=false + export TARGET_BUILD_TYPE=release + export TARGET_BUILD_APPS=$apps + + set_stuff_for_environment + printconfig +} + function gettop { local TOPFILE=build/core/envsetup.mk diff --git a/tools/signapk/Android.mk b/tools/signapk/Android.mk index ccc76fdcf8..b2de21cf0d 100644 --- a/tools/signapk/Android.mk +++ b/tools/signapk/Android.mk @@ -23,5 +23,8 @@ LOCAL_SRC_FILES := SignApk.java LOCAL_JAR_MANIFEST := SignApk.mf include $(BUILD_HOST_JAVA_LIBRARY) -# The post-build signing tools need signapk.jar. -$(call dist-for-goals,droid,$(LOCAL_INSTALLED_MODULE)) +ifeq ($(TARGET_BUILD_APPS),) +# The post-build signing tools need signapk.jar, but we don't +# need this if we're just doing unbundled apps. +$(call dist-for-goals,droidcore,$(LOCAL_INSTALLED_MODULE)) +endif