Home | History | Annotate | Download | only in runtime
      1 #
      2 # Copyright (C) 2011 The Android Open Source Project
      3 #
      4 # Licensed under the Apache License, Version 2.0 (the "License");
      5 # you may not use this file except in compliance with the License.
      6 # You may obtain a copy of the License at
      7 #
      8 #      http://www.apache.org/licenses/LICENSE-2.0
      9 #
     10 # Unless required by applicable law or agreed to in writing, software
     11 # distributed under the License is distributed on an "AS IS" BASIS,
     12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13 # See the License for the specific language governing permissions and
     14 # limitations under the License.
     15 #
     16 
     17 LOCAL_PATH := $(call my-dir)
     18 
     19 include art/build/Android.common_build.mk
     20 
     21 LIBART_COMMON_SRC_FILES := \
     22   art_field.cc \
     23   art_method.cc \
     24   atomic.cc.arm \
     25   barrier.cc \
     26   base/allocator.cc \
     27   base/arena_allocator.cc \
     28   base/arena_bit_vector.cc \
     29   base/bit_vector.cc \
     30   base/file_magic.cc \
     31   base/hex_dump.cc \
     32   base/logging.cc \
     33   base/mutex.cc \
     34   base/scoped_arena_allocator.cc \
     35   base/scoped_flock.cc \
     36   base/stringpiece.cc \
     37   base/stringprintf.cc \
     38   base/time_utils.cc \
     39   base/timing_logger.cc \
     40   base/unix_file/fd_file.cc \
     41   base/unix_file/random_access_file_utils.cc \
     42   check_jni.cc \
     43   class_linker.cc \
     44   class_table.cc \
     45   code_simulator_container.cc \
     46   common_throws.cc \
     47   compiler_filter.cc \
     48   debugger.cc \
     49   dex_file.cc \
     50   dex_file_verifier.cc \
     51   dex_instruction.cc \
     52   elf_file.cc \
     53   fault_handler.cc \
     54   gc/allocation_record.cc \
     55   gc/allocator/dlmalloc.cc \
     56   gc/allocator/rosalloc.cc \
     57   gc/accounting/bitmap.cc \
     58   gc/accounting/card_table.cc \
     59   gc/accounting/heap_bitmap.cc \
     60   gc/accounting/mod_union_table.cc \
     61   gc/accounting/remembered_set.cc \
     62   gc/accounting/space_bitmap.cc \
     63   gc/collector/concurrent_copying.cc \
     64   gc/collector/garbage_collector.cc \
     65   gc/collector/immune_region.cc \
     66   gc/collector/immune_spaces.cc \
     67   gc/collector/mark_compact.cc \
     68   gc/collector/mark_sweep.cc \
     69   gc/collector/partial_mark_sweep.cc \
     70   gc/collector/semi_space.cc \
     71   gc/collector/sticky_mark_sweep.cc \
     72   gc/gc_cause.cc \
     73   gc/heap.cc \
     74   gc/reference_processor.cc \
     75   gc/reference_queue.cc \
     76   gc/scoped_gc_critical_section.cc \
     77   gc/space/bump_pointer_space.cc \
     78   gc/space/dlmalloc_space.cc \
     79   gc/space/image_space.cc \
     80   gc/space/large_object_space.cc \
     81   gc/space/malloc_space.cc \
     82   gc/space/region_space.cc \
     83   gc/space/rosalloc_space.cc \
     84   gc/space/space.cc \
     85   gc/space/zygote_space.cc \
     86   gc/task_processor.cc \
     87   hprof/hprof.cc \
     88   image.cc \
     89   indirect_reference_table.cc \
     90   instrumentation.cc \
     91   intern_table.cc \
     92   interpreter/interpreter.cc \
     93   interpreter/interpreter_common.cc \
     94   interpreter/interpreter_goto_table_impl.cc \
     95   interpreter/interpreter_switch_impl.cc \
     96   interpreter/unstarted_runtime.cc \
     97   java_vm_ext.cc \
     98   jdwp/jdwp_event.cc \
     99   jdwp/jdwp_expand_buf.cc \
    100   jdwp/jdwp_handler.cc \
    101   jdwp/jdwp_main.cc \
    102   jdwp/jdwp_request.cc \
    103   jdwp/jdwp_socket.cc \
    104   jdwp/object_registry.cc \
    105   jni_env_ext.cc \
    106   jit/debugger_interface.cc \
    107   jit/jit.cc \
    108   jit/jit_code_cache.cc \
    109   jit/offline_profiling_info.cc \
    110   jit/profiling_info.cc \
    111   jit/profile_saver.cc  \
    112   lambda/art_lambda_method.cc \
    113   lambda/box_table.cc \
    114   lambda/closure.cc \
    115   lambda/closure_builder.cc \
    116   lambda/leaking_allocator.cc \
    117   jni_internal.cc \
    118   jobject_comparator.cc \
    119   linear_alloc.cc \
    120   mem_map.cc \
    121   memory_region.cc \
    122   mirror/abstract_method.cc \
    123   mirror/array.cc \
    124   mirror/class.cc \
    125   mirror/dex_cache.cc \
    126   mirror/field.cc \
    127   mirror/method.cc \
    128   mirror/object.cc \
    129   mirror/reference.cc \
    130   mirror/stack_trace_element.cc \
    131   mirror/string.cc \
    132   mirror/throwable.cc \
    133   monitor.cc \
    134   native_bridge_art_interface.cc \
    135   native/dalvik_system_DexFile.cc \
    136   native/dalvik_system_VMDebug.cc \
    137   native/dalvik_system_VMRuntime.cc \
    138   native/dalvik_system_VMStack.cc \
    139   native/dalvik_system_ZygoteHooks.cc \
    140   native/java_lang_Class.cc \
    141   native/java_lang_DexCache.cc \
    142   native/java_lang_Object.cc \
    143   native/java_lang_String.cc \
    144   native/java_lang_StringFactory.cc \
    145   native/java_lang_System.cc \
    146   native/java_lang_Thread.cc \
    147   native/java_lang_Throwable.cc \
    148   native/java_lang_VMClassLoader.cc \
    149   native/java_lang_ref_FinalizerReference.cc \
    150   native/java_lang_ref_Reference.cc \
    151   native/java_lang_reflect_AbstractMethod.cc \
    152   native/java_lang_reflect_Array.cc \
    153   native/java_lang_reflect_Constructor.cc \
    154   native/java_lang_reflect_Field.cc \
    155   native/java_lang_reflect_Method.cc \
    156   native/java_lang_reflect_Proxy.cc \
    157   native/java_util_concurrent_atomic_AtomicLong.cc \
    158   native/libcore_util_CharsetUtils.cc \
    159   native/org_apache_harmony_dalvik_ddmc_DdmServer.cc \
    160   native/org_apache_harmony_dalvik_ddmc_DdmVmInternal.cc \
    161   native/sun_misc_Unsafe.cc \
    162   oat.cc \
    163   oat_file.cc \
    164   oat_file_assistant.cc \
    165   oat_file_manager.cc \
    166   oat_quick_method_header.cc \
    167   object_lock.cc \
    168   offsets.cc \
    169   os_linux.cc \
    170   parsed_options.cc \
    171   primitive.cc \
    172   profiler.cc \
    173   quick_exception_handler.cc \
    174   quick/inline_method_analyser.cc \
    175   reference_table.cc \
    176   reflection.cc \
    177   runtime.cc \
    178   runtime_options.cc \
    179   signal_catcher.cc \
    180   stack.cc \
    181   stack_map.cc \
    182   thread.cc \
    183   thread_list.cc \
    184   thread_pool.cc \
    185   trace.cc \
    186   transaction.cc \
    187   type_lookup_table.cc \
    188   utf.cc \
    189   utils.cc \
    190   verifier/instruction_flags.cc \
    191   verifier/method_verifier.cc \
    192   verifier/reg_type.cc \
    193   verifier/reg_type_cache.cc \
    194   verifier/register_line.cc \
    195   well_known_classes.cc \
    196   zip_archive.cc
    197 
    198 LIBART_COMMON_SRC_FILES += \
    199   arch/context.cc \
    200   arch/instruction_set.cc \
    201   arch/instruction_set_features.cc \
    202   arch/memcmp16.cc \
    203   arch/arm/instruction_set_features_arm.cc \
    204   arch/arm/registers_arm.cc \
    205   arch/arm64/instruction_set_features_arm64.cc \
    206   arch/arm64/registers_arm64.cc \
    207   arch/mips/instruction_set_features_mips.cc \
    208   arch/mips/registers_mips.cc \
    209   arch/mips64/instruction_set_features_mips64.cc \
    210   arch/mips64/registers_mips64.cc \
    211   arch/x86/instruction_set_features_x86.cc \
    212   arch/x86/registers_x86.cc \
    213   arch/x86_64/registers_x86_64.cc \
    214   entrypoints/entrypoint_utils.cc \
    215   entrypoints/jni/jni_entrypoints.cc \
    216   entrypoints/math_entrypoints.cc \
    217   entrypoints/quick/quick_alloc_entrypoints.cc \
    218   entrypoints/quick/quick_cast_entrypoints.cc \
    219   entrypoints/quick/quick_deoptimization_entrypoints.cc \
    220   entrypoints/quick/quick_dexcache_entrypoints.cc \
    221   entrypoints/quick/quick_field_entrypoints.cc \
    222   entrypoints/quick/quick_fillarray_entrypoints.cc \
    223   entrypoints/quick/quick_instrumentation_entrypoints.cc \
    224   entrypoints/quick/quick_jni_entrypoints.cc \
    225   entrypoints/quick/quick_lock_entrypoints.cc \
    226   entrypoints/quick/quick_math_entrypoints.cc \
    227   entrypoints/quick/quick_thread_entrypoints.cc \
    228   entrypoints/quick/quick_throw_entrypoints.cc \
    229   entrypoints/quick/quick_trampoline_entrypoints.cc
    230 
    231 LIBART_TARGET_LDFLAGS :=
    232 LIBART_HOST_LDFLAGS :=
    233 
    234 # Keep the __jit_debug_register_code symbol as a unique symbol during ICF for architectures where
    235 # we use gold as the linker (arm, x86, x86_64). The symbol is used by the debuggers to detect when
    236 # new jit code is generated. We don't want it to be called when a different function with the same
    237 # (empty) body is called.
    238 JIT_DEBUG_REGISTER_CODE_LDFLAGS := -Wl,--keep-unique,__jit_debug_register_code
    239 LIBART_TARGET_LDFLAGS_arm    := $(JIT_DEBUG_REGISTER_CODE_LDFLAGS)
    240 LIBART_TARGET_LDFLAGS_arm64  := $(JIT_DEBUG_REGISTER_CODE_LDFLAGS)
    241 LIBART_TARGET_LDFLAGS_x86    := $(JIT_DEBUG_REGISTER_CODE_LDFLAGS)
    242 LIBART_TARGET_LDFLAGS_x86_64 := $(JIT_DEBUG_REGISTER_CODE_LDFLAGS)
    243 JIT_DEBUG_REGISTER_CODE_LDFLAGS :=
    244 
    245 LIBART_TARGET_SRC_FILES := \
    246   $(LIBART_COMMON_SRC_FILES) \
    247   jdwp/jdwp_adb.cc \
    248   monitor_android.cc \
    249   runtime_android.cc \
    250   thread_android.cc
    251 
    252 LIBART_TARGET_SRC_FILES_arm := \
    253   interpreter/mterp/mterp.cc \
    254   interpreter/mterp/out/mterp_arm.S \
    255   arch/arm/context_arm.cc.arm \
    256   arch/arm/entrypoints_init_arm.cc \
    257   arch/arm/instruction_set_features_assembly_tests.S \
    258   arch/arm/jni_entrypoints_arm.S \
    259   arch/arm/memcmp16_arm.S \
    260   arch/arm/quick_entrypoints_arm.S \
    261   arch/arm/quick_entrypoints_cc_arm.cc \
    262   arch/arm/thread_arm.cc \
    263   arch/arm/fault_handler_arm.cc
    264 
    265 LIBART_TARGET_SRC_FILES_arm64 := \
    266   interpreter/mterp/mterp.cc \
    267   interpreter/mterp/out/mterp_arm64.S \
    268   arch/arm64/context_arm64.cc \
    269   arch/arm64/entrypoints_init_arm64.cc \
    270   arch/arm64/jni_entrypoints_arm64.S \
    271   arch/arm64/memcmp16_arm64.S \
    272   arch/arm64/quick_entrypoints_arm64.S \
    273   arch/arm64/thread_arm64.cc \
    274   monitor_pool.cc \
    275   arch/arm64/fault_handler_arm64.cc
    276 
    277 LIBART_SRC_FILES_x86 := \
    278   interpreter/mterp/mterp.cc \
    279   interpreter/mterp/out/mterp_x86.S \
    280   arch/x86/context_x86.cc \
    281   arch/x86/entrypoints_init_x86.cc \
    282   arch/x86/jni_entrypoints_x86.S \
    283   arch/x86/memcmp16_x86.S \
    284   arch/x86/quick_entrypoints_x86.S \
    285   arch/x86/thread_x86.cc \
    286   arch/x86/fault_handler_x86.cc
    287 
    288 LIBART_TARGET_SRC_FILES_x86 := \
    289   $(LIBART_SRC_FILES_x86)
    290 
    291 # Note that the fault_handler_x86.cc is not a mistake.  This file is
    292 # shared between the x86 and x86_64 architectures.
    293 LIBART_SRC_FILES_x86_64 := \
    294   interpreter/mterp/mterp.cc \
    295   interpreter/mterp/out/mterp_x86_64.S \
    296   arch/x86_64/context_x86_64.cc \
    297   arch/x86_64/entrypoints_init_x86_64.cc \
    298   arch/x86_64/jni_entrypoints_x86_64.S \
    299   arch/x86_64/memcmp16_x86_64.S \
    300   arch/x86_64/quick_entrypoints_x86_64.S \
    301   arch/x86_64/thread_x86_64.cc \
    302   monitor_pool.cc \
    303   arch/x86/fault_handler_x86.cc
    304 
    305 LIBART_TARGET_SRC_FILES_x86_64 := \
    306   $(LIBART_SRC_FILES_x86_64) \
    307 
    308 LIBART_TARGET_SRC_FILES_mips := \
    309   interpreter/mterp/mterp.cc \
    310   interpreter/mterp/out/mterp_mips.S \
    311   arch/mips/context_mips.cc \
    312   arch/mips/entrypoints_init_mips.cc \
    313   arch/mips/jni_entrypoints_mips.S \
    314   arch/mips/memcmp16_mips.S \
    315   arch/mips/quick_entrypoints_mips.S \
    316   arch/mips/thread_mips.cc \
    317   arch/mips/fault_handler_mips.cc
    318 
    319 LIBART_TARGET_SRC_FILES_mips64 := \
    320   interpreter/mterp/mterp.cc \
    321   interpreter/mterp/out/mterp_mips64.S \
    322   arch/mips64/context_mips64.cc \
    323   arch/mips64/entrypoints_init_mips64.cc \
    324   arch/mips64/jni_entrypoints_mips64.S \
    325   arch/mips64/memcmp16_mips64.S \
    326   arch/mips64/quick_entrypoints_mips64.S \
    327   arch/mips64/thread_mips64.cc \
    328   monitor_pool.cc \
    329   arch/mips64/fault_handler_mips64.cc
    330 
    331 LIBART_HOST_SRC_FILES := \
    332   $(LIBART_COMMON_SRC_FILES) \
    333   monitor_linux.cc \
    334   runtime_linux.cc \
    335   thread_linux.cc
    336 
    337 LIBART_HOST_SRC_FILES_32 := \
    338   $(LIBART_SRC_FILES_x86)
    339 
    340 LIBART_HOST_SRC_FILES_64 := \
    341   $(LIBART_SRC_FILES_x86_64)
    342 
    343 LIBART_ENUM_OPERATOR_OUT_HEADER_FILES := \
    344   arch/instruction_set.h \
    345   base/allocator.h \
    346   base/mutex.h \
    347   debugger.h \
    348   base/unix_file/fd_file.h \
    349   dex_file.h \
    350   dex_instruction.h \
    351   dex_instruction_utils.h \
    352   gc_root.h \
    353   gc/allocator_type.h \
    354   gc/allocator/rosalloc.h \
    355   gc/collector_type.h \
    356   gc/collector/gc_type.h \
    357   gc/heap.h \
    358   gc/space/region_space.h \
    359   gc/space/space.h \
    360   gc/weak_root_state.h \
    361   image.h \
    362   instrumentation.h \
    363   indirect_reference_table.h \
    364   invoke_type.h \
    365   jdwp/jdwp.h \
    366   jdwp/jdwp_constants.h \
    367   lock_word.h \
    368   mirror/class.h \
    369   oat.h \
    370   object_callbacks.h \
    371   process_state.h \
    372   profiler_options.h \
    373   quick/inline_method_analyser.h \
    374   runtime.h \
    375   stack.h \
    376   thread.h \
    377   thread_state.h \
    378   verifier/method_verifier.h
    379 
    380 LIBOPENJDKJVM_SRC_FILES := openjdkjvm/OpenjdkJvm.cc
    381 
    382 LIBART_CFLAGS := -DBUILDING_LIBART=1
    383 
    384 LIBART_TARGET_CFLAGS :=
    385 LIBART_HOST_CFLAGS :=
    386 
    387 # Default dex2oat instruction set features.
    388 LIBART_HOST_DEFAULT_INSTRUCTION_SET_FEATURES := default
    389 LIBART_TARGET_DEFAULT_INSTRUCTION_SET_FEATURES := default
    390 2ND_LIBART_TARGET_DEFAULT_INSTRUCTION_SET_FEATURES := default
    391 ifeq ($(DEX2OAT_TARGET_ARCH),arm)
    392   ifneq (,$(filter $(DEX2OAT_TARGET_CPU_VARIANT),cortex-a15 krait denver))
    393     LIBART_TARGET_DEFAULT_INSTRUCTION_SET_FEATURES := atomic_ldrd_strd,div
    394   else
    395     ifneq (,$(filter $(DEX2OAT_TARGET_CPU_VARIANT),cortex-a7))
    396       LIBART_TARGET_DEFAULT_INSTRUCTION_SET_FEATURES := div
    397     endif
    398   endif
    399 endif
    400 ifeq ($(2ND_DEX2OAT_TARGET_ARCH),arm)
    401   ifneq (,$(filter $(DEX2OAT_TARGET_CPU_VARIANT),cortex-a15 krait denver))
    402     2ND_LIBART_TARGET_DEFAULT_INSTRUCTION_SET_FEATURES := atomic_ldrd_strd,div
    403   else
    404     ifneq (,$(filter $(DEX2OAT_TARGET_CPU_VARIANT),cortex-a7))
    405       2ND_LIBART_TARGET_DEFAULT_INSTRUCTION_SET_FEATURES := div
    406     endif
    407   endif
    408 endif
    409 
    410 # $(1): target or host
    411 # $(2): ndebug or debug
    412 # $(3): static or shared (note that static only applies for host)
    413 # $(4): module name : either libart or libopenjdkjvm
    414 define build-runtime-library
    415   ifneq ($(1),target)
    416     ifneq ($(1),host)
    417       $$(error expected target or host for argument 1, received $(1))
    418     endif
    419   endif
    420   ifneq ($(2),ndebug)
    421     ifneq ($(2),debug)
    422       $$(error expected ndebug or debug for argument 2, received $(2))
    423     endif
    424   endif
    425   ifneq ($(4),libart)
    426     ifneq ($(4),libopenjdkjvm)
    427       $$(error expected libart of libopenjdkjvm for argument 4, received $(4))
    428     endif
    429   endif
    430 
    431   art_target_or_host := $(1)
    432   art_ndebug_or_debug := $(2)
    433   art_static_or_shared := $(3)
    434 
    435   include $$(CLEAR_VARS)
    436   LOCAL_CPP_EXTENSION := $$(ART_CPP_EXTENSION)
    437   ifeq ($$(art_ndebug_or_debug),ndebug)
    438     LOCAL_MODULE := $(4)
    439     ifeq ($$(art_target_or_host),target)
    440       LOCAL_FDO_SUPPORT := true
    441     endif
    442   else # debug
    443     LOCAL_MODULE := $(4)d
    444   endif
    445 
    446   LOCAL_MODULE_TAGS := optional
    447 
    448   ifeq ($$(art_static_or_shared),static)
    449     LOCAL_MODULE_CLASS := STATIC_LIBRARIES
    450   else
    451     LOCAL_MODULE_CLASS := SHARED_LIBRARIES
    452   endif
    453 
    454   ifeq ($(4),libart)
    455     ifeq ($$(art_target_or_host),target)
    456       LOCAL_SRC_FILES := $$(LIBART_TARGET_SRC_FILES)
    457       $$(foreach arch,$$(ART_TARGET_SUPPORTED_ARCH), \
    458         $$(eval LOCAL_SRC_FILES_$$(arch) := $$$$(LIBART_TARGET_SRC_FILES_$$(arch))))
    459     else # host
    460       LOCAL_SRC_FILES := $$(LIBART_HOST_SRC_FILES)
    461       LOCAL_SRC_FILES_32 := $$(LIBART_HOST_SRC_FILES_32)
    462       LOCAL_SRC_FILES_64 := $$(LIBART_HOST_SRC_FILES_64)
    463       LOCAL_IS_HOST_MODULE := true
    464     endif
    465   else # libopenjdkjvm
    466     LOCAL_SRC_FILES := $$(LIBOPENJDKJVM_SRC_FILES)
    467     ifeq ($$(art_target_or_host),host)
    468       LOCAL_IS_HOST_MODULE := true
    469     endif
    470   endif
    471 
    472 ifeq ($(4),libart)
    473   GENERATED_SRC_DIR := $$(call local-generated-sources-dir)
    474   ENUM_OPERATOR_OUT_CC_FILES := $$(patsubst %.h,%_operator_out.cc,$$(LIBART_ENUM_OPERATOR_OUT_HEADER_FILES))
    475   ENUM_OPERATOR_OUT_GEN := $$(addprefix $$(GENERATED_SRC_DIR)/,$$(ENUM_OPERATOR_OUT_CC_FILES))
    476 
    477 $$(ENUM_OPERATOR_OUT_GEN): art/tools/generate-operator-out.py
    478 $$(ENUM_OPERATOR_OUT_GEN): PRIVATE_CUSTOM_TOOL = art/tools/generate-operator-out.py $(LOCAL_PATH) $$< > $$@
    479 $$(ENUM_OPERATOR_OUT_GEN): $$(GENERATED_SRC_DIR)/%_operator_out.cc : $(LOCAL_PATH)/%.h
    480 	$$(transform-generated-source)
    481 
    482   LOCAL_GENERATED_SOURCES += $$(ENUM_OPERATOR_OUT_GEN)
    483 endif
    484 
    485   LOCAL_CFLAGS := $$(LIBART_CFLAGS)
    486   LOCAL_LDFLAGS := $$(LIBART_LDFLAGS)
    487   ifeq ($$(art_target_or_host),target)
    488     LOCAL_CFLAGS += $$(LIBART_TARGET_CFLAGS)
    489     LOCAL_LDFLAGS += $$(LIBART_TARGET_LDFLAGS)
    490     $$(foreach arch,$$(ART_TARGET_SUPPORTED_ARCH), \
    491       $$(eval LOCAL_LDFLAGS_$$(arch) := $$(LIBART_TARGET_LDFLAGS_$$(arch))))
    492   else #host
    493     LOCAL_CFLAGS += $$(LIBART_HOST_CFLAGS)
    494     LOCAL_LDFLAGS += $$(LIBART_HOST_LDFLAGS)
    495     ifeq ($$(art_static_or_shared),static)
    496       LOCAL_LDFLAGS += -static
    497     endif
    498   endif
    499 
    500   # Clang usage
    501   ifeq ($$(art_target_or_host),target)
    502     $$(eval $$(call set-target-local-clang-vars))
    503     $$(eval $$(call set-target-local-cflags-vars,$(2)))
    504     LOCAL_CLANG_ASFLAGS_arm += -no-integrated-as
    505     LOCAL_CFLAGS_$(DEX2OAT_TARGET_ARCH) += -DART_DEFAULT_INSTRUCTION_SET_FEATURES="$(LIBART_TARGET_DEFAULT_INSTRUCTION_SET_FEATURES)"
    506     LOCAL_CFLAGS_$(2ND_DEX2OAT_TARGET_ARCH) += -DART_DEFAULT_INSTRUCTION_SET_FEATURES="$(2ND_LIBART_TARGET_DEFAULT_INSTRUCTION_SET_FEATURES)"
    507   else # host
    508     LOCAL_CLANG := $$(ART_HOST_CLANG)
    509     LOCAL_LDLIBS := $$(ART_HOST_LDLIBS)
    510     LOCAL_LDLIBS += -ldl -lpthread
    511     ifeq ($$(HOST_OS),linux)
    512       LOCAL_LDLIBS += -lrt
    513     endif
    514     LOCAL_CFLAGS += $$(ART_HOST_CFLAGS)
    515     LOCAL_CFLAGS += -DART_DEFAULT_INSTRUCTION_SET_FEATURES="$(LIBART_HOST_DEFAULT_INSTRUCTION_SET_FEATURES)"
    516     LOCAL_ASFLAGS += $$(ART_HOST_ASFLAGS)
    517 
    518     ifeq ($$(art_ndebug_or_debug),debug)
    519       LOCAL_CFLAGS += $$(ART_HOST_DEBUG_CFLAGS)
    520     else
    521       LOCAL_CFLAGS += $$(ART_HOST_NON_DEBUG_CFLAGS)
    522     endif
    523     LOCAL_MULTILIB := both
    524   endif
    525 
    526   LOCAL_C_INCLUDES += $$(ART_C_INCLUDES)
    527   LOCAL_C_INCLUDES += art/cmdline
    528   LOCAL_C_INCLUDES += art/sigchainlib
    529   LOCAL_C_INCLUDES += art
    530 
    531   ifeq ($$(art_static_or_shared),static)
    532     LOCAL_STATIC_LIBRARIES := libnativehelper
    533     LOCAL_STATIC_LIBRARIES += libnativebridge
    534     LOCAL_STATIC_LIBRARIES += libnativeloader
    535     LOCAL_STATIC_LIBRARIES += libsigchain_dummy
    536     LOCAL_STATIC_LIBRARIES += libbacktrace
    537     LOCAL_STATIC_LIBRARIES += liblz4
    538   else
    539     LOCAL_SHARED_LIBRARIES := libnativehelper
    540     LOCAL_SHARED_LIBRARIES += libnativebridge
    541     LOCAL_SHARED_LIBRARIES += libnativeloader
    542     LOCAL_SHARED_LIBRARIES += libsigchain
    543     LOCAL_SHARED_LIBRARIES += libbacktrace
    544     LOCAL_SHARED_LIBRARIES += liblz4
    545   endif
    546 
    547   ifeq ($$(art_target_or_host),target)
    548     LOCAL_SHARED_LIBRARIES += libdl
    549     # ZipArchive support, the order matters here to get all symbols.
    550     LOCAL_STATIC_LIBRARIES := libziparchive libz libbase
    551     # For android::FileMap used by libziparchive.
    552     LOCAL_SHARED_LIBRARIES += libutils
    553     # For liblog, atrace, properties, ashmem, set_sched_policy and socket_peer_is_trusted.
    554     LOCAL_SHARED_LIBRARIES += libcutils
    555   else # host
    556     ifeq ($$(art_static_or_shared),static)
    557       LOCAL_STATIC_LIBRARIES += libziparchive-host libz
    558       # For ashmem_create_region.
    559       LOCAL_STATIC_LIBRARIES += libcutils
    560     else
    561       LOCAL_SHARED_LIBRARIES += libziparchive-host libz-host
    562       # For ashmem_create_region.
    563       LOCAL_SHARED_LIBRARIES += libcutils
    564     endif
    565   endif
    566 
    567   ifeq ($(4),libopenjdkjvm)
    568     ifeq ($$(art_ndebug_or_debug),ndebug)
    569       LOCAL_SHARED_LIBRARIES += libart
    570     else
    571       LOCAL_SHARED_LIBRARIES += libartd
    572     endif
    573     LOCAL_NOTICE_FILE := $(LOCAL_PATH)/openjdkjvm/NOTICE
    574   endif
    575   LOCAL_ADDITIONAL_DEPENDENCIES := art/build/Android.common_build.mk
    576   LOCAL_ADDITIONAL_DEPENDENCIES += $$(LOCAL_PATH)/Android.mk
    577 
    578   ifeq ($$(art_target_or_host),target)
    579     LOCAL_MODULE_TARGET_ARCH := $$(ART_TARGET_SUPPORTED_ARCH)
    580   endif
    581 
    582   LOCAL_NATIVE_COVERAGE := $(ART_COVERAGE)
    583 
    584   ifeq ($$(art_target_or_host),target)
    585     ifneq ($$(art_ndebug_or_debug),debug)
    586       # Leave the symbols in the shared library so that stack unwinders can
    587       # produce meaningful name resolution.
    588       LOCAL_STRIP_MODULE := keep_symbols
    589     endif
    590     include $$(BUILD_SHARED_LIBRARY)
    591   else # host
    592     ifeq ($$(art_static_or_shared),static)
    593       include $$(BUILD_HOST_STATIC_LIBRARY)
    594     else
    595       include $$(BUILD_HOST_SHARED_LIBRARY)
    596     endif
    597   endif
    598 
    599   # Clear locally defined variables.
    600   GENERATED_SRC_DIR :=
    601   ENUM_OPERATOR_OUT_CC_FILES :=
    602   ENUM_OPERATOR_OUT_GEN :=
    603   art_target_or_host :=
    604   art_ndebug_or_debug :=
    605   art_static_or_shared :=
    606 endef
    607 
    608 # We always build dex2oat and dependencies, even if the host build is otherwise disabled, since
    609 # they are used to cross compile for the target.
    610 ifeq ($(ART_BUILD_HOST_NDEBUG),true)
    611   $(eval $(call build-runtime-library,host,ndebug,shared,libart))
    612   $(eval $(call build-runtime-library,host,ndebug,shared,libopenjdkjvm))
    613   ifeq ($(ART_BUILD_HOST_STATIC),true)
    614     $(eval $(call build-runtime-library,host,ndebug,static,libart))
    615     $(eval $(call build-runtime-library,host,ndebug,static,libopenjdkjvm))
    616   endif
    617 endif
    618 ifeq ($(ART_BUILD_HOST_DEBUG),true)
    619   $(eval $(call build-runtime-library,host,debug,shared,libart))
    620   $(eval $(call build-runtime-library,host,debug,shared,libopenjdkjvm))
    621   ifeq ($(ART_BUILD_HOST_STATIC),true)
    622     $(eval $(call build-runtime-library,host,debug,static,libart))
    623     $(eval $(call build-runtime-library,host,debug,static,libopenjdkjvm))
    624   endif
    625 endif
    626 
    627 ifeq ($(ART_BUILD_TARGET_NDEBUG),true)
    628 #  $(error $(call build-runtime-library,target,ndebug))
    629   $(eval $(call build-runtime-library,target,ndebug,shared,libart))
    630   $(eval $(call build-runtime-library,target,ndebug,shared,libopenjdkjvm))
    631 endif
    632 ifeq ($(ART_BUILD_TARGET_DEBUG),true)
    633   $(eval $(call build-runtime-library,target,debug,shared,libart))
    634   $(eval $(call build-runtime-library,target,debug,shared,libopenjdkjvm))
    635 endif
    636 
    637 # Clear locally defined variables.
    638 LOCAL_PATH :=
    639 LIBART_COMMON_SRC_FILES :=
    640 LIBART_HOST_DEFAULT_INSTRUCTION_SET_FEATURES :=
    641 LIBART_TARGET_DEFAULT_INSTRUCTION_SET_FEATURES :=
    642 2ND_LIBART_TARGET_DEFAULT_INSTRUCTION_SET_FEATURES :=
    643 LIBART_HOST_LDFLAGS :=
    644 LIBART_TARGET_LDFLAGS :=
    645 LIBART_TARGET_LDFLAGS_arm :=
    646 LIBART_TARGET_LDFLAGS_arm64 :=
    647 LIBART_TARGET_LDFLAGS_x86 :=
    648 LIBART_TARGET_LDFLAGS_x86_64 :=
    649 LIBART_TARGET_LDFLAGS_mips :=
    650 LIBART_TARGET_LDFLAGS_mips64 :=
    651 LIBART_TARGET_SRC_FILES :=
    652 LIBART_TARGET_SRC_FILES_arm :=
    653 LIBART_TARGET_SRC_FILES_arm64 :=
    654 LIBART_TARGET_SRC_FILES_x86 :=
    655 LIBART_TARGET_SRC_FILES_x86_64 :=
    656 LIBART_TARGET_SRC_FILES_mips :=
    657 LIBART_TARGET_SRC_FILES_mips64 :=
    658 LIBART_HOST_SRC_FILES :=
    659 LIBART_HOST_SRC_FILES_32 :=
    660 LIBART_HOST_SRC_FILES_64 :=
    661 LIBART_ENUM_OPERATOR_OUT_HEADER_FILES :=
    662 LIBART_CFLAGS :=
    663 LIBART_TARGET_CFLAGS :=
    664 LIBART_HOST_CFLAGS :=
    665 build-runtime-library :=
    666