libart-compiler cleanup

- Move compile-time code to src/compiler and libart-compiler
  OatWriter, ImageWriter, ElfWriter, ElfFixup, ElfStripper, stub generation
- Move ClassReference and MethodReference to remove MethodVerifier dependency on CompilerDriver
- Move runtime_support_llvm.cc out of src/compiler and next to runtime_support.cc
- Change dex2oat and gtests to directly depend on libart-compiler
- Move non-common definitions from Android.common.mk to more specific makefiles
- Add LOCAL_ADDITIONAL_DEPENDENCIES on appropriate makefiles

Change-Id: I897027e69945914128f21f317a92caf9255bc600
diff --git a/build/Android.common.mk b/build/Android.common.mk
index 33c5ac6..671ce5c 100644
--- a/build/Android.common.mk
+++ b/build/Android.common.mk
@@ -158,340 +158,6 @@
 PARALLEL_ART_COMPILE_JOBS := -j8
 endif
 
-DEX2OAT_SRC_FILES := \
-	src/dex2oat.cc
-
-OATDUMP_SRC_FILES := \
-	src/oatdump.cc
-
-LIBART_COMMON_SRC_FILES := \
-	src/atomic.cc.arm \
-	src/barrier.cc \
-	src/base/logging.cc \
-	src/base/mutex.cc \
-	src/base/stringpiece.cc \
-	src/base/stringprintf.cc \
-	src/base/timing_logger.cc \
-	src/base/unix_file/fd_file.cc \
-	src/base/unix_file/mapped_file.cc \
-	src/base/unix_file/null_file.cc \
-	src/base/unix_file/random_access_file_utils.cc \
-	src/base/unix_file/string_file.cc \
-	src/check_jni.cc \
-	src/class_linker.cc \
-	src/common_throws.cc \
-	src/compiled_method.cc \
-	src/compiler/driver/compiler_driver.cc \
-	src/compiler/llvm/runtime_support_llvm.cc \
-        src/compiler/stubs/portable/stubs.cc \
-        src/compiler/stubs/quick/stubs.cc \
-	src/debugger.cc \
-	src/dex_file.cc \
-	src/dex_file_verifier.cc \
-	src/dex_instruction.cc \
-	src/disassembler.cc \
-	src/disassembler_arm.cc \
-	src/disassembler_mips.cc \
-	src/disassembler_x86.cc \
-	src/elf_file.cc \
-	src/file_output_stream.cc \
-	src/gc/allocator/dlmalloc.cc \
-	src/gc/accounting/card_table.cc \
-	src/gc/accounting/heap_bitmap.cc \
-	src/gc/accounting/mod_union_table.cc \
-	src/gc/accounting/space_bitmap.cc \
-	src/gc/collector/garbage_collector.cc \
-	src/gc/collector/mark_sweep.cc \
-	src/gc/collector/partial_mark_sweep.cc \
-	src/gc/collector/sticky_mark_sweep.cc \
-	src/gc/heap.cc \
-	src/gc/space/dlmalloc_space.cc \
-	src/gc/space/image_space.cc \
-	src/gc/space/large_object_space.cc \
-	src/gc/space/space.cc \
-	src/hprof/hprof.cc \
-	src/image.cc \
-	src/image_writer.cc \
-	src/indirect_reference_table.cc \
-	src/instrumentation.cc \
-	src/intern_table.cc \
-	src/interpreter/interpreter.cc \
-	src/jdwp/jdwp_event.cc \
-	src/jdwp/jdwp_expand_buf.cc \
-	src/jdwp/jdwp_handler.cc \
-	src/jdwp/jdwp_main.cc \
-	src/jdwp/jdwp_request.cc \
-	src/jdwp/jdwp_socket.cc \
-	src/jdwp/object_registry.cc \
-	src/jni_internal.cc \
-	src/jobject_comparator.cc \
-	src/locks.cc \
-	src/mem_map.cc \
-	src/memory_region.cc \
-	src/mirror/abstract_method.cc \
-	src/mirror/array.cc \
-	src/mirror/class.cc \
-	src/mirror/dex_cache.cc \
-	src/mirror/field.cc \
-	src/mirror/object.cc \
-	src/mirror/stack_trace_element.cc \
-	src/mirror/string.cc \
-	src/mirror/throwable.cc \
-	src/monitor.cc \
-	src/native/dalvik_system_DexFile.cc \
-	src/native/dalvik_system_VMDebug.cc \
-	src/native/dalvik_system_VMRuntime.cc \
-	src/native/dalvik_system_VMStack.cc \
-	src/native/dalvik_system_Zygote.cc \
-	src/native/java_lang_Class.cc \
-	src/native/java_lang_Object.cc \
-	src/native/java_lang_Runtime.cc \
-	src/native/java_lang_String.cc \
-	src/native/java_lang_System.cc \
-	src/native/java_lang_Thread.cc \
-	src/native/java_lang_Throwable.cc \
-	src/native/java_lang_VMClassLoader.cc \
-	src/native/java_lang_reflect_Array.cc \
-	src/native/java_lang_reflect_Constructor.cc \
-	src/native/java_lang_reflect_Field.cc \
-	src/native/java_lang_reflect_Method.cc \
-	src/native/java_lang_reflect_Proxy.cc \
-	src/native/java_util_concurrent_atomic_AtomicLong.cc \
-	src/native/org_apache_harmony_dalvik_ddmc_DdmServer.cc \
-	src/native/org_apache_harmony_dalvik_ddmc_DdmVmInternal.cc \
-	src/native/sun_misc_Unsafe.cc \
-	src/oat.cc \
-	src/oat/utils/arm/assembler_arm.cc \
-	src/oat/utils/arm/managed_register_arm.cc \
-	src/oat/utils/assembler.cc \
-	src/oat/utils/mips/assembler_mips.cc \
-	src/oat/utils/mips/managed_register_mips.cc \
-	src/oat/utils/x86/assembler_x86.cc \
-	src/oat/utils/x86/managed_register_x86.cc \
-	src/oat_file.cc \
-	src/oat_writer.cc \
-	src/offsets.cc \
-	src/os_linux.cc \
-	src/primitive.cc \
-	src/reference_table.cc \
-	src/reflection.cc \
-	src/runtime.cc \
-	src/runtime_support.cc \
-	src/signal_catcher.cc \
-	src/stack.cc \
-	src/thread.cc \
-	src/thread_list.cc \
-	src/thread_pool.cc \
-	src/throw_location.cc \
-	src/trace.cc \
-	src/utf.cc \
-	src/utils.cc \
-	src/vector_output_stream.cc \
-	src/verifier/dex_gc_map.cc \
-	src/verifier/instruction_flags.cc \
-	src/verifier/method_verifier.cc \
-	src/verifier/reg_type.cc \
-	src/verifier/reg_type_cache.cc \
-	src/verifier/register_line.cc \
-	src/well_known_classes.cc \
-	src/zip_archive.cc
-
-LIBART_COMMON_SRC_FILES += \
-	src/oat/runtime/context.cc \
-	src/oat/runtime/support_alloc.cc \
-	src/oat/runtime/support_cast.cc \
-	src/oat/runtime/support_deoptimize.cc \
-	src/oat/runtime/support_dexcache.cc \
-	src/oat/runtime/support_field.cc \
-	src/oat/runtime/support_fillarray.cc \
-	src/oat/runtime/support_instrumentation.cc \
-	src/oat/runtime/support_invoke.cc \
-	src/oat/runtime/support_jni.cc \
-	src/oat/runtime/support_locks.cc \
-	src/oat/runtime/support_math.cc \
-	src/oat/runtime/support_proxy.cc \
-	src/oat/runtime/support_stubs.cc \
-	src/oat/runtime/support_thread.cc \
-	src/oat/runtime/support_throw.cc \
-	src/oat/runtime/support_interpreter.cc
-
-ifeq ($(ART_SEA_IR_MODE),true)
-LIBART_COMMON_SRC_FILES += \
-	src/compiler/sea_ir/sea.cc
-endif
-
-LIBART_TARGET_SRC_FILES := \
-	$(LIBART_COMMON_SRC_FILES) \
-	src/base/logging_android.cc \
-	src/jdwp/jdwp_adb.cc \
-	src/monitor_android.cc \
-	src/runtime_android.cc \
-	src/thread_android.cc
-
-ifeq ($(TARGET_ARCH),arm)
-LIBART_TARGET_SRC_FILES += \
-	src/oat/runtime/arm/context_arm.cc.arm \
-	src/oat/runtime/arm/oat_support_entrypoints_arm.cc \
-	src/oat/runtime/arm/runtime_support_arm.S
-else # TARGET_ARCH != arm
-ifeq ($(TARGET_ARCH),x86)
-LIBART_TARGET_SRC_FILES += \
-	src/oat/runtime/x86/context_x86.cc \
-	src/oat/runtime/x86/oat_support_entrypoints_x86.cc \
-	src/oat/runtime/x86/runtime_support_x86.S
-else # TARGET_ARCH != x86
-ifeq ($(TARGET_ARCH),mips)
-LIBART_TARGET_SRC_FILES += \
-	src/oat/runtime/mips/context_mips.cc \
-	src/oat/runtime/mips/oat_support_entrypoints_mips.cc \
-	src/oat/runtime/mips/runtime_support_mips.S
-else # TARGET_ARCH != mips
-$(error unsupported TARGET_ARCH=$(TARGET_ARCH))
-endif # TARGET_ARCH != mips
-endif # TARGET_ARCH != x86
-endif # TARGET_ARCH != arm
-
-ifeq ($(TARGET_ARCH),arm)
-LIBART_TARGET_SRC_FILES += src/thread_arm.cc
-else # TARGET_ARCH != arm
-ifeq ($(TARGET_ARCH),x86)
-LIBART_TARGET_SRC_FILES += src/thread_x86.cc
-else # TARGET_ARCH != x86
-ifeq ($(TARGET_ARCH),mips)
-LIBART_TARGET_SRC_FILES += src/thread_mips.cc
-else # TARGET_ARCH != mips
-$(error unsupported TARGET_ARCH=$(TARGET_ARCH))
-endif # TARGET_ARCH != mips
-endif # TARGET_ARCH != x86
-endif # TARGET_ARCH != arm
-
-LIBART_HOST_SRC_FILES := \
-	$(LIBART_COMMON_SRC_FILES) \
-	src/base/logging_linux.cc \
-	src/monitor_linux.cc \
-	src/runtime_linux.cc \
-	src/thread_linux.cc
-
-ifeq ($(HOST_ARCH),x86)
-LIBART_HOST_SRC_FILES += \
-	src/oat/runtime/x86/context_x86.cc \
-	src/oat/runtime/x86/oat_support_entrypoints_x86.cc \
-	src/oat/runtime/x86/runtime_support_x86.S
-else # HOST_ARCH != x86
-$(error unsupported HOST_ARCH=$(HOST_ARCH))
-endif # HOST_ARCH != x86
-
-ifeq ($(HOST_ARCH),x86)
-LIBART_HOST_SRC_FILES += src/thread_x86.cc
-else # HOST_ARCH != x86
-$(error unsupported HOST_ARCH=$(HOST_ARCH))
-endif # HOST_ARCH != x86
-
-
-LIBART_ENUM_OPERATOR_OUT_HEADER_FILES := \
-	src/base/mutex.h \
-	src/compiler/dex/compiler_enums.h \
-	src/dex_file.h \
-	src/dex_instruction.h \
-	src/gc/collector/gc_type.h \
-	src/gc/space/space.h \
-	src/gc/heap.h \
-	src/indirect_reference_table.h \
-	src/instruction_set.h \
-	src/invoke_type.h \
-	src/jdwp/jdwp.h \
-	src/jdwp/jdwp_constants.h \
-	src/locks.h \
-	src/mirror/class.h \
-	src/thread.h \
-	src/thread_state.h \
-	src/verifier/method_verifier.h
-
-LIBARTTEST_COMMON_SRC_FILES := \
-	test/ReferenceMap/stack_walk_refmap_jni.cc \
-	test/StackWalk/stack_walk_jni.cc
-
-TEST_COMMON_SRC_FILES := \
-	src/barrier_test.cc \
-	src/base/histogram_test.cc \
-	src/base/mutex_test.cc \
-	src/base/unix_file/fd_file_test.cc \
-	src/base/unix_file/mapped_file_test.cc \
-	src/base/unix_file/null_file_test.cc \
-	src/base/unix_file/random_access_file_utils_test.cc \
-	src/base/unix_file/string_file_test.cc \
-	src/class_linker_test.cc \
-	src/compiler/driver/compiler_driver_test.cc \
-	src/compiler/jni/jni_compiler_test.cc \
-	src/dex_file_test.cc \
-	src/dex_instruction_visitor_test.cc \
-	src/dex_method_iterator_test.cc \
-	src/elf_writer_test.cc \
-	src/exception_test.cc \
-	src/gc/accounting/space_bitmap_test.cc \
-	src/gc/heap_test.cc \
-	src/gc/space/space_test.cc \
-	src/gtest_test.cc \
-	src/image_test.cc \
-	src/indenter_test.cc \
-	src/indirect_reference_table_test.cc \
-	src/intern_table_test.cc \
-	src/jni_internal_test.cc \
-	src/mirror/dex_cache_test.cc \
-	src/mirror/object_test.cc \
-	src/oat/utils/arm/managed_register_arm_test.cc \
-	src/oat/utils/x86/managed_register_x86_test.cc \
-	src/oat_test.cc \
-	src/output_stream_test.cc \
-	src/reference_table_test.cc \
-	src/runtime_support_test.cc \
-	src/runtime_test.cc \
-	src/thread_pool_test.cc \
-	src/utils_test.cc \
-	src/verifier/method_verifier_test.cc \
-	src/verifier/reg_type_test.cc \
-	src/zip_archive_test.cc
-
-TEST_TARGET_SRC_FILES := \
-	$(TEST_COMMON_SRC_FILES)
-
-TEST_HOST_SRC_FILES := \
-	$(TEST_COMMON_SRC_FILES) \
-	src/oat/utils/x86/assembler_x86_test.cc
-
-# subdirectories of test/ which are used as inputs for gtests
-TEST_DEX_DIRECTORIES := \
-	AbstractMethod \
-	AllFields \
-	CreateMethodSignature \
-	ExceptionHandle \
-	Interfaces \
-	Main \
-	MyClass \
-	MyClassNatives \
-	Nested \
-	NonStaticLeafMethods \
-	ProtoCompare \
-	ProtoCompare2 \
-	StaticLeafMethods \
-	Statics \
-	StaticsFromCode \
-	XandY
-
-# subdirectories of test/ which are used with test-art-target-oat
-# Declare the simplest tests (Main, HelloWorld) first, the rest are alphabetical
-TEST_OAT_DIRECTORIES := \
-	Main \
-	HelloWorld \
-	\
-	ParallelGC \
-	ReferenceMap \
-	StackWalk \
-	ThreadStress
-
-# TODO: Enable when the StackWalk2 tests are passing
-#	StackWalk2 \
-
 ART_BUILD_TARGET := false
 ART_BUILD_HOST := false
 ART_BUILD_NDEBUG := false
