comment "Gdb Options"

config BR2_PACKAGE_GDB
	bool "Build gdb debugger for the Target"
	select BR2_PACKAGE_NCURSES
	depends on BR2_USE_WCHAR
	depends on BR2_TOOLCHAIN_HAS_THREADS
	depends on !BR2_sh && !BR2_sh64
	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_WCHAR

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"
	# cross-gdb is supposed to be part of the external
	# toolchain. And the build currently fails.
	depends on !BR2_TOOLCHAIN_EXTERNAL
	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_6 if BR2_bfin
	default BR2_GDB_VERSION_6_7_1_AVR32_2_1_5 if BR2_avr32
	default BR2_GDB_VERSION_7_4
	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_bfin

	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 || BR2_bfin)
		depends on BR2_DEPRECATED

	config BR2_GDB_VERSION_7_0_1
		bool "gdb 7.0.1"
		depends on !BR2_bfin
		depends on BR2_DEPRECATED
		depends on BR2_TOOLCHAIN_HAS_THREADS_DEBUG_IF_NEEDED
		select BR2_PTHREAD_DEBUG if (BR2_TOOLCHAIN_BUILDROOT && !BR2_PTHREADS_NONE)

	config BR2_GDB_VERSION_7_1
		bool "gdb 7.1"
		depends on !BR2_bfin
		depends on BR2_DEPRECATED
		depends on BR2_TOOLCHAIN_HAS_THREADS_DEBUG_IF_NEEDED
		select BR2_PTHREAD_DEBUG if (BR2_TOOLCHAIN_BUILDROOT && !BR2_PTHREADS_NONE)

	config BR2_GDB_VERSION_7_2
		bool "gdb 7.2.x"
		depends on !BR2_bfin
		depends on BR2_TOOLCHAIN_HAS_THREADS_DEBUG_IF_NEEDED
		select BR2_PTHREAD_DEBUG if (BR2_TOOLCHAIN_BUILDROOT && !BR2_PTHREADS_NONE)

	config BR2_GDB_VERSION_7_3
		bool "gdb 7.3.x"
		depends on !BR2_bfin
		depends on BR2_TOOLCHAIN_HAS_THREADS_DEBUG_IF_NEEDED
		select BR2_PTHREAD_DEBUG if (BR2_TOOLCHAIN_BUILDROOT && !BR2_PTHREADS_NONE)

	config BR2_GDB_VERSION_7_4
		bool "gdb 7.4.x"
		depends on !BR2_bfin
		depends on BR2_TOOLCHAIN_HAS_THREADS_DEBUG_IF_NEEDED
		select BR2_PTHREAD_DEBUG if (BR2_TOOLCHAIN_BUILDROOT && !BR2_PTHREADS_NONE)

	config BR2_GDB_VERSION_7_7
		bool "gdb 7.7.x"
		depends on !BR2_bfin
		depends on BR2_TOOLCHAIN_HAS_THREADS_DEBUG_IF_NEEDED
		select BR2_PTHREAD_DEBUG if (BR2_TOOLCHAIN_BUILDROOT && !BR2_PTHREADS_NONE)

endchoice

comment "gdb 7.x support needs pthread debug support in toolchain"
	depends on BR2_PACKAGE_GDB || BR2_PACKAGE_GDB_SERVER || BR2_PACKAGE_GDB_HOST
	depends on !BR2_TOOLCHAIN_HAS_THREADS_DEBUG_IF_NEEDED

config BR2_GDB_VERSION
	string
	default "6.6a"     if BR2_GDB_VERSION_6_6
	default "6.7.1-avr32-2.1.5" if BR2_GDB_VERSION_6_7_1_AVR32_2_1_5
	default "6.8a"     if BR2_GDB_VERSION_6_8
	default "7.0.1a"   if BR2_GDB_VERSION_7_0_1
	default "7.1a"     if BR2_GDB_VERSION_7_1
	default "7.2a"     if BR2_GDB_VERSION_7_2
	default "7.3.1"    if BR2_GDB_VERSION_7_3
	default "7.4"      if BR2_GDB_VERSION_7_4
	default "7.7.1"    if BR2_GDB_VERSION_7_7
