Merge "Print results of RSTest after each test"
diff --git a/OWNERS b/OWNERS
index 14efb75..a8b3f44 100644
--- a/OWNERS
+++ b/OWNERS
@@ -1 +1,6 @@
-android-renderscript-dev+review@google.com
+butlermichael@google.com
+dgross@google.com
+ijsung@google.com
+jeanluc@google.com
+miaowang@google.com
+yangni@google.com
diff --git a/cpu_ref/rsCpuIntrinsicBLAS.cpp b/cpu_ref/rsCpuIntrinsicBLAS.cpp
index 4b08634..d60a3b9 100644
--- a/cpu_ref/rsCpuIntrinsicBLAS.cpp
+++ b/cpu_ref/rsCpuIntrinsicBLAS.cpp
@@ -877,6 +877,10 @@
 #endif
 
     // Using gemmlowp to calculate the low precision 8 bit GEMM.
+    // Set MaxNumThreads to 0. The value 0 lets the implementation query
+    // the system to determine the number of hardware threads
+    gemmlowp::eight_bit_int_gemm::SetMaxNumThreads(0);
+
     bool transpose_a = true;
     bool transpose_b = false;
     bool transpose_c = true;
diff --git a/tests/java_api/RSTestForward/21.1.2/Android.mk b/tests/java_api/RSTestForward/21.1.2/Android.mk
new file mode 100644
index 0000000..3e47e88
--- /dev/null
+++ b/tests/java_api/RSTestForward/21.1.2/Android.mk
@@ -0,0 +1,121 @@
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# This file is auto-generated by frameworks/rs/tests/java_api/RSUnitTests/RSUnitTests.py.
+# To change unit tests version, please run the Python script above.
+
+ifneq ($(ENABLE_RSTESTS),)
+
+LOCAL_PATH := $(call my-dir)
+my_rs_unit_tests_path := ../../RSUnitTests/src/com/android/rs/unittest
+
+# RSTestForward for build tool version 21.1.2
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := tests
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-test
+LOCAL_COMPATIBILITY_SUITE := device-tests
+LOCAL_RENDERSCRIPT_TARGET_API := 0
+LOCAL_PACKAGE_NAME := RSTestForward_21_1_2
+my_rs_path := $(TOP)/prebuilts/renderscript/host/linux-x86/21.1.2
+LOCAL_RENDERSCRIPT_CC := $(my_rs_path)/bin/llvm-rs-cc
+LOCAL_RENDERSCRIPT_INCLUDES_OVERRIDE := $(my_rs_path)/include $(my_rs_path)/clang-include
+my_rs_path :=
+LOCAL_SRC_FILES := $(call all-java-files-under,../src)\
+    $(my_rs_unit_tests_path)/UnitTest.java\
+    $(my_rs_unit_tests_path)/UT_alloc.java\
+    $(my_rs_unit_tests_path)/alloc.rs\
+    $(my_rs_unit_tests_path)/UT_array_alloc.java\
+    $(my_rs_unit_tests_path)/array_alloc.rs\
+    $(my_rs_unit_tests_path)/UT_array_init.java\
+    $(my_rs_unit_tests_path)/array_init.rs\
+    $(my_rs_unit_tests_path)/UT_atomic.java\
+    $(my_rs_unit_tests_path)/atomic.rs\
+    $(my_rs_unit_tests_path)/UT_bitfield.java\
+    $(my_rs_unit_tests_path)/bitfield.rs\
+    $(my_rs_unit_tests_path)/UT_bug_char.java\
+    $(my_rs_unit_tests_path)/bug_char.rs\
+    $(my_rs_unit_tests_path)/UT_check_dims.java\
+    $(my_rs_unit_tests_path)/check_dims.rs\
+    $(my_rs_unit_tests_path)/UT_clamp.java\
+    $(my_rs_unit_tests_path)/clamp.rs\
+    $(my_rs_unit_tests_path)/UT_clamp_relaxed.java\
+    $(my_rs_unit_tests_path)/clamp_relaxed.rs\
+    $(my_rs_unit_tests_path)/UT_constant.java\
+    $(my_rs_unit_tests_path)/constant.rs\
+    $(my_rs_unit_tests_path)/UT_convert.java\
+    $(my_rs_unit_tests_path)/convert.rs\
+    $(my_rs_unit_tests_path)/UT_convert_relaxed.java\
+    $(my_rs_unit_tests_path)/convert_relaxed.rs\
+    $(my_rs_unit_tests_path)/UT_copy_test.java\
+    $(my_rs_unit_tests_path)/copy_test.rs\
+    $(my_rs_unit_tests_path)/UT_element.java\
+    $(my_rs_unit_tests_path)/element.rs\
+    $(my_rs_unit_tests_path)/UT_foreach.java\
+    $(my_rs_unit_tests_path)/foreach.rs\
+    $(my_rs_unit_tests_path)/UT_foreach_bounds.java\
+    $(my_rs_unit_tests_path)/foreach_bounds.rs\
+    $(my_rs_unit_tests_path)/UT_foreach_multi.java\
+    $(my_rs_unit_tests_path)/foreach_multi.rs\
+    $(my_rs_unit_tests_path)/UT_fp_mad.java\
+    $(my_rs_unit_tests_path)/fp_mad.rs\
+    $(my_rs_unit_tests_path)/UT_instance.java\
+    $(my_rs_unit_tests_path)/instance.rs\
+    $(my_rs_unit_tests_path)/UT_int4.java\
+    $(my_rs_unit_tests_path)/int4.rs\
+    $(my_rs_unit_tests_path)/UT_kernel.java\
+    $(my_rs_unit_tests_path)/kernel.rs\
+    $(my_rs_unit_tests_path)/UT_kernel_struct.java\
+    $(my_rs_unit_tests_path)/kernel_struct.rs\
+    $(my_rs_unit_tests_path)/UT_math.java\
+    $(my_rs_unit_tests_path)/math.rs\
+    $(my_rs_unit_tests_path)/UT_math_agree.java\
+    $(my_rs_unit_tests_path)/math_agree.rs\
+    $(my_rs_unit_tests_path)/UT_math_conformance.java\
+    $(my_rs_unit_tests_path)/math_conformance.rs\
+    $(my_rs_unit_tests_path)/UT_min.java\
+    $(my_rs_unit_tests_path)/min.rs\
+    $(my_rs_unit_tests_path)/UT_noroot.java\
+    $(my_rs_unit_tests_path)/noroot.rs\
+    $(my_rs_unit_tests_path)/UT_primitives.java\
+    $(my_rs_unit_tests_path)/primitives.rs\
+    $(my_rs_unit_tests_path)/UT_refcount.java\
+    $(my_rs_unit_tests_path)/refcount.rs\
+    $(my_rs_unit_tests_path)/UT_rsdebug.java\
+    $(my_rs_unit_tests_path)/rsdebug.rs\
+    $(my_rs_unit_tests_path)/UT_rstime.java\
+    $(my_rs_unit_tests_path)/rstime.rs\
+    $(my_rs_unit_tests_path)/UT_rstypes.java\
+    $(my_rs_unit_tests_path)/rstypes.rs\
+    $(my_rs_unit_tests_path)/UT_sampler.java\
+    $(my_rs_unit_tests_path)/sampler.rs\
+    $(my_rs_unit_tests_path)/UT_static_globals.java\
+    $(my_rs_unit_tests_path)/static_globals.rs\
+    $(my_rs_unit_tests_path)/UT_struct.java\
+    $(my_rs_unit_tests_path)/struct.rs\
+    $(my_rs_unit_tests_path)/UT_struct_field_simple.java\
+    $(my_rs_unit_tests_path)/struct_field_simple.rs\
+    $(my_rs_unit_tests_path)/UT_unsigned.java\
+    $(my_rs_unit_tests_path)/unsigned.rs\
+    $(my_rs_unit_tests_path)/UT_vector.java\
+    $(my_rs_unit_tests_path)/vector.rs\
+
+include $(BUILD_PACKAGE)
+
+my_rs_unit_tests_path :=
+
+endif
diff --git a/tests/java_api/RSTestForward/AndroidManifest.xml b/tests/java_api/RSTestForward/21.1.2/AndroidManifest.xml
similarity index 84%
copy from tests/java_api/RSTestForward/AndroidManifest.xml
copy to tests/java_api/RSTestForward/21.1.2/AndroidManifest.xml
index e5dd140..715d662 100644
--- a/tests/java_api/RSTestForward/AndroidManifest.xml
+++ b/tests/java_api/RSTestForward/21.1.2/AndroidManifest.xml
@@ -12,9 +12,12 @@
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      See the License for the specific language governing permissions and
      limitations under the License.
+
+     This file is automatically generated by
+     frameworks/rs/tests/java_api/RSUnitTests/RSUnitTests.py.
 -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.android.rs.testforward">
+    package="com.android.rs.testforward21">
     <uses-sdk
         android:minSdkVersion="21"
         android:targetSdkVersion="26" />
@@ -26,6 +29,6 @@
 
     <instrumentation
         android:name="android.support.test.runner.AndroidJUnitRunner"
-        android:targetPackage="com.android.rs.testforward"
+        android:targetPackage="com.android.rs.testforward21"
         android:label="RenderScript Forward Compatibility Tests" />
 </manifest>
