1 2# This file should be included (directly or indirectly) by every 3# Makefile.am that builds programs. And also the top-level Makefile.am. 4 5#---------------------------------------------------------------------------- 6# Global stuff 7#---------------------------------------------------------------------------- 8 9inplacedir = $(top_builddir)/.in_place 10 11# This used to be required when Vex had a handwritten Makefile. It 12# shouldn't be needed any more, though. 13##.NOTPARALLEL: 14 15#---------------------------------------------------------------------------- 16# noinst_PROGRAMS and noinst_DSYMS targets 17#---------------------------------------------------------------------------- 18 19# On Darwin, for a program 'p', the DWARF debug info is stored in the 20# directory 'p.dSYM'. This must be generated after the executable is 21# created, with 'dsymutil p'. We could redefine LINK with a script that 22# executes 'dsymutil' after linking, but that's a pain. Instead we use this 23# hook so that every time "make check" is run, we subsequently invoke 24# 'dsymutil' on all the executables that lack a .dSYM directory, or that are 25# newer than their corresponding .dSYM directory. 26build-noinst_DSYMS: $(noinst_DSYMS) 27 for f in $(noinst_DSYMS); do \ 28 if [ ! -e $$f.dSYM -o $$f -nt $$f.dSYM ] ; then \ 29 echo "dsymutil $$f"; \ 30 dsymutil $$f; \ 31 fi; \ 32 done 33 34# This is used by coregrind/Makefile.am and Makefile.tool.am for doing 35# "in-place" installs. It copies $(noinst_PROGRAMS) into $inplacedir. 36# It needs to be depended on by an 'all-local' rule. 37inplace-noinst_PROGRAMS: $(noinst_PROGRAMS) 38 mkdir -p $(inplacedir); \ 39 for f in $(noinst_PROGRAMS) ; do \ 40 rm -f $(inplacedir)/$$f; \ 41 ln -f -s ../$(subdir)/$$f $(inplacedir); \ 42 done 43 44# Similar to inplace-noinst_PROGRAMS 45inplace-noinst_DSYMS: build-noinst_DSYMS 46 mkdir -p $(inplacedir); \ 47 for f in $(noinst_DSYMS); do \ 48 rm -f $(inplacedir)/$$f.dSYM; \ 49 ln -f -s ../$(subdir)/$$f.dSYM $(inplacedir); \ 50 done 51 52# This is used by coregrind/Makefile.am and by <tool>/Makefile.am for doing 53# "make install". It copies $(noinst_PROGRAMS) into $prefix/lib/valgrind/. 54# It needs to be depended on by an 'install-exec-local' rule. 55install-noinst_PROGRAMS: $(noinst_PROGRAMS) 56 $(mkinstalldirs) $(DESTDIR)$(pkglibdir); \ 57 for f in $(noinst_PROGRAMS); do \ 58 $(INSTALL_PROGRAM) $$f $(DESTDIR)$(pkglibdir); \ 59 done 60 61# Similar to install-noinst_PROGRAMS. 62# Nb: we don't use $(INSTALL_PROGRAM) here because it doesn't work with 63# directories. XXX: not sure whether the resulting permissions will be 64# correct when using 'cp -R'... 65install-noinst_DSYMS: build-noinst_DSYMS 66 $(mkinstalldirs) $(DESTDIR)$(pkglibdir); \ 67 for f in $(noinst_DSYMS); do \ 68 cp -R $$f.dSYM $(DESTDIR)$(pkglibdir); \ 69 done 70 71# This needs to be depended on by a 'clean-local' rule. 72clean-noinst_DSYMS: 73 for f in $(noinst_DSYMS); do \ 74 rm -rf $$f.dSYM; \ 75 done 76 77#---------------------------------------------------------------------------- 78# Flags 79#---------------------------------------------------------------------------- 80 81# Baseline flags for all compilations. Aim here is to maximise 82# performance and get whatever useful warnings we can out of gcc. 83# -fno-builtin is important for defeating LLVM's idiom recognition 84# that somehow causes VG_(memset) to get into infinite recursion. 85AM_CFLAGS_BASE = \ 86 -O2 -g \ 87 -Wall \ 88 -Wmissing-prototypes \ 89 -Wshadow \ 90 -Wpointer-arith \ 91 -Wstrict-prototypes \ 92 -Wmissing-declarations \ 93 @FLAG_W_NO_FORMAT_ZERO_LENGTH@ \ 94 -fno-strict-aliasing \ 95 -fno-builtin 96 97# These flags are used for building the preload shared objects. 98# The aim is to give reasonable performance but also to have good 99# stack traces, since users often see stack traces extending 100# into (and through) the preloads. 101if VGCONF_OS_IS_DARWIN 102AM_CFLAGS_PIC = -dynamic -O -g -fno-omit-frame-pointer -fno-strict-aliasing \ 103 -mno-dynamic-no-pic -fpic -fPIC \ 104 -fno-builtin 105else 106AM_CFLAGS_PIC = -fpic -O -g -fno-omit-frame-pointer -fno-strict-aliasing \ 107 -fno-builtin 108endif 109 110 111# Flags for specific targets. 112# 113# Nb: the AM_CPPFLAGS_* values are suitable for building tools and auxprogs. 114# For building the core, coregrind/Makefile.am files add some extra things. 115# 116# Also: in newer versions of automake (1.10 onwards?) asm files ending with 117# '.S' are considered "pre-processed" (as opposed to those ending in '.s') 118# and so the CPPFLAGS are passed to the assembler. But this is not true for 119# older automakes (e.g. 1.8.5, 1.9.6), sigh. So we include 120# AM_CPPFLAGS_<PLATFORM> in each AM_CCASFLAGS_<PLATFORM> variable. This 121# means some of the flags are duplicated on systems with newer versions of 122# automake, but this does not really matter and seems hard to avoid. 123 124AM_CPPFLAGS_@VGCONF_PLATFORM_PRI_CAPS@ = \ 125 -I$(top_srcdir) \ 126 -I$(top_srcdir)/include \ 127 -I$(top_srcdir)/VEX/pub \ 128 -DVGA_@VGCONF_ARCH_PRI@=1 \ 129 -DVGO_@VGCONF_OS@=1 \ 130 -DVGP_@VGCONF_ARCH_PRI@_@VGCONF_OS@=1 \ 131 -DVGPV_@VGCONF_ARCH_PRI@_@VGCONF_OS@_@VGCONF_PLATVARIANT@=1 132if VGCONF_HAVE_PLATFORM_SEC 133AM_CPPFLAGS_@VGCONF_PLATFORM_SEC_CAPS@ = \ 134 -I$(top_srcdir) \ 135 -I$(top_srcdir)/include \ 136 -I$(top_srcdir)/VEX/pub \ 137 -DVGA_@VGCONF_ARCH_SEC@=1 \ 138 -DVGO_@VGCONF_OS@=1 \ 139 -DVGP_@VGCONF_ARCH_SEC@_@VGCONF_OS@=1 \ 140 -DVGPV_@VGCONF_ARCH_SEC@_@VGCONF_OS@_@VGCONF_PLATVARIANT@=1 141endif 142 143AM_FLAG_M3264_X86_LINUX = @FLAG_M32@ 144AM_CFLAGS_X86_LINUX = @FLAG_M32@ @PREFERRED_STACK_BOUNDARY@ \ 145 $(AM_CFLAGS_BASE) 146AM_CCASFLAGS_X86_LINUX = $(AM_CPPFLAGS_X86_LINUX) @FLAG_M32@ -g 147 148AM_FLAG_M3264_AMD64_LINUX = @FLAG_M64@ 149AM_CFLAGS_AMD64_LINUX = @FLAG_M64@ -fomit-frame-pointer \ 150 @PREFERRED_STACK_BOUNDARY@ $(AM_CFLAGS_BASE) 151AM_CCASFLAGS_AMD64_LINUX = $(AM_CPPFLAGS_AMD64_LINUX) @FLAG_M64@ -g 152 153AM_FLAG_M3264_PPC32_LINUX = @FLAG_M32@ 154AM_CFLAGS_PPC32_LINUX = @FLAG_M32@ $(AM_CFLAGS_BASE) 155AM_CCASFLAGS_PPC32_LINUX = $(AM_CPPFLAGS_PPC32_LINUX) @FLAG_M32@ -g 156 157AM_FLAG_M3264_PPC64_LINUX = @FLAG_M64@ 158AM_CFLAGS_PPC64_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) 159AM_CCASFLAGS_PPC64_LINUX = $(AM_CPPFLAGS_PPC64_LINUX) @FLAG_M64@ -g 160 161AM_FLAG_M3264_ARM_LINUX = @FLAG_M32@ 162AM_CFLAGS_ARM_LINUX = @FLAG_M32@ @PREFERRED_STACK_BOUNDARY@ \ 163 $(AM_CFLAGS_BASE) -marm -mcpu=cortex-a8 164AM_CCASFLAGS_ARM_LINUX = $(AM_CPPFLAGS_ARM_LINUX) @FLAG_M32@ \ 165 -marm -mcpu=cortex-a8 -g 166 167AM_FLAG_M3264_X86_DARWIN = -arch i386 168AM_CFLAGS_X86_DARWIN = $(WERROR) -arch i386 $(AM_CFLAGS_BASE) \ 169 -mmacosx-version-min=10.5 \ 170 -fno-stack-protector -fno-pic -fno-PIC 171 172AM_CCASFLAGS_X86_DARWIN = $(AM_CPPFLAGS_X86_DARWIN) -arch i386 -g 173 174AM_FLAG_M3264_AMD64_DARWIN = -arch x86_64 175AM_CFLAGS_AMD64_DARWIN = $(WERROR) -arch x86_64 $(AM_CFLAGS_BASE) \ 176 -mmacosx-version-min=10.5 -fno-stack-protector 177AM_CCASFLAGS_AMD64_DARWIN = $(AM_CPPFLAGS_AMD64_DARWIN) -arch x86_64 -g 178 179AM_FLAG_M3264_S390X_LINUX = @FLAG_M64@ 180AM_CFLAGS_S390X_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) 181AM_CCASFLAGS_S390X_LINUX = $(AM_CPPFLAGS_S390X_LINUX) -mzarch -march=z900 \ 182 @FLAG_M64@ -g 183 184# Flags for the primary target. These must be used to build the 185# regtests and performance tests. In fact, these must be used to 186# build anything which is built only once on a dual-arch build. 187# 188AM_FLAG_M3264_PRI = $(AM_FLAG_M3264_@VGCONF_PLATFORM_PRI_CAPS@) 189AM_CPPFLAGS_PRI = $(AM_CPPFLAGS_@VGCONF_PLATFORM_PRI_CAPS@) 190AM_CFLAGS_PRI = $(AM_CFLAGS_@VGCONF_PLATFORM_PRI_CAPS@) 191AM_CCASFLAGS_PRI = $(AM_CCASFLAGS_@VGCONF_PLATFORM_PRI_CAPS@) 192 193if VGCONF_HAVE_PLATFORM_SEC 194 AM_FLAG_M3264_SEC = $(AM_FLAG_M3264_@VGCONF_PLATFORM_SEC_CAPS@) 195else 196 AM_FLAG_M3264_SEC = 197endif 198 199 200# Baseline link flags for making vgpreload shared objects. 201# 202PRELOAD_LDFLAGS_COMMON_LINUX = -nodefaultlibs -shared -Wl,-z,interpose,-z,initfirst 203PRELOAD_LDFLAGS_COMMON_DARWIN = -dynamic -dynamiclib -all_load 204 205PRELOAD_LDFLAGS_X86_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@ 206PRELOAD_LDFLAGS_AMD64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@ 207PRELOAD_LDFLAGS_PPC32_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@ 208PRELOAD_LDFLAGS_PPC64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@ 209PRELOAD_LDFLAGS_ARM_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@ 210PRELOAD_LDFLAGS_X86_DARWIN = $(PRELOAD_LDFLAGS_COMMON_DARWIN) -arch i386 211PRELOAD_LDFLAGS_AMD64_DARWIN = $(PRELOAD_LDFLAGS_COMMON_DARWIN) -arch x86_64 212PRELOAD_LDFLAGS_S390X_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@ 213 214