1 #
2 # Copyright (C) 2012 The Android Open Source Project
3 #
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at
7 #
8 # http://www.apache.org/licenses/LICENSE-2.0
9 #
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
15 #
17 ifneq ($(BUILD_TINY_ANDROID), true)
19 LOCAL_PATH := $(call my-dir)
21 # -----------------------------------------------------------------------------
22 # Benchmarks.
23 # -----------------------------------------------------------------------------
25 benchmark_c_flags = \
26 -O2 \
27 -Wall -Wextra \
28 -Werror \
29 -fno-builtin \
31 benchmark_src_files = \
32 benchmark_main.cpp \
33 math_benchmark.cpp \
34 property_benchmark.cpp \
35 string_benchmark.cpp \
36 time_benchmark.cpp \
38 # Build benchmarks for the device (with bionic's .so). Run with:
39 # adb shell bionic-benchmarks
40 include $(CLEAR_VARS)
41 LOCAL_MODULE := bionic-benchmarks
42 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
43 LOCAL_CFLAGS += $(benchmark_c_flags)
44 LOCAL_C_INCLUDES += external/stlport/stlport bionic/ bionic/libstdc++/include
45 LOCAL_SHARED_LIBRARIES += libstlport
46 LOCAL_SRC_FILES := $(benchmark_src_files)
47 include $(BUILD_EXECUTABLE)
49 # -----------------------------------------------------------------------------
50 # Unit tests.
51 # -----------------------------------------------------------------------------
53 test_c_flags = \
54 -fstack-protector-all \
55 -g \
56 -Wall -Wextra \
57 -Werror \
58 -fno-builtin \
60 test_src_files = \
61 dirent_test.cpp \
62 eventfd_test.cpp \
63 fenv_test.cpp \
64 getauxval_test.cpp \
65 getcwd_test.cpp \
66 inttypes_test.cpp \
67 libc_logging_test.cpp \
68 libgen_test.cpp \
69 malloc_test.cpp \
70 math_test.cpp \
71 netdb_test.cpp \
72 pthread_test.cpp \
73 regex_test.cpp \
74 sched_test.cpp \
75 signal_test.cpp \
76 stack_protector_test.cpp \
77 stack_unwinding_test.cpp \
78 statvfs_test.cpp \
79 stdio_test.cpp \
80 stdlib_test.cpp \
81 string_test.cpp \
82 strings_test.cpp \
83 stubs_test.cpp \
84 sys_epoll_test.cpp \
85 sys_select_test.cpp \
86 sys_sendfile_test.cpp \
87 sys_stat_test.cpp \
88 sys_time_test.cpp \
89 system_properties_test.cpp \
90 time_test.cpp \
91 unistd_test.cpp \
93 test_dynamic_ldflags = -Wl,--export-dynamic -Wl,-u,DlSymTestFunction
94 test_dynamic_src_files = \
95 dlfcn_test.cpp \
97 test_fortify_static_libraries = \
98 fortify1-tests-gcc fortify2-tests-gcc fortify1-tests-clang fortify2-tests-clang
100 include $(CLEAR_VARS)
101 LOCAL_MODULE := bionic-unit-tests-unwind-test-impl
102 LOCAL_CFLAGS += $(test_c_flags) -fexceptions -fnon-call-exceptions
103 LOCAL_SRC_FILES := stack_unwinding_test_impl.c
104 include $(BUILD_STATIC_LIBRARY)
106 include $(CLEAR_VARS)
107 LOCAL_MODULE := bionic-unit-tests-unwind-test-impl-host
108 LOCAL_CFLAGS += $(test_c_flags) -fexceptions -fnon-call-exceptions
109 LOCAL_SRC_FILES := stack_unwinding_test_impl.c
110 include $(BUILD_HOST_STATIC_LIBRARY)
112 # Build tests for the device (with bionic's .so). Run with:
113 # adb shell /data/nativetest/bionic-unit-tests/bionic-unit-tests
114 include $(CLEAR_VARS)
115 LOCAL_MODULE := bionic-unit-tests
116 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
117 LOCAL_CFLAGS += $(test_c_flags)
118 LOCAL_LDFLAGS += $(test_dynamic_ldflags)
119 LOCAL_SHARED_LIBRARIES += libdl
120 LOCAL_SRC_FILES := $(test_src_files) $(test_dynamic_src_files)
121 LOCAL_WHOLE_STATIC_LIBRARIES := $(test_fortify_static_libraries)
122 LOCAL_STATIC_LIBRARIES += bionic-unit-tests-unwind-test-impl
123 include $(BUILD_NATIVE_TEST)
125 # Build tests for the device (with bionic's .a). Run with:
126 # adb shell /data/nativetest/bionic-unit-tests-static/bionic-unit-tests-static
127 include $(CLEAR_VARS)
128 LOCAL_MODULE := bionic-unit-tests-static
129 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
130 LOCAL_FORCE_STATIC_EXECUTABLE := true
131 LOCAL_WHOLE_STATIC_LIBRARIES += libBionicTests
132 LOCAL_STATIC_LIBRARIES += libstlport_static libstdc++ libm libc
133 include $(BUILD_NATIVE_TEST)
135 # -----------------------------------------------------------------------------
136 # We build the static unit tests as a library so they can be used both for
137 # bionic-unit-tests-static and also as part of CTS.
138 # -----------------------------------------------------------------------------
140 include $(CLEAR_VARS)
141 LOCAL_MODULE := libBionicTests
142 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
143 LOCAL_CFLAGS += $(test_c_flags)
144 LOCAL_SRC_FILES := $(test_src_files)
145 LOCAL_CFLAGS += \
146 -DGTEST_OS_LINUX_ANDROID \
147 -DGTEST_HAS_STD_STRING \
149 LOCAL_C_INCLUDES += \
150 bionic bionic/libstdc++/include \
151 external/gtest/include \
152 external/stlport/stlport \
154 LOCAL_WHOLE_STATIC_LIBRARIES := \
155 $(test_fortify_static_libraries) \
156 bionic-unit-tests-unwind-test-impl \
158 include $(BUILD_STATIC_LIBRARY)
160 # -----------------------------------------------------------------------------
161 # Test library for the unit tests.
162 # -----------------------------------------------------------------------------
164 # Build no-elf-hash-table-library.so to test dlopen(3) on a library that
165 # only has a GNU-style hash table. MIPS doesn't support GNU hash style.
166 ifneq ($(TARGET_ARCH),mips)
167 include $(CLEAR_VARS)
168 LOCAL_MODULE := no-elf-hash-table-library
169 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
170 LOCAL_SRC_FILES := empty.cpp
171 LOCAL_LDFLAGS := -Wl,--hash-style=gnu
172 include $(BUILD_SHARED_LIBRARY)
173 endif
175 # -----------------------------------------------------------------------------
176 # Unit tests built against glibc.
177 # -----------------------------------------------------------------------------
179 # Build tests for the host (with glibc).
180 # Note that this will build against glibc, so it's not useful for testing
181 # bionic's implementation, but it does let you use glibc as a reference
182 # implementation for testing the tests themselves.
183 ifeq ($(HOST_OS)-$(HOST_ARCH),linux-x86)
184 include $(CLEAR_VARS)
185 LOCAL_MODULE := bionic-unit-tests-glibc
186 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
187 LOCAL_CFLAGS += $(test_c_flags)
188 LOCAL_LDFLAGS += -lpthread -ldl -lrt
189 LOCAL_LDFLAGS += $(test_dynamic_ldflags)
190 LOCAL_SRC_FILES := $(test_src_files) $(test_dynamic_src_files)
191 LOCAL_STATIC_LIBRARIES += bionic-unit-tests-unwind-test-impl-host
192 include $(BUILD_HOST_NATIVE_TEST)
193 endif
195 # -----------------------------------------------------------------------------
196 # Run the unit tests built against x86 bionic on an x86 host.
197 # -----------------------------------------------------------------------------
199 ifeq ($(HOST_OS)-$(HOST_ARCH),linux-x86)
200 ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),x86 x86_64))
201 ifeq ($(TARGET_ARCH),x86)
202 LINKER = linker
203 else
204 LINKER = linker64
205 endif
206 # gtest needs EXTERNAL_STORAGE for death test output.
207 # bionic itself should always work relative to ANDROID_DATA or ANDROID_ROOT.
208 # We create /data/local/tmp to be as much like the regular target environment
209 # as possible.
210 bionic-unit-tests-run-on-host: bionic-unit-tests $(TARGET_OUT_EXECUTABLES)/$(LINKER) $(TARGET_OUT_EXECUTABLES)/sh
211 mkdir -p $(TARGET_OUT_DATA)/local/tmp
212 cp $(TARGET_OUT_EXECUTABLES)/$(LINKER) /system/bin
213 cp $(TARGET_OUT_EXECUTABLES)/sh /system/bin
214 ANDROID_DATA=$(TARGET_OUT_DATA) \
215 ANDROID_ROOT=$(TARGET_OUT) \
216 EXTERNAL_STORAGE=$(TARGET_OUT_DATA)/local/tmp \
217 LD_LIBRARY_PATH=$(TARGET_OUT_SHARED_LIBRARIES) \
218 $(TARGET_OUT_DATA_NATIVE_TESTS)/bionic-unit-tests/bionic-unit-tests
219 endif
220 endif
222 # -----------------------------------------------------------------------------
223 # FORTIFY_SOURCE tests
224 # -----------------------------------------------------------------------------
226 fortify_c_includes = \
227 bionic \
228 bionic/libstdc++/include \
229 external/stlport/stlport \
230 external/gtest/include
231 fortify_test_files = fortify_test.cpp
233 # -Wno-error=unused-parameter needed as
234 # external/stlport/stlport/stl/_threads.c (included from
235 # external/gtest/include/gtest/gtest.h) does not compile cleanly under
236 # clang. TODO: fix this.
237 fortify_c_flags = $(test_c_flags) -Wno-error=unused-parameter
239 include $(CLEAR_VARS)
240 LOCAL_SRC_FILES := $(fortify_test_files)
241 LOCAL_MODULE := fortify1-tests-gcc
242 LOCAL_CFLAGS += $(fortify_c_flags) -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -DTEST_NAME=Fortify1_Gcc
243 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
244 LOCAL_C_INCLUDES += $(fortify_c_includes)
245 include $(BUILD_STATIC_LIBRARY)
247 include $(CLEAR_VARS)
248 LOCAL_SRC_FILES := $(fortify_test_files)
249 LOCAL_MODULE := fortify2-tests-gcc
250 LOCAL_CFLAGS += $(fortify_c_flags) -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -DTEST_NAME=Fortify2_Gcc
251 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
252 LOCAL_C_INCLUDES += $(fortify_c_includes)
253 include $(BUILD_STATIC_LIBRARY)
255 include $(CLEAR_VARS)
256 LOCAL_SRC_FILES := $(fortify_test_files)
257 LOCAL_MODULE := fortify1-tests-clang
258 LOCAL_CLANG := true
259 LOCAL_CFLAGS += $(fortify_c_flags) -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -DTEST_NAME=Fortify1_Clang
260 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
261 LOCAL_C_INCLUDES += $(fortify_c_includes)
262 include $(BUILD_STATIC_LIBRARY)
264 include $(CLEAR_VARS)
265 LOCAL_SRC_FILES := $(fortify_test_files)
266 LOCAL_MODULE := fortify2-tests-clang
267 LOCAL_CLANG := true
268 LOCAL_CFLAGS += $(fortify_c_flags) -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -DTEST_NAME=Fortify2_Clang
269 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
270 LOCAL_C_INCLUDES += $(fortify_c_includes)
271 include $(BUILD_STATIC_LIBRARY)
273 endif # !BUILD_TINY_ANDROID