diff --git a/tests/java_api/RSTestForward/22.0.1/Android.mk b/tests/java_api/RSTestForward/22.0.1/Android.mk
new file mode 100644
index 0000000..a5f4c1e
--- /dev/null
+++ b/tests/java_api/RSTestForward/22.0.1/Android.mk
@@ -0,0 +1,121 @@
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# This file is auto-generated by frameworks/rs/tests/java_api/RSUnitTests/RSUnitTests.py.
+# To change unit tests version, please run the Python script above.
+
+ifneq ($(ENABLE_RSTESTS),)
+
+LOCAL_PATH := $(call my-dir)
+my_rs_unit_tests_path := ../../RSUnitTests/src/com/android/rs/unittest
+
+# RSTestForward for build tool version 22.0.1
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := tests
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-test
+LOCAL_COMPATIBILITY_SUITE := device-tests
+LOCAL_RENDERSCRIPT_TARGET_API := 0
+LOCAL_PACKAGE_NAME := RSTestForward_22_0_1
+my_rs_path := $(TOP)/prebuilts/renderscript/host/linux-x86/22.0.1
+LOCAL_RENDERSCRIPT_CC := $(my_rs_path)/bin/llvm-rs-cc
+LOCAL_RENDERSCRIPT_INCLUDES_OVERRIDE := $(my_rs_path)/include $(my_rs_path)/clang-include
+my_rs_path :=
+LOCAL_SRC_FILES := $(call all-java-files-under,../src)\
+    $(my_rs_unit_tests_path)/UnitTest.java\
+    $(my_rs_unit_tests_path)/UT_alloc.java\
+    $(my_rs_unit_tests_path)/alloc.rs\
+    $(my_rs_unit_tests_path)/UT_array_alloc.java\
+    $(my_rs_unit_tests_path)/array_alloc.rs\
+    $(my_rs_unit_tests_path)/UT_array_init.java\
+    $(my_rs_unit_tests_path)/array_init.rs\
+    $(my_rs_unit_tests_path)/UT_atomic.java\
+    $(my_rs_unit_tests_path)/atomic.rs\
+    $(my_rs_unit_tests_path)/UT_bitfield.java\
+    $(my_rs_unit_tests_path)/bitfield.rs\
+    $(my_rs_unit_tests_path)/UT_bug_char.java\
+    $(my_rs_unit_tests_path)/bug_char.rs\
+    $(my_rs_unit_tests_path)/UT_check_dims.java\
+    $(my_rs_unit_tests_path)/check_dims.rs\
+    $(my_rs_unit_tests_path)/UT_clamp.java\
+    $(my_rs_unit_tests_path)/clamp.rs\
+    $(my_rs_unit_tests_path)/UT_clamp_relaxed.java\
+    $(my_rs_unit_tests_path)/clamp_relaxed.rs\
+    $(my_rs_unit_tests_path)/UT_constant.java\
+    $(my_rs_unit_tests_path)/constant.rs\
+    $(my_rs_unit_tests_path)/UT_convert.java\
+    $(my_rs_unit_tests_path)/convert.rs\
+    $(my_rs_unit_tests_path)/UT_convert_relaxed.java\
+    $(my_rs_unit_tests_path)/convert_relaxed.rs\
+    $(my_rs_unit_tests_path)/UT_copy_test.java\
+    $(my_rs_unit_tests_path)/copy_test.rs\
+    $(my_rs_unit_tests_path)/UT_element.java\
+    $(my_rs_unit_tests_path)/element.rs\
+    $(my_rs_unit_tests_path)/UT_foreach.java\
+    $(my_rs_unit_tests_path)/foreach.rs\
+    $(my_rs_unit_tests_path)/UT_foreach_bounds.java\
+    $(my_rs_unit_tests_path)/foreach_bounds.rs\
+    $(my_rs_unit_tests_path)/UT_foreach_multi.java\
+    $(my_rs_unit_tests_path)/foreach_multi.rs\
+    $(my_rs_unit_tests_path)/UT_fp_mad.java\
+    $(my_rs_unit_tests_path)/fp_mad.rs\
+    $(my_rs_unit_tests_path)/UT_instance.java\
+    $(my_rs_unit_tests_path)/instance.rs\
+    $(my_rs_unit_tests_path)/UT_int4.java\
+    $(my_rs_unit_tests_path)/int4.rs\
+    $(my_rs_unit_tests_path)/UT_kernel.java\
+    $(my_rs_unit_tests_path)/kernel.rs\
+    $(my_rs_unit_tests_path)/UT_kernel_struct.java\
+    $(my_rs_unit_tests_path)/kernel_struct.rs\
+    $(my_rs_unit_tests_path)/UT_math.java\
+    $(my_rs_unit_tests_path)/math.rs\
+    $(my_rs_unit_tests_path)/UT_math_agree.java\
+    $(my_rs_unit_tests_path)/math_agree.rs\
+    $(my_rs_unit_tests_path)/UT_math_conformance.java\
+    $(my_rs_unit_tests_path)/math_conformance.rs\
+    $(my_rs_unit_tests_path)/UT_min.java\
+    $(my_rs_unit_tests_path)/min.rs\
+    $(my_rs_unit_tests_path)/UT_noroot.java\
+    $(my_rs_unit_tests_path)/noroot.rs\
+    $(my_rs_unit_tests_path)/UT_primitives.java\
+    $(my_rs_unit_tests_path)/primitives.rs\
+    $(my_rs_unit_tests_path)/UT_refcount.java\
+    $(my_rs_unit_tests_path)/refcount.rs\
+    $(my_rs_unit_tests_path)/UT_rsdebug.java\
+    $(my_rs_unit_tests_path)/rsdebug.rs\
+    $(my_rs_unit_tests_path)/UT_rstime.java\
+    $(my_rs_unit_tests_path)/rstime.rs\
+    $(my_rs_unit_tests_path)/UT_rstypes.java\
+    $(my_rs_unit_tests_path)/rstypes.rs\
+    $(my_rs_unit_tests_path)/UT_sampler.java\
+    $(my_rs_unit_tests_path)/sampler.rs\
+    $(my_rs_unit_tests_path)/UT_static_globals.java\
+    $(my_rs_unit_tests_path)/static_globals.rs\
+    $(my_rs_unit_tests_path)/UT_struct.java\
+    $(my_rs_unit_tests_path)/struct.rs\
+    $(my_rs_unit_tests_path)/UT_struct_field_simple.java\
+    $(my_rs_unit_tests_path)/struct_field_simple.rs\
+    $(my_rs_unit_tests_path)/UT_unsigned.java\
+    $(my_rs_unit_tests_path)/unsigned.rs\
+    $(my_rs_unit_tests_path)/UT_vector.java\
+    $(my_rs_unit_tests_path)/vector.rs\
+
+include $(BUILD_PACKAGE)
+
+my_rs_unit_tests_path :=
+
+endif
diff --git a/tests/java_api/RSTestForward/AndroidManifest.xml b/tests/java_api/RSTestForward/22.0.1/AndroidManifest.xml
similarity index 84%
copy from tests/java_api/RSTestForward/AndroidManifest.xml
copy to tests/java_api/RSTestForward/22.0.1/AndroidManifest.xml
index e5dd140..48139c9 100644
--- a/tests/java_api/RSTestForward/AndroidManifest.xml
+++ b/tests/java_api/RSTestForward/22.0.1/AndroidManifest.xml
@@ -12,9 +12,12 @@
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      See the License for the specific language governing permissions and
      limitations under the License.
+
+     This file is automatically generated by
+     frameworks/rs/tests/java_api/RSUnitTests/RSUnitTests.py.
 -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.android.rs.testforward">
+    package="com.android.rs.testforward22">
     <uses-sdk
         android:minSdkVersion="21"
         android:targetSdkVersion="26" />
@@ -26,6 +29,6 @@
 
     <instrumentation
         android:name="android.support.test.runner.AndroidJUnitRunner"
-        android:targetPackage="com.android.rs.testforward"
+        android:targetPackage="com.android.rs.testforward22"
         android:label="RenderScript Forward Compatibility Tests" />
 </manifest>
diff --git a/tests/java_api/RSTestForward/23.0.3/Android.mk b/tests/java_api/RSTestForward/23.0.3/Android.mk
new file mode 100644
index 0000000..e382903
--- /dev/null
+++ b/tests/java_api/RSTestForward/23.0.3/Android.mk
@@ -0,0 +1,142 @@
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# This file is auto-generated by frameworks/rs/tests/java_api/RSUnitTests/RSUnitTests.py.
+# To change unit tests version, please run the Python script above.
+
+ifneq ($(ENABLE_RSTESTS),)
+
+LOCAL_PATH := $(call my-dir)
+my_rs_unit_tests_path := ../../RSUnitTests/src/com/android/rs/unittest
+
+# RSTestForward for build tool version 23.0.3
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := tests
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-test
+LOCAL_COMPATIBILITY_SUITE := device-tests
+LOCAL_RENDERSCRIPT_TARGET_API := 0
+LOCAL_PACKAGE_NAME := RSTestForward_23_0_3
+my_rs_path := $(TOP)/prebuilts/renderscript/host/linux-x86/23.0.3
+LOCAL_RENDERSCRIPT_CC := $(my_rs_path)/bin/llvm-rs-cc
+LOCAL_RENDERSCRIPT_INCLUDES_OVERRIDE := $(my_rs_path)/include $(my_rs_path)/clang-include
+my_rs_path :=
+LOCAL_SRC_FILES := $(call all-java-files-under,../src)\
+    $(my_rs_unit_tests_path)/UnitTest.java\
+    $(my_rs_unit_tests_path)/UT_alloc.java\
+    $(my_rs_unit_tests_path)/alloc.rs\
+    $(my_rs_unit_tests_path)/UT_alloc_copy.java\
+    $(my_rs_unit_tests_path)/UT_alloc_copyPadded.java\
+    $(my_rs_unit_tests_path)/UT_array_alloc.java\
+    $(my_rs_unit_tests_path)/array_alloc.rs\
+    $(my_rs_unit_tests_path)/UT_array_init.java\
+    $(my_rs_unit_tests_path)/array_init.rs\
+    $(my_rs_unit_tests_path)/UT_atomic.java\
+    $(my_rs_unit_tests_path)/atomic.rs\
+    $(my_rs_unit_tests_path)/UT_bitfield.java\
+    $(my_rs_unit_tests_path)/bitfield.rs\
+    $(my_rs_unit_tests_path)/UT_bug_char.java\
+    $(my_rs_unit_tests_path)/bug_char.rs\
+    $(my_rs_unit_tests_path)/UT_check_dims.java\
+    $(my_rs_unit_tests_path)/check_dims.rs\
+    $(my_rs_unit_tests_path)/UT_clamp.java\
+    $(my_rs_unit_tests_path)/clamp.rs\
+    $(my_rs_unit_tests_path)/UT_clamp_relaxed.java\
+    $(my_rs_unit_tests_path)/clamp_relaxed.rs\
+    $(my_rs_unit_tests_path)/UT_constant.java\
+    $(my_rs_unit_tests_path)/constant.rs\
+    $(my_rs_unit_tests_path)/UT_convert.java\
+    $(my_rs_unit_tests_path)/convert.rs\
+    $(my_rs_unit_tests_path)/UT_convert_relaxed.java\
+    $(my_rs_unit_tests_path)/convert_relaxed.rs\
+    $(my_rs_unit_tests_path)/UT_copy_test.java\
+    $(my_rs_unit_tests_path)/copy_test.rs\
+    $(my_rs_unit_tests_path)/UT_ctxt_default.java\
+    $(my_rs_unit_tests_path)/ctxt_default.rs\
+    $(my_rs_unit_tests_path)/UT_element.java\
+    $(my_rs_unit_tests_path)/element.rs\
+    $(my_rs_unit_tests_path)/UT_foreach.java\
+    $(my_rs_unit_tests_path)/foreach.rs\
+    $(my_rs_unit_tests_path)/UT_foreach_bounds.java\
+    $(my_rs_unit_tests_path)/foreach_bounds.rs\
+    $(my_rs_unit_tests_path)/UT_foreach_multi.java\
+    $(my_rs_unit_tests_path)/foreach_multi.rs\
+    $(my_rs_unit_tests_path)/UT_fp_mad.java\
+    $(my_rs_unit_tests_path)/fp_mad.rs\
+    $(my_rs_unit_tests_path)/UT_instance.java\
+    $(my_rs_unit_tests_path)/instance.rs\
+    $(my_rs_unit_tests_path)/UT_int4.java\
+    $(my_rs_unit_tests_path)/int4.rs\
+    $(my_rs_unit_tests_path)/UT_kernel.java\
+    $(my_rs_unit_tests_path)/kernel.rs\
+    $(my_rs_unit_tests_path)/UT_kernel2d.java\
+    $(my_rs_unit_tests_path)/kernel2d.rs\
+    $(my_rs_unit_tests_path)/UT_kernel2d_oldstyle.java\
+    $(my_rs_unit_tests_path)/kernel2d_oldstyle.rs\
+    $(my_rs_unit_tests_path)/UT_kernel3d.java\
+    $(my_rs_unit_tests_path)/kernel3d.rs\
+    $(my_rs_unit_tests_path)/UT_kernel_struct.java\
+    $(my_rs_unit_tests_path)/kernel_struct.rs\
+    $(my_rs_unit_tests_path)/UT_math.java\
+    $(my_rs_unit_tests_path)/math.rs\
+    $(my_rs_unit_tests_path)/UT_math_agree.java\
+    $(my_rs_unit_tests_path)/math_agree.rs\
+    $(my_rs_unit_tests_path)/UT_math_conformance.java\
+    $(my_rs_unit_tests_path)/math_conformance.rs\
+    $(my_rs_unit_tests_path)/UT_min.java\
+    $(my_rs_unit_tests_path)/min.rs\
+    $(my_rs_unit_tests_path)/UT_noroot.java\
+    $(my_rs_unit_tests_path)/noroot.rs\
+    $(my_rs_unit_tests_path)/UT_primitives.java\
+    $(my_rs_unit_tests_path)/primitives.rs\
+    $(my_rs_unit_tests_path)/UT_refcount.java\
+    $(my_rs_unit_tests_path)/refcount.rs\
+    $(my_rs_unit_tests_path)/UT_rsdebug.java\
+    $(my_rs_unit_tests_path)/rsdebug.rs\
+    $(my_rs_unit_tests_path)/UT_rsdebug_23.java\
+    $(my_rs_unit_tests_path)/rsdebug_23.rs\
+    $(my_rs_unit_tests_path)/UT_rstime.java\
+    $(my_rs_unit_tests_path)/rstime.rs\
+    $(my_rs_unit_tests_path)/UT_rstypes.java\
+    $(my_rs_unit_tests_path)/rstypes.rs\
+    $(my_rs_unit_tests_path)/UT_sampler.java\
+    $(my_rs_unit_tests_path)/sampler.rs\
+    $(my_rs_unit_tests_path)/UT_script_group2_gatherscatter.java\
+    $(my_rs_unit_tests_path)/addup.rs\
+    $(my_rs_unit_tests_path)/UT_script_group2_nochain.java\
+    $(my_rs_unit_tests_path)/increment.rs\
+    $(my_rs_unit_tests_path)/increment2.rs\
+    $(my_rs_unit_tests_path)/double.rs\
+    $(my_rs_unit_tests_path)/UT_script_group2_pointwise.java\
+    $(my_rs_unit_tests_path)/increment.rs\
+    $(my_rs_unit_tests_path)/double.rs\
+    $(my_rs_unit_tests_path)/UT_static_globals.java\
+    $(my_rs_unit_tests_path)/static_globals.rs\
+    $(my_rs_unit_tests_path)/UT_struct.java\
+    $(my_rs_unit_tests_path)/struct.rs\
+    $(my_rs_unit_tests_path)/UT_struct_field_simple.java\
+    $(my_rs_unit_tests_path)/struct_field_simple.rs\
+    $(my_rs_unit_tests_path)/UT_unsigned.java\
+    $(my_rs_unit_tests_path)/unsigned.rs\
+    $(my_rs_unit_tests_path)/UT_vector.java\
+    $(my_rs_unit_tests_path)/vector.rs\
+
+include $(BUILD_PACKAGE)
+
+my_rs_unit_tests_path :=
+
+endif
diff --git a/tests/java_api/RSTestForward/AndroidManifest.xml b/tests/java_api/RSTestForward/23.0.3/AndroidManifest.xml
similarity index 84%
copy from tests/java_api/RSTestForward/AndroidManifest.xml
copy to tests/java_api/RSTestForward/23.0.3/AndroidManifest.xml
index e5dd140..327f706 100644
--- a/tests/java_api/RSTestForward/AndroidManifest.xml
+++ b/tests/java_api/RSTestForward/23.0.3/AndroidManifest.xml
@@ -12,9 +12,12 @@
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      See the License for the specific language governing permissions and
      limitations under the License.
