# 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_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.
      
endif # GDB_CROSS