diff --git a/build/Android.executable.mk b/build/Android.executable.mk
index 83a1706..e74645c 100644
--- a/build/Android.executable.mk
+++ b/build/Android.executable.mk
@@ -14,6 +14,12 @@
 # limitations under the License.
 #
 
+DEX2OAT_SRC_FILES := \
+	src/dex2oat.cc
+
+OATDUMP_SRC_FILES := \
+	src/oatdump.cc
+
 ART_HOST_EXECUTABLES :=
 ART_TARGET_EXECUTABLES :=
 
@@ -24,24 +30,26 @@
 
 # $(1): executable ("d" will be appended for debug version)
 # $(2): source
-# $(3): target or host
-# $(4): ndebug or debug
+# $(3): shared libraries
+# $(4): target or host
+# $(5): ndebug or debug
 define build-art-executable
-  ifneq ($(3),target)
-    ifneq ($(3),host)
-      $$(error expected target or host for argument 3, received $(3))
+  ifneq ($(4),target)
+    ifneq ($(4),host)
+      $$(error expected target or host for argument 4, received $(4))
     endif
   endif
-  ifneq ($(4),ndebug)
-    ifneq ($(4),debug)
-      $$(error expected ndebug or debug for argument 4, received $(4))
+  ifneq ($(5),ndebug)
+    ifneq ($(5),debug)
+      $$(error expected ndebug or debug for argument 5, received $(5))
     endif
   endif
 
   art_executable := $(1)
   art_source := $(2)