+
+     This file is automatically generated by
+     frameworks/rs/tests/java_api/RSUnitTests/RSUnitTests.py.
 -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.android.rs.testforward">
+    package="com.android.rs.testforward23">
     <uses-sdk
         android:minSdkVersion="21"
         android:targetSdkVersion="26" />
@@ -26,6 +29,6 @@
 
     <instrumentation
         android:name="android.support.test.runner.AndroidJUnitRunner"
-        android:targetPackage="com.android.rs.testforward"
+        android:targetPackage="com.android.rs.testforward23"
         android:label="RenderScript Forward Compatibility Tests" />
 </manifest>
diff --git a/tests/java_api/RSTestForward/24.0.3/Android.mk b/tests/java_api/RSTestForward/24.0.3/Android.mk
new file mode 100644
index 0000000..93cddf4
--- /dev/null
+++ b/tests/java_api/RSTestForward/24.0.3/Android.mk
@@ -0,0 +1,168 @@
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# This file is auto-generated by frameworks/rs/tests/java_api/RSUnitTests/RSUnitTests.py.
+# To change unit tests version, please run the Python script above.
+
+ifneq ($(ENABLE_RSTESTS),)
+
+LOCAL_PATH := $(call my-dir)
+my_rs_unit_tests_path := ../../RSUnitTests/src/com/android/rs/unittest
+
+# RSTestForward for build tool version 24.0.3
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := tests
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-test
+LOCAL_COMPATIBILITY_SUITE := device-tests
+LOCAL_RENDERSCRIPT_TARGET_API := 0
+LOCAL_PACKAGE_NAME := RSTestForward_24_0_3
+my_rs_path := $(TOP)/prebuilts/renderscript/host/linux-x86/24.0.3
+LOCAL_RENDERSCRIPT_CC := $(my_rs_path)/bin/llvm-rs-cc
+LOCAL_RENDERSCRIPT_INCLUDES_OVERRIDE := $(my_rs_path)/include $(my_rs_path)/clang-include
+my_rs_path :=
+LOCAL_SRC_FILES := $(call all-java-files-under,../src)\
+    $(my_rs_unit_tests_path)/UnitTest.java\
+    $(my_rs_unit_tests_path)/UT_alloc.java\
+    $(my_rs_unit_tests_path)/alloc.rs\
+    $(my_rs_unit_tests_path)/UT_alloc_copy.java\
+    $(my_rs_unit_tests_path)/UT_alloc_copyPadded.java\
+    $(my_rs_unit_tests_path)/UT_array_alloc.java\
+    $(my_rs_unit_tests_path)/array_alloc.rs\
+    $(my_rs_unit_tests_path)/UT_array_init.java\
+    $(my_rs_unit_tests_path)/array_init.rs\
+    $(my_rs_unit_tests_path)/UT_atomic.java\
+    $(my_rs_unit_tests_path)/atomic.rs\
+    $(my_rs_unit_tests_path)/UT_bitfield.java\
+    $(my_rs_unit_tests_path)/bitfield.rs\
+    $(my_rs_unit_tests_path)/UT_bug_char.java\
+    $(my_rs_unit_tests_path)/bug_char.rs\
+    $(my_rs_unit_tests_path)/UT_check_dims.java\
+    $(my_rs_unit_tests_path)/check_dims.rs\
+    $(my_rs_unit_tests_path)/UT_clamp.java\
+    $(my_rs_unit_tests_path)/clamp.rs\
+    $(my_rs_unit_tests_path)/UT_clamp_relaxed.java\
+    $(my_rs_unit_tests_path)/clamp_relaxed.rs\
+    $(my_rs_unit_tests_path)/UT_constant.java\
+    $(my_rs_unit_tests_path)/constant.rs\
+    $(my_rs_unit_tests_path)/UT_convert.java\
+    $(my_rs_unit_tests_path)/convert.rs\
+    $(my_rs_unit_tests_path)/UT_convert_relaxed.java\
+    $(my_rs_unit_tests_path)/convert_relaxed.rs\
+    $(my_rs_unit_tests_path)/UT_copy_test.java\
+    $(my_rs_unit_tests_path)/copy_test.rs\
+    $(my_rs_unit_tests_path)/UT_ctxt_default.java\
+    $(my_rs_unit_tests_path)/ctxt_default.rs\
+    $(my_rs_unit_tests_path)/UT_element.java\
+    $(my_rs_unit_tests_path)/element.rs\
+    $(my_rs_unit_tests_path)/UT_foreach.java\
+    $(my_rs_unit_tests_path)/foreach.rs\
+    $(my_rs_unit_tests_path)/UT_foreach_bounds.java\
+    $(my_rs_unit_tests_path)/foreach_bounds.rs\
+    $(my_rs_unit_tests_path)/UT_foreach_multi.java\
+    $(my_rs_unit_tests_path)/foreach_multi.rs\
+    $(my_rs_unit_tests_path)/UT_fp16.java\
+    $(my_rs_unit_tests_path)/fp16.rs\
+    $(my_rs_unit_tests_path)/UT_fp16_globals.java\
+    $(my_rs_unit_tests_path)/fp16_globals.rs\
+    $(my_rs_unit_tests_path)/UT_fp_mad.java\
+    $(my_rs_unit_tests_path)/fp_mad.rs\
+    $(my_rs_unit_tests_path)/UT_instance.java\
+    $(my_rs_unit_tests_path)/instance.rs\
+    $(my_rs_unit_tests_path)/UT_int4.java\
+    $(my_rs_unit_tests_path)/int4.rs\
+    $(my_rs_unit_tests_path)/UT_kernel.java\
+    $(my_rs_unit_tests_path)/kernel.rs\
+    $(my_rs_unit_tests_path)/UT_kernel2d.java\
+    $(my_rs_unit_tests_path)/kernel2d.rs\
+    $(my_rs_unit_tests_path)/UT_kernel2d_oldstyle.java\
+    $(my_rs_unit_tests_path)/kernel2d_oldstyle.rs\
+    $(my_rs_unit_tests_path)/UT_kernel3d.java\
+    $(my_rs_unit_tests_path)/kernel3d.rs\
+    $(my_rs_unit_tests_path)/UT_kernel_struct.java\
+    $(my_rs_unit_tests_path)/kernel_struct.rs\
+    $(my_rs_unit_tests_path)/UT_math.java\
+    $(my_rs_unit_tests_path)/math.rs\
+    $(my_rs_unit_tests_path)/UT_math_24.java\
+    $(my_rs_unit_tests_path)/math_24.rs\
+    $(my_rs_unit_tests_path)/UT_math_agree.java\
+    $(my_rs_unit_tests_path)/math_agree.rs\
+    $(my_rs_unit_tests_path)/UT_math_conformance.java\
+    $(my_rs_unit_tests_path)/math_conformance.rs\
+    $(my_rs_unit_tests_path)/UT_math_fp16.java\
+    $(my_rs_unit_tests_path)/math_fp16.rs\
+    $(my_rs_unit_tests_path)/UT_min.java\
+    $(my_rs_unit_tests_path)/min.rs\
+    $(my_rs_unit_tests_path)/UT_noroot.java\
+    $(my_rs_unit_tests_path)/noroot.rs\
+    $(my_rs_unit_tests_path)/UT_primitives.java\
+    $(my_rs_unit_tests_path)/primitives.rs\
+    $(my_rs_unit_tests_path)/UT_reduce.java\
+    $(my_rs_unit_tests_path)/reduce.rs\
+    $(my_rs_unit_tests_path)/UT_reduce_backward.java\
+    $(my_rs_unit_tests_path)/reduce_backward.rs\
+    $(my_rs_unit_tests_path)/UT_refcount.java\
+    $(my_rs_unit_tests_path)/refcount.rs\
+    $(my_rs_unit_tests_path)/UT_rsdebug.java\
+    $(my_rs_unit_tests_path)/rsdebug.rs\
+    $(my_rs_unit_tests_path)/UT_rsdebug_23.java\
+    $(my_rs_unit_tests_path)/rsdebug_23.rs\
+    $(my_rs_unit_tests_path)/UT_rsdebug_24.java\
+    $(my_rs_unit_tests_path)/rsdebug_24.rs\
+    $(my_rs_unit_tests_path)/UT_rstime.java\
+    $(my_rs_unit_tests_path)/rstime.rs\
+    $(my_rs_unit_tests_path)/UT_rstypes.java\
+    $(my_rs_unit_tests_path)/rstypes.rs\
+    $(my_rs_unit_tests_path)/UT_sampler.java\
+    $(my_rs_unit_tests_path)/sampler.rs\
+    $(my_rs_unit_tests_path)/UT_script_group2_float.java\
+    $(my_rs_unit_tests_path)/float_test.rs\
+    $(my_rs_unit_tests_path)/UT_script_group2_gatherscatter.java\
+    $(my_rs_unit_tests_path)/addup.rs\
+    $(my_rs_unit_tests_path)/UT_script_group2_nochain.java\
+    $(my_rs_unit_tests_path)/increment.rs\
+    $(my_rs_unit_tests_path)/increment2.rs\
+    $(my_rs_unit_tests_path)/double.rs\
+    $(my_rs_unit_tests_path)/UT_script_group2_pointwise.java\
+    $(my_rs_unit_tests_path)/increment.rs\
+    $(my_rs_unit_tests_path)/double.rs\
+    $(my_rs_unit_tests_path)/UT_single_source_alloc.java\
+    $(my_rs_unit_tests_path)/single_source_alloc.rs\
+    $(my_rs_unit_tests_path)/UT_single_source_ref_count.java\
+    $(my_rs_unit_tests_path)/single_source_ref_count.rs\
+    $(my_rs_unit_tests_path)/UT_single_source_script.java\
+    $(my_rs_unit_tests_path)/single_source_script.rs\
+    $(my_rs_unit_tests_path)/UT_small_struct.java\
+    $(my_rs_unit_tests_path)/small_struct.rs\
+    $(my_rs_unit_tests_path)/UT_small_struct_2.java\
+    $(my_rs_unit_tests_path)/small_struct_2.rs\
+    $(my_rs_unit_tests_path)/UT_static_globals.java\
+    $(my_rs_unit_tests_path)/static_globals.rs\
+    $(my_rs_unit_tests_path)/UT_struct.java\
+    $(my_rs_unit_tests_path)/struct.rs\
+    $(my_rs_unit_tests_path)/UT_struct_field_simple.java\
+    $(my_rs_unit_tests_path)/struct_field_simple.rs\
+    $(my_rs_unit_tests_path)/UT_unsigned.java\
+    $(my_rs_unit_tests_path)/unsigned.rs\
+    $(my_rs_unit_tests_path)/UT_vector.java\
+    $(my_rs_unit_tests_path)/vector.rs\
+
+include $(BUILD_PACKAGE)
+
+my_rs_unit_tests_path :=
+
+endif
diff --git a/tests/java_api/RSTestForward/AndroidManifest.xml b/tests/java_api/RSTestForward/24.0.3/AndroidManifest.xml
similarity index 84%
rename from tests/java_api/RSTestForward/AndroidManifest.xml
rename to tests/java_api/RSTestForward/24.0.3/AndroidManifest.xml
index e5dd140..b3ba1b6 100644
--- a/tests/java_api/RSTestForward/AndroidManifest.xml
+++ b/tests/java_api/RSTestForward/24.0.3/AndroidManifest.xml
@@ -12,9 +12,12 @@
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      See the License for the specific language governing permissions and
      limitations under the License.
