kumquat-buildroot/toolchain/gdb/gdb.mk
Peter Korsgaard afb6e3ed52 gdb: also force ELF support for gdbhost
Similar to how we do for target (ee39d53ce3ee (Fix GDB BFD test linking)).

Gdb comes with an embedded copy of libiberty, but binutils also installs
libiberty.a into HOST_DIR. The gdb configure script tries to link against
this one rather than the gdb version when it checks for ELF support.
This may fail if those versions are not compatible, leading to obscure
error messages from gdb at runtime such as:

I'm sorry, Dave, I can't do that. Symbol format `elf32-$ARCH' unknown.

Fix it by forcing ELF support.

Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
2012-01-24 12:46:37 +01:00

234 lines
6.3 KiB
Makefile

######################################################################
#
# gdb
#
######################################################################
GDB_VERSION:=$(call qstrip,$(BR2_GDB_VERSION))
GDB_SOURCE:=gdb-$(GDB_VERSION).tar.bz2
GDB_CAT:=$(BZCAT)
ifeq ($(findstring avr32,$(GDB_VERSION)),avr32)
GDB_SITE:=ftp://www.at91.com/pub/buildroot/
GDB_PATCH_DIR:=toolchain/gdb/$(GDB_VERSION)
else
GDB_SITE:=$(BR2_GNU_MIRROR)/gdb
GDB_PATCH_DIR:=toolchain/gdb/$(GDB_VERSION)
endif
ifneq ($(filter xtensa%,$(ARCH)),)
include target/xtensa/patch.in
GDB_PATCH_EXTRA:=$(call XTENSA_PATCH,gdb,$(GDB_PATCH_DIR),. ..)
endif
GDB_DIR:=$(TOOLCHAIN_DIR)/gdb-$(GDB_VERSION)
$(DL_DIR)/$(GDB_SOURCE):
$(call DOWNLOAD,$(GDB_SITE),$(GDB_SOURCE))
gdb-unpacked: $(GDB_DIR)/.unpacked
$(GDB_DIR)/.unpacked: $(DL_DIR)/$(GDB_SOURCE)
mkdir -p $(GDB_DIR)
$(GDB_CAT) $(DL_DIR)/$(GDB_SOURCE) | tar -C $(GDB_DIR) $(TAR_STRIP_COMPONENTS)=1 $(TAR_OPTIONS) -
ifneq ($(wildcard $(GDB_PATCH_DIR)),)
support/scripts/apply-patches.sh $(GDB_DIR) $(GDB_PATCH_DIR) \*.patch $(GDB_PATCH_EXTRA)
endif
$(call CONFIG_UPDATE,$(@D))
touch $@
gdb-patched: $(GDB_DIR)/.unpacked
gdb-source: $(DL_DIR)/$(GDB_SOURCE)
gdb-dirclean:
rm -rf $(GDB_DIR)
######################################################################
#
# gdb target
#
######################################################################
GDB_TARGET_DIR:=$(BUILD_DIR)/gdb-$(GDB_VERSION)-target
GDB_TARGET_CONFIGURE_VARS:= \
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_TARGET_DIR)/.configured: $(GDB_DIR)/.unpacked
mkdir -p $(GDB_TARGET_DIR)
(cd $(GDB_TARGET_DIR); \
gdb_cv_func_sigsetjmp=yes \
$(TARGET_CONFIGURE_OPTS) \
CFLAGS_FOR_TARGET="$(TARGET_CFLAGS) $(TARGET_LDFLAGS) -Wno-error" \
CFLAGS="$(TARGET_CFLAGS) $(TARGET_LDFLAGS) -Wno-error" \
$(GDB_TARGET_CONFIGURE_VARS) \
$(GDB_DIR)/configure $(QUIET) \
--cache-file=/dev/null \
--build=$(GNU_HOST_NAME) \
--host=$(REAL_GNU_TARGET_NAME) \
--target=$(REAL_GNU_TARGET_NAME) \
--prefix=/usr \
$(DISABLE_NLS) \
--without-uiout $(DISABLE_GDBMI) \
--disable-tui --disable-gdbtk --without-x \
--disable-sim --enable-gdbserver \
--without-included-gettext \
--disable-werror \
$(QUIET) \
)
ifeq ($(BR2_ENABLE_LOCALE),y)
-$(SED) "s,^INTL *=.*,INTL = -lintl,g;" $(GDB_DIR)/gdb/Makefile
endif
touch $@
$(GDB_TARGET_DIR)/gdb/gdb: $(GDB_TARGET_DIR)/.configured
# force ELF support since it fails due to BFD linking problems
gdb_cv_var_elf=yes \
$(MAKE) CC="$(TARGET_CC)" MT_CFLAGS="$(TARGET_CFLAGS)" \
-C $(GDB_TARGET_DIR)
$(TARGET_DIR)/usr/bin/gdb: $(GDB_TARGET_DIR)/gdb/gdb
install -c -D $(GDB_TARGET_DIR)/gdb/gdb $(TARGET_DIR)/usr/bin/gdb
gdb_target: ncurses $(TARGET_DIR)/usr/bin/gdb
gdb_target-source: $(DL_DIR)/$(GDB_SOURCE)
gdb_target-clean:
-$(MAKE) -C $(GDB_DIR) clean
gdb_target-dirclean:
rm -rf $(GDB_DIR)
######################################################################
#
# gdbserver
#
######################################################################
GDB_SERVER_DIR:=$(BUILD_DIR)/gdbserver-$(GDB_VERSION)
$(GDB_SERVER_DIR)/.configured: $(GDB_DIR)/.unpacked
mkdir -p $(GDB_SERVER_DIR)
(cd $(GDB_SERVER_DIR); \
$(TARGET_CONFIGURE_OPTS) \
gdb_cv_func_sigsetjmp=yes \
bash_cv_have_mbstate_t=yes \
$(GDB_DIR)/gdb/gdbserver/configure $(QUIET) \
--cache-file=/dev/null \
--build=$(GNU_HOST_NAME) \
--host=$(REAL_GNU_TARGET_NAME) \
--target=$(REAL_GNU_TARGET_NAME) \
--prefix=/usr \
--exec-prefix=/usr \
--bindir=/usr/bin \
--sbindir=/usr/sbin \
--libexecdir=/usr/lib \
--sysconfdir=/etc \
--datadir=/usr/share \
--localstatedir=/var \
--mandir=/usr/man \
--infodir=/usr/info \
--includedir=$(STAGING_DIR)/usr/include \
$(DISABLE_NLS) \
--without-uiout $(DISABLE_GDBMI) \
--disable-tui --disable-gdbtk --without-x \
--without-included-gettext \
)
touch $@
$(GDB_SERVER_DIR)/gdbserver: $(GDB_SERVER_DIR)/.configured
$(MAKE) CC="$(TARGET_CC)" MT_CFLAGS="$(TARGET_CFLAGS)" \
-C $(GDB_SERVER_DIR)
$(TARGET_DIR)/usr/bin/gdbserver: $(GDB_SERVER_DIR)/gdbserver
ifeq ($(BR2_CROSS_TOOLCHAIN_TARGET_UTILS),y)
mkdir -p $(STAGING_DIR)/usr/$(REAL_GNU_TARGET_NAME)/target_utils
install -c $(GDB_SERVER_DIR)/gdbserver \
$(STAGING_DIR)/usr/$(REAL_GNU_TARGET_NAME)/target_utils/gdbserver
endif
install -c -D $(GDB_SERVER_DIR)/gdbserver $(TARGET_DIR)/usr/bin/gdbserver
gdbserver: $(TARGET_DIR)/usr/bin/gdbserver
gdbserver-source: $(DL_DIR)/$(GDB_SOURCE)
gdbserver-clean:
-$(MAKE) -C $(GDB_SERVER_DIR) clean
gdbserver-dirclean:
rm -rf $(GDB_SERVER_DIR)
######################################################################
#
# gdb on host
#
######################################################################
GDB_HOST_DIR:=$(TOOLCHAIN_DIR)/gdbhost-$(GDB_VERSION)
$(GDB_HOST_DIR)/.configured: $(GDB_DIR)/.unpacked
mkdir -p $(GDB_HOST_DIR)
(cd $(GDB_HOST_DIR); \
gdb_cv_func_sigsetjmp=yes \
bash_cv_have_mbstate_t=yes \
$(HOST_CONFIGURE_OPTS) \
$(GDB_DIR)/configure $(QUIET) \
--cache-file=/dev/null \
--prefix=$(STAGING_DIR) \
--build=$(GNU_HOST_NAME) \
--host=$(GNU_HOST_NAME) \
--target=$(REAL_GNU_TARGET_NAME) \
$(DISABLE_NLS) \
--without-uiout $(DISABLE_GDBMI) \
--disable-tui --disable-gdbtk --without-x \
--without-included-gettext \
--enable-threads \
--disable-werror \
)
touch $@
$(GDB_HOST_DIR)/gdb/gdb: $(GDB_HOST_DIR)/.configured
# force ELF support since it fails due to BFD linking problems
gdb_cv_var_elf=yes \
$(MAKE) -C $(GDB_HOST_DIR)
strip $(GDB_HOST_DIR)/gdb/gdb
$(TARGET_CROSS)gdb: $(GDB_HOST_DIR)/gdb/gdb
install -c $(GDB_HOST_DIR)/gdb/gdb $(TARGET_CROSS)gdb
ln -snf $(REAL_GNU_TARGET_NAME)-gdb \
$(HOST_DIR)/usr/bin/$(GNU_TARGET_NAME)-gdb
gdbhost: host-expat $(TARGET_CROSS)gdb
gdbhost-source: $(DL_DIR)/$(GDB_SOURCE)
gdbhost-clean:
-$(MAKE) -C $(GDB_HOST_DIR) clean
gdbhost-dirclean:
rm -rf $(GDB_HOST_DIR)
#############################################################
#
# Toplevel Makefile options
#
#############################################################
ifeq ($(BR2_PACKAGE_GDB),y)
TARGETS+=gdb_target
endif
ifeq ($(BR2_PACKAGE_GDB_SERVER),y)
TARGETS+=gdbserver
endif
ifeq ($(BR2_PACKAGE_GDB_HOST),y)
TARGETS+=gdbhost
endif