# 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"
    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_7_8
    bool
    prompt "7.8"
    select GDB_7_2_or_later

config GDB_V_7_7_1
    bool
    prompt "7.7.1"
    select GDB_7_2_or_later

config GDB_V_7_7
    bool
    prompt "7.7"
    select GDB_7_2_or_later

config GDB_V_7_6_1
    bool
    prompt "7.6.1"
    select GDB_7_2_or_later

config GDB_V_linaro_7_6_2013_05
    bool
    prompt "linaro-7.6-2013.05"
    depends on DEBUG_GDB_SHOW_LINARO
    select GDB_7_2_or_later

config GDB_V_7_5_1
    bool
    prompt "7.5.1"
    select GDB_7_2_or_later

config GDB_V_linaro_7_5_2012_12_1
    bool
    prompt "linaro-7.5-2012.12-1"
    depends on DEBUG_GDB_SHOW_LINARO
    select GDB_7_2_or_later

config GDB_V_linaro_7_4_2012_06
    bool
    prompt "linaro-7.4-2012.06"
    depends on DEBUG_GDB_SHOW_LINARO
    select GDB_7_2_or_later

config GDB_V_7_4_1
    bool
    prompt "7.4.1"
    select GDB_7_2_or_later

config GDB_V_7_4
    bool
    prompt "7.4"
    select GDB_7_2_or_later

config GDB_V_linaro_7_3_2011_12
    bool
    prompt "linaro-7.3-2011.12"
    depends on DEBUG_GDB_SHOW_LINARO
    select GDB_7_2_or_later

config GDB_V_7_3_1
    bool
    prompt "7.3.1"
    select GDB_7_2_or_later

config GDB_V_7_3a
    bool
    prompt "7.3a"
    select GDB_7_2_or_later

config GDB_V_linaro_7_2_2011_05_0
    bool
    prompt "linaro-7.2-2011.05-0"
    depends on DEBUG_GDB_SHOW_LINARO
    select GDB_7_2_or_later

config GDB_V_7_2a
    bool
    prompt "7.2a"
    select GDB_7_2_or_later

config GDB_V_7_1a
    bool
    prompt "7.1a"
    select GDB_7_0_or_later

config GDB_V_7_0_1a
    bool
    prompt "7.0.1a"
    select GDB_7_0_or_later

config GDB_V_7_0a
    bool
    prompt "7.0a"
    select GDB_7_0_or_later

config GDB_V_6_8a
    bool
    prompt "6.8a"

config GDB_CUSTOM
    bool
    prompt "Custom gdb"
    depends on EXPERIMENTAL
    select GDB_7_2_or_later

endchoice

config GDB_7_2_or_later
    bool
    select GDB_7_0_or_later

config GDB_7_0_or_later
    bool
    select GDB_HAS_PKGVERSION_BUGURL
    select GDB_HAS_PYTHON
    select GDB_INSTALL_GDBINIT

config GDB_HAS_PKGVERSION_BUGURL
    bool

config GDB_HAS_PYTHON
    bool

config GDB_INSTALL_GDBINIT
    bool

config GDB_VERSION
    string
# Don't remove next line
# CT_INSERT_VERSION_STRING_BELOW
    default "7.8" if GDB_V_7_8
    default "7.7.1" if GDB_V_7_7_1
    default "7.7" if GDB_V_7_7
    default "7.6.1" if GDB_V_7_6_1
    default "linaro-7.6-2013.05" if GDB_V_linaro_7_6_2013_05
    default "7.5.1" if GDB_V_7_5_1
    default "linaro-7.5-2012.12-1" if GDB_V_linaro_7_5_2012_12_1
    default "linaro-7.4-2012.06" if GDB_V_linaro_7_4_2012_06
    default "7.4.1" if GDB_V_7_4_1
    default "7.4" if GDB_V_7_4
    default "linaro-7.3-2011.12" if GDB_V_linaro_7_3_2011_12
    default "7.3.1" if GDB_V_7_3_1
    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
    default "custom" if GDB_CUSTOM

if GDB_CUSTOM

config GDB_CUSTOM_LOCATION
    string
    prompt "Full path to custom gdb source"
    default ""
    help
      Enter the path to the directory (or tarball) of your source for gdb,
      or leave blank to use default CT_CUSTOM_LOCATION_ROOT_DIR/gdb

endif # GDB_CUSTOM

endif

