Merge "Convert bionic benchmarks and tests to Android.bp"

This commit is contained in:
Treehugger Robot 2016-07-14 21:05:27 +00:00 committed by Gerrit Code Review
commit 55653cc33b
10 changed files with 1032 additions and 913 deletions

64
benchmarks/Android.bp Normal file
View file

@ -0,0 +1,64 @@
//
// Copyright (C) 2013 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-benchmarks-defaults",
cflags: [
"-O2",
"-fno-builtin",
"-Wall",
"-Wextra",
"-Werror",
"-Wunused",
],
srcs: [
"math_benchmark.cpp",
"property_benchmark.cpp",
"pthread_benchmark.cpp",
"semaphore_benchmark.cpp",
"stdio_benchmark.cpp",
"string_benchmark.cpp",
"time_benchmark.cpp",
"unistd_benchmark.cpp",
],
}
// Build benchmarks for the device (with bionic's .so). Run with:
// adb shell bionic-benchmarks32
// adb shell bionic-benchmarks64
cc_benchmark {
name: "bionic-benchmarks",
defaults: ["bionic-benchmarks-defaults"],
}
// We don't build a static benchmark executable because it's not usually
// useful. If you're trying to run the current benchmarks on an older
// release, it's (so far at least) always because you want to measure the
// performance of the old release's libc, and a static benchmark isn't
// going to let you do that.
// Build benchmarks for the host (against glibc!). Run with:
cc_benchmark_host {
name: "bionic-benchmarks-glibc",
defaults: ["bionic-benchmarks-defaults"],
host_ldlibs: ["-lrt"],
target: {
darwin: {
// Only supported on linux systems.
enabled: false,
},
},
}

View file

@ -1,94 +0,0 @@
#
# Copyright (C) 2013 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.
#
LOCAL_PATH := $(call my-dir)
benchmark_cflags := \
-O2 \
-fno-builtin \
-Wall \
-Wextra \
-Werror \
-Wunused \
benchmark_cppflags := \
benchmark_src_files := \
math_benchmark.cpp \
property_benchmark.cpp \
pthread_benchmark.cpp \
semaphore_benchmark.cpp \
stdio_benchmark.cpp \
string_benchmark.cpp \
time_benchmark.cpp \
unistd_benchmark.cpp \
# Build benchmarks for the device (with bionic's .so). Run with:
# adb shell bionic-benchmarks32
# adb shell bionic-benchmarks64
include $(CLEAR_VARS)
LOCAL_MODULE := bionic-benchmarks
LOCAL_MODULE_STEM_32 := bionic-benchmarks32
LOCAL_MODULE_STEM_64 := bionic-benchmarks64
LOCAL_MULTILIB := both
LOCAL_CFLAGS := $(benchmark_cflags)
LOCAL_CPPFLAGS := $(benchmark_cppflags)
LOCAL_SRC_FILES := $(benchmark_src_files)
include $(BUILD_NATIVE_BENCHMARK)
# We don't build a static benchmark executable because it's not usually
# useful. If you're trying to run the current benchmarks on an older
# release, it's (so far at least) always because you want to measure the
# performance of the old release's libc, and a static benchmark isn't
# going to let you do that.
# Only supported on linux systems.
ifeq ($(HOST_OS),linux)
# Build benchmarks for the host (against glibc!). Run with:
include $(CLEAR_VARS)
LOCAL_MODULE := bionic-benchmarks-glibc
LOCAL_MODULE_STEM_32 := bionic-benchmarks-glibc32
LOCAL_MODULE_STEM_64 := bionic-benchmarks-glibc64
LOCAL_MULTILIB := both
LOCAL_CFLAGS := $(benchmark_cflags)
LOCAL_CPPFLAGS := $(benchmark_cppflags)
LOCAL_LDFLAGS := -lrt
LOCAL_SRC_FILES := $(benchmark_src_files)
LOCAL_STATIC_LIBRARIES := libgoogle-benchmark
# TODO: BUILD_HOST_NATIVE_BENCHMARK
include $(BUILD_HOST_EXECUTABLE)
endif
ifeq ($(HOST_OS)-$(HOST_ARCH),$(filter $(HOST_OS)-$(HOST_ARCH),linux-x86 linux-x86_64))
include $(LOCAL_PATH)/../build/run-on-host.mk
ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),x86 x86_64))
bionic-benchmarks-run-on-host32: bionic-benchmarks bionic-prepare-run-on-host
ANDROID_DATA=$(TARGET_OUT_DATA) \
ANDROID_ROOT=$(TARGET_OUT) \
$(TARGET_OUT_EXECUTABLES)/bionic-benchmarks32 $(BIONIC_BENCHMARKS_FLAGS)
endif
ifeq ($(TARGET_IS_64_BIT),true)
bionic-benchmarks-run-on-host64: bionic-benchmarks bionic-prepare-run-on-host
ANDROID_DATA=$(TARGET_OUT_DATA) \
ANDROID_ROOT=$(TARGET_OUT) \
$(TARGET_OUT_EXECUTABLES)/bionic-benchmarks64 $(BIONIC_BENCHMARKS_FLAGS)
endif
endif

33
benchmarks/run-on-host.sh Executable file
View file

@ -0,0 +1,33 @@
#!/bin/bash -e
. $(dirname $0)/../build/run-on-host.sh
if [ "$1" = glibc ]; then
m -j bionic-benchmarks-glibc
(
cd ${ANDROID_BUILD_TOP}
export ANDROID_DATA=${TARGET_OUT_DATA}
export ANDROID_ROOT=${TARGET_OUT}
${HOST_OUT}/nativetest64/bionic-benchmarks-glibc/bionic-benchmarks-glibc $@
)
exit 0
elif [ "$1" != 32 -a "$1" != 64 ]; then
echo "Usage: $0 [ 32 | 64 | glibc ] [gtest flags]"
exit 1
fi
if [ ${HOST_OS}-${HOST_ARCH} = linux-x86 -o ${HOST_OS}-${HOST_ARCH} = linux-x86_64 ]; then
prepare $1 bionic-benchmarks
if [ ${TARGET_ARCH} = x86 -o ${TARGET_ARCH} = x86_64 ]; then
(
cd ${ANDROID_BUILD_TOP}
export ANDROID_DATA=${TARGET_OUT_DATA}
export ANDROID_ROOT=${TARGET_OUT}
${NATIVETEST}/bionic-benchmarks/bionic-benchmarks $@
)
else
echo "$0 not supported on TARGET_ARCH=$TARGET_ARCH"
fi
fi

View file

@ -1,44 +0,0 @@
#
# 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.
#
# Include once
ifneq ($(bionic_run_on_host_mk_included),true)
bionic_run_on_host_mk_included:=true
ifneq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),arm mips x86))
LINKER = linker64
else
LINKER = linker
endif
ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),x86 x86_64))
# gtest needs ANDROID_DATA/local/tmp for death test output.
# Make sure to create ANDROID_DATA/local/tmp if doesn't exist.
# bionic itself should always work relative to ANDROID_DATA or ANDROID_ROOT.
bionic-prepare-run-on-host: $(TARGET_OUT_EXECUTABLES)/$(LINKER) $(TARGET_OUT)/etc/hosts $(TARGET_OUT_EXECUTABLES)/sh
if [ ! -d /system ]; then \
echo "Attempting to create /system"; \
sudo mkdir -p -m 0777 /system; \
fi
mkdir -p $(TARGET_OUT_DATA)/local/tmp
ln -fs `realpath $(TARGET_OUT)/bin` /system/
ln -fs `realpath $(TARGET_OUT)/etc` /system/
ln -fs `realpath $(TARGET_OUT)/lib` /system/
if [ -d "$(TARGET_OUT)/lib64" ]; then \
ln -fs `realpath $(TARGET_OUT)/lib64` /system/; \
fi
endif
endif

47
build/run-on-host.sh Normal file
View file

