kumquat-buildroot/package/gdb/Config.in
Thomas Petazzoni 81ef52b630 package/gdb: fix build of gdbserver-only on the ARC gdb version
The GDB version used on ARC is based on a recent gdb code base, post
gdb 9.2. This recent gdb code base, which pre-figures what will be in
gdb 10, has a significant change: gdbserver is not longer in
gdb/gdbserver, but at the top-level, and the mechanism to build
gdbserver only has changed. Due to this change, a build of ARC GDB for
gdbserver only fails with:

/bin/bash: line 0: cd: /opt/output/build/gdb-arc-2020.03-release-gdb/gdb/gdbserver: No such file or directory

This commit adjusts gdb.mk to support four cases:

 - "old" gdb, gdbserver only
 - "old" gdb, with the gdb debugger (and optionally gdbserver as well)
 - "new" gdb, gdbserver only
 - "new" gdb, with the gdb debugger (and optionally gdbserver as well)

A boolean GDB_GDBSERVER_TOPLEVEL is introduced to differentiate
between the old and new gdb, it is set to "y" for gdb versions that
have the gdbserver code at the top-level. For now, only the ARC
version sets it, but in the future, upstream gdb version 10 will also
have to set it.

Here is the behavior, for each case:

 (1) "old" gdb, gdbserver only

     We set GDB_SUBDIR to gdb/gdbserver, so only the configure script
     in this folder gets called.

     --enable-gdbserver --disable-gdb are passed in CONF_OPTS.

 (2) "old" gdb, with the gdb debugger (and optionally gdbserver as well)

     We set GDB_SUBDIR to build/, an empty directory which allows to
     do an out of tree build, which is mandatory for a full gdb build
     since gdb 9.x.

     --enable-gdb is passed in CONF_OPTS as well as --enable-gdbserver
     or --disable-gdbserver depending on whether gdbserver is enabled
     as well.

 (3) "new" gdb, gdbserver only

     We set GDB_SUBDIR to build/, an empty directory which allows to
     do an out of tree build, which is mandatory for a full gdb build
     since gdb 9.x.

     --enable-gdbserver --disable-gdb are passed in CONF_OPTS.

 (4) "new" gdb, with the gdb debugger (and optionally gdbserver as well)

     We set GDB_SUBDIR to build/, an empty directory which allows to
     do an out of tree build, which is mandatory for a full gdb build
     since gdb 9.x.

     --enable-gdb is passed in CONF_OPTS as well as --enable-gdbserver
     or --disable-gdbserver depending on whether gdbserver is enabled
     as well.

In addition to these changes, some related changes are done as well:

 - We re-enable building both gdb and gdbserver on ARC, as it works
   again.

 - We only pass --with-curses when curses is really provided, i.e when
   the full debugger is being built.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Tested-by: Alexey Brodkin <abrodkin@synopsys.com>
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
2020-09-30 22:47:09 +02:00

91 lines
2.8 KiB
Plaintext

config BR2_PACKAGE_GDB_ARCH_SUPPORTS
bool
default y
depends on !((BR2_arm || BR2_armeb) && BR2_BINFMT_FLAT)
depends on !BR2_microblaze
depends on !BR2_nios2
depends on !BR2_or1k
depends on !BR2_nds32
comment "gdb/gdbserver needs a toolchain w/ threads, threads debug"
depends on BR2_PACKAGE_GDB_ARCH_SUPPORTS
depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_TOOLCHAIN_HAS_THREADS_DEBUG
comment "gdb/gdbserver >= 8.x needs a toolchain w/ C++, gcc >= 4.8"
depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8
config BR2_PACKAGE_GDB
bool "gdb"
depends on BR2_TOOLCHAIN_HAS_THREADS && BR2_TOOLCHAIN_HAS_THREADS_DEBUG
depends on BR2_PACKAGE_GDB_ARCH_SUPPORTS
depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8
depends on BR2_INSTALL_LIBSTDCPP
# no gdbserver on riscv
select BR2_PACKAGE_GDB_DEBUGGER if BR2_riscv
# When the external toolchain gdbserver is copied to the
# target, we don't allow building a separate gdbserver. The
# one from the external toolchain should be used.
select BR2_PACKAGE_GDB_SERVER if \
(!BR2_PACKAGE_GDB_DEBUGGER && !BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY)
help
GDB, the GNU Project debugger, allows you to see what is
going on `inside' another program while it executes -- or
what another program was doing at the moment it crashed.
This option allows to build gdbserver and/or the gdb
debugger for the target.
For embedded development, the most common solution is to
build only 'gdbserver' for the target, and use a cross-gdb
on the host. See BR2_PACKAGE_HOST_GDB in the Toolchain menu
to enable one. Notice that external toolchains often provide
their own pre-built cross-gdb and gdbserver binaries.
http://www.gnu.org/software/gdb/
if BR2_PACKAGE_GDB
config BR2_PACKAGE_GDB_SERVER
bool "gdbserver"
depends on !BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY
depends on !BR2_riscv
help
Build the gdbserver stub to run on the target.
A full gdb is needed to debug the progam.
config BR2_PACKAGE_GDB_DEBUGGER
bool "full debugger"
depends on BR2_USE_WCHAR
depends on !BR2_sh
depends on !BR2_csky
select BR2_PACKAGE_NCURSES
comment "full gdb on target needs a toolchain w/ wchar"
depends on !BR2_sh
depends on !BR2_USE_WCHAR
if BR2_PACKAGE_GDB_DEBUGGER
config BR2_PACKAGE_GDB_TUI
bool "TUI support"
help
This option enables terminal user interface (TUI) for gdb
"The GDB Text User Interface (TUI) is a terminal interface
which uses the curses library to show the source file, the
assembly output, the program registers and GDB commands in
separate text windows."
https://sourceware.org/gdb/current/onlinedocs/gdb/TUI.html
config BR2_PACKAGE_GDB_PYTHON
bool "Python support"
# Only Python 2.x is supported by gdb for now
depends on BR2_PACKAGE_PYTHON
help
This option enables Python support in the target gdb.
endif
endif