-  art_target_or_host := $(3)
-  art_ndebug_or_debug := $(4)
+  art_shared_libraries := $(3)
+  art_target_or_host := $(4)
+  art_ndebug_or_debug := $(5)
 
   include $(CLEAR_VARS)
   ifeq ($$(art_target_or_host),target)
@@ -52,7 +60,7 @@
   LOCAL_MODULE_TAGS := optional
   LOCAL_SRC_FILES := $$(art_source)
   LOCAL_C_INCLUDES += $(ART_C_INCLUDES)
-  LOCAL_SHARED_LIBRARIES := libnativehelper
+  LOCAL_SHARED_LIBRARIES := $$(art_shared_libraries) # libnativehelper
 
   ifeq ($$(art_ndebug_or_debug),ndebug)
     LOCAL_MODULE := $$(art_executable)
@@ -89,7 +97,8 @@
     LOCAL_SHARED_LIBRARIES += libstlport
   endif
 
-  LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/build/Android.executable.mk
+  LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/build/Android.common.mk
+  LOCAL_ADDITIONAL_DEPENDENCIES += $(LOCAL_PATH)/build/Android.executable.mk
 
   ifeq ($$(art_target_or_host),target)
     include $(BUILD_EXECUTABLE)
@@ -102,25 +111,25 @@
 endef
 
 ifeq ($(ART_BUILD_TARGET_NDEBUG),true)