@ -0,0 +1,47 @@
#!/bin/bash -e
source ${ANDROID_BUILD_TOP}/build/envsetup.sh
TARGET_ARCH=$(get_build_var TARGET_ARCH)
TARGET_OUT=$(get_build_var TARGET_OUT)
TARGET_OUT_EXECUTABLES=$(get_build_var TARGET_OUT_EXECUTABLES)
TARGET_OUT_DATA=$(get_build_var TARGET_OUT_DATA)
HOST_OS=$(get_build_var HOST_OS)
HOST_ARCH=$(get_build_var HOST_ARCH)
HOST_OUT=$(get_build_var HOST_OUT)
function prepare()
{
BITS=$1
shift
NATIVETEST=${TARGET_OUT_DATA}/nativetest
if [ "${BITS}" = 64 ]; then
NATIVETEST=${NATIVETEST}64
fi
if [ ${TARGET_ARCH} = arm -o ${TARGET_ARCH} = mips -o ${TARGET_ARCH} = x86 ]; then
LINKER=${TARGET_OUT_EXECUTABLES}/linker
else
LINKER="${TARGET_OUT_EXECUTABLES}/linker64 ${TARGET_OUT_EXECUTABLES}/linker"
fi
if [ ${TARGET_ARCH} = x86 -o ${TARGET_ARCH} = x86_64 ]; then
m -j ${LINKER} ${TARGET_OUT}/etc/hosts ${TARGET_OUT_EXECUTABLES}/sh $@
if [ ! -d /system ]; then
echo "Attempting to create /system";
sudo mkdir -p -m 0777 /system;
fi
(
cd ${ANDROID_BUILD_TOP}
mkdir -p ${TARGET_OUT_DATA}/local/tmp
ln -fs `realpath ${TARGET_OUT}/bin` /system/
ln -fs `realpath ${TARGET_OUT}/etc` /system/
ln -fs `realpath ${TARGET_OUT}/lib` /system/
if [ -d "${TARGET_OUT}/lib64" ]; then
ln -fs `realpath ${TARGET_OUT}/lib64` /system/;
fi
)
fi
}

411
tests/Android.bp Normal file
View file

@ -0,0 +1,411 @@
//
// 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,
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: {
never: true,
},
}
// -----------------------------------------------------------------------------
// All standard tests.
// -----------------------------------------------------------------------------
cc_test_library {
name: "libBionicStandardTests",
defaults: ["bionic_tests_defaults"],
srcs: [
"arpa_inet_test.cpp",
"buffer_tests.cpp",
"bug_26110743_test.cpp",
"complex_test.cpp",
"ctype_test.cpp",
"dirent_test.cpp",
"error_test.cpp",
"eventfd_test.cpp",
"fcntl_test.cpp",
"fenv_test.cpp",
"ftw_test.cpp",
"getauxval_test.cpp",
"getcwd_test.cpp",
"grp_pwd_test.cpp",
"ifaddrs_test.cpp",
"inttypes_test.cpp",
"libc_logging_test.cpp",
"libgen_basename_test.cpp",
"libgen_test.cpp",
"locale_test.cpp",
"malloc_test.cpp",
"math_test.cpp",
"mntent_test.cpp",
"netdb_test.cpp",
"net_if_test.cpp",
"netinet_ether_test.cpp",
"netinet_in_test.cpp",
"netinet_udp_test.cpp",
"nl_types_test.cpp",
"pthread_test.cpp",
"pty_test.cpp",
"regex_test.cpp",
"resolv_test.cpp",
"sched_test.cpp",
"search_test.cpp",
"semaphore_test.cpp",
"setjmp_test.cpp",
"signal_test.cpp",
"stack_protector_test.cpp",
"stack_protector_test_helper.cpp",
"stack_unwinding_test.cpp",
"stdatomic_test.cpp",
"stdint_test.cpp",
"stdio_nofortify_test.cpp",
"stdio_test.cpp",
"stdio_ext_test.cpp",
"stdlib_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_personality_test.cpp",
"sys_prctl_test.cpp",
"sys_procfs_test.cpp",
"sys_ptrace_test.cpp",
"sys_quota_test.cpp",
"sys_resource_test.cpp",
"sys_select_test.cpp",
"sys_sendfile_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_types_test.cpp",
"sys_uio_test.cpp",
"sys_vfs_test.cpp",
"sys_xattr_test.cpp",
"system_properties_test.cpp",
"time_test.cpp",
"uchar_test.cpp",
"uniqueptr_test.cpp",
"unistd_nofortify_test.cpp",
"unistd_test.cpp",
"utmp_test.cpp",
"wchar_test.cpp",
"wctype_test.cpp",
],
include_dirs: [
"bionic/libc",
"external/tinyxml2",
],
static_libs: ["libbase"],
host_ldlibs: ["-lrt"],
}
// -----------------------------------------------------------------------------
// Fortify tests.
// -----------------------------------------------------------------------------
cc_defaults {
name: "bionic_fortify_tests_defaults",
cflags: [
"-Wno-error",
"-U_FORTIFY_SOURCE",
],
srcs: ["fortify_test_main.cpp"],
target: {
host: {
clang_cflags: ["-D__clang__"],
},
},
}
cc_test_library {
name: "libfortify1-tests-gcc",
defaults: ["bionic_fortify_tests_defaults", "bionic_tests_defaults"],
clang: false,
cflags: [
"-D_FORTIFY_SOURCE=1",
"-DTEST_NAME=Fortify1_gcc"
],
}
cc_test_library {
name: "libfortify2-tests-gcc",
defaults: ["bionic_fortify_tests_defaults", "bionic_tests_defaults"],
clang: false,
cflags: [
"-D_FORTIFY_SOURCE=2",
"-DTEST_NAME=Fortify2_gcc"
],
}
cc_test_library {
name: "libfortify1-tests-clang",
defaults: ["bionic_fortify_tests_defaults", "bionic_tests_defaults"],
clang: true,
cflags: [
"-D_FORTIFY_SOURCE=1",
"-DTEST_NAME=Fortify1_clang"
],
}
cc_test_library {
name: "libfortify2-tests-clang",
defaults: ["bionic_fortify_tests_defaults", "bionic_tests_defaults"],
clang: true,
cflags: [
"-D_FORTIFY_SOURCE=2",
"-DTEST_NAME=Fortify2_clang"
],
}
// -----------------------------------------------------------------------------
// Library of all tests (excluding the dynamic linker tests).
// -----------------------------------------------------------------------------
cc_test_library {
name: "libBionicTests",
defaults: ["bionic_tests_defaults"],
whole_static_libs: [
"libBionicStandardTests",
"libfortify1-tests-gcc",
"libfortify2-tests-gcc",
"libfortify1-tests-clang",
"libfortify2-tests-clang",
],
}
// -----------------------------------------------------------------------------
// Library of bionic customized gtest main function, with simplified output format.
// -----------------------------------------------------------------------------
cc_test_library {
name: "libBionicGtestMain",
defaults: ["bionic_tests_defaults"],
srcs: ["gtest_main.cpp"],
target: {
darwin: {
enabled: true,
},
},
}
// -----------------------------------------------------------------------------
// 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_main.cpp"],
cppflags: ["-DUSING_GTEST_OUTPUT_FORMAT"],
}
// -----------------------------------------------------------------------------
// Tests for the device using bionic's .so. Run with:
// adb shell /data/nativetest/bionic-unit-tests/bionic-unit-tests32
// adb shell /data/nativetest/bionic-unit-tests/bionic-unit-tests64
// adb shell /data/nativetest/bionic-unit-tests/bionic-unit-tests-gcc32
// adb shell /data/nativetest/bionic-unit-tests/bionic-unit-tests-gcc64
// -----------------------------------------------------------------------------
cc_defaults {
name: "bionic_unit_tests_defaults",
host_supported: false,
whole_static_libs: [
"libBionicTests",
"libBionicGtestMain",
],
static_libs: [
"libtinyxml2",
"liblog",
"libbase",
],
srcs: [
// TODO: Include __cxa_thread_atexit_test.cpp to glibc tests once it is upgraded (glibc 2.18+)
"atexit_test.cpp",
"dl_test.cpp",
"dlext_test.cpp",
"__cxa_thread_atexit_test.cpp",
"dlfcn_test.cpp",
"libdl_test.cpp",
"pthread_dlfcn_test.cpp",
"thread_local_test.cpp",
],
conlyflags: [
"-fexceptions",
"-fnon-call-exceptions",
],
ldflags: ["-Wl,--export-dynamic"],
include_dirs: ["bionic/libc"],
target: {
android: {
shared_libs: [
"libdl",
"libpagemap",
"libdl_preempt_test_1",
"libdl_preempt_test_2",
"libdl_test_df_1_global",
],
static_libs: [
// The order of these libraries matters, do not shuffle them.
"libbase",
"libziparchive",
"libz",
"libutils",
],
},
}
}
cc_test {
name: "bionic-unit-tests",
defaults: ["bionic_unit_tests_defaults", "bionic_tests_defaults"],
clang: true,
}
cc_test {
name: "bionic-unit-tests-gcc",
defaults: ["bionic_unit_tests_defaults", "bionic_tests_defaults"],
clang: false,
}
// -----------------------------------------------------------------------------
// Tests for the device linked against bionic's static library. Run with:
// adb shell /data/nativetest/bionic-unit-tests-static/bionic-unit-tests-static32
// adb shell /data/nativetest/bionic-unit-tests-static/bionic-unit-tests-static64
// -----------------------------------------------------------------------------
cc_test {
name: "bionic-unit-tests-static",
defaults: ["bionic_tests_defaults"],
host_supported: false,
whole_static_libs: [
"libBionicTests",
"libBionicGtestMain",
],
static_libs: [
"libm",
"libc",
"libc++_static",
"libdl",
"libtinyxml2",
"liblog",
"libbase",
],
static_executable: true,
stl: "libc++_static",
// libc and libc++ both define std::nothrow. libc's is a private symbol, but this
// still causes issues when linking libc.a and libc++.a, since private isn't
// effective until it has been linked. To fix this, just allow multiple symbol
// definitions for the static tests.
ldflags: ["-Wl,--allow-multiple-definition"],
}
// -----------------------------------------------------------------------------
// 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",
defaults: ["bionic_tests_defaults"],
srcs: [
"atexit_test.cpp",
"dlfcn_test.cpp",
"dl_test.cpp",
"pthread_dlfcn_test.cpp",
],
shared_libs: [
"libdl_preempt_test_1",
"libdl_preempt_test_2",
"libdl_test_df_1_global",
],
whole_static_libs: [
"libBionicStandardTests",
"libBionicGtestMain",
"libfortify1-tests-gcc",
"libfortify2-tests-gcc",
"libfortify1-tests-clang",
"libfortify2-tests-clang",
],
static_libs: [
"libbase",
"liblog",
"libcutils",
],
host_ldlibs: [
"-lresolv",
"-lrt",
"-ldl",
"-lutil",
],
include_dirs: ["bionic/libc"],
ldflags: ["-Wl,--export-dynamic"],
sanitize: {
never: false,
},
}
subdirs = ["libs"]

