146 lines
5.5 KiB
Makefile
146 lines
5.5 KiB
Makefile
#
|
|
# 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)
|