# This file is used for tool tests, and also in perf/Makefile.am.

include $(top_srcdir)/Makefile.all.am

AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/include \
		-I$(top_srcdir)/coregrind -I$(top_builddir)/include \
		-I$(top_srcdir)/VEX/pub \
		-I$(top_builddir)/VEX/pub \
		-DVGA_@VGCONF_ARCH_PRI@=1 \
		-DVGO_@VGCONF_OS@=1 \
		-DVGP_@VGCONF_ARCH_PRI@_@VGCONF_OS@=1 \
		-DVGPV_@VGCONF_ARCH_PRI@_@VGCONF_OS@_@VGCONF_PLATVARIANT@=1

if VGCONF_HAVE_PLATFORM_SEC
AM_CPPFLAGS +=	-DVGA_SEC_@VGCONF_ARCH_SEC@=1  \
		-DVGP_SEC_@VGCONF_ARCH_PRI@_@VGCONF_OS@=1
endif

# Nb: Tools need to augment these flags with an arch-selection option, such
# as $(AM_FLAG_M3264_PRI).
AM_CFLAGS   = -Winline -Wall -Wshadow -Wno-long-long -g \
              @FLAG_FNO_STACK_PROTECTOR@
AM_CXXFLAGS = -Winline -Wall -Wshadow -Wno-long-long -g \
              @FLAG_FNO_STACK_PROTECTOR@
# Include AM_CPPFLAGS in AM_CCASFLAGS to allow for older versions of
# automake;  see comments in Makefile.all.am for more detail.
AM_CCASFLAGS = $(AM_CPPFLAGS)

if VGCONF_OS_IS_DARWIN
noinst_DSYMS = $(check_PROGRAMS)
endif

if COMPILER_IS_CLANG
AM_CFLAGS   += -Wno-format-extra-args       # perf/tinycc.c
AM_CFLAGS   += -Wno-literal-range           # none/tests/amd64/fxtract.c
AM_CFLAGS   += -Wno-tautological-constant-out-of-range-compare # ...../aes.c
AM_CFLAGS   += -Wno-self-assign             # memcheck/tests/unit_libcbase.c
AM_CFLAGS   += -Wno-string-plus-int         # drd/tests/annotate_ignore_rw.c
AM_CFLAGS   += -Wno-uninitialized           # clang 3.4.2 and earlier
AM_CFLAGS   += -Wno-unused-value            # clang 3.0.0
AM_CXXFLAGS += -Wno-unused-private-field    # drd/tests/tsan_unittest.cpp
endif

check-local: build-noinst_DSYMS

clean-local: clean-noinst_DSYMS