View file

@ -16,426 +16,14 @@
LOCAL_PATH := $(call my-dir)
# -----------------------------------------------------------------------------
# Unit tests.
# -----------------------------------------------------------------------------
ifeq ($(HOST_OS)-$(HOST_ARCH),$(filter $(HOST_OS)-$(HOST_ARCH),linux-x86 linux-x86_64))
build_host := true
else
build_host := false
endif
common_additional_dependencies := $(LOCAL_PATH)/Android.mk $(LOCAL_PATH)/Android.build.mk
# -----------------------------------------------------------------------------
# All standard tests.
# -----------------------------------------------------------------------------
test_cflags = \
-fstack-protector-all \
-g \
-Wall -Wextra -Wunused \
-Werror \
-fno-builtin \
# We want to test deprecated API too.
test_cflags += \
-Wno-deprecated-declarations \
test_cflags += -D__STDC_LIMIT_MACROS # For glibc.
test_cppflags := \
libBionicStandardTests_src_files := \
arpa_inet_test.cpp \
buffer_tests.cpp \
bug_26110743_test.cpp \
complex_test.cpp \
ctype_test.cpp \
dirent_test.cpp \
error_test.cpp \
eventfd_test.cpp \
fcntl_test.cpp \
fenv_test.cpp \
ftw_test.cpp \
getauxval_test.cpp \
getcwd_test.cpp \
grp_pwd_test.cpp \
ifaddrs_test.cpp \
inttypes_test.cpp \
libc_logging_test.cpp \
libgen_basename_test.cpp \
libgen_test.cpp \
locale_test.cpp \
malloc_test.cpp \
math_test.cpp \
mntent_test.cpp \
netdb_test.cpp \
net_if_test.cpp \
netinet_ether_test.cpp \
netinet_in_test.cpp \
netinet_udp_test.cpp \
nl_types_test.cpp \
pthread_test.cpp \
pty_test.cpp \
regex_test.cpp \
resolv_test.cpp \
sched_test.cpp \
search_test.cpp \
semaphore_test.cpp \
setjmp_test.cpp \
signal_test.cpp \
stack_protector_test.cpp \
stack_protector_test_helper.cpp \
stack_unwinding_test.cpp \
stdatomic_test.cpp \
stdint_test.cpp \
stdio_nofortify_test.cpp \
stdio_test.cpp \
stdio_ext_test.cpp \
stdlib_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_personality_test.cpp \
sys_prctl_test.cpp \
sys_procfs_test.cpp \
sys_ptrace_test.cpp \
sys_quota_test.cpp \
sys_resource_test.cpp \
sys_select_test.cpp \
sys_sendfile_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_types_test.cpp \
sys_uio_test.cpp \
sys_vfs_test.cpp \
sys_xattr_test.cpp \
system_properties_test.cpp \
time_test.cpp \
uchar_test.cpp \
uniqueptr_test.cpp \
unistd_nofortify_test.cpp \
unistd_test.cpp \
utmp_test.cpp \
wchar_test.cpp \
wctype_test.cpp \
libBionicStandardTests_cflags := \
$(test_cflags) \
libBionicStandardTests_cppflags := \
$(test_cppflags) \
libBionicStandardTests_c_includes := \
bionic/libc \
external/tinyxml2 \
libBionicStandardTests_static_libraries := \
libbase \
libBionicStandardTests_ldlibs_host := \
-lrt \
module := libBionicStandardTests
module_tag := optional
build_type := target
build_target := STATIC_TEST_LIBRARY
include $(LOCAL_PATH)/Android.build.mk
build_type := host
include $(LOCAL_PATH)/Android.build.mk
# -----------------------------------------------------------------------------
# Fortify tests.
# -----------------------------------------------------------------------------
$(foreach compiler,gcc clang, \
$(foreach test,1 2, \
$(eval fortify$(test)-tests-$(compiler)_cflags := \
$(test_cflags) \
-Wno-error \
-U_FORTIFY_SOURCE \
-D_FORTIFY_SOURCE=$(test) \
-DTEST_NAME=Fortify$(test)_$(compiler)); \
$(eval fortify$(test)-tests-$(compiler)_src_files := \
fortify_test_main.cpp); \
$(eval fortify_libs += fortify$(test)-tests-$(compiler)); \
) \
)
fortify1-tests-gcc_clang_target := false
module := fortify1-tests-gcc
module_tag := optional
build_type := target
build_target := STATIC_TEST_LIBRARY
include $(LOCAL_PATH)/Android.build.mk
build_type := host
include $(LOCAL_PATH)/Android.build.mk
fortify2-tests-gcc_clang_target := false
module := fortify2-tests-gcc
module_tag := optional
build_type := target
build_target := STATIC_TEST_LIBRARY
include $(LOCAL_PATH)/Android.build.mk
build_type := host
include $(LOCAL_PATH)/Android.build.mk
fortify1-tests-clang_clang_target := true
fortify1-tests-clang_cflags_host := -D__clang__
module := fortify1-tests-clang
module_tag := optional
build_type := target
build_target := STATIC_TEST_LIBRARY
include $(LOCAL_PATH)/Android.build.mk
build_type := host
include $(LOCAL_PATH)/Android.build.mk
fortify2-tests-clang_clang_target := true
fortify2-tests-clang_cflags_host := -D__clang__
module := fortify2-tests-clang
module_tag := optional
build_type := target
build_target := STATIC_TEST_LIBRARY
include $(LOCAL_PATH)/Android.build.mk
build_type := host
include $(LOCAL_PATH)/Android.build.mk
# -----------------------------------------------------------------------------
# Library of all tests (excluding the dynamic linker tests).
# -----------------------------------------------------------------------------
libBionicTests_whole_static_libraries := \
libBionicStandardTests \
$(fortify_libs) \
module := libBionicTests
module_tag := optional
build_type := target
build_target := STATIC_TEST_LIBRARY
include $(LOCAL_PATH)/Android.build.mk
build_type := host
include $(LOCAL_PATH)/Android.build.mk
# -----------------------------------------------------------------------------
# Library of bionic customized gtest main function, with simplified output format.
# -----------------------------------------------------------------------------
libBionicGtestMain_src_files := gtest_main.cpp
libBionicGtestMain_cflags := $(test_cflags)
libBionicGtestMain_cppflags := $(test_cppflags)
module := libBionicGtestMain
module_tag := optional
build_type := target
build_target := STATIC_TEST_LIBRARY
include $(LOCAL_PATH)/Android.build.mk
build_type := host
ifeq ($(HOST_OS),$(filter $(HOST_OS),linux darwin))
saved_build_host := $(build_host)
build_host := true
include $(LOCAL_PATH)/Android.build.mk
build_host := $(saved_build_host)
endif
# -----------------------------------------------------------------------------
# Library of bionic customized gtest main function, with normal gtest output format,
# which is needed by bionic cts test.
# -----------------------------------------------------------------------------
libBionicCtsGtestMain_src_files := gtest_main.cpp
libBionicCtsGtestMain_cflags := $(test_cflags)
libBionicCtsGtestMain_cppflags := $(test_cppflags) -DUSING_GTEST_OUTPUT_FORMAT \
module := libBionicCtsGtestMain
module_tag := optional
build_type := target
build_target := STATIC_TEST_LIBRARY
include $(LOCAL_PATH)/Android.build.mk
build_type := host
include $(LOCAL_PATH)/Android.build.mk
# -----------------------------------------------------------------------------
# Tests for the device using bionic's .so. Run with:
# adb shell /data/nativetest/bionic-unit-tests/bionic-unit-tests32
# adb shell /data/nativetest/bionic-unit-tests/bionic-unit-tests64
# adb shell /data/nativetest/bionic-unit-tests/bionic-unit-tests-gcc32
# adb shell /data/nativetest/bionic-unit-tests/bionic-unit-tests-gcc64
# -----------------------------------------------------------------------------
common_bionic-unit-tests_whole_static_libraries := \
libBionicTests \
libBionicGtestMain \
common_bionic-unit-tests_static_libraries := \
libtinyxml2 \
liblog \
libbase \
# TODO: Include __cxa_thread_atexit_test.cpp to glibc tests once it is upgraded (glibc 2.18+)
common_bionic-unit-tests_src_files := \
atexit_test.cpp \
dl_test.cpp \
dlext_test.cpp \
__cxa_thread_atexit_test.cpp \
dlfcn_test.cpp \
libdl_test.cpp \
pthread_dlfcn_test.cpp \
thread_local_test.cpp \
common_bionic-unit-tests_cflags := $(test_cflags)
common_bionic-unit-tests_conlyflags := \
-fexceptions \
-fnon-call-exceptions \
common_bionic-unit-tests_cppflags := $(test_cppflags)
common_bionic-unit-tests_ldflags := \
-Wl,--export-dynamic
common_bionic-unit-tests_c_includes := \
bionic/libc \
common_bionic-unit-tests_shared_libraries_target := \
libdl \
libpagemap \
libdl_preempt_test_1 \
libdl_preempt_test_2 \
libdl_test_df_1_global \
# The order of these libraries matters, do not shuffle them.
common_bionic-unit-tests_static_libraries_target := \
libbase \
libziparchive \
libz \
libutils \
module_tag := optional
build_type := target
build_target := NATIVE_TEST
module := bionic-unit-tests
bionic-unit-tests_clang_target := true
bionic-unit-tests_whole_static_libraries := $(common_bionic-unit-tests_whole_static_libraries)
bionic-unit-tests_static_libraries := $(common_bionic-unit-tests_static_libraries)
bionic-unit-tests_src_files := $(common_bionic-unit-tests_src_files)
bionic-unit-tests_cflags := $(common_bionic-unit-tests_cflags)
bionic-unit-tests_conlyflags := $(common_bionic-unit-tests_conlyflags)
bionic-unit-tests_cppflags := $(common_bionic-unit-tests_cppflags)
bionic-unit-tests_ldflags := $(common_bionic-unit-tests_ldflags)
bionic-unit-tests_c_includes := $(common_bionic-unit-tests_c_includes)
bionic-unit-tests_shared_libraries_target := $(common_bionic-unit-tests_shared_libraries_target)
bionic-unit-tests_static_libraries_target := $(common_bionic-unit-tests_static_libraries_target)
include $(LOCAL_PATH)/Android.build.mk
module := bionic-unit-tests-gcc
bionic-unit-tests-gcc_clang_target := false
bionic-unit-tests-gcc_whole_static_libraries := $(common_bionic-unit-tests_whole_static_libraries)
bionic-unit-tests-gcc_static_libraries := $(common_bionic-unit-tests_static_libraries)
bionic-unit-tests-gcc_src_files := $(common_bionic-unit-tests_src_files)
bionic-unit-tests-gcc_cflags := $(common_bionic-unit-tests_cflags)
bionic-unit-tests-gcc_conlyflags := $(common_bionic-unit-tests_conlyflags)
bionic-unit-tests-gcc_cppflags := $(common_bionic-unit-tests_cppflags)
bionic-unit-tests-gcc_ldflags := $(common_bionic-unit-tests_ldflags)
bionic-unit-tests-gcc_c_includes := $(common_bionic-unit-tests_c_includes)
bionic-unit-tests-gcc_shared_libraries_target := $(common_bionic-unit-tests_shared_libraries_target)
bionic-unit-tests-gcc_static_libraries_target := $(common_bionic-unit-tests_static_libraries_target)
include $(LOCAL_PATH)/Android.build.mk
# -----------------------------------------------------------------------------
# Tests for the device linked against bionic's static library. Run with:
# adb shell /data/nativetest/bionic-unit-tests-static/bionic-unit-tests-static32
# adb shell /data/nativetest/bionic-unit-tests-static/bionic-unit-tests-static64
# -----------------------------------------------------------------------------
bionic-unit-tests-static_whole_static_libraries := \
libBionicTests \
libBionicGtestMain \
bionic-unit-tests-static_static_libraries := \
libm \
libc \
libc++_static \
libdl \
libtinyxml2 \
liblog \
libbase \
bionic-unit-tests-static_force_static_executable := true
# libc and libc++ both define std::nothrow. libc's is a private symbol, but this
# still causes issues when linking libc.a and libc++.a, since private isn't
# effective until it has been linked. To fix this, just allow multiple symbol
# definitions for the static tests.
bionic-unit-tests-static_ldflags := -Wl,--allow-multiple-definition
module := bionic-unit-tests-static
module_tag := optional
build_type := target
build_target := NATIVE_TEST
include $(LOCAL_PATH)/Android.build.mk
# -----------------------------------------------------------------------------
# Tests to run on the host and linked against glibc. Run with:
# cd bionic/tests; mm bionic-unit-tests-glibc-run
# -----------------------------------------------------------------------------
ifeq ($(HOST_OS)-$(HOST_ARCH),$(filter $(HOST_OS)-$(HOST_ARCH),linux-x86 linux-x86_64))
bionic-unit-tests-glibc_src_files := \
atexit_test.cpp \
dlfcn_test.cpp \
dl_test.cpp \
pthread_dlfcn_test.cpp \
bionic-unit-tests-glibc_shared_libraries := \
libdl_preempt_test_1 \
libdl_preempt_test_2
bionic-unit-tests-glibc_shared_libraries += libdl_test_df_1_global
bionic-unit-tests-glibc_whole_static_libraries := \
libBionicStandardTests \
libBionicGtestMain \
$(fortify_libs) \
bionic-unit-tests-glibc_static_libraries := \
libbase \
liblog \
libcutils \
bionic-unit-tests-glibc_ldlibs := \
-lresolv -lrt -ldl -lutil \
bionic-unit-tests-glibc_c_includes := \
bionic/libc \
bionic-unit-tests-glibc_cflags := $(test_cflags)
bionic-unit-tests-glibc_cppflags := $(test_cppflags)
bionic-unit-tests-glibc_ldflags := -Wl,--export-dynamic
bionic-unit-tests-glibc_allow_asan := true
module := bionic-unit-tests-glibc
module_tag := optional
build_type := host
build_target := NATIVE_TEST
include $(LOCAL_PATH)/Android.build.mk
# -----------------------------------------------------------------------------
# Compile time tests.
# -----------------------------------------------------------------------------
@ -483,52 +71,6 @@ LOCAL_CPPFLAGS += -fno-color-diagnostics
LOCAL_SRC_FILES :=
include $(BUILD_STATIC_LIBRARY)
# -----------------------------------------------------------------------------
# Host glibc tests.
# -----------------------------------------------------------------------------
# gtest needs ANDROID_DATA/local/tmp for death test output.
# Make sure to create ANDROID_DATA/local/tmp if doesn't exist.
# Use the current target out directory as ANDROID_DATA.
# BIONIC_TEST_FLAGS is either empty or it comes from the user.
.PHONY: bionic-unit-tests-glibc-run
bionic-unit-tests-glibc-run: bionic-unit-tests-glibc
mkdir -p $(TARGET_OUT_DATA)/local/tmp
ANDROID_DATA=$(TARGET_OUT_DATA) \
ANDROID_ROOT=$(TARGET_OUT) \
$(HOST_OUT_EXECUTABLES)/bionic-unit-tests-glibc64 $(BIONIC_TEST_FLAGS)
# -----------------------------------------------------------------------------
# Run the unit tests built against x86 bionic on an x86 host.
# -----------------------------------------------------------------------------
include $(LOCAL_PATH)/../build/run-on-host.mk
ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),x86 x86_64))
TEST_TIMEOUT := 0
# BIONIC_TEST_FLAGS is either empty or it comes from the user.
.PHONY: bionic-unit-tests-run-on-host32
bionic-unit-tests-run-on-host32: bionic-unit-tests bionic-prepare-run-on-host
ANDROID_DATA=$(TARGET_OUT_DATA) \
ANDROID_DNS_MODE=local \
ANDROID_ROOT=$(TARGET_OUT) \
timeout $(TEST_TIMEOUT) \
$(TARGET_OUT_DATA)/nativetest/bionic-unit-tests/bionic-unit-tests32 $(BIONIC_TEST_FLAGS)
ifeq ($(TARGET_IS_64_BIT),true)
# add target to run lp64 tests
.PHONY: bionic-unit-tests-run-on-host64
bionic-unit-tests-run-on-host64: bionic-unit-tests bionic-prepare-run-on-host
ANDROID_DATA=$(TARGET_OUT_DATA) \
ANDROID_DNS_MODE=local \
ANDROID_ROOT=$(TARGET_OUT) \
timeout $(TEST_TIMEOUT) \
$(TARGET_OUT_DATA)/nativetest64/bionic-unit-tests/bionic-unit-tests64 $(BIONIC_TEST_FLAGS)
endif
endif # x86 x86_64
endif # linux-x86
include $(call first-makefiles-under,$(LOCAL_PATH))

