b4c49cba57
This allows to compile dex targeted java sources using Jack and Jill. Default is still to compile with the legacy toolchain. Default can be switched to the new toolchain by setting environement variable: export ANDROID_COMPILE_WITH_JACK=true Toolchain can also be forced for one module by defining LOCAL_USE_JACK:=true # false in the mk portion defining the module. Jack execution environement can be controlled with: Global variable ANDROID_JACK_VM allow to change the jvm executing Jack. Global variable ANDROID_JACK_VM_ARGS allows to change default args given to the jvm. Global variable ANDROID_JACK_EXTRA_ARGS allows to define some default args to give to Jack LOCAL_JACK_VM_ARGS allows to override default args given to the jvm for the module. LOCAL_JACK_EXTRA_ARGS allows to override default args passed to Jack. Change-Id: Ib81a0fd5f86a51d1e0edbb81cc791d828a05dd29
311 lines
11 KiB
Makefile
311 lines
11 KiB
Makefile
###########################################################
|
|
## Standard rules for copying files that are prebuilt
|
|
##
|
|
## Additional inputs from base_rules.make:
|
|
## None.
|
|
##
|
|
###########################################################
|
|
|
|
ifneq ($(LOCAL_PREBUILT_LIBS),)
|
|
$(error dont use LOCAL_PREBUILT_LIBS anymore LOCAL_PATH=$(LOCAL_PATH))
|
|
endif
|
|
ifneq ($(LOCAL_PREBUILT_EXECUTABLES),)
|
|
$(error dont use LOCAL_PREBUILT_EXECUTABLES anymore LOCAL_PATH=$(LOCAL_PATH))
|
|
endif
|
|
ifneq ($(LOCAL_PREBUILT_JAVA_LIBRARIES),)
|
|
$(error dont use LOCAL_PREBUILT_JAVA_LIBRARIES anymore LOCAL_PATH=$(LOCAL_PATH))
|
|
endif
|
|
|
|
# Not much sense to check build prebuilts
|
|
LOCAL_DONT_CHECK_MODULE := true
|
|
|
|
my_32_64_bit_suffix := $(if $($(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)IS_64_BIT),64,32)
|
|
|
|
ifdef LOCAL_PREBUILT_MODULE_FILE
|
|
my_prebuilt_src_file := $(LOCAL_PREBUILT_MODULE_FILE)
|
|
else
|
|
ifdef LOCAL_SRC_FILES_$($(my_prefix)$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH)
|
|
my_prebuilt_src_file := $(LOCAL_PATH)/$(LOCAL_SRC_FILES_$($(my_prefix)$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH))
|
|
else
|
|
ifdef LOCAL_SRC_FILES_$(my_32_64_bit_suffix)
|
|
my_prebuilt_src_file := $(LOCAL_PATH)/$(LOCAL_SRC_FILES_$(my_32_64_bit_suffix))
|
|
else
|
|
my_prebuilt_src_file := $(LOCAL_PATH)/$(LOCAL_SRC_FILES)
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifeq (SHARED_LIBRARIES,$(LOCAL_MODULE_CLASS))
|
|
# Put the built targets of all shared libraries in a common directory
|
|
# to simplify the link line.
|
|
OVERRIDE_BUILT_MODULE_PATH := $($(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)OUT_INTERMEDIATE_LIBRARIES)
|
|
ifeq ($(LOCAL_IS_HOST_MODULE)$(LOCAL_STRIP_MODULE),)
|
|
# Strip but not try to add debuglink
|
|
LOCAL_STRIP_MODULE := no_debuglink
|
|
endif
|
|
endif
|
|
|
|
ifneq ($(filter STATIC_LIBRARIES SHARED_LIBRARIES,$(LOCAL_MODULE_CLASS)),)
|
|
prebuilt_module_is_a_library := true
|
|
else
|
|
prebuilt_module_is_a_library :=
|
|
endif
|
|
|
|
# Don't install static libraries by default.
|
|
ifndef LOCAL_UNINSTALLABLE_MODULE
|
|
ifeq (STATIC_LIBRARIES,$(LOCAL_MODULE_CLASS))
|
|
LOCAL_UNINSTALLABLE_MODULE := true
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(LOCAL_MODULE_CLASS),APPS)
|
|
LOCAL_BUILT_MODULE_STEM := package.apk
|
|
LOCAL_INSTALLED_MODULE_STEM := $(LOCAL_MODULE).apk
|
|
endif
|
|
|
|
ifneq ($(filter true no_debuglink,$(LOCAL_STRIP_MODULE)),)
|
|
ifdef LOCAL_IS_HOST_MODULE
|
|
$(error Cannot strip host module LOCAL_PATH=$(LOCAL_PATH))
|
|
endif
|
|
ifeq ($(filter SHARED_LIBRARIES EXECUTABLES,$(LOCAL_MODULE_CLASS)),)
|
|
$(error Can strip only shared libraries or executables LOCAL_PATH=$(LOCAL_PATH))
|
|
endif
|
|
ifneq ($(LOCAL_PREBUILT_STRIP_COMMENTS),)
|
|
$(error Cannot strip scripts LOCAL_PATH=$(LOCAL_PATH))
|
|
endif
|
|
include $(BUILD_SYSTEM)/dynamic_binary.mk
|
|
built_module := $(linked_module)
|
|
|
|
else # LOCAL_STRIP_MODULE not true
|
|
include $(BUILD_SYSTEM)/base_rules.mk
|
|
built_module := $(LOCAL_BUILT_MODULE)
|
|
|
|
ifdef prebuilt_module_is_a_library
|
|
export_includes := $(intermediates)/export_includes
|
|
$(export_includes): PRIVATE_EXPORT_C_INCLUDE_DIRS := $(LOCAL_EXPORT_C_INCLUDE_DIRS)
|
|
$(export_includes) : $(LOCAL_MODULE_MAKEFILE)
|
|
@echo Export includes file: $< -- $@
|
|
$(hide) mkdir -p $(dir $@) && rm -f $@
|
|
ifdef LOCAL_EXPORT_C_INCLUDE_DIRS
|
|
$(hide) for d in $(PRIVATE_EXPORT_C_INCLUDE_DIRS); do \
|
|
echo "-I $$d" >> $@; \
|
|
done
|
|
else
|
|
$(hide) touch $@
|
|
endif
|
|
|
|
$(LOCAL_BUILT_MODULE) : | $(intermediates)/export_includes
|
|
endif # prebuilt_module_is_a_library
|
|
|
|
# The real dependency will be added after all Android.mks are loaded and the install paths
|
|
# of the shared libraries are determined.
|
|
ifdef LOCAL_INSTALLED_MODULE
|
|
ifdef LOCAL_SHARED_LIBRARIES
|
|
my_shared_libraries := $(LOCAL_SHARED_LIBRARIES)
|
|
# Extra shared libraries introduced by LOCAL_CXX_STL.
|
|
include $(BUILD_SYSTEM)/cxx_stl_setup.mk
|
|
$(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)DEPENDENCIES_ON_SHARED_LIBRARIES += \
|
|
$(my_register_name):$(LOCAL_INSTALLED_MODULE):$(subst $(space),$(comma),$(my_shared_libraries))
|
|
|
|
# We also need the LOCAL_BUILT_MODULE dependency,
|
|
# since we use -rpath-link which points to the built module's path.
|
|
my_built_shared_libraries := \
|
|
$(addprefix $($(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)OUT_INTERMEDIATE_LIBRARIES)/, \
|
|
$(addsuffix $($(my_prefix)SHLIB_SUFFIX), \
|
|
$(my_shared_libraries)))
|
|
$(LOCAL_BUILT_MODULE) : $(my_built_shared_libraries)
|
|
endif
|
|
endif
|
|
|
|
# We need to enclose the above export_includes and my_built_shared_libraries in
|
|
# "LOCAL_STRIP_MODULE not true" because otherwise the rules are defined in dynamic_binary.mk.
|
|
endif # LOCAL_STRIP_MODULE not true
|
|
|
|
ifeq ($(LOCAL_MODULE_CLASS),APPS)
|
|
PACKAGES.$(LOCAL_MODULE).OVERRIDES := $(strip $(LOCAL_OVERRIDES_PACKAGES))
|
|
|
|
# Select dpi-specific source
|
|
ifdef LOCAL_DPI_VARIANTS
|
|
my_dpi := $(filter $(LOCAL_DPI_VARIANTS),$(PRODUCT_AAPT_PREF_CONFIG))
|
|
ifdef my_dpi
|
|
ifdef LOCAL_DPI_FILE_STEM
|
|
my_prebuilt_dpi_file_stem := $(LOCAL_DPI_FILE_STEM)
|
|
else
|
|
my_prebuilt_dpi_file_stem := $(LOCAL_MODULE)_%.apk
|
|
endif
|
|
my_prebuilt_src_file := $(dir $(my_prebuilt_src_file))$(subst %,$(my_dpi),$(my_prebuilt_dpi_file_stem))
|
|
endif # my_dpi
|
|
endif # LOCAL_DPI_VARIANTS
|
|
|
|
rs_compatibility_jni_libs :=
|
|
include $(BUILD_SYSTEM)/install_jni_libs.mk
|
|
|
|
ifeq ($(LOCAL_CERTIFICATE),EXTERNAL)
|
|
# The magic string "EXTERNAL" means this package will be signed with
|
|
# the default dev key throughout the build process, but we expect
|
|
# the final package to be signed with a different key.
|
|
#
|
|
# This can be used for packages where we don't have access to the
|
|
# keys, but want the package to be predexopt'ed.
|
|
LOCAL_CERTIFICATE := $(DEFAULT_SYSTEM_DEV_CERTIFICATE)
|
|
PACKAGES.$(LOCAL_MODULE).EXTERNAL_KEY := 1
|
|
|
|
$(built_module) : PRIVATE_PRIVATE_KEY := $(LOCAL_CERTIFICATE).pk8
|
|
$(built_module) : PRIVATE_CERTIFICATE := $(LOCAL_CERTIFICATE).x509.pem
|
|
endif
|
|
ifeq ($(LOCAL_CERTIFICATE),)
|
|
# It is now a build error to add a prebuilt .apk without
|
|
# specifying a key for it.
|
|
$(error No LOCAL_CERTIFICATE specified for prebuilt "$(my_prebuilt_src_file)")
|
|
else ifeq ($(LOCAL_CERTIFICATE),PRESIGNED)
|
|
# The magic string "PRESIGNED" means this package is already checked
|
|
# signed with its release key.
|
|
#
|
|
# By setting .CERTIFICATE but not .PRIVATE_KEY, this package will be
|
|
# mentioned in apkcerts.txt (with certificate set to "PRESIGNED")
|
|
# but the dexpreopt process will not try to re-sign the app.
|
|
PACKAGES.$(LOCAL_MODULE).CERTIFICATE := PRESIGNED
|
|
PACKAGES := $(PACKAGES) $(LOCAL_MODULE)
|
|
else
|
|
# If this is not an absolute certificate, assign it to a generic one.
|
|
ifeq ($(dir $(strip $(LOCAL_CERTIFICATE))),./)
|
|
LOCAL_CERTIFICATE := $(dir $(DEFAULT_SYSTEM_DEV_CERTIFICATE))$(LOCAL_CERTIFICATE)
|
|
endif
|
|
|
|
PACKAGES.$(LOCAL_MODULE).PRIVATE_KEY := $(LOCAL_CERTIFICATE).pk8
|
|
PACKAGES.$(LOCAL_MODULE).CERTIFICATE := $(LOCAL_CERTIFICATE).x509.pem
|
|
PACKAGES := $(PACKAGES) $(LOCAL_MODULE)
|
|
|
|
$(built_module) : PRIVATE_PRIVATE_KEY := $(LOCAL_CERTIFICATE).pk8
|
|
$(built_module) : PRIVATE_CERTIFICATE := $(LOCAL_CERTIFICATE).x509.pem
|
|
endif
|
|
|
|
# Disable dex-preopt of prebuilts to save space, if requested.
|
|
ifeq ($(DONT_DEXPREOPT_PREBUILTS),true)
|
|
LOCAL_DEX_PREOPT := false
|
|
endif
|
|
|
|
#######################################
|
|
# defines built_odex along with rule to install odex
|
|
include $(BUILD_SYSTEM)/dex_preopt_odex_install.mk
|
|
#######################################
|
|
# Sign and align non-presigned .apks.
|
|
$(built_module) : $(my_prebuilt_src_file) | $(ACP) $(ZIPALIGN) $(SIGNAPK_JAR)
|
|
$(transform-prebuilt-to-target)
|
|
ifdef extracted_jni_libs
|
|
$(hide) zip -d $@ 'lib/*.so' # strip embedded JNI libraries.
|
|
endif
|
|
ifneq ($(LOCAL_CERTIFICATE),PRESIGNED)
|
|
$(sign-package)
|
|
endif
|
|
ifdef LOCAL_DEX_PREOPT
|
|
ifneq (nostripping,$(LOCAL_DEX_PREOPT))
|
|
$(call dexpreopt-remove-classes.dex,$@)
|
|
endif
|
|
endif
|
|
$(align-package)
|
|
|
|
###############################
|
|
## Rule to build the odex file
|
|
ifdef LOCAL_DEX_PREOPT
|
|
$(built_odex) : $(my_prebuilt_src_file)
|
|
$(call dexpreopt-one-file,$<,$@)
|
|
endif
|
|
|
|
###############################
|
|
## Install split apks.
|
|
ifdef LOCAL_PACKAGE_SPLITS
|
|
# LOCAL_PACKAGE_SPLITS is a list of apks to be installed.
|
|
built_apk_splits := $(addprefix $(built_module_path)/,$(notdir $(LOCAL_PACKAGE_SPLITS)))
|
|
installed_apk_splits := $(addprefix $(my_module_path)/,$(notdir $(LOCAL_PACKAGE_SPLITS)))
|
|
|
|
# Rules to sign and zipalign the split apks.
|
|
my_src_dir := $(sort $(dir $(LOCAL_PACKAGE_SPLITS)))
|
|
ifneq (1,$(words $(my_src_dir)))
|
|
$(error You must put all the split source apks in the same folder: $(LOCAL_PACKAGE_SPLITS))
|
|
endif
|
|
my_src_dir := $(LOCAL_PATH)/$(my_src_dir)
|
|
|
|
$(built_apk_splits) : PRIVATE_PRIVATE_KEY := $(LOCAL_CERTIFICATE).pk8
|
|
$(built_apk_splits) : PRIVATE_CERTIFICATE := $(LOCAL_CERTIFICATE).x509.pem
|
|
$(built_apk_splits) : $(built_module_path)/%.apk : $(my_src_dir)/%.apk | $(ACP)
|
|
$(copy-file-to-new-target)
|
|
$(sign-package)
|
|
$(align-package)
|
|
|
|
# Rules to install the split apks.
|
|
$(installed_apk_splits) : $(my_module_path)/%.apk : $(built_module_path)/%.apk | $(ACP)
|
|
@echo "Install: $@"
|
|
$(copy-file-to-new-target)
|
|
|
|
# Register the additional built and installed files.
|
|
ALL_MODULES.$(my_register_name).INSTALLED += $(installed_apk_splits)
|
|
ALL_MODULES.$(my_register_name).BUILT_INSTALLED += \
|
|
$(foreach s,$(LOCAL_PACKAGE_SPLITS),$(built_module_path)/$(notdir $(s)):$(my_module_path)/$(notdir $(s)))
|
|
|
|
# Make sure to install the splits when you run "make <module_name>".
|
|
$(my_register_name): $(installed_apk_splits)
|
|
|
|
endif # LOCAL_PACKAGE_SPLITS
|
|
|
|
else # LOCAL_MODULE_CLASS != APPS
|
|
ifneq ($(LOCAL_PREBUILT_STRIP_COMMENTS),)
|
|
$(built_module) : $(my_prebuilt_src_file)
|
|
$(transform-prebuilt-to-target-strip-comments)
|
|
else
|
|
$(built_module) : $(my_prebuilt_src_file) | $(ACP)
|
|
$(transform-prebuilt-to-target)
|
|
ifneq ($(prebuilt_module_is_a_library),)
|
|
ifneq ($(LOCAL_IS_HOST_MODULE),)
|
|
$(transform-host-ranlib-copy-hack)
|
|
else
|
|
$(transform-ranlib-copy-hack)
|
|
endif
|
|
endif
|
|
endif
|
|
endif # LOCAL_MODULE_CLASS != APPS
|
|
|
|
ifeq ($(LOCAL_IS_HOST_MODULE)$(LOCAL_MODULE_CLASS),JAVA_LIBRARIES)
|
|
# for target java libraries, the LOCAL_BUILT_MODULE is in a product-specific dir,
|
|
# while the deps should be in the common dir, so we make a copy in the common dir.
|
|
# For nonstatic library, $(common_javalib_jar) is the dependency file,
|
|
# while $(common_classes_jar) is used to link.
|
|
common_classes_jar := $(intermediates.COMMON)/classes.jar
|
|
common_javalib_jar := $(intermediates.COMMON)/javalib.jar
|
|
|
|
$(common_classes_jar) $(common_javalib_jar): PRIVATE_MODULE := $(LOCAL_MODULE)
|
|
|
|
ifneq ($(filter %.aar, $(my_prebuilt_src_file)),)
|
|
# This is .aar file, archive of classes.jar and Android resources.
|
|
my_src_jar := $(intermediates.COMMON)/aar/classes.jar
|
|
|
|
$(my_src_jar) : $(my_prebuilt_src_file)
|
|
$(hide) rm -rf $(dir $@) && mkdir -p $(dir $@)
|
|
$(hide) unzip -qo -d $(dir $@) $<
|
|
# Make sure the extracted classes.jar has a new timestamp.
|
|
$(hide) touch $@
|
|
|
|
else
|
|
# This is jar file.
|
|
my_src_jar := $(my_prebuilt_src_file)
|
|
endif
|
|
$(common_classes_jar) : $(my_src_jar) | $(ACP)
|
|
$(transform-prebuilt-to-target)
|
|
|
|
$(common_javalib_jar) : $(common_classes_jar) | $(ACP)
|
|
$(transform-prebuilt-to-target)
|
|
|
|
# make sure the classes.jar and javalib.jar are built before $(LOCAL_BUILT_MODULE)
|
|
$(built_module) : $(common_javalib_jar)
|
|
endif # TARGET JAVA_LIBRARIES
|
|
|
|
ifeq ($(LOCAL_MODULE_CLASS),JAVA_LIBRARIES)
|
|
$(intermediates.COMMON)/classes.jack : $(my_prebuilt_src_file) $(LOCAL_MODULE_MAKEFILE) \
|
|
$(LOCAL_ADDITIONAL_DEPENDENCIES) $(JILL_JAR)
|
|
$(transform-jar-to-jack)
|
|
|
|
endif # JAVA_LIBRARIES
|
|
|
|
$(built_module) : $(LOCAL_MODULE_MAKEFILE) $(LOCAL_ADDITIONAL_DEPENDENCIES)
|
|
|
|
my_prebuilt_src_file :=
|