# $NetBSD: Makefile,v 1.28 2025/06/10 14:30:44 christos Exp $
#
NOMAN= # defined
include <bsd.own.mk>
if ${MKPIC} != "no"
SUBDIR+= helper_dso1
SUBDIR+= helper_dso3
SUBDIR+= .WAIT
SUBDIR+= helper_dso2
SUBDIR+= .WAIT
SUBDIR+= helper_ifunc_dso
SUBDIR+= helper_symver_dso0
SUBDIR+= .WAIT
SUBDIR+= helper_symver_dso1
SUBDIR+= .WAIT
SUBDIR+= helper_symver_dso2
SUBDIR+= .WAIT
SUBDIR+= data
SUBDIR+= helper_def_dynamic
SUBDIR+= helper_def_static
SUBDIR+= helper_onlydef
SUBDIR+= .WAIT
SUBDIR+= helper_abuse_dynamic
SUBDIR+= helper_abuse_static
SUBDIR+= helper_onlyctor_dynamic
SUBDIR+= helper_onlyuse_dynamic
SUBDIR+= helper_onlyuse_static
SUBDIR+= helper_use_dynamic
SUBDIR+= helper_use_static
TESTSDIR= ${TESTSBASE}/libexec/ld.elf_so
TESTS_C+= t_dlerror-cleared
TESTS_C+= t_dlerror-false
TESTS_C+= t_dlinfo
TESTS_C+= t_dlvsym
TESTS_C+= t_hash
TESTS_C+= t_ifunc
TESTS_C+= t_ifunc_norelro
TESTS_C+= t_ifunc_norelro_now
TESTS_C+= t_ifunc_now
TESTS_C+= t_rtld_r_debug
TESTS_C+= t_rtld_r_debug_nopie
TESTS_C+= t_tls_extern
SRCS.t_ifunc_now= t_ifunc.c
SRCS.t_ifunc_norelro= t_ifunc.c
SRCS.t_ifunc_norelro_now= t_ifunc.c
LDADD.t_ifunc+= ${${MKRELRO} != "no":?-Wl,-z,relro:}
LDADD.t_ifunc_now+= ${${MKRELRO} != "no":?-Wl,-z,relro:} -Wl,-z,now
LDADD.t_ifunc_norelro+= ${${MKRELRO} != "no":?-Wl,-z,norelro:}
LDADD.t_ifunc_norelro_now+= ${${MKRELRO} != "no":?-Wl,-z,norelro:} -Wl,-z,now
SRCS.t_rtld_r_debug_nopie= t_rtld_r_debug.c
# If the port doesn't support PIE anyway, well, no big deal, we have
# two copies of the same tiny test.
LDADD.t_rtld_r_debug_nopie+= -Wl,-no-pie
PATH: ${NETBSDSRCDIR}/libexec/ld.elf_so
SRCS.t_hash+= t_hash.c
SRCS.t_hash+= hash.c
CPPFLAGS.t_hash.c+= -I${NETBSDSRCDIR}/libexec/ld.elf_so
COPTS.t_rtld_r_debug.c += ${CC_WNO_MAYBE_UNINITIALIZED}
LDADD.t_dlerror-false= -Wl,-rpath,/var/nonexistent/lib
LDADD.t_dlvsym= -Wl,-rpath,${TESTSDIR}/h_helper_symver_dso2
for t in t_ifunc t_ifunc_now t_ifunc_norelro t_ifunc_norelro_now
LDADD.${t}+= -Wl,-rpath,${TESTSDIR} -lutil
DPADD.${t}+= ${LIBUTIL}
endfor
LDADD.t_tls_extern+= -Wl,-rpath,${TESTSDIR}
TESTS_SH+= t_df_1_noopen
TESTS_SH+= t_dl_symver
TESTS_SH+= t_r_rel
TESTS_SH+= t_thread_local_dtor
BINDIR= ${TESTSDIR}
PROGS+= h_df_1_noopen1
SRCS.h_df_1_noopen1= h_df_1_noopen.c
PROGS+= h_df_1_noopen2
SRCS.h_df_1_noopen2= h_df_1_noopen.c
LDADD.h_df_1_noopen2= -lpthread
PROGS+= h_thread_local_dtor
LDADD.h_thread_local_dtor= -Wl,-rpath,${TESTSDIR} -lpthread
PROGS+= h_ifunc
SRCS.h_ifunc= h_ifunc.c
IFUNCDIR!= cd ${.CURDIR}/helper_ifunc_dso && ${PRINTOBJDIR}
LDADD.h_ifunc= -Wl,-rpath,${TESTSDIR} -L${IFUNCDIR} -lh_helper_ifunc_dso
PROGS+= h_locking
SRCS.h_locking= h_locking.c
LDADD.h_locking= -lpthread -Wl,--export-dynamic -Wl,-rpath,${TESTSDIR}
PROGS+= h_dl_symver_v0
SRCS.h_dl_symver_v0= h_dl_symver.c
V0ODIR!= cd ${.CURDIR}/helper_symver_dso0 && ${PRINTOBJDIR}
LDADD.h_dl_symver_v0= -L${V0ODIR} -lh_helper_symver_dso
PROGS+= h_dl_symver_v1
SRCS.h_dl_symver_v1= h_dl_symver.c
V1ODIR!= cd ${.CURDIR}/helper_symver_dso1 && ${PRINTOBJDIR}
LDADD.h_dl_symver_v1= -L${V1ODIR} -lh_helper_symver_dso
PROGS+= h_dl_symver_v2
SRCS.h_dl_symver_v2= h_dl_symver.c
V2ODIR!= cd ${.CURDIR}/helper_symver_dso2 && ${PRINTOBJDIR}
LDADD.h_dl_symver_v2= -L${V2ODIR} -lh_helper_symver_dso
PROGS+= h_r_rel_pack
PROGS+= h_r_rel_nopack
SRCS.h_r_rel_pack= h_r_rel.c
SRCS.h_r_rel_nopack= h_r_rel.c
h_r_rel_pack: CTFMERGE=: # PR toolchain/59364: ctf tools needs update
LDFLAGS.h_r_rel_pack= ${LD_PACK_RELATIVE_RELOCS}
LDFLAGS.h_r_rel_nopack= ${LD_NOPACK_RELATIVE_RELOCS}
include <bsd.test.mk>
else
NOPROG= # defined
include <bsd.prog.mk>
endif