443
tests/libs/Android.bp Normal file
View file

@ -0,0 +1,443 @@
//
// 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_testlib_defaults",
host_supported: true,
sanitize: {
never: true,
},
target: {
darwin: {
enabled: false,
},
},
}
// -----------------------------------------------------------------------------
// Library to test gnu-styled hash
// -----------------------------------------------------------------------------
cc_library {
name: "libgnu-hash-table-library",
defaults: ["bionic_testlib_defaults"],
srcs: ["dlext_test_library.cpp"],
ldflags: ["-Wl,--hash-style=gnu"],
arch: {
mips: {
enabled: false,
},
mips64: {
enabled: false,
},
},
}
// -----------------------------------------------------------------------------
// Library to test sysv-styled hash
// -----------------------------------------------------------------------------
cc_library {
name: "libsysv-hash-table-library",
defaults: ["bionic_testlib_defaults"],
srcs: ["dlext_test_library.cpp"],
ldflags: ["-Wl,--hash-style=sysv"],
}
// -----------------------------------------------------------------------------
// Library used by dlext tests - with GNU RELRO program header
// -----------------------------------------------------------------------------
// In Android.mk to support creating symlinks
// -----------------------------------------------------------------------------
// Library used by dlext tests - without GNU RELRO program header
// -----------------------------------------------------------------------------
cc_library {
name: "libdlext_test_norelro",
srcs: ["dlext_test_library.cpp"],
ldflags: ["-Wl,-z,norelro"],
shared_libs = ["libtest_simple"],
}
// -----------------------------------------------------------------------------
// Library used by dlext tests - different name non-default location
// -----------------------------------------------------------------------------
// In Android.mk to support installing to /data
// -----------------------------------------------------------------------------
// Libraries used by dlext tests for open from a zip-file
// -----------------------------------------------------------------------------
// In Android.mk to support installing to /data
// ----------------------------------------------------------------------------
// Library with soname which does not match filename
// ----------------------------------------------------------------------------
// In Android.mk to support zipped and aligned tests
// -----------------------------------------------------------------------------
// Library used by dlext tests - zipped and aligned
// -----------------------------------------------------------------------------
// In Android.mk to support zipped and aligned tests
// -----------------------------------------------------------------------------
// Library used by dlfcn tests
// -----------------------------------------------------------------------------
cc_library {
name: "libtest_simple",
defaults: ["bionic_testlib_defaults"],
srcs: ["dlopen_testlib_simple.cpp"],
}
// -----------------------------------------------------------------------------
// Library used by dlfcn nodelete tests
// -----------------------------------------------------------------------------
cc_library {
name: "libtest_nodelete_1",
defaults: ["bionic_testlib_defaults"],
srcs: ["dlopen_nodelete_1.cpp"],
}
// -----------------------------------------------------------------------------
// Library used by dlfcn nodelete tests
// -----------------------------------------------------------------------------
cc_library {
name: "libtest_nodelete_2",
defaults: ["bionic_testlib_defaults"],
srcs: ["dlopen_nodelete_2.cpp"],
}
// -----------------------------------------------------------------------------
// Library used by dlfcn nodelete tests
// -----------------------------------------------------------------------------
cc_library {
name: "libtest_nodelete_dt_flags_1",
defaults: ["bionic_testlib_defaults"],
srcs: ["dlopen_nodelete_dt_flags_1.cpp"],
ldflags: ["-Wl,-z,nodelete"],
}
// -----------------------------------------------------------------------------
// Build test helper libraries for linker namespaces
// -----------------------------------------------------------------------------
// include $(LOCAL_PATH)/Android.build.linker_namespaces.mk
// -----------------------------------------------------------------------------
// Build DT_RUNPATH test helper libraries
// -----------------------------------------------------------------------------
// include $(LOCAL_PATH)/Android.build.dt_runpath.mk
// -----------------------------------------------------------------------------
// Build library with two parents
// -----------------------------------------------------------------------------
// include $(LOCAL_PATH)/Android.build.dlopen_2_parents_reloc.mk
// -----------------------------------------------------------------------------
// Build libtest_check_order_dlsym.so with its dependencies.
// -----------------------------------------------------------------------------
// include $(LOCAL_PATH)/Android.build.dlopen_check_order_dlsym.mk
// -----------------------------------------------------------------------------
// Build libtest_check_order_siblings.so with its dependencies.
// -----------------------------------------------------------------------------
// include $(LOCAL_PATH)/Android.build.dlopen_check_order_reloc_siblings.mk
// -----------------------------------------------------------------------------
// Build libtest_check_order_root.so with its dependencies.
// -----------------------------------------------------------------------------
// include $(LOCAL_PATH)/Android.build.dlopen_check_order_reloc_main_executable.mk
// -----------------------------------------------------------------------------
// Build libtest_versioned_lib.so with its dependencies.
// -----------------------------------------------------------------------------
// include $(LOCAL_PATH)/Android.build.versioned_lib.mk
// -----------------------------------------------------------------------------
// Build libraries needed by pthread_atfork tests
// -----------------------------------------------------------------------------
// include $(LOCAL_PATH)/Android.build.pthread_atfork.mk
// -----------------------------------------------------------------------------
// Library with dependency loop used by dlfcn tests
//
// libtest_with_dependency_loop -> a -> b -> c -> a
// -----------------------------------------------------------------------------
cc_library {
name: "libtest_with_dependency_loop",
defaults: ["bionic_testlib_defaults"],
srcs: ["dlopen_testlib_loopy_root.cpp"],
shared_libs: ["libtest_with_dependency_loop_a"],
}
// -----------------------------------------------------------------------------
// libtest_with_dependency_loop_a.so
// -----------------------------------------------------------------------------
cc_library {
name: "libtest_with_dependency_loop_a",
defaults: ["bionic_testlib_defaults"],
srcs: ["dlopen_testlib_loopy_a.cpp"],
shared_libs: ["libtest_with_dependency_loop_b_tmp"],
}
// -----------------------------------------------------------------------------
// libtest_with_dependency_loop_b.so
//
// this is temporary placeholder - will be removed
// -----------------------------------------------------------------------------
cc_library {
name: "libtest_with_dependency_loop_b_tmp",
defaults: ["bionic_testlib_defaults"],
srcs: ["dlopen_testlib_loopy_invalid.cpp"],
ldflags: ["-Wl,-soname=libtest_with_dependency_loop_b.so"],
}
// -----------------------------------------------------------------------------
// libtest_with_dependency_loop_b.so
// -----------------------------------------------------------------------------
cc_library {
name: "libtest_with_dependency_loop_b",
defaults: ["bionic_testlib_defaults"],
srcs: ["dlopen_testlib_loopy_b.cpp"],
shared_libs: ["libtest_with_dependency_loop_c"],
}
// -----------------------------------------------------------------------------
// libtest_with_dependency_loop_c.so
// -----------------------------------------------------------------------------
cc_library {
name: "libtest_with_dependency_loop_c",
defaults: ["bionic_testlib_defaults"],
srcs: ["dlopen_testlib_loopy_c.cpp"],
shared_libs: ["libtest_with_dependency_loop_a"],
}
// -----------------------------------------------------------------------------
// libtest_relo_check_dt_needed_order.so
// |
// +-> libtest_relo_check_dt_needed_order_1.so
// |
// +-> libtest_relo_check_dt_needed_order_2.so
// -----------------------------------------------------------------------------
cc_library {
name: "libtest_relo_check_dt_needed_order",
defaults: ["bionic_testlib_defaults"],
srcs: ["dlopen_testlib_relo_check_dt_needed_order.cpp"],
shared_libs: [
"libtest_relo_check_dt_needed_order_1",
"libtest_relo_check_dt_needed_order_2",
],
}
cc_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 {
name: "libtest_relo_check_dt_needed_order_2",
defaults: ["bionic_testlib_defaults"],
srcs: ["dlopen_testlib_relo_check_dt_needed_order_2.cpp"],
}
// -----------------------------------------------------------------------------
// Library with dependency used by dlfcn tests
// -----------------------------------------------------------------------------
// In Android.mk to support dependency on libdlext_test
// -----------------------------------------------------------------------------
// Library used by ifunc tests
// -----------------------------------------------------------------------------
cc_library {
name: "libtest_ifunc",
defaults: ["bionic_testlib_defaults"],
srcs: ["dlopen_testlib_ifunc.c"],
// TODO(dimitry): clang does not support ifunc attribute
clang: false,
arch: {
mips: {
enabled: false,
},
mips64: {
enabled: false,
},
},
}
// -----------------------------------------------------------------------------
// Library used by atexit tests
// -----------------------------------------------------------------------------
cc_library {
name: "libtest_atexit",
defaults: ["bionic_testlib_defaults"],
srcs: ["atexit_testlib.cpp"],
}
// -----------------------------------------------------------------------------
// This library is used by dl_load test to check symbol preempting
// by main executable
// -----------------------------------------------------------------------------
cc_library {
name: "libdl_preempt_test_1",
defaults: ["bionic_testlib_defaults"],
srcs: ["dl_preempt_library_1.cpp"],
}
// -----------------------------------------------------------------------------
// This library is used by dl_load test to check symbol preempting
// by libdl_preempt_test_1.so
// -----------------------------------------------------------------------------
cc_library {
name: "libdl_preempt_test_2",
defaults: ["bionic_testlib_defaults"],
srcs: ["dl_preempt_library_2.cpp"],
}
// -----------------------------------------------------------------------------
// Library with DF_1_GLOBAL
// -----------------------------------------------------------------------------
cc_library {
name: "libdl_test_df_1_global",
defaults: ["bionic_testlib_defaults"],
srcs: ["dl_df_1_global.cpp"],
ldflags: ["-Wl,-z,global"],
target: {
host: {
// TODO (dimitry): host ld.gold does not yet support -z global
// remove this line once it is updated.
ldflags: ["-fuse-ld=bfd"],
},
},
}
// -----------------------------------------------------------------------------
// Library using symbol from libdl_test_df_1_global
// -----------------------------------------------------------------------------
cc_library {
name: "libtest_dlsym_df_1_global",
defaults: ["bionic_testlib_defaults"],
srcs: ["dl_df_1_use_global.cpp"],
}
// -----------------------------------------------------------------------------
// Library with weak function
// -----------------------------------------------------------------------------
cc_library {
name: "libtest_dlsym_weak_func",
defaults: ["bionic_testlib_defaults"],
srcs: ["dlsym_weak_function.cpp"],
}
// -----------------------------------------------------------------------------
// Library to check RTLD_LOCAL with dlsym in 'this'
// -----------------------------------------------------------------------------
cc_library {
name: "libtest_dlsym_from_this",
defaults: ["bionic_testlib_defaults"],
srcs: ["dlsym_from_this_symbol.cpp"],
shared_libs: ["libtest_dlsym_from_this_child"],
target: {
android: {
shared_libs: ["libdl"],
},
},
}
// -----------------------------------------------------------------------------
cc_library {
name: "libtest_dlsym_from_this_child",
defaults: ["bionic_testlib_defaults"],
srcs: ["dlsym_from_this_functions.cpp"],
shared_libs: ["libtest_dlsym_from_this_grandchild"],
}
// -----------------------------------------------------------------------------
cc_library {
name: "libtest_dlsym_from_this_grandchild",
defaults: ["bionic_testlib_defaults"],
srcs: ["dlsym_from_this_symbol2.cpp"],
}
// -----------------------------------------------------------------------------
// Empty library
// -----------------------------------------------------------------------------
cc_library {
name: "libtest_empty",
defaults: ["bionic_testlib_defaults"],
srcs: ["empty.cpp"],
}
// -----------------------------------------------------------------------------
// Library with weak undefined function
// -----------------------------------------------------------------------------
cc_library {
name: "libtest_dlopen_weak_undefined_func",
defaults: ["bionic_testlib_defaults"],
srcs: ["dlopen_weak_undefined.cpp"],
}
// -----------------------------------------------------------------------------
// Library with constructor that calls dlopen() b/7941716
// -----------------------------------------------------------------------------
cc_library {
name: "libtest_dlopen_from_ctor",
defaults: ["bionic_testlib_defaults"],
srcs: ["dlopen_testlib_dlopen_from_ctor.cpp"],
target: {
android: {
shared_libs: ["libdl"],
},
},
}
// -----------------------------------------------------------------------------
// Library that depends on the library with constructor that calls dlopen() b/7941716
// -----------------------------------------------------------------------------
cc_library {
name: "libtest_dlopen_from_ctor_main",
defaults: ["bionic_testlib_defaults"],
srcs: ["empty.cpp"],
shared_libs: ["libtest_dlopen_from_ctor"],
}
// -----------------------------------------------------------------------------
// Tool to use to align the shared libraries in a zip file.
// -----------------------------------------------------------------------------
cc_binary_host {
name: "bionic_tests_zipalign",
srcs: ["bionic_tests_zipalign.cpp"],
cflags: [
"-Wall",
"-Werror",
],
static_libs: [
"libziparchive",
"liblog",
"libbase",
"libz",
"libutils",
],
target: {
windows: {
enabled: true,
},
},
}

