Android.mk revision 96f89a290eb67d7bf4b1636798fa28df14309cc7
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_build.mk 20 21LIBART_COMPILER_SRC_FILES := \ 22 compiled_method.cc \ 23 dex/global_value_numbering.cc \ 24 dex/local_value_numbering.cc \ 25 dex/quick/arm/assemble_arm.cc \ 26 dex/quick/arm/call_arm.cc \ 27 dex/quick/arm/fp_arm.cc \ 28 dex/quick/arm/int_arm.cc \ 29 dex/quick/arm/target_arm.cc \ 30 dex/quick/arm/utility_arm.cc \ 31 dex/quick/arm64/assemble_arm64.cc \ 32 dex/quick/arm64/call_arm64.cc \ 33 dex/quick/arm64/fp_arm64.cc \ 34 dex/quick/arm64/int_arm64.cc \ 35 dex/quick/arm64/target_arm64.cc \ 36 dex/quick/arm64/utility_arm64.cc \ 37 dex/quick/codegen_util.cc \ 38 dex/quick/dex_file_method_inliner.cc \ 39 dex/quick/dex_file_to_method_inliner_map.cc \ 40 dex/quick/gen_common.cc \ 41 dex/quick/gen_invoke.cc \ 42 dex/quick/gen_loadstore.cc \ 43 dex/quick/local_optimizations.cc \ 44 dex/quick/mips/assemble_mips.cc \ 45 dex/quick/mips/call_mips.cc \ 46 dex/quick/mips/fp_mips.cc \ 47 dex/quick/mips/int_mips.cc \ 48 dex/quick/mips/target_mips.cc \ 49 dex/quick/mips/utility_mips.cc \ 50 dex/quick/mir_to_lir.cc \ 51 dex/quick/ralloc_util.cc \ 52 dex/quick/resource_mask.cc \ 53 dex/quick/x86/assemble_x86.cc \ 54 dex/quick/x86/call_x86.cc \ 55 dex/quick/x86/fp_x86.cc \ 56 dex/quick/x86/int_x86.cc \ 57 dex/quick/x86/target_x86.cc \ 58 dex/quick/x86/utility_x86.cc \ 59 dex/dex_to_dex_compiler.cc \ 60 dex/mir_dataflow.cc \ 61 dex/mir_field_info.cc \ 62 dex/mir_method_info.cc \ 63 dex/mir_optimization.cc \ 64 dex/bb_optimizations.cc \ 65 dex/post_opt_passes.cc \ 66 dex/pass_driver_me_opts.cc \ 67 dex/pass_driver_me_post_opt.cc \ 68 dex/frontend.cc \ 69 dex/mir_graph.cc \ 70 dex/mir_analysis.cc \ 71 dex/verified_method.cc \ 72 dex/verification_results.cc \ 73 dex/vreg_analysis.cc \ 74 dex/ssa_transformation.cc \ 75 dex/quick_compiler_callbacks.cc \ 76 driver/compiler_driver.cc \ 77 driver/dex_compilation_unit.cc \ 78 jni/quick/arm/calling_convention_arm.cc \ 79 jni/quick/arm64/calling_convention_arm64.cc \ 80 jni/quick/mips/calling_convention_mips.cc \ 81 jni/quick/x86/calling_convention_x86.cc \ 82 jni/quick/x86_64/calling_convention_x86_64.cc \ 83 jni/quick/calling_convention.cc \ 84 jni/quick/jni_compiler.cc \ 85 optimizing/builder.cc \ 86 optimizing/code_generator.cc \ 87 optimizing/code_generator_arm.cc \ 88 optimizing/code_generator_x86.cc \ 89 optimizing/code_generator_x86_64.cc \ 90 optimizing/graph_visualizer.cc \ 91 optimizing/locations.cc \ 92 optimizing/nodes.cc \ 93 optimizing/optimizing_compiler.cc \ 94 optimizing/parallel_move_resolver.cc \ 95 optimizing/register_allocator.cc \ 96 optimizing/ssa_builder.cc \ 97 optimizing/ssa_liveness_analysis.cc \ 98 optimizing/ssa_phi_elimination.cc \ 99 optimizing/ssa_type_propagation.cc \ 100 trampolines/trampoline_compiler.cc \ 101 utils/arena_allocator.cc \ 102 utils/arena_bit_vector.cc \ 103 utils/arm/assembler_arm.cc \ 104 utils/arm/assembler_arm32.cc \ 105 utils/arm/assembler_thumb2.cc \ 106 utils/arm/managed_register_arm.cc \ 107 utils/arm64/assembler_arm64.cc \ 108 utils/arm64/managed_register_arm64.cc \ 109 utils/assembler.cc \ 110 utils/mips/assembler_mips.cc \ 111 utils/mips/managed_register_mips.cc \ 112 utils/x86/assembler_x86.cc \ 113 utils/x86/managed_register_x86.cc \ 114 utils/x86_64/assembler_x86_64.cc \ 115 utils/x86_64/managed_register_x86_64.cc \ 116 utils/scoped_arena_allocator.cc \ 117 buffered_output_stream.cc \ 118 compilers.cc \ 119 compiler.cc \ 120 elf_fixup.cc \ 121 elf_stripper.cc \ 122 elf_writer.cc \ 123 elf_writer_quick.cc \ 124 file_output_stream.cc \ 125 image_writer.cc \ 126 oat_writer.cc \ 127 vector_output_stream.cc 128 129ifeq ($(ART_SEA_IR_MODE),true) 130LIBART_COMPILER_SRC_FILES += \ 131 sea_ir/frontend.cc \ 132 sea_ir/ir/instruction_tools.cc \ 133 sea_ir/ir/sea.cc \ 134 sea_ir/code_gen/code_gen.cc \ 135 sea_ir/code_gen/code_gen_data.cc \ 136 sea_ir/types/type_inference.cc \ 137 sea_ir/types/type_inference_visitor.cc \ 138 sea_ir/debug/dot_gen.cc 139endif 140 141LIBART_COMPILER_CFLAGS := 142 143ifeq ($(ART_USE_PORTABLE_COMPILER),true) 144LIBART_COMPILER_SRC_FILES += \ 145 dex/portable/mir_to_gbc.cc \ 146 elf_writer_mclinker.cc \ 147 jni/portable/jni_compiler.cc \ 148 llvm/compiler_llvm.cc \ 149 llvm/gbc_expander.cc \ 150 llvm/generated/art_module.cc \ 151 llvm/intrinsic_helper.cc \ 152 llvm/ir_builder.cc \ 153 llvm/llvm_compilation_unit.cc \ 154 llvm/md_builder.cc \ 155 llvm/runtime_support_builder.cc \ 156 llvm/runtime_support_builder_arm.cc \ 157 llvm/runtime_support_builder_x86.cc 158LIBART_COMPILER_CFLAGS += -DART_USE_PORTABLE_COMPILER=1 159endif 160 161LIBART_COMPILER_ENUM_OPERATOR_OUT_HEADER_FILES := \ 162 dex/compiler_enums.h 163 164# $(1): target or host 165# $(2): ndebug or debug 166define build-libart-compiler 167 ifneq ($(1),target) 168 ifneq ($(1),host) 169 $$(error expected target or host for argument 1, received $(1)) 170 endif 171 endif 172 ifneq ($(2),ndebug) 173 ifneq ($(2),debug) 174 $$(error expected ndebug or debug for argument 2, received $(2)) 175 endif 176 endif 177 178 art_target_or_host := $(1) 179 art_ndebug_or_debug := $(2) 180 181 include $(CLEAR_VARS) 182 ifeq ($$(art_target_or_host),host) 183 LOCAL_IS_HOST_MODULE := true 184 endif 185 LOCAL_CPP_EXTENSION := $(ART_CPP_EXTENSION) 186 ifeq ($$(art_ndebug_or_debug),ndebug) 187 LOCAL_MODULE := libart-compiler 188 LOCAL_SHARED_LIBRARIES += libart 189 else # debug 190 LOCAL_MODULE := libartd-compiler 191 LOCAL_SHARED_LIBRARIES += libartd 192 endif 193 194 LOCAL_MODULE_TAGS := optional 195 LOCAL_MODULE_CLASS := SHARED_LIBRARIES 196 197 LOCAL_SRC_FILES := $$(LIBART_COMPILER_SRC_FILES) 198 199 GENERATED_SRC_DIR := $$(call local-generated-sources-dir) 200 ENUM_OPERATOR_OUT_CC_FILES := $$(patsubst %.h,%_operator_out.cc,$$(LIBART_COMPILER_ENUM_OPERATOR_OUT_HEADER_FILES)) 201 ENUM_OPERATOR_OUT_GEN := $$(addprefix $$(GENERATED_SRC_DIR)/,$$(ENUM_OPERATOR_OUT_CC_FILES)) 202 203$$(ENUM_OPERATOR_OUT_GEN): art/tools/generate-operator-out.py 204$$(ENUM_OPERATOR_OUT_GEN): PRIVATE_CUSTOM_TOOL = art/tools/generate-operator-out.py $(LOCAL_PATH) $$< > $$@ 205$$(ENUM_OPERATOR_OUT_GEN): $$(GENERATED_SRC_DIR)/%_operator_out.cc : $(LOCAL_PATH)/%.h 206 $$(transform-generated-source) 207 208 LOCAL_GENERATED_SOURCES += $$(ENUM_OPERATOR_OUT_GEN) 209 210 LOCAL_CFLAGS := $$(LIBART_COMPILER_CFLAGS) 211 include external/libcxx/libcxx.mk 212 ifeq ($$(art_target_or_host),target) 213 $(call set-target-local-clang-vars) 214 $(call set-target-local-cflags-vars,$(2)) 215 else # host 216 LOCAL_CLANG := $(ART_HOST_CLANG) 217 LOCAL_CFLAGS += $(ART_HOST_CFLAGS) 218 ifeq ($$(art_ndebug_or_debug),debug) 219 LOCAL_CFLAGS += $(ART_HOST_DEBUG_CFLAGS) 220 else 221 LOCAL_CFLAGS += $(ART_HOST_NON_DEBUG_CFLAGS) 222 endif 223 endif 224 225 # TODO: clean up the compilers and remove this. 226 LOCAL_CFLAGS += -Wno-unused-parameter 227 228 ifeq ($(ART_USE_PORTABLE_COMPILER),true) 229 LOCAL_SHARED_LIBRARIES += libLLVM 230 LOCAL_CFLAGS += -DART_USE_PORTABLE_COMPILER=1 231 ifeq ($$(art_target_or_host),target) 232 LOCAL_STATIC_LIBRARIES_arm += libmcldARMInfo libmcldARMTarget 233 LOCAL_STATIC_LIBRARIES_x86 += libmcldX86Info libmcldX86Target 234 LOCAL_STATIC_LIBRARIES_x86_64 += libmcldX86Info libmcldX86Target 235 LOCAL_STATIC_LIBRARIES_mips += libmcldMipsInfo libmcldMipsTarget 236 ifeq ($(TARGET_ARCH),arm64) 237 $$(info TODOAArch64: $$(LOCAL_PATH)/Android.mk Add Arm64 specific MCLinker libraries) 238 endif # TARGET_ARCH != arm64 239 include $(LLVM_DEVICE_BUILD_MK) 240 else # host 241 LOCAL_STATIC_LIBRARIES += libmcldARMInfo libmcldARMTarget 242 LOCAL_STATIC_LIBRARIES += libmcldX86Info libmcldX86Target 243 LOCAL_STATIC_LIBRARIES += libmcldMipsInfo libmcldMipsTarget 244 include $(LLVM_HOST_BUILD_MK) 245 endif 246 LOCAL_STATIC_LIBRARIES += libmcldCore libmcldObject libmcldADT libmcldFragment libmcldTarget libmcldCodeGen libmcldLDVariant libmcldMC libmcldSupport libmcldLD libmcldScript 247 include $(LLVM_GEN_INTRINSICS_MK) 248 endif 249 250 LOCAL_C_INCLUDES += $(ART_C_INCLUDES) art/runtime 251 252 ifeq ($$(art_target_or_host),host) 253 LOCAL_LDLIBS += -ldl -lpthread 254 endif 255 LOCAL_ADDITIONAL_DEPENDENCIES := art/build/Android.common_build.mk 256 LOCAL_ADDITIONAL_DEPENDENCIES += $(LOCAL_PATH)/Android.mk 257 ifeq ($$(art_target_or_host),target) 258 LOCAL_SHARED_LIBRARIES += libcutils libvixl 259 include $(BUILD_SHARED_LIBRARY) 260 else # host 261 LOCAL_STATIC_LIBRARIES += libcutils libvixl 262 LOCAL_MULTILIB := both 263 include $(BUILD_HOST_SHARED_LIBRARY) 264 endif 265 266 ifeq ($$(art_target_or_host),target) 267 ifeq ($$(art_ndebug_or_debug),debug) 268 $(TARGET_OUT_EXECUTABLES)/dex2oatd: $$(LOCAL_INSTALLED_MODULE) 269 else 270 $(TARGET_OUT_EXECUTABLES)/dex2oat: $$(LOCAL_INSTALLED_MODULE) 271 endif 272 else # host 273 ifeq ($$(art_ndebug_or_debug),debug) 274 $(HOST_OUT_EXECUTABLES)/dex2oatd: $$(LOCAL_INSTALLED_MODULE) 275 else 276 $(HOST_OUT_EXECUTABLES)/dex2oat: $$(LOCAL_INSTALLED_MODULE) 277 endif 278 endif 279 280endef 281 282# We always build dex2oat and dependencies, even if the host build is otherwise disabled, since they are used to cross compile for the target. 283ifeq ($(ART_BUILD_NDEBUG),true) 284 $(eval $(call build-libart-compiler,host,ndebug)) 285endif 286ifeq ($(ART_BUILD_DEBUG),true) 287 $(eval $(call build-libart-compiler,host,debug)) 288endif 289ifeq ($(ART_BUILD_TARGET_NDEBUG),true) 290 $(eval $(call build-libart-compiler,target,ndebug)) 291endif 292ifeq ($(ART_BUILD_TARGET_DEBUG),true) 293 $(eval $(call build-libart-compiler,target,debug)) 294endif 295 296# Rule to build /system/lib/libcompiler_rt.a 297# Usually static libraries are not installed on the device. 298ifeq ($(ART_USE_PORTABLE_COMPILER),true) 299ifeq ($(ART_BUILD_TARGET),true) 300# TODO: Move to external/compiler_rt 301$(eval $(call copy-one-file, $(call intermediates-dir-for,STATIC_LIBRARIES,libcompiler_rt,,)/libcompiler_rt.a, $(TARGET_OUT_SHARED_LIBRARIES)/libcompiler_rt.a)) 302ifdef TARGET_2ND_ARCH 303$(eval $(call copy-one-file, $(call intermediates-dir-for,STATIC_LIBRARIES,libcompiler_rt,,,t)/libcompiler_rt.a, $(2ND_TARGET_OUT_SHARED_LIBRARIES)/libcompiler_rt.a)) 304endif 305 306$(DEX2OAT): $(TARGET_OUT_SHARED_LIBRARIES)/libcompiler_rt.a 307 308endif 309endif 310