xref: /OK3568_Linux_fs/buildroot/package/valgrind/valgrind.mk (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun################################################################################
2*4882a593Smuzhiyun#
3*4882a593Smuzhiyun# valgrind
4*4882a593Smuzhiyun#
5*4882a593Smuzhiyun################################################################################
6*4882a593Smuzhiyun
7*4882a593SmuzhiyunVALGRIND_VERSION = 3.18.1
8*4882a593SmuzhiyunVALGRIND_SITE = https://sourceware.org/pub/valgrind
9*4882a593SmuzhiyunVALGRIND_SOURCE = valgrind-$(VALGRIND_VERSION).tar.bz2
10*4882a593SmuzhiyunVALGRIND_LICENSE = GPL-2.0, GFDL-1.2
11*4882a593SmuzhiyunVALGRIND_LICENSE_FILES = COPYING COPYING.DOCS
12*4882a593SmuzhiyunVALGRIND_CPE_ID_VENDOR = valgrind
13*4882a593SmuzhiyunVALGRIND_CONF_OPTS = \
14*4882a593Smuzhiyun	--disable-ubsan \
15*4882a593Smuzhiyun	--without-mpicc
16*4882a593SmuzhiyunVALGRIND_INSTALL_STAGING = YES
17*4882a593Smuzhiyun
18*4882a593Smuzhiyun# Valgrind must be compiled with no stack protection, so forcefully
19*4882a593Smuzhiyun# pass -fno-stack-protector to override what Buildroot may have in
20*4882a593Smuzhiyun# TARGET_CFLAGS if BR2_SSP_* support is enabled.
21*4882a593SmuzhiyunVALGRIND_CFLAGS = \
22*4882a593Smuzhiyun	$(TARGET_CFLAGS) \
23*4882a593Smuzhiyun	-fno-stack-protector
24*4882a593Smuzhiyun
25*4882a593Smuzhiyun# When Valgrind detects a 32-bit MIPS architecture, it forcibly adds
26*4882a593Smuzhiyun# -march=mips32 to CFLAGS; when it detects a 64-bit MIPS architecture,
27*4882a593Smuzhiyun# it forcibly adds -march=mips64. This causes Valgrind to be built
28*4882a593Smuzhiyun# always for the first ISA revision level (R1), even when the user has
29*4882a593Smuzhiyun# configured Buildroot for the second ISA revision level (R2).
30*4882a593Smuzhiyun#
31*4882a593Smuzhiyun# Override the CFLAGS variable (which Valgrind appends to its CFLAGS)
32*4882a593Smuzhiyun# and pass the right -march option, so they take precedence over
33*4882a593Smuzhiyun# Valgrind's wrongfully detected value.
34*4882a593Smuzhiyunifeq ($(BR2_mips)$(BR2_mipsel)$(BR2_mips64)$(BR2_mips64el),y)
35*4882a593SmuzhiyunVALGRIND_CFLAGS += -march="$(GCC_TARGET_ARCH)"
36*4882a593Smuzhiyunendif
37*4882a593Smuzhiyun
38*4882a593SmuzhiyunVALGRIND_CONF_ENV = CFLAGS="$(VALGRIND_CFLAGS)"
39*4882a593Smuzhiyun
40*4882a593Smuzhiyun# fix uclibc configure c99 support detection
41*4882a593SmuzhiyunVALGRIND_CONF_ENV += ac_cv_prog_cc_c99='-std=gnu99'
42*4882a593Smuzhiyun
43*4882a593Smuzhiyun# On ARM, Valgrind only supports ARMv7, and uses the arch part of the
44*4882a593Smuzhiyun# host tuple to determine whether it's being built for ARMv7 or
45*4882a593Smuzhiyun# not. Therefore, we adjust the host tuple to specify we're on
46*4882a593Smuzhiyun# ARMv7. The valgrind package is guaranteed, through Config.in, to
47*4882a593Smuzhiyun# only be selected on ARMv7-A/ARMv8-A platforms.
48*4882a593Smuzhiyunifeq ($(BR2_ARM_CPU_ARMV7A)$(BR2_ARM_CPU_ARMV8A):$(BR2_arm),y:y)
49*4882a593SmuzhiyunVALGRIND_CONF_OPTS += \
50*4882a593Smuzhiyun	--host=$(patsubst arm-%,armv7-%,$(GNU_TARGET_NAME))
51*4882a593Smuzhiyunendif
52*4882a593Smuzhiyun
53*4882a593Smuzhiyunifeq ($(BR2_GCC_ENABLE_LTO),y)
54*4882a593SmuzhiyunVALGRIND_CONF_OPTS += --enable-lto
55*4882a593Smuzhiyunelse
56*4882a593SmuzhiyunVALGRIND_CONF_OPTS += --disable-lto
57*4882a593Smuzhiyunendif
58*4882a593Smuzhiyun
59*4882a593Smuzhiyundefine VALGRIND_INSTALL_UCLIBC_SUPP
60*4882a593Smuzhiyun	$(INSTALL) -D -m 0644 package/valgrind/uclibc.supp $(TARGET_DIR)/usr/lib/valgrind/uclibc.supp
61*4882a593Smuzhiyunendef
62*4882a593Smuzhiyun
63*4882a593SmuzhiyunVALGRIND_POST_INSTALL_TARGET_HOOKS += VALGRIND_INSTALL_UCLIBC_SUPP
64*4882a593Smuzhiyun
65*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_VALGRIND_MEMCHECK),)
66*4882a593Smuzhiyundefine VALGRIND_REMOVE_MEMCHECK
67*4882a593Smuzhiyun	rm -f $(TARGET_DIR)/usr/libexec/valgrind/*memcheck*
68*4882a593Smuzhiyunendef
69*4882a593Smuzhiyun
70*4882a593SmuzhiyunVALGRIND_POST_INSTALL_TARGET_HOOKS += VALGRIND_REMOVE_MEMCHECK
71*4882a593Smuzhiyunendif
72*4882a593Smuzhiyun
73*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_VALGRIND_CACHEGRIND),)
74*4882a593Smuzhiyundefine VALGRIND_REMOVE_CACHEGRIND
75*4882a593Smuzhiyun	rm -f $(TARGET_DIR)/usr/libexec/valgrind/*cachegrind*
76*4882a593Smuzhiyun	for i in cg_annotate cg_diff cg_merge; do \
77*4882a593Smuzhiyun		rm -f $(TARGET_DIR)/usr/bin/$$i ; \
78*4882a593Smuzhiyun	done
79*4882a593Smuzhiyunendef
80*4882a593Smuzhiyun
81*4882a593SmuzhiyunVALGRIND_POST_INSTALL_TARGET_HOOKS += VALGRIND_REMOVE_CACHEGRIND
82*4882a593Smuzhiyunendif
83*4882a593Smuzhiyun
84*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_VALGRIND_CALLGRIND),)
85*4882a593Smuzhiyundefine VALGRIND_REMOVE_CALLGRIND
86*4882a593Smuzhiyun	rm -f $(TARGET_DIR)/usr/libexec/valgrind/*callgrind*
87*4882a593Smuzhiyun	for i in callgrind_annotate callgrind_control ; do \
88*4882a593Smuzhiyun		rm -f $(TARGET_DIR)/usr/bin/$$i ; \
89*4882a593Smuzhiyun	done
90*4882a593Smuzhiyunendef
91*4882a593Smuzhiyun
92*4882a593SmuzhiyunVALGRIND_POST_INSTALL_TARGET_HOOKS += VALGRIND_REMOVE_CALLGRIND
93*4882a593Smuzhiyunendif
94*4882a593Smuzhiyun
95*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_VALGRIND_HELGRIND),)
96*4882a593Smuzhiyundefine VALGRIND_REMOVE_HELGRIND
97*4882a593Smuzhiyun	rm -f $(TARGET_DIR)/usr/libexec/valgrind/*helgrind*
98*4882a593Smuzhiyunendef
99*4882a593Smuzhiyun
100*4882a593SmuzhiyunVALGRIND_POST_INSTALL_TARGET_HOOKS += VALGRIND_REMOVE_HELGRIND
101*4882a593Smuzhiyunendif
102*4882a593Smuzhiyun
103*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_VALGRIND_DRD),)
104*4882a593Smuzhiyundefine VALGRIND_REMOVE_DRD
105*4882a593Smuzhiyun	rm -f $(TARGET_DIR)/usr/libexec/valgrind/*drd*
106*4882a593Smuzhiyunendef
107*4882a593Smuzhiyun
108*4882a593SmuzhiyunVALGRIND_POST_INSTALL_TARGET_HOOKS += VALGRIND_REMOVE_DRD
109*4882a593Smuzhiyunendif
110*4882a593Smuzhiyun
111*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_VALGRIND_MASSIF),)
112*4882a593Smuzhiyundefine VALGRIND_REMOVE_MASSIF
113*4882a593Smuzhiyun	rm -f $(TARGET_DIR)/usr/libexec/valgrind/*massif*
114*4882a593Smuzhiyun	rm -f $(TARGET_DIR)/usr/bin/ms_print
115*4882a593Smuzhiyunendef
116*4882a593Smuzhiyun
117*4882a593SmuzhiyunVALGRIND_POST_INSTALL_TARGET_HOOKS += VALGRIND_REMOVE_MASSIF
118*4882a593Smuzhiyunendif
119*4882a593Smuzhiyun
120*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_VALGRIND_DHAT),)
121*4882a593Smuzhiyundefine VALGRIND_REMOVE_DHAT
122*4882a593Smuzhiyun	rm -f $(TARGET_DIR)/usr/libexec/valgrind/*dhat*
123*4882a593Smuzhiyunendef
124*4882a593Smuzhiyun
125*4882a593SmuzhiyunVALGRIND_POST_INSTALL_TARGET_HOOKS += VALGRIND_REMOVE_DHAT
126*4882a593Smuzhiyunendif
127*4882a593Smuzhiyun
128*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_VALGRIND_SGCHECK),)
129*4882a593Smuzhiyundefine VALGRIND_REMOVE_SGCHECK
130*4882a593Smuzhiyun	rm -f $(TARGET_DIR)/usr/libexec/valgrind/*sgcheck*
131*4882a593Smuzhiyunendef
132*4882a593Smuzhiyun
133*4882a593SmuzhiyunVALGRIND_POST_INSTALL_TARGET_HOOKS += VALGRIND_REMOVE_SGCHECK
134*4882a593Smuzhiyunendif
135*4882a593Smuzhiyun
136*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_VALGRIND_BBV),)
137*4882a593Smuzhiyundefine VALGRIND_REMOVE_BBV
138*4882a593Smuzhiyun	rm -f $(TARGET_DIR)/usr/libexec/valgrind/*bbv*
139*4882a593Smuzhiyunendef
140*4882a593Smuzhiyun
141*4882a593SmuzhiyunVALGRIND_POST_INSTALL_TARGET_HOOKS += VALGRIND_REMOVE_BBV
142*4882a593Smuzhiyunendif
143*4882a593Smuzhiyun
144*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_VALGRIND_LACKEY),)
145*4882a593Smuzhiyundefine VALGRIND_REMOVE_LACKEY
146*4882a593Smuzhiyun	rm -f $(TARGET_DIR)/usr/libexec/valgrind/*lackey*
147*4882a593Smuzhiyunendef
148*4882a593Smuzhiyun
149*4882a593SmuzhiyunVALGRIND_POST_INSTALL_TARGET_HOOKS += VALGRIND_REMOVE_LACKEY
150*4882a593Smuzhiyunendif
151*4882a593Smuzhiyun
152*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_VALGRIND_NULGRIND),)
153*4882a593Smuzhiyundefine VALGRIND_REMOVE_NULGRIND
154*4882a593Smuzhiyun	rm -f $(TARGET_DIR)/usr/libexec/valgrind/*none*
155*4882a593Smuzhiyunendef
156*4882a593Smuzhiyun
157*4882a593SmuzhiyunVALGRIND_POST_INSTALL_TARGET_HOOKS += VALGRIND_REMOVE_NULGRIND
158*4882a593Smuzhiyunendif
159*4882a593Smuzhiyun
160*4882a593Smuzhiyun$(eval $(autotools-package))
161