+
+     This file is automatically generated by
+     frameworks/rs/tests/java_api/RSUnitTests/RSUnitTests.py.
 -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.android.rs.testforward">
+    package="com.android.rs.testforward24">
     <uses-sdk
         android:minSdkVersion="21"
         android:targetSdkVersion="26" />
@@ -26,6 +29,6 @@
 
     <instrumentation
         android:name="android.support.test.runner.AndroidJUnitRunner"
-        android:targetPackage="com.android.rs.testforward"
+        android:targetPackage="com.android.rs.testforward24"
         android:label="RenderScript Forward Compatibility Tests" />
 </manifest>
diff --git a/tests/java_api/RSTestForward/25.0.2/Android.mk b/tests/java_api/RSTestForward/25.0.2/Android.mk
new file mode 100644
index 0000000..47462c1
--- /dev/null
+++ b/tests/java_api/RSTestForward/25.0.2/Android.mk
@@ -0,0 +1,168 @@
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# This file is auto-generated by frameworks/rs/tests/java_api/RSUnitTests/RSUnitTests.py.
+# To change unit tests version, please run the Python script above.
+
+ifneq ($(ENABLE_RSTESTS),)
+
+LOCAL_PATH := $(call my-dir)
+my_rs_unit_tests_path := ../../RSUnitTests/src/com/android/rs/unittest
+
+# RSTestForward for build tool version 25.0.2
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := tests
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-test
+LOCAL_COMPATIBILITY_SUITE := device-tests
+LOCAL_RENDERSCRIPT_TARGET_API := 0
+LOCAL_PACKAGE_NAME := RSTestForward_25_0_2
+my_rs_path := $(TOP)/prebuilts/renderscript/host/linux-x86/25.0.2
+LOCAL_RENDERSCRIPT_CC := $(my_rs_path)/bin/llvm-rs-cc
+LOCAL_RENDERSCRIPT_INCLUDES_OVERRIDE := $(my_rs_path)/include $(my_rs_path)/clang-include
+my_rs_path :=
+LOCAL_SRC_FILES := $(call all-java-files-under,../src)\
+    $(my_rs_unit_tests_path)/UnitTest.java\
+    $(my_rs_unit_tests_path)/UT_alloc.java\
+    $(my_rs_unit_tests_path)/alloc.rs\
+    $(my_rs_unit_tests_path)/UT_alloc_copy.java\
+    $(my_rs_unit_tests_path)/UT_alloc_copyPadded.java\
+    $(my_rs_unit_tests_path)/UT_array_alloc.java\
+    $(my_rs_unit_tests_path)/array_alloc.rs\
+    $(my_rs_unit_tests_path)/UT_array_init.java\
+    $(my_rs_unit_tests_path)/array_init.rs\
+    $(my_rs_unit_tests_path)/UT_atomic.java\
+    $(my_rs_unit_tests_path)/atomic.rs\
+    $(my_rs_unit_tests_path)/UT_bitfield.java\
+    $(my_rs_unit_tests_path)/bitfield.rs\
+    $(my_rs_unit_tests_path)/UT_bug_char.java\
+    $(my_rs_unit_tests_path)/bug_char.rs\
+    $(my_rs_unit_tests_path)/UT_check_dims.java\
+    $(my_rs_unit_tests_path)/check_dims.rs\
+    $(my_rs_unit_tests_path)/UT_clamp.java\
+    $(my_rs_unit_tests_path)/clamp.rs\
+    $(my_rs_unit_tests_path)/UT_clamp_relaxed.java\
+    $(my_rs_unit_tests_path)/clamp_relaxed.rs\
+    $(my_rs_unit_tests_path)/UT_constant.java\
+    $(my_rs_unit_tests_path)/constant.rs\
+    $(my_rs_unit_tests_path)/UT_convert.java\
+    $(my_rs_unit_tests_path)/convert.rs\
+    $(my_rs_unit_tests_path)/UT_convert_relaxed.java\
+    $(my_rs_unit_tests_path)/convert_relaxed.rs\
+    $(my_rs_unit_tests_path)/UT_copy_test.java\
+    $(my_rs_unit_tests_path)/copy_test.rs\
+    $(my_rs_unit_tests_path)/UT_ctxt_default.java\
+    $(my_rs_unit_tests_path)/ctxt_default.rs\
+    $(my_rs_unit_tests_path)/UT_element.java\
+    $(my_rs_unit_tests_path)/element.rs\
+    $(my_rs_unit_tests_path)/UT_foreach.java\
+    $(my_rs_unit_tests_path)/foreach.rs\
+    $(my_rs_unit_tests_path)/UT_foreach_bounds.java\
+    $(my_rs_unit_tests_path)/foreach_bounds.rs\
+    $(my_rs_unit_tests_path)/UT_foreach_multi.java\
+    $(my_rs_unit_tests_path)/foreach_multi.rs\
+    $(my_rs_unit_tests_path)/UT_fp16.java\
+    $(my_rs_unit_tests_path)/fp16.rs\
+    $(my_rs_unit_tests_path)/UT_fp16_globals.java\
+    $(my_rs_unit_tests_path)/fp16_globals.rs\
+    $(my_rs_unit_tests_path)/UT_fp_mad.java\
+    $(my_rs_unit_tests_path)/fp_mad.rs\
+    $(my_rs_unit_tests_path)/UT_instance.java\
+    $(my_rs_unit_tests_path)/instance.rs\
+    $(my_rs_unit_tests_path)/UT_int4.java\
+    $(my_rs_unit_tests_path)/int4.rs\
+    $(my_rs_unit_tests_path)/UT_kernel.java\
+    $(my_rs_unit_tests_path)/kernel.rs\
+    $(my_rs_unit_tests_path)/UT_kernel2d.java\
+    $(my_rs_unit_tests_path)/kernel2d.rs\
+    $(my_rs_unit_tests_path)/UT_kernel2d_oldstyle.java\
+    $(my_rs_unit_tests_path)/kernel2d_oldstyle.rs\
+    $(my_rs_unit_tests_path)/UT_kernel3d.java\
+    $(my_rs_unit_tests_path)/kernel3d.rs\
+    $(my_rs_unit_tests_path)/UT_kernel_struct.java\
+    $(my_rs_unit_tests_path)/kernel_struct.rs\
+    $(my_rs_unit_tests_path)/UT_math.java\
+    $(my_rs_unit_tests_path)/math.rs\
+    $(my_rs_unit_tests_path)/UT_math_24.java\
+    $(my_rs_unit_tests_path)/math_24.rs\
+    $(my_rs_unit_tests_path)/UT_math_agree.java\
+    $(my_rs_unit_tests_path)/math_agree.rs\
+    $(my_rs_unit_tests_path)/UT_math_conformance.java\
+    $(my_rs_unit_tests_path)/math_conformance.rs\
+    $(my_rs_unit_tests_path)/UT_math_fp16.java\
+    $(my_rs_unit_tests_path)/math_fp16.rs\
+    $(my_rs_unit_tests_path)/UT_min.java\
+    $(my_rs_unit_tests_path)/min.rs\
+    $(my_rs_unit_tests_path)/UT_noroot.java\
+    $(my_rs_unit_tests_path)/noroot.rs\
+    $(my_rs_unit_tests_path)/UT_primitives.java\
+    $(my_rs_unit_tests_path)/primitives.rs\
+    $(my_rs_unit_tests_path)/UT_reduce.java\
+    $(my_rs_unit_tests_path)/reduce.rs\
+    $(my_rs_unit_tests_path)/UT_reduce_backward.java\
+    $(my_rs_unit_tests_path)/reduce_backward.rs\
+    $(my_rs_unit_tests_path)/UT_refcount.java\
+    $(my_rs_unit_tests_path)/refcount.rs\
+    $(my_rs_unit_tests_path)/UT_rsdebug.java\
+    $(my_rs_unit_tests_path)/rsdebug.rs\
+    $(my_rs_unit_tests_path)/UT_rsdebug_23.java\
+    $(my_rs_unit_tests_path)/rsdebug_23.rs\
+    $(my_rs_unit_tests_path)/UT_rsdebug_24.java\
+    $(my_rs_unit_tests_path)/rsdebug_24.rs\
+    $(my_rs_unit_tests_path)/UT_rstime.java\
+    $(my_rs_unit_tests_path)/rstime.rs\
+    $(my_rs_unit_tests_path)/UT_rstypes.java\
+    $(my_rs_unit_tests_path)/rstypes.rs\
+    $(my_rs_unit_tests_path)/UT_sampler.java\
+    $(my_rs_unit_tests_path)/sampler.rs\
+    $(my_rs_unit_tests_path)/UT_script_group2_float.java\
+    $(my_rs_unit_tests_path)/float_test.rs\
+    $(my_rs_unit_tests_path)/UT_script_group2_gatherscatter.java\
+    $(my_rs_unit_tests_path)/addup.rs\
+    $(my_rs_unit_tests_path)/UT_script_group2_nochain.java\
+    $(my_rs_unit_tests_path)/increment.rs\
+    $(my_rs_unit_tests_path)/increment2.rs\
+    $(my_rs_unit_tests_path)/double.rs\
+    $(my_rs_unit_tests_path)/UT_script_group2_pointwise.java\
+    $(my_rs_unit_tests_path)/increment.rs\
+    $(my_rs_unit_tests_path)/double.rs\
+    $(my_rs_unit_tests_path)/UT_single_source_alloc.java\
+    $(my_rs_unit_tests_path)/single_source_alloc.rs\
+    $(my_rs_unit_tests_path)/UT_single_source_ref_count.java\
+    $(my_rs_unit_tests_path)/single_source_ref_count.rs\
+    $(my_rs_unit_tests_path)/UT_single_source_script.java\
+    $(my_rs_unit_tests_path)/single_source_script.rs\
+    $(my_rs_unit_tests_path)/UT_small_struct.java\
+    $(my_rs_unit_tests_path)/small_struct.rs\
+    $(my_rs_unit_tests_path)/UT_small_struct_2.java\
+    $(my_rs_unit_tests_path)/small_struct_2.rs\
+    $(my_rs_unit_tests_path)/UT_static_globals.java\
+    $(my_rs_unit_tests_path)/static_globals.rs\
+    $(my_rs_unit_tests_path)/UT_struct.java\
+    $(my_rs_unit_tests_path)/struct.rs\
+    $(my_rs_unit_tests_path)/UT_struct_field_simple.java\
+    $(my_rs_unit_tests_path)/struct_field_simple.rs\
+    $(my_rs_unit_tests_path)/UT_unsigned.java\
+    $(my_rs_unit_tests_path)/unsigned.rs\
+    $(my_rs_unit_tests_path)/UT_vector.java\
+    $(my_rs_unit_tests_path)/vector.rs\
+
+include $(BUILD_PACKAGE)
+
+my_rs_unit_tests_path :=
+
+endif
diff --git a/tests/java_api/RSTestForward/AndroidManifest.xml b/tests/java_api/RSTestForward/25.0.2/AndroidManifest.xml
similarity index 84%
copy from tests/java_api/RSTestForward/AndroidManifest.xml
copy to tests/java_api/RSTestForward/25.0.2/AndroidManifest.xml
index e5dd140..8e093af 100644
--- a/tests/java_api/RSTestForward/AndroidManifest.xml
+++ b/tests/java_api/RSTestForward/25.0.2/AndroidManifest.xml
@@ -12,9 +12,12 @@
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      See the License for the specific language governing permissions and
      limitations under the License.
+
+     This file is automatically generated by
+     frameworks/rs/tests/java_api/RSUnitTests/RSUnitTests.py.
 -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.android.rs.testforward">
+    package="com.android.rs.testforward25">
     <uses-sdk
         android:minSdkVersion="21"
         android:targetSdkVersion="26" />
@@ -26,6 +29,6 @@
 
     <instrumentation
         android:name="android.support.test.runner.AndroidJUnitRunner"
-        android:targetPackage="com.android.rs.testforward"
+        android:targetPackage="com.android.rs.testforward25"
         android:label="RenderScript Forward Compatibility Tests" />
 </manifest>
diff --git a/tests/java_api/RSTestForward/Android.mk b/tests/java_api/RSTestForward/Android.mk
index 40b4bc4..f8b6994 100644
--- a/tests/java_api/RSTestForward/Android.mk
+++ b/tests/java_api/RSTestForward/Android.mk
@@ -17,596 +17,6 @@
 # This file is auto-generated by frameworks/rs/tests/java_api/RSUnitTests/RSUnitTests.py.
 # To change unit tests version, please run the Python script above.
 
-ifneq ($(ENABLE_RSTESTS),)
-
 LOCAL_PATH := $(call my-dir)
