3514997828470b4cc8687bf42cd5ab4a6428cd68
[AGL/meta-agl.git] / meta-agl-profile-core / recipes-devtools / valgrind / valgrind_git.bb
1 SUMMARY = "Valgrind memory debugger and instrumentation framework"
2 HOMEPAGE = "http://valgrind.org/"
3 BUGTRACKER = "http://valgrind.org/support/bug_reports.html"
4 LICENSE = "GPLv2 & GPLv2+ & BSD"
5 LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
6                     file://include/pub_tool_basics.h;beginline=6;endline=29;md5=d4de0407239381463cf01dd276d7c22e \
7                     file://include/valgrind.h;beginline=1;endline=56;md5=ad3b317f3286b6b704575d9efe6ca5df \
8                     file://COPYING.DOCS;md5=24ea4c7092233849b4394699333b5c56"
9
10 X11DEPENDS = "virtual/libx11"
11 DEPENDS = "${@bb.utils.contains('DISTRO_FEATURES', 'x11', '${X11DEPENDS}', '', d)} \
12            ${@bb.utils.contains('DISTRO_FEATURES', 'ptest', 'boost', '', d)} \
13         "
14 SRC_URI = "git://sourceware.org/git/valgrind.git;protocol=git;branch=master"
15 SRCREV = "2b0aa0a5b88f900e986a3360952fcb3d2513419d"
16 S = "${WORKDIR}/git"
17
18 #
19 #
20
21 SRC_URI += " \
22            file://fixed-perl-path.patch \
23            file://Added-support-for-PPC-instructions-mfatbu-mfatbl.patch \
24            file://run-ptest \
25            file://0002-remove-rpath.patch \
26            file://0004-Fix-out-of-tree-builds.patch \
27            file://0005-Modify-vg_test-wrapper-to-support-PTEST-formats.patch \
28            file://0001-Remove-tests-that-fail-to-build-on-some-PPC32-config.patch \
29            file://use-appropriate-march-mcpu-mfpu-for-ARM-test-apps.patch \
30            file://avoid-neon-for-targets-which-don-t-support-it.patch \
31            file://valgrind-make-ld-XXX.so-strlen-intercept-optional.patch \
32            file://0001-makefiles-Drop-setting-mcpu-to-cortex-a8-on-arm-arch.patch \
33            file://0001-str_tester.c-Limit-rawmemchr-test-to-glibc.patch \
34            file://0001-sigqueue-Rename-_sifields-to-__si_fields-on-musl.patch \
35            file://0002-context-APIs-are-not-available-on-musl.patch \
36            file://0003-correct-include-directive-path-for-config.h.patch \
37            file://0004-pth_atfork1.c-Define-error-API-for-musl.patch \
38            file://0005-tc20_verifywrap.c-Fake-__GLIBC_PREREQ-with-musl.patch \
39            file://0006-pth_detached3.c-Dereference-pthread_t-before-adding-.patch \
40            file://0001-memcheck-arm64-Define-__THROW-if-not-already-defined.patch \
41            file://0002-memcheck-x86-Define-__THROW-if-not-defined.patch \
42            file://0003-tests-seg_override-Replace-__modify_ldt-with-syscall.patch \
43            file://link-gz-tests.patch \
44            "
45 SRC_URI[md5sum] = "817dd08f1e8a66336b9ff206400a5369"
46 SRC_URI[sha256sum] = "d76680ef03f00cd5e970bbdcd4e57fb1f6df7d2e2c071635ef2be74790190c3b"
47 UPSTREAM_CHECK_REGEX = "valgrind-(?P<pver>\d+(\.\d+)+)\.tar"
48
49 COMPATIBLE_HOST = '(i.86|x86_64|arm|aarch64|mips|powerpc|powerpc64).*-linux'
50
51 # valgrind supports armv7 and above
52 COMPATIBLE_HOST_armv4 = 'null'
53 COMPATIBLE_HOST_armv5 = 'null'
54 COMPATIBLE_HOST_armv6 = 'null'
55
56 # X32 isn't supported by valgrind at this time
57 COMPATIBLE_HOST_linux-gnux32 = 'null'
58 COMPATIBLE_HOST_linux-muslx32 = 'null'
59
60 # Disable for some MIPS variants
61 COMPATIBLE_HOST_mipsarchn32 = 'null'
62 COMPATIBLE_HOST_mipsarchr6 = 'null'
63
64 inherit autotools ptest multilib_header
65
66 EXTRA_OECONF = "--enable-tls --without-mpicc"
67 EXTRA_OECONF += "${@['--enable-only32bit','--enable-only64bit'][d.getVar('SITEINFO_BITS') != '32']}"
68
69 # valgrind checks host_cpu "armv7*)", so we need to over-ride the autotools.bbclass default --host option
70 EXTRA_OECONF_append_arm = " --host=armv7${HOST_VENDOR}-${HOST_OS}"
71 TARGET_CC_ARCH_remove_arm = "${@get_mcpu(d)}"
72
73 EXTRA_OEMAKE = "-w"
74
75 CACHED_CONFIGUREVARS += "ac_cv_path_PERL='/usr/bin/env perl'"
76
77 # valgrind likes to control its own optimisation flags. It generally defaults
78 # to -O2 but uses -O0 for some specific test apps etc. Passing our own flags
79 # (via CFLAGS) means we interfere with that. Only pass DEBUG_FLAGS to it
80 # which fixes build path issue in DWARF.
81 SELECTED_OPTIMIZATION = "${DEBUG_FLAGS}"
82
83 def get_mcpu(d):
84     for arg in (d.getVar('TUNE_CCARGS') or '').split():
85         if arg.startswith('-mcpu='):
86             return arg
87         else:
88             continue
89     return ""
90
91 do_configure_prepend () {
92     rm -rf ${S}/config.h
93 }
94
95 do_install_append () {
96     install -m 644 ${B}/default.supp ${D}/${libdir}/valgrind/
97     oe_multilib_header valgrind/config.h
98 }
99
100 TUNE = "${@strip_mcpu(d)}"
101
102 RDEPENDS_${PN} += "perl"
103
104 # valgrind needs debug information for ld.so at runtime in order to
105 # redirect functions like strlen.
106 RRECOMMENDS_${PN} += "${TCLIBC}-dbg"
107
108 RDEPENDS_${PN}-ptest += " sed perl perl-module-file-glob"
109 RDEPENDS_${PN}-ptest_append_libc-glibc = " glibc-utils"
110
111 # One of the tests contains a bogus interpreter path on purpose.
112 # Skip file dependency check
113 SKIP_FILEDEPS_${PN}-ptest = '1'
114
115 do_compile_ptest() {
116     oe_runmake check
117 }
118
119 do_install_ptest() {
120     chmod +x ${B}/tests/vg_regtest
121
122     # The test application binaries are not automatically installed.
123     # Grab them from the build directory.
124     #
125     # The regression tests require scripts and data files that are not
126     # copied to the build directory.  They must be copied from the
127     # source directory.
128     saved_dir=$PWD
129     for parent_dir in ${S} ${B} ; do
130         cd $parent_dir
131
132         # exclude shell or the package won't install
133         rm -rf none/tests/shell* 2>/dev/null
134
135         subdirs="tests cachegrind/tests callgrind/tests drd/tests helgrind/tests massif/tests memcheck/tests none/tests"
136
137         # Get the vg test scripts, filters, and expected files
138         for dir in $subdirs ; do
139             find $dir | cpio -pvdu ${D}${PTEST_PATH}
140         done
141         cd $saved_dir
142     done
143
144     # clean out build artifacts before building the rpm
145     find ${D}${PTEST_PATH} \
146          \( -name "Makefile*" \
147         -o -name "*.o" \
148         -o -name "*.c" \
149         -o -name "*.S" \
150         -o -name "*.h" \) \
151         -exec rm {} \;
152
153     # needed by massif tests
154     cp ${B}/massif/ms_print ${D}${PTEST_PATH}/massif/ms_print
155
156     # handle multilib
157     sed -i s:@libdir@:${libdir}:g ${D}${PTEST_PATH}/run-ptest
158 }