-  $(eval $(call build-art-executable,dex2oat,$(DEX2OAT_SRC_FILES),target,ndebug))
-  $(eval $(call build-art-executable,oatdump,$(OATDUMP_SRC_FILES),target,ndebug))
+  $(eval $(call build-art-executable,dex2oat,$(DEX2OAT_SRC_FILES),libart-compiler,target,ndebug))
+  $(eval $(call build-art-executable,oatdump,$(OATDUMP_SRC_FILES),,target,ndebug))
 endif
 ifeq ($(ART_BUILD_TARGET_DEBUG),true)
-  $(eval $(call build-art-executable,dex2oat,$(DEX2OAT_SRC_FILES),target,debug))
-  $(eval $(call build-art-executable,oatdump,$(OATDUMP_SRC_FILES),target,debug))
+  $(eval $(call build-art-executable,dex2oat,$(DEX2OAT_SRC_FILES),libartd-compiler,target,debug))
+  $(eval $(call build-art-executable,oatdump,$(OATDUMP_SRC_FILES),,target,debug))
 endif
 
 # We always build dex2oat and dependencies, even if the host build is otherwise disabled, since they are used to cross compile for the target.
 ifeq ($(ART_BUILD_NDEBUG),true)
-  $(eval $(call build-art-executable,dex2oat,$(DEX2OAT_SRC_FILES),host,ndebug))
+  $(eval $(call build-art-executable,dex2oat,$(DEX2OAT_SRC_FILES),libart-compiler,host,ndebug))
 endif
 ifeq ($(ART_BUILD_NDEBUG),true)
-  $(eval $(call build-art-executable,dex2oat,$(DEX2OAT_SRC_FILES),host,debug))
+  $(eval $(call build-art-executable,dex2oat,$(DEX2OAT_SRC_FILES),libartd-compiler,host,debug))
 endif
 
 ifeq ($(ART_BUILD_HOST_NDEBUG),true)
-  $(eval $(call build-art-executable,oatdump,$(OATDUMP_SRC_FILES),host,ndebug))
+  $(eval $(call build-art-executable,oatdump,$(OATDUMP_SRC_FILES),,host,ndebug))
 endif
 ifeq ($(ART_BUILD_HOST_DEBUG),true)
-  $(eval $(call build-art-executable,oatdump,$(OATDUMP_SRC_FILES),host,debug))
+  $(eval $(call build-art-executable,oatdump,$(OATDUMP_SRC_FILES),,host,debug))
 endif
diff --git a/build/Android.gtest.mk b/build/Android.gtest.mk
index f13c47e..8b65efd 100644
--- a/build/Android.gtest.mk
+++ b/build/Android.gtest.mk
@@ -14,6 +14,54 @@
 # limitations under the License.
 #
 