View file

@ -32,34 +32,6 @@ common_additional_dependencies := \
$(LOCAL_PATH)/Android.build.versioned_lib.mk \
$(TEST_PATH)/Android.build.mk
# -----------------------------------------------------------------------------
# Library to test gnu-styled hash
# -----------------------------------------------------------------------------
ifneq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),mips mips64))
libgnu-hash-table-library_src_files := \
dlext_test_library.cpp \
libgnu-hash-table-library_ldflags := \
-Wl,--hash-style=gnu \
module := libgnu-hash-table-library
module_tag := optional
include $(LOCAL_PATH)/Android.build.testlib.mk
endif
# -----------------------------------------------------------------------------
# Library to test sysv-styled hash
# -----------------------------------------------------------------------------
libsysv-hash-table-library_src_files := \
dlext_test_library.cpp \
libsysv-hash-table-library_ldflags := \
-Wl,--hash-style=sysv \
module := libsysv-hash-table-library
module_tag := optional
include $(LOCAL_PATH)/Android.build.testlib.mk
# -----------------------------------------------------------------------------
# Library used by dlext tests - with GNU RELRO program header
# -----------------------------------------------------------------------------
@ -95,23 +67,6 @@ $(HOST_OUT)/lib64/libdlext_test.so: PRIVATE_POST_INSTALL_CMD = \
$(HOST_OUT)/lib/libdlext_test.so: PRIVATE_POST_INSTALL_CMD = \
$(hide) cd $(dir $@) && ln -sf $(notdir $@) libdlext_test_v2.so
# -----------------------------------------------------------------------------
# Library used by dlext tests - without GNU RELRO program header
# -----------------------------------------------------------------------------
libdlext_test_norelro_src_files := \
dlext_test_library.cpp \
libdlext_test_norelro_ldflags := \
-Wl,-z,norelro \
libdlext_test_norelro_shared_libraries := libtest_simple
module := libdlext_test_norelro
module_tag := optional
build_type := target
build_target := SHARED_LIBRARY
include $(TEST_PATH)/Android.build.mk
# -----------------------------------------------------------------------------
# Library used by dlext tests - different name non-default location
# -----------------------------------------------------------------------------
@ -175,44 +130,6 @@ ifneq ($(TARGET_2ND_ARCH),)
include $(LOCAL_PATH)/Android.build.dlext_testzip.mk
endif
# -----------------------------------------------------------------------------
# Library used by dlfcn tests
# -----------------------------------------------------------------------------
libtest_simple_src_files := \
dlopen_testlib_simple.cpp
module := libtest_simple
include $(LOCAL_PATH)/Android.build.testlib.mk
# -----------------------------------------------------------------------------
# Library used by dlfcn nodelete tests
# -----------------------------------------------------------------------------
libtest_nodelete_1_src_files := \
dlopen_nodelete_1.cpp
module := libtest_nodelete_1
include $(LOCAL_PATH)/Android.build.testlib.mk
# -----------------------------------------------------------------------------
# Library used by dlfcn nodelete tests
# -----------------------------------------------------------------------------
libtest_nodelete_2_src_files := \
dlopen_nodelete_2.cpp
module := libtest_nodelete_2
include $(LOCAL_PATH)/Android.build.testlib.mk
# -----------------------------------------------------------------------------
# Library used by dlfcn nodelete tests
# -----------------------------------------------------------------------------
libtest_nodelete_dt_flags_1_src_files := \
dlopen_nodelete_dt_flags_1.cpp
libtest_nodelete_dt_flags_1_ldflags := -Wl,-z,nodelete
module := libtest_nodelete_dt_flags_1
include $(LOCAL_PATH)/Android.build.testlib.mk
# -----------------------------------------------------------------------------
# Build test helper libraries for linker namespaces
# -----------------------------------------------------------------------------
@ -253,82 +170,6 @@ include $(LOCAL_PATH)/Android.build.versioned_lib.mk
# -----------------------------------------------------------------------------
include $(LOCAL_PATH)/Android.build.pthread_atfork.mk
# -----------------------------------------------------------------------------
# Library with dependency loop used by dlfcn tests
#
# libtest_with_dependency_loop -> a -> b -> c -> a
# -----------------------------------------------------------------------------
libtest_with_dependency_loop_src_files := dlopen_testlib_loopy_root.cpp
libtest_with_dependency_loop_shared_libraries := \
libtest_with_dependency_loop_a
module := libtest_with_dependency_loop
include $(LOCAL_PATH)/Android.build.testlib.mk
# -----------------------------------------------------------------------------
# libtest_with_dependency_loop_a.so
# -----------------------------------------------------------------------------
libtest_with_dependency_loop_a_src_files := dlopen_testlib_loopy_a.cpp
libtest_with_dependency_loop_a_shared_libraries := \
libtest_with_dependency_loop_b_tmp
module := libtest_with_dependency_loop_a
include $(LOCAL_PATH)/Android.build.testlib.mk
# -----------------------------------------------------------------------------
# libtest_with_dependency_loop_b.so
#
# this is temporary placeholder - will be removed
# -----------------------------------------------------------------------------
libtest_with_dependency_loop_b_tmp_src_files := dlopen_testlib_loopy_invalid.cpp
libtest_with_dependency_loop_b_tmp_ldflags := -Wl,-soname=libtest_with_dependency_loop_b.so
module := libtest_with_dependency_loop_b_tmp
include $(LOCAL_PATH)/Android.build.testlib.mk
# -----------------------------------------------------------------------------
# libtest_with_dependency_loop_b.so
# -----------------------------------------------------------------------------
libtest_with_dependency_loop_b_src_files := dlopen_testlib_loopy_b.cpp
libtest_with_dependency_loop_b_shared_libraries := libtest_with_dependency_loop_c
module := libtest_with_dependency_loop_b
include $(LOCAL_PATH)/Android.build.testlib.mk
# -----------------------------------------------------------------------------
# libtest_with_dependency_loop_c.so
# -----------------------------------------------------------------------------
libtest_with_dependency_loop_c_src_files := dlopen_testlib_loopy_c.cpp
libtest_with_dependency_loop_c_shared_libraries := \
libtest_with_dependency_loop_a
module := libtest_with_dependency_loop_c
include $(LOCAL_PATH)/Android.build.testlib.mk
# -----------------------------------------------------------------------------
# libtest_relo_check_dt_needed_order.so
# |
# +-> libtest_relo_check_dt_needed_order_1.so
# |
# +-> libtest_relo_check_dt_needed_order_2.so
# -----------------------------------------------------------------------------
libtest_relo_check_dt_needed_order_shared_libraries := \
libtest_relo_check_dt_needed_order_1 libtest_relo_check_dt_needed_order_2
libtest_relo_check_dt_needed_order_src_files := dlopen_testlib_relo_check_dt_needed_order.cpp
libtest_relo_check_dt_needed_order_1_src_files := dlopen_testlib_relo_check_dt_needed_order_1.cpp
libtest_relo_check_dt_needed_order_2_src_files := dlopen_testlib_relo_check_dt_needed_order_2.cpp
module := libtest_relo_check_dt_needed_order
include $(LOCAL_PATH)/Android.build.testlib.mk
module := libtest_relo_check_dt_needed_order_1
include $(LOCAL_PATH)/Android.build.testlib.mk
module := libtest_relo_check_dt_needed_order_2
include $(LOCAL_PATH)/Android.build.testlib.mk
# -----------------------------------------------------------------------------
# Library with dependency used by dlfcn tests
# -----------------------------------------------------------------------------
@ -339,161 +180,3 @@ libtest_with_dependency_shared_libraries := libdlext_test
module := libtest_with_dependency
include $(LOCAL_PATH)/Android.build.testlib.mk
# -----------------------------------------------------------------------------
# Library used by ifunc tests
# -----------------------------------------------------------------------------
libtest_ifunc_src_files := \
dlopen_testlib_ifunc.c
# TODO(dimitry): clang does not support ifunc attribute
libtest_ifunc_clang_host := false
module := libtest_ifunc
build_target := SHARED_LIBRARY
build_type := host
include $(TEST_PATH)/Android.build.mk
ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),arm arm64 x86 x86_64))
build_type := target
libtest_ifunc_clang_target := false
include $(TEST_PATH)/Android.build.mk
endif
# -----------------------------------------------------------------------------
# Library used by atexit tests
# -----------------------------------------------------------------------------
libtest_atexit_src_files := \
atexit_testlib.cpp
module := libtest_atexit
include $(LOCAL_PATH)/Android.build.testlib.mk
# -----------------------------------------------------------------------------
# This library is used by dl_load test to check symbol preempting
# by main executable
# -----------------------------------------------------------------------------
libdl_preempt_test_1_src_files := dl_preempt_library_1.cpp
module := libdl_preempt_test_1
include $(LOCAL_PATH)/Android.build.testlib.mk
# -----------------------------------------------------------------------------
# This library is used by dl_load test to check symbol preempting
# by libdl_preempt_test_1.so
# -----------------------------------------------------------------------------
libdl_preempt_test_2_src_files := dl_preempt_library_2.cpp
module := libdl_preempt_test_2
include $(LOCAL_PATH)/Android.build.testlib.mk
# -----------------------------------------------------------------------------
# Library with DF_1_GLOBAL
# -----------------------------------------------------------------------------
libdl_test_df_1_global_src_files := dl_df_1_global.cpp
libdl_test_df_1_global_ldflags := -Wl,-z,global
# TODO (dimitry): host ld.gold does not yet support -z global
# remove this line once it is updated.
libdl_test_df_1_global_ldflags_host := -fuse-ld=bfd
module := libdl_test_df_1_global
include $(LOCAL_PATH)/Android.build.testlib.mk
# -----------------------------------------------------------------------------
# Library using symbol from libdl_test_df_1_global
# -----------------------------------------------------------------------------
libtest_dlsym_df_1_global_src_files := dl_df_1_use_global.cpp
module := libtest_dlsym_df_1_global
include $(LOCAL_PATH)/Android.build.testlib.mk
# -----------------------------------------------------------------------------
# Library with weak function
# -----------------------------------------------------------------------------
libtest_dlsym_weak_func_src_files := \
dlsym_weak_function.cpp
module := libtest_dlsym_weak_func
include $(LOCAL_PATH)/Android.build.testlib.mk
# -----------------------------------------------------------------------------
# Library to check RTLD_LOCAL with dlsym in 'this'
# -----------------------------------------------------------------------------
libtest_dlsym_from_this_src_files := dlsym_from_this_symbol.cpp
libtest_dlsym_from_this_shared_libraries_target := libdl
libtest_dlsym_from_this_shared_libraries := libtest_dlsym_from_this_child
module := libtest_dlsym_from_this
include $(LOCAL_PATH)/Android.build.testlib.mk
# -----------------------------------------------------------------------------
libtest_dlsym_from_this_child_src_files := dlsym_from_this_functions.cpp
libtest_dlsym_from_this_child_shared_libraries := libtest_dlsym_from_this_grandchild
module := libtest_dlsym_from_this_child
include $(LOCAL_PATH)/Android.build.testlib.mk
# -----------------------------------------------------------------------------
libtest_dlsym_from_this_grandchild_src_files := dlsym_from_this_symbol2.cpp
module := libtest_dlsym_from_this_grandchild
include $(LOCAL_PATH)/Android.build.testlib.mk
# -----------------------------------------------------------------------------
# Empty library
# -----------------------------------------------------------------------------
libtest_empty_src_files := empty.cpp
module := libtest_empty
include $(LOCAL_PATH)/Android.build.testlib.mk
# -----------------------------------------------------------------------------
# Library with weak undefined function
# -----------------------------------------------------------------------------
libtest_dlopen_weak_undefined_func_src_files := \
dlopen_weak_undefined.cpp
module := libtest_dlopen_weak_undefined_func
include $(LOCAL_PATH)/Android.build.testlib.mk
# -----------------------------------------------------------------------------
# Library with constructor that calls dlopen() b/7941716
# -----------------------------------------------------------------------------
libtest_dlopen_from_ctor_src_files := \
dlopen_testlib_dlopen_from_ctor.cpp
module := libtest_dlopen_from_ctor
libtest_dlopen_from_ctor_shared_libraries_target := libdl
include $(LOCAL_PATH)/Android.build.testlib.mk
# -----------------------------------------------------------------------------
# Library that depends on the library with constructor that calls dlopen() b/7941716
# -----------------------------------------------------------------------------
libtest_dlopen_from_ctor_main_src_files := empty.cpp
libtest_dlopen_from_ctor_main_shared_libraries := libtest_dlopen_from_ctor
module := libtest_dlopen_from_ctor_main
include $(LOCAL_PATH)/Android.build.testlib.mk
# -----------------------------------------------------------------------------
# Tool to use to align the shared libraries in a zip file.
# -----------------------------------------------------------------------------
include $(CLEAR_VARS)
LOCAL_SRC_FILES := bionic_tests_zipalign.cpp
LOCAL_MODULE := bionic_tests_zipalign
LOCAL_CFLAGS := -Wall -Werror
LOCAL_STATIC_LIBRARIES := libziparchive-host liblog libbase libz libutils
LOCAL_MODULE_HOST_OS := darwin linux windows
include $(BUILD_HOST_EXECUTABLE)

