#       $NetBSD: Makefile.sanitizer,v 1.19 2024/07/02 02:36:22 rin Exp $

SANITIZER=${GCCDIST}/libsanitizer
PATH: ${SANITIZER}/interception ${SANITIZER}/sanitizer_common

INTERCEPTION_SRCS= \
       interception_linux.cpp \
       interception_mac.cpp \
       interception_win.cpp \
       interception_type_test.cpp

# XXXmknative
SANITIZER_SRCS+= \
       sancov_flags.cpp \
       sanitizer_allocator.cpp \
       sanitizer_allocator_checks.cpp \
       sanitizer_allocator_report.cpp \
       sanitizer_common.cpp \
       sanitizer_common_libcdep.cpp \
       sanitizer_coverage_libcdep_new.cpp \
       sanitizer_deadlock_detector1.cpp \
       sanitizer_deadlock_detector2.cpp \
       sanitizer_errno.cpp \
       sanitizer_file.cpp \
       sanitizer_flags.cpp \
       sanitizer_flag_parser.cpp \
       sanitizer_libc.cpp \
       sanitizer_libignore.cpp \
       sanitizer_linux.cpp \
       sanitizer_linux_libcdep.cpp \
       sanitizer_linux_s390.cpp \
       sanitizer_mac.cpp \
       sanitizer_mac_libcdep.cpp \
       sanitizer_mutex.cpp \
       sanitizer_netbsd.cpp \
       sanitizer_openbsd.cpp \
       sanitizer_platform_limits_freebsd.cpp \
       sanitizer_platform_limits_linux.cpp \
       sanitizer_platform_limits_netbsd.cpp \
       sanitizer_platform_limits_openbsd.cpp \
       sanitizer_platform_limits_posix.cpp \
       sanitizer_platform_limits_solaris.cpp \
       sanitizer_posix.cpp \
       sanitizer_posix_libcdep.cpp \
       sanitizer_printf.cpp \
       sanitizer_procmaps_bsd.cpp \
       sanitizer_procmaps_common.cpp \
       sanitizer_procmaps_linux.cpp \
       sanitizer_procmaps_mac.cpp \
       sanitizer_procmaps_solaris.cpp \
       sanitizer_solaris.cpp \
       sanitizer_stackdepot.cpp \
       sanitizer_stacktrace.cpp \
       sanitizer_stacktrace_libcdep.cpp \
       sanitizer_stacktrace_sparc.cpp \
       sanitizer_symbolizer_mac.cpp \
       sanitizer_symbolizer_report.cpp \
       sanitizer_stacktrace_printer.cpp \
       sanitizer_stoptheworld_linux_libcdep.cpp \
       sanitizer_stoptheworld_netbsd_libcdep.cpp \
       sanitizer_stoptheworld_mac.cpp \
       sanitizer_suppressions.cpp \
       sanitizer_symbolizer.cpp \
       sanitizer_symbolizer_libbacktrace.cpp \
       sanitizer_symbolizer_libcdep.cpp \
       sanitizer_symbolizer_posix_libcdep.cpp \
       sanitizer_symbolizer_win.cpp \
       sanitizer_termination.cpp \
       sanitizer_thread_registry.cpp \
       sanitizer_tls_get_addr.cpp \
       sanitizer_unwind_linux_libcdep.cpp \
       sanitizer_unwind_win.cpp \
       sanitizer_win.cpp

# The linux build does this to avoid preinit sections on shared libraries
CSHLIBFLAGS+= -DPIC

#SRCS+= ${INTERCEPTION_SRCS} ${SANITIZER_SRCS} ${UBSAN_SRCS}
SRCS+=  ${INTERCEPTION_SRCS} ${SANITIZER_SRCS}
CPPFLAGS+=-I${SANITIZER}/include -I${SANITIZER}
CPPFLAGS.sanitizer_netbsd.cc+=-I${GCCDIST}/gcc/ginclude
CPPFLAGS+=-D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS
CPPFLAGS+=-D__STDC_LIMIT_MACROS
CPPFLAGS+=-DASAN_NEEDS_SEGV=1
CPPFLAGS+=-DASAN_HAS_CXA_RETHROW_PRIMARY_EXCEPTION=0
#CPPFLAGS+=-DCAN_SANITIZE_UB=0


LIBDPLIBS+=    pthread ${.CURDIR}/../../../../../lib/libpthread
COPTS+=-fPIC -fno-builtin -fno-exceptions -fno-rtti
COPTS+=-funwind-tables -fvisibility=hidden -fno-ipa-icf
#COPTS+=-fsized-deallocation
COPTS+=-std=gnu++14

# XXX is this mis-compiled, and supposed to be some weak-symbol override thing?
for _f in asan_suppressions.cpp sancov_flags.cpp
#COPTS.${_f}+=-Wno-error=address
COPTS.${_f}+=-Wno-address
endfor
# XXX
COPTS.sanitizer_posix.cpp+=-Wno-error=maybe-uninitialized
COPTS.tsan_rtl_access.cpp+=-Wno-error=maybe-uninitialized
COPTS.ubsan_handlers_cxx.cpp+=-Wno-error=maybe-uninitialized

# Can't profile without it
#-fomit-frame-pointer

if ${MACHINE_ARCH} == "vax"
COPTS.sanitizer_allocator.cc += -O1
COPTS.sanitizer_common.cc += -O1
COPTS.sanitizer_common_libcdep.cc += -O1
COPTS.sanitizer_coverage_libcdep.cc += -O1
COPTS.sanitizer_coverage_mapping_libcdep.cc += -O1
COPTS.sanitizer_deadlock_detector1.cc += -O1
COPTS.sanitizer_mac.cc += -O1
COPTS.sanitizer_netbsd.cc += -O1
COPTS.sanitizer_posix.cc += -O1
COPTS.sanitizer_printf.cc += -O1
COPTS.sanitizer_procmaps_common.cc += -O1
COPTS.sanitizer_stackdepot.cc += -O1
COPTS.sanitizer_symbolizer_libcdep.cc += -O1
COPTS.sanitizer_symbolizer_report.cc += -O1
COPTS.ubsan_diag.cc += -O1
COPTS.ubsan_init.cc += -O1
endif