+TEST_COMMON_SRC_FILES := \
+	src/barrier_test.cc \
+	src/base/histogram_test.cc \
+	src/base/mutex_test.cc \
+	src/base/unix_file/fd_file_test.cc \
+	src/base/unix_file/mapped_file_test.cc \
+	src/base/unix_file/null_file_test.cc \
+	src/base/unix_file/random_access_file_utils_test.cc \
+	src/base/unix_file/string_file_test.cc \
+	src/class_linker_test.cc \
+	src/compiler/driver/compiler_driver_test.cc \
+	src/compiler/elf_writer_test.cc \
+	src/compiler/jni/jni_compiler_test.cc \
+	src/dex_file_test.cc \
+	src/dex_instruction_visitor_test.cc \
+	src/dex_method_iterator_test.cc \
+	src/exception_test.cc \
+	src/gc/accounting/space_bitmap_test.cc \
+	src/gc/heap_test.cc \
+	src/gc/space/space_test.cc \
+	src/gtest_test.cc \
+	src/image_test.cc \
+	src/indenter_test.cc \
+	src/indirect_reference_table_test.cc \
+	src/intern_table_test.cc \
+	src/jni_internal_test.cc \
+	src/mirror/dex_cache_test.cc \
+	src/mirror/object_test.cc \
+	src/oat/utils/arm/managed_register_arm_test.cc \
+	src/oat/utils/x86/managed_register_x86_test.cc \
+	src/oat_test.cc \
+	src/output_stream_test.cc \
+	src/reference_table_test.cc \
+	src/runtime_support_test.cc \
+	src/runtime_test.cc \
+	src/thread_pool_test.cc \
+	src/utils_test.cc \
+	src/verifier/method_verifier_test.cc \
+	src/verifier/reg_type_test.cc \
+	src/zip_archive_test.cc
+
+TEST_TARGET_SRC_FILES := \
+	$(TEST_COMMON_SRC_FILES)
+
+TEST_HOST_SRC_FILES := \
+	$(TEST_COMMON_SRC_FILES) \
+	src/oat/utils/x86/assembler_x86_test.cc
+
 ART_HOST_TEST_EXECUTABLES :=
 ART_TARGET_TEST_EXECUTABLES :=
 ART_HOST_TEST_TARGETS :=
@@ -50,7 +98,9 @@
   endif
   LOCAL_SRC_FILES := $$(art_gtest_filename) src/common_test.cc
   LOCAL_C_INCLUDES += $(ART_C_INCLUDES)
-  LOCAL_SHARED_LIBRARIES := libartd
+  LOCAL_SHARED_LIBRARIES := libartd-compiler libartd
+  LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/build/Android.common.mk
+  LOCAL_ADDITIONAL_DEPENDENCIES += $(LOCAL_PATH)/build/Android.gtest.mk
 
   # Mac OS linker doesn't understand --export-dynamic.
   ifneq ($(HOST_OS)-$$(art_target_or_host),darwin-host)
diff --git a/build/Android.libart-compiler.mk b/build/Android.libart-compiler.mk
index 25e6997..eea7c01 100644
--- a/build/Android.libart-compiler.mk
+++ b/build/Android.libart-compiler.mk
@@ -51,7 +51,7 @@
 	src/compiler/dex/mir_graph.cc \
 	src/compiler/dex/vreg_analysis.cc \
 	src/compiler/dex/ssa_transformation.cc \
-	src/compiler/dex/write_elf.cc \
+	src/compiler/driver/compiler_driver.cc \
 	src/compiler/driver/dex_compilation_unit.cc \
 	src/compiler/jni/portable/jni_compiler.cc \
 	src/compiler/jni/quick/arm/calling_convention_arm.cc \
@@ -70,11 +70,14 @@
 	src/compiler/llvm/runtime_support_builder_arm.cc \
 	src/compiler/llvm/runtime_support_builder_thumb2.cc \
 	src/compiler/llvm/runtime_support_builder_x86.cc \
-	src/compiler/llvm/runtime_support_llvm.cc \
-	src/elf_fixup.cc \
-	src/elf_stripper.cc \
-	src/elf_writer.cc \
-	src/elf_writer_quick.cc
+        src/compiler/stubs/portable/stubs.cc \
+        src/compiler/stubs/quick/stubs.cc \
+	src/compiler/elf_fixup.cc \
+	src/compiler/elf_stripper.cc \
+	src/compiler/elf_writer.cc \
+	src/compiler/elf_writer_quick.cc \
+	src/compiler/image_writer.cc \
+	src/compiler/oat_writer.cc
 
 ifeq ($(ART_SEA_IR_MODE),true)
 LIBART_COMPILER_SRC_FILES += \
@@ -83,7 +86,7 @@
 
 LIBART_COMPILER_CFLAGS :=
 ifeq ($(ART_USE_PORTABLE_COMPILER),true)
-  LIBART_COMPILER_SRC_FILES += src/elf_writer_mclinker.cc
+  LIBART_COMPILER_SRC_FILES += src/compiler/elf_writer_mclinker.cc
   LIBART_COMPILER_CFLAGS += -DART_USE_PORTABLE_COMPILER=1
 endif
 
@@ -161,6 +164,8 @@
   else # host
     LOCAL_LDLIBS := -ldl -lpthread
   endif
+  LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/build/Android.common.mk
+  LOCAL_ADDITIONAL_DEPENDENCIES += $(LOCAL_PATH)/build/Android.libart-compiler.mk
   ifeq ($$(art_target_or_host),target)
     LOCAL_SHARED_LIBRARIES += libcutils
     include $(LLVM_GEN_INTRINSICS_MK)
diff --git a/build/Android.libart.mk b/build/Android.libart.mk
index 74e9b21..c4a06c4 100644
--- a/build/Android.libart.mk
+++ b/build/Android.libart.mk
@@ -14,6 +14,244 @@
 # limitations under the License.
 #
 
