# Choose gcc version.

comment "GCC Options"

choice
	prompt "GCC compiler Version"
	default BR2_GCC_VERSION_4_3_3 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_DEPRECATED
		bool "gcc 4.3.1"

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

	config BR2_GCC_VERSION_4_3_3
		depends on !BR2_avr32 && !BR2_nios2
		bool "gcc 4.3.3"

	config BR2_GCC_VERSION_4_4_X
		depends on !BR2_avr32 && !BR2_nios2
		bool "gcc 4.4.x"

#	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.3"     if BR2_GCC_VERSION_4_3_3
	default "4.4.1"     if BR2_GCC_VERSION_4_4_X
	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_GCC_CROSS_JAVA
       bool

config BR2_INSTALL_LIBGCJ
	bool "Build/install java compiler and libgcj?"
	depends on !BR2_avr32 && BR2_INSTALL_LIBSTDCPP
	select BR2_GCC_CROSS_JAVA
	select BR2_LARGEFILE
	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
	depends on !BR2_sparc && !BR2_sparc64
	help
	  Build/install a shared libgcc library

