Allow optimizing and trace tests to be not run.

Make it so that optimizing and trace tests can be chosen to be not run.
mm -j32 test-art
will run all optimizing and trace tests.
mm -j32 test-art ART_TEST_FULL=false
will not run optimizing and trace tests.
mm -j32 test-art ART_TEST_FULL=false ART_TEST_OPTIMIZING=true
will not run trace tests but will run optimizing tests.

Change-Id: I9c04d9489f08fb837da5561d9496c97aee7c4a4a
diff --git a/build/Android.common_test.mk b/build/Android.common_test.mk
index 470ddfd..86ef35e 100644
--- a/build/Android.common_test.mk
+++ b/build/Android.common_test.mk
@@ -33,6 +33,15 @@
 # Keep going after encountering a test failure?
 ART_TEST_KEEP_GOING ?= false
 
+# Do you want all tests, even those that are time consuming?
+ART_TEST_FULL ?= true
+
+# Do you want optimizing compiler tests run?
+ART_TEST_OPTIMIZING ?= $(ART_TEST_FULL)
+
+# Do you want tracing tests run?
+ART_TEST_TRACE ?= $(ART_TEST_FULL)
+
 # Define the command run on test failure. $(1) is the name of the test. Executed by the shell.
 define ART_TEST_FAILED
   ( [ -f $(ART_HOST_TEST_DIR)/skipped/$(1) ] || \
diff --git a/test/Android.oat.mk b/test/Android.oat.mk
index 2b142db..21f1102 100644
--- a/test/Android.oat.mk
+++ b/test/Android.oat.mk
@@ -116,8 +116,14 @@
   ART_TEST_TARGET_OAT_DEFAULT_$(1)_RULES += $$(default_test_rule)
 
   optimizing_test_rule := test-art-target-oat-optimizing-$(1)$($(2)ART_PHONY_TEST_TARGET_SUFFIX)
-  $(call define-test-art-oat-rule-target,$(1),$(2),$$(optimizing_test_rule), \
-    -Xcompiler-option --compiler-backend=Optimizing)
+  ifeq ($$(ART_TEST_OPTIMIZING),true)
+    $(call define-test-art-oat-rule-target,$(1),$(2),$$(optimizing_test_rule), \
+      -Xcompiler-option --compiler-backend=Optimizing)
+  else
+    .PHONY: $$(optimizing_test_rule)
+$$(optimizing_test_rule):
+
+  endif
 
   ART_TEST_TARGET_OAT_OPTIMIZING$$($(2)ART_PHONY_TEST_TARGET_SUFFIX)_RULES += $$(optimizing_test_rule)
   ART_TEST_TARGET_OAT_OPTIMIZING_RULES += $$(optimizing_test_rule)
@@ -231,7 +237,13 @@
 
   # Create a rule to run the host oat test with the optimizing compiler.
   optimizing_test_rule := test-art-host-oat-optimizing-$(1)$$($(2)ART_PHONY_TEST_HOST_SUFFIX)
-  $(call define-test-art-oat-rule-host,$(1),$(2),$$(optimizing_test_rule),--compiler-backend=Optimizing,)
+  ifeq ($$(ART_TEST_OPTIMIZING),true)
+    $(call define-test-art-oat-rule-host,$(1),$(2),$$(optimizing_test_rule),--compiler-backend=Optimizing,)
+  else
+    .PHONY: $$(optimizing_test_rule)
+$$(optimizing_test_rule):
+
+  endif
 
   ART_TEST_HOST_OAT_OPTIMIZING$$($(2)ART_PHONY_TEST_HOST_SUFFIX)_RULES += $$(optimizing_test_rule)
   ART_TEST_HOST_OAT_OPTIMIZING_RULES += $$(optimizing_test_rule)
diff --git a/test/Android.run-test.mk b/test/Android.run-test.mk
index 78312d1..80ffcbb 100644
--- a/test/Android.run-test.mk
+++ b/test/Android.run-test.mk
@@ -169,6 +169,7 @@
   run_test_rule_name := test-art-$(2)-run-test-$(3)-$(1)$(4)
   uc_host_or_target :=
   prereq_rule :=
+  skip_test := false
   ifeq ($(2),host)
     uc_host_or_target := HOST
     run_test_options += --host
@@ -185,6 +186,9 @@
   ifeq ($(3),optimizing)
     uc_compiler := OPTIMIZING
     run_test_options += -Xcompiler-option --compiler-backend=Optimizing
+    ifneq ($$(ART_TEST_OPTIMIZING),true)
+      skip_test := true
+    endif
   else
     ifeq ($(3),interpreter)
       uc_compiler := INTERPRETER
@@ -207,13 +211,17 @@
   ifeq ($(5),trace)
     run_test_options += --trace
     run_test_rule_name := test-art-$(2)-run-test-trace-$(3)-$(1)$(4)
+    ifneq ($$(ART_TEST_TRACE),true)
+      skip_test := true
+    endif
   else
     ifneq (,$(5))
       $$(error found $(5) expected undefined or -trace)
     endif
   endif
-  run_test_options := --output-path $(ART_HOST_TEST_DIR)/run-test-output/$$(run_test_rule_name) \
-    $$(run_test_options)
+  ifeq ($$(skip_test),false)
+    run_test_options := --output-path $(ART_HOST_TEST_DIR)/run-test-output/$$(run_test_rule_name) \
+      $$(run_test_options)
 $$(run_test_rule_name): PRIVATE_RUN_TEST_OPTIONS := $$(run_test_options)
 .PHONY: $$(run_test_rule_name)
 $$(run_test_rule_name): $(DX) $(HOST_OUT_EXECUTABLES)/jasmin $$(prereq_rule)
@@ -224,6 +232,10 @@
 	$$(hide) (echo $(MAKECMDGOALS) | grep -q $$@ && \
 	  echo "run-test run as top-level target, removing test directory $(ART_HOST_TEST_DIR)" && \
 	  rm -r $(ART_HOST_TEST_DIR)) || true
+  else
+    .PHONY: $$(run_test_rule_name)
+$$(run_test_rule_name):
+  endif
 
   ART_TEST_$$(uc_host_or_target)_RUN_TEST_$$(uc_compiler)$(4)_RULES += $$(run_test_rule_name)
   ART_TEST_$$(uc_host_or_target)_RUN_TEST_$$(uc_compiler)_RULES += $$(run_test_rule_name)
@@ -234,6 +246,7 @@
   ART_TEST_$$(uc_host_or_target)_RUN_TEST_ALL$(4)_RULES += $$(run_test_rule_name)
 
   # Clear locally defined variables.
+  skip_test :=
   run_test_options :=
   run_test_rule_name :=
   uc_host_or_target :=
@@ -273,10 +286,9 @@
   $$(eval $$(call define-test-art-run-test,$(1),$(2),default,$$(ART_PHONY_TEST_$$(group_uc_host_or_target)_SUFFIX),))
   $$(eval $$(call define-test-art-run-test,$(1),$(2),interpreter,$$(ART_PHONY_TEST_$$(group_uc_host_or_target)_SUFFIX),))
   $$(eval $$(call define-test-art-run-test,$(1),$(2),optimizing,$$(ART_PHONY_TEST_$$(group_uc_host_or_target)_SUFFIX),))
-  ifeq ($(2),host)
-    # For now just test tracing on the host with default.
-    $$(eval $$(call define-test-art-run-test,$(1),$(2),default,$$(ART_PHONY_TEST_$$(group_uc_host_or_target)_SUFFIX),trace))
-  endif
+  $$(eval $$(call define-test-art-run-test,$(1),$(2),default,$$(ART_PHONY_TEST_$$(group_uc_host_or_target)_SUFFIX),trace))
+  $$(eval $$(call define-test-art-run-test,$(1),$(2),interpreter,$$(ART_PHONY_TEST_$$(group_uc_host_or_target)_SUFFIX),trace))
+  $$(eval $$(call define-test-art-run-test,$(1),$(2),optimizing,$$(ART_PHONY_TEST_$$(group_uc_host_or_target)_SUFFIX),trace))
   do_second := false
   ifeq ($(2),host)
     ifneq ($$(HOST_PREFER_32_BIT),true)
@@ -291,10 +303,9 @@
     $$(eval $$(call define-test-art-run-test,$(1),$(2),default,$$(2ND_ART_PHONY_TEST_$$(group_uc_host_or_target)_SUFFIX),))
     $$(eval $$(call define-test-art-run-test,$(1),$(2),interpreter,$$(2ND_ART_PHONY_TEST_$$(group_uc_host_or_target)_SUFFIX),))
     $$(eval $$(call define-test-art-run-test,$(1),$(2),optimizing,$$(2ND_ART_PHONY_TEST_$$(group_uc_host_or_target)_SUFFIX),))
-    ifeq ($(2),host)
-      # For now just test tracing on the host with default.
-      $$(eval $$(call define-test-art-run-test,$(1),$(2),default,$$(2ND_ART_PHONY_TEST_$$(group_uc_host_or_target)_SUFFIX),trace))
-    endif
+    $$(eval $$(call define-test-art-run-test,$(1),$(2),default,$$(2ND_ART_PHONY_TEST_$$(group_uc_host_or_target)_SUFFIX),trace))
+    $$(eval $$(call define-test-art-run-test,$(1),$(2),interpreter,$$(2ND_ART_PHONY_TEST_$$(group_uc_host_or_target)_SUFFIX),trace))
+    $$(eval $$(call define-test-art-run-test,$(1),$(2),optimizing,$$(2ND_ART_PHONY_TEST_$$(group_uc_host_or_target)_SUFFIX),trace))
   endif
 
   $$(eval $$(call define-test-art-run-test-group-rule,test-art-$(2)-run-test-default-$(1), \