blob: dbdea26a107faa91e425515e90db65b5dd3b450f [file] [log] [blame]
Ying Wang956dccc2015-08-28 11:47:03 -07001# Common to host and target Java modules.
2
3###########################################################
Neil Fullerad022512016-01-29 14:22:29 +00004## Java version
5###########################################################
Neil Fullerdecb7972016-03-04 18:00:00 +00006# Use the LOCAL_JAVA_LANGUAGE_VERSION if it is set, otherwise
7# use one based on the LOCAL_SDK_VERSION. If it is < 24
8# pass "1.7" to the tools, if it is unset, >= 24 or "current"
9# pass "1.8".
10#
11# The LOCAL_SDK_VERSION behavior is to ensure that, by default,
12# code that is expected to run on older releases of Android
13# does not use any 1.8 language features that are not supported
14# on earlier runtimes (like default / static interface methods).
15# Modules can override this logic by specifying
16# LOCAL_JAVA_LANGUAGE_VERSION explicitly.
Neil Fullerad022512016-01-29 14:22:29 +000017ifeq (,$(LOCAL_JAVA_LANGUAGE_VERSION))
Neil Fullerdecb7972016-03-04 18:00:00 +000018 private_sdk_versions_without_any_java_18_support := 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
19 ifneq (,$(filter $(LOCAL_SDK_VERSION), $(private_sdk_versions_without_any_java_18_support)))
Nicolas Geoffray8d772e22016-02-29 12:07:00 +000020 LOCAL_JAVA_LANGUAGE_VERSION := 1.7
Neil Fullerdecb7972016-03-04 18:00:00 +000021 else
Neil Fullerd7737f12016-03-10 10:00:14 +000022 # This retains 1.7 for ART build bots only. http://b/27583810
23 ifeq (,$(LEGACY_USE_JAVA7))
24 LOCAL_JAVA_LANGUAGE_VERSION := 1.8
25 else
26 LOCAL_JAVA_LANGUAGE_VERSION := 1.7
27 endif
Nicolas Geoffray8d772e22016-02-29 12:07:00 +000028 endif
Neil Fullerad022512016-01-29 14:22:29 +000029endif
30LOCAL_JAVACFLAGS += -source $(LOCAL_JAVA_LANGUAGE_VERSION) -target $(LOCAL_JAVA_LANGUAGE_VERSION)
31
32###########################################################
Ying Wang956dccc2015-08-28 11:47:03 -070033## .proto files: Compile proto files to .java
34###########################################################
35proto_sources := $(filter %.proto,$(LOCAL_SRC_FILES))
36# Because names of the .java files compiled from .proto files are unknown until the
37# .proto files are compiled, we use a timestamp file as depedency.
38proto_java_sources_file_stamp :=
39ifneq ($(proto_sources),)
40proto_sources_fullpath := $(addprefix $(LOCAL_PATH)/, $(proto_sources))
41
Dan Willemsencf324af2016-12-21 17:37:00 -080042proto_java_intemediate_dir := $(intermediates.COMMON)/proto
Ying Wang956dccc2015-08-28 11:47:03 -070043proto_java_sources_file_stamp := $(proto_java_intemediate_dir)/Proto.stamp
44proto_java_sources_dir := $(proto_java_intemediate_dir)/src
45
46$(proto_java_sources_file_stamp): PRIVATE_PROTO_INCLUDES := $(TOP)
47$(proto_java_sources_file_stamp): PRIVATE_PROTO_SRC_FILES := $(proto_sources_fullpath)
48$(proto_java_sources_file_stamp): PRIVATE_PROTO_JAVA_OUTPUT_DIR := $(proto_java_sources_dir)
49ifeq ($(LOCAL_PROTOC_OPTIMIZE_TYPE),micro)
50$(proto_java_sources_file_stamp): PRIVATE_PROTO_JAVA_OUTPUT_OPTION := --javamicro_out
51else
52 ifeq ($(LOCAL_PROTOC_OPTIMIZE_TYPE),nano)
53$(proto_java_sources_file_stamp): PRIVATE_PROTO_JAVA_OUTPUT_OPTION := --javanano_out
54 else
55$(proto_java_sources_file_stamp): PRIVATE_PROTO_JAVA_OUTPUT_OPTION := --java_out
56 endif
57endif
58$(proto_java_sources_file_stamp): PRIVATE_PROTOC_FLAGS := $(LOCAL_PROTOC_FLAGS)
59$(proto_java_sources_file_stamp): PRIVATE_PROTO_JAVA_OUTPUT_PARAMS := $(LOCAL_PROTO_JAVA_OUTPUT_PARAMS)
60$(proto_java_sources_file_stamp) : $(proto_sources_fullpath) $(PROTOC)
61 $(call transform-proto-to-java)
62
63#TODO: protoc should output the dependencies introduced by imports.
Ying Wangd5ffec92016-03-01 22:05:25 -080064
65ALL_MODULES.$(my_register_name).PROTO_FILES := $(proto_sources_fullpath)
Ying Wang956dccc2015-08-28 11:47:03 -070066endif # proto_sources
67
68#########################################
69## Java resources
70
71# Look for resource files in any specified directories.
72# Non-java and non-doc files will be picked up as resources
73# and included in the output jar file.
74java_resource_file_groups :=
75
76LOCAL_JAVA_RESOURCE_DIRS := $(strip $(LOCAL_JAVA_RESOURCE_DIRS))
77ifneq ($(LOCAL_JAVA_RESOURCE_DIRS),)
78 # This makes a list of words like
79 # <dir1>::<file1>:<file2> <dir2>::<file1> <dir3>:
80 # where each of the files is relative to the directory it's grouped with.
81 # Directories that don't contain any resource files will result in groups
82 # that end with a colon, and they are stripped out in the next step.
83 java_resource_file_groups += \
84 $(foreach dir,$(LOCAL_JAVA_RESOURCE_DIRS), \
85 $(subst $(space),:,$(strip \
86 $(LOCAL_PATH)/$(dir): \
Dan Willemsen7c3e3f82015-09-29 16:30:21 -070087 $(patsubst ./%,%,$(sort $(shell cd $(LOCAL_PATH)/$(dir) && \
Ying Wang956dccc2015-08-28 11:47:03 -070088 find . \
89 -type d -a -name ".svn" -prune -o \
90 -type f \
91 -a \! -name "*.java" \
92 -a \! -name "package.html" \
93 -a \! -name "overview.html" \
94 -a \! -name ".*.swp" \
95 -a \! -name ".DS_Store" \
96 -a \! -name "*~" \
97 -print \
Dan Willemsen7c3e3f82015-09-29 16:30:21 -070098 ))) \
Ying Wang956dccc2015-08-28 11:47:03 -070099 )) \
100 )
101 java_resource_file_groups := $(filter-out %:,$(java_resource_file_groups))
102endif # LOCAL_JAVA_RESOURCE_DIRS
103
104LOCAL_JAVA_RESOURCE_FILES := $(strip $(LOCAL_JAVA_RESOURCE_FILES))
105ifneq ($(LOCAL_JAVA_RESOURCE_FILES),)
106 java_resource_file_groups += \
107 $(foreach f,$(LOCAL_JAVA_RESOURCE_FILES), \
108 $(patsubst %/,%,$(dir $(f)))::$(notdir $(f)) \
109 )
110endif # LOCAL_JAVA_RESOURCE_FILES
111
112ifdef java_resource_file_groups
113 # The full paths to all resources, used for dependencies.
114 java_resource_sources := \
115 $(foreach group,$(java_resource_file_groups), \
116 $(addprefix $(word 1,$(subst :,$(space),$(group)))/, \
117 $(wordlist 2,9999,$(subst :,$(space),$(group))) \
118 ) \
119 )
120 # The arguments to jar that will include these files in a jar file.
121 # Quote the file name to handle special characters (such as #) correctly.
122 extra_jar_args := \
123 $(foreach group,$(java_resource_file_groups), \
124 $(addprefix -C "$(word 1,$(subst :,$(space),$(group)))" , \
125 $(foreach w, $(wordlist 2,9999,$(subst :,$(space),$(group))), "$(w)" ) \
126 ) \
127 )
128 java_resource_file_groups :=
129else
130 java_resource_sources :=
131 extra_jar_args :=
132endif # java_resource_file_groups
133
Ying Wangf8d15d62016-04-26 15:49:56 -0700134#####################################
135## Warn if there is unrecognized file in LOCAL_SRC_FILES.
136my_unknown_src_files := $(filter-out \
137 %.java %.aidl %.proto %.logtags %.fs %.rs, \
138 $(LOCAL_SRC_FILES) $(LOCAL_INTERMEDIATE_SOURCES) $(LOCAL_GENERATED_SOURCES))
139ifneq ($(my_unknown_src_files),)
140$(warning $(LOCAL_MODULE_MAKEFILE): $(LOCAL_MODULE): Unused source files: $(my_unknown_src_files))
141endif
142
Ying Wang956dccc2015-08-28 11:47:03 -0700143######################################
144## PRIVATE java vars
145# LOCAL_SOURCE_FILES_ALL_GENERATED is set only if the module does not have static source files,
146# but generated source files in its LOCAL_INTERMEDIATE_SOURCE_DIR.
147# You have to set up the dependency in some other way.
148need_compile_java := $(strip $(all_java_sources)$(all_res_assets)$(java_resource_sources))$(LOCAL_STATIC_JAVA_LIBRARIES)$(filter true,$(LOCAL_SOURCE_FILES_ALL_GENERATED))
149ifdef need_compile_java
150
151full_static_java_libs := \
152 $(foreach lib,$(LOCAL_STATIC_JAVA_LIBRARIES), \
153 $(call intermediates-dir-for, \
154 JAVA_LIBRARIES,$(lib),$(LOCAL_IS_HOST_MODULE),COMMON)/javalib.jar)
155
156$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_STATIC_JAVA_LIBRARIES := $(full_static_java_libs)
157
158$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_RESOURCE_DIR := $(LOCAL_RESOURCE_DIR)
159$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_ASSET_DIR := $(LOCAL_ASSET_DIR)
160
161$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_CLASS_INTERMEDIATES_DIR := $(intermediates.COMMON)/classes
162$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_SOURCE_INTERMEDIATES_DIR := $(intermediates.COMMON)/src
Dan Willemsencf324af2016-12-21 17:37:00 -0800163$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_HAS_PROTO_SOURCES := $(if $(proto_sources),true)
164$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_PROTO_SOURCE_INTERMEDIATES_DIR := $(intermediates.COMMON)/proto
165$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_HAS_RS_SOURCES :=
Ying Wang956dccc2015-08-28 11:47:03 -0700166$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JAVA_SOURCES := $(all_java_sources)
167
168$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_RMTYPEDEFS := $(LOCAL_RMTYPEDEFS)
169
170# full_java_libs: The list of files that should be used as the classpath.
171# Using this list as a dependency list WILL NOT WORK.
172# full_java_lib_deps: Should be specified as a prerequisite of this module
173# to guarantee that the files in full_java_libs will
174# be up-to-date.
175ifndef LOCAL_IS_HOST_MODULE
176ifeq ($(LOCAL_SDK_VERSION),)
Ying Wangc6a30172015-11-23 14:57:26 -0800177ifeq ($(LOCAL_NO_STANDARD_LIBRARIES),true)
178# No bootclasspath. But we still need "" to prevent javac from using default host bootclasspath.
179my_bootclasspath := ""
180else # LOCAL_NO_STANDARD_LIBRARIES
181my_bootclasspath := $(call java-lib-files,core-oj):$(call java-lib-files,core-libart)
182endif # LOCAL_NO_STANDARD_LIBRARIES
Ying Wang956dccc2015-08-28 11:47:03 -0700183else
184ifeq ($(LOCAL_SDK_VERSION)$(TARGET_BUILD_APPS),current)
185# LOCAL_SDK_VERSION is current and no TARGET_BUILD_APPS.
Ying Wangc6a30172015-11-23 14:57:26 -0800186my_bootclasspath := $(call java-lib-files,android_stubs_current)
Ying Wang956dccc2015-08-28 11:47:03 -0700187else ifeq ($(LOCAL_SDK_VERSION)$(TARGET_BUILD_APPS),system_current)
Ying Wangc6a30172015-11-23 14:57:26 -0800188my_bootclasspath := $(call java-lib-files,android_system_stubs_current)
Michael Wright0fb087f2015-11-06 15:20:51 +0000189else ifeq ($(LOCAL_SDK_VERSION)$(TARGET_BUILD_APPS),test_current)
190my_bootclasspath := $(call java-lib-files,android_test_stubs_current)
Ying Wang956dccc2015-08-28 11:47:03 -0700191else
Ying Wangc6a30172015-11-23 14:57:26 -0800192my_bootclasspath := $(call java-lib-files,sdk_v$(LOCAL_SDK_VERSION))
Michael Wright0fb087f2015-11-06 15:20:51 +0000193endif # current, system_current, or test_current
Ying Wang956dccc2015-08-28 11:47:03 -0700194endif # LOCAL_SDK_VERSION
Ying Wangc6a30172015-11-23 14:57:26 -0800195$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH := -bootclasspath $(my_bootclasspath)
Ying Wang956dccc2015-08-28 11:47:03 -0700196
Neil Fullerb08544e2016-02-19 10:37:22 +0000197# In order to compile lambda code javac requires various invokedynamic-
198# related classes to be present. This change adds stubs needed for
199# javac to compile lambdas.
200my_additional_javac_libs :=
201ifndef TARGET_BUILD_APPS
202# TODO: support to build lamdbas using javac in unbundled build.
203# We may need to check in a prebuilt core-lambda-stubs to prebuilts/sdk.
204ifneq ($(LOCAL_NO_STANDARD_LIBRARIES),true)
205my_additional_javac_libs := core-lambda-stubs
206endif
207endif
208
209full_shared_java_libs := $(call java-lib-files,$(LOCAL_JAVA_LIBRARIES) $(my_additional_javac_libs),$(LOCAL_IS_HOST_MODULE))
210full_java_lib_deps := $(call java-lib-deps,$(LOCAL_JAVA_LIBRARIES) $(my_additional_javac_libs),$(LOCAL_IS_HOST_MODULE))
Shinichiro Hamaji89b255a2015-11-09 16:47:42 +0900211full_java_lib_deps := $(addsuffix .toc, $(full_java_lib_deps))
Ying Wang956dccc2015-08-28 11:47:03 -0700212
213else # LOCAL_IS_HOST_MODULE
214
215ifeq ($(USE_CORE_LIB_BOOTCLASSPATH),true)
Ying Wangc6a30172015-11-23 14:57:26 -0800216ifeq ($(LOCAL_NO_STANDARD_LIBRARIES),true)
217my_bootclasspath := ""
218else
Ying Wang063d0452016-03-02 17:25:01 -0800219my_bootclasspath := $(call normalize-path-list,$(call host-dex-java-lib-files,core-oj-hostdex core-libart-hostdex))
Ying Wangc6a30172015-11-23 14:57:26 -0800220endif
221$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH := -bootclasspath $(my_bootclasspath)
Ying Wang956dccc2015-08-28 11:47:03 -0700222
Ying Wang063d0452016-03-02 17:25:01 -0800223full_shared_java_libs := $(call host-dex-java-lib-files,$(LOCAL_JAVA_LIBRARIES))
224full_java_lib_deps := $(full_shared_java_libs)
225else # !USE_CORE_LIB_BOOTCLASSPATH
Ying Wang956dccc2015-08-28 11:47:03 -0700226$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH :=
227
228full_shared_java_libs := $(addprefix $(HOST_OUT_JAVA_LIBRARIES)/,\
229 $(addsuffix $(COMMON_JAVA_PACKAGE_SUFFIX),$(LOCAL_JAVA_LIBRARIES)))
230full_java_lib_deps := $(full_shared_java_libs)
231endif # USE_CORE_LIB_BOOTCLASSPATH
232endif # !LOCAL_IS_HOST_MODULE
233
234full_java_libs := $(full_shared_java_libs) $(full_static_java_libs) $(LOCAL_CLASSPATH)
235full_java_lib_deps := $(full_java_lib_deps) $(full_static_java_libs) $(LOCAL_CLASSPATH)
236
237ifndef LOCAL_IS_HOST_MODULE
238# This is set by packages that are linking to other packages that export
239# shared libraries, allowing them to make use of the code in the linked apk.
240apk_libraries := $(sort $(LOCAL_APK_LIBRARIES) $(LOCAL_RES_LIBRARIES))
241ifneq ($(apk_libraries),)
242 link_apk_libraries := \
243 $(foreach lib,$(apk_libraries), \
244 $(call intermediates-dir-for, \
245 APPS,$(lib),,COMMON)/classes.jar)
246
247 # link against the jar with full original names (before proguard processing).
248 full_shared_java_libs += $(link_apk_libraries)
249 full_java_libs += $(link_apk_libraries)
250 full_java_lib_deps += $(link_apk_libraries)
251endif
252
253# This is set by packages that contain instrumentation, allowing them to
254# link against the package they are instrumenting. Currently only one such
255# package is allowed.
256LOCAL_INSTRUMENTATION_FOR := $(strip $(LOCAL_INSTRUMENTATION_FOR))
257ifdef LOCAL_INSTRUMENTATION_FOR
258 ifneq ($(words $(LOCAL_INSTRUMENTATION_FOR)),1)
259 $(error \
260 $(LOCAL_PATH): Multiple LOCAL_INSTRUMENTATION_FOR members defined)
261 endif
262
263 link_instr_intermediates_dir.COMMON := $(call intermediates-dir-for, \
264 APPS,$(LOCAL_INSTRUMENTATION_FOR),,COMMON)
265 # link against the jar with full original names (before proguard processing).
266 link_instr_classes_jar := $(link_instr_intermediates_dir.COMMON)/classes.jar
267 full_java_libs += $(link_instr_classes_jar)
268 full_java_lib_deps += $(link_instr_classes_jar)
269endif # LOCAL_INSTRUMENTATION_FOR
270endif # LOCAL_IS_HOST_MODULE
271
272endif # need_compile_java
273
274# We may want to add jar manifest or jar resource files even if there is no java code at all.
275$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_EXTRA_JAR_ARGS := $(extra_jar_args)
276jar_manifest_file :=
277ifneq ($(strip $(LOCAL_JAR_MANIFEST)),)
278jar_manifest_file := $(LOCAL_PATH)/$(LOCAL_JAR_MANIFEST)
279$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JAR_MANIFEST := $(jar_manifest_file)
280else
281$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JAR_MANIFEST :=
282endif
283
284##########################################################
285ifndef LOCAL_IS_HOST_MODULE
286## AAPT Flags
287# aapt doesn't accept multiple --extra-packages flags.
288# We have to collapse them into a single --extra-packages flag here.
289LOCAL_AAPT_FLAGS := $(strip $(LOCAL_AAPT_FLAGS))
290ifdef LOCAL_AAPT_FLAGS
291ifeq ($(filter 0 1,$(words $(filter --extra-packages,$(LOCAL_AAPT_FLAGS)))),)
292aapt_flags := $(subst --extra-packages$(space),--extra-packages@,$(LOCAL_AAPT_FLAGS))
293aapt_flags_extra_packages := $(patsubst --extra-packages@%,%,$(filter --extra-packages@%,$(aapt_flags)))
294aapt_flags_extra_packages := $(sort $(subst :,$(space),$(aapt_flags_extra_packages)))
295LOCAL_AAPT_FLAGS := $(filter-out --extra-packages@%,$(aapt_flags)) \
296 --extra-packages $(subst $(space),:,$(aapt_flags_extra_packages))
297aapt_flags_extra_packages :=
298aapt_flags :=
299endif
300endif
301
Ying Wang6f9bd2a2016-03-29 12:41:42 -0700302$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_AAPT_FLAGS := $(LOCAL_AAPT_FLAGS) $(PRODUCT_AAPT_FLAGS)
303$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_TARGET_AAPT_CHARACTERISTICS := $(TARGET_AAPT_CHARACTERISTICS)
304$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_MANIFEST_PACKAGE_NAME := $(LOCAL_MANIFEST_PACKAGE_NAME)
305$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_MANIFEST_INSTRUMENTATION_FOR := $(LOCAL_MANIFEST_INSTRUMENTATION_FOR)
Ying Wang956dccc2015-08-28 11:47:03 -0700306
Ying Wang956dccc2015-08-28 11:47:03 -0700307ifdef aidl_sources
308ALL_MODULES.$(my_register_name).AIDL_FILES := $(aidl_sources)
309endif
Ying Wangd5ffec92016-03-01 22:05:25 -0800310ifdef renderscript_sources
311ALL_MODULES.$(my_register_name).RS_FILES := $(renderscript_sources_fullpath)
312endif
Ying Wang956dccc2015-08-28 11:47:03 -0700313endif # !LOCAL_IS_HOST_MODULE
314
Ying Wang6f9bd2a2016-03-29 12:41:42 -0700315$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_ALL_JAVA_LIBRARIES := $(full_java_libs)
Ying Wang956dccc2015-08-28 11:47:03 -0700316
317ALL_MODULES.$(my_register_name).INTERMEDIATE_SOURCE_DIR := \
318 $(ALL_MODULES.$(my_register_name).INTERMEDIATE_SOURCE_DIR) $(LOCAL_INTERMEDIATE_SOURCE_DIR)
319
320###########################################################
321# JACK
322###########################################################
Ying Wang956dccc2015-08-28 11:47:03 -0700323ifdef need_compile_java
324
Neil Fullerad022512016-01-29 14:22:29 +0000325LOCAL_JACK_FLAGS += -D jack.java.source.version=$(LOCAL_JAVA_LANGUAGE_VERSION)
326
Ying Wang956dccc2015-08-28 11:47:03 -0700327full_static_jack_libs := \
328 $(foreach lib,$(LOCAL_STATIC_JAVA_LIBRARIES), \
329 $(call intermediates-dir-for, \
330 JAVA_LIBRARIES,$(lib),$(LOCAL_IS_HOST_MODULE),COMMON)/classes.jack)
331
332$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_STATIC_JACK_LIBRARIES := $(full_static_jack_libs)
Ying Wang956dccc2015-08-28 11:47:03 -0700333
Ying Wang956dccc2015-08-28 11:47:03 -0700334full_shared_jack_libs := $(call jack-lib-files,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE))
Yohann Rousselae2fc812016-04-21 16:49:10 +0200335full_jack_deps := $(full_shared_jack_libs)
336
337ifndef LOCAL_IS_HOST_MODULE
Shinichiro Hamajif972a4a2015-12-09 18:06:20 +0900338# Turn off .toc optimization for apps build as we cannot build dexdump.
339ifeq (,$(TARGET_BUILD_APPS))
Yohann Rousselb7de0fb2015-11-03 18:33:21 +0100340full_jack_deps := $(patsubst %.jack, %.dex.toc, $(full_jack_deps))
Shinichiro Hamajif972a4a2015-12-09 18:06:20 +0900341endif
Ying Wang956dccc2015-08-28 11:47:03 -0700342endif # !LOCAL_IS_HOST_MODULE
Yohann Roussel2dc79b12016-04-21 16:30:18 +0200343full_shared_jack_libs += $(LOCAL_JACK_CLASSPATH)
Yohann Rousselb7de0fb2015-11-03 18:33:21 +0100344full_jack_deps += $(full_static_jack_libs) $(LOCAL_JACK_CLASSPATH)
Ying Wang956dccc2015-08-28 11:47:03 -0700345
346ifndef LOCAL_IS_HOST_MODULE
347# This is set by packages that are linking to other packages that export
348# shared libraries, allowing them to make use of the code in the linked apk.
349ifneq ($(apk_libraries),)
350 link_apk_jack_libraries := \
351 $(foreach lib,$(apk_libraries), \
352 $(call intermediates-dir-for, \
353 APPS,$(lib),,COMMON)/classes.jack)
354
355 # link against the jar with full original names (before proguard processing).
356 full_shared_jack_libs += $(link_apk_jack_libraries)
Yohann Rousselb7de0fb2015-11-03 18:33:21 +0100357 full_jack_deps += $(link_apk_jack_libraries)
Ying Wang956dccc2015-08-28 11:47:03 -0700358endif
359
360# This is set by packages that contain instrumentation, allowing them to
361# link against the package they are instrumenting. Currently only one such
362# package is allowed.
363ifdef LOCAL_INSTRUMENTATION_FOR
364 # link against the jar with full original names (before proguard processing).
365 link_instr_classes_jack := $(link_instr_intermediates_dir.COMMON)/classes.noshrob.jack
Yohann Roussel2dc79b12016-04-21 16:30:18 +0200366 full_shared_jack_libs += $(link_instr_classes_jack)
Yohann Rousselb7de0fb2015-11-03 18:33:21 +0100367 full_jack_deps += $(link_instr_classes_jack)
Ying Wang956dccc2015-08-28 11:47:03 -0700368endif # LOCAL_INSTRUMENTATION_FOR
369endif # !LOCAL_IS_HOST_MODULE
370
371# Propagate local configuration options to this target.
Yohann Rousselb6232d92016-04-22 18:45:45 +0200372$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JACK_SHARED_LIBRARIES:= $(full_shared_jack_libs)
Ying Wang6f9bd2a2016-03-29 12:41:42 -0700373$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JARJAR_RULES := $(LOCAL_JARJAR_RULES)
Ying Wang956dccc2015-08-28 11:47:03 -0700374
375endif # need_compile_java
Dan Willemsen62dfb592016-07-08 21:33:05 -0700376
377
378###########################################################
379# Verify that all libraries are safe to use
380###########################################################
381ifndef LOCAL_IS_HOST_MODULE
382my_link_type := $(intermediates.COMMON)/link_type
Dan Willemsen121e2842016-09-14 21:38:29 -0700383all_link_types: $(my_link_type)
Dan Willemsen62dfb592016-07-08 21:33:05 -0700384my_link_type_deps := $(strip \
385 $(foreach lib,$(LOCAL_STATIC_JAVA_LIBRARIES),\
386 $(call intermediates-dir-for, \
387 JAVA_LIBRARIES,$(lib),,COMMON)/link_type) \
388 $(foreach lib,$(apk_libraries), \
389 $(call intermediates-dir-for, \
390 APPS,$(lib),,COMMON)/link_type))
391ifeq ($(LOCAL_SDK_VERSION),system_current)
Dan Willemsen121e2842016-09-14 21:38:29 -0700392$(my_link_type): PRIVATE_LINK_TYPE := java:system
393$(my_link_type): PRIVATE_WARN_TYPES := java:platform
394$(my_link_type): PRIVATE_ALLOWED_TYPES := java:sdk java:system
Dan Willemsen62dfb592016-07-08 21:33:05 -0700395else ifneq ($(LOCAL_SDK_VERSION),)
Dan Willemsen121e2842016-09-14 21:38:29 -0700396$(my_link_type): PRIVATE_LINK_TYPE := java:sdk
397$(my_link_type): PRIVATE_WARN_TYPES := java:system java:platform
398$(my_link_type): PRIVATE_ALLOWED_TYPES := java:sdk
Dan Willemsen62dfb592016-07-08 21:33:05 -0700399else
Dan Willemsen121e2842016-09-14 21:38:29 -0700400$(my_link_type): PRIVATE_LINK_TYPE := java:platform
401$(my_link_type): PRIVATE_WARN_TYPES :=
402$(my_link_type): PRIVATE_ALLOWED_TYPES := java:sdk java:system java:platform
Dan Willemsen62dfb592016-07-08 21:33:05 -0700403endif
Dan Willemsen121e2842016-09-14 21:38:29 -0700404$(eval $(call link-type-partitions,$(my_link_type)))
Dan Willemsen62dfb592016-07-08 21:33:05 -0700405$(my_link_type): PRIVATE_DEPS := $(my_link_type_deps)
406$(my_link_type): PRIVATE_MODULE := $(LOCAL_MODULE)
407$(my_link_type): PRIVATE_MAKEFILE := $(LOCAL_MODULE_MAKEFILE)
Dan Willemsen121e2842016-09-14 21:38:29 -0700408$(my_link_type): $(my_link_type_deps) $(CHECK_LINK_TYPE)
Dan Willemsen62dfb592016-07-08 21:33:05 -0700409 @echo Check Java library module types: $@
Dan Willemsen121e2842016-09-14 21:38:29 -0700410 $(check-link-type)
Dan Willemsen62dfb592016-07-08 21:33:05 -0700411
412$(LOCAL_BUILT_MODULE): $(my_link_type)
413endif # !LOCAL_IS_HOST_MODULE