f09e59eb52
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_JACK_ENABLED:=full # disabled, full, incremental 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. This includes cherry-picks of the following changes:b4c49cba57
22c3fa6d73
138768c1bb
5dd3e1d312
83d5d04047
8bc90fd2d6
140274707e
0fbc9ff2a2
833b427d72
f9a27f45b4
2809666941
37822c443d
c6b44d43c3
d2a76c14bf
06744f60fc
95573d5036
b821391614
2794e7b582
801f2c44d0
c76d99dca1
f528e132d6
76a5e0bd1a
e25b3984ff
Partially, only Jack related parts werekeptec46a3b71f
abee3a9f41
77cbe10fd9
daf07db4cd
b6bfb5893a
Ie all Jack related changes untillb6bfb5893a
excepta96cc59ab5
"Use Jack by default" Change-Id: If9d47ef1c4fd1e6765ad2a47d816c1ad3cfab0e3
100 lines
3.8 KiB
Makefile
100 lines
3.8 KiB
Makefile
###########################################################
|
|
## Track NOTICE files
|
|
###########################################################
|
|
|
|
notice_file:=$(strip $(wildcard $(LOCAL_PATH)/NOTICE))
|
|
|
|
ifeq ($(LOCAL_MODULE_CLASS),GYP)
|
|
# We ignore NOTICE files for modules of type GYP.
|
|
notice_file :=
|
|
endif
|
|
|
|
ifeq ($(LOCAL_MODULE_CLASS),NOTICE_FILES)
|
|
# If this is a NOTICE-only module, we don't include base_rule.mk,
|
|
# so my_prefix is not set at this point.
|
|
ifeq ($(LOCAL_IS_HOST_MODULE),true)
|
|
my_prefix := HOST_
|
|
else
|
|
my_prefix := TARGET_
|
|
endif
|
|
endif
|
|
|
|
ifdef notice_file
|
|
|
|
# This relies on the name of the directory in PRODUCT_OUT matching where
|
|
# it's installed on the target - i.e. system, data, etc. This does
|
|
# not work for root and isn't exact, but it's probably good enough for
|
|
# compliance.
|
|
# Includes the leading slash
|
|
ifdef LOCAL_INSTALLED_MODULE
|
|
module_installed_filename := $(patsubst $(PRODUCT_OUT)%,%,$(LOCAL_INSTALLED_MODULE))
|
|
else
|
|
# This module isn't installable
|
|
ifeq ($(LOCAL_MODULE_CLASS),STATIC_LIBRARIES)
|
|
# Stick the static libraries with the dynamic libraries.
|
|
# We can't use xxx_OUT_STATIC_LIBRARIES because it points into
|
|
# device-obj or host-obj.
|
|
module_installed_filename := \
|
|
$(patsubst $(PRODUCT_OUT)%,%,$($(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)OUT_SHARED_LIBRARIES))/$(notdir $(LOCAL_BUILT_MODULE))
|
|
else
|
|
ifeq ($(LOCAL_MODULE_CLASS),JAVA_LIBRARIES)
|
|
# Stick the static java libraries with the regular java libraries.
|
|
module_leaf := $(notdir $(LOCAL_BUILT_MODULE))
|
|
# javalib.jar is the default name for the build module (and isn't meaningful)
|
|
# If that's what we have, substitute the module name instead. These files
|
|
# aren't included on the device, so this name is synthetic anyway.
|
|
ifneq ($(filter javalib.jar classes.jack,$(module_leaf)),)
|
|
module_leaf := $(LOCAL_MODULE).jar
|
|
endif
|
|
module_installed_filename := \
|
|
$(patsubst $(PRODUCT_OUT)%,%,$($(my_prefix)OUT_JAVA_LIBRARIES))/$(module_leaf)
|
|
else
|
|
$(error Cannot determine where to install NOTICE file for $(LOCAL_MODULE))
|
|
endif # JAVA_LIBRARIES
|
|
endif # STATIC_LIBRARIES
|
|
endif
|
|
|
|
# In case it's actually a host file
|
|
module_installed_filename := $(patsubst $(HOST_OUT)%,%,$(module_installed_filename))
|
|
|
|
installed_notice_file := $($(my_prefix)OUT_NOTICE_FILES)/src/$(module_installed_filename).txt
|
|
|
|
$(installed_notice_file): PRIVATE_INSTALLED_MODULE := $(module_installed_filename)
|
|
|
|
$(installed_notice_file): $(notice_file)
|
|
@echo Notice file: $< -- $@
|
|
$(hide) mkdir -p $(dir $@)
|
|
$(hide) cat $< > $@
|
|
|
|
ifdef LOCAL_INSTALLED_MODULE
|
|
# Make LOCAL_INSTALLED_MODULE depend on NOTICE files if they exist
|
|
# libraries so they get installed along with it. Make it an order-only
|
|
# dependency so we don't re-install a module when the NOTICE changes.
|
|
$(LOCAL_INSTALLED_MODULE): | $(installed_notice_file)
|
|
endif
|
|
|
|
# To facilitate collecting NOTICE files for apps_only build,
|
|
# we install the NOTICE file even if a module gets built but not installed,
|
|
# because shared jni libraries won't be installed to the system image.
|
|
ifdef TARGET_BUILD_APPS
|
|
# for static Java libraries, we don't need to even build LOCAL_BUILT_MODULE,
|
|
# but just javalib.jar in the common intermediate dir.
|
|
ifeq ($(LOCAL_MODULE_CLASS),JAVA_LIBRARIES)
|
|
$(intermediates.COMMON)/javalib.jar : | $(installed_notice_file)
|
|
else
|
|
$(LOCAL_BUILT_MODULE): | $(installed_notice_file)
|
|
endif # JAVA_LIBRARIES
|
|
endif # TARGET_BUILD_APPS
|
|
|
|
else
|
|
# NOTICE file does not exist
|
|
installed_notice_file :=
|
|
endif
|
|
|
|
# Create a predictable, phony target to build this notice file.
|
|
# Define it even if the notice file doesn't exist so that other
|
|
# modules can depend on it.
|
|
notice_target := NOTICE-$(if \
|
|
$(LOCAL_IS_HOST_MODULE),HOST,TARGET)-$(LOCAL_MODULE_CLASS)-$(LOCAL_MODULE)
|
|
.PHONY: $(notice_target)
|
|
$(notice_target): $(installed_notice_file)
|