################################################################################ # # gdb # ################################################################################ GDB_VERSION = $(call qstrip,$(BR2_GDB_VERSION)) GDB_SITE = $(BR2_GNU_MIRROR)/gdb GDB_SOURCE = gdb-$(GDB_VERSION).tar.xz ifeq ($(BR2_arc),y) GDB_SITE = $(call github,foss-for-synopsys-dwc-arc-processors,binutils-gdb,$(GDB_VERSION)) GDB_SOURCE = gdb-$(GDB_VERSION).tar.gz GDB_FROM_GIT = y # recent gdb versions (>= 10) have gdbserver moved at the top-level, # which requires a different build logic. GDB_GDBSERVER_TOPLEVEL = y endif ifeq ($(BR2_csky),y) GDB_SITE = $(call github,c-sky,binutils-gdb,$(GDB_VERSION)) GDB_SOURCE = gdb-$(GDB_VERSION).tar.gz GDB_FROM_GIT = y endif GDB_LICENSE = GPL-2.0+, LGPL-2.0+, GPL-3.0+, LGPL-3.0+ GDB_LICENSE_FILES = COPYING COPYING.LIB COPYING3 COPYING3.LIB # On gdb < 10, if you want to build only gdbserver, you need to # configure only gdb/gdbserver. ifeq ($(BR2_PACKAGE_GDB_DEBUGGER)$(GDB_GDBSERVER_TOPLEVEL),) GDB_SUBDIR = gdb/gdbserver # When we want to build the full gdb, or for very recent versions of # gdb with gdbserver at the top-level, out of tree build is mandatory, # so we create a 'build' subdirectory in the gdb sources, and build # from there. else GDB_SUBDIR = build define GDB_CONFIGURE_SYMLINK mkdir -p $(@D)/$(GDB_SUBDIR) ln -sf ../configure $(@D)/$(GDB_SUBDIR)/configure endef GDB_PRE_CONFIGURE_HOOKS += GDB_CONFIGURE_SYMLINK endif # For the host variant, we really want to build with XML support, # which is needed to read XML descriptions of target architectures. We # also need ncurses. # As for libiberty, gdb may use a system-installed one if present, so # we must ensure ours is installed first. HOST_GDB_DEPENDENCIES = host-expat host-libiberty host-ncurses # Disable building documentation GDB_MAKE_OPTS += MAKEINFO=true GDB_INSTALL_TARGET_OPTS += MAKEINFO=true DESTDIR=$(TARGET_DIR) install HOST_GDB_MAKE_OPTS += MAKEINFO=true HOST_GDB_INSTALL_OPTS += MAKEINFO=true install # Apply the Xtensa specific patches ifneq ($(ARCH_XTENSA_OVERLAY_FILE),) define GDB_XTENSA_OVERLAY_EXTRACT $(call arch-xtensa-overlay-extract,$(@D),gdb) endef GDB_POST_EXTRACT_HOOKS += GDB_XTENSA_OVERLAY_EXTRACT GDB_EXTRA_DOWNLOADS += $(ARCH_XTENSA_OVERLAY_URL) HOST_GDB_POST_EXTRACT_HOOKS += GDB_XTENSA_OVERLAY_EXTRACT HOST_GDB_EXTRA_DOWNLOADS += $(ARCH_XTENSA_OVERLAY_URL) endif ifeq ($(GDB_FROM_GIT),y) GDB_DEPENDENCIES += host-flex host-bison HOST_GDB_DEPENDENCIES += host-flex host-bison endif # When gdb sources are fetched from the binutils-gdb repository, they # also contain the binutils sources, but binutils shouldn't be built, # so we disable it (additionally the option --disable-install-libbfd # prevents the un-wanted installation of libobcodes.so and libbfd.so). GDB_DISABLE_BINUTILS_CONF_OPTS = \ --disable-binutils \ --disable-install-libbfd \ --disable-ld \ --disable-gas \ --disable-gprof GDB_CONF_ENV = \ ac_cv_type_uintptr_t=yes \ gt_cv_func_gettext_libintl=yes \ ac_cv_func_dcgettext=yes \ gdb_cv_func_sigsetjmp=yes \ bash_cv_func_strcoll_broken=no \ bash_cv_must_reinstall_sighandlers=no \ bash_cv_func_sigsetjmp=present \ bash_cv_have_mbstate_t=yes \ gdb_cv_func_sigsetjmp=yes # Starting with gdb 7.11, the bundled gnulib tries to use # rpl_gettimeofday (gettimeofday replacement) due to the code being # unable to determine if the replacement function should be used or # not when cross-compiling with uClibc or musl as C libraries. So use # gl_cv_func_gettimeofday_clobber=no to not use rpl_gettimeofday, # assuming musl and uClibc have a properly working gettimeofday # implementation. It needs to be passed to GDB_CONF_ENV to build # gdbserver only but also to GDB_MAKE_ENV, because otherwise it does # not get passed to the configure script of nested packages while # building gdbserver with full debugger. GDB_CONF_ENV += gl_cv_func_gettimeofday_clobber=no GDB_MAKE_ENV += gl_cv_func_gettimeofday_clobber=no # Similarly, starting with gdb 8.1, the bundled gnulib tries to use # rpl_strerror. Let's tell gnulib the C library implementation works # well enough. GDB_CONF_ENV += \ gl_cv_func_working_strerror=yes \ gl_cv_func_strerror_0_works=yes GDB_MAKE_ENV += \ gl_cv_func_working_strerror=yes \ gl_cv_func_strerror_0_works=yes # Starting with glibc 2.25, the proc_service.h header has been copied # from gdb to glibc so other tools can use it. However, that makes it # necessary to make sure that declaration of prfpregset_t declaration # is consistent between gdb and glibc. In gdb, however, there is a # workaround for a broken prfpregset_t declaration in glibc 2.3 which # uses AC_TRY_RUN to detect if it's needed, which doesn't work in # cross-compilation. So pass the cache option to configure. # It needs to be passed to GDB_CONF_ENV to build gdbserver only but # also to GDB_MAKE_ENV, because otherwise it does not get passed to the # configure script of nested packages while building gdbserver with full # debugger. GDB_CONF_ENV += gdb_cv_prfpregset_t_broken=no GDB_MAKE_ENV += gdb_cv_prfpregset_t_broken=no # The shared only build is not supported by gdb, so enable static build for # build-in libraries with --enable-static. GDB_CONF_OPTS = \ --without-uiout \ --disable-gdbtk \ --without-x \ --disable-sim \ $(GDB_DISABLE_BINUTILS_CONF_OPTS) \ --without-included-gettext \ --disable-werror \ --enable-static \ --without-mpfr ifeq ($(BR2_PACKAGE_GDB_DEBUGGER),y) GDB_CONF_OPTS += \ --enable-gdb \ --with-curses GDB_DEPENDENCIES = ncurses \ $(if $(BR2_PACKAGE_LIBICONV),libiconv) else GDB_CONF_OPTS += \ --disable-gdb \ --without-curses endif ifeq ($(BR2_PACKAGE_GDB_SERVER),y) GDB_CONF_OPTS += --enable-gdbserver else GDB_CONF_OPTS += --disable-gdbserver endif # When gdb is built as C++ application for ARC it segfaults at runtime # So we pass --disable-build-with-cxx config option to force gdb not to # be built as C++ app. ifeq ($(BR2_arc),y) GDB_CONF_OPTS += --disable-build-with-cxx endif # gdb 7.12+ by default builds with a C++ compiler, which doesn't work # when we don't have C++ support in the toolchain ifneq ($(BR2_INSTALL_LIBSTDCPP),y) GDB_CONF_OPTS += --disable-build-with-cxx endif # inprocess-agent can't be built statically ifeq ($(BR2_STATIC_LIBS),y) GDB_CONF_OPTS += --disable-inprocess-agent endif ifeq ($(BR2_PACKAGE_GDB_TUI),y) GDB_CONF_OPTS += --enable-tui else GDB_CONF_OPTS += --disable-tui endif ifeq ($(BR2_PACKAGE_GDB_PYTHON),y) GDB_CONF_OPTS += --with-python=$(TOPDIR)/package/gdb/gdb-python-config GDB_DEPENDENCIES += python else GDB_CONF_OPTS += --without-python endif ifeq ($(BR2_PACKAGE_EXPAT),y) GDB_CONF_OPTS += --with-expat GDB_CONF_OPTS += --with-libexpat-prefix=$(STAGING_DIR)/usr GDB_DEPENDENCIES += expat else GDB_CONF_OPTS += --without-expat endif ifeq ($(BR2_PACKAGE_XZ),y) GDB_CONF_OPTS += --with-lzma GDB_CONF_OPTS += --with-liblzma-prefix=$(STAGING_DIR)/usr GDB_DEPENDENCIES += xz else GDB_CONF_OPTS += --without-lzma endif ifeq ($(BR2_PACKAGE_ZLIB),y) GDB_CONF_OPTS += --with-zlib GDB_DEPENDENCIES += zlib else GDB_CONF_OPTS += --without-zlib endif ifeq ($(BR2_PACKAGE_GDB_PYTHON),) # This removes some unneeded Python scripts and XML target description # files that are not useful for a normal usage of the debugger. define GDB_REMOVE_UNNEEDED_FILES $(RM) -rf $(TARGET_DIR)/usr/share/gdb endef GDB_POST_INSTALL_TARGET_HOOKS += GDB_REMOVE_UNNEEDED_FILES endif # This installs the gdbserver somewhere into the $(HOST_DIR) so that # it becomes an integral part of the SDK, if the toolchain generated # by Buildroot is later used as an external toolchain. We install it # in debug-root/usr/bin/gdbserver so that it matches what Crosstool-NG # does. define GDB_SDK_INSTALL_GDBSERVER $(INSTALL) -D -m 0755 $(TARGET_DIR)/usr/bin/gdbserver \ $(HOST_DIR)/$(GNU_TARGET_NAME)/debug-root/usr/bin/gdbserver endef ifeq ($(BR2_PACKAGE_GDB_SERVER),y) GDB_POST_INSTALL_TARGET_HOOKS += GDB_SDK_INSTALL_GDBSERVER endif # A few notes: # * --target, because we're doing a cross build rather than a real # host build. # * --enable-static because gdb really wants to use libbfd.a HOST_GDB_CONF_OPTS = \ --target=$(GNU_TARGET_NAME) \ --enable-static \ --without-uiout \ --disable-gdbtk \ --without-x \ --enable-threads \ --disable-werror \ --without-included-gettext \ --with-curses \ --without-mpfr \ $(GDB_DISABLE_BINUTILS_CONF_OPTS) ifeq ($(BR2_PACKAGE_HOST_GDB_TUI),y) HOST_GDB_CONF_OPTS += --enable-tui else HOST_GDB_CONF_OPTS += --disable-tui endif ifeq ($(BR2_PACKAGE_HOST_GDB_PYTHON),y) HOST_GDB_CONF_OPTS += --with-python=$(HOST_DIR)/bin/python2 HOST_GDB_DEPENDENCIES += host-python else ifeq ($(BR2_PACKAGE_HOST_GDB_PYTHON3),y) HOST_GDB_CONF_OPTS += --with-python=$(HOST_DIR)/bin/python3 HOST_GDB_DEPENDENCIES += host-python3 else HOST_GDB_CONF_OPTS += --without-python endif ifeq ($(BR2_PACKAGE_HOST_GDB_SIM),y) HOST_GDB_CONF_OPTS += --enable-sim else HOST_GDB_CONF_OPTS += --disable-sim endif # Since gdb 9, in-tree builds for GDB are not allowed anymore, # so we create a 'build' subdirectory in the gdb sources, and # build from there. HOST_GDB_SUBDIR = build define HOST_GDB_CONFIGURE_SYMLINK mkdir -p $(@D)/build ln -sf ../configure $(@D)/build/configure endef HOST_GDB_PRE_CONFIGURE_HOOKS += HOST_GDB_CONFIGURE_SYMLINK # legacy $arch-linux-gdb symlink define HOST_GDB_ADD_SYMLINK cd $(HOST_DIR)/bin && \ ln -snf $(GNU_TARGET_NAME)-gdb $(ARCH)-linux-gdb endef HOST_GDB_POST_INSTALL_HOOKS += HOST_GDB_ADD_SYMLINK HOST_GDB_POST_INSTALL_HOOKS += gen_gdbinit_file $(eval $(autotools-package)) $(eval $(host-autotools-package))