# Menu for the cross GDB

config STATIC_TOOLCHAIN
    select GDB_CROSS_STATIC if GDB_CROSS

config GDB_CROSS
    bool
    prompt "Cross-gdb"
    default y
    select GDB_GDBSERVER if ! BARE_METAL
    help
      Build and install a cross-gdb for the target, to run on host.

if GDB_CROSS

config GDB_CROSS_STATIC
    bool
    prompt "Build a static cross gdb"
    select WANTS_STATIC_LINK
    help
      A static cross gdb can be usefull if you debug on a machine that is
      not the one that is used to compile the toolchain.
      
      That way, you can share the cross-gdb without installing a toolchain
      on every machine that will be used to debug target programs.

config GDB_CROSS_SIM
    bool
    prompt "Enable 'sim'"
    help
      Say 'y' here if you want to build the 'sim' emulator.
      You probably don't want it, unless you are building for bare-metal.
      The default is 'n'.

config GDB_CROSS_PYTHON
    bool
    prompt "Enable python scripting"
    depends on ! GDB_CROSS_STATIC
    default y
    help
      Say 'y' if you want to use Python scripting inside gdb.
      Say 'n' if you do not want to.
      
      Beware that enabling Python scripting could render the gdb
      executable non-functional if you move it to another machine.
      Building a static gdb can help in this regard, although there
      have been reports of problems when linking gdb to the static
      libpython.a. This should be fixed in gdb >=7.3. YMMV.

config GDB_CROSS_EXTRA_CONFIG_ARRAY
    string
    prompt "Cross-gdb extra config"
    default ""
    help
      Extra flags to pass onto ./configure when configuring the gdb cross.

endif # GDB_CROSS