-my_rs_unit_tests_path := ../RSUnitTests/src/com/android/rs/unittest
+include $(call all-makefiles-under,$(LOCAL_PATH))
 
-# RSTestForward for build tool version 21.1.2
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := tests
-LOCAL_STATIC_JAVA_LIBRARIES := android-support-test
-LOCAL_COMPATIBILITY_SUITE := device-tests
-LOCAL_RENDERSCRIPT_TARGET_API := 0
-LOCAL_PACKAGE_NAME := RSTestForward_21_1_2
-my_rs_path := $(TOP)/prebuilts/renderscript/host/linux-x86/21.1.2
-LOCAL_RENDERSCRIPT_CC := $(my_rs_path)/bin/llvm-rs-cc
-LOCAL_RENDERSCRIPT_INCLUDES_OVERRIDE := $(my_rs_path)/include $(my_rs_path)/clang-include
-my_rs_path :=
-LOCAL_SRC_FILES := $(call all-java-files-under,src)\
-    $(my_rs_unit_tests_path)/UnitTest.java\
-    $(my_rs_unit_tests_path)/UT_alloc.java\
-    $(my_rs_unit_tests_path)/alloc.rs\
-    $(my_rs_unit_tests_path)/UT_array_alloc.java\
-    $(my_rs_unit_tests_path)/array_alloc.rs\
-    $(my_rs_unit_tests_path)/UT_array_init.java\
-    $(my_rs_unit_tests_path)/array_init.rs\
-    $(my_rs_unit_tests_path)/UT_atomic.java\
-    $(my_rs_unit_tests_path)/atomic.rs\
-    $(my_rs_unit_tests_path)/UT_bitfield.java\
-    $(my_rs_unit_tests_path)/bitfield.rs\
-    $(my_rs_unit_tests_path)/UT_bug_char.java\
-    $(my_rs_unit_tests_path)/bug_char.rs\
-    $(my_rs_unit_tests_path)/UT_check_dims.java\
-    $(my_rs_unit_tests_path)/check_dims.rs\
-    $(my_rs_unit_tests_path)/UT_clamp.java\
-    $(my_rs_unit_tests_path)/clamp.rs\
-    $(my_rs_unit_tests_path)/UT_clamp_relaxed.java\
-    $(my_rs_unit_tests_path)/clamp_relaxed.rs\
-    $(my_rs_unit_tests_path)/UT_constant.java\
-    $(my_rs_unit_tests_path)/constant.rs\
-    $(my_rs_unit_tests_path)/UT_convert.java\
-    $(my_rs_unit_tests_path)/convert.rs\
-    $(my_rs_unit_tests_path)/UT_convert_relaxed.java\
-    $(my_rs_unit_tests_path)/convert_relaxed.rs\
-    $(my_rs_unit_tests_path)/UT_copy_test.java\
-    $(my_rs_unit_tests_path)/copy_test.rs\
-    $(my_rs_unit_tests_path)/UT_element.java\
-    $(my_rs_unit_tests_path)/element.rs\
-    $(my_rs_unit_tests_path)/UT_foreach.java\
-    $(my_rs_unit_tests_path)/foreach.rs\
-    $(my_rs_unit_tests_path)/UT_foreach_bounds.java\
-    $(my_rs_unit_tests_path)/foreach_bounds.rs\
-    $(my_rs_unit_tests_path)/UT_foreach_multi.java\
-    $(my_rs_unit_tests_path)/foreach_multi.rs\
-    $(my_rs_unit_tests_path)/UT_fp_mad.java\
-    $(my_rs_unit_tests_path)/fp_mad.rs\
-    $(my_rs_unit_tests_path)/UT_instance.java\
-    $(my_rs_unit_tests_path)/instance.rs\
-    $(my_rs_unit_tests_path)/UT_int4.java\
-    $(my_rs_unit_tests_path)/int4.rs\
-    $(my_rs_unit_tests_path)/UT_kernel.java\
-    $(my_rs_unit_tests_path)/kernel.rs\
-    $(my_rs_unit_tests_path)/UT_kernel_struct.java\
-    $(my_rs_unit_tests_path)/kernel_struct.rs\
-    $(my_rs_unit_tests_path)/UT_math.java\
-    $(my_rs_unit_tests_path)/math.rs\
-    $(my_rs_unit_tests_path)/UT_math_agree.java\
-    $(my_rs_unit_tests_path)/math_agree.rs\
-    $(my_rs_unit_tests_path)/UT_math_conformance.java\
-    $(my_rs_unit_tests_path)/math_conformance.rs\
-    $(my_rs_unit_tests_path)/UT_min.java\
-    $(my_rs_unit_tests_path)/min.rs\
-    $(my_rs_unit_tests_path)/UT_noroot.java\
-    $(my_rs_unit_tests_path)/noroot.rs\
-    $(my_rs_unit_tests_path)/UT_primitives.java\
-    $(my_rs_unit_tests_path)/primitives.rs\
-    $(my_rs_unit_tests_path)/UT_refcount.java\
-    $(my_rs_unit_tests_path)/refcount.rs\
-    $(my_rs_unit_tests_path)/UT_rsdebug.java\
-    $(my_rs_unit_tests_path)/rsdebug.rs\
-    $(my_rs_unit_tests_path)/UT_rstime.java\
-    $(my_rs_unit_tests_path)/rstime.rs\
-    $(my_rs_unit_tests_path)/UT_rstypes.java\
-    $(my_rs_unit_tests_path)/rstypes.rs\
-    $(my_rs_unit_tests_path)/UT_sampler.java\
-    $(my_rs_unit_tests_path)/sampler.rs\
-    $(my_rs_unit_tests_path)/UT_static_globals.java\
-    $(my_rs_unit_tests_path)/static_globals.rs\
-    $(my_rs_unit_tests_path)/UT_struct.java\
-    $(my_rs_unit_tests_path)/struct.rs\
-    $(my_rs_unit_tests_path)/UT_struct_field_simple.java\
-    $(my_rs_unit_tests_path)/struct_field_simple.rs\
-    $(my_rs_unit_tests_path)/UT_unsigned.java\
-    $(my_rs_unit_tests_path)/unsigned.rs\
-    $(my_rs_unit_tests_path)/UT_vector.java\
-    $(my_rs_unit_tests_path)/vector.rs\
-
-include $(BUILD_PACKAGE)
-
-# RSTestForward for build tool version 22.0.1
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := tests
-LOCAL_STATIC_JAVA_LIBRARIES := android-support-test
-LOCAL_COMPATIBILITY_SUITE := device-tests
-LOCAL_RENDERSCRIPT_TARGET_API := 0
-LOCAL_PACKAGE_NAME := RSTestForward_22_0_1
-my_rs_path := $(TOP)/prebuilts/renderscript/host/linux-x86/22.0.1
-LOCAL_RENDERSCRIPT_CC := $(my_rs_path)/bin/llvm-rs-cc
-LOCAL_RENDERSCRIPT_INCLUDES_OVERRIDE := $(my_rs_path)/include $(my_rs_path)/clang-include
-my_rs_path :=
-LOCAL_SRC_FILES := $(call all-java-files-under,src)\
-    $(my_rs_unit_tests_path)/UnitTest.java\
-    $(my_rs_unit_tests_path)/UT_alloc.java\
-    $(my_rs_unit_tests_path)/alloc.rs\
-    $(my_rs_unit_tests_path)/UT_array_alloc.java\
-    $(my_rs_unit_tests_path)/array_alloc.rs\
-    $(my_rs_unit_tests_path)/UT_array_init.java\
-    $(my_rs_unit_tests_path)/array_init.rs\
-    $(my_rs_unit_tests_path)/UT_atomic.java\
-    $(my_rs_unit_tests_path)/atomic.rs\
-    $(my_rs_unit_tests_path)/UT_bitfield.java\
-    $(my_rs_unit_tests_path)/bitfield.rs\
-    $(my_rs_unit_tests_path)/UT_bug_char.java\
-    $(my_rs_unit_tests_path)/bug_char.rs\
-    $(my_rs_unit_tests_path)/UT_check_dims.java\
-    $(my_rs_unit_tests_path)/check_dims.rs\
-    $(my_rs_unit_tests_path)/UT_clamp.java\
-    $(my_rs_unit_tests_path)/clamp.rs\
-    $(my_rs_unit_tests_path)/UT_clamp_relaxed.java\
-    $(my_rs_unit_tests_path)/clamp_relaxed.rs\
-    $(my_rs_unit_tests_path)/UT_constant.java\
-    $(my_rs_unit_tests_path)/constant.rs\
-    $(my_rs_unit_tests_path)/UT_convert.java\
-    $(my_rs_unit_tests_path)/convert.rs\
-    $(my_rs_unit_tests_path)/UT_convert_relaxed.java\
-    $(my_rs_unit_tests_path)/convert_relaxed.rs\
-    $(my_rs_unit_tests_path)/UT_copy_test.java\
-    $(my_rs_unit_tests_path)/copy_test.rs\
-    $(my_rs_unit_tests_path)/UT_element.java\
-    $(my_rs_unit_tests_path)/element.rs\
-    $(my_rs_unit_tests_path)/UT_foreach.java\
-    $(my_rs_unit_tests_path)/foreach.rs\
-    $(my_rs_unit_tests_path)/UT_foreach_bounds.java\
-    $(my_rs_unit_tests_path)/foreach_bounds.rs\
-    $(my_rs_unit_tests_path)/UT_foreach_multi.java\
-    $(my_rs_unit_tests_path)/foreach_multi.rs\
-    $(my_rs_unit_tests_path)/UT_fp_mad.java\
-    $(my_rs_unit_tests_path)/fp_mad.rs\
-    $(my_rs_unit_tests_path)/UT_instance.java\
-    $(my_rs_unit_tests_path)/instance.rs\
-    $(my_rs_unit_tests_path)/UT_int4.java\
-    $(my_rs_unit_tests_path)/int4.rs\
-    $(my_rs_unit_tests_path)/UT_kernel.java\
-    $(my_rs_unit_tests_path)/kernel.rs\
-    $(my_rs_unit_tests_path)/UT_kernel_struct.java\
-    $(my_rs_unit_tests_path)/kernel_struct.rs\
-    $(my_rs_unit_tests_path)/UT_math.java\
-    $(my_rs_unit_tests_path)/math.rs\
-    $(my_rs_unit_tests_path)/UT_math_agree.java\
-    $(my_rs_unit_tests_path)/math_agree.rs\
-    $(my_rs_unit_tests_path)/UT_math_conformance.java\
-    $(my_rs_unit_tests_path)/math_conformance.rs\
-    $(my_rs_unit_tests_path)/UT_min.java\
-    $(my_rs_unit_tests_path)/min.rs\
-    $(my_rs_unit_tests_path)/UT_noroot.java\
-    $(my_rs_unit_tests_path)/noroot.rs\
-    $(my_rs_unit_tests_path)/UT_primitives.java\
-    $(my_rs_unit_tests_path)/primitives.rs\
-    $(my_rs_unit_tests_path)/UT_refcount.java\
-    $(my_rs_unit_tests_path)/refcount.rs\
-    $(my_rs_unit_tests_path)/UT_rsdebug.java\
-    $(my_rs_unit_tests_path)/rsdebug.rs\
-    $(my_rs_unit_tests_path)/UT_rstime.java\
-    $(my_rs_unit_tests_path)/rstime.rs\
-    $(my_rs_unit_tests_path)/UT_rstypes.java\
-    $(my_rs_unit_tests_path)/rstypes.rs\
-    $(my_rs_unit_tests_path)/UT_sampler.java\
-    $(my_rs_unit_tests_path)/sampler.rs\
-    $(my_rs_unit_tests_path)/UT_static_globals.java\
-    $(my_rs_unit_tests_path)/static_globals.rs\
-    $(my_rs_unit_tests_path)/UT_struct.java\
-    $(my_rs_unit_tests_path)/struct.rs\
-    $(my_rs_unit_tests_path)/UT_struct_field_simple.java\
-    $(my_rs_unit_tests_path)/struct_field_simple.rs\
-    $(my_rs_unit_tests_path)/UT_unsigned.java\
-    $(my_rs_unit_tests_path)/unsigned.rs\
-    $(my_rs_unit_tests_path)/UT_vector.java\
-    $(my_rs_unit_tests_path)/vector.rs\
-
-include $(BUILD_PACKAGE)
-
-# RSTestForward for build tool version 23.0.3
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := tests
-LOCAL_STATIC_JAVA_LIBRARIES := android-support-test
-LOCAL_COMPATIBILITY_SUITE := device-tests
-LOCAL_RENDERSCRIPT_TARGET_API := 0
-LOCAL_PACKAGE_NAME := RSTestForward_23_0_3
-my_rs_path := $(TOP)/prebuilts/renderscript/host/linux-x86/23.0.3
-LOCAL_RENDERSCRIPT_CC := $(my_rs_path)/bin/llvm-rs-cc
-LOCAL_RENDERSCRIPT_INCLUDES_OVERRIDE := $(my_rs_path)/include $(my_rs_path)/clang-include
-my_rs_path :=
-LOCAL_SRC_FILES := $(call all-java-files-under,src)\
-    $(my_rs_unit_tests_path)/UnitTest.java\
-    $(my_rs_unit_tests_path)/UT_alloc.java\
-    $(my_rs_unit_tests_path)/alloc.rs\
-    $(my_rs_unit_tests_path)/UT_alloc_copy.java\
-    $(my_rs_unit_tests_path)/UT_alloc_copyPadded.java\
-    $(my_rs_unit_tests_path)/UT_array_alloc.java\
-    $(my_rs_unit_tests_path)/array_alloc.rs\
-    $(my_rs_unit_tests_path)/UT_array_init.java\
-    $(my_rs_unit_tests_path)/array_init.rs\
-    $(my_rs_unit_tests_path)/UT_atomic.java\
-    $(my_rs_unit_tests_path)/atomic.rs\
-    $(my_rs_unit_tests_path)/UT_bitfield.java\
-    $(my_rs_unit_tests_path)/bitfield.rs\
-    $(my_rs_unit_tests_path)/UT_bug_char.java\
-    $(my_rs_unit_tests_path)/bug_char.rs\
-    $(my_rs_unit_tests_path)/UT_check_dims.java\
-    $(my_rs_unit_tests_path)/check_dims.rs\
-    $(my_rs_unit_tests_path)/UT_clamp.java\
-    $(my_rs_unit_tests_path)/clamp.rs\
-    $(my_rs_unit_tests_path)/UT_clamp_relaxed.java\
-    $(my_rs_unit_tests_path)/clamp_relaxed.rs\
-    $(my_rs_unit_tests_path)/UT_constant.java\
-    $(my_rs_unit_tests_path)/constant.rs\
-    $(my_rs_unit_tests_path)/UT_convert.java\
-    $(my_rs_unit_tests_path)/convert.rs\
-    $(my_rs_unit_tests_path)/UT_convert_relaxed.java\
-    $(my_rs_unit_tests_path)/convert_relaxed.rs\
-    $(my_rs_unit_tests_path)/UT_copy_test.java\
-    $(my_rs_unit_tests_path)/copy_test.rs\
-    $(my_rs_unit_tests_path)/UT_ctxt_default.java\
-    $(my_rs_unit_tests_path)/ctxt_default.rs\
-    $(my_rs_unit_tests_path)/UT_element.java\
-    $(my_rs_unit_tests_path)/element.rs\
-    $(my_rs_unit_tests_path)/UT_foreach.java\
-    $(my_rs_unit_tests_path)/foreach.rs\
-    $(my_rs_unit_tests_path)/UT_foreach_bounds.java\
-    $(my_rs_unit_tests_path)/foreach_bounds.rs\
-    $(my_rs_unit_tests_path)/UT_foreach_multi.java\
-    $(my_rs_unit_tests_path)/foreach_multi.rs\
-    $(my_rs_unit_tests_path)/UT_fp_mad.java\
-    $(my_rs_unit_tests_path)/fp_mad.rs\
-    $(my_rs_unit_tests_path)/UT_instance.java\
-    $(my_rs_unit_tests_path)/instance.rs\
-    $(my_rs_unit_tests_path)/UT_int4.java\
-    $(my_rs_unit_tests_path)/int4.rs\
-    $(my_rs_unit_tests_path)/UT_kernel.java\
-    $(my_rs_unit_tests_path)/kernel.rs\
-    $(my_rs_unit_tests_path)/UT_kernel2d.java\
-    $(my_rs_unit_tests_path)/kernel2d.rs\
-    $(my_rs_unit_tests_path)/UT_kernel2d_oldstyle.java\
-    $(my_rs_unit_tests_path)/kernel2d_oldstyle.rs\
-    $(my_rs_unit_tests_path)/UT_kernel3d.java\
-    $(my_rs_unit_tests_path)/kernel3d.rs\
-    $(my_rs_unit_tests_path)/UT_kernel_struct.java\
-    $(my_rs_unit_tests_path)/kernel_struct.rs\
-    $(my_rs_unit_tests_path)/UT_math.java\
-    $(my_rs_unit_tests_path)/math.rs\
-    $(my_rs_unit_tests_path)/UT_math_agree.java\
-    $(my_rs_unit_tests_path)/math_agree.rs\
-    $(my_rs_unit_tests_path)/UT_math_conformance.java\
-    $(my_rs_unit_tests_path)/math_conformance.rs\
-    $(my_rs_unit_tests_path)/UT_min.java\
-    $(my_rs_unit_tests_path)/min.rs\
-    $(my_rs_unit_tests_path)/UT_noroot.java\
-    $(my_rs_unit_tests_path)/noroot.rs\
-    $(my_rs_unit_tests_path)/UT_primitives.java\
-    $(my_rs_unit_tests_path)/primitives.rs\
-    $(my_rs_unit_tests_path)/UT_refcount.java\
-    $(my_rs_unit_tests_path)/refcount.rs\
-    $(my_rs_unit_tests_path)/UT_rsdebug.java\
-    $(my_rs_unit_tests_path)/rsdebug.rs\
-    $(my_rs_unit_tests_path)/UT_rsdebug_23.java\
-    $(my_rs_unit_tests_path)/rsdebug_23.rs\
-    $(my_rs_unit_tests_path)/UT_rstime.java\
-    $(my_rs_unit_tests_path)/rstime.rs\
-    $(my_rs_unit_tests_path)/UT_rstypes.java\
-    $(my_rs_unit_tests_path)/rstypes.rs\
-    $(my_rs_unit_tests_path)/UT_sampler.java\
-    $(my_rs_unit_tests_path)/sampler.rs\
-    $(my_rs_unit_tests_path)/UT_script_group2_gatherscatter.java\
-    $(my_rs_unit_tests_path)/addup.rs\
-    $(my_rs_unit_tests_path)/UT_script_group2_nochain.java\
-    $(my_rs_unit_tests_path)/increment.rs\
-    $(my_rs_unit_tests_path)/increment2.rs\
-    $(my_rs_unit_tests_path)/double.rs\
-    $(my_rs_unit_tests_path)/UT_script_group2_pointwise.java\
-    $(my_rs_unit_tests_path)/increment.rs\
-    $(my_rs_unit_tests_path)/double.rs\
-    $(my_rs_unit_tests_path)/UT_static_globals.java\
-    $(my_rs_unit_tests_path)/static_globals.rs\
-    $(my_rs_unit_tests_path)/UT_struct.java\
-    $(my_rs_unit_tests_path)/struct.rs\
-    $(my_rs_unit_tests_path)/UT_struct_field_simple.java\
-    $(my_rs_unit_tests_path)/struct_field_simple.rs\
-    $(my_rs_unit_tests_path)/UT_unsigned.java\
-    $(my_rs_unit_tests_path)/unsigned.rs\
-    $(my_rs_unit_tests_path)/UT_vector.java\
-    $(my_rs_unit_tests_path)/vector.rs\
-
-include $(BUILD_PACKAGE)
-
-# RSTestForward for build tool version 24.0.3
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := tests
-LOCAL_STATIC_JAVA_LIBRARIES := android-support-test
-LOCAL_COMPATIBILITY_SUITE := device-tests
-LOCAL_RENDERSCRIPT_TARGET_API := 0
-LOCAL_PACKAGE_NAME := RSTestForward_24_0_3
-my_rs_path := $(TOP)/prebuilts/renderscript/host/linux-x86/24.0.3
-LOCAL_RENDERSCRIPT_CC := $(my_rs_path)/bin/llvm-rs-cc
-LOCAL_RENDERSCRIPT_INCLUDES_OVERRIDE := $(my_rs_path)/include $(my_rs_path)/clang-include
-my_rs_path :=
-LOCAL_SRC_FILES := $(call all-java-files-under,src)\
-    $(my_rs_unit_tests_path)/UnitTest.java\
-    $(my_rs_unit_tests_path)/UT_alloc.java\
-    $(my_rs_unit_tests_path)/alloc.rs\
-    $(my_rs_unit_tests_path)/UT_alloc_copy.java\
-    $(my_rs_unit_tests_path)/UT_alloc_copyPadded.java\
-    $(my_rs_unit_tests_path)/UT_array_alloc.java\
-    $(my_rs_unit_tests_path)/array_alloc.rs\
-    $(my_rs_unit_tests_path)/UT_array_init.java\
-    $(my_rs_unit_tests_path)/array_init.rs\
-    $(my_rs_unit_tests_path)/UT_atomic.java\
-    $(my_rs_unit_tests_path)/atomic.rs\
-    $(my_rs_unit_tests_path)/UT_bitfield.java\
-    $(my_rs_unit_tests_path)/bitfield.rs\
-    $(my_rs_unit_tests_path)/UT_bug_char.java\
-    $(my_rs_unit_tests_path)/bug_char.rs\
-    $(my_rs_unit_tests_path)/UT_check_dims.java\
-    $(my_rs_unit_tests_path)/check_dims.rs\
-    $(my_rs_unit_tests_path)/UT_clamp.java\
-    $(my_rs_unit_tests_path)/clamp.rs\
-    $(my_rs_unit_tests_path)/UT_clamp_relaxed.java\
-    $(my_rs_unit_tests_path)/clamp_relaxed.rs\
-    $(my_rs_unit_tests_path)/UT_constant.java\
-    $(my_rs_unit_tests_path)/constant.rs\
-    $(my_rs_unit_tests_path)/UT_convert.java\
-    $(my_rs_unit_tests_path)/convert.rs\
-    $(my_rs_unit_tests_path)/UT_convert_relaxed.java\
-    $(my_rs_unit_tests_path)/convert_relaxed.rs\
-    $(my_rs_unit_tests_path)/UT_copy_test.java\
-    $(my_rs_unit_tests_path)/copy_test.rs\
-    $(my_rs_unit_tests_path)/UT_ctxt_default.java\
-    $(my_rs_unit_tests_path)/ctxt_default.rs\
-    $(my_rs_unit_tests_path)/UT_element.java\
-    $(my_rs_unit_tests_path)/element.rs\
-    $(my_rs_unit_tests_path)/UT_foreach.java\
-    $(my_rs_unit_tests_path)/foreach.rs\
-    $(my_rs_unit_tests_path)/UT_foreach_bounds.java\
-    $(my_rs_unit_tests_path)/foreach_bounds.rs\
-    $(my_rs_unit_tests_path)/UT_foreach_multi.java\
-    $(my_rs_unit_tests_path)/foreach_multi.rs\
-    $(my_rs_unit_tests_path)/UT_fp16.java\
-    $(my_rs_unit_tests_path)/fp16.rs\
-    $(my_rs_unit_tests_path)/UT_fp16_globals.java\
-    $(my_rs_unit_tests_path)/fp16_globals.rs\
-    $(my_rs_unit_tests_path)/UT_fp_mad.java\
-    $(my_rs_unit_tests_path)/fp_mad.rs\
-    $(my_rs_unit_tests_path)/UT_instance.java\
-    $(my_rs_unit_tests_path)/instance.rs\
-    $(my_rs_unit_tests_path)/UT_int4.java\
-    $(my_rs_unit_tests_path)/int4.rs\
-    $(my_rs_unit_tests_path)/UT_kernel.java\
-    $(my_rs_unit_tests_path)/kernel.rs\
-    $(my_rs_unit_tests_path)/UT_kernel2d.java\
-    $(my_rs_unit_tests_path)/kernel2d.rs\
-    $(my_rs_unit_tests_path)/UT_kernel2d_oldstyle.java\
-    $(my_rs_unit_tests_path)/kernel2d_oldstyle.rs\
-    $(my_rs_unit_tests_path)/UT_kernel3d.java\
-    $(my_rs_unit_tests_path)/kernel3d.rs\
-    $(my_rs_unit_tests_path)/UT_kernel_struct.java\
-    $(my_rs_unit_tests_path)/kernel_struct.rs\
-    $(my_rs_unit_tests_path)/UT_math.java\
-    $(my_rs_unit_tests_path)/math.rs\
-    $(my_rs_unit_tests_path)/UT_math_24.java\
-    $(my_rs_unit_tests_path)/math_24.rs\
-    $(my_rs_unit_tests_path)/UT_math_agree.java\
-    $(my_rs_unit_tests_path)/math_agree.rs\
-    $(my_rs_unit_tests_path)/UT_math_conformance.java\
-    $(my_rs_unit_tests_path)/math_conformance.rs\
-    $(my_rs_unit_tests_path)/UT_math_fp16.java\
-    $(my_rs_unit_tests_path)/math_fp16.rs\
-    $(my_rs_unit_tests_path)/UT_min.java\
-    $(my_rs_unit_tests_path)/min.rs\
-    $(my_rs_unit_tests_path)/UT_noroot.java\
-    $(my_rs_unit_tests_path)/noroot.rs\
-    $(my_rs_unit_tests_path)/UT_primitives.java\
-    $(my_rs_unit_tests_path)/primitives.rs\
-    $(my_rs_unit_tests_path)/UT_reduce.java\
-    $(my_rs_unit_tests_path)/reduce.rs\
-    $(my_rs_unit_tests_path)/UT_reduce_backward.java\
-    $(my_rs_unit_tests_path)/reduce_backward.rs\
-    $(my_rs_unit_tests_path)/UT_refcount.java\
-    $(my_rs_unit_tests_path)/refcount.rs\
-    $(my_rs_unit_tests_path)/UT_rsdebug.java\
-    $(my_rs_unit_tests_path)/rsdebug.rs\
-    $(my_rs_unit_tests_path)/UT_rsdebug_23.java\
-    $(my_rs_unit_tests_path)/rsdebug_23.rs\
-    $(my_rs_unit_tests_path)/UT_rsdebug_24.java\
-    $(my_rs_unit_tests_path)/rsdebug_24.rs\
-    $(my_rs_unit_tests_path)/UT_rstime.java\
-    $(my_rs_unit_tests_path)/rstime.rs\
-    $(my_rs_unit_tests_path)/UT_rstypes.java\
-    $(my_rs_unit_tests_path)/rstypes.rs\
-    $(my_rs_unit_tests_path)/UT_sampler.java\
-    $(my_rs_unit_tests_path)/sampler.rs\
-    $(my_rs_unit_tests_path)/UT_script_group2_float.java\
-    $(my_rs_unit_tests_path)/float_test.rs\
-    $(my_rs_unit_tests_path)/UT_script_group2_gatherscatter.java\
-    $(my_rs_unit_tests_path)/addup.rs\
-    $(my_rs_unit_tests_path)/UT_script_group2_nochain.java\
-    $(my_rs_unit_tests_path)/increment.rs\
-    $(my_rs_unit_tests_path)/increment2.rs\
-    $(my_rs_unit_tests_path)/double.rs\
-    $(my_rs_unit_tests_path)/UT_script_group2_pointwise.java\
-    $(my_rs_unit_tests_path)/increment.rs\
-    $(my_rs_unit_tests_path)/double.rs\
-    $(my_rs_unit_tests_path)/UT_single_source_alloc.java\
-    $(my_rs_unit_tests_path)/single_source_alloc.rs\
-    $(my_rs_unit_tests_path)/UT_single_source_ref_count.java\
-    $(my_rs_unit_tests_path)/single_source_ref_count.rs\
-    $(my_rs_unit_tests_path)/UT_single_source_script.java\
-    $(my_rs_unit_tests_path)/single_source_script.rs\
-    $(my_rs_unit_tests_path)/UT_small_struct.java\
-    $(my_rs_unit_tests_path)/small_struct.rs\
-    $(my_rs_unit_tests_path)/UT_small_struct_2.java\
-    $(my_rs_unit_tests_path)/small_struct_2.rs\
-    $(my_rs_unit_tests_path)/UT_static_globals.java\
-    $(my_rs_unit_tests_path)/static_globals.rs\
-    $(my_rs_unit_tests_path)/UT_struct.java\
-    $(my_rs_unit_tests_path)/struct.rs\
-    $(my_rs_unit_tests_path)/UT_struct_field_simple.java\
-    $(my_rs_unit_tests_path)/struct_field_simple.rs\
-    $(my_rs_unit_tests_path)/UT_unsigned.java\
-    $(my_rs_unit_tests_path)/unsigned.rs\
-    $(my_rs_unit_tests_path)/UT_vector.java\
-    $(my_rs_unit_tests_path)/vector.rs\
-
-include $(BUILD_PACKAGE)
-
-# RSTestForward for build tool version 25.0.2
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := tests
-LOCAL_STATIC_JAVA_LIBRARIES := android-support-test
-LOCAL_COMPATIBILITY_SUITE := device-tests
-LOCAL_RENDERSCRIPT_TARGET_API := 0
-LOCAL_PACKAGE_NAME := RSTestForward_25_0_2
-my_rs_path := $(TOP)/prebuilts/renderscript/host/linux-x86/25.0.2
-LOCAL_RENDERSCRIPT_CC := $(my_rs_path)/bin/llvm-rs-cc
-LOCAL_RENDERSCRIPT_INCLUDES_OVERRIDE := $(my_rs_path)/include $(my_rs_path)/clang-include
-my_rs_path :=
-LOCAL_SRC_FILES := $(call all-java-files-under,src)\
-    $(my_rs_unit_tests_path)/UnitTest.java\
-    $(my_rs_unit_tests_path)/UT_alloc.java\
-    $(my_rs_unit_tests_path)/alloc.rs\
-    $(my_rs_unit_tests_path)/UT_alloc_copy.java\
-    $(my_rs_unit_tests_path)/UT_alloc_copyPadded.java\
-    $(my_rs_unit_tests_path)/UT_array_alloc.java\
-    $(my_rs_unit_tests_path)/array_alloc.rs\
-    $(my_rs_unit_tests_path)/UT_array_init.java\
-    $(my_rs_unit_tests_path)/array_init.rs\
-    $(my_rs_unit_tests_path)/UT_atomic.java\
-    $(my_rs_unit_tests_path)/atomic.rs\
-    $(my_rs_unit_tests_path)/UT_bitfield.java\
-    $(my_rs_unit_tests_path)/bitfield.rs\
-    $(my_rs_unit_tests_path)/UT_bug_char.java\
-    $(my_rs_unit_tests_path)/bug_char.rs\
-    $(my_rs_unit_tests_path)/UT_check_dims.java\
-    $(my_rs_unit_tests_path)/check_dims.rs\
-    $(my_rs_unit_tests_path)/UT_clamp.java\
-    $(my_rs_unit_tests_path)/clamp.rs\
-    $(my_rs_unit_tests_path)/UT_clamp_relaxed.java\
-    $(my_rs_unit_tests_path)/clamp_relaxed.rs\
-    $(my_rs_unit_tests_path)/UT_constant.java\
-    $(my_rs_unit_tests_path)/constant.rs\
-    $(my_rs_unit_tests_path)/UT_convert.java\
-    $(my_rs_unit_tests_path)/convert.rs\
-    $(my_rs_unit_tests_path)/UT_convert_relaxed.java\
-    $(my_rs_unit_tests_path)/convert_relaxed.rs\
-    $(my_rs_unit_tests_path)/UT_copy_test.java\
-    $(my_rs_unit_tests_path)/copy_test.rs\
-    $(my_rs_unit_tests_path)/UT_ctxt_default.java\
-    $(my_rs_unit_tests_path)/ctxt_default.rs\
-    $(my_rs_unit_tests_path)/UT_element.java\
-    $(my_rs_unit_tests_path)/element.rs\
-    $(my_rs_unit_tests_path)/UT_foreach.java\
-    $(my_rs_unit_tests_path)/foreach.rs\
-    $(my_rs_unit_tests_path)/UT_foreach_bounds.java\
-    $(my_rs_unit_tests_path)/foreach_bounds.rs\
-    $(my_rs_unit_tests_path)/UT_foreach_multi.java\
-    $(my_rs_unit_tests_path)/foreach_multi.rs\
-    $(my_rs_unit_tests_path)/UT_fp16.java\
-    $(my_rs_unit_tests_path)/fp16.rs\
-    $(my_rs_unit_tests_path)/UT_fp16_globals.java\
-    $(my_rs_unit_tests_path)/fp16_globals.rs\
-    $(my_rs_unit_tests_path)/UT_fp_mad.java\
-    $(my_rs_unit_tests_path)/fp_mad.rs\
-    $(my_rs_unit_tests_path)/UT_instance.java\
-    $(my_rs_unit_tests_path)/instance.rs\
-    $(my_rs_unit_tests_path)/UT_int4.java\
-    $(my_rs_unit_tests_path)/int4.rs\
-    $(my_rs_unit_tests_path)/UT_kernel.java\
-    $(my_rs_unit_tests_path)/kernel.rs\
-    $(my_rs_unit_tests_path)/UT_kernel2d.java\
-    $(my_rs_unit_tests_path)/kernel2d.rs\
-    $(my_rs_unit_tests_path)/UT_kernel2d_oldstyle.java\
-    $(my_rs_unit_tests_path)/kernel2d_oldstyle.rs\
-    $(my_rs_unit_tests_path)/UT_kernel3d.java\
-    $(my_rs_unit_tests_path)/kernel3d.rs\
-    $(my_rs_unit_tests_path)/UT_kernel_struct.java\
-    $(my_rs_unit_tests_path)/kernel_struct.rs\
-    $(my_rs_unit_tests_path)/UT_math.java\
-    $(my_rs_unit_tests_path)/math.rs\
-    $(my_rs_unit_tests_path)/UT_math_24.java\
-    $(my_rs_unit_tests_path)/math_24.rs\
-    $(my_rs_unit_tests_path)/UT_math_agree.java\
-    $(my_rs_unit_tests_path)/math_agree.rs\
-    $(my_rs_unit_tests_path)/UT_math_conformance.java\
-    $(my_rs_unit_tests_path)/math_conformance.rs\
-    $(my_rs_unit_tests_path)/UT_math_fp16.java\
-    $(my_rs_unit_tests_path)/math_fp16.rs\
-    $(my_rs_unit_tests_path)/UT_min.java\
-    $(my_rs_unit_tests_path)/min.rs\
-    $(my_rs_unit_tests_path)/UT_noroot.java\
-    $(my_rs_unit_tests_path)/noroot.rs\
-    $(my_rs_unit_tests_path)/UT_primitives.java\
-    $(my_rs_unit_tests_path)/primitives.rs\
-    $(my_rs_unit_tests_path)/UT_reduce.java\
-    $(my_rs_unit_tests_path)/reduce.rs\
-    $(my_rs_unit_tests_path)/UT_reduce_backward.java\
-    $(my_rs_unit_tests_path)/reduce_backward.rs\
-    $(my_rs_unit_tests_path)/UT_refcount.java\
-    $(my_rs_unit_tests_path)/refcount.rs\
-    $(my_rs_unit_tests_path)/UT_rsdebug.java\
-    $(my_rs_unit_tests_path)/rsdebug.rs\
-    $(my_rs_unit_tests_path)/UT_rsdebug_23.java\
-    $(my_rs_unit_tests_path)/rsdebug_23.rs\
-    $(my_rs_unit_tests_path)/UT_rsdebug_24.java\
-    $(my_rs_unit_tests_path)/rsdebug_24.rs\
-    $(my_rs_unit_tests_path)/UT_rstime.java\
-    $(my_rs_unit_tests_path)/rstime.rs\
-    $(my_rs_unit_tests_path)/UT_rstypes.java\
-    $(my_rs_unit_tests_path)/rstypes.rs\
-    $(my_rs_unit_tests_path)/UT_sampler.java\
-    $(my_rs_unit_tests_path)/sampler.rs\
-    $(my_rs_unit_tests_path)/UT_script_group2_float.java\
-    $(my_rs_unit_tests_path)/float_test.rs\
-    $(my_rs_unit_tests_path)/UT_script_group2_gatherscatter.java\
-    $(my_rs_unit_tests_path)/addup.rs\
-    $(my_rs_unit_tests_path)/UT_script_group2_nochain.java\
-    $(my_rs_unit_tests_path)/increment.rs\
-    $(my_rs_unit_tests_path)/increment2.rs\
-    $(my_rs_unit_tests_path)/double.rs\
-    $(my_rs_unit_tests_path)/UT_script_group2_pointwise.java\
-    $(my_rs_unit_tests_path)/increment.rs\
-    $(my_rs_unit_tests_path)/double.rs\
-    $(my_rs_unit_tests_path)/UT_single_source_alloc.java\
-    $(my_rs_unit_tests_path)/single_source_alloc.rs\
-    $(my_rs_unit_tests_path)/UT_single_source_ref_count.java\
-    $(my_rs_unit_tests_path)/single_source_ref_count.rs\
-    $(my_rs_unit_tests_path)/UT_single_source_script.java\
-    $(my_rs_unit_tests_path)/single_source_script.rs\
-    $(my_rs_unit_tests_path)/UT_small_struct.java\
-    $(my_rs_unit_tests_path)/small_struct.rs\
-    $(my_rs_unit_tests_path)/UT_small_struct_2.java\
-    $(my_rs_unit_tests_path)/small_struct_2.rs\
-    $(my_rs_unit_tests_path)/UT_static_globals.java\
-    $(my_rs_unit_tests_path)/static_globals.rs\
-    $(my_rs_unit_tests_path)/UT_struct.java\
-    $(my_rs_unit_tests_path)/struct.rs\
-    $(my_rs_unit_tests_path)/UT_struct_field_simple.java\
-    $(my_rs_unit_tests_path)/struct_field_simple.rs\
-    $(my_rs_unit_tests_path)/UT_unsigned.java\
-    $(my_rs_unit_tests_path)/unsigned.rs\
-    $(my_rs_unit_tests_path)/UT_vector.java\
-    $(my_rs_unit_tests_path)/vector.rs\
-
-include $(BUILD_PACKAGE)
-
-my_rs_unit_tests_path :=
-
-endif
diff --git a/tests/java_api/RSUnitTests/RSUnitTests.py b/tests/java_api/RSUnitTests/RSUnitTests.py
index e47a60f..637faa1 100644
--- a/tests/java_api/RSUnitTests/RSUnitTests.py
+++ b/tests/java_api/RSUnitTests/RSUnitTests.py
@@ -181,7 +181,7 @@
   )
 
 
