blob: c1eaeecc5ca48a0788d06fc23ee0856865e38173 [file] [log] [blame]
//
// Copyright (C) 2012 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.
//
cc_defaults {
name: "bionic_tests_defaults",
host_supported: true,
cpp_std: "experimental",
target: {
darwin: {
enabled: false,
},
},
cflags: [
"-fstack-protector-all",
"-g",
"-Wall",
"-Wextra",
"-Wunused",
"-Werror",
"-fno-builtin",
// We want to test deprecated API too.
"-Wno-deprecated-declarations",
// For glibc.
"-D__STDC_LIMIT_MACROS",
],
stl: "libc++",
sanitize: {
address: false,
},
bootstrap: true,
}
// -----------------------------------------------------------------------------
// All standard tests.
// -----------------------------------------------------------------------------
// Test diagnostics emitted by clang. The library that results is useless; we
// just want to run '-Xclang -verify', which will fail if the diagnostics don't
// match up with what the source file says they should be.
cc_test_library {
name: "clang_diagnostic_tests",
cflags: [
"-Xclang",
"-verify",
],
srcs: ["sys_ioctl_diag_test.cpp"],
}
cc_test_library {
name: "libBionicStandardTests",
defaults: ["bionic_tests_defaults"],
srcs: [
"__aeabi_read_tp_test.cpp",
"alloca_test.cpp",
"android_get_device_api_level.cpp",
"arpa_inet_test.cpp",
"async_safe_test.cpp",
"assert_test.cpp",
"buffer_tests.cpp",
"bug_26110743_test.cpp",
"byteswap_test.cpp",
"complex_test.cpp",
"complex_force_long_double_test.cpp",
"ctype_test.cpp",
"dirent_test.cpp",
"elf_test.cpp",
"endian_test.cpp",
"errno_test.cpp",
"error_test.cpp",
"eventfd_test.cpp",
"fcntl_test.cpp",
"fdsan_test.cpp",
"fenv_test.cpp",
"float_test.cpp",
"ftw_test.cpp",
"getauxval_test.cpp",
"getcwd_test.cpp",
"glob_test.cpp",
"grp_pwd_test.cpp",
"grp_pwd_file_test.cpp",
"iconv_test.cpp",
"ifaddrs_test.cpp",
"ifunc_test.cpp",
"inttypes_test.cpp",
"iso646_test.c",
"langinfo_test.cpp",
"leak_test.cpp",
"libgen_basename_test.cpp",
"libgen_test.cpp",
"limits_test.cpp",
"linux_swab_test.cpp",
"locale_test.cpp",
"malloc_iterate_test.cpp",
"malloc_test.cpp",
"math_test.cpp",
"math_force_long_double_test.cpp",
"membarrier_test.cpp",
"mntent_test.cpp",
"netdb_test.cpp",
"net_if_test.cpp",
"netinet_ether_test.cpp",
"netinet_in_test.cpp",
"netinet_ip_icmp_test.cpp",
"netinet_udp_test.cpp",
"nl_types_test.cpp",
"poll_test.cpp",
"pthread_test.cpp",
"pty_test.cpp",
"regex_test.cpp",
"resolv_test.cpp",
"sched_test.cpp",
"scs_test.cpp",
"scsi_sg_test.cpp",
"search_test.cpp",
"semaphore_test.cpp",
"setjmp_test.cpp",
"signal_test.cpp",
"spawn_test.cpp",
"stack_protector_test.cpp",
"stack_protector_test_helper.cpp",
"stack_unwinding_test.cpp",
"stdalign_test.cpp",
"stdarg_test.cpp",
"stdatomic_test.cpp",
"stdbool_test.c",
"stdint_test.cpp",
"stdio_nofortify_test.cpp",
"stdio_test.cpp",
"stdio_ext_test.cpp",
"stdlib_test.cpp",
"stdnoreturn_test.cpp",
"string_nofortify_test.cpp",
"string_test.cpp",
"string_posix_strerror_r_test.cpp",
"strings_nofortify_test.cpp",
"strings_test.cpp",
"sstream_test.cpp",
"sys_epoll_test.cpp",
"sys_mman_test.cpp",
"sys_msg_test.cpp",
"sys_personality_test.cpp",
"sys_prctl_test.cpp",
"sys_procfs_test.cpp",
"sys_ptrace_test.cpp",
"sys_quota_test.cpp",
"sys_random_test.cpp",
"sys_resource_test.cpp",
"sys_select_test.cpp",
"sys_sem_test.cpp",
"sys_sendfile_test.cpp",
"sys_shm_test.cpp",
"sys_signalfd_test.cpp",
"sys_socket_test.cpp",
"sys_stat_test.cpp",
"sys_statvfs_test.cpp",
"sys_syscall_test.cpp",
"sys_sysinfo_test.cpp",
"sys_sysmacros_test.cpp",
"sys_time_test.cpp",
"sys_timex_test.cpp",
"sys_ttydefaults_test.cpp",
"sys_types_test.cpp",
"sys_uio_test.cpp",
"sys_un_test.cpp",
"sys_vfs_test.cpp",
"sys_xattr_test.cpp",
"system_properties_test.cpp",
"system_properties_test2.cpp",
"termios_test.cpp",
"tgmath_test.c",
"time_test.cpp",
"uchar_test.cpp",
"unistd_nofortify_test.cpp",
"unistd_test.cpp",
"utmp_test.cpp",
"wchar_test.cpp",
"wctype_test.cpp",
],
include_dirs: [
"bionic/libc",
],
target: {
bionic: {
whole_static_libs: [
"libasync_safe",
"libprocinfo",
"libsystemproperties",
],
},
},
static_libs: [
"libtinyxml2",
"liblog",
"libbase",
],
shared: {
enabled: false,
},
generated_headers: ["generated_android_ids"],
}
cc_test_library {
name: "libBionicElfTlsTests",
defaults: ["bionic_tests_defaults"],
srcs: [
"elftls_test.cpp",
],
include_dirs: [
"bionic/libc",
],
shared: {
enabled: false,
},
cflags: [
"-fno-emulated-tls",
],
}
cc_test_library {
name: "libBionicElfTlsLoaderTests",
defaults: ["bionic_tests_defaults"],
srcs: [
"elftls_dl_test.cpp",
],
include_dirs: [
"bionic/libc",
],
static_libs: [
"liblog",
"libbase",
],
shared: {
enabled: false,
},
cflags: [
"-fno-emulated-tls",
],
}
// -----------------------------------------------------------------------------
// Fortify tests.
// -----------------------------------------------------------------------------
cc_defaults {
name: "bionic_fortify_tests_defaults",
cflags: [
"-U_FORTIFY_SOURCE",
],
srcs: ["fortify_test_main.cpp"],
target: {
host: {
clang_cflags: ["-D__clang__"],
},
},
}
// If building this fails, then we have both FORTIFY and ASAN enabled, which
// isn't desirable. (Ideally, we'd emit FORTIFY diagnostics even with ASAN
// enabled, but that's not a reality today.) This is meant to be otherwise
// unused.
cc_test_library {
name: "fortify_disabled_for_asan",
cflags: [
"-Werror",
"-D_FORTIFY_SOURCE=2",
// "sanitize: address" doesn't work on platforms where libasan isn't
// enabled. Since the intent is just to build this, we can get away with
// passing this flag on its own.
"-fsanitize=address",
],
// Ignore that we don't have ASAN symbols linked in.
allow_undefined_symbols: true,
srcs: ["fortify_filecheck_diagnostics_test.cpp"],
}
// Ensure we don't use FORTIFY'ed functions with the static analyzer/clang-tidy:
// it can confuse these tools pretty easily. If this builds successfully, then
// __clang_analyzer__ overrode FORTIFY. Otherwise, FORTIFY was incorrectly
// enabled. The library that results from building this is meant to be unused.
cc_test_library {
name: "fortify_disabled_for_tidy",
cflags: [
"-Werror",
"-D_FORTIFY_SOURCE=2",
"-D__clang_analyzer__",
],
srcs: ["fortify_filecheck_diagnostics_test.cpp"],
}
cc_test_library {
name: "libfortify1-tests-clang",
defaults: [
"bionic_fortify_tests_defaults",
"bionic_tests_defaults",
],
cflags: [
"-D_FORTIFY_SOURCE=1",
"-DTEST_NAME=Fortify1_clang",
],
shared: {
enabled: false,
},
}
cc_test_library {
name: "libfortify2-tests-clang",
defaults: [
"bionic_fortify_tests_defaults",
"bionic_tests_defaults",
],
cflags: [
"-D_FORTIFY_SOURCE=2",
"-DTEST_NAME=Fortify2_clang",
],
shared: {
enabled: false,
},
}
// -----------------------------------------------------------------------------
// Library of all tests (excluding the dynamic linker tests).
// -----------------------------------------------------------------------------
cc_test_library {
name: "libBionicTests",
defaults: ["bionic_tests_defaults"],
whole_static_libs: [
"libBionicStandardTests",
"libBionicElfTlsTests",
"libfortify1-tests-clang",
"libfortify2-tests-clang",
],
shared: {
enabled: false,
},
}
cc_test_library {
name: "libBionicLoaderTests",
defaults: [
"bionic_tests_defaults",
"llvm-defaults",
],
srcs: [
"atexit_test.cpp",
"dl_test.cpp",
"dlfcn_symlink_support.cpp",
"dlfcn_test.cpp",
"link_test.cpp",
"pthread_dlfcn_test.cpp",
],
static_libs: [
"libbase",
],
include_dirs: [
"bionic/libc",
],
shared: {
enabled: false,
},
target: {
android: {
srcs: [
"cfi_test.cpp",
"dlext_test.cpp",
"libdl_test.cpp",
],
static_libs: [
"libmeminfo",
"libprocinfo",
"libziparchive",
"libLLVMObject",
"libLLVMBitReader",
"libLLVMMC",
"libLLVMMCParser",
"libLLVMCore",
"libLLVMSupport",
],
},
},
}
// -----------------------------------------------------------------------------
// Library of bionic customized gtest main function, with normal gtest output format,
// which is needed by bionic cts test.
// -----------------------------------------------------------------------------
cc_test_library {
name: "libBionicCtsGtestMain",
defaults: ["bionic_tests_defaults"],
srcs: [
"gtest_globals_cts.cpp",
"gtest_main.cpp",
],
shared: {
enabled: false,
},
whole_static_libs: [
"libgtest_isolated",
],
}
// -----------------------------------------------------------------------------
// Tests for the device using bionic's .so. Run with:
// adb shell /data/nativetest/bionic-unit-tests/bionic-unit-tests
// adb shell /data/nativetest64/bionic-unit-tests/bionic-unit-tests
// -----------------------------------------------------------------------------
cc_defaults {
name: "bionic_unit_tests_defaults",
host_supported: false,
whole_static_libs: [
"libBionicTests",
"libBionicLoaderTests",
"libBionicElfTlsLoaderTests",
],
static_libs: [
"libtinyxml2",
"liblog",
"libbase",
],
srcs: [
// TODO: Include __cxa_thread_atexit_test.cpp to glibc tests once it is upgraded (glibc 2.18+)
"__cxa_thread_atexit_test.cpp",
"gtest_globals.cpp",
"thread_local_test.cpp",
],
conlyflags: [
"-fexceptions",
"-fnon-call-exceptions",
],
ldflags: ["-Wl,--export-dynamic"],
include_dirs: ["bionic/libc"],
stl: "libc++_static",
target: {
android: {
shared_libs: [
"ld-android",
"libdl",
"libdl_preempt_test_1",
"libdl_preempt_test_2",
"libdl_test_df_1_global",
"libtest_elftls_shared_var",
"libtest_elftls_tprel",
],
static_libs: [
// The order of these libraries matters, do not shuffle them.
"libbase",
"libmeminfo",
"libziparchive",
"libz",
"libutils",
"libLLVMObject",
"libLLVMBitReader",
"libLLVMMC",
"libLLVMMCParser",
"libLLVMCore",
"libLLVMSupport",
],
ldflags: [
"-Wl,--rpath,${ORIGIN}/../bionic-loader-test-libs",
"-Wl,--enable-new-dtags",
],
},
},
}
cc_test {
name: "bionic-unit-tests",
gtest: false,
defaults: [
"bionic_unit_tests_defaults",
"bionic_tests_defaults",
],
srcs: [
"gtest_main.cpp",
],
static_libs: [
"libgtest_isolated",
],
target: {
android: {
shared_libs: ["libandroidicu"],
},
},
required: [
"cfi_test_helper",
"cfi_test_helper2",
"elftls_dlopen_ie_error_helper",
"exec_linker_helper",
"exec_linker_helper_lib",
"libtest_dt_runpath_a",
"libtest_dt_runpath_b",
"libtest_dt_runpath_c",
"libtest_dt_runpath_x",
"libtest_dt_runpath_y",
"libatest_simple_zip",
"libcfi-test",
"libcfi-test-bad",
"libdlext_test_different_soname",
"libdlext_test_fd",
"libdlext_test_norelro",
"libdlext_test_recursive",
"libdlext_test_runpath_zip_zipaligned",
"libdlext_test",
"libdlext_test_zip",
"libdlext_test_zip_zipaligned",
"libdl_preempt_test_1",
"libdl_preempt_test_2",
"libdl_test_df_1_global",
"libgnu-hash-table-library",
"libsysv-hash-table-library",
"libtestshared",
"libtest_atexit",
"libtest_check_order_dlsym_1_left",
"libtest_check_order_dlsym_2_right",
"libtest_check_order_dlsym_3_c",
"libtest_check_order_dlsym_a",
"libtest_check_order_dlsym_b",
"libtest_check_order_dlsym_d",
"libtest_check_order_dlsym",
"libtest_check_order_reloc_root_1",
"libtest_check_order_reloc_root_2",
"libtest_check_order_reloc_root",
"libtest_check_order_reloc_siblings_1",
"libtest_check_order_reloc_siblings_2",
"libtest_check_order_reloc_siblings_3",
"libtest_check_order_reloc_siblings_a",
"libtest_check_order_reloc_siblings_b",
"libtest_check_order_reloc_siblings_c_1",
"libtest_check_order_reloc_siblings_c_2",
"libtest_check_order_reloc_siblings_c",
"libtest_check_order_reloc_siblings_d",
"libtest_check_order_reloc_siblings_e",
"libtest_check_order_reloc_siblings_f",
"libtest_check_order_reloc_siblings",
"libtest_check_rtld_next_from_library",
"libtest_dlopen_df_1_global",
"libtest_dlopen_from_ctor_main",
"libtest_dlopen_from_ctor",
"libtest_dlopen_weak_undefined_func",
"libtest_dlsym_df_1_global",
"libtest_dlsym_from_this_child",
"libtest_dlsym_from_this_grandchild",
"libtest_dlsym_from_this",
"libtest_dlsym_weak_func",
"libtest_dt_runpath_d",
"libtest_elftls_dynamic",
"libtest_elftls_dynamic_filler_1",
"libtest_elftls_dynamic_filler_2",
"libtest_elftls_dynamic_filler_3",
"libtest_elftls_shared_var",
"libtest_elftls_shared_var_ie",
"libtest_elftls_tprel",
"libtest_empty",
"libtest_ifunc_variable_impl",
"libtest_ifunc_variable",
"libtest_ifunc",
"libtest_init_fini_order_child",
"libtest_init_fini_order_grand_child",
"libtest_init_fini_order_root2",
"libtest_init_fini_order_root",
"libtest_missing_symbol_child_public",
"libtest_missing_symbol_child_private",
"libtest_missing_symbol_root",
"libtest_missing_symbol",
"libtest_nodelete_1",
"libtest_nodelete_2",
"libtest_nodelete_dt_flags_1",
"libtest_pthread_atfork",
"libtest_relo_check_dt_needed_order_1",
"libtest_relo_check_dt_needed_order_2",
"libtest_relo_check_dt_needed_order",
"libtest_simple",
"libtest_two_parents_child",
"libtest_two_parents_parent1",
"libtest_two_parents_parent2",
"libtest_versioned_lib",
"libtest_versioned_libv1",
"libtest_versioned_libv2",
"libtest_versioned_otherlib_empty",
"libtest_versioned_otherlib",
"libtest_versioned_uselibv1",
"libtest_versioned_uselibv2_other",
"libtest_versioned_uselibv2",
"libtest_versioned_uselibv3_other",
"libtest_with_dependency_loop_a",
"libtest_with_dependency_loop_b",
"libtest_with_dependency_loop_c",
"libtest_with_dependency_loop",
"libtest_with_dependency",
"libtest_indirect_thread_local_dtor",
"libtest_invalid-empty_shdr_table.so",
"libtest_invalid-rw_load_segment.so",
"libtest_invalid-unaligned_shdr_offset.so",
"libtest_invalid-zero_shdr_table_content.so",
"libtest_invalid-zero_shdr_table_offset.so",
"libtest_invalid-zero_shentsize.so",
"libtest_invalid-zero_shstrndx.so",
"libtest_invalid-textrels.so",
"libtest_invalid-textrels2.so",
"libtest_thread_local_dtor",
"libtest_thread_local_dtor2",
"preinit_getauxval_test_helper",
"preinit_syscall_test_helper",
"libnstest_private_external",
"libnstest_dlopened",
"libnstest_private",
"libnstest_root_not_isolated",
"libnstest_root",
"libnstest_public",
"libnstest_public_internal",
"libnstest_ns_a_public1",
"libnstest_ns_a_public1_internal",
"libnstest_ns_b_public2",
"libnstest_ns_b_public3",
"ld_preload_test_helper",
"ld_preload_test_helper_lib1",
"ld_preload_test_helper_lib2",
"ld_config_test_helper",
"ld_config_test_helper_lib1",
"ld_config_test_helper_lib2",
"ld_config_test_helper_lib3",
],
}
// -----------------------------------------------------------------------------
// Tests for the device linked against bionic's static library. Run with:
// adb shell /data/nativetest/bionic-unit-tests-static/bionic-unit-tests-static
// adb shell /data/nativetest64/bionic-unit-tests-static/bionic-unit-tests-static
// -----------------------------------------------------------------------------
cc_test {
name: "bionic-unit-tests-static",
gtest: false,
defaults: ["bionic_tests_defaults"],
host_supported: false,
srcs: [
"gtest_preinit_debuggerd.cpp",
"gtest_globals.cpp",
"gtest_main.cpp",
// The Bionic allocator has its own C++ API. It isn't packaged into its
// own library, so it can only be tested when it's part of libc.a.
"bionic_allocator_test.cpp",
],
include_dirs: [
"bionic/libc",
],
whole_static_libs: [
"libBionicTests",
],
static_libs: [
"libm",
"libc",
"libdl",
"libtinyxml2",
"liblog",
"libbase",
"libdebuggerd_handler",
"libgtest_isolated",
"libtest_elftls_shared_var",
"libtest_elftls_tprel",
],
static_executable: true,
stl: "libc++_static",
// libclang_rt.builtins does not work with libm
// http://b/117167374
no_libcrt: true,
}
// -----------------------------------------------------------------------------
// Tests to run on the host and linked against glibc. Run with:
// cd bionic/tests; mm bionic-unit-tests-glibc-run
// -----------------------------------------------------------------------------
cc_test_host {
name: "bionic-unit-tests-glibc",
gtest: false,
defaults: ["bionic_tests_defaults"],
srcs: [
"atexit_test.cpp",
"dlfcn_symlink_support.cpp",
"dlfcn_test.cpp",
"dl_test.cpp",
"gtest_globals.cpp",
"gtest_main.cpp",
"pthread_dlfcn_test.cpp",
],
shared_libs: [
"libdl_preempt_test_1",
"libdl_preempt_test_2",
"libdl_test_df_1_global",
"libtest_elftls_shared_var",
"libtest_elftls_tprel",
],
whole_static_libs: [
"libBionicStandardTests",
"libBionicElfTlsTests",
"libBionicElfTlsLoaderTests",
"libfortify1-tests-clang",
"libfortify2-tests-clang",
],
static_libs: [
"libbase",
"liblog",
"libcutils",
"libgtest_isolated",
],
host_ldlibs: [
"-lresolv",
"-lutil",
],
include_dirs: [
"bionic/libc",
],
ldflags: [
"-Wl,--rpath,${ORIGIN}/../bionic-loader-test-libs",
"-Wl,--export-dynamic",
],
sanitize: {
never: false,
},
target: {
linux_bionic: {
enabled: false,
},
},
}
subdirs = ["*"]