+LIBART_COMMON_SRC_FILES := \
+	src/atomic.cc.arm \
+	src/barrier.cc \
+	src/base/logging.cc \
+	src/base/mutex.cc \
+	src/base/stringpiece.cc \
+	src/base/stringprintf.cc \
+	src/base/timing_logger.cc \
+	src/base/unix_file/fd_file.cc \
+	src/base/unix_file/mapped_file.cc \
+	src/base/unix_file/null_file.cc \
+	src/base/unix_file/random_access_file_utils.cc \
+	src/base/unix_file/string_file.cc \
+	src/check_jni.cc \
+	src/class_linker.cc \
+	src/common_throws.cc \
+	src/compiled_method.cc \
+	src/debugger.cc \
+	src/dex_file.cc \
+	src/dex_file_verifier.cc \
+	src/dex_instruction.cc \
+	src/disassembler.cc \
+	src/disassembler_arm.cc \
+	src/disassembler_mips.cc \
+	src/disassembler_x86.cc \
+	src/elf_file.cc \
+	src/file_output_stream.cc \
+	src/gc/allocator/dlmalloc.cc \
+	src/gc/accounting/card_table.cc \
+	src/gc/accounting/heap_bitmap.cc \
+	src/gc/accounting/mod_union_table.cc \
+	src/gc/accounting/space_bitmap.cc \
+	src/gc/collector/garbage_collector.cc \
+	src/gc/collector/mark_sweep.cc \
+	src/gc/collector/partial_mark_sweep.cc \
+	src/gc/collector/sticky_mark_sweep.cc \
+	src/gc/heap.cc \
+	src/gc/space/dlmalloc_space.cc \
+	src/gc/space/image_space.cc \
+	src/gc/space/large_object_space.cc \
+	src/gc/space/space.cc \
+	src/hprof/hprof.cc \
+	src/image.cc \
+	src/indirect_reference_table.cc \
+	src/instrumentation.cc \
+	src/intern_table.cc \
+	src/interpreter/interpreter.cc \
+	src/jdwp/jdwp_event.cc \
+	src/jdwp/jdwp_expand_buf.cc \
+	src/jdwp/jdwp_handler.cc \
+	src/jdwp/jdwp_main.cc \
+	src/jdwp/jdwp_request.cc \
+	src/jdwp/jdwp_socket.cc \
+	src/jdwp/object_registry.cc \
+	src/jni_internal.cc \
+	src/jobject_comparator.cc \
+	src/locks.cc \
+	src/mem_map.cc \
+	src/memory_region.cc \
+	src/mirror/abstract_method.cc \
+	src/mirror/array.cc \
+	src/mirror/class.cc \
+	src/mirror/dex_cache.cc \
+	src/mirror/field.cc \
+	src/mirror/object.cc \
+	src/mirror/stack_trace_element.cc \
+	src/mirror/string.cc \
+	src/mirror/throwable.cc \
+	src/monitor.cc \
+	src/native/dalvik_system_DexFile.cc \
+	src/native/dalvik_system_VMDebug.cc \
+	src/native/dalvik_system_VMRuntime.cc \
+	src/native/dalvik_system_VMStack.cc \
+	src/native/dalvik_system_Zygote.cc \
+	src/native/java_lang_Class.cc \
+	src/native/java_lang_Object.cc \
+	src/native/java_lang_Runtime.cc \
+	src/native/java_lang_String.cc \
+	src/native/java_lang_System.cc \
+	src/native/java_lang_Thread.cc \
+	src/native/java_lang_Throwable.cc \
+	src/native/java_lang_VMClassLoader.cc \
+	src/native/java_lang_reflect_Array.cc \
+	src/native/java_lang_reflect_Constructor.cc \
+	src/native/java_lang_reflect_Field.cc \
+	src/native/java_lang_reflect_Method.cc \
+	src/native/java_lang_reflect_Proxy.cc \
+	src/native/java_util_concurrent_atomic_AtomicLong.cc \
+	src/native/org_apache_harmony_dalvik_ddmc_DdmServer.cc \
+	src/native/org_apache_harmony_dalvik_ddmc_DdmVmInternal.cc \
+	src/native/sun_misc_Unsafe.cc \
+	src/oat.cc \
+	src/oat/utils/arm/assembler_arm.cc \
+	src/oat/utils/arm/managed_register_arm.cc \
+	src/oat/utils/assembler.cc \
+	src/oat/utils/mips/assembler_mips.cc \
+	src/oat/utils/mips/managed_register_mips.cc \
+	src/oat/utils/x86/assembler_x86.cc \
+	src/oat/utils/x86/managed_register_x86.cc \
+	src/oat_file.cc \
+	src/offsets.cc \
+	src/os_linux.cc \
+	src/primitive.cc \
+	src/reference_table.cc \
+	src/reflection.cc \
+	src/runtime.cc \
+	src/runtime_support.cc \
+	src/runtime_support_llvm.cc \
+	src/signal_catcher.cc \
+	src/stack.cc \
+	src/thread.cc \
+	src/thread_list.cc \
+	src/thread_pool.cc \
+	src/throw_location.cc \
+	src/trace.cc \
+	src/utf.cc \
+	src/utils.cc \
+	src/vector_output_stream.cc \
+	src/verifier/dex_gc_map.cc \
+	src/verifier/instruction_flags.cc \
+	src/verifier/method_verifier.cc \
+	src/verifier/reg_type.cc \
+	src/verifier/reg_type_cache.cc \
+	src/verifier/register_line.cc \
+	src/well_known_classes.cc \
+	src/zip_archive.cc
+
+LIBART_COMMON_SRC_FILES += \
+	src/oat/runtime/context.cc \
+	src/oat/runtime/support_alloc.cc \
+	src/oat/runtime/support_cast.cc \
+	src/oat/runtime/support_deoptimize.cc \
+	src/oat/runtime/support_dexcache.cc \
+	src/oat/runtime/support_field.cc \
+	src/oat/runtime/support_fillarray.cc \
+	src/oat/runtime/support_instrumentation.cc \
+	src/oat/runtime/support_invoke.cc \
+	src/oat/runtime/support_jni.cc \
+	src/oat/runtime/support_locks.cc \
+	src/oat/runtime/support_math.cc \
+	src/oat/runtime/support_proxy.cc \
+	src/oat/runtime/support_stubs.cc \
+	src/oat/runtime/support_thread.cc \
+	src/oat/runtime/support_throw.cc \
+	src/oat/runtime/support_interpreter.cc
+
+ifeq ($(ART_SEA_IR_MODE),true)
+LIBART_COMMON_SRC_FILES += \
+	src/compiler/sea_ir/sea.cc
+endif
+
+LIBART_TARGET_SRC_FILES := \
+	$(LIBART_COMMON_SRC_FILES) \
+	src/base/logging_android.cc \
+	src/jdwp/jdwp_adb.cc \
+	src/monitor_android.cc \
+	src/runtime_android.cc \
+	src/thread_android.cc
+
+ifeq ($(TARGET_ARCH),arm)
+LIBART_TARGET_SRC_FILES += \
+	src/oat/runtime/arm/context_arm.cc.arm \
+	src/oat/runtime/arm/oat_support_entrypoints_arm.cc \
+	src/oat/runtime/arm/runtime_support_arm.S
+else # TARGET_ARCH != arm
+ifeq ($(TARGET_ARCH),x86)
+LIBART_TARGET_SRC_FILES += \
+	src/oat/runtime/x86/context_x86.cc \
+	src/oat/runtime/x86/oat_support_entrypoints_x86.cc \
+	src/oat/runtime/x86/runtime_support_x86.S
+else # TARGET_ARCH != x86
+ifeq ($(TARGET_ARCH),mips)
+LIBART_TARGET_SRC_FILES += \
+	src/oat/runtime/mips/context_mips.cc \
+	src/oat/runtime/mips/oat_support_entrypoints_mips.cc \
+	src/oat/runtime/mips/runtime_support_mips.S
+else # TARGET_ARCH != mips
+$(error unsupported TARGET_ARCH=$(TARGET_ARCH))
+endif # TARGET_ARCH != mips
+endif # TARGET_ARCH != x86
+endif # TARGET_ARCH != arm
+
+ifeq ($(TARGET_ARCH),arm)
+LIBART_TARGET_SRC_FILES += src/thread_arm.cc
+else # TARGET_ARCH != arm
+ifeq ($(TARGET_ARCH),x86)
+LIBART_TARGET_SRC_FILES += src/thread_x86.cc
+else # TARGET_ARCH != x86
+ifeq ($(TARGET_ARCH),mips)
+LIBART_TARGET_SRC_FILES += src/thread_mips.cc
+else # TARGET_ARCH != mips
+$(error unsupported TARGET_ARCH=$(TARGET_ARCH))
+endif # TARGET_ARCH != mips
+endif # TARGET_ARCH != x86
+endif # TARGET_ARCH != arm
+
+LIBART_HOST_SRC_FILES := \
+	$(LIBART_COMMON_SRC_FILES) \
+	src/base/logging_linux.cc \
+	src/monitor_linux.cc \
+	src/runtime_linux.cc \
+	src/thread_linux.cc
+
+ifeq ($(HOST_ARCH),x86)
+LIBART_HOST_SRC_FILES += \
+	src/oat/runtime/x86/context_x86.cc \
+	src/oat/runtime/x86/oat_support_entrypoints_x86.cc \
+	src/oat/runtime/x86/runtime_support_x86.S
+else # HOST_ARCH != x86
+$(error unsupported HOST_ARCH=$(HOST_ARCH))
+endif # HOST_ARCH != x86
+
+ifeq ($(HOST_ARCH),x86)
+LIBART_HOST_SRC_FILES += src/thread_x86.cc
+else # HOST_ARCH != x86
+$(error unsupported HOST_ARCH=$(HOST_ARCH))
+endif # HOST_ARCH != x86
+
+
+LIBART_ENUM_OPERATOR_OUT_HEADER_FILES := \
+	src/base/mutex.h \
+	src/compiler/dex/compiler_enums.h \
+	src/dex_file.h \
+	src/dex_instruction.h \
+	src/gc/collector/gc_type.h \
+	src/gc/space/space.h \
+	src/gc/heap.h \
+	src/indirect_reference_table.h \
+	src/instruction_set.h \
+	src/invoke_type.h \
+	src/jdwp/jdwp.h \
+	src/jdwp/jdwp_constants.h \
+	src/locks.h \
+	src/mirror/class.h \
+	src/thread.h \
+	src/thread_state.h \
+	src/verifier/method_verifier.h
+
 LIBART_CFLAGS :=
 ifeq ($(ART_USE_PORTABLE_COMPILER),true)
   LIBART_CFLAGS += -DART_USE_PORTABLE_COMPILER=1