-def WriteMakeSrcFiles(gen_file, api_version):
+def WriteMakeSrcFiles(gen_file, api_version, src_dir='src'):
   """Writes applicable LOCAL_SRC_FILES to gen_file.
 
   Includes everything under ./src, base UnitTest class, and test files.
@@ -195,8 +195,10 @@
       tests.extend(tests_for_version)
   tests = sorted(tests)
   gen_file.write(
-      'LOCAL_SRC_FILES := $(call all-java-files-under,src)\\\n'
-      '    $(my_rs_unit_tests_path)/UnitTest.java\\\n'
+      'LOCAL_SRC_FILES := $(call all-java-files-under,{})\\\n'
+      '    $(my_rs_unit_tests_path)/UnitTest.java\\\n'.format(
+          src_dir
+      )
   )
   for test in tests:
     # Add the Java and corresponding rs files to LOCAL_SRC_FILES
@@ -410,12 +412,64 @@
   return make_target_name
 
 
-def ForwardMakefileLocation():
+def ForwardDirLocation(build_tool_version_name):
+  """Returns location of directory for forward compatibility testing."""
+  return os.path.join(ThisScriptDir(), '..', 'RSTestForward',
+                      build_tool_version_name)
+
+
+def ForwardMakefileLocation(build_tool_version_name):
   """Returns the location of the Makefile for forward compatibility testing."""
-  return os.path.join(ThisScriptDir(), '..', 'RSTestForward', 'Android.mk')
+  return os.path.join(ForwardDirLocation(build_tool_version_name),
+                      'Android.mk')
 
 
-def WriteForwardMakefile(gen_file):
+def ForwardAndroidManifestLocation(build_tool_version_name):
+  """Returns AndroidManifest.xml location for forward compatibility testing."""
+  return os.path.join(ForwardDirLocation(build_tool_version_name),
+                      'AndroidManifest.xml')
+
+
+def WriteForwardAndroidManifest(gen_file, package):
+  gen_file.write(
+      '<?xml version="1.0" encoding="utf-8"?>\n'
+      '<!-- Copyright (C) 2017 The Android Open Source Project\n'
+      '\n'
+      '     Licensed under the Apache License, Version 2.0 (the "License");\n'
+      '     you may not use this file except in compliance with the License.\n'
+      '     You may obtain a copy of the License at\n'
+      '\n'
+      '          http://www.apache.org/licenses/LICENSE-2.0\n'
+      '\n'
+      '     Unless required by applicable law or agreed to in writing, software\n'
+      '     distributed under the License is distributed on an "AS IS" BASIS,\n'
+      '     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n'
+      '     See the License for the specific language governing permissions and\n'
+      '     limitations under the License.\n'
+      '\n'
+      '     This file is automatically generated by\n'
+      '     frameworks/rs/tests/java_api/RSUnitTests/RSUnitTests.py.\n'
+      '-->\n'
+      '<manifest xmlns:android="http://schemas.android.com/apk/res/android"\n'
+      '    package="{}">\n'
+      '    <uses-sdk\n'
+      '        android:minSdkVersion="21"\n'
+      '        android:targetSdkVersion="26" />\n'
+      '\n'
+      '    <application\n'
+      '        android:label="RSTestForward">\n'
+      '        <uses-library android:name="android.test.runner" />\n'
+      '    </application>\n'
+      '\n'
+      '    <instrumentation\n'
+      '        android:name="android.support.test.runner.AndroidJUnitRunner"\n'
+      '        android:targetPackage="{}"\n'
+      '        android:label="RenderScript Forward Compatibility Tests" />\n'
+      '</manifest>\n'.format(package, package)
+  )
+
+
+def WriteForwardMakefile(gen_file, build_tool_version, build_tool_version_name):
   """Writes the Makefile for forward compatibility testing.
 
   Makefile contains a build target per build tool version
