summaryrefslogtreecommitdiffstats
path: root/tools/dexpreopt/Config.mk
diff options
context:
space:
mode:
Diffstat (limited to 'tools/dexpreopt/Config.mk')
-rw-r--r--tools/dexpreopt/Config.mk146
1 files changed, 146 insertions, 0 deletions
diff --git a/tools/dexpreopt/Config.mk b/tools/dexpreopt/Config.mk
new file mode 100644
index 000000000..c6639b28f
--- /dev/null
+++ b/tools/dexpreopt/Config.mk
@@ -0,0 +1,146 @@
+#
+# Copyright (C) 2008 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.
+#
+
+#
+# Included by config/Makefile.
+# Defines the pieces necessary for the dexpreopt process.
+#
+# inputs: INSTALLED_RAMDISK_TARGET, BUILT_SYSTEMIMAGE_UNOPT
+# outputs: BUILT_SYSTEMIMAGE, SYSTEMIMAGE_SOURCE_DIR
+#
+LOCAL_PATH := $(my-dir)
+
+# TODO: see if we can make the .odex files not be product-specific.
+# They can't be completely common, though, because their format
+# depends on the architecture of the target system; ARM and x86
+# would have different versions.
+intermediates := \
+ $(call intermediates-dir-for,PACKAGING,dexpreopt)
+dexpreopt_system_dir := $(intermediates)/system
+built_afar := $(call intermediates-dir-for,EXECUTABLES,afar)/afar
+built_dowrapper := \
+ $(call intermediates-dir-for,EXECUTABLES,dexopt-wrapper)/dexopt-wrapper
+
+# Generate a stripped-down init.rc based on the real one.
+dexpreopt_initrc := $(intermediates)/etc/init.rc
+geninitrc_script := $(LOCAL_PATH)/geninitrc.awk
+$(dexpreopt_initrc): script := $(geninitrc_script)
+$(dexpreopt_initrc): system/core/rootdir/init.rc $(geninitrc_script)
+ @echo "Dexpreopt init.rc: $@"
+ @mkdir -p $(dir $@)
+ $(hide) awk -f $(script) < $< > $@
+
+BUILT_DEXPREOPT_RAMDISK := $(intermediates)/ramdisk.img
+$(BUILT_DEXPREOPT_RAMDISK): intermediates := $(intermediates)
+$(BUILT_DEXPREOPT_RAMDISK): dexpreopt_root_out := $(intermediates)/root
+$(BUILT_DEXPREOPT_RAMDISK): dexpreopt_initrc := $(dexpreopt_initrc)
+$(BUILT_DEXPREOPT_RAMDISK): built_afar := $(built_afar)
+$(BUILT_DEXPREOPT_RAMDISK): built_dowrapper := $(built_dowrapper)
+$(BUILT_DEXPREOPT_RAMDISK): \
+ $(INSTALLED_RAMDISK_TARGET) \
+ $(dexpreopt_initrc) \
+ $(built_afar) \
+ $(built_dowrapper) \
+ | $(MKBOOTFS) $(ACP)
+$(BUILT_DEXPREOPT_RAMDISK):
+ @echo "Dexpreopt ramdisk: $@"
+ $(hide) rm -f $@
+ $(hide) rm -rf $(dexpreopt_root_out)
+ $(hide) mkdir -p $(dexpreopt_root_out)
+ $(hide) $(ACP) -rd $(TARGET_ROOT_OUT) $(intermediates)
+ $(hide) $(ACP) -f $(dexpreopt_initrc) $(dexpreopt_root_out)/
+ $(hide) $(ACP) $(built_afar) $(dexpreopt_root_out)/sbin/
+ $(hide) $(ACP) $(built_dowrapper) $(dexpreopt_root_out)/sbin/
+ $(MKBOOTFS) $(dexpreopt_root_out) | gzip > $@
+
+sign_dexpreopt := true
+ifdef sign_dexpreopt
+ # Such a huge hack. We need to re-sign the .apks with the
+ # same certs that they were originally signed with.
+ dexpreopt_package_certs_file := $(intermediates)/package-certs
+ $(shell mkdir -p $(intermediates))
+ $(shell rm -f $(dexpreopt_package_certs_file))
+ $(foreach p,$(PACKAGES),\
+ $(shell echo "$(p) $(PACKAGES.$(p).CERTIFICATE) $(PACKAGES.$(p).PRIVATE_KEY)" >> $(dexpreopt_package_certs_file)))
+endif
+
+# Build an optimized image from the unoptimized image
+BUILT_DEXPREOPT_SYSTEMIMAGE := $(intermediates)/system.img
+$(BUILT_DEXPREOPT_SYSTEMIMAGE): $(BUILT_SYSTEMIMAGE_UNOPT)
+$(BUILT_DEXPREOPT_SYSTEMIMAGE): $(BUILT_DEXPREOPT_RAMDISK)
+$(BUILT_DEXPREOPT_SYSTEMIMAGE): | $(DEXPREOPT) $(ACP) $(ZIPALIGN)
+$(BUILT_DEXPREOPT_SYSTEMIMAGE): SYSTEM_DIR := $(dexpreopt_system_dir)
+$(BUILT_DEXPREOPT_SYSTEMIMAGE): DEXPREOPT_TMP := $(intermediates)/emutmp
+ifdef sign_dexpreopt
+$(BUILT_DEXPREOPT_SYSTEMIMAGE): | $(SIGNAPK_JAR)
+endif
+$(BUILT_DEXPREOPT_SYSTEMIMAGE):
+ @rm -f $@
+ @echo "dexpreopt: copy system to $(SYSTEM_DIR)"
+ @rm -rf $(SYSTEM_DIR)
+ @mkdir -p $(dir $(SYSTEM_DIR))
+ $(hide) $(ACP) -rd $(TARGET_OUT) $(SYSTEM_DIR)
+ @echo "dexpreopt: optimize dex files"
+ @rm -rf $(DEXPREOPT_TMP)
+ @mkdir -p $(DEXPREOPT_TMP)
+ $(hide) \
+ PATH=$(HOST_OUT_EXECUTABLES):$$PATH \
+ $(DEXPREOPT) \
+ --kernel prebuilt/android-arm/kernel/kernel-qemu \
+ --ramdisk $(BUILT_DEXPREOPT_RAMDISK) \
+ --image $(BUILT_SYSTEMIMAGE_UNOPT) \
+ --system $(PRODUCT_OUT) \
+ --tmpdir $(DEXPREOPT_TMP) \
+ --outsystemdir $(SYSTEM_DIR)
+ifdef sign_dexpreopt
+ @echo "dexpreopt: re-sign apk files"
+ $(hide) \
+ export PATH=$(HOST_OUT_EXECUTABLES):$$PATH; \
+ for apk in $(SYSTEM_DIR)/app/*.apk; do \
+ packageName=`basename $$apk`; \
+ packageName=`echo $$packageName | sed -e 's/.apk$$//'`; \
+ cert=`grep "^$$packageName " $(dexpreopt_package_certs_file) | \
+ awk '{print $$2}'`; \
+ pkey=`grep "^$$packageName " $(dexpreopt_package_certs_file) | \
+ awk '{print $$3}'`; \
+ if [ "$$cert" -a "$$pkey" ]; then \
+ echo "dexpreopt: re-sign app/"$$packageName".apk"; \
+ tmpApk=$$apk~; \
+ rm -f $$tmpApk; \
+ java -jar $(SIGNAPK_JAR) $$cert $$pkey $$apk $$tmpApk || \
+ exit 11; \
+ mv -f $$tmpApk $$apk; \
+ else \
+ echo "dexpreopt: no keys for app/"$$packageName".apk"; \
+ rm $(SYSTEM_DIR)/app/$$packageName.* && \
+ cp $(TARGET_OUT)/app/$$packageName.apk \
+ $(SYSTEM_DIR)/app || exit 12; \
+ fi; \
+ tmpApk=$$apk~; \
+ rm -f $$tmpApk; \
+ $(ZIPALIGN) -f 4 $$apk $$tmpApk || exit 13; \
+ mv -f $$tmpApk $$apk; \
+ done
+endif
+ @echo "Dexpreopt system image: $@"
+ $(hide) $(MKYAFFS2) -f $(SYSTEM_DIR) $@
+
+.PHONY: dexpreoptimage
+dexpreoptimage: $(BUILT_DEXPREOPT_SYSTEMIMAGE)
+
+# Tell our caller to use the optimized systemimage
+BUILT_SYSTEMIMAGE := $(BUILT_DEXPREOPT_SYSTEMIMAGE)
+SYSTEMIMAGE_SOURCE_DIR := $(dexpreopt_system_dir)