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 9 inplacedir = $(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. 26 build-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. 37 inplace-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 45 inplace-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. 55 install-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'... 65 install-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. 72 clean-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. 85 AM_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. 101 if VGCONF_OS_IS_DARWIN 102 AM_CFLAGS_PIC = -dynamic -O -g -fno-omit-frame-pointer -fno-strict-aliasing \ 103 -mno-dynamic-no-pic -fpic -fPIC \ 104 -fno-builtin 105 else 106 AM_CFLAGS_PIC = -fpic -O -g -fno-omit-frame-pointer -fno-strict-aliasing \ 107 -fno-builtin 108 endif 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 124 AM_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 132 if VGCONF_HAVE_PLATFORM_SEC 133 AM_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 141 endif 142 143 AM_FLAG_M3264_X86_LINUX = @FLAG_M32@ 144 AM_CFLAGS_X86_LINUX = @FLAG_M32@ @PREFERRED_STACK_BOUNDARY@ \ 145 $(AM_CFLAGS_BASE) 146 AM_CCASFLAGS_X86_LINUX = $(AM_CPPFLAGS_X86_LINUX) @FLAG_M32@ -g 147 148 AM_FLAG_M3264_AMD64_LINUX = @FLAG_M64@ 149 AM_CFLAGS_AMD64_LINUX = @FLAG_M64@ -fomit-frame-pointer \ 150 @PREFERRED_STACK_BOUNDARY@ $(AM_CFLAGS_BASE) 151 AM_CCASFLAGS_AMD64_LINUX = $(AM_CPPFLAGS_AMD64_LINUX) @FLAG_M64@ -g 152 153 AM_FLAG_M3264_PPC32_LINUX = @FLAG_M32@ 154 AM_CFLAGS_PPC32_LINUX = @FLAG_M32@ $(AM_CFLAGS_BASE) 155 AM_CCASFLAGS_PPC32_LINUX = $(AM_CPPFLAGS_PPC32_LINUX) @FLAG_M32@ -g 156 157 AM_FLAG_M3264_PPC64_LINUX = @FLAG_M64@ 158 AM_CFLAGS_PPC64_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) 159 AM_CCASFLAGS_PPC64_LINUX = $(AM_CPPFLAGS_PPC64_LINUX) @FLAG_M64@ -g 160 161 AM_FLAG_M3264_ARM_LINUX = @FLAG_M32@ 162 AM_CFLAGS_ARM_LINUX = @FLAG_M32@ @PREFERRED_STACK_BOUNDARY@ \ 163 $(AM_CFLAGS_BASE) -marm -mcpu=cortex-a8 164 AM_CCASFLAGS_ARM_LINUX = $(AM_CPPFLAGS_ARM_LINUX) @FLAG_M32@ \ 165 -marm -mcpu=cortex-a8 -g 166 167 AM_FLAG_M3264_X86_DARWIN = -arch i386 168 AM_CFLAGS_X86_DARWIN = $(WERROR) -arch i386 $(AM_CFLAGS_BASE) \ 169 -mmacosx-version-min=10.5 \ 170 -fno-stack-protector -fno-pic -fno-PIC 171 172 AM_CCASFLAGS_X86_DARWIN = $(AM_CPPFLAGS_X86_DARWIN) -arch i386 -g 173 174 AM_FLAG_M3264_AMD64_DARWIN = -arch x86_64 175 AM_CFLAGS_AMD64_DARWIN = $(WERROR) -arch x86_64 $(AM_CFLAGS_BASE) \ 176 -mmacosx-version-min=10.5 -fno-stack-protector 177 AM_CCASFLAGS_AMD64_DARWIN = $(AM_CPPFLAGS_AMD64_DARWIN) -arch x86_64 -g 178 179 AM_FLAG_M3264_S390X_LINUX = @FLAG_M64@ 180 AM_CFLAGS_S390X_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) 181 AM_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 # 188 AM_FLAG_M3264_PRI = $(AM_FLAG_M3264_@VGCONF_PLATFORM_PRI_CAPS@) 189 AM_CPPFLAGS_PRI = $(AM_CPPFLAGS_@VGCONF_PLATFORM_PRI_CAPS@) 190 AM_CFLAGS_PRI = $(AM_CFLAGS_@VGCONF_PLATFORM_PRI_CAPS@) 191 AM_CCASFLAGS_PRI = $(AM_CCASFLAGS_@VGCONF_PLATFORM_PRI_CAPS@) 192 193 if VGCONF_HAVE_PLATFORM_SEC 194 AM_FLAG_M3264_SEC = $(AM_FLAG_M3264_@VGCONF_PLATFORM_SEC_CAPS@) 195 else 196 AM_FLAG_M3264_SEC = 197 endif 198 199 200 # Baseline link flags for making vgpreload shared objects. 201 # 202 PRELOAD_LDFLAGS_COMMON_LINUX = -nodefaultlibs -shared -Wl,-z,interpose,-z,initfirst 203 PRELOAD_LDFLAGS_COMMON_DARWIN = -dynamic -dynamiclib -all_load 204 205 PRELOAD_LDFLAGS_X86_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@ 206 PRELOAD_LDFLAGS_AMD64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@ 207 PRELOAD_LDFLAGS_PPC32_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@ 208 PRELOAD_LDFLAGS_PPC64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@ 209 PRELOAD_LDFLAGS_ARM_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@ 210 PRELOAD_LDFLAGS_X86_DARWIN = $(PRELOAD_LDFLAGS_COMMON_DARWIN) -arch i386 211 PRELOAD_LDFLAGS_AMD64_DARWIN = $(PRELOAD_LDFLAGS_COMMON_DARWIN) -arch x86_64 212 PRELOAD_LDFLAGS_S390X_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@ 213 214