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