34
tests/run-on-host.sh Executable file
View file

@ -0,0 +1,34 @@
#!/bin/bash -e
. $(dirname $0)/../build/run-on-host.sh
if [ "$1" = glibc ]; then
m -j bionic-unit-tests-glibc
(
cd ${ANDROID_BUILD_TOP}
export ANDROID_DATA=${TARGET_OUT_DATA}
export ANDROID_ROOT=${TARGET_OUT}
${HOST_OUT}/nativetest64/bionic-unit-tests-glibc/bionic-unit-tests-glibc $@
)
exit 0
elif [ "$1" != 32 -a "$1" != 64 ]; then
echo "Usage: $0 [ 32 | 64 | glibc ] [gtest flags]"
exit 1
fi
if [ ${HOST_OS}-${HOST_ARCH} = linux-x86 -o ${HOST_OS}-${HOST_ARCH} = linux-x86_64 ]; then
prepare $1 bionic-unit-tests
if [ ${TARGET_ARCH} = x86 -o ${TARGET_ARCH} = x86_64 ]; then
(
cd ${ANDROID_BUILD_TOP}
export ANDROID_DATA=${TARGET_OUT_DATA}
export ANDROID_DNS_MODE=local
export ANDROID_ROOT=${TARGET_OUT}
${NATIVETEST}/bionic-unit-tests/bionic-unit-tests $@
)
else
echo "$0 not supported on TARGET_ARCH=$TARGET_ARCH"
fi
fi