diff options
-rw-r--r-- | buildspec.mk.default | 8 | ||||
-rw-r--r-- | core/Makefile | 28 | ||||
-rw-r--r-- | core/cleanbuild.mk | 8 | ||||
-rw-r--r-- | core/combo/darwin-x86.mk | 4 | ||||
-rw-r--r-- | core/combo/linux-x86.mk | 7 | ||||
-rw-r--r-- | core/main.mk | 3 | ||||
-rw-r--r-- | core/product_config.mk | 9 | ||||
-rwxr-xr-x | tools/check_builds.sh | 67 | ||||
-rwxr-xr-x | tools/compare_fileslist.py | 106 | ||||
-rwxr-xr-x | tools/fileslist.py | 41 |
10 files changed, 255 insertions, 26 deletions
diff --git a/buildspec.mk.default b/buildspec.mk.default index bf4d111..0f75f31 100644 --- a/buildspec.mk.default +++ b/buildspec.mk.default @@ -65,6 +65,14 @@ ifndef CUSTOM_MODULES #CUSTOM_MODULES:= endif +# Choose additional locales, like "en_US" or "it_IT", to add to any +# built product. Any locales that appear in CUSTOM_LOCALES but not in +# the locale list for the selected product will be added to the end +# of PRODUCT_LOCALES. +ifndef CUSTOM_LOCALES +#CUSTOM_LOCALES:= +endif + # If you have a special place to put your ouput files, set this, otherwise # it goes to <build-root>/out #OUT_DIR:=/tmp/stuff diff --git a/core/Makefile b/core/Makefile index bb18c4b..2983628 100644 --- a/core/Makefile +++ b/core/Makefile @@ -198,20 +198,6 @@ $(APKCERTS_FILE): $(all_built_packages) apkcerts-list: $(APKCERTS_FILE) # ----------------------------------------------------------------- -# installed file list -INSTALLED_FILES_FILE := $(PRODUCT_OUT)/installed-files.txt -$(INSTALLED_FILES_FILE): $(ALL_DEFAULT_INSTALLED_MODULES) - @echo Installed file list: $@ - @mkdir -p $(dir $@) - @rm -f $@ - $(hide) (cd $(PRODUCT_OUT) && \ - find system data -type f -printf 'name="%p" size=%s\n') | \ - sort > $@ - -.PHONY: installed-file-list -installed-file-list: $(INSTALLED_FILES_FILE) - -# ----------------------------------------------------------------- # module info file ifdef CREATE_MODULE_INFO_FILE MODULE_INFO_FILE := $(PRODUCT_OUT)/module-info.txt @@ -901,6 +887,20 @@ endif target-files-package: $(BUILT_TARGET_FILES_PACKAGE) # ----------------------------------------------------------------- +# installed file list +# Depending on $(INSTALLED_SYSTEMIMAGE) ensures that it +# gets the DexOpt one if we're doing that. +INSTALLED_FILES_FILE := $(PRODUCT_OUT)/installed-files.txt +$(INSTALLED_FILES_FILE): $(INSTALLED_SYSTEMIMAGE) + @echo Installed file list: $@ + @mkdir -p $(dir $@) + @rm -f $@ + $(hide) build/tools/fileslist.py $(TARGET_OUT) $(TARGET_OUT_DATA) > $@ + +.PHONY: installed-file-list +installed-file-list: $(INSTALLED_FILES_FILE) + +# ----------------------------------------------------------------- # A zip of the tests that are built when running "make tests". # This is very similar to BUILT_TARGET_FILES_PACKAGE, but we # only grab SYSTEM and DATA, and it's called "*-tests-*.zip". diff --git a/core/cleanbuild.mk b/core/cleanbuild.mk index 0b292bf..01bf9a5 100644 --- a/core/cleanbuild.mk +++ b/core/cleanbuild.mk @@ -104,8 +104,14 @@ else # Don't bother with this extra part when explicitly building the sdk product. building_sdk := endif -current_build_config := $(TARGET_PRODUCT)-$(TARGET_BUILD_VARIANT)$(building_sdk) + +# A change in the list of locales warrants an installclean, too. +locale_list := $(subst $(space),$(comma),$(strip $(PRODUCT_LOCALES))) + +current_build_config := \ + $(TARGET_PRODUCT)-$(TARGET_BUILD_VARIANT)$(building_sdk)-{$(locale_list)} building_sdk := +locale_list := force_installclean := false # Read the current state from the file, if present. diff --git a/core/combo/darwin-x86.mk b/core/combo/darwin-x86.mk index cc6a895..2150960 100644 --- a/core/combo/darwin-x86.mk +++ b/core/combo/darwin-x86.mk @@ -93,9 +93,5 @@ define get-file-size stat -f "%z" $(1) endef -# Which gcc to use to build qemu, which doesn't work right when -# built with 4.2.1 or later. -GCCQEMU := prebuilt/darwin-x86/toolchain/i686-apple-darwin8-4.0.1/bin/gcc - endif diff --git a/core/combo/linux-x86.mk b/core/combo/linux-x86.mk index 2c729ad..372c63e 100644 --- a/core/combo/linux-x86.mk +++ b/core/combo/linux-x86.mk @@ -12,12 +12,7 @@ ifeq ($(combo_target),HOST_) define get-file-size stat --format "%s" "$(1)" endef - -# Which gcc to use to build qemu, which doesn't work right when -# built with 4.2.1 or later. -GCCQEMU := prebuilt/linux-x86/toolchain/i686-linux-gnu-3.4.6/bin/gcc -endif # _HOST - +endif # On the sim, we build the "host" tools in 64 bit iff the compiler # does it for us automatically. In other words, that means on 64 bit diff --git a/core/main.mk b/core/main.mk index 1ea13ac..1369944 100644 --- a/core/main.mk +++ b/core/main.mk @@ -575,7 +575,8 @@ droidcore: files \ $(INSTALLED_BOOTIMAGE_TARGET) \ $(INSTALLED_RECOVERYIMAGE_TARGET) \ $(INSTALLED_USERDATAIMAGE_TARGET) \ - $(INTERNAL_DEFAULT_DOCS_TARGETS) + $(INTERNAL_DEFAULT_DOCS_TARGETS) \ + $(INSTALLED_FILES_FILE) # The actual files built by the droidcore target changes depending # on the build variant. diff --git a/core/product_config.mk b/core/product_config.mk index a9021cc..93671f4 100644 --- a/core/product_config.mk +++ b/core/product_config.mk @@ -149,6 +149,15 @@ TARGET_DEVICE := $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_DEVICE) PRODUCT_LOCALES := $(strip $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_LOCALES)) # TODO: also keep track of things like "port", "land" in product files. +# If CUSTOM_LOCALES contains any locales not already included +# in PRODUCT_LOCALES, add them to PRODUCT_LOCALES. +extra_locales := $(filter-out $(PRODUCT_LOCALES),$(CUSTOM_LOCALES)) +ifneq (,$(extra_locales)) + $(info Adding CUSTOM_LOCALES [$(extra_locales)] to PRODUCT_LOCALES [$(PRODUCT_LOCALES)]) + PRODUCT_LOCALES += $(extra_locales) + extra_locales := +endif + # Assemble the list of options. PRODUCT_AAPT_CONFIG := $(PRODUCT_LOCALES) diff --git a/tools/check_builds.sh b/tools/check_builds.sh new file mode 100755 index 0000000..14dfec6 --- /dev/null +++ b/tools/check_builds.sh @@ -0,0 +1,67 @@ +# Copyright (C) 2009 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the 'License'); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an 'AS IS' BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# +# Usage: +# +# Source this file into your environment. Then: +# +# $ golden_builds sdk-sdk generic-eng generic-userdebug dream-eng +# +# will build a set of combos. This might take a while. Then you can +# go make changes, and run: +# +# $ check_builds sdk-sdk generic-eng generic-userdebug dream-eng +# +# Go get dinner, and when you get back, there will be a file +# test-builds/sizes.html that has a pretty chart of which files are +# in which tree, and how big they are. In that chart, cells for files +# that are missing are red, and rows where the file sizes are not all +# the same will be blue. +# + +TEST_BUILD_DIR=test-builds + +function do_builds +{ + PREFIX=$1 + shift + while [ -n "$1" ] + do + rm -rf $TEST_BUILD_DIR/$PREFIX-$1 + make -j6 PRODUCT-$1 dist DIST_DIR=$TEST_BUILD_DIR/$PREFIX-$1 + if [ $? -ne 0 ] ; then + echo FAILED + return + fi + shift + done +} + +function golden_builds +{ + rm -rf $TEST_BUILD_DIR/golden-* $TEST_BUILD_DIR/dist-* + do_builds golden "$@" +} + +function check_builds +{ + rm -rf $TEST_BUILD_DIR/dist-* + do_builds dist "$@" + build/tools/compare_fileslist.py \ + $TEST_BUILD_DIR/golden-*/installed-files.txt \ + $TEST_BUILD_DIR/dist-*/installed-files.txt \ + > $TEST_BUILD_DIR/sizes.html +} + diff --git a/tools/compare_fileslist.py b/tools/compare_fileslist.py new file mode 100755 index 0000000..1f507d8 --- /dev/null +++ b/tools/compare_fileslist.py @@ -0,0 +1,106 @@ +#!/usr/bin/env python +# +# Copyright (C) 2009 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the 'License'); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an 'AS IS' BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +import cgi, os, string, sys + +def IsDifferent(row): + val = None + for v in row: + if v: + if not val: + val = v + else: + if val != v: + return True + return False + +def main(argv): + inputs = argv[1:] + data = {} + index = 0 + for input in inputs: + f = file(input, "r") + lines = f.readlines() + f.close() + lines = map(string.split, lines) + lines = map(lambda (x,y): (y,int(x)), lines) + for fn,sz in lines: + if not data.has_key(fn): + data[fn] = {} + data[fn][index] = sz + index = index + 1 + rows = [] + for fn,sizes in data.iteritems(): + row = [fn] + for i in range(0,index): + if sizes.has_key(i): + row.append(sizes[i]) + else: + row.append(None) + rows.append(row) + rows = sorted(rows, key=lambda x: x[0]) + print """<html> + <head> + <style type="text/css"> + .fn, .sz, .z, .d { + padding-left: 10px; + padding-right: 10px; + } + .sz, .z, .d { + text-align: right; + } + .fn { + background-color: #ffffdd; + } + .sz { + background-color: #ffffcc; + } + .z { + background-color: #ffcccc; + } + .d { + background-color: #99ccff; + } + </style> + </head> + <body> + """ + print "<table>" + print "<tr>" + for input in inputs: + combo = input.split(os.path.sep)[1] + print " <td class='fn'>%s</td>" % cgi.escape(combo) + print "</tr>" + + for row in rows: + print "<tr>" + for sz in row[1:]: + if not sz: + print " <td class='z'> </td>" + elif IsDifferent(row[1:]): + print " <td class='d'>%d</td>" % sz + else: + print " <td class='sz'>%d</td>" % sz + print " <td class='fn'>%s</td>" % cgi.escape(row[0]) + print "</tr>" + print "</table>" + print "</body></html>" + +if __name__ == '__main__': + main(sys.argv) + + diff --git a/tools/fileslist.py b/tools/fileslist.py new file mode 100755 index 0000000..ae105e6 --- /dev/null +++ b/tools/fileslist.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python +# +# Copyright (C) 2009 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the 'License'); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an 'AS IS' BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +import os, sys + +def main(argv): + output = [] + roots = argv[1:] + for root in roots: + base = len(root[:root.rfind(os.path.sep)]) + for dir, dirs, files in os.walk(root): + relative = dir[base:] + for f in files: + try: + row = ( + os.path.getsize(os.path.sep.join((dir, f))), + os.path.sep.join((relative, f)), + ) + output.append(row) + except os.error: + pass + for row in output: + print "%12d %s" % row + +if __name__ == '__main__': + main(sys.argv) + |