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 AM_CFLAGS_BASE = \ 84 -O2 -g \ 85 -Wall \ 86 -Wmissing-prototypes \ 87 -Wshadow \ 88 -Wpointer-arith \ 89 -Wstrict-prototypes \ 90 -Wmissing-declarations \ 91 @FLAG_W_NO_FORMAT_ZERO_LENGTH@ \ 92 -fno-strict-aliasing 93 94 # These flags are used for building the preload shared objects. 95 # The aim is to give reasonable performance but also to have good 96 # stack traces, since users often see stack traces extending 97 # into (and through) the preloads. 98 if VGCONF_OS_IS_DARWIN 99 AM_CFLAGS_PIC = -dynamic -O -g -fno-omit-frame-pointer -fno-strict-aliasing \ 100 -mno-dynamic-no-pic -fpic -fPIC 101 else 102 AM_CFLAGS_PIC = -fpic -O -g -fno-omit-frame-pointer -fno-strict-aliasing 103 endif 104 105 106 # Flags for specific targets. 107 # 108 # Nb: the AM_CPPFLAGS_* values are suitable for building tools and auxprogs. 109 # For building the core, coregrind/Makefile.am files add some extra things. 110 # 111 # Also: in newer versions of automake (1.10 onwards?) asm files ending with 112 # '.S' are considered "pre-processed" (as opposed to those ending in '.s') 113 # and so the CPPFLAGS are passed to the assembler. But this is not true for 114 # older automakes (e.g. 1.8.5, 1.9.6), sigh. So we include 115 # AM_CPPFLAGS_<PLATFORM> in each AM_CCASFLAGS_<PLATFORM> variable. This 116 # means some of the flags are duplicated on systems with newer versions of 117 # automake, but this does not really matter and seems hard to avoid. 118 119 AM_CPPFLAGS_@VGCONF_PLATFORM_PRI_CAPS@ = \ 120 -I$(top_srcdir) \ 121 -I$(top_srcdir)/include \ 122 -I$(top_srcdir)/VEX/pub \ 123 -DVGA_@VGCONF_ARCH_PRI@=1 \ 124 -DVGO_@VGCONF_OS@=1 \ 125 -DVGP_@VGCONF_ARCH_PRI@_@VGCONF_OS@=1 126 if VGCONF_HAVE_PLATFORM_SEC 127 AM_CPPFLAGS_@VGCONF_PLATFORM_SEC_CAPS@ = \ 128 -I$(top_srcdir) \ 129 -I$(top_srcdir)/include \ 130 -I$(top_srcdir)/VEX/pub \ 131 -DVGA_@VGCONF_ARCH_SEC@=1 \ 132 -DVGO_@VGCONF_OS@=1 \ 133 -DVGP_@VGCONF_ARCH_SEC@_@VGCONF_OS@=1 134 endif 135 136 AM_FLAG_M3264_X86_LINUX = @FLAG_M32@ 137 AM_CFLAGS_X86_LINUX = @FLAG_M32@ @PREFERRED_STACK_BOUNDARY@ \ 138 $(AM_CFLAGS_BASE) 139 AM_CCASFLAGS_X86_LINUX = $(AM_CPPFLAGS_X86_LINUX) @FLAG_M32@ -g 140 141 AM_FLAG_M3264_AMD64_LINUX = @FLAG_M64@ 142 AM_CFLAGS_AMD64_LINUX = @FLAG_M64@ -fomit-frame-pointer \ 143 @PREFERRED_STACK_BOUNDARY@ $(AM_CFLAGS_BASE) 144 AM_CCASFLAGS_AMD64_LINUX = $(AM_CPPFLAGS_AMD64_LINUX) @FLAG_M64@ -g 145 146 AM_FLAG_M3264_PPC32_LINUX = @FLAG_M32@ 147 AM_CFLAGS_PPC32_LINUX = @FLAG_M32@ $(AM_CFLAGS_BASE) 148 AM_CCASFLAGS_PPC32_LINUX = $(AM_CPPFLAGS_PPC32_LINUX) @FLAG_M32@ -g 149 150 AM_FLAG_M3264_PPC64_LINUX = @FLAG_M64@ 151 AM_CFLAGS_PPC64_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) 152 AM_CCASFLAGS_PPC64_LINUX = $(AM_CPPFLAGS_PPC64_LINUX) @FLAG_M64@ -g 153 154 AM_FLAG_M3264_ARM_LINUX = @FLAG_M32@ 155 AM_CFLAGS_ARM_LINUX = @FLAG_M32@ @PREFERRED_STACK_BOUNDARY@ \ 156 $(AM_CFLAGS_BASE) -marm 157 AM_CCASFLAGS_ARM_LINUX = $(AM_CPPFLAGS_ARM_LINUX) @FLAG_M32@ -marm -g 158 159 AM_FLAG_M3264_PPC32_AIX5 = @FLAG_MAIX32@ 160 AM_CFLAGS_PPC32_AIX5 = @FLAG_MAIX32@ -mcpu=powerpc $(AM_CFLAGS_BASE) 161 AM_CCASFLAGS_PPC32_AIX5 = $(AM_CPPFLAGS_PPC32_AIX5) \ 162 @FLAG_MAIX32@ -mcpu=powerpc -g 163 164 AM_FLAG_M3264_PPC64_AIX5 = @FLAG_MAIX64@ 165 AM_CFLAGS_PPC64_AIX5 = @FLAG_MAIX64@ -mcpu=powerpc64 $(AM_CFLAGS_BASE) 166 AM_CCASFLAGS_PPC64_AIX5 = $(AM_CPPFLAGS_PPC64_AIX5) \ 167 @FLAG_MAIX64@ -mcpu=powerpc64 -g 168 169 AM_FLAG_M3264_X86_DARWIN = -arch i386 170 AM_CFLAGS_X86_DARWIN = $(WERROR) -arch i386 $(AM_CFLAGS_BASE) \ 171 -mmacosx-version-min=10.5 \ 172 -fno-stack-protector -fno-pic -fno-PIC 173 174 AM_CCASFLAGS_X86_DARWIN = $(AM_CPPFLAGS_X86_DARWIN) -arch i386 -g 175 176 AM_FLAG_M3264_AMD64_DARWIN = -arch x86_64 177 AM_CFLAGS_AMD64_DARWIN = $(WERROR) -arch x86_64 $(AM_CFLAGS_BASE) \ 178 -mmacosx-version-min=10.5 -fno-stack-protector 179 AM_CCASFLAGS_AMD64_DARWIN = $(AM_CPPFLAGS_AMD64_DARWIN) -arch x86_64 -g 180 181 # Flags for the primary target. These must be used to build the 182 # regtests and performance tests. In fact, these must be used to 183 # build anything which is built only once on a dual-arch build. 184 # 185 AM_FLAG_M3264_PRI = $(AM_FLAG_M3264_@VGCONF_PLATFORM_PRI_CAPS@) 186 AM_CPPFLAGS_PRI = $(AM_CPPFLAGS_@VGCONF_PLATFORM_PRI_CAPS@) 187 AM_CFLAGS_PRI = $(AM_CFLAGS_@VGCONF_PLATFORM_PRI_CAPS@) 188 AM_CCASFLAGS_PRI = $(AM_CCASFLAGS_@VGCONF_PLATFORM_PRI_CAPS@) 189 190 if VGCONF_HAVE_PLATFORM_SEC 191 AM_FLAG_M3264_SEC = $(AM_FLAG_M3264_@VGCONF_PLATFORM_SEC_CAPS@) 192 else 193 AM_FLAG_M3264_SEC = 194 endif 195 196 197 # Baseline link flags for making vgpreload shared objects. 198 # 199 PRELOAD_LDFLAGS_COMMON_LINUX = -nodefaultlibs -shared -Wl,-z,interpose,-z,initfirst 200 PRELOAD_LDFLAGS_COMMON_AIX5 = -nodefaultlibs -shared -Wl,-G -Wl,-bnogc 201 PRELOAD_LDFLAGS_COMMON_DARWIN = -dynamic -dynamiclib -all_load 202 203 PRELOAD_LDFLAGS_X86_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@ 204 PRELOAD_LDFLAGS_AMD64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@ 205 PRELOAD_LDFLAGS_PPC32_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@ 206 PRELOAD_LDFLAGS_PPC64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@ 207 PRELOAD_LDFLAGS_ARM_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@ 208 PRELOAD_LDFLAGS_PPC32_AIX5 = $(PRELOAD_LDFLAGS_COMMON_AIX5) @FLAG_MAIX32@ 209 PRELOAD_LDFLAGS_PPC64_AIX5 = $(PRELOAD_LDFLAGS_COMMON_AIX5) @FLAG_MAIX64@ 210 PRELOAD_LDFLAGS_X86_DARWIN = $(PRELOAD_LDFLAGS_COMMON_DARWIN) -arch i386 211 PRELOAD_LDFLAGS_AMD64_DARWIN = $(PRELOAD_LDFLAGS_COMMON_DARWIN) -arch x86_64 212 213