# Choose gcc version.

comment "GCC Options"

choice
	prompt "GCC compiler Version"
	default BR2_GCC_VERSION_4_3_2 if !BR2_avr32
	default BR2_GCC_VERSION_4_2_3 if BR2_avr32
	help
	  Select the version of gcc you wish to use.

	config BR2_GCC_VERSION_3_4_6
		depends on !BR2_avr32
		depends on BR2_DEPRECATED
		bool "gcc 3.4.6"

	config BR2_GCC_VERSION_4_0_4
		depends on !BR2_avr32 && !BR2_nios2
		depends on BR2_DEPRECATED
		bool "gcc 4.0.4"

	config BR2_GCC_VERSION_4_1_2
		depends on !BR2_nios2
		depends on BR2_EXT_GCC_VERSION_4_1_2
		depends on BR2_DEPRECATED
		bool "gcc 4.1.2"

	config BR2_GCC_VERSION_4_2_1
		depends on !BR2_nios2
		depends on BR2_EXT_GCC_VERSION_4_2_1
		depends on BR2_DEPRECATED
		bool "gcc 4.2.1"

	config BR2_GCC_VERSION_4_2_2
		depends on BR2_EXT_GCC_VERSION_4_2_2
		depends on BR2_DEPRECATED || BR2_avr32
		bool "gcc 4.2.2"

	config BR2_GCC_VERSION_4_2_3
		depends on !BR2_nios2
		depends on BR2_EXT_GCC_VERSION_4_2_3
		depends on BR2_DEPRECATED || BR2_avr32
		bool "gcc 4.2.3"

	config BR2_GCC_VERSION_4_2_4
		depends on !BR2_avr32 && !BR2_nios2
		depends on BR2_RECENT || BR2_DEPRECATED
		bool "gcc 4.2.4"

	config BR2_GCC_VERSION_4_3_1
		depends on !BR2_avr32 && !BR2_nios2
		depends on BR2_RECENT || BR2_DEPRECATED
		bool "gcc 4.3.1"

	config BR2_GCC_VERSION_4_3_2
		depends on !BR2_avr32 && !BR2_nios2
		bool "gcc 4.3.2"

#	config BR2_GCC_VERSION_4_3
#		depends on !BR2_avr32 && !BR2_nios2
#		select BR2_GCC_IS_SNAP
#		bool "gcc 4.3"
endchoice

config BR2_GCC_IS_SNAP
	depends on !BR2_avr32
	bool

config BR2_GCC_SUPPORTS_SYSROOT
	bool
	default n if BR2_GCC_VERSION_3_4_6 || BR2_GCC_VERSION_4_0_4 || BR2_GCC_VERSION_4_1_2
	default y if !BR2_GCC_VERSION_3_4_6 && !BR2_GCC_VERSION_4_0_4 && !BR2_GCC_VERSION_4_1_2

config BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE
	bool
	default n if BR2_GCC_VERSION_3_4_6 || BR2_GCC_VERSION_4_0_4 || BR2_GCC_VERSION_4_1_2 || BR2_GCC_VERSION_4_2_1 || BR2_GCC_VERSION_4_2_2 || BR2_GCC_VERSION_4_2_3 || BR2_GCC_VERSION_4_2_4
	default y if !BR2_GCC_VERSION_3_4_6 && !BR2_GCC_VERSION_4_0_4 && !BR2_GCC_VERSION_4_1_2 && !BR2_GCC_VERSION_4_2_1 && !BR2_GCC_VERSION_4_2_2 && !BR2_GCC_VERSION_4_2_3 && !BR2_GCC_VERSION_4_2_4

config BR2_GCC_SNAP_DATE
	string "GCC snapshot date"
	default "20070921"
	depends on BR2_GCC_IS_SNAP
	help
	  Enter snapshot date to use for gcc.  Format is:
	  YYYYMMDD

config BR2_GCC_VERSION
	string
	default "3.4.6"     if BR2_GCC_VERSION_3_4_6
	default "4.0.4"     if BR2_GCC_VERSION_4_0_4
	default "4.1.2"     if BR2_GCC_VERSION_4_1_2
	default "4.2.1"     if BR2_GCC_VERSION_4_2_1
	default "4.2.2"     if BR2_GCC_VERSION_4_2_2
	default "4.2.3"     if BR2_GCC_VERSION_4_2_3
	default "4.2.4"     if BR2_GCC_VERSION_4_2_4
	default "4.3.1"     if BR2_GCC_VERSION_4_3_1
	default "4.3.2"     if BR2_GCC_VERSION_4_3_2
	default "4.3"       if BR2_GCC_VERSION_4_3

config BR2_TOOLCHAIN_SYSROOT
	bool "Enable toolchain with --sysroot support"
	depends on BR2_GCC_SUPPORTS_SYSROOT
	default y
	help
	  Enables --sysroot=dir for binutils and gcc.
	  Use dir as the logical root directory for headers and libraries.
	  For example, if the compiler would normally search for headers in
	  /usr/include and libraries in /usr/lib, it will instead search
	  dir/usr/include and dir/usr/lib.

	  This does not work with gcc < 4.2.0 (4.1.2 gets
	  ORIGINAL_AS_FOR_TARGET wrong)

config BR2_GCC_USE_SJLJ_EXCEPTIONS
	bool "Enable setjmp/longjmp exceptions?"
	help
	  For some platforms, proper stack unwinding works perfectly,
	  while other platforms must use setjmp/longjmp exceptions for
	  proper stack unwinding during exception handling.  Most people
	  can leave this set to n.

config BR2_EXTRA_GCC_CONFIG_OPTIONS
	string "Additional gcc options"
	default ""
	help
	  Any additional gcc configure options you may want to include....

config BR2_GCC_CROSS_FORTRAN
	bool "Fortran cross-compiler support"
	depends on !BR2_avr32
	help
	  Build a Fortran cross-compiler

config BR2_INSTALL_LIBGCJ
	bool "Build/install java compiler and libgcj?"
	depends on !BR2_avr32 && BR2_INSTALL_LIBSTDCPP
	help
	  Build/install java compiler and libgcj?

config BR2_INSTALL_OBJC
	bool "Build/install Objective-C compiler and runtime?"
	depends on !BR2_avr32
	help
	  Build/install Objective-C compiler and runtime?

config BR2_INSTALL_FORTRAN
	bool "Build/install Fortran compiler and runtime?"
	depends on !BR2_avr32
	select BR2_PACKAGE_LIBMPFR
	help
	  Build/install Fortran compiler and runtime?
	  Note that it is highly recommended NOT to use gfortran
	  from gcc older than 4.2.0

config BR2_GCC_SHARED_LIBGCC
	bool "Build/install a shared libgcc?"
	default y
	help
	  Build/install a shared libgcc library

