# GDB menu

## help gdb is the GNU debugger

source "config/debug/gdb.in.cross"
source "config/debug/gdb.in.native"
source "config/debug/gdb.in.gdbserver"

if GDB_CROSS || GDB_NATIVE || GDB_GDBSERVER

comment "gdb version"

config DEBUG_GDB_SHOW_LINARO
    bool
    prompt "Show Linaro versions (EXPERIMENTAL)"
    depends on EXPERIMENTAL
    help
      Linaro is maintaining some advanced/more stable/experimental versions
      of gdb, especially for the ARM architecture.

      Those versions have not been blessed by the gdb community (nor have they
      been cursed either!), but they look to be pretty much stable, and even
      more stable than the upstream versions. YMMV...

      If you do not know what this Linaro stuff is, then simply say 'n' here,
      and rest in peace. OTOH, if you know what you are doing, you will be
      able to use and enjoy :-) the Linaro versions by saying 'y' here.

      Linaro: http://www.linaro.org/

choice
    bool
    prompt "gdb version"
# Don't remove next line
# CT_INSERT_VERSION_BELOW

config GDB_V_linaro_7_3_2011_10
    bool
    prompt "linaro-7.3-2011.10 (EXPERIMENTAL)"
    depends on DEBUG_GDB_SHOW_LINARO
    select GDB_7_0_or_later

config GDB_V_7_3a
    bool
    prompt "7.3a (EXPERIMENTAL)"
    depends on EXPERIMENTAL
    select GDB_7_0_or_later

config GDB_V_linaro_7_2_2011_05_0
    bool
    prompt "linaro-7.2-2011.05-0 (EXPERIMENTAL)"
    depends on DEBUG_GDB_SHOW_LINARO
    select GDB_7_0_or_later

config GDB_V_7_2a
    bool
    prompt "7.2a (EXPERIMENTAL)"
    depends on EXPERIMENTAL
    select GDB_7_0_or_later

config GDB_V_7_1a
    bool
    prompt "7.1a (EXPERIMENTAL)"
    depends on EXPERIMENTAL
    select GDB_7_0_or_later

config GDB_V_7_0_1a
    bool
    prompt "7.0.1a (EXPERIMENTAL)"
    depends on EXPERIMENTAL
    select GDB_7_0_or_later

config GDB_V_7_0a
    bool
    prompt "7.0a (EXPERIMENTAL)"
    depends on EXPERIMENTAL
    select GDB_7_0_or_later

config GDB_V_6_8a
    bool
    prompt "6.8a"

endchoice

config GDB_7_0_or_later
    bool
    select GDB_HAS_PKGVERSION_BUGURL
    select GDB_INSTALL_GDBINIT

config GDB_HAS_PKGVERSION_BUGURL
    bool

config GDB_INSTALL_GDBINIT
    bool

config GDB_VERSION
    string
# Don't remove next line
# CT_INSERT_VERSION_STRING_BELOW
    default "linaro-7.3-2011.10" if GDB_V_linaro_7_3_2011_10
    default "7.3a" if GDB_V_7_3a
    default "linaro-7.2-2011.05-0" if GDB_V_linaro_7_2_2011_05_0
    default "7.2a" if GDB_V_7_2a
    default "7.1a" if GDB_V_7_1a
    default "7.0.1a" if GDB_V_7_0_1a
    default "7.0a" if GDB_V_7_0a
    default "6.8a" if GDB_V_6_8a

endif
