1*4882a593Smuzhiyun################################################################################ 2*4882a593Smuzhiyun# 3*4882a593Smuzhiyun# gdb 4*4882a593Smuzhiyun# 5*4882a593Smuzhiyun################################################################################ 6*4882a593Smuzhiyun 7*4882a593SmuzhiyunGDB_VERSION = $(call qstrip,$(BR2_GDB_VERSION)) 8*4882a593SmuzhiyunGDB_SITE = $(BR2_GNU_MIRROR)/gdb 9*4882a593SmuzhiyunGDB_SOURCE = gdb-$(GDB_VERSION).tar.xz 10*4882a593Smuzhiyun 11*4882a593Smuzhiyunifeq ($(BR2_arc),y) 12*4882a593SmuzhiyunGDB_SITE = $(call github,foss-for-synopsys-dwc-arc-processors,binutils-gdb,$(GDB_VERSION)) 13*4882a593SmuzhiyunGDB_SOURCE = gdb-$(GDB_VERSION).tar.gz 14*4882a593SmuzhiyunGDB_FROM_GIT = y 15*4882a593Smuzhiyunendif 16*4882a593Smuzhiyun 17*4882a593SmuzhiyunGDB_LICENSE = GPL-2.0+, LGPL-2.0+, GPL-3.0+, LGPL-3.0+ 18*4882a593SmuzhiyunGDB_LICENSE_FILES = COPYING COPYING.LIB COPYING3 COPYING3.LIB 19*4882a593SmuzhiyunGDB_CPE_ID_VENDOR = gnu 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun# Out of tree build is mandatory, so we create a 'build' subdirectory 22*4882a593Smuzhiyun# in the gdb sources, and build from there. 23*4882a593SmuzhiyunGDB_SUBDIR = build 24*4882a593Smuzhiyundefine GDB_CONFIGURE_SYMLINK 25*4882a593Smuzhiyun mkdir -p $(@D)/$(GDB_SUBDIR) 26*4882a593Smuzhiyun ln -sf ../configure $(@D)/$(GDB_SUBDIR)/configure 27*4882a593Smuzhiyunendef 28*4882a593SmuzhiyunGDB_PRE_CONFIGURE_HOOKS += GDB_CONFIGURE_SYMLINK 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun# For the host variant, we really want to build with XML support, 31*4882a593Smuzhiyun# which is needed to read XML descriptions of target architectures. We 32*4882a593Smuzhiyun# also need ncurses. 33*4882a593Smuzhiyun# As for libiberty, gdb may use a system-installed one if present, so 34*4882a593Smuzhiyun# we must ensure ours is installed first. 35*4882a593SmuzhiyunGDB_DEPENDENCIES = zlib 36*4882a593SmuzhiyunHOST_GDB_DEPENDENCIES = host-expat host-libiberty host-ncurses host-zlib 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun# Disable building documentation 39*4882a593SmuzhiyunGDB_MAKE_OPTS += MAKEINFO=true 40*4882a593SmuzhiyunGDB_INSTALL_TARGET_OPTS += MAKEINFO=true DESTDIR=$(TARGET_DIR) install 41*4882a593SmuzhiyunHOST_GDB_MAKE_OPTS += MAKEINFO=true 42*4882a593SmuzhiyunHOST_GDB_INSTALL_OPTS += MAKEINFO=true install 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun# Apply the Xtensa specific patches 45*4882a593Smuzhiyunifneq ($(ARCH_XTENSA_OVERLAY_FILE),) 46*4882a593Smuzhiyundefine GDB_XTENSA_OVERLAY_EXTRACT 47*4882a593Smuzhiyun $(call arch-xtensa-overlay-extract,$(@D),gdb) 48*4882a593Smuzhiyunendef 49*4882a593SmuzhiyunGDB_POST_EXTRACT_HOOKS += GDB_XTENSA_OVERLAY_EXTRACT 50*4882a593SmuzhiyunGDB_EXTRA_DOWNLOADS += $(ARCH_XTENSA_OVERLAY_URL) 51*4882a593SmuzhiyunHOST_GDB_POST_EXTRACT_HOOKS += GDB_XTENSA_OVERLAY_EXTRACT 52*4882a593SmuzhiyunHOST_GDB_EXTRA_DOWNLOADS += $(ARCH_XTENSA_OVERLAY_URL) 53*4882a593Smuzhiyunendif 54*4882a593Smuzhiyun 55*4882a593Smuzhiyunifeq ($(GDB_FROM_GIT),y) 56*4882a593SmuzhiyunGDB_DEPENDENCIES += host-flex host-bison 57*4882a593SmuzhiyunHOST_GDB_DEPENDENCIES += host-flex host-bison 58*4882a593Smuzhiyunendif 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun# All newer versions of GDB need host-gmp, so it's only for older 61*4882a593Smuzhiyun# versions that the dependency can be avoided. 62*4882a593Smuzhiyunifeq ($(BR2_GDB_VERSION_10)$(BR2_arc),) 63*4882a593SmuzhiyunHOST_GDB_DEPENDENCIES += host-gmp 64*4882a593Smuzhiyunendif 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun# When gdb sources are fetched from the binutils-gdb repository, they 67*4882a593Smuzhiyun# also contain the binutils sources, but binutils shouldn't be built, 68*4882a593Smuzhiyun# so we disable it (additionally the option --disable-install-libbfd 69*4882a593Smuzhiyun# prevents the un-wanted installation of libobcodes.so and libbfd.so). 70*4882a593SmuzhiyunGDB_DISABLE_BINUTILS_CONF_OPTS = \ 71*4882a593Smuzhiyun --disable-binutils \ 72*4882a593Smuzhiyun --disable-install-libbfd \ 73*4882a593Smuzhiyun --disable-ld \ 74*4882a593Smuzhiyun --disable-gas \ 75*4882a593Smuzhiyun --disable-gprof 76*4882a593Smuzhiyun 77*4882a593SmuzhiyunGDB_CONF_ENV = \ 78*4882a593Smuzhiyun ac_cv_type_uintptr_t=yes \ 79*4882a593Smuzhiyun gt_cv_func_gettext_libintl=yes \ 80*4882a593Smuzhiyun ac_cv_func_dcgettext=yes \ 81*4882a593Smuzhiyun gdb_cv_func_sigsetjmp=yes \ 82*4882a593Smuzhiyun bash_cv_func_strcoll_broken=no \ 83*4882a593Smuzhiyun bash_cv_must_reinstall_sighandlers=no \ 84*4882a593Smuzhiyun bash_cv_func_sigsetjmp=present \ 85*4882a593Smuzhiyun bash_cv_have_mbstate_t=yes \ 86*4882a593Smuzhiyun gdb_cv_func_sigsetjmp=yes 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun# Starting with gdb 7.11, the bundled gnulib tries to use 89*4882a593Smuzhiyun# rpl_gettimeofday (gettimeofday replacement) due to the code being 90*4882a593Smuzhiyun# unable to determine if the replacement function should be used or 91*4882a593Smuzhiyun# not when cross-compiling with uClibc or musl as C libraries. So use 92*4882a593Smuzhiyun# gl_cv_func_gettimeofday_clobber=no to not use rpl_gettimeofday, 93*4882a593Smuzhiyun# assuming musl and uClibc have a properly working gettimeofday 94*4882a593Smuzhiyun# implementation. It needs to be passed to GDB_CONF_ENV to build 95*4882a593Smuzhiyun# gdbserver only but also to GDB_MAKE_ENV, because otherwise it does 96*4882a593Smuzhiyun# not get passed to the configure script of nested packages while 97*4882a593Smuzhiyun# building gdbserver with full debugger. 98*4882a593SmuzhiyunGDB_CONF_ENV += gl_cv_func_gettimeofday_clobber=no 99*4882a593SmuzhiyunGDB_MAKE_ENV += gl_cv_func_gettimeofday_clobber=no 100*4882a593Smuzhiyun 101*4882a593Smuzhiyun# Similarly, starting with gdb 8.1, the bundled gnulib tries to use 102*4882a593Smuzhiyun# rpl_strerror. Let's tell gnulib the C library implementation works 103*4882a593Smuzhiyun# well enough. 104*4882a593SmuzhiyunGDB_CONF_ENV += \ 105*4882a593Smuzhiyun gl_cv_func_working_strerror=yes \ 106*4882a593Smuzhiyun gl_cv_func_strerror_0_works=yes 107*4882a593SmuzhiyunGDB_MAKE_ENV += \ 108*4882a593Smuzhiyun gl_cv_func_working_strerror=yes \ 109*4882a593Smuzhiyun gl_cv_func_strerror_0_works=yes 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun# Starting with glibc 2.25, the proc_service.h header has been copied 112*4882a593Smuzhiyun# from gdb to glibc so other tools can use it. However, that makes it 113*4882a593Smuzhiyun# necessary to make sure that declaration of prfpregset_t declaration 114*4882a593Smuzhiyun# is consistent between gdb and glibc. In gdb, however, there is a 115*4882a593Smuzhiyun# workaround for a broken prfpregset_t declaration in glibc 2.3 which 116*4882a593Smuzhiyun# uses AC_TRY_RUN to detect if it's needed, which doesn't work in 117*4882a593Smuzhiyun# cross-compilation. So pass the cache option to configure. 118*4882a593Smuzhiyun# It needs to be passed to GDB_CONF_ENV to build gdbserver only but 119*4882a593Smuzhiyun# also to GDB_MAKE_ENV, because otherwise it does not get passed to the 120*4882a593Smuzhiyun# configure script of nested packages while building gdbserver with full 121*4882a593Smuzhiyun# debugger. 122*4882a593SmuzhiyunGDB_CONF_ENV += gdb_cv_prfpregset_t_broken=no 123*4882a593SmuzhiyunGDB_MAKE_ENV += gdb_cv_prfpregset_t_broken=no 124*4882a593Smuzhiyun 125*4882a593Smuzhiyun# The shared only build is not supported by gdb, so enable static build for 126*4882a593Smuzhiyun# build-in libraries with --enable-static. 127*4882a593SmuzhiyunGDB_CONF_OPTS = \ 128*4882a593Smuzhiyun --without-uiout \ 129*4882a593Smuzhiyun --disable-gdbtk \ 130*4882a593Smuzhiyun --without-x \ 131*4882a593Smuzhiyun --disable-sim \ 132*4882a593Smuzhiyun $(GDB_DISABLE_BINUTILS_CONF_OPTS) \ 133*4882a593Smuzhiyun --without-included-gettext \ 134*4882a593Smuzhiyun --with-system-zlib \ 135*4882a593Smuzhiyun --disable-werror \ 136*4882a593Smuzhiyun --enable-static \ 137*4882a593Smuzhiyun --without-mpfr 138*4882a593Smuzhiyun 139*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_GDB_DEBUGGER),y) 140*4882a593SmuzhiyunGDB_CONF_OPTS += \ 141*4882a593Smuzhiyun --enable-gdb \ 142*4882a593Smuzhiyun --with-curses 143*4882a593SmuzhiyunGDB_DEPENDENCIES += ncurses \ 144*4882a593Smuzhiyun $(if $(BR2_PACKAGE_LIBICONV),libiconv) 145*4882a593Smuzhiyunelse 146*4882a593SmuzhiyunGDB_CONF_OPTS += \ 147*4882a593Smuzhiyun --disable-gdb \ 148*4882a593Smuzhiyun --without-curses 149*4882a593Smuzhiyunendif 150*4882a593Smuzhiyun 151*4882a593Smuzhiyun# Starting from GDB 11.x, gmp is needed as a dependency to build full 152*4882a593Smuzhiyun# gdb. So we avoid the dependency only for GDB 10.x and the special 153*4882a593Smuzhiyun# version used on ARC. 154*4882a593Smuzhiyunifeq ($(BR2_GDB_VERSION_10)$(BR2_arc):$(BR2_PACKAGE_GDB_DEBUGGER),:y) 155*4882a593SmuzhiyunGDB_CONF_OPTS += \ 156*4882a593Smuzhiyun --with-libgmp-prefix=$(STAGING_DIR)/usr 157*4882a593SmuzhiyunGDB_DEPENDENCIES += gmp 158*4882a593Smuzhiyun 159*4882a593Smuzhiyunifneq ($(BR2_STATIC_LIBS)$(BR2_PACKAGE_GDB_STATIC),) 160*4882a593SmuzhiyunGDB_CONF_OPTS += --with-libgmp-type=static 161*4882a593Smuzhiyunendif 162*4882a593Smuzhiyunendif 163*4882a593Smuzhiyun 164*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_GDB_SERVER),y) 165*4882a593SmuzhiyunGDB_CONF_OPTS += --enable-gdbserver 166*4882a593SmuzhiyunGDB_DEPENDENCIES += $(TARGET_NLS_DEPENDENCIES) 167*4882a593Smuzhiyunelse 168*4882a593SmuzhiyunGDB_CONF_OPTS += --disable-gdbserver 169*4882a593Smuzhiyunendif 170*4882a593Smuzhiyun 171*4882a593Smuzhiyun# When gdb is built as C++ application for ARC it segfaults at runtime 172*4882a593Smuzhiyun# So we pass --disable-build-with-cxx config option to force gdb not to 173*4882a593Smuzhiyun# be built as C++ app. 174*4882a593Smuzhiyunifeq ($(BR2_arc),y) 175*4882a593SmuzhiyunGDB_CONF_OPTS += --disable-build-with-cxx 176*4882a593Smuzhiyunendif 177*4882a593Smuzhiyun 178*4882a593Smuzhiyun# gdb 7.12+ by default builds with a C++ compiler, which doesn't work 179*4882a593Smuzhiyun# when we don't have C++ support in the toolchain 180*4882a593Smuzhiyunifneq ($(BR2_INSTALL_LIBSTDCPP),y) 181*4882a593SmuzhiyunGDB_CONF_OPTS += --disable-build-with-cxx 182*4882a593Smuzhiyunendif 183*4882a593Smuzhiyun 184*4882a593Smuzhiyun# inprocess-agent can't be built statically 185*4882a593Smuzhiyunifneq ($(BR2_STATIC_LIBS)$(BR2_PACKAGE_GDB_STATIC),) 186*4882a593SmuzhiyunGDB_CONF_OPTS += --disable-inprocess-agent 187*4882a593Smuzhiyunendif 188*4882a593Smuzhiyun 189*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_GDB_TUI),y) 190*4882a593SmuzhiyunGDB_CONF_OPTS += --enable-tui 191*4882a593Smuzhiyunelse 192*4882a593SmuzhiyunGDB_CONF_OPTS += --disable-tui 193*4882a593Smuzhiyunendif 194*4882a593Smuzhiyun 195*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_GDB_PYTHON),y) 196*4882a593Smuzhiyun# CONF_ENV: for top-level configure; MAKE_ENV: for sub-projects' configure. 197*4882a593SmuzhiyunGDB_CONF_ENV += BR_PYTHON_VERSION=$(PYTHON3_VERSION_MAJOR) 198*4882a593SmuzhiyunGDB_MAKE_ENV += BR_PYTHON_VERSION=$(PYTHON3_VERSION_MAJOR) 199*4882a593SmuzhiyunGDB_DEPENDENCIES += python3 200*4882a593SmuzhiyunGDB_CONF_OPTS += --with-python=$(TOPDIR)/package/gdb/gdb-python-config 201*4882a593Smuzhiyunelse 202*4882a593SmuzhiyunGDB_CONF_OPTS += --without-python 203*4882a593Smuzhiyunendif 204*4882a593Smuzhiyun 205*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_EXPAT),y) 206*4882a593SmuzhiyunGDB_CONF_OPTS += --with-expat 207*4882a593SmuzhiyunGDB_CONF_OPTS += --with-libexpat-prefix=$(STAGING_DIR)/usr 208*4882a593SmuzhiyunGDB_DEPENDENCIES += expat 209*4882a593Smuzhiyunelse 210*4882a593SmuzhiyunGDB_CONF_OPTS += --without-expat 211*4882a593Smuzhiyunendif 212*4882a593Smuzhiyun 213*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_XZ),y) 214*4882a593SmuzhiyunGDB_CONF_OPTS += --with-lzma 215*4882a593SmuzhiyunGDB_CONF_OPTS += --with-liblzma-prefix=$(STAGING_DIR)/usr 216*4882a593SmuzhiyunGDB_DEPENDENCIES += xz 217*4882a593Smuzhiyun 218*4882a593Smuzhiyunifneq ($(BR2_STATIC_LIBS)$(BR2_PACKAGE_GDB_STATIC),) 219*4882a593SmuzhiyunGDB_CONF_OPTS += --with-liblzma-type=static 220*4882a593Smuzhiyunendif 221*4882a593Smuzhiyun 222*4882a593Smuzhiyunelse 223*4882a593SmuzhiyunGDB_CONF_OPTS += --without-lzma 224*4882a593Smuzhiyunendif 225*4882a593Smuzhiyun 226*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_GDB_STATIC),y) 227*4882a593SmuzhiyunGDB_CONF_ENV += CFLAGS="$(TARGET_CFLAGS) -static" 228*4882a593SmuzhiyunGDB_CONF_ENV += CXXFLAGS="$(TARGET_CXXFLAGS) -static" 229*4882a593SmuzhiyunGDB_CONF_ENV += FCFLAGS="$(TARGET_FCFLAGS) -static" 230*4882a593SmuzhiyunGDB_CONF_ENV += LDFLAGS="$(TARGET_LDFLAGS) -static" 231*4882a593SmuzhiyunGDB_CONF_OPTS += --disable-shared 232*4882a593SmuzhiyunGDB_CONF_OPTS += --without-expat 233*4882a593Smuzhiyunendif 234*4882a593Smuzhiyun 235*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_GDB_PYTHON),) 236*4882a593Smuzhiyun# This removes some unneeded Python scripts and XML target description 237*4882a593Smuzhiyun# files that are not useful for a normal usage of the debugger. 238*4882a593Smuzhiyundefine GDB_REMOVE_UNNEEDED_FILES 239*4882a593Smuzhiyun $(RM) -rf $(TARGET_DIR)/usr/share/gdb 240*4882a593Smuzhiyunendef 241*4882a593Smuzhiyun 242*4882a593SmuzhiyunGDB_POST_INSTALL_TARGET_HOOKS += GDB_REMOVE_UNNEEDED_FILES 243*4882a593Smuzhiyunendif 244*4882a593Smuzhiyun 245*4882a593Smuzhiyun# This installs the gdbserver somewhere into the $(HOST_DIR) so that 246*4882a593Smuzhiyun# it becomes an integral part of the SDK, if the toolchain generated 247*4882a593Smuzhiyun# by Buildroot is later used as an external toolchain. We install it 248*4882a593Smuzhiyun# in debug-root/usr/bin/gdbserver so that it matches what Crosstool-NG 249*4882a593Smuzhiyun# does. 250*4882a593Smuzhiyundefine GDB_SDK_INSTALL_GDBSERVER 251*4882a593Smuzhiyun $(INSTALL) -D -m 0755 $(TARGET_DIR)/usr/bin/gdbserver \ 252*4882a593Smuzhiyun $(HOST_DIR)/$(GNU_TARGET_NAME)/debug-root/usr/bin/gdbserver 253*4882a593Smuzhiyunendef 254*4882a593Smuzhiyun 255*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_GDB_SERVER),y) 256*4882a593SmuzhiyunGDB_POST_INSTALL_TARGET_HOOKS += GDB_SDK_INSTALL_GDBSERVER 257*4882a593Smuzhiyunendif 258*4882a593Smuzhiyun 259*4882a593Smuzhiyun# A few notes: 260*4882a593Smuzhiyun# * --target, because we're doing a cross build rather than a real 261*4882a593Smuzhiyun# host build. 262*4882a593Smuzhiyun# * --enable-static because gdb really wants to use libbfd.a 263*4882a593SmuzhiyunHOST_GDB_CONF_OPTS = \ 264*4882a593Smuzhiyun --target=$(GNU_TARGET_NAME) \ 265*4882a593Smuzhiyun --enable-static \ 266*4882a593Smuzhiyun --without-uiout \ 267*4882a593Smuzhiyun --disable-gdbtk \ 268*4882a593Smuzhiyun --without-x \ 269*4882a593Smuzhiyun --enable-threads \ 270*4882a593Smuzhiyun --disable-werror \ 271*4882a593Smuzhiyun --without-included-gettext \ 272*4882a593Smuzhiyun --with-system-zlib \ 273*4882a593Smuzhiyun --with-curses \ 274*4882a593Smuzhiyun --without-mpfr \ 275*4882a593Smuzhiyun $(GDB_DISABLE_BINUTILS_CONF_OPTS) 276*4882a593Smuzhiyun 277*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_HOST_GDB_TUI),y) 278*4882a593SmuzhiyunHOST_GDB_CONF_OPTS += --enable-tui 279*4882a593Smuzhiyunelse 280*4882a593SmuzhiyunHOST_GDB_CONF_OPTS += --disable-tui 281*4882a593Smuzhiyunendif 282*4882a593Smuzhiyun 283*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_HOST_GDB_PYTHON3),y) 284*4882a593SmuzhiyunHOST_GDB_CONF_OPTS += --with-python=$(HOST_DIR)/bin/python3 285*4882a593SmuzhiyunHOST_GDB_DEPENDENCIES += host-python3 286*4882a593Smuzhiyunelse 287*4882a593SmuzhiyunHOST_GDB_CONF_OPTS += --without-python 288*4882a593Smuzhiyunendif 289*4882a593Smuzhiyun 290*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_HOST_GDB_SIM),y) 291*4882a593SmuzhiyunHOST_GDB_CONF_OPTS += --enable-sim 292*4882a593Smuzhiyunelse 293*4882a593SmuzhiyunHOST_GDB_CONF_OPTS += --disable-sim 294*4882a593Smuzhiyunendif 295*4882a593Smuzhiyun 296*4882a593Smuzhiyun# Since gdb 9, in-tree builds for GDB are not allowed anymore, 297*4882a593Smuzhiyun# so we create a 'build' subdirectory in the gdb sources, and 298*4882a593Smuzhiyun# build from there. 299*4882a593SmuzhiyunHOST_GDB_SUBDIR = build 300*4882a593Smuzhiyun 301*4882a593Smuzhiyundefine HOST_GDB_CONFIGURE_SYMLINK 302*4882a593Smuzhiyun mkdir -p $(@D)/build 303*4882a593Smuzhiyun ln -sf ../configure $(@D)/build/configure 304*4882a593Smuzhiyunendef 305*4882a593SmuzhiyunHOST_GDB_PRE_CONFIGURE_HOOKS += HOST_GDB_CONFIGURE_SYMLINK 306*4882a593Smuzhiyun 307*4882a593Smuzhiyun# legacy $arch-linux-gdb symlink 308*4882a593Smuzhiyundefine HOST_GDB_ADD_SYMLINK 309*4882a593Smuzhiyun cd $(HOST_DIR)/bin && \ 310*4882a593Smuzhiyun ln -snf $(GNU_TARGET_NAME)-gdb $(ARCH)-linux-gdb 311*4882a593Smuzhiyunendef 312*4882a593Smuzhiyun 313*4882a593SmuzhiyunHOST_GDB_POST_INSTALL_HOOKS += HOST_GDB_ADD_SYMLINK 314*4882a593Smuzhiyun 315*4882a593SmuzhiyunHOST_GDB_POST_INSTALL_HOOKS += gen_gdbinit_file 316*4882a593Smuzhiyun 317*4882a593Smuzhiyun$(eval $(autotools-package)) 318*4882a593Smuzhiyun$(eval $(host-autotools-package)) 319