@@ -105,6 +343,8 @@
     endif
   endif
   include $(LLVM_GEN_INTRINSICS_MK)
+  LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/build/Android.common.mk
+  LOCAL_ADDITIONAL_DEPENDENCIES += $(LOCAL_PATH)/build/Android.libart.mk
   ifeq ($$(art_target_or_host),target)
     include $(LLVM_DEVICE_BUILD_MK)
     include $(BUILD_SHARED_LIBRARY)
diff --git a/build/Android.libarttest.mk b/build/Android.libarttest.mk
index 50b9a10..64f8368 100644
--- a/build/Android.libarttest.mk
+++ b/build/Android.libarttest.mk
@@ -14,6 +14,10 @@
 # limitations under the License.
 #
 
+LIBARTTEST_COMMON_SRC_FILES := \
+	test/ReferenceMap/stack_walk_refmap_jni.cc \
+	test/StackWalk/stack_walk_jni.cc
+
 # $(1): target or host
 define build-libarttest
   ifneq ($(1),target)
@@ -37,6 +41,8 @@
   LOCAL_SRC_FILES := $(LIBARTTEST_COMMON_SRC_FILES)
   LOCAL_SHARED_LIBRARIES := libartd
   LOCAL_C_INCLUDES += $(ART_C_INCLUDES)
