Home | History | Annotate | Download | only in core
      1 # Common to host and target Java modules.
      2 
      3 ###########################################################
      4 ## Java version
      5 ###########################################################
      6 # 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.
     17 ifeq (,$(LOCAL_JAVA_LANGUAGE_VERSION))
     18   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)))
     20     LOCAL_JAVA_LANGUAGE_VERSION := 1.7
     21   else
     22     # 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
     28   endif
     29 endif
     30 LOCAL_JAVACFLAGS += -source $(LOCAL_JAVA_LANGUAGE_VERSION) -target $(LOCAL_JAVA_LANGUAGE_VERSION)
     31 
     32 ###########################################################
     33 ## .proto files: Compile proto files to .java
     34 ###########################################################
     35 proto_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.
     38 proto_java_sources_file_stamp :=
     39 ifneq ($(proto_sources),)
     40 proto_sources_fullpath := $(addprefix $(LOCAL_PATH)/, $(proto_sources))
     41 
     42 proto_java_intemediate_dir := $(intermediates.COMMON)/proto
     43 proto_java_sources_file_stamp := $(proto_java_intemediate_dir)/Proto.stamp
     44 proto_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)
     49 ifeq ($(LOCAL_PROTOC_OPTIMIZE_TYPE),micro)
     50 $(proto_java_sources_file_stamp): PRIVATE_PROTO_JAVA_OUTPUT_OPTION := --javamicro_out
     51 else
     52   ifeq ($(LOCAL_PROTOC_OPTIMIZE_TYPE),nano)
     53 $(proto_java_sources_file_stamp): PRIVATE_PROTO_JAVA_OUTPUT_OPTION := --javanano_out
     54   else
     55     ifeq ($(LOCAL_PROTOC_OPTIMIZE_TYPE),stream)
     56 $(proto_java_sources_file_stamp): PRIVATE_PROTO_JAVA_OUTPUT_OPTION := --javastream_out
     57 $(proto_java_sources_file_stamp): $(HOST_OUT_EXECUTABLES)/protoc-gen-javastream
     58     else
     59 $(proto_java_sources_file_stamp): PRIVATE_PROTO_JAVA_OUTPUT_OPTION := --java_out
     60     endif
     61   endif
     62 endif
     63 $(proto_java_sources_file_stamp): PRIVATE_PROTOC_FLAGS := $(LOCAL_PROTOC_FLAGS)
     64 $(proto_java_sources_file_stamp): PRIVATE_PROTO_JAVA_OUTPUT_PARAMS := $(LOCAL_PROTO_JAVA_OUTPUT_PARAMS)
     65 $(proto_java_sources_file_stamp) : $(proto_sources_fullpath) $(PROTOC)
     66 	$(call transform-proto-to-java)
     67 
     68 #TODO: protoc should output the dependencies introduced by imports.
     69 
     70 ALL_MODULES.$(my_register_name).PROTO_FILES := $(proto_sources_fullpath)
     71 endif # proto_sources
     72 
     73 #########################################
     74 ## Java resources
     75 
     76 # Look for resource files in any specified directories.
     77 # Non-java and non-doc files will be picked up as resources
     78 # and included in the output jar file.
     79 java_resource_file_groups :=
     80 
     81 LOCAL_JAVA_RESOURCE_DIRS := $(strip $(LOCAL_JAVA_RESOURCE_DIRS))
     82 ifneq ($(LOCAL_JAVA_RESOURCE_DIRS),)
     83   # This makes a list of words like
     84   #     <dir1>::<file1>:<file2> <dir2>::<file1> <dir3>:
     85   # where each of the files is relative to the directory it's grouped with.
     86   # Directories that don't contain any resource files will result in groups
     87   # that end with a colon, and they are stripped out in the next step.
     88   java_resource_file_groups += \
     89     $(foreach dir,$(LOCAL_JAVA_RESOURCE_DIRS), \
     90 	$(subst $(space),:,$(strip \
     91 		$(LOCAL_PATH)/$(dir): \
     92 	    $(patsubst ./%,%,$(sort $(shell cd $(LOCAL_PATH)/$(dir) && \
     93 		find . \
     94 		    -type d -a -name ".svn" -prune -o \
     95 		    -type f \
     96 			-a \! -name "*.java" \
     97 			-a \! -name "package.html" \
     98 			-a \! -name "overview.html" \
     99 			-a \! -name ".*.swp" \
    100 			-a \! -name ".DS_Store" \
    101 			-a \! -name "*~" \
    102 			-print \
    103 		    ))) \
    104 	)) \
    105     )
    106   java_resource_file_groups := $(filter-out %:,$(java_resource_file_groups))
    107 endif # LOCAL_JAVA_RESOURCE_DIRS
    108 
    109 LOCAL_JAVA_RESOURCE_FILES := $(strip $(LOCAL_JAVA_RESOURCE_FILES))
    110 ifneq ($(LOCAL_JAVA_RESOURCE_FILES),)
    111   java_resource_file_groups += \
    112     $(foreach f,$(LOCAL_JAVA_RESOURCE_FILES), \
    113 	$(patsubst %/,%,$(dir $(f)))::$(notdir $(f)) \
    114      )
    115 endif # LOCAL_JAVA_RESOURCE_FILES
    116 
    117 ifdef java_resource_file_groups
    118   # The full paths to all resources, used for dependencies.
    119   java_resource_sources := \
    120     $(foreach group,$(java_resource_file_groups), \
    121 	$(addprefix $(word 1,$(subst :,$(space),$(group)))/, \
    122 	    $(wordlist 2,9999,$(subst :,$(space),$(group))) \
    123 	) \
    124     )
    125   # The arguments to jar that will include these files in a jar file.
    126   # Quote the file name to handle special characters (such as #) correctly.
    127   extra_jar_args := \
    128     $(foreach group,$(java_resource_file_groups), \
    129 	$(addprefix -C "$(word 1,$(subst :,$(space),$(group)))" , \
    130 	    $(foreach w, $(wordlist 2,9999,$(subst :,$(space),$(group))), "$(w)" ) \
    131 	) \
    132     )
    133   java_resource_file_groups :=
    134 else
    135   java_resource_sources :=
    136   extra_jar_args :=
    137 endif # java_resource_file_groups
    138 
    139 #####################################
    140 ## Warn if there is unrecognized file in LOCAL_SRC_FILES.
    141 my_unknown_src_files := $(filter-out \
    142   %.java %.aidl %.proto %.logtags %.fs %.rs, \
    143   $(LOCAL_SRC_FILES) $(LOCAL_INTERMEDIATE_SOURCES) $(LOCAL_GENERATED_SOURCES))
    144 ifneq ($(my_unknown_src_files),)
    145 $(warning $(LOCAL_MODULE_MAKEFILE): $(LOCAL_MODULE): Unused source files: $(my_unknown_src_files))
    146 endif
    147 
    148 ######################################
    149 ## PRIVATE java vars
    150 # LOCAL_SOURCE_FILES_ALL_GENERATED is set only if the module does not have static source files,
    151 # but generated source files in its LOCAL_INTERMEDIATE_SOURCE_DIR.
    152 # You have to set up the dependency in some other way.
    153 need_compile_java := $(strip $(all_java_sources)$(all_res_assets)$(java_resource_sources))$(LOCAL_STATIC_JAVA_LIBRARIES)$(filter true,$(LOCAL_SOURCE_FILES_ALL_GENERATED))
    154 ifdef need_compile_java
    155 
    156 full_static_java_libs := \
    157     $(foreach lib,$(LOCAL_STATIC_JAVA_LIBRARIES), \
    158       $(call intermediates-dir-for, \
    159         JAVA_LIBRARIES,$(lib),$(LOCAL_IS_HOST_MODULE),COMMON)/classes.jar)
    160 
    161 $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_STATIC_JAVA_LIBRARIES := $(full_static_java_libs)
    162 
    163 $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_RESOURCE_DIR := $(LOCAL_RESOURCE_DIR)
    164 $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_ASSET_DIR := $(LOCAL_ASSET_DIR)
    165 
    166 $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_CLASS_INTERMEDIATES_DIR := $(intermediates.COMMON)/classes
    167 $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_SOURCE_INTERMEDIATES_DIR := $(intermediates.COMMON)/src
    168 $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_HAS_PROTO_SOURCES := $(if $(proto_sources),true)
    169 $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_PROTO_SOURCE_INTERMEDIATES_DIR := $(intermediates.COMMON)/proto
    170 $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_HAS_RS_SOURCES :=
    171 $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JAVA_SOURCES := $(all_java_sources)
    172 
    173 $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_RMTYPEDEFS := $(LOCAL_RMTYPEDEFS)
    174 
    175 # full_java_libs: The list of files that should be used as the classpath.
    176 #                 Using this list as a dependency list WILL NOT WORK.
    177 # full_java_lib_deps: Should be specified as a prerequisite of this module
    178 #                 to guarantee that the files in full_java_libs will
    179 #                 be up-to-date.
    180 ifndef LOCAL_IS_HOST_MODULE
    181 ifeq ($(LOCAL_SDK_VERSION),)
    182 ifeq ($(LOCAL_NO_STANDARD_LIBRARIES),true)
    183 # No bootclasspath. But we still need "" to prevent javac from using default host bootclasspath.
    184 my_bootclasspath := ""
    185 else  # LOCAL_NO_STANDARD_LIBRARIES
    186 my_bootclasspath := $(call java-lib-files,core-oj):$(call java-lib-files,core-libart)
    187 endif  # LOCAL_NO_STANDARD_LIBRARIES
    188 else
    189 ifeq ($(LOCAL_SDK_VERSION)$(TARGET_BUILD_APPS),current)
    190 # LOCAL_SDK_VERSION is current and no TARGET_BUILD_APPS.
    191 my_bootclasspath := $(call java-lib-files,android_stubs_current)
    192 else ifeq ($(LOCAL_SDK_VERSION)$(TARGET_BUILD_APPS),system_current)
    193 my_bootclasspath := $(call java-lib-files,android_system_stubs_current)
    194 else ifeq ($(LOCAL_SDK_VERSION)$(TARGET_BUILD_APPS),test_current)
    195 my_bootclasspath := $(call java-lib-files,android_test_stubs_current)
    196 else
    197 my_bootclasspath := $(call java-lib-files,sdk_v$(LOCAL_SDK_VERSION))
    198 endif # current, system_current, or test_current
    199 endif # LOCAL_SDK_VERSION
    200 $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH := -bootclasspath $(my_bootclasspath)
    201 
    202 # In order to compile lambda code javac requires various invokedynamic-
    203 # related classes to be present. This change adds stubs needed for
    204 # javac to compile lambdas.
    205 my_additional_javac_libs :=
    206 ifndef TARGET_BUILD_APPS
    207 # TODO: support to build lamdbas using javac in unbundled build.
    208 # We may need to check in a prebuilt core-lambda-stubs to prebuilts/sdk.
    209 ifneq ($(LOCAL_NO_STANDARD_LIBRARIES),true)
    210 my_additional_javac_libs := core-lambda-stubs
    211 endif
    212 endif
    213 
    214 full_shared_java_libs := $(call java-lib-files,$(LOCAL_JAVA_LIBRARIES) $(my_additional_javac_libs),$(LOCAL_IS_HOST_MODULE))
    215 full_java_lib_deps := $(call java-lib-deps,$(LOCAL_JAVA_LIBRARIES) $(my_additional_javac_libs),$(LOCAL_IS_HOST_MODULE))
    216 full_java_lib_deps := $(addsuffix .toc, $(full_java_lib_deps))
    217 
    218 else # LOCAL_IS_HOST_MODULE
    219 
    220 ifeq ($(USE_CORE_LIB_BOOTCLASSPATH),true)
    221 ifeq ($(LOCAL_NO_STANDARD_LIBRARIES),true)
    222 my_bootclasspath := ""
    223 else
    224 my_bootclasspath := $(call normalize-path-list,$(call java-lib-files,core-oj-hostdex core-libart-hostdex,true))
    225 endif
    226 $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH := -bootclasspath $(my_bootclasspath)
    227 
    228 full_shared_java_libs := $(call java-lib-files,$(LOCAL_JAVA_LIBRARIES),true)
    229 full_java_lib_deps := $(full_shared_java_libs)
    230 else # !USE_CORE_LIB_BOOTCLASSPATH
    231 $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH :=
    232 
    233 full_shared_java_libs := $(addprefix $(HOST_OUT_JAVA_LIBRARIES)/,\
    234     $(addsuffix $(COMMON_JAVA_PACKAGE_SUFFIX),$(LOCAL_JAVA_LIBRARIES)))
    235 full_java_lib_deps := $(full_shared_java_libs)
    236 endif # USE_CORE_LIB_BOOTCLASSPATH
    237 endif # !LOCAL_IS_HOST_MODULE
    238 
    239 full_java_libs := $(full_shared_java_libs) $(full_static_java_libs) $(LOCAL_CLASSPATH)
    240 full_java_lib_deps := $(full_java_lib_deps) $(full_static_java_libs) $(LOCAL_CLASSPATH)
    241 
    242 ifndef LOCAL_IS_HOST_MODULE
    243 # This is set by packages that are linking to other packages that export
    244 # shared libraries, allowing them to make use of the code in the linked apk.
    245 apk_libraries := $(sort $(LOCAL_APK_LIBRARIES) $(LOCAL_RES_LIBRARIES))
    246 ifneq ($(apk_libraries),)
    247   link_apk_libraries := \
    248       $(foreach lib,$(apk_libraries), \
    249         $(call intermediates-dir-for, \
    250               APPS,$(lib),,COMMON)/classes-pre-proguard.jar)
    251 
    252   # link against the jar with full original names (before proguard processing).
    253   full_shared_java_libs += $(link_apk_libraries)
    254   full_java_libs += $(link_apk_libraries)
    255   full_java_lib_deps += $(link_apk_libraries)
    256 endif
    257 
    258 # This is set by packages that contain instrumentation, allowing them to
    259 # link against the package they are instrumenting.  Currently only one such
    260 # package is allowed.
    261 LOCAL_INSTRUMENTATION_FOR := $(strip $(LOCAL_INSTRUMENTATION_FOR))
    262 ifdef LOCAL_INSTRUMENTATION_FOR
    263   ifneq ($(words $(LOCAL_INSTRUMENTATION_FOR)),1)
    264     $(error \
    265         $(LOCAL_PATH): Multiple LOCAL_INSTRUMENTATION_FOR members defined)
    266   endif
    267 
    268   link_instr_intermediates_dir.COMMON := $(call intermediates-dir-for, \
    269       APPS,$(LOCAL_INSTRUMENTATION_FOR),,COMMON)
    270   # link against the jar with full original names (before proguard processing).
    271   link_instr_classes_jar := $(link_instr_intermediates_dir.COMMON)/classes-pre-proguard.jar
    272   full_java_libs += $(link_instr_classes_jar)
    273   full_java_lib_deps += $(link_instr_classes_jar)
    274 endif  # LOCAL_INSTRUMENTATION_FOR
    275 endif  # LOCAL_IS_HOST_MODULE
    276 
    277 endif  # need_compile_java
    278 
    279 # We may want to add jar manifest or jar resource files even if there is no java code at all.
    280 $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_EXTRA_JAR_ARGS := $(extra_jar_args)
    281 jar_manifest_file :=
    282 ifneq ($(strip $(LOCAL_JAR_MANIFEST)),)
    283 jar_manifest_file := $(LOCAL_PATH)/$(LOCAL_JAR_MANIFEST)
    284 $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JAR_MANIFEST := $(jar_manifest_file)
    285 else
    286 $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JAR_MANIFEST :=
    287 endif
    288 
    289 ##########################################################
    290 ifndef LOCAL_IS_HOST_MODULE
    291 ## AAPT Flags
    292 # aapt doesn't accept multiple --extra-packages flags.
    293 # We have to collapse them into a single --extra-packages flag here.
    294 LOCAL_AAPT_FLAGS := $(strip $(LOCAL_AAPT_FLAGS))
    295 ifdef LOCAL_AAPT_FLAGS
    296 ifeq ($(filter 0 1,$(words $(filter --extra-packages,$(LOCAL_AAPT_FLAGS)))),)
    297 aapt_flags := $(subst --extra-packages$(space),--extra-packages@,$(LOCAL_AAPT_FLAGS))
    298 aapt_flags_extra_packages := $(patsubst --extra-packages@%,%,$(filter --extra-packages@%,$(aapt_flags)))
    299 aapt_flags_extra_packages := $(sort $(subst :,$(space),$(aapt_flags_extra_packages)))
    300 LOCAL_AAPT_FLAGS := $(filter-out --extra-packages@%,$(aapt_flags)) \
    301     --extra-packages $(subst $(space),:,$(aapt_flags_extra_packages))
    302 aapt_flags_extra_packages :=
    303 aapt_flags :=
    304 endif
    305 endif
    306 
    307 $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_AAPT_FLAGS := $(LOCAL_AAPT_FLAGS) $(PRODUCT_AAPT_FLAGS)
    308 $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_TARGET_AAPT_CHARACTERISTICS := $(TARGET_AAPT_CHARACTERISTICS)
    309 $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_MANIFEST_PACKAGE_NAME := $(LOCAL_MANIFEST_PACKAGE_NAME)
    310 $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_MANIFEST_INSTRUMENTATION_FOR := $(LOCAL_MANIFEST_INSTRUMENTATION_FOR)
    311 
    312 ifdef aidl_sources
    313 ALL_MODULES.$(my_register_name).AIDL_FILES := $(aidl_sources)
    314 endif
    315 ifdef renderscript_sources
    316 ALL_MODULES.$(my_register_name).RS_FILES := $(renderscript_sources_fullpath)
    317 endif
    318 endif  # !LOCAL_IS_HOST_MODULE
    319 
    320 $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_ALL_JAVA_LIBRARIES := $(full_java_libs)
    321 
    322 ALL_MODULES.$(my_register_name).INTERMEDIATE_SOURCE_DIR := \
    323     $(ALL_MODULES.$(my_register_name).INTERMEDIATE_SOURCE_DIR) $(LOCAL_INTERMEDIATE_SOURCE_DIR)
    324 
    325 ###########################################################
    326 # JACK
    327 ###########################################################
    328 ifdef LOCAL_JACK_ENABLED
    329 ifdef need_compile_java
    330 
    331 LOCAL_JACK_FLAGS += -D jack.java.source.version=$(LOCAL_JAVA_LANGUAGE_VERSION)
    332 
    333 full_static_jack_libs := \
    334     $(foreach lib,$(LOCAL_STATIC_JAVA_LIBRARIES), \
    335       $(call intermediates-dir-for, \
    336         JAVA_LIBRARIES,$(lib),$(LOCAL_IS_HOST_MODULE),COMMON)/classes.jack)
    337 
    338 $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_STATIC_JACK_LIBRARIES := $(full_static_jack_libs)
    339 
    340 full_shared_jack_libs := $(call jack-lib-files,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE))
    341 full_jack_deps := $(full_shared_jack_libs)
    342 
    343 ifndef LOCAL_IS_HOST_MODULE
    344 # Turn off .toc optimization for apps build as we cannot build dexdump.
    345 ifeq (,$(TARGET_BUILD_APPS))
    346 full_jack_deps := $(patsubst %.jack, %.dex.toc, $(full_jack_deps))
    347 endif
    348 endif # !LOCAL_IS_HOST_MODULE
    349 full_shared_jack_libs += $(LOCAL_JACK_CLASSPATH)
    350 full_jack_deps += $(full_static_jack_libs) $(LOCAL_JACK_CLASSPATH)
    351 
    352 ifndef LOCAL_IS_HOST_MODULE
    353 # This is set by packages that are linking to other packages that export
    354 # shared libraries, allowing them to make use of the code in the linked apk.
    355 ifneq ($(apk_libraries),)
    356   link_apk_jack_libraries := \
    357       $(foreach lib,$(apk_libraries), \
    358         $(call intermediates-dir-for, \
    359               APPS,$(lib),,COMMON)/classes.jack)
    360 
    361   # link against the jar with full original names (before proguard processing).
    362   full_shared_jack_libs += $(link_apk_jack_libraries)
    363   full_jack_deps += $(link_apk_jack_libraries)
    364 endif
    365 
    366 # This is set by packages that contain instrumentation, allowing them to
    367 # link against the package they are instrumenting.  Currently only one such
    368 # package is allowed.
    369 ifdef LOCAL_INSTRUMENTATION_FOR
    370    # link against the jar with full original names (before proguard processing).
    371    link_instr_classes_jack := $(link_instr_intermediates_dir.COMMON)/classes.noshrob.jack
    372    full_shared_jack_libs += $(link_instr_classes_jack)
    373    full_jack_deps += $(link_instr_classes_jack)
    374 endif  # LOCAL_INSTRUMENTATION_FOR
    375 endif  # !LOCAL_IS_HOST_MODULE
    376 
    377 # Propagate local configuration options to this target.
    378 $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JACK_SHARED_LIBRARIES:= $(full_shared_jack_libs)
    379 $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JARJAR_RULES := $(LOCAL_JARJAR_RULES)
    380 
    381 endif  # need_compile_java
    382 endif # LOCAL_JACK_ENABLED
    383 
    384 
    385 ###########################################################
    386 # Verify that all libraries are safe to use
    387 ###########################################################
    388 ifndef LOCAL_IS_HOST_MODULE
    389 my_link_type := $(intermediates.COMMON)/link_type
    390 all_link_types: $(my_link_type)
    391 my_link_type_deps := $(strip \
    392   $(foreach lib,$(LOCAL_STATIC_JAVA_LIBRARIES),\
    393     $(call intermediates-dir-for, \
    394       JAVA_LIBRARIES,$(lib),,COMMON)/link_type) \
    395   $(foreach lib,$(apk_libraries), \
    396     $(call intermediates-dir-for, \
    397       APPS,$(lib),,COMMON)/link_type))
    398 ifeq ($(LOCAL_SDK_VERSION),system_current)
    399 $(my_link_type): PRIVATE_LINK_TYPE := java:system
    400 $(my_link_type): PRIVATE_WARN_TYPES := java:platform
    401 $(my_link_type): PRIVATE_ALLOWED_TYPES := java:sdk java:system
    402 else ifneq ($(LOCAL_SDK_VERSION),)
    403 $(my_link_type): PRIVATE_LINK_TYPE := java:sdk
    404 $(my_link_type): PRIVATE_WARN_TYPES := java:system java:platform
    405 $(my_link_type): PRIVATE_ALLOWED_TYPES := java:sdk
    406 else
    407 $(my_link_type): PRIVATE_LINK_TYPE := java:platform
    408 $(my_link_type): PRIVATE_WARN_TYPES :=
    409 $(my_link_type): PRIVATE_ALLOWED_TYPES := java:sdk java:system java:platform
    410 endif
    411 $(eval $(call link-type-partitions,$(my_link_type)))
    412 $(my_link_type): PRIVATE_DEPS := $(my_link_type_deps)
    413 $(my_link_type): PRIVATE_MODULE := $(LOCAL_MODULE)
    414 $(my_link_type): PRIVATE_MAKEFILE := $(LOCAL_MODULE_MAKEFILE)
    415 $(my_link_type): $(my_link_type_deps) $(CHECK_LINK_TYPE)
    416 	@echo Check Java library module types: $@
    417 	$(check-link-type)
    418 
    419 $(LOCAL_BUILT_MODULE): $(my_link_type)
    420 endif  # !LOCAL_IS_HOST_MODULE
    421