Move test libraries under /data/nativetests

Move libraries used in bionic-unit-tests out of system partition to
/data/nativetests../bionic-loader-test-libs

Bug: http://b/22182538
Test: build bionic and run bionic-unit-tests
Change-Id: I170177bef782839d0b4970ae4418bf54d0a77836
diff --git a/tests/libs/Android.bp b/tests/libs/Android.bp
index 0303138..9ca1476 100644
--- a/tests/libs/Android.bp
+++ b/tests/libs/Android.bp
@@ -17,6 +17,12 @@
 cc_defaults {
     name: "bionic_testlib_defaults",
     host_supported: true,
+    ldflags: [
+        "-Wl,--rpath,\\$${ORIGIN}",
+        "-Wl,--enable-new-dtags",
+    ],
+    relative_install_path: "bionic-loader-test-libs",
+    gtest: false,
     sanitize: {
         never: true,
     },
@@ -30,7 +36,7 @@
 // -----------------------------------------------------------------------------
 // Library to test gnu-styled hash
 // -----------------------------------------------------------------------------
-cc_library {
+cc_test_library {
     name: "libgnu-hash-table-library",
     defaults: ["bionic_testlib_defaults"],
     srcs: ["dlext_test_library.cpp"],
@@ -48,7 +54,7 @@
 // -----------------------------------------------------------------------------
 // Library to test sysv-styled hash
 // -----------------------------------------------------------------------------
-cc_library {
+cc_test_library {
     name: "libsysv-hash-table-library",
     defaults: ["bionic_testlib_defaults"],
     srcs: ["dlext_test_library.cpp"],
@@ -63,8 +69,9 @@
 // -----------------------------------------------------------------------------
 // Library used by dlext tests - without GNU RELRO program header
 // -----------------------------------------------------------------------------
-cc_library {
+cc_test_library {
     name: "libdlext_test_norelro",
+    defaults: ["bionic_testlib_defaults"],
     srcs: ["dlext_test_library.cpp"],
     ldflags: ["-Wl,-z,norelro"],
     shared_libs = ["libtest_simple"],
@@ -93,7 +100,7 @@
 // -----------------------------------------------------------------------------
 // Library used by dlfcn tests
 // -----------------------------------------------------------------------------
-cc_library {
+cc_test_library {
     name: "libtest_simple",
     defaults: ["bionic_testlib_defaults"],
     srcs: ["dlopen_testlib_simple.cpp"],
@@ -102,7 +109,7 @@
 // -----------------------------------------------------------------------------
 // Library used by dlfcn nodelete tests
 // -----------------------------------------------------------------------------
-cc_library {
+cc_test_library {
     name: "libtest_nodelete_1",
     defaults: ["bionic_testlib_defaults"],
     srcs: ["dlopen_nodelete_1.cpp"],
@@ -111,7 +118,7 @@
 // -----------------------------------------------------------------------------
 // Library used by dlfcn nodelete tests
 // -----------------------------------------------------------------------------
-cc_library {
+cc_test_library {
     name: "libtest_nodelete_2",
     defaults: ["bionic_testlib_defaults"],
     srcs: ["dlopen_nodelete_2.cpp"],
@@ -120,7 +127,7 @@
 // -----------------------------------------------------------------------------
 // Library used by dlfcn nodelete tests
 // -----------------------------------------------------------------------------
-cc_library {
+cc_test_library {
     name: "libtest_nodelete_dt_flags_1",
     defaults: ["bionic_testlib_defaults"],
     srcs: ["dlopen_nodelete_dt_flags_1.cpp"],
@@ -172,7 +179,7 @@
 //
 // libtest_with_dependency_loop -> a -> b -> c -> a
 // -----------------------------------------------------------------------------
-cc_library {
+cc_test_library {
     name: "libtest_with_dependency_loop",
     defaults: ["bionic_testlib_defaults"],
     srcs: ["dlopen_testlib_loopy_root.cpp"],
@@ -182,7 +189,7 @@
 // -----------------------------------------------------------------------------
 // libtest_with_dependency_loop_a.so
 // -----------------------------------------------------------------------------
-cc_library {
+cc_test_library {
     name: "libtest_with_dependency_loop_a",
     defaults: ["bionic_testlib_defaults"],
     srcs: ["dlopen_testlib_loopy_a.cpp"],
@@ -194,7 +201,7 @@
 //
 // this is temporary placeholder - will be removed
 // -----------------------------------------------------------------------------
-cc_library {
+cc_test_library {
     name: "libtest_with_dependency_loop_b_tmp",
     defaults: ["bionic_testlib_defaults"],
     srcs: ["dlopen_testlib_loopy_invalid.cpp"],
@@ -204,7 +211,7 @@
 // -----------------------------------------------------------------------------
 // libtest_with_dependency_loop_b.so
 // -----------------------------------------------------------------------------
-cc_library {
+cc_test_library {
     name: "libtest_with_dependency_loop_b",
     defaults: ["bionic_testlib_defaults"],
     srcs: ["dlopen_testlib_loopy_b.cpp"],
@@ -214,7 +221,7 @@
 // -----------------------------------------------------------------------------
 // libtest_with_dependency_loop_c.so
 // -----------------------------------------------------------------------------
-cc_library {
+cc_test_library {
     name: "libtest_with_dependency_loop_c",
     defaults: ["bionic_testlib_defaults"],
     srcs: ["dlopen_testlib_loopy_c.cpp"],
@@ -230,7 +237,7 @@
 // -----------------------------------------------------------------------------
 
 
-cc_library {
+cc_test_library {
     name: "libtest_relo_check_dt_needed_order",
     defaults: ["bionic_testlib_defaults"],
     srcs: ["dlopen_testlib_relo_check_dt_needed_order.cpp"],
@@ -240,13 +247,13 @@
     ],
 }
 
-cc_library {
+cc_test_library {
     name: "libtest_relo_check_dt_needed_order_1",
     defaults: ["bionic_testlib_defaults"],
     srcs: ["dlopen_testlib_relo_check_dt_needed_order_1.cpp"],
 }
 
-cc_library {
+cc_test_library {
     name: "libtest_relo_check_dt_needed_order_2",
     defaults: ["bionic_testlib_defaults"],
     srcs: ["dlopen_testlib_relo_check_dt_needed_order_2.cpp"],
@@ -260,7 +267,7 @@
 // -----------------------------------------------------------------------------
 // Library used by ifunc tests
 // -----------------------------------------------------------------------------
-cc_library {
+cc_test_library {
     name: "libtest_ifunc",
     defaults: ["bionic_testlib_defaults"],
     srcs: ["dlopen_testlib_ifunc.c"],
@@ -281,7 +288,7 @@
 // Library used by atexit tests
 // -----------------------------------------------------------------------------
 
-cc_library {
+cc_test_library {
     name: "libtest_atexit",
     defaults: ["bionic_testlib_defaults"],
     srcs: ["atexit_testlib.cpp"],
@@ -291,7 +298,7 @@
 // This library is used by dl_load test to check symbol preempting
 // by main executable
 // -----------------------------------------------------------------------------
-cc_library {
+cc_test_library {
     name: "libdl_preempt_test_1",
     defaults: ["bionic_testlib_defaults"],
     srcs: ["dl_preempt_library_1.cpp"],
@@ -301,7 +308,7 @@
 // This library is used by dl_load test to check symbol preempting
 // by libdl_preempt_test_1.so
 // -----------------------------------------------------------------------------
-cc_library {
+cc_test_library {
     name: "libdl_preempt_test_2",
     defaults: ["bionic_testlib_defaults"],
     srcs: ["dl_preempt_library_2.cpp"],
@@ -310,7 +317,7 @@
 // -----------------------------------------------------------------------------
 // Library with DF_1_GLOBAL
 // -----------------------------------------------------------------------------
-cc_library {
+cc_test_library {
     name: "libdl_test_df_1_global",
     defaults: ["bionic_testlib_defaults"],
     srcs: ["dl_df_1_global.cpp"],
@@ -328,7 +335,7 @@
 // -----------------------------------------------------------------------------
 // Library using symbol from libdl_test_df_1_global
 // -----------------------------------------------------------------------------
-cc_library {
+cc_test_library {
     name: "libtest_dlsym_df_1_global",
     defaults: ["bionic_testlib_defaults"],
     srcs: ["dl_df_1_use_global.cpp"],
@@ -337,7 +344,7 @@
 // -----------------------------------------------------------------------------
 // Library with weak function
 // -----------------------------------------------------------------------------
-cc_library {
+cc_test_library {
     name: "libtest_dlsym_weak_func",
     defaults: ["bionic_testlib_defaults"],
     srcs: ["dlsym_weak_function.cpp"],
@@ -346,7 +353,7 @@
 // -----------------------------------------------------------------------------
 // Library to check RTLD_LOCAL with dlsym in 'this'
 // -----------------------------------------------------------------------------
-cc_library {
+cc_test_library {
     name: "libtest_dlsym_from_this",
     defaults: ["bionic_testlib_defaults"],
     srcs: ["dlsym_from_this_symbol.cpp"],
@@ -360,7 +367,7 @@
 }
 
 // -----------------------------------------------------------------------------
-cc_library {
+cc_test_library {
     name: "libtest_dlsym_from_this_child",
     defaults: ["bionic_testlib_defaults"],
     srcs: ["dlsym_from_this_functions.cpp"],
@@ -368,7 +375,7 @@
 }
 
 // -----------------------------------------------------------------------------
-cc_library {
+cc_test_library {
     name: "libtest_dlsym_from_this_grandchild",
     defaults: ["bionic_testlib_defaults"],
     srcs: ["dlsym_from_this_symbol2.cpp"],
@@ -377,7 +384,7 @@
 // -----------------------------------------------------------------------------
 // Empty library
 // -----------------------------------------------------------------------------
-cc_library {
+cc_test_library {
     name: "libtest_empty",
     defaults: ["bionic_testlib_defaults"],
     srcs: ["empty.cpp"],
@@ -386,7 +393,7 @@
 // -----------------------------------------------------------------------------
 // Library with weak undefined function
 // -----------------------------------------------------------------------------
-cc_library {
+cc_test_library {
     name: "libtest_dlopen_weak_undefined_func",
     defaults: ["bionic_testlib_defaults"],
     srcs: ["dlopen_weak_undefined.cpp"],
@@ -395,7 +402,7 @@
 // -----------------------------------------------------------------------------
 // Library with constructor that calls dlopen() b/7941716
 // -----------------------------------------------------------------------------
-cc_library {
+cc_test_library {
     name: "libtest_dlopen_from_ctor",
     defaults: ["bionic_testlib_defaults"],
     srcs: ["dlopen_testlib_dlopen_from_ctor.cpp"],
@@ -409,7 +416,7 @@
 // -----------------------------------------------------------------------------
 // Library that depends on the library with constructor that calls dlopen() b/7941716
 // -----------------------------------------------------------------------------
-cc_library {
+cc_test_library {
     name: "libtest_dlopen_from_ctor_main",
     defaults: ["bionic_testlib_defaults"],
     srcs: ["empty.cpp"],
diff --git a/tests/libs/Android.build.dlext_testzip.mk b/tests/libs/Android.build.dlext_testzip.mk
index 56be1e2..37499ba 100644
--- a/tests/libs/Android.build.dlext_testzip.mk
+++ b/tests/libs/Android.build.dlext_testzip.mk
@@ -26,7 +26,7 @@
 LOCAL_MODULE := libdlext_test_zip_zipaligned
 LOCAL_MODULE_SUFFIX := .zip
 LOCAL_MODULE_TAGS := tests
-LOCAL_MODULE_PATH := $($(bionic_2nd_arch_prefix)TARGET_OUT_DATA_NATIVE_TESTS)/libdlext_test_zip
+LOCAL_MODULE_PATH := $($(bionic_2nd_arch_prefix)TARGET_OUT_DATA_NATIVE_TESTS)/bionic-loader-test-libs/libdlext_test_zip
 LOCAL_2ND_ARCH_VAR_PREFIX := $(bionic_2nd_arch_prefix)
 
 include $(BUILD_SYSTEM)/base_rules.mk
@@ -48,7 +48,7 @@
 LOCAL_MODULE := libdlext_test_runpath_zip_zipaligned
 LOCAL_MODULE_SUFFIX := .zip
 LOCAL_MODULE_TAGS := tests
-LOCAL_MODULE_PATH := $($(bionic_2nd_arch_prefix)TARGET_OUT_DATA_NATIVE_TESTS)/libdlext_test_runpath_zip
+LOCAL_MODULE_PATH := $($(bionic_2nd_arch_prefix)TARGET_OUT_DATA_NATIVE_TESTS)/bionic-loader-test-libs/libdlext_test_runpath_zip
 LOCAL_2ND_ARCH_VAR_PREFIX := $(bionic_2nd_arch_prefix)
 
 include $(BUILD_SYSTEM)/base_rules.mk
diff --git a/tests/libs/Android.build.linker_namespaces.mk b/tests/libs/Android.build.linker_namespaces.mk
index f913780..df6428c 100644
--- a/tests/libs/Android.build.linker_namespaces.mk
+++ b/tests/libs/Android.build.linker_namespaces.mk
@@ -35,24 +35,24 @@
 # -----------------------------------------------------------------------------
 libnstest_root_src_files := namespaces_root.cpp
 libnstest_root_shared_libraries := libnstest_public libnstest_private
-libnstest_root_install_to_out_data_dir := private_namespace_libs
+libnstest_root_relative_install_path := private_namespace_libs
 module := libnstest_root
-include $(LOCAL_PATH)/Android.build.target.testlib.mk
+include $(LOCAL_PATH)/Android.build.testlib.target.mk
 
 libnstest_public_src_files := namespaces_public.cpp
 module := libnstest_public
-libnstest_public_install_to_out_data_dir := public_namespace_libs
-include $(LOCAL_PATH)/Android.build.target.testlib.mk
+libnstest_public_relative_install_path := public_namespace_libs
+include $(LOCAL_PATH)/Android.build.testlib.target.mk
 
 libnstest_private_src_files := namespaces_private.cpp
-libnstest_private_install_to_out_data_dir := private_namespace_libs
+libnstest_private_relative_install_path := private_namespace_libs
 module := libnstest_private
-include $(LOCAL_PATH)/Android.build.target.testlib.mk
+include $(LOCAL_PATH)/Android.build.testlib.target.mk
 
 libnstest_dlopened_src_files := namespaces_dlopened.cpp
-libnstest_dlopened_install_to_out_data_dir := private_namespace_libs
+libnstest_dlopened_relative_install_path := private_namespace_libs
 module := libnstest_dlopened
-include $(LOCAL_PATH)/Android.build.target.testlib.mk
+include $(LOCAL_PATH)/Android.build.testlib.target.mk
 
 # -----------------------------------------------------------------------------
 # This set of libraries is to test isolated namespaces
@@ -71,14 +71,14 @@
 # -----------------------------------------------------------------------------
 libnstest_root_not_isolated_src_files := namespaces_root.cpp
 libnstest_root_not_isolated_shared_libraries := libnstest_public libnstest_private_external
-libnstest_root_not_isolated_install_to_out_data_dir := private_namespace_libs
+libnstest_root_not_isolated_relative_install_path := private_namespace_libs
 libnstest_root_not_isolated_ldflags := -Wl,--rpath,\$$ORIGIN/../private_namespace_libs_external \
                                        -Wl,--enable-new-dtags
 
 module := libnstest_root_not_isolated
-include $(LOCAL_PATH)/Android.build.target.testlib.mk
+include $(LOCAL_PATH)/Android.build.testlib.target.mk
 
 libnstest_private_external_src_files := namespaces_private.cpp
-libnstest_private_external_install_to_out_data_dir := private_namespace_libs_external
+libnstest_private_external_relative_install_path := private_namespace_libs_external
 module := libnstest_private_external
-include $(LOCAL_PATH)/Android.build.target.testlib.mk
+include $(LOCAL_PATH)/Android.build.testlib.target.mk
diff --git a/tests/libs/Android.build.testlib.mk b/tests/libs/Android.build.testlib.mk
index 5b688e4..407a389 100644
--- a/tests/libs/Android.build.testlib.mk
+++ b/tests/libs/Android.build.testlib.mk
@@ -17,6 +17,7 @@
 build_target := SHARED_LIBRARY
 build_type := host
 include $(TEST_PATH)/Android.build.mk
-build_type := target
-include $(TEST_PATH)/Android.build.mk
+bionic-loader-test-libs-host: $(LOCAL_MODULE)
+
+include $(LOCAL_PATH)/Android.build.testlib.target.mk
 
diff --git a/tests/libs/Android.build.testlib.target.mk b/tests/libs/Android.build.testlib.target.mk
new file mode 100644
index 0000000..143be5b
--- /dev/null
+++ b/tests/libs/Android.build.testlib.target.mk
@@ -0,0 +1,30 @@
+#
+# Copyright (C) 2014 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.
+#
+
+build_type := target
+# 1. Install test libraries to /data/nativetests../bionic-loader-test-libs/
+#    by default.
+ifeq ($($(module)_relative_install_path),)
+  $(module)_install_to_out_data_dir := bionic-loader-test-libs
+else
+  $(module)_install_to_out_data_dir := bionic-loader-test-libs/$($(module)_relative_install_path)
+endif
+# 2. Set dt_runpath to origin to resolve dependencies
+$(module)_ldflags += -Wl,--rpath,\$${ORIGIN} -Wl,--enable-new-dtags
+include $(TEST_PATH)/Android.build.mk
+
+bionic-loader-test-libs-target: $(LOCAL_MODULE)
+
diff --git a/tests/libs/Android.mk b/tests/libs/Android.mk
index 3c3d78b..94cc516 100644
--- a/tests/libs/Android.mk
+++ b/tests/libs/Android.mk
@@ -29,6 +29,7 @@
     $(LOCAL_PATH)/Android.build.linker_namespaces.mk \
     $(LOCAL_PATH)/Android.build.pthread_atfork.mk \
     $(LOCAL_PATH)/Android.build.testlib.mk \
+    $(LOCAL_PATH)/Android.build.testlib.target.mk \
     $(LOCAL_PATH)/Android.build.versioned_lib.mk \
     $(TEST_PATH)/Android.build.mk
 
@@ -51,12 +52,12 @@
 # create symlink to libdlext_test.so for symlink test
 # -----------------------------------------------------------------------------
 # Use = instead of := to defer the evaluation of $@
-$(TARGET_OUT)/lib/libdlext_test.so: PRIVATE_POST_INSTALL_CMD = \
+$(TARGET_OUT_DATA_NATIVE_TESTS)/bionic-loader-test-libs/libdlext_test.so: PRIVATE_POST_INSTALL_CMD = \
     $(hide) cd $(dir $@) && ln -sf $(notdir $@) libdlext_test_v2.so
 
 ifneq ($(TARGET_2ND_ARCH),)
 # link 64 bit .so
-$(TARGET_OUT)/lib64/libdlext_test.so: PRIVATE_POST_INSTALL_CMD = \
+$($(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_NATIVE_TESTS)/bionic-loader-test-libs/libdlext_test.so: PRIVATE_POST_INSTALL_CMD = \
     $(hide) cd $(dir $@) && ln -sf $(notdir $@) libdlext_test_v2.so
 endif
 
@@ -77,11 +78,12 @@
 
 libdlext_test_fd_shared_libraries := libtest_simple
 
-libdlext_test_fd_install_to_out_data_dir := $(module)
+libdlext_test_fd_relative_install_path := $(module)
+
+libdlext_test_fd_ldflags := -Wl,--rpath,\$${ORIGIN}/.. -Wl,--enable-new-dtags
+
 module_tag := optional
-build_type := target
-build_target := SHARED_LIBRARY
-include $(TEST_PATH)/Android.build.mk
+include $(LOCAL_PATH)/Android.build.testlib.target.mk
 
 
 # -----------------------------------------------------------------------------
@@ -94,22 +96,18 @@
 
 libdlext_test_zip_shared_libraries := libatest_simple_zip
 
-libdlext_test_zip_install_to_out_data_dir := $(module)
+libdlext_test_zip_relative_install_path := $(module)
 module_tag := optional
-build_type := target
-build_target := SHARED_LIBRARY
-include $(TEST_PATH)/Android.build.mk
+include $(LOCAL_PATH)/Android.build.testlib.target.mk
 
 module := libatest_simple_zip
 
 libatest_simple_zip_src_files := \
     dlopen_testlib_simple.cpp
 
-libatest_simple_zip_install_to_out_data_dir := $(module)
+libatest_simple_zip_relative_install_path := $(module)
 module_tag := optional
-build_type := target
-build_target := SHARED_LIBRARY
-include $(TEST_PATH)/Android.build.mk
+include $(LOCAL_PATH)/Android.build.testlib.target.mk
 
 # ----------------------------------------------------------------------------
 # Library with soname which does not match filename