+  LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/build/Android.common.mk
+  LOCAL_ADDITIONAL_DEPENDENCIES += $(LOCAL_PATH)/build/Android.libarttest.mk
   ifeq ($$(art_target_or_host),target)
     LOCAL_CLANG := $(ART_TARGET_CLANG)
     LOCAL_CFLAGS := $(ART_TARGET_CFLAGS) $(ART_TARGET_DEBUG_CFLAGS)
diff --git a/build/Android.oat.mk b/build/Android.oat.mk
index 0e91b43..2471244 100644
--- a/build/Android.oat.mk
+++ b/build/Android.oat.mk
@@ -75,7 +75,9 @@
 include $(CLEAR_VARS)
 LOCAL_MODULE := core.art-host
 LOCAL_MODULE_TAGS := optional
-LOCAL_ADDITIONAL_DEPENDENCIES := $(HOST_CORE_IMG_OUT)
+LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/build/Android.common.mk
+LOCAL_ADDITIONAL_DEPENDENCIES += $(LOCAL_PATH)/build/Android.oat.mk
+LOCAL_ADDITIONAL_DEPENDENCIES += $(HOST_CORE_IMG_OUT)
 include $(BUILD_PHONY_PACKAGE)
 endif
 
@@ -105,6 +107,8 @@
 include $(CLEAR_VARS)
 LOCAL_MODULE := boot.art
 LOCAL_MODULE_TAGS := optional
-LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_BOOT_IMG_OUT) $(TARGET_BOOT_OAT_OUT)
+LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/build/Android.common.mk
+LOCAL_ADDITIONAL_DEPENDENCIES += $(LOCAL_PATH)/build/Android.oat.mk
+LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_BOOT_IMG_OUT) $(TARGET_BOOT_OAT_OUT)
 include $(BUILD_PHONY_PACKAGE)
 endif
diff --git a/build/Android.oattest.mk b/build/Android.oattest.mk
index 36fd0fc..6ee8492 100644
--- a/build/Android.oattest.mk
+++ b/build/Android.oattest.mk
@@ -16,6 +16,39 @@
 
 ########################################################################
 
+# subdirectories of test/ which are used as inputs for gtests
+TEST_DEX_DIRECTORIES := \
+	AbstractMethod \
+	AllFields \
+	CreateMethodSignature \
+	ExceptionHandle \
+	Interfaces \
+	Main \
+	MyClass \
+	MyClassNatives \
+	Nested \
+	NonStaticLeafMethods \
+	ProtoCompare \
+	ProtoCompare2 \
+	StaticLeafMethods \
+	Statics \
+	StaticsFromCode \
+	XandY
+
+# subdirectories of test/ which are used with test-art-target-oat
+# Declare the simplest tests (Main, HelloWorld) first, the rest are alphabetical
+TEST_OAT_DIRECTORIES := \
+	Main \
+	HelloWorld \
+	\
+	ParallelGC \
+	ReferenceMap \
+	StackWalk \
+	ThreadStress
+
+# TODO: Enable when the StackWalk2 tests are passing
+#	StackWalk2 \
+
 ART_TEST_TARGET_DEX_FILES :=
 ART_TEST_HOST_DEX_FILES :=
 
@@ -33,6 +66,8 @@
     LOCAL_MODULE_PATH := $(3)
     LOCAL_DEX_PREOPT_IMAGE := $(TARGET_CORE_IMG_OUT)
     LOCAL_DEX_PREOPT := false
+    LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/build/Android.common.mk
+    LOCAL_ADDITIONAL_DEPENDENCIES += $(LOCAL_PATH)/build/Android.oattest.mk
     include $(BUILD_JAVA_LIBRARY)
     ART_TEST_TARGET_DEX_FILES += $(3)/$$(LOCAL_MODULE).jar
   endif
@@ -45,6 +80,8 @@
     LOCAL_NO_STANDARD_LIBRARIES := true
     LOCAL_DEX_PREOPT_IMAGE := $(HOST_CORE_IMG_OUT)
     LOCAL_BUILD_HOST_DEX := true
+    LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/build/Android.common.mk
+    LOCAL_ADDITIONAL_DEPENDENCIES += $(LOCAL_PATH)/build/Android.oattest.mk
     include $(BUILD_HOST_JAVA_LIBRARY)
     ART_TEST_HOST_DEX_FILES += $$(LOCAL_MODULE_PATH)/$$(LOCAL_MODULE).jar
   endif