Add build rules for statically linked oatdump on host.

Also extend oatdump_test to exercise oatdump(d)s.

Test: ART_BUILD_HOST_STATIC=true m test-art-host-gtest-oatdump_test
Bug: 29530992
Change-Id: I6eb6c96f385832733d18d0400abd9974a6d8e45c
diff --git a/disassembler/Android.mk b/disassembler/Android.mk
index db327fc..630f3e4 100644
--- a/disassembler/Android.mk
+++ b/disassembler/Android.mk
@@ -27,6 +27,7 @@
 
 # $(1): target or host
 # $(2): ndebug or debug
+# $(3): static or shared (static is only valid for host)
 define build-libart-disassembler
   ifneq ($(1),target)
     ifneq ($(1),host)
@@ -38,9 +39,19 @@
       $$(error expected ndebug or debug for argument 2, received $(2))
     endif
   endif
+  ifeq ($(3),static)
+    ifneq ($(1),host)
+      $$(error received static for argument 3, but argument 1 is not host)
+    endif
+  else
+    ifneq ($(3),shared)
+      $$(error expected static or shared for argument 3, received $(3))
+    endif
+  endif
 
   art_target_or_host := $(1)
   art_ndebug_or_debug := $(2)
+  art_static_or_shared := $(3)
 
   include $(CLEAR_VARS)
   ifeq ($$(art_target_or_host),host)
@@ -54,7 +65,11 @@
   endif
 
   LOCAL_MODULE_TAGS := optional
-  LOCAL_MODULE_CLASS := SHARED_LIBRARIES
+  ifeq ($$(art_static_or_shared),static)
+    LOCAL_MODULE_CLASS := STATIC_LIBRARIES
+  else # shared
+    LOCAL_MODULE_CLASS := SHARED_LIBRARIES
+  endif
 
   LOCAL_SRC_FILES := $$(LIBART_DISASSEMBLER_SRC_FILES)
 
@@ -74,11 +89,20 @@
     endif
   endif
 
-  LOCAL_SHARED_LIBRARIES += liblog
-  ifeq ($$(art_ndebug_or_debug),debug)
-    LOCAL_SHARED_LIBRARIES += libartd
-  else
-    LOCAL_SHARED_LIBRARIES += libart
+  ifeq ($$(art_static_or_shared),static)
+    LOCAL_STATIC_LIBRARIES += liblog
+    ifeq ($$(art_ndebug_or_debug),debug)
+      LOCAL_STATIC_LIBRARIES += libartd
+    else
+      LOCAL_STATIC_LIBRARIES += libart
+    endif
+  else # shared
+    LOCAL_SHARED_LIBRARIES += liblog
+    ifeq ($$(art_ndebug_or_debug),debug)
+      LOCAL_SHARED_LIBRARIES += libartd
+    else
+      LOCAL_SHARED_LIBRARIES += libart
+    endif
   endif
 
   LOCAL_C_INCLUDES += $(ART_C_INCLUDES) art/runtime
@@ -89,28 +113,53 @@
   LOCAL_ADDITIONAL_DEPENDENCIES += $(LOCAL_PATH)/Android.mk
   LOCAL_NATIVE_COVERAGE := $(ART_COVERAGE)
   # For disassembler_arm64.
-  ifeq ($$(art_ndebug_or_debug),debug)
-    LOCAL_SHARED_LIBRARIES += libvixld-arm64
-  else
-    LOCAL_SHARED_LIBRARIES += libvixl-arm64
+  ifeq ($$(art_static_or_shared),static)
+    ifeq ($$(art_ndebug_or_debug),debug)
+      LOCAL_STATIC_LIBRARIES += libvixld-arm64
+    else
+      LOCAL_STATIC_LIBRARIES += libvixl-arm64
+    endif
+    ifeq ($$(art_target_or_host),target)
+      $$(error libart-disassembler static builds for target are not supported)
+    else # host
+      include $(BUILD_HOST_STATIC_LIBRARY)
+    endif
+  else # shared
+    ifeq ($$(art_ndebug_or_debug),debug)
+      LOCAL_SHARED_LIBRARIES += libvixld-arm64
+    else
+      LOCAL_SHARED_LIBRARIES += libvixl-arm64
+    endif
+    ifeq ($$(art_target_or_host),target)
+      include $(BUILD_SHARED_LIBRARY)
+    else # host
+      include $(BUILD_HOST_SHARED_LIBRARY)
+    endif
   endif
-  ifeq ($$(art_target_or_host),target)
-    include $(BUILD_SHARED_LIBRARY)
-  else # host
-    include $(BUILD_HOST_SHARED_LIBRARY)
-  endif
+
+  # Clear out local variables now that we're done with them.
+  art_target_or_host :=
+  art_ndebug_or_debug :=
+  art_static_or_shared :=
 endef
 
 ifeq ($(ART_BUILD_TARGET_NDEBUG),true)
-  $(eval $(call build-libart-disassembler,target,ndebug))
+  $(eval $(call build-libart-disassembler,target,ndebug,shared))
 endif
 ifeq ($(ART_BUILD_TARGET_DEBUG),true)
-  $(eval $(call build-libart-disassembler,target,debug))
+  $(eval $(call build-libart-disassembler,target,debug,shared))
 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.
+# 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_HOST_NDEBUG),true)
-  $(eval $(call build-libart-disassembler,host,ndebug))
+  $(eval $(call build-libart-disassembler,host,ndebug,shared))
+  ifeq ($(ART_BUILD_HOST_STATIC),true)
+    $(eval $(call build-libart-disassembler,host,ndebug,static))
+  endif
 endif
 ifeq ($(ART_BUILD_HOST_DEBUG),true)
-  $(eval $(call build-libart-disassembler,host,debug))
+  $(eval $(call build-libart-disassembler,host,debug,shared))
+  ifeq ($(ART_BUILD_HOST_STATIC),true)
+    $(eval $(call build-libart-disassembler,host,debug,static))
+  endif
 endif