Brian Carlstrom | ced4bff | 2013-11-14 23:44:56 -0800 | [diff] [blame] | 1 | # dexpreopt_odex_install.mk is used to define odex creation rules for JARs and APKs |
| 2 | # This file depends on variables set in base_rules.mk |
Nicolas Geoffray | 3972a47 | 2018-01-09 11:46:30 +0000 | [diff] [blame] | 3 | # Output variables: LOCAL_DEX_PREOPT, LOCAL_UNCOMPRESS_DEX, built_odex, |
| 4 | # dexpreopt_boot_jar_module |
| 5 | |
Victor Hsieh | e53dd7b | 2018-10-22 11:25:05 -0700 | [diff] [blame] | 6 | ifeq (true,$(LOCAL_PREFER_INTEGRITY)) |
| 7 | LOCAL_UNCOMPRESS_DEX := true |
| 8 | else |
| 9 | LOCAL_UNCOMPRESS_DEX := |
| 10 | endif |
| 11 | |
Nicolas Geoffray | 3972a47 | 2018-01-09 11:46:30 +0000 | [diff] [blame] | 12 | # We explicitly uncompress APKs of privileged apps, and used by |
| 13 | # privileged apps |
Nicolas Geoffray | 3972a47 | 2018-01-09 11:46:30 +0000 | [diff] [blame] | 14 | ifneq (true,$(DONT_UNCOMPRESS_PRIV_APPS_DEXS)) |
Colin Cross | 0a69bb6 | 2018-10-09 16:14:44 -0700 | [diff] [blame] | 15 | ifeq (true,$(LOCAL_PRIVILEGED_MODULE)) |
Nicolas Geoffray | 3972a47 | 2018-01-09 11:46:30 +0000 | [diff] [blame] | 16 | LOCAL_UNCOMPRESS_DEX := true |
Colin Cross | c18757e | 2018-10-09 16:33:27 -0700 | [diff] [blame] | 17 | endif |
| 18 | |
Nicolas Geoffray | 3972a47 | 2018-01-09 11:46:30 +0000 | [diff] [blame] | 19 | ifneq (,$(filter $(PRODUCT_LOADED_BY_PRIVILEGED_MODULES), $(LOCAL_MODULE))) |
| 20 | LOCAL_UNCOMPRESS_DEX := true |
Colin Cross | c18757e | 2018-10-09 16:33:27 -0700 | [diff] [blame] | 21 | endif |
Nicolas Geoffray | 3972a47 | 2018-01-09 11:46:30 +0000 | [diff] [blame] | 22 | endif # DONT_UNCOMPRESS_PRIV_APPS_DEXS |
Brian Carlstrom | ced4bff | 2013-11-14 23:44:56 -0800 | [diff] [blame] | 23 | |
| 24 | # Setting LOCAL_DEX_PREOPT based on WITH_DEXPREOPT, LOCAL_DEX_PREOPT, etc |
| 25 | LOCAL_DEX_PREOPT := $(strip $(LOCAL_DEX_PREOPT)) |
Colin Cross | c18757e | 2018-10-09 16:33:27 -0700 | [diff] [blame] | 26 | ifndef LOCAL_DEX_PREOPT # LOCAL_DEX_PREOPT undefined |
| 27 | LOCAL_DEX_PREOPT := $(DEX_PREOPT_DEFAULT) |
Colin Cross | fc782ad | 2018-10-22 13:44:27 -0700 | [diff] [blame] | 28 | endif |
| 29 | |
Brian Carlstrom | ced4bff | 2013-11-14 23:44:56 -0800 | [diff] [blame] | 30 | ifeq (false,$(LOCAL_DEX_PREOPT)) |
| 31 | LOCAL_DEX_PREOPT := |
| 32 | endif |
Colin Cross | 0a69bb6 | 2018-10-09 16:14:44 -0700 | [diff] [blame] | 33 | |
Colin Cross | c18757e | 2018-10-09 16:33:27 -0700 | [diff] [blame] | 34 | # Only enable preopt for non tests. |
| 35 | ifneq (,$(filter $(LOCAL_MODULE_TAGS),tests)) |
| 36 | LOCAL_DEX_PREOPT := |
| 37 | endif |
| 38 | |
| 39 | # If we have product-specific config for this module? |
Colin Cross | 3aa2f8f | 2018-10-05 14:41:04 -0700 | [diff] [blame] | 40 | ifneq (,$(filter $(LOCAL_MODULE),$(DEXPREOPT_DISABLED_MODULES))) |
Colin Cross | c18757e | 2018-10-09 16:33:27 -0700 | [diff] [blame] | 41 | LOCAL_DEX_PREOPT := |
| 42 | endif |
| 43 | |
| 44 | # Disable preopt for TARGET_BUILD_APPS |
| 45 | ifneq (,$(TARGET_BUILD_APPS)) |
| 46 | LOCAL_DEX_PREOPT := |
| 47 | endif |
| 48 | |
| 49 | # Disable preopt if not WITH_DEXPREOPT |
| 50 | ifneq (true,$(WITH_DEXPREOPT)) |
| 51 | LOCAL_DEX_PREOPT := |
| 52 | endif |
| 53 | |
Brian Carlstrom | ced4bff | 2013-11-14 23:44:56 -0800 | [diff] [blame] | 54 | ifdef LOCAL_UNINSTALLABLE_MODULE |
Colin Cross | 0a69bb6 | 2018-10-09 16:14:44 -0700 | [diff] [blame] | 55 | LOCAL_DEX_PREOPT := |
Brian Carlstrom | ced4bff | 2013-11-14 23:44:56 -0800 | [diff] [blame] | 56 | endif |
Colin Cross | 0a69bb6 | 2018-10-09 16:14:44 -0700 | [diff] [blame] | 57 | |
Colin Cross | f229de4 | 2017-10-05 16:01:00 -0700 | [diff] [blame] | 58 | ifeq (,$(strip $(built_dex)$(my_prebuilt_src_file)$(LOCAL_SOONG_DEX_JAR))) # contains no java code |
Colin Cross | 0a69bb6 | 2018-10-09 16:14:44 -0700 | [diff] [blame] | 59 | LOCAL_DEX_PREOPT := |
Brian Carlstrom | ced4bff | 2013-11-14 23:44:56 -0800 | [diff] [blame] | 60 | endif |
Colin Cross | 0a69bb6 | 2018-10-09 16:14:44 -0700 | [diff] [blame] | 61 | |
Mathieu Chartier | 418258c | 2017-08-28 14:19:35 -0700 | [diff] [blame] | 62 | # if WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY=true and module is not in boot class path skip |
| 63 | # Also preopt system server jars since selinux prevents system server from loading anything from |
| 64 | # /data. If we don't do this they will need to be extracted which is not favorable for RAM usage |
Mathieu Chartier | 0fbb836 | 2017-09-15 13:40:48 -0700 | [diff] [blame] | 65 | # or performance. If my_preopt_for_extracted_apk is true, we ignore the only preopt boot image |
| 66 | # options. |
| 67 | ifneq (true,$(my_preopt_for_extracted_apk)) |
Colin Cross | 0a69bb6 | 2018-10-09 16:14:44 -0700 | [diff] [blame] | 68 | ifeq (true,$(WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY)) |
| 69 | ifeq ($(filter $(PRODUCT_SYSTEM_SERVER_JARS) $(DEXPREOPT_BOOT_JARS_MODULES),$(LOCAL_MODULE)),) |
| 70 | LOCAL_DEX_PREOPT := |
| 71 | endif |
| 72 | endif |
Mathieu Chartier | 0fbb836 | 2017-09-15 13:40:48 -0700 | [diff] [blame] | 73 | endif |
| 74 | |
Calin Juravle | f99ab75 | 2018-04-19 20:32:57 -0700 | [diff] [blame] | 75 | my_process_profile := |
| 76 | my_profile_is_text_listing := |
Mathieu Chartier | 192b91c | 2017-02-08 18:30:31 -0800 | [diff] [blame] | 77 | |
Mathieu Chartier | 6324c2d | 2017-05-05 17:22:37 -0700 | [diff] [blame] | 78 | ifeq (false,$(WITH_DEX_PREOPT_GENERATE_PROFILE)) |
Colin Cross | 0a69bb6 | 2018-10-09 16:14:44 -0700 | [diff] [blame] | 79 | LOCAL_DEX_PREOPT_GENERATE_PROFILE := false |
Mathieu Chartier | 6324c2d | 2017-05-05 17:22:37 -0700 | [diff] [blame] | 80 | endif |
| 81 | |
| 82 | ifndef LOCAL_DEX_PREOPT_GENERATE_PROFILE |
Colin Cross | 0a69bb6 | 2018-10-09 16:14:44 -0700 | [diff] [blame] | 83 | # If LOCAL_DEX_PREOPT_GENERATE_PROFILE is not defined, default it based on the existence of the |
| 84 | # profile class listing. TODO: Use product specific directory here. |
| 85 | my_classes_directory := $(PRODUCT_DEX_PREOPT_PROFILE_DIR) |
| 86 | LOCAL_DEX_PREOPT_PROFILE := $(my_classes_directory)/$(LOCAL_MODULE).prof |
Calin Juravle | 7d70135 | 2018-04-25 15:25:46 -0700 | [diff] [blame] | 87 | |
Colin Cross | 0a69bb6 | 2018-10-09 16:14:44 -0700 | [diff] [blame] | 88 | ifneq (,$(wildcard $(LOCAL_DEX_PREOPT_PROFILE))) |
| 89 | my_process_profile := true |
Colin Cross | e736c58 | 2018-11-16 21:26:33 -0800 | [diff] [blame^] | 90 | my_profile_is_text_listing := |
Colin Cross | 0a69bb6 | 2018-10-09 16:14:44 -0700 | [diff] [blame] | 91 | endif |
Calin Juravle | f99ab75 | 2018-04-19 20:32:57 -0700 | [diff] [blame] | 92 | else |
Colin Cross | 0a69bb6 | 2018-10-09 16:14:44 -0700 | [diff] [blame] | 93 | my_process_profile := $(LOCAL_DEX_PREOPT_GENERATE_PROFILE) |
| 94 | my_profile_is_text_listing := true |
| 95 | LOCAL_DEX_PREOPT_PROFILE := $(LOCAL_DEX_PREOPT_PROFILE_CLASS_LISTING) |
Mathieu Chartier | 6324c2d | 2017-05-05 17:22:37 -0700 | [diff] [blame] | 96 | endif |
Mathieu Chartier | 4876229 | 2017-09-13 22:08:45 -0700 | [diff] [blame] | 97 | |
Calin Juravle | f99ab75 | 2018-04-19 20:32:57 -0700 | [diff] [blame] | 98 | ifeq (true,$(my_process_profile)) |
Colin Cross | 0a69bb6 | 2018-10-09 16:14:44 -0700 | [diff] [blame] | 99 | ifndef LOCAL_DEX_PREOPT_PROFILE |
| 100 | $(call pretty-error,Must have specified class listing (LOCAL_DEX_PREOPT_PROFILE)) |
| 101 | endif |
| 102 | ifeq (,$(dex_preopt_profile_src_file)) |
| 103 | $(call pretty-error, Internal error: dex_preopt_profile_src_file must be set) |
| 104 | endif |
Mathieu Chartier | 4876229 | 2017-09-13 22:08:45 -0700 | [diff] [blame] | 105 | endif |
| 106 | |
Colin Cross | e736c58 | 2018-11-16 21:26:33 -0800 | [diff] [blame^] | 107 | # If LOCAL_ENFORCE_USES_LIBRARIES is not set, default to true if either of LOCAL_USES_LIBRARIES or |
| 108 | # LOCAL_OPTIONAL_USES_LIBRARIES are specified. |
| 109 | ifeq (,$(LOCAL_ENFORCE_USES_LIBRARIES)) |
| 110 | # Will change the default to true unconditionally in the future. |
| 111 | ifneq (,$(LOCAL_OPTIONAL_USES_LIBRARIES)) |
| 112 | LOCAL_ENFORCE_USES_LIBRARIES := true |
| 113 | endif |
| 114 | ifneq (,$(LOCAL_USES_LIBRARIES)) |
| 115 | LOCAL_ENFORCE_USES_LIBRARIES := true |
| 116 | endif |
| 117 | endif |
| 118 | |
| 119 | my_dexpreopt_archs := |
| 120 | |
Mathieu Chartier | 4876229 | 2017-09-13 22:08:45 -0700 | [diff] [blame] | 121 | ifdef LOCAL_DEX_PREOPT |
Colin Cross | e736c58 | 2018-11-16 21:26:33 -0800 | [diff] [blame^] | 122 | ifeq ($(LOCAL_MODULE_CLASS),JAVA_LIBRARIES) |
| 123 | my_module_multilib := $(LOCAL_MULTILIB) |
| 124 | # If the module is not an SDK library and it's a system server jar, only preopt the primary arch. |
| 125 | my_filtered_lib_name := $(patsubst %.impl,%,$(LOCAL_MODULE)) |
| 126 | ifeq (,$(filter $(JAVA_SDK_LIBRARIES),$(my_filtered_lib_name))) |
| 127 | # For a Java library, by default we build odex for both 1st arch and 2nd arch. |
| 128 | # But it can be overridden with "LOCAL_MULTILIB := first". |
| 129 | ifneq (,$(filter $(PRODUCT_SYSTEM_SERVER_JARS),$(LOCAL_MODULE))) |
| 130 | # For system server jars, we build for only "first". |
Colin Cross | 0a69bb6 | 2018-10-09 16:14:44 -0700 | [diff] [blame] | 131 | my_module_multilib := first |
| 132 | endif |
Colin Cross | 0a69bb6 | 2018-10-09 16:14:44 -0700 | [diff] [blame] | 133 | endif |
| 134 | |
Colin Cross | e736c58 | 2018-11-16 21:26:33 -0800 | [diff] [blame^] | 135 | # Only preopt primary arch for translated arch since there is only an image there. |
| 136 | ifeq ($(TARGET_TRANSLATE_2ND_ARCH),true) |
| 137 | my_module_multilib := first |
Mathieu Chartier | c5536ff | 2017-05-05 14:59:06 -0700 | [diff] [blame] | 138 | endif |
Nicolas Geoffray | b08ada1 | 2017-03-22 12:36:05 +0000 | [diff] [blame] | 139 | |
Colin Cross | e736c58 | 2018-11-16 21:26:33 -0800 | [diff] [blame^] | 140 | # ################################################# |
| 141 | # Odex for the 1st arch |
| 142 | my_dexpreopt_archs += $(TARGET_ARCH) |
| 143 | # Odex for the 2nd arch |
| 144 | ifdef TARGET_2ND_ARCH |
| 145 | ifneq ($(TARGET_TRANSLATE_2ND_ARCH),true) |
| 146 | ifneq (first,$(my_module_multilib)) |
| 147 | my_dexpreopt_archs += $(TARGET_2ND_ARCH) |
| 148 | endif # my_module_multilib is not first. |
| 149 | endif # TARGET_TRANSLATE_2ND_ARCH not true |
| 150 | endif # TARGET_2ND_ARCH |
| 151 | # ################################################# |
| 152 | else # must be APPS |
| 153 | # The preferred arch |
| 154 | # Save the module multilib since setup_one_odex modifies it. |
| 155 | my_2nd_arch_prefix := $(LOCAL_2ND_ARCH_VAR_PREFIX) |
| 156 | my_dexpreopt_archs += $(TARGET_$(my_2nd_arch_prefix)ARCH) |
| 157 | ifdef TARGET_2ND_ARCH |
| 158 | ifeq ($(my_module_multilib),both) |
| 159 | # The non-preferred arch |
| 160 | my_2nd_arch_prefix := $(if $(LOCAL_2ND_ARCH_VAR_PREFIX),,$(TARGET_2ND_ARCH_VAR_PREFIX)) |
| 161 | my_dexpreopt_archs += $(TARGET_$(my_2nd_arch_prefix)ARCH) |
| 162 | endif # LOCAL_MULTILIB is both |
| 163 | endif # TARGET_2ND_ARCH |
| 164 | endif # LOCAL_MODULE_CLASS |
Andreas Gampe | cdfe46b | 2018-03-19 14:28:15 -0700 | [diff] [blame] | 165 | |
Colin Cross | 0a69bb6 | 2018-10-09 16:14:44 -0700 | [diff] [blame] | 166 | # Record dex-preopt config. |
| 167 | DEXPREOPT.$(LOCAL_MODULE).DEX_PREOPT := $(LOCAL_DEX_PREOPT) |
| 168 | DEXPREOPT.$(LOCAL_MODULE).MULTILIB := $(LOCAL_MULTILIB) |
| 169 | DEXPREOPT.$(LOCAL_MODULE).DEX_PREOPT_FLAGS := $(LOCAL_DEX_PREOPT_FLAGS) |
| 170 | DEXPREOPT.$(LOCAL_MODULE).PRIVILEGED_MODULE := $(LOCAL_PRIVILEGED_MODULE) |
| 171 | DEXPREOPT.$(LOCAL_MODULE).VENDOR_MODULE := $(LOCAL_VENDOR_MODULE) |
| 172 | DEXPREOPT.$(LOCAL_MODULE).TARGET_ARCH := $(LOCAL_MODULE_TARGET_ARCH) |
Colin Cross | 0a69bb6 | 2018-10-09 16:14:44 -0700 | [diff] [blame] | 173 | DEXPREOPT.$(LOCAL_MODULE).INSTALLED_STRIPPED := $(LOCAL_INSTALLED_MODULE) |
| 174 | DEXPREOPT.MODULES.$(LOCAL_MODULE_CLASS) := $(sort \ |
| 175 | $(DEXPREOPT.MODULES.$(LOCAL_MODULE_CLASS)) $(LOCAL_MODULE)) |
Ying Wang | fbc5b9f | 2016-03-11 10:32:01 -0800 | [diff] [blame] | 176 | |
Colin Cross | e736c58 | 2018-11-16 21:26:33 -0800 | [diff] [blame^] | 177 | $(call json_start) |
| 178 | |
| 179 | $(call add_json_str, Name, $(LOCAL_MODULE)) |
| 180 | $(call add_json_str, DexLocation, $(patsubst $(PRODUCT_OUT)%,%,$(LOCAL_INSTALLED_MODULE))) |
| 181 | $(call add_json_str, BuildPath, $(LOCAL_BUILT_MODULE)) |
| 182 | $(call add_json_str, DexPath, $$1) |
| 183 | $(call add_json_str, ExtrasOutputPath, $$2) |
| 184 | $(call add_json_bool, PreferIntegrity, $(filter true,$(LOCAL_PREFER_INTEGRITY))) |
| 185 | $(call add_json_bool, Privileged, $(filter true,$(LOCAL_PRIVILEGED_MODULE))) |
| 186 | $(call add_json_bool, UncompressedDex, $(filter true,$(LOCAL_UNCOMPRESS_DEX))) |
| 187 | $(call add_json_bool, HasApkLibraries, $(LOCAL_APK_LIBRARIES)) |
| 188 | $(call add_json_list, PreoptFlags, $(LOCAL_DEX_PREOPT_FLAGS)) |
| 189 | $(call add_json_str, ProfileClassListing, $(if $(my_process_profile),$(LOCAL_DEX_PREOPT_PROFILE))) |
| 190 | $(call add_json_bool, ProfileIsTextListing, $(my_profile_is_text_listing)) |
| 191 | $(call add_json_bool, EnforceUsesLibraries, $(LOCAL_ENFORCE_USES_LIBRARIES)) |
| 192 | $(call add_json_list, OptionalUsesLibraries, $(LOCAL_OPTIONAL_USES_LIBRARIES)) |
| 193 | $(call add_json_list, UsesLibraries, $(LOCAL_USES_LIBRARIES)) |
| 194 | $(call add_json_map, LibraryPaths) |
| 195 | $(foreach lib,$(sort $(LOCAL_USES_LIBRARIES) $(LOCAL_OPTIONAL_USES_LIBRARIES) org.apache.http.legacy.impl),\ |
| 196 | $(call add_json_str, $(lib), $(call intermediates-dir-for,JAVA_LIBRARIES,$(lib),,COMMON)/javalib.jar)) |
| 197 | $(call end_json_map) |
| 198 | $(call add_json_list, Archs, $(my_dexpreopt_archs)) |
| 199 | $(call add_json_str, DexPreoptImageLocation, $(LOCAL_DEX_PREOPT_IMAGE_LOCATION)) |
| 200 | $(call add_json_bool, PreoptExtractedApk, $(my_preopt_for_extracted_apk)) |
| 201 | $(call add_json_bool, NoCreateAppImage, $(filter false,$(LOCAL_DEX_PREOPT_APP_IMAGE))) |
| 202 | $(call add_json_bool, ForceCreateAppImage, $(filter true,$(LOCAL_DEX_PREOPT_APP_IMAGE))) |
| 203 | $(call add_json_bool, PresignedPrebuilt, $(filter PRESIGNED,$(LOCAL_CERTIFICATE))) |
| 204 | |
| 205 | $(call add_json_str, StripInputPath, $$1) |
| 206 | $(call add_json_str, StripOutputPath, $$2) |
| 207 | |
| 208 | $(call json_end) |
| 209 | |
| 210 | my_dexpreopt_config := $(intermediates)/dexpreopt.config |
| 211 | my_dexpreopt_script := $(intermediates)/dexpreopt.sh |
| 212 | my_strip_script := $(intermediates)/strip.sh |
| 213 | my_dexpreopt_zip := $(intermediates)/dexpreopt.zip |
| 214 | |
| 215 | $(my_dexpreopt_config): PRIVATE_MODULE := $(LOCAL_MODULE) |
| 216 | $(my_dexpreopt_config): PRIVATE_CONTENTS := $(json_contents) |
| 217 | $(my_dexpreopt_config): |
| 218 | @echo "$(PRIVATE_MODULE) dexpreopt.config" |
| 219 | echo -e -n '$(subst $(newline),\n,$(subst ','\'',$(subst \,\\,$(PRIVATE_CONTENTS))))' > $@ |
| 220 | |
| 221 | .KATI_RESTAT: $(my_dexpreopt_script) $(my_strip_script) |
| 222 | $(my_dexpreopt_script): PRIVATE_MODULE := $(LOCAL_MODULE) |
| 223 | $(my_dexpreopt_script): PRIVATE_GLOBAL_CONFIG := $(PRODUCT_OUT)/dexpreopt.config |
| 224 | $(my_dexpreopt_script): PRIVATE_MODULE_CONFIG := $(my_dexpreopt_config) |
| 225 | $(my_dexpreopt_script): PRIVATE_STRIP_SCRIPT := $(my_strip_script) |
| 226 | $(my_dexpreopt_script): .KATI_IMPLICIT_OUTPUTS := $(my_strip_script) |
| 227 | $(my_dexpreopt_script): $(DEXPREOPT_GEN) |
| 228 | $(my_dexpreopt_script): $(my_dexpreopt_config) $(PRODUCT_OUT)/dexpreopt.config |
| 229 | @echo "$(PRIVATE_MODULE) dexpreopt gen" |
| 230 | $(DEXPREOPT_GEN) -global $(PRIVATE_GLOBAL_CONFIG) -module $(PRIVATE_MODULE_CONFIG) \ |
| 231 | -extras_zip '"$$2"' -dexpreopt_script $@ -strip_script $(PRIVATE_STRIP_SCRIPT) |
| 232 | |
| 233 | my_dexpreopt_deps := $(my_dex_jar) |
| 234 | my_dexpreopt_deps += $(if $(my_process_profile),$(LOCAL_DEX_PREOPT_PROFILE)) |
| 235 | my_dexpreopt_deps += \ |
| 236 | $(foreach lib,$(sort $(LOCAL_USES_LIBRARIES) $(LOCAL_OPTIONAL_USES_LIBRARIES) org.apache.http.legacy.impl),\ |
| 237 | $(call intermediates-dir-for,JAVA_LIBRARIES,$(lib),,COMMON)/javalib.jar) |
| 238 | my_dexpreopt_deps += $(LOCAL_DEX_PREOPT_IMAGE_LOCATION) |
| 239 | # TODO: default boot images |
| 240 | |
| 241 | $(my_dexpreopt_zip): PRIVATE_MODULE := $(LOCAL_MODULE) |
| 242 | $(my_dexpreopt_zip): $(my_dexpreopt_deps) |
| 243 | $(my_dexpreopt_zip): | $(DEXPREOPT_GEN_DEPS) |
| 244 | $(my_dexpreopt_zip): .KATI_DEPFILE := $(my_dexpreopt_zip).d |
| 245 | $(my_dexpreopt_zip): PRIVATE_DEX := $(my_dex_jar) |
| 246 | $(my_dexpreopt_zip): PRIVATE_SCRIPT := $(my_dexpreopt_script) |
| 247 | $(my_dexpreopt_zip): $(my_dexpreopt_script) |
| 248 | @echo "$(PRIVATE_MODULE) dexpreopt" |
| 249 | bash $(PRIVATE_SCRIPT) $(PRIVATE_DEX) $@ |
| 250 | |
| 251 | ifdef LOCAL_POST_INSTALL_CMD |
| 252 | # Add a shell command separator |
| 253 | LOCAL_POST_INSTALL_CMD += && |
| 254 | endif |
| 255 | |
| 256 | LOCAL_POST_INSTALL_CMD += unzip -qo -d $(PRODUCT_OUT) $(my_dexpreopt_zip) |
| 257 | $(LOCAL_INSTALLED_MODULE): PRIVATE_POST_INSTALL_CMD := $(LOCAL_POST_INSTALL_CMD) |
| 258 | $(LOCAL_INSTALLED_MODULE): $(my_dexpreopt_zip) |
| 259 | |
| 260 | $(my_all_targets): $(my_dexpreopt_zip) |
| 261 | |
| 262 | my_dexpreopt_config := |
| 263 | my_dexpreopt_script := |
| 264 | my_strip_script := |
| 265 | my_dexpreopt_zip := |
Brian Carlstrom | ced4bff | 2013-11-14 23:44:56 -0800 | [diff] [blame] | 266 | endif # LOCAL_DEX_PREOPT |