summaryrefslogtreecommitdiff
path: root/Makefile.am
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile.am')
-rw-r--r--Makefile.am241
1 files changed, 241 insertions, 0 deletions
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..82b05e6
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,241 @@
+
+AUTOMAKE_OPTIONS = foreign 1.7 dist-bzip2
+
+include $(top_srcdir)/Makefile.all.am
+
+TOOLS = memcheck \
+ cachegrind \
+ callgrind \
+ fat \
+ massif \
+ lackey \
+ none \
+ helgrind \
+ drd
+
+EXP_TOOLS = exp-omega \
+ exp-ptrcheck
+
+# Put docs last because building the HTML is slow and we want to get
+# everything else working before we try it.
+SUBDIRS = include coregrind . tests perf auxprogs $(TOOLS) $(EXP_TOOLS) docs
+DIST_SUBDIRS = $(SUBDIRS)
+
+SUPP_FILES = \
+ glibc-2.2.supp glibc-2.3.supp glibc-2.4.supp glibc-2.5.supp \
+ glibc-2.6.supp glibc-2.7.supp glibc-2.X.supp.in \
+ aix5libc.supp xfree-3.supp xfree-4.supp \
+ glibc-2.34567-NPTL-helgrind.supp \
+ glibc-2.2-LinuxThreads-helgrind.supp \
+ glibc-2.X-drd.supp \
+ exp-ptrcheck.supp
+DEFAULT_SUPP_FILES = @DEFAULT_SUPP@
+
+# We include all .supp files in the distribution, but only install
+# default.supp.
+dist_val_DATA = default.supp
+dist_noinst_DATA = $(SUPP_FILES)
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = valgrind.pc
+
+incincdir = $(includedir)/valgrind
+nodist_incinc_HEADERS = $(VEX_PUBLIC_HDRS)
+
+BUILT_SOURCES = default.supp valgrind.pc
+CLEANFILES =
+DISTCLEANFILES = default.supp
+
+if VGCONF_PLATFORMS_INCLUDE_X86_LINUX
+BUILT_SOURCES += valt_load_address_x86_linux.lds
+CLEANFILES += valt_load_address_x86_linux.lds
+endif
+if VGCONF_PLATFORMS_INCLUDE_AMD64_LINUX
+BUILT_SOURCES += valt_load_address_amd64_linux.lds
+CLEANFILES += valt_load_address_amd64_linux.lds
+endif
+if VGCONF_PLATFORMS_INCLUDE_PPC32_LINUX
+BUILT_SOURCES += valt_load_address_ppc32_linux.lds
+CLEANFILES += valt_load_address_ppc32_linux.lds
+endif
+if VGCONF_PLATFORMS_INCLUDE_PPC64_LINUX
+BUILT_SOURCES += valt_load_address_ppc64_linux.lds
+CLEANFILES += valt_load_address_ppc64_linux.lds
+endif
+if VGCONF_PLATFORMS_INCLUDE_PPC32_AIX5
+# No need to generate valt_load_address*.lds; the final executables
+# can be linked to be at any address. They will be relocated by
+# AIX kernel when they are loaded.
+endif
+if VGCONF_PLATFORMS_INCLUDE_PPC64_AIX5
+# Ditto
+endif
+
+default.supp: $(DEFAULT_SUPP_FILES)
+ echo "# This is a generated file, composed of the following suppression rules:" > default.supp
+ echo "# " $(DEFAULT_SUPP_FILES) >> default.supp
+ cat $(DEFAULT_SUPP_FILES) >> default.supp
+
+## Preprend @PERL@ because tests/vg_regtest isn't executable
+regtest: check
+ @PERL@ tests/vg_regtest $(TOOLS) $(EXP_TOOLS)
+nonexp-regtest: check
+ @PERL@ tests/vg_regtest $(TOOLS)
+exp-regtest: check
+ @PERL@ tests/vg_regtest $(EXP_TOOLS)
+
+## Preprend @PERL@ because tests/vg_perf isn't executable
+perf: check
+ @PERL@ perf/vg_perf perf
+
+# Nb: no need to include any Makefile.am files here, or files included from
+# them, as automake includes them automatically.
+EXTRA_DIST = \
+ ACKNOWLEDGEMENTS \
+ README_DEVELOPERS \
+ README_PACKAGERS \
+ README_MISSING_SYSCALL_OR_IOCTL \
+ valgrind.spec.in valgrind.pc.in \
+ $(vex_primary_sources) \
+ vg-in-place
+
+install-exec-hook:
+ $(mkinstalldirs) $(DESTDIR)$(valdir)
+
+all-local: default.supp
+ mkdir -p $(inplacedir)
+ rm -f $(inplacedir)/default.supp
+ ln -s ../default.supp $(inplacedir)
+
+clean-local:
+ rm -rf $(inplacedir)
+
+# These list the bits of vex we need to install
+
+VEX_PUBLIC_HDRS = \
+ @VEX_DIR@/pub/libvex_guest_amd64.h \
+ @VEX_DIR@/pub/libvex_ir.h \
+ @VEX_DIR@/pub/libvex_guest_ppc32.h \
+ @VEX_DIR@/pub/libvex_guest_ppc64.h \
+ @VEX_DIR@/pub/libvex_basictypes.h \
+ @VEX_DIR@/pub/libvex_guest_offsets.h \
+ @VEX_DIR@/pub/libvex_emwarn.h \
+ @VEX_DIR@/pub/libvex.h \
+ @VEX_DIR@/pub/libvex_trc_values.h \
+ @VEX_DIR@/pub/libvex_guest_arm.h \
+ @VEX_DIR@/pub/libvex_guest_x86.h
+
+# These list the bits of vex we need to copy into the tarball
+
+vex_primary_sources = \
+ VEX/quote.txt \
+ VEX/newline.txt \
+ VEX/HACKING.README \
+ VEX/LICENSE.README \
+ VEX/LICENSE.GPL \
+ VEX/Makefile \
+ VEX/auxprogs/genoffsets.c \
+ VEX/pub/libvex_guest_amd64.h \
+ VEX/pub/libvex_ir.h \
+ VEX/pub/libvex_guest_ppc32.h \
+ VEX/pub/libvex_guest_ppc64.h \
+ VEX/pub/libvex_basictypes.h \
+ VEX/pub/libvex_guest_offsets.h \
+ VEX/pub/libvex_emwarn.h \
+ VEX/pub/libvex.h \
+ VEX/pub/libvex_trc_values.h \
+ VEX/pub/libvex_guest_arm.h \
+ VEX/pub/libvex_guest_x86.h \
+ VEX/priv/ir/irmatch.c \
+ VEX/priv/ir/irmatch.h \
+ VEX/priv/ir/irdefs.c \
+ VEX/priv/ir/iropt.c \
+ VEX/priv/ir/iropt.h \
+ VEX/priv/host-ppc/isel.c \
+ VEX/priv/host-ppc/hdefs.c \
+ VEX/priv/host-ppc/hdefs.h \
+ VEX/priv/main/vex_svnversion.h \
+ VEX/priv/main/vex_globals.c \
+ VEX/priv/main/vex_globals.h \
+ VEX/priv/main/vex_main.c \
+ VEX/priv/main/vex_util.c \
+ VEX/priv/main/vex_util.h \
+ VEX/priv/guest-arm/ghelpers.c \
+ VEX/priv/guest-arm/gdefs.h \
+ VEX/priv/guest-arm/toIR.c \
+ VEX/priv/guest-x86/ghelpers.c \
+ VEX/priv/guest-x86/gdefs.h \
+ VEX/priv/guest-x86/toIR.c \
+ VEX/priv/guest-generic/g_generic_x87.c \
+ VEX/priv/guest-generic/g_generic_x87.h \
+ VEX/priv/guest-generic/bb_to_IR.c \
+ VEX/priv/guest-generic/bb_to_IR.h \
+ VEX/priv/host-arm/isel.c \
+ VEX/priv/host-arm/hdefs.c \
+ VEX/priv/host-arm/hdefs.h \
+ VEX/priv/host-x86/isel.c \
+ VEX/priv/host-x86/hdefs.c \
+ VEX/priv/host-x86/hdefs.h \
+ VEX/priv/guest-amd64/ghelpers.c \
+ VEX/priv/guest-amd64/gdefs.h \
+ VEX/priv/guest-amd64/toIR.c \
+ VEX/priv/guest-ppc/ghelpers.c \
+ VEX/priv/guest-ppc/gdefs.h \
+ VEX/priv/guest-ppc/toIR.c \
+ VEX/priv/host-generic/reg_alloc2.c \
+ VEX/priv/host-generic/h_generic_regs.c \
+ VEX/priv/host-generic/h_generic_regs.h \
+ VEX/priv/host-generic/h_generic_simd64.c \
+ VEX/priv/host-generic/h_generic_simd64.h \
+ VEX/priv/host-amd64/isel.c \
+ VEX/priv/host-amd64/hdefs.c \
+ VEX/priv/host-amd64/hdefs.h
+
+
+# Generate a linker script for linking the binaries. This is the
+# standard gcc linker script, except hacked so that an alternative
+# load address can be specified by (1) asking gcc to use this script
+# (-Wl,-T,valt_load_address.lds) and (2) setting the symbol
+# valt_load_address to the required value
+# (-Wl,-defsym,valt_load_address=0x70000000).
+#
+# Extract ld's default linker script and hack it to our needs.
+# First we cut everything above and below the "=====..." lines at the top
+# and bottom.
+# Then we have to replace the load address with "valt_load_address".
+# The line to replace in has one of the following two forms:
+#
+# . = 0x08048000 + SIZEOF_HEADERS;
+#
+# or
+# PROVIDE (__executable_start = 0x08048000); . = 0x08048000 + SIZEOF_HEADERS;
+#
+# So we search for the line with a hex value "+ SIZEOF_HEADERS", and replace
+# all the hex values in that line with "valt_load_address".
+valt_load_address_x86_linux.lds: Makefile
+ $(CC) @FLAG_M32@ -Wl,--verbose -nostdlib 2>&1 | sed \
+ -e '1,/^=====\+$$/d' \
+ -e '/^=====\+$$/,/.\*/d' \
+ -e '/\. = \(0x[0-9A-Fa-f]\+\|SEGMENT_START("[^"]\+", 0x[0-9A-Fa-f]\+)\) + SIZEOF_HEADERS/s/0x[0-9A-Fa-f]\+/valt_load_address/g' > $@ \
+ || rm -f $@
+
+valt_load_address_amd64_linux.lds: Makefile
+ $(CC) -m64 -Wl,--verbose -nostdlib 2>&1 | sed \
+ -e '1,/^=====\+$$/d' \
+ -e '/^=====\+$$/,/.\*/d' \
+ -e '/\. = \(0x[0-9A-Fa-f]\+\|SEGMENT_START("[^"]\+", 0x[0-9A-Fa-f]\+)\) + SIZEOF_HEADERS/s/0x[0-9A-Fa-f]\+/valt_load_address/g' > $@ \
+ || rm -f $@
+
+valt_load_address_ppc32_linux.lds: Makefile
+ $(CC) @FLAG_M32@ -Wl,--verbose -nostdlib 2>&1 | sed \
+ -e '1,/^=====\+$$/d' \
+ -e '/^=====\+$$/,/.\*/d' \
+ -e '/\. = \(0x[0-9A-Fa-f]\+\|SEGMENT_START("[^"]\+", 0x[0-9A-Fa-f]\+)\) + SIZEOF_HEADERS/s/0x[0-9A-Fa-f]\+/valt_load_address/g' > $@ \
+ || rm -f $@
+
+valt_load_address_ppc64_linux.lds: Makefile
+ $(CC) -m64 -Wl,--verbose -nostdlib 2>&1 | sed \
+ -e '1,/^=====\+$$/d' \
+ -e '/^=====\+$$/,/.\*/d' \
+ -e '/\. = \(0x[0-9A-Fa-f]\+\|SEGMENT_START("[^"]\+", 0x[0-9A-Fa-f]\+)\) + SIZEOF_HEADERS/s/0x[0-9A-Fa-f]\+/valt_load_address/g' > $@ \
+ || rm -f $@