@@ -427,39 +481,31 @@
       '# To change unit tests version, please run the Python script above.\n\n'
       'ifneq ($(ENABLE_RSTESTS),)\n\n'
       'LOCAL_PATH := $(call my-dir)\n'
-      'my_rs_unit_tests_path := ../RSUnitTests/src/com/android/rs/unittest\n'
+      'my_rs_unit_tests_path := ../../RSUnitTests/src/com/android/rs/unittest\n'
   )
-  all_make_target_names = []
-  for build_tool_version in sorted(BUILD_TOOL_VERSIONS.keys()):
-    build_tool_version_name = BUILD_TOOL_VERSIONS[build_tool_version]
-    make_target_name = ForwardTargetName(build_tool_version_name)
-    all_make_target_names.append(make_target_name)
-    gen_file.write(
-        '\n'
-        '# RSTestForward for build tool version {}\n\n'
-        'include $(CLEAR_VARS)\n\n'
-        'LOCAL_MODULE_TAGS := tests\n'
-        'LOCAL_STATIC_JAVA_LIBRARIES := android-support-test\n'
-        'LOCAL_COMPATIBILITY_SUITE := device-tests\n'
-        'LOCAL_RENDERSCRIPT_TARGET_API := 0\n'
-        'LOCAL_PACKAGE_NAME := {}\n'
-        'my_rs_path := $(TOP)/prebuilts/renderscript/host/linux-x86/{}\n'
-        'LOCAL_RENDERSCRIPT_CC := $(my_rs_path)/bin/llvm-rs-cc\n'
-        'LOCAL_RENDERSCRIPT_INCLUDES_OVERRIDE := $(my_rs_path)/include $(my_rs_path)/clang-include\n'
-        'my_rs_path :=\n'.format(
-            build_tool_version_name, make_target_name, build_tool_version_name
-        )
-    )
-    WriteMakeSrcFiles(gen_file, build_tool_version)
-    gen_file.write(
-        '\n'
-        'include $(BUILD_PACKAGE)\n'
-    )
-  # Create RSTestForward phony target which builds all above targets
+  make_target_name = ForwardTargetName(build_tool_version_name)
   gen_file.write(
       '\n'
+      '# RSTestForward for build tool version {}\n\n'
+      'include $(CLEAR_VARS)\n\n'
+      'LOCAL_MODULE_TAGS := tests\n'
+      'LOCAL_STATIC_JAVA_LIBRARIES := android-support-test\n'
+      'LOCAL_COMPATIBILITY_SUITE := device-tests\n'
+      'LOCAL_RENDERSCRIPT_TARGET_API := 0\n'
+      'LOCAL_PACKAGE_NAME := {}\n'
+      'my_rs_path := $(TOP)/prebuilts/renderscript/host/linux-x86/{}\n'
+      'LOCAL_RENDERSCRIPT_CC := $(my_rs_path)/bin/llvm-rs-cc\n'
+      'LOCAL_RENDERSCRIPT_INCLUDES_OVERRIDE := $(my_rs_path)/include $(my_rs_path)/clang-include\n'
+      'my_rs_path :=\n'.format(
+          build_tool_version_name, make_target_name, build_tool_version_name
+      )
+  )
+  WriteMakeSrcFiles(gen_file, build_tool_version, '../src')
+  gen_file.write(
+      '\n'
+      'include $(BUILD_PACKAGE)\n\n'
       'my_rs_unit_tests_path :=\n\n'
-      'endif\n'.format(' '.join(all_make_target_names))
+      'endif\n'
   )
 
 
