1ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstrom# dexpreopt_odex_install.mk is used to define odex creation rules for JARs and APKs
2ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstrom# This file depends on variables set in base_rules.mk
3ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstrom# Output variables: LOCAL_DEX_PREOPT, built_odex, dexpreopt_boot_jar_module
4ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstrom
5ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstrom# Setting LOCAL_DEX_PREOPT based on WITH_DEXPREOPT, LOCAL_DEX_PREOPT, etc
6ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian CarlstromLOCAL_DEX_PREOPT := $(strip $(LOCAL_DEX_PREOPT))
7ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstromifneq (true,$(WITH_DEXPREOPT))
8ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstrom  LOCAL_DEX_PREOPT :=
9ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstromelse # WITH_DEXPREOPT=true
10ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstrom  ifeq (,$(TARGET_BUILD_APPS)) # TARGET_BUILD_APPS empty
119db168ca5ce93cbb43f7245f7163f1be2ff06d54Ying Wang    ifndef LOCAL_DEX_PREOPT # LOCAL_DEX_PREOPT undefined
12edfd55ae999eb7bfc932cfa88a1a8dcd6bad1169Ying Wang      ifneq ($(filter $(TARGET_OUT)/%,$(my_module_path)),) # Installed to system.img.
13edfd55ae999eb7bfc932cfa88a1a8dcd6bad1169Ying Wang        ifeq (,$(LOCAL_APK_LIBRARIES)) # LOCAL_APK_LIBRARIES empty
14edfd55ae999eb7bfc932cfa88a1a8dcd6bad1169Ying Wang          LOCAL_DEX_PREOPT := $(DEX_PREOPT_DEFAULT)
15edfd55ae999eb7bfc932cfa88a1a8dcd6bad1169Ying Wang        else # LOCAL_APK_LIBRARIES not empty
16edfd55ae999eb7bfc932cfa88a1a8dcd6bad1169Ying Wang          LOCAL_DEX_PREOPT := nostripping
17edfd55ae999eb7bfc932cfa88a1a8dcd6bad1169Ying Wang        endif # LOCAL_APK_LIBRARIES not empty
18edfd55ae999eb7bfc932cfa88a1a8dcd6bad1169Ying Wang      endif # Installed to system.img.
199db168ca5ce93cbb43f7245f7163f1be2ff06d54Ying Wang    endif # LOCAL_DEX_PREOPT undefined
20ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstrom  endif # TARGET_BUILD_APPS empty
21ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstromendif # WITH_DEXPREOPT=true
22ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstromifeq (false,$(LOCAL_DEX_PREOPT))
23ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstrom  LOCAL_DEX_PREOPT :=
24ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstromendif
25ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstromifdef LOCAL_UNINSTALLABLE_MODULE
26ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian CarlstromLOCAL_DEX_PREOPT :=
27ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstromendif
2862fb8a1f5591d1b664ba6ee3bad5bb8c83c5eaefYing Wangifeq (,$(strip $(built_dex)$(my_prebuilt_src_file))) # contains no java code
29ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian CarlstromLOCAL_DEX_PREOPT :=
30ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstromendif
31ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstrom# if module oat file requested in data, disable LOCAL_DEX_PREOPT, will default location to dalvik-cache
32ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstromifneq (,$(filter $(LOCAL_MODULE),$(PRODUCT_DEX_PREOPT_PACKAGES_IN_DATA)))
33ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian CarlstromLOCAL_DEX_PREOPT :=
34ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstromendif
357326f7b746b82ec60d7381f1fe967a2cd8c7f8e9Alex Light# if WITH_DEXPREOPT_BOOT_IMG_ONLY=true and module is not in boot class path skip
367326f7b746b82ec60d7381f1fe967a2cd8c7f8e9Alex Lightifeq (true,$(WITH_DEXPREOPT_BOOT_IMG_ONLY))
377326f7b746b82ec60d7381f1fe967a2cd8c7f8e9Alex Lightifeq ($(filter $(DEXPREOPT_BOOT_JARS_MODULES),$(LOCAL_MODULE)),)
387326f7b746b82ec60d7381f1fe967a2cd8c7f8e9Alex LightLOCAL_DEX_PREOPT :=
397326f7b746b82ec60d7381f1fe967a2cd8c7f8e9Alex Lightendif
407326f7b746b82ec60d7381f1fe967a2cd8c7f8e9Alex Lightendif
41ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstrom
42ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstrombuilt_odex :=
43ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstrominstalled_odex :=
4474c9850c795303b2ee60e5c4d8494385e0e57d58Ying Wangbuilt_installed_odex :=
45ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstromifdef LOCAL_DEX_PREOPT
46ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstromdexpreopt_boot_jar_module := $(filter $(DEXPREOPT_BOOT_JARS_MODULES),$(LOCAL_MODULE))
47ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstromifdef dexpreopt_boot_jar_module
48ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstromifeq ($(DALVIK_VM_LIB),libdvm.so)
49ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstrombuilt_odex := $(basename $(LOCAL_BUILT_MODULE)).odex
50ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstrominstalled_odex := $(basename $(LOCAL_INSTALLED_MODULE)).odex
5174c9850c795303b2ee60e5c4d8494385e0e57d58Ying Wangbuilt_installed_odex := $(built_odex):$(installed_odex)
52ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstromelse # libdvm.so
53ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstrom# For libart, the boot jars' odex files are replaced by $(DEFAULT_DEX_PREOPT_INSTALLED_IMAGE).
54ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstrom# We use this installed_odex trick to get boot.art installed.
55ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstrominstalled_odex := $(DEFAULT_DEX_PREOPT_INSTALLED_IMAGE)
56b9aa5d43de114cecdf94fabb23d3f61f147b627dYing Wang# Append the odex for the 2nd arch if we have one.
57b9aa5d43de114cecdf94fabb23d3f61f147b627dYing Wanginstalled_odex += $($(TARGET_2ND_ARCH_VAR_PREFIX)DEFAULT_DEX_PREOPT_INSTALLED_IMAGE)
58ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstromendif # libdvm.so
59ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstromelse  # boot jar
60b9aa5d43de114cecdf94fabb23d3f61f147b627dYing Wangifeq ($(DALVIK_VM_LIB),libdvm.so)
61ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstrombuilt_odex := $(basename $(LOCAL_BUILT_MODULE)).odex
62ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstrominstalled_odex := $(basename $(LOCAL_INSTALLED_MODULE)).odex
6374c9850c795303b2ee60e5c4d8494385e0e57d58Ying Wangbuilt_installed_odex := $(built_odex):$(installed_odex)
64ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstrom
65b9aa5d43de114cecdf94fabb23d3f61f147b627dYing Wang$(built_odex) : $(DEXPREOPT_ONE_FILE_DEPENDENCY_BUILT_BOOT_PREOPT) \
66b9aa5d43de114cecdf94fabb23d3f61f147b627dYing Wang                $(DEXPREOPT_ONE_FILE_DEPENDENCY_TOOLS)
67b9aa5d43de114cecdf94fabb23d3f61f147b627dYing Wangelse # libart
68b9aa5d43de114cecdf94fabb23d3f61f147b627dYing Wangifeq ($(LOCAL_MODULE_CLASS),JAVA_LIBRARIES)
69b9aa5d43de114cecdf94fabb23d3f61f147b627dYing Wang# For a Java library, we build odex for both 1st arch and 2nd arch, if we have one.
70b9aa5d43de114cecdf94fabb23d3f61f147b627dYing Wang# #################################################
71b9aa5d43de114cecdf94fabb23d3f61f147b627dYing Wang# Odex for the 1st arch
72db48da78448b35b2a51f01031b1534ddba16c920Ying Wangmy_2nd_arch_prefix :=
73db48da78448b35b2a51f01031b1534ddba16c920Ying Wanginclude $(BUILD_SYSTEM)/setup_one_odex.mk
74b9aa5d43de114cecdf94fabb23d3f61f147b627dYing Wang# #################################################
75b9aa5d43de114cecdf94fabb23d3f61f147b627dYing Wang# Odex for the 2nd arch
76b9aa5d43de114cecdf94fabb23d3f61f147b627dYing Wangifdef TARGET_2ND_ARCH
77db48da78448b35b2a51f01031b1534ddba16c920Ying Wangmy_2nd_arch_prefix := $(TARGET_2ND_ARCH_VAR_PREFIX)
78db48da78448b35b2a51f01031b1534ddba16c920Ying Wanginclude $(BUILD_SYSTEM)/setup_one_odex.mk
79b9aa5d43de114cecdf94fabb23d3f61f147b627dYing Wangendif  # TARGET_2ND_ARCH
80b9aa5d43de114cecdf94fabb23d3f61f147b627dYing Wang# #################################################
81b9aa5d43de114cecdf94fabb23d3f61f147b627dYing Wangelse  # must be APPS
82db48da78448b35b2a51f01031b1534ddba16c920Ying Wang# The preferred arch
83db48da78448b35b2a51f01031b1534ddba16c920Ying Wangmy_2nd_arch_prefix := $(LOCAL_2ND_ARCH_VAR_PREFIX)
84db48da78448b35b2a51f01031b1534ddba16c920Ying Wanginclude $(BUILD_SYSTEM)/setup_one_odex.mk
857a8991991f6459945782175b0cda7d03fbf6cbdeYing Wangifdef TARGET_2ND_ARCH
86db48da78448b35b2a51f01031b1534ddba16c920Ying Wangifeq ($(LOCAL_MULTILIB),both)
87db48da78448b35b2a51f01031b1534ddba16c920Ying Wang# The non-preferred arch
88db48da78448b35b2a51f01031b1534ddba16c920Ying Wangmy_2nd_arch_prefix := $(if $(LOCAL_2ND_ARCH_VAR_PREFIX),,$(TARGET_2ND_ARCH_VAR_PREFIX))
89db48da78448b35b2a51f01031b1534ddba16c920Ying Wanginclude $(BUILD_SYSTEM)/setup_one_odex.mk
90db48da78448b35b2a51f01031b1534ddba16c920Ying Wangendif  # LOCAL_MULTILIB is both
917a8991991f6459945782175b0cda7d03fbf6cbdeYing Wangendif  # TARGET_2ND_ARCH
92b9aa5d43de114cecdf94fabb23d3f61f147b627dYing Wangendif  # LOCAL_MODULE_CLASS
937a8991991f6459945782175b0cda7d03fbf6cbdeYing Wangendif  # libart
947a8991991f6459945782175b0cda7d03fbf6cbdeYing Wangendif  # boot jar
95ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstrom
96ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstromifdef built_odex
97b9aa5d43de114cecdf94fabb23d3f61f147b627dYing Wang# Use pattern rule - we may have multiple installed odex files.
98b9aa5d43de114cecdf94fabb23d3f61f147b627dYing Wang# Ugly syntax - See the definition get-odex-file-path.
99994c226b91d0b9695cfde8dabb8f243e9f53be64Ying Wang$(installed_odex) : $(dir $(LOCAL_INSTALLED_MODULE))%$(notdir $(word 1,$(installed_odex))) \
100994c226b91d0b9695cfde8dabb8f243e9f53be64Ying Wang                  : $(dir $(LOCAL_BUILT_MODULE))%$(notdir $(word 1,$(built_odex))) \
10136142f64aef3da56a6e70589dad634b5babc0c31Ying Wang    | $(ACP)
102ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstrom	@echo "Install: $@"
103ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstrom	$(copy-file-to-target)
104ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstromendif
105ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstrom
106ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstrom# Add the installed_odex to the list of installed files for this module.
10774c9850c795303b2ee60e5c4d8494385e0e57d58Ying WangALL_MODULES.$(my_register_name).INSTALLED += $(installed_odex)
10874c9850c795303b2ee60e5c4d8494385e0e57d58Ying WangALL_MODULES.$(my_register_name).BUILT_INSTALLED += $(built_installed_odex)
10974c9850c795303b2ee60e5c4d8494385e0e57d58Ying Wang
1105c7fed28f2c06e80182a08e36318d66e494a5a33Ying Wang# Make sure to install the .odex when you run "make <module_name>"
1115c7fed28f2c06e80182a08e36318d66e494a5a33Ying Wang$(my_register_name): $(installed_odex)
1125c7fed28f2c06e80182a08e36318d66e494a5a33Ying Wang
113ced4bff58e76a16ebce3a35ed24aadc8490ca39bBrian Carlstromendif # LOCAL_DEX_PREOPT
114