1# 2# Copyright (C) 2012 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 17LOCAL_PATH := $(call my-dir) 18 19include art/build/Android.common.mk 20 21LIBART_COMPILER_SRC_FILES := \ 22 compiled_method.cc \ 23 dex/local_value_numbering.cc \ 24 dex/arena_allocator.cc \ 25 dex/arena_bit_vector.cc \ 26 dex/quick/arm/assemble_arm.cc \ 27 dex/quick/arm/call_arm.cc \ 28 dex/quick/arm/fp_arm.cc \ 29 dex/quick/arm/int_arm.cc \ 30 dex/quick/arm/target_arm.cc \ 31 dex/quick/arm/utility_arm.cc \ 32 dex/quick/codegen_util.cc \ 33 dex/quick/gen_common.cc \ 34 dex/quick/gen_invoke.cc \ 35 dex/quick/gen_loadstore.cc \ 36 dex/quick/local_optimizations.cc \ 37 dex/quick/mips/assemble_mips.cc \ 38 dex/quick/mips/call_mips.cc \ 39 dex/quick/mips/fp_mips.cc \ 40 dex/quick/mips/int_mips.cc \ 41 dex/quick/mips/target_mips.cc \ 42 dex/quick/mips/utility_mips.cc \ 43 dex/quick/mir_to_lir.cc \ 44 dex/quick/ralloc_util.cc \ 45 dex/quick/x86/assemble_x86.cc \ 46 dex/quick/x86/call_x86.cc \ 47 dex/quick/x86/fp_x86.cc \ 48 dex/quick/x86/int_x86.cc \ 49 dex/quick/x86/target_x86.cc \ 50 dex/quick/x86/utility_x86.cc \ 51 dex/portable/mir_to_gbc.cc \ 52 dex/dex_to_dex_compiler.cc \ 53 dex/mir_dataflow.cc \ 54 dex/mir_optimization.cc \ 55 dex/frontend.cc \ 56 dex/mir_graph.cc \ 57 dex/mir_analysis.cc \ 58 dex/vreg_analysis.cc \ 59 dex/ssa_transformation.cc \ 60 driver/compiler_driver.cc \ 61 driver/dex_compilation_unit.cc \ 62 jni/portable/jni_compiler.cc \ 63 jni/quick/arm/calling_convention_arm.cc \ 64 jni/quick/mips/calling_convention_mips.cc \ 65 jni/quick/x86/calling_convention_x86.cc \ 66 jni/quick/calling_convention.cc \ 67 jni/quick/jni_compiler.cc \ 68 llvm/compiler_llvm.cc \ 69 llvm/gbc_expander.cc \ 70 llvm/generated/art_module.cc \ 71 llvm/intrinsic_helper.cc \ 72 llvm/ir_builder.cc \ 73 llvm/llvm_compilation_unit.cc \ 74 llvm/md_builder.cc \ 75 llvm/runtime_support_builder.cc \ 76 llvm/runtime_support_builder_arm.cc \ 77 llvm/runtime_support_builder_thumb2.cc \ 78 llvm/runtime_support_builder_x86.cc \ 79 trampolines/trampoline_compiler.cc \ 80 utils/arm/assembler_arm.cc \ 81 utils/arm/managed_register_arm.cc \ 82 utils/assembler.cc \ 83 utils/mips/assembler_mips.cc \ 84 utils/mips/managed_register_mips.cc \ 85 utils/x86/assembler_x86.cc \ 86 utils/x86/managed_register_x86.cc \ 87 buffered_output_stream.cc \ 88 elf_fixup.cc \ 89 elf_stripper.cc \ 90 elf_writer.cc \ 91 elf_writer_quick.cc \ 92 file_output_stream.cc \ 93 image_writer.cc \ 94 oat_writer.cc \ 95 vector_output_stream.cc 96 97ifeq ($(ART_SEA_IR_MODE),true) 98LIBART_COMPILER_SRC_FILES += \ 99 sea_ir/frontend.cc \ 100 sea_ir/ir/instruction_tools.cc \ 101 sea_ir/ir/sea.cc \ 102 sea_ir/code_gen/code_gen.cc \ 103 sea_ir/code_gen/code_gen_data.cc \ 104 sea_ir/types/type_inference.cc \ 105 sea_ir/types/type_inference_visitor.cc \ 106 sea_ir/debug/dot_gen.cc 107endif 108 109LIBART_COMPILER_CFLAGS := 110ifeq ($(ART_USE_PORTABLE_COMPILER),true) 111 LIBART_COMPILER_SRC_FILES += elf_writer_mclinker.cc 112 LIBART_COMPILER_CFLAGS += -DART_USE_PORTABLE_COMPILER=1 113endif 114 115LIBART_COMPILER_ENUM_OPERATOR_OUT_HEADER_FILES := \ 116 dex/compiler_enums.h 117 118# $(1): target or host 119# $(2): ndebug or debug 120define build-libart-compiler 121 ifneq ($(1),target) 122 ifneq ($(1),host) 123 $$(error expected target or host for argument 1, received $(1)) 124 endif 125 endif 126 ifneq ($(2),ndebug) 127 ifneq ($(2),debug) 128 $$(error expected ndebug or debug for argument 2, received $(2)) 129 endif 130 endif 131 132 art_target_or_host := $(1) 133 art_ndebug_or_debug := $(2) 134 135 include $(CLEAR_VARS) 136 ifeq ($$(art_target_or_host),target) 137 include external/stlport/libstlport.mk 138 else 139 LOCAL_IS_HOST_MODULE := true 140 endif 141 LOCAL_CPP_EXTENSION := $(ART_CPP_EXTENSION) 142 ifeq ($$(art_ndebug_or_debug),ndebug) 143 LOCAL_MODULE := libart-compiler 144 else # debug 145 LOCAL_MODULE := libartd-compiler 146 endif 147 148 LOCAL_MODULE_TAGS := optional 149 LOCAL_MODULE_CLASS := SHARED_LIBRARIES 150 151 LOCAL_SRC_FILES := $$(LIBART_COMPILER_SRC_FILES) 152 153 GENERATED_SRC_DIR := $$(call intermediates-dir-for,$$(LOCAL_MODULE_CLASS),$$(LOCAL_MODULE),$$(LOCAL_IS_HOST_MODULE),) 154 ENUM_OPERATOR_OUT_CC_FILES := $$(patsubst %.h,%_operator_out.cc,$$(LIBART_COMPILER_ENUM_OPERATOR_OUT_HEADER_FILES)) 155 ENUM_OPERATOR_OUT_GEN := $$(addprefix $$(GENERATED_SRC_DIR)/,$$(ENUM_OPERATOR_OUT_CC_FILES)) 156 157$$(ENUM_OPERATOR_OUT_GEN): art/tools/generate-operator-out.py 158$$(ENUM_OPERATOR_OUT_GEN): PRIVATE_CUSTOM_TOOL = art/tools/generate-operator-out.py $(LOCAL_PATH) $$< > $$@ 159$$(ENUM_OPERATOR_OUT_GEN): $$(GENERATED_SRC_DIR)/%_operator_out.cc : $(LOCAL_PATH)/%.h 160 $$(transform-generated-source) 161 162 LOCAL_GENERATED_SOURCES += $$(ENUM_OPERATOR_OUT_GEN) 163 164 LOCAL_CFLAGS := $$(LIBART_COMPILER_CFLAGS) 165 ifeq ($$(art_target_or_host),target) 166 LOCAL_CLANG := $(ART_TARGET_CLANG) 167 LOCAL_CFLAGS += $(ART_TARGET_CFLAGS) 168 else # host 169 LOCAL_CLANG := $(ART_HOST_CLANG) 170 LOCAL_CFLAGS += $(ART_HOST_CFLAGS) 171 endif 172 173 # TODO: clean up the compilers and remove this. 174 LOCAL_CFLAGS += -Wno-unused-parameter 175 176 LOCAL_SHARED_LIBRARIES += liblog 177 ifeq ($$(art_ndebug_or_debug),debug) 178 ifeq ($$(art_target_or_host),target) 179 LOCAL_CFLAGS += $(ART_TARGET_DEBUG_CFLAGS) 180 else # host 181 LOCAL_CFLAGS += $(ART_HOST_DEBUG_CFLAGS) 182 endif 183 LOCAL_SHARED_LIBRARIES += libartd 184 else 185 ifeq ($$(art_target_or_host),target) 186 LOCAL_CFLAGS += $(ART_TARGET_NON_DEBUG_CFLAGS) 187 else # host 188 LOCAL_CFLAGS += $(ART_HOST_NON_DEBUG_CFLAGS) 189 endif 190 LOCAL_SHARED_LIBRARIES += libart 191 endif 192 LOCAL_SHARED_LIBRARIES += libbcc libbcinfo libLLVM 193 ifeq ($(ART_USE_PORTABLE_COMPILER),true) 194 LOCAL_CFLAGS += -DART_USE_PORTABLE_COMPILER=1 195 endif 196 197 LOCAL_C_INCLUDES += $(ART_C_INCLUDES) art/runtime 198 199 ifeq ($$(art_target_or_host),host) 200 LOCAL_LDLIBS := -ldl -lpthread 201 endif 202 LOCAL_ADDITIONAL_DEPENDENCIES := art/build/Android.common.mk 203 LOCAL_ADDITIONAL_DEPENDENCIES += $(LOCAL_PATH)/Android.mk 204 ifeq ($$(art_target_or_host),target) 205 LOCAL_SHARED_LIBRARIES += libcutils 206 include $(LLVM_GEN_INTRINSICS_MK) 207 include $(LLVM_DEVICE_BUILD_MK) 208 include $(BUILD_SHARED_LIBRARY) 209 else # host 210 LOCAL_STATIC_LIBRARIES += libcutils 211 include $(LLVM_GEN_INTRINSICS_MK) 212 include $(LLVM_HOST_BUILD_MK) 213 include $(BUILD_HOST_SHARED_LIBRARY) 214 endif 215 216 ifeq ($$(art_target_or_host),target) 217 ifeq ($$(art_ndebug_or_debug),debug) 218 $(TARGET_OUT_EXECUTABLES)/dex2oatd: $$(LOCAL_INSTALLED_MODULE) 219 else 220 $(TARGET_OUT_EXECUTABLES)/dex2oat: $$(LOCAL_INSTALLED_MODULE) 221 endif 222 else # host 223 ifeq ($$(art_ndebug_or_debug),debug) 224 $(HOST_OUT_EXECUTABLES)/dex2oatd: $$(LOCAL_INSTALLED_MODULE) 225 else 226 $(HOST_OUT_EXECUTABLES)/dex2oat: $$(LOCAL_INSTALLED_MODULE) 227 endif 228 endif 229 230endef 231 232ifeq ($(ART_BUILD_TARGET_NDEBUG),true) 233 $(eval $(call build-libart-compiler,target,ndebug)) 234endif 235ifeq ($(ART_BUILD_TARGET_DEBUG),true) 236 $(eval $(call build-libart-compiler,target,debug)) 237endif 238ifeq ($(WITH_HOST_DALVIK),true) 239 # We always build dex2oat and dependencies, even if the host build is otherwise disabled, since they are used to cross compile for the target. 240 ifeq ($(ART_BUILD_NDEBUG),true) 241 $(eval $(call build-libart-compiler,host,ndebug)) 242 endif 243 ifeq ($(ART_BUILD_DEBUG),true) 244 $(eval $(call build-libart-compiler,host,debug)) 245 endif 246endif 247 248# Rule to build /system/lib/libcompiler_rt.a 249# Usually static libraries are not installed on the device. 250ifeq ($(ART_USE_PORTABLE_COMPILER),true) 251ifeq ($(ART_BUILD_TARGET),true) 252# TODO: Move to external/compiler_rt 253$(eval $(call copy-one-file, $(call intermediates-dir-for,STATIC_LIBRARIES,libcompiler_rt,,)/libcompiler_rt.a, $(TARGET_OUT_SHARED_LIBRARIES)/libcompiler_rt.a)) 254 255$(DEX2OAT): $(TARGET_OUT_SHARED_LIBRARIES)/libcompiler_rt.a 256 257endif 258endif 259