@@ -478,10 +524,19 @@
 
 def GenerateForward():
   """Generates the necessary file for forward compatibility testing."""
-  with open(ForwardMakefileLocation(), 'w') as gen_file:
-    WriteForwardMakefile(gen_file)
-  print ('Generated forward compatibility Makefile at {}'
-         .format(ForwardMakefileLocation()))
+  for build_tool_version in sorted(BUILD_TOOL_VERSIONS.keys()):
+    build_tool_version_name = BUILD_TOOL_VERSIONS[build_tool_version]
+    if not os.path.exists(ForwardDirLocation(build_tool_version_name)):
+      os.mkdir(ForwardDirLocation(build_tool_version_name))
+    with open(ForwardMakefileLocation(build_tool_version_name), 'w') as gen_file:
+      WriteForwardMakefile(gen_file, build_tool_version, build_tool_version_name)
+    print ('Generated forward compatibility Makefile at {}'
+           .format(ForwardMakefileLocation(build_tool_version_name)))
+    with open(ForwardAndroidManifestLocation(build_tool_version_name), 'w') as gen_file:
+      package = 'com.android.rs.testforward{}'.format(build_tool_version)
+      WriteForwardAndroidManifest(gen_file, package)
+    print ('Generated forward compatibility AndroidManifest.xml at {}'
+           .format(ForwardAndroidManifestLocation(build_tool_version_name)))
   with open(ForwardMakeTargetsLocation(), 'w') as gen_file:
     WriteForwardMakeTargets(gen_file)
   print ('Generated forward compatibility targets at {}'
diff --git a/tests/lldb/README.txt b/tests/lldb/README.txt
index 4631f9c..9c07494 100644
--- a/tests/lldb/README.txt
+++ b/tests/lldb/README.txt
@@ -100,11 +100,10 @@
                                 Path to the lldb-server executable on host (if using
                                 -run-emu).
           --log-file-path LOG_FILE_PATH
-                                The path to the folder where the log file will be
-                                placed.
+                                The path to the file where the log will be written.
           --results-file-path RESULTS_FILE_PATH
-                                Output folder where junit results.xml file will be
-                                placed.
+                                The path to the file where junit results.xml will be
+                                written.
           --timeout TIMEOUT     Timeout period for a single command, expressed in
                                 seconds
 
diff --git a/tests/lldb/config.py b/tests/lldb/config.py
index 31fa29f..a72b80b 100644
--- a/tests/lldb/config.py
+++ b/tests/lldb/config.py
@@ -68,12 +68,12 @@
 
     @property
     def log_file_path(self):
-        '''The path to the folder where the log file will be placed.'''
+        '''The path to the file where the log will be written.'''
         return os.path.join(os.getcwd(), 'LLDBTestsuiteLog.txt')
 
     @property
     def results_file_path(self):
-        '''Output folder where junit results.xml file will be placed.'''
+        '''The path to the file where junit results.xml will be written.'''
         return os.path.join(os.getcwd(), 'results.xml')
 
     @property
diff --git a/tests/lldb/tests/harness/util_bundle.py b/tests/lldb/tests/harness/util_bundle.py
index 3f14094..68954cb 100644
--- a/tests/lldb/tests/harness/util_bundle.py
+++ b/tests/lldb/tests/harness/util_bundle.py
@@ -195,7 +195,8 @@
         output = self._android.adb(cmd, False, True,
                                    util_constants.PUSH_TIMEOUT)
         if ('Success' not in output) or ("can't find" in output):
-            raise TestSuiteException('unable to install app ' + app)
+            raise TestSuiteException('unable to install app {}: {}'.format(
+                app, output))
 
     def _push_all_java(self):
         '''Push all apk files to the device.