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# 16 17LOCAL_PATH := $(call my-dir) 18TEST_PATH := $(LOCAL_PATH)/.. 19 20common_cppflags += -std=gnu++11 21common_additional_dependencies := \ 22 $(LOCAL_PATH)/Android.mk \ 23 $(LOCAL_PATH)/Android.build.dlext_testzip.mk \ 24 $(LOCAL_PATH)/Android.build.dlopen_2_parents_reloc.mk \ 25 $(LOCAL_PATH)/Android.build.dlopen_check_order_dlsym.mk \ 26 $(LOCAL_PATH)/Android.build.dlopen_check_order_reloc_siblings.mk \ 27 $(LOCAL_PATH)/Android.build.dlopen_check_order_reloc_main_executable.mk \ 28 $(LOCAL_PATH)/Android.build.pthread_atfork.mk \ 29 $(LOCAL_PATH)/Android.build.testlib.mk \ 30 $(LOCAL_PATH)/Android.build.versioned_lib.mk \ 31 $(TEST_PATH)/Android.build.mk 32 33# ----------------------------------------------------------------------------- 34# Library to test gnu-styled hash 35# ----------------------------------------------------------------------------- 36ifneq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),mips mips64)) 37libgnu-hash-table-library_src_files := \ 38 dlext_test_library.cpp \ 39 40libgnu-hash-table-library_ldflags := \ 41 -Wl,--hash-style=gnu \ 42 43module := libgnu-hash-table-library 44module_tag := optional 45include $(LOCAL_PATH)/Android.build.testlib.mk 46endif 47 48# ----------------------------------------------------------------------------- 49# Library to test sysv-styled hash 50# ----------------------------------------------------------------------------- 51libsysv-hash-table-library_src_files := \ 52 dlext_test_library.cpp \ 53 54libsysv-hash-table-library_ldflags := \ 55 -Wl,--hash-style=sysv \ 56 57module := libsysv-hash-table-library 58module_tag := optional 59include $(LOCAL_PATH)/Android.build.testlib.mk 60 61# ----------------------------------------------------------------------------- 62# Library used by dlext tests - with GNU RELRO program header 63# ----------------------------------------------------------------------------- 64libdlext_test_src_files := \ 65 dlext_test_library.cpp \ 66 67libdlext_test_ldflags := \ 68 -Wl,-z,relro \ 69 70module := libdlext_test 71module_tag := optional 72include $(LOCAL_PATH)/Android.build.testlib.mk 73 74# ----------------------------------------------------------------------------- 75# create symlink to libdlext_test.so for symlink test 76# ----------------------------------------------------------------------------- 77# Use = instead of := to defer the evaluation of $@ 78$(TARGET_OUT)/lib/libdlext_test.so: PRIVATE_POST_INSTALL_CMD = \ 79 $(hide) cd $(dir $@) && ln -sf $(notdir $@) libdlext_test_v2.so 80 81ifneq ($(TARGET_2ND_ARCH),) 82# link 64 bit .so 83$(TARGET_OUT)/lib64/libdlext_test.so: PRIVATE_POST_INSTALL_CMD = \ 84 $(hide) cd $(dir $@) && ln -sf $(notdir $@) libdlext_test_v2.so 85endif 86 87# host symlinks 88$(HOST_OUT)/lib64/libdlext_test.so: PRIVATE_POST_INSTALL_CMD = \ 89 $(hide) cd $(dir $@) && ln -sf $(notdir $@) libdlext_test_v2.so 90 91$(HOST_OUT)/lib/libdlext_test.so: PRIVATE_POST_INSTALL_CMD = \ 92 $(hide) cd $(dir $@) && ln -sf $(notdir $@) libdlext_test_v2.so 93 94# ----------------------------------------------------------------------------- 95# Library used by dlext tests - without GNU RELRO program header 96# ----------------------------------------------------------------------------- 97libdlext_test_norelro_src_files := \ 98 dlext_test_library.cpp \ 99 100libdlext_test_norelro_ldflags := \ 101 -Wl,-z,norelro \ 102 103module := libdlext_test_norelro 104module_tag := optional 105build_type := target 106build_target := SHARED_LIBRARY 107include $(TEST_PATH)/Android.build.mk 108 109# ----------------------------------------------------------------------------- 110# Library used by dlext tests - different name non-default location 111# ----------------------------------------------------------------------------- 112libdlext_test_fd_src_files := \ 113 dlext_test_library.cpp \ 114 115libdlext_test_fd_install_to_out_data := true 116module := libdlext_test_fd 117module_tag := optional 118build_type := target 119build_target := SHARED_LIBRARY 120include $(TEST_PATH)/Android.build.mk 121 122# ---------------------------------------------------------------------------- 123# Library with soname which does not match filename 124# ---------------------------------------------------------------------------- 125libdlext_test_different_soname_src_files := \ 126 dlext_test_library.cpp \ 127 128module := libdlext_test_different_soname 129module_tag := optional 130libdlext_test_different_soname_ldflags := -Wl,-soname=libdlext_test_soname.so 131include $(LOCAL_PATH)/Android.build.testlib.mk 132 133# ----------------------------------------------------------------------------- 134# Library used by dlext tests - zipped and aligned 135# ----------------------------------------------------------------------------- 136include $(CLEAR_VARS) 137bionic_2nd_arch_prefix := 138include $(LOCAL_PATH)/Android.build.dlext_testzip.mk 139ifneq ($(TARGET_2ND_ARCH),) 140 bionic_2nd_arch_prefix := $(TARGET_2ND_ARCH_VAR_PREFIX) 141 include $(LOCAL_PATH)/Android.build.dlext_testzip.mk 142endif 143 144# ----------------------------------------------------------------------------- 145# Library used by dlfcn tests 146# ----------------------------------------------------------------------------- 147libtest_simple_src_files := \ 148 dlopen_testlib_simple.cpp 149 150module := libtest_simple 151include $(LOCAL_PATH)/Android.build.testlib.mk 152 153# ----------------------------------------------------------------------------- 154# Library used by dlfcn nodelete tests 155# ----------------------------------------------------------------------------- 156libtest_nodelete_1_src_files := \ 157 dlopen_nodelete_1.cpp 158 159module := libtest_nodelete_1 160include $(LOCAL_PATH)/Android.build.testlib.mk 161 162# ----------------------------------------------------------------------------- 163# Library used by dlfcn nodelete tests 164# ----------------------------------------------------------------------------- 165libtest_nodelete_2_src_files := \ 166 dlopen_nodelete_2.cpp 167 168module := libtest_nodelete_2 169include $(LOCAL_PATH)/Android.build.testlib.mk 170 171# ----------------------------------------------------------------------------- 172# Library used by dlfcn nodelete tests 173# ----------------------------------------------------------------------------- 174libtest_nodelete_dt_flags_1_src_files := \ 175 dlopen_nodelete_dt_flags_1.cpp 176 177libtest_nodelete_dt_flags_1_ldflags := -Wl,-z,nodelete 178 179module := libtest_nodelete_dt_flags_1 180include $(LOCAL_PATH)/Android.build.testlib.mk 181 182# ----------------------------------------------------------------------------- 183# Build library with two parents 184# ----------------------------------------------------------------------------- 185include $(LOCAL_PATH)/Android.build.dlopen_2_parents_reloc.mk 186 187# ----------------------------------------------------------------------------- 188# Build libtest_check_order_dlsym.so with its dependencies. 189# ----------------------------------------------------------------------------- 190include $(LOCAL_PATH)/Android.build.dlopen_check_order_dlsym.mk 191 192# ----------------------------------------------------------------------------- 193# Build libtest_check_order_siblings.so with its dependencies. 194# ----------------------------------------------------------------------------- 195include $(LOCAL_PATH)/Android.build.dlopen_check_order_reloc_siblings.mk 196 197# ----------------------------------------------------------------------------- 198# Build libtest_check_order_root.so with its dependencies. 199# ----------------------------------------------------------------------------- 200include $(LOCAL_PATH)/Android.build.dlopen_check_order_reloc_main_executable.mk 201 202# ----------------------------------------------------------------------------- 203# Build libtest_versioned_lib.so with its dependencies. 204# ----------------------------------------------------------------------------- 205include $(LOCAL_PATH)/Android.build.versioned_lib.mk 206 207# ----------------------------------------------------------------------------- 208# Build libraries needed by pthread_atfork tests 209# ----------------------------------------------------------------------------- 210include $(LOCAL_PATH)/Android.build.pthread_atfork.mk 211 212# ----------------------------------------------------------------------------- 213# Library with dependency loop used by dlfcn tests 214# 215# libtest_with_dependency_loop -> a -> b -> c -> a 216# ----------------------------------------------------------------------------- 217libtest_with_dependency_loop_src_files := dlopen_testlib_loopy_root.cpp 218 219libtest_with_dependency_loop_shared_libraries := \ 220 libtest_with_dependency_loop_a 221 222module := libtest_with_dependency_loop 223include $(LOCAL_PATH)/Android.build.testlib.mk 224 225# ----------------------------------------------------------------------------- 226# libtest_with_dependency_loop_a.so 227# ----------------------------------------------------------------------------- 228libtest_with_dependency_loop_a_src_files := dlopen_testlib_loopy_a.cpp 229 230libtest_with_dependency_loop_a_shared_libraries := \ 231 libtest_with_dependency_loop_b_tmp 232 233module := libtest_with_dependency_loop_a 234include $(LOCAL_PATH)/Android.build.testlib.mk 235 236# ----------------------------------------------------------------------------- 237# libtest_with_dependency_loop_b.so 238# 239# this is temporary placeholder - will be removed 240# ----------------------------------------------------------------------------- 241libtest_with_dependency_loop_b_tmp_src_files := dlopen_testlib_loopy_invalid.cpp 242libtest_with_dependency_loop_b_tmp_ldflags := -Wl,-soname=libtest_with_dependency_loop_b.so 243 244module := libtest_with_dependency_loop_b_tmp 245include $(LOCAL_PATH)/Android.build.testlib.mk 246 247# ----------------------------------------------------------------------------- 248# libtest_with_dependency_loop_b.so 249# ----------------------------------------------------------------------------- 250libtest_with_dependency_loop_b_src_files := dlopen_testlib_loopy_b.cpp 251libtest_with_dependency_loop_b_shared_libraries := libtest_with_dependency_loop_c 252 253module := libtest_with_dependency_loop_b 254include $(LOCAL_PATH)/Android.build.testlib.mk 255 256# ----------------------------------------------------------------------------- 257# libtest_with_dependency_loop_c.so 258# ----------------------------------------------------------------------------- 259libtest_with_dependency_loop_c_src_files := dlopen_testlib_loopy_c.cpp 260 261libtest_with_dependency_loop_c_shared_libraries := \ 262 libtest_with_dependency_loop_a 263 264module := libtest_with_dependency_loop_c 265include $(LOCAL_PATH)/Android.build.testlib.mk 266 267# ----------------------------------------------------------------------------- 268# libtest_relo_check_dt_needed_order.so 269# | 270# +-> libtest_relo_check_dt_needed_order_1.so 271# | 272# +-> libtest_relo_check_dt_needed_order_2.so 273# ----------------------------------------------------------------------------- 274libtest_relo_check_dt_needed_order_shared_libraries := \ 275 libtest_relo_check_dt_needed_order_1 libtest_relo_check_dt_needed_order_2 276 277libtest_relo_check_dt_needed_order_src_files := dlopen_testlib_relo_check_dt_needed_order.cpp 278libtest_relo_check_dt_needed_order_1_src_files := dlopen_testlib_relo_check_dt_needed_order_1.cpp 279libtest_relo_check_dt_needed_order_2_src_files := dlopen_testlib_relo_check_dt_needed_order_2.cpp 280 281module := libtest_relo_check_dt_needed_order 282include $(LOCAL_PATH)/Android.build.testlib.mk 283module := libtest_relo_check_dt_needed_order_1 284include $(LOCAL_PATH)/Android.build.testlib.mk 285module := libtest_relo_check_dt_needed_order_2 286include $(LOCAL_PATH)/Android.build.testlib.mk 287 288# ----------------------------------------------------------------------------- 289# Library with dependency used by dlfcn tests 290# ----------------------------------------------------------------------------- 291libtest_with_dependency_src_files := \ 292 dlopen_testlib_simple.cpp 293 294libtest_with_dependency_shared_libraries := libdlext_test 295 296module := libtest_with_dependency 297include $(LOCAL_PATH)/Android.build.testlib.mk 298 299# ----------------------------------------------------------------------------- 300# Library used by ifunc tests 301# ----------------------------------------------------------------------------- 302libtest_ifunc_src_files := \ 303 dlopen_testlib_ifunc.c 304 305libtest_ifunc_clang_host := false 306module := libtest_ifunc 307build_target := SHARED_LIBRARY 308 309build_type := host 310include $(TEST_PATH)/Android.build.mk 311 312ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),arm64 x86 x86_64)) 313 ifeq ($(TARGET_ARCH),arm64) 314 libtest_ifunc_multilib := 64 315 # TODO: This is a workaround - remove it once gcc 316 # removes its Android ifunc checks 317 libtest_ifunc_cflags := -mglibc 318 endif 319 320 build_type := target 321 libtest_ifunc_clang_target := false 322 include $(TEST_PATH)/Android.build.mk 323endif 324 325# ----------------------------------------------------------------------------- 326# Library used by atexit tests 327# ----------------------------------------------------------------------------- 328 329libtest_atexit_src_files := \ 330 atexit_testlib.cpp 331 332module := libtest_atexit 333include $(LOCAL_PATH)/Android.build.testlib.mk 334 335# ----------------------------------------------------------------------------- 336# This library is used by dl_load test to check symbol preempting 337# by main executable 338# ----------------------------------------------------------------------------- 339libdl_preempt_test_1_src_files := dl_preempt_library_1.cpp 340 341module := libdl_preempt_test_1 342include $(LOCAL_PATH)/Android.build.testlib.mk 343 344# ----------------------------------------------------------------------------- 345# This library is used by dl_load test to check symbol preempting 346# by libdl_preempt_test_1.so 347# ----------------------------------------------------------------------------- 348libdl_preempt_test_2_src_files := dl_preempt_library_2.cpp 349 350module := libdl_preempt_test_2 351include $(LOCAL_PATH)/Android.build.testlib.mk 352 353# ----------------------------------------------------------------------------- 354# Library with DF_1_GLOBAL 355# ----------------------------------------------------------------------------- 356libdl_test_df_1_global_src_files := dl_df_1_global.cpp 357libdl_test_df_1_global_ldflags := -Wl,-z,global 358 359# TODO (dimitry): host ld.gold does not yet support -z global 360# remove this line once it is updated. 361libdl_test_df_1_global_ldflags_host := -fuse-ld=bfd 362 363module := libdl_test_df_1_global 364include $(LOCAL_PATH)/Android.build.testlib.mk 365 366# ----------------------------------------------------------------------------- 367# Library using symbol from libdl_test_df_1_global 368# ----------------------------------------------------------------------------- 369libtest_dlsym_df_1_global_src_files := dl_df_1_use_global.cpp 370module := libtest_dlsym_df_1_global 371include $(LOCAL_PATH)/Android.build.testlib.mk 372 373# ----------------------------------------------------------------------------- 374# Library with weak function 375# ----------------------------------------------------------------------------- 376libtest_dlsym_weak_func_src_files := \ 377 dlsym_weak_function.cpp 378 379module := libtest_dlsym_weak_func 380include $(LOCAL_PATH)/Android.build.testlib.mk 381 382# ----------------------------------------------------------------------------- 383# Library to check RTLD_LOCAL with dlsym in 'this' 384# ----------------------------------------------------------------------------- 385libtest_dlsym_from_this_src_files := dlsym_from_this_symbol.cpp 386 387libtest_dlsym_from_this_shared_libraries_target := libdl 388libtest_dlsym_from_this_shared_libraries := libtest_dlsym_from_this_child 389 390module := libtest_dlsym_from_this 391include $(LOCAL_PATH)/Android.build.testlib.mk 392 393# ----------------------------------------------------------------------------- 394libtest_dlsym_from_this_child_src_files := dlsym_from_this_functions.cpp 395 396libtest_dlsym_from_this_child_shared_libraries := libtest_dlsym_from_this_grandchild 397 398module := libtest_dlsym_from_this_child 399include $(LOCAL_PATH)/Android.build.testlib.mk 400 401# ----------------------------------------------------------------------------- 402libtest_dlsym_from_this_grandchild_src_files := dlsym_from_this_symbol2.cpp 403 404module := libtest_dlsym_from_this_grandchild 405include $(LOCAL_PATH)/Android.build.testlib.mk 406 407# ----------------------------------------------------------------------------- 408# Empty library 409# ----------------------------------------------------------------------------- 410libtest_empty_src_files := empty.cpp 411 412module := libtest_empty 413include $(LOCAL_PATH)/Android.build.testlib.mk 414 415# ----------------------------------------------------------------------------- 416# Library with weak undefined function 417# ----------------------------------------------------------------------------- 418libtest_dlopen_weak_undefined_func_src_files := \ 419 dlopen_weak_undefined.cpp 420 421module := libtest_dlopen_weak_undefined_func 422include $(LOCAL_PATH)/Android.build.testlib.mk 423 424# ----------------------------------------------------------------------------- 425# Library with constructor that calls dlopen() b/7941716 426# ----------------------------------------------------------------------------- 427libtest_dlopen_from_ctor_src_files := \ 428 dlopen_testlib_dlopen_from_ctor.cpp 429 430module := libtest_dlopen_from_ctor 431 432libtest_dlopen_from_ctor_shared_libraries_target := libdl 433 434include $(LOCAL_PATH)/Android.build.testlib.mk 435 436# ----------------------------------------------------------------------------- 437# Library that depends on the library with constructor that calls dlopen() b/7941716 438# ----------------------------------------------------------------------------- 439 440libtest_dlopen_from_ctor_main_src_files := empty.cpp 441libtest_dlopen_from_ctor_main_shared_libraries := libtest_dlopen_from_ctor 442 443module := libtest_dlopen_from_ctor_main 444include $(LOCAL_PATH)/Android.build.testlib.mk 445