comment "Gdb Options"

config BR2_PACKAGE_GDB
	bool "Build gdb debugger for the Target"
	select BR2_PACKAGE_NCURSES
	depends on BR2_USE_WCHAR
	help
	    Build the full gdb debugger to run on the target.

comment "Gdb debugger for the target needs WCHAR support in toolchain"
	depends on !BR2_USE_WHCAR

config BR2_PACKAGE_GDB_SERVER
	bool "Build gdb server for the Target"
	help
	    Build the gdbserver stub to run on the target.
	    A full gdb is needed to debug the progam.

config BR2_PACKAGE_GDB_HOST
	bool "Build gdb for the Host"
	help
	    Build gdb to run on the host to debug programs run on the target.

choice
	prompt "GDB debugger Version"
	default BR2_GDB_VERSION_6_8 if !BR2_avr32
	default BR2_GDB_VERSION_6_7_1_AVR32_2_1_5 if BR2_avr32
	depends on BR2_PACKAGE_GDB || BR2_PACKAGE_GDB_SERVER || BR2_PACKAGE_GDB_HOST
	help
	  Select the version of gdb you wish to use.

	config BR2_GDB_VERSION_6_6
		bool "gdb 6.6"
		depends on !BR2_avr32
		depends on BR2_DEPRECATED

	config BR2_GDB_VERSION_6_7_1
		depends on !BR2_avr32
		bool "gdb 6.7.1"

	config BR2_GDB_VERSION_6_7_1_AVR32_2_1_5
		depends on BR2_avr32
		bool "gdb 6.7.1-avr32-2.1.5"

	config BR2_GDB_VERSION_6_8
		bool "gdb 6.8"
		depends on !BR2_avr32

	config BR2_GDB_VERSION_7_0_1
		bool "gdb 7.0.1"
		select BR2_PTHREAD_DEBUG if !BR2_PTHREADS_NONE

	config BR2_GDB_VERSION_7_1
		bool "gdb 7.1"
		select BR2_PTHREAD_DEBUG if !BR2_PTHREADS_NONE

endchoice

config BR2_GDB_VERSION
	string
	default "6.6"      if BR2_GDB_VERSION_6_6
	default "6.7.1"    if BR2_GDB_VERSION_6_7_1
	default "6.7.1-avr32-2.1.5" if BR2_GDB_VERSION_6_7_1_AVR32_2_1_5
	default "6.8"      if BR2_GDB_VERSION_6_8
	default "7.0.1"    if BR2_GDB_VERSION_7_0_1
	default "7.1"      if BR2_GDB_VERSION_7_1
