# Choose gcc version.

comment "GCC Options"

choice
	prompt "GCC compiler Version"
	default BR2_GCC_VERSION_4_3_X 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_4_2_1
		depends on !BR2_avr32
		depends on BR2_DEPRECATED
		bool "gcc 4.2.1"

	config BR2_GCC_VERSION_4_2_2
		depends on !BR2_avr32
		depends on BR2_DEPRECATED
		bool "gcc 4.2.2"

	config BR2_GCC_VERSION_4_2_2_AVR32_2_1_5
	       depends on BR2_avr32
	       bool "gcc 4.2.2-avr32-2.1.5"

	config BR2_GCC_VERSION_4_2_3
		depends on !BR2_avr32
		depends on BR2_DEPRECATED
		bool "gcc 4.2.3"

	config BR2_GCC_VERSION_4_2_4
		depends on !BR2_avr32
		bool "gcc 4.2.4"

	config BR2_GCC_VERSION_4_3_X
		depends on !BR2_avr32
		bool "gcc 4.3.x"

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

	config BR2_GCC_VERSION_SNAP
		depends on !BR2_avr32
		bool "gcc snapshot"
endchoice

config BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE
	bool
	default y if !BR2_GCC_VERSION_4_2_1 && !BR2_GCC_VERSION_4_2_2 && !BR2_GCC_VERSION_4_2_3 && !BR2_GCC_VERSION_4_2_4 && !BR2_GCC_VERSION_4_2_2_AVR32_2_1_5

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

config BR2_GCC_VERSION
	string
	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.2-avr32-2.1.5" if BR2_GCC_VERSION_4_2_2_AVR32_2_1_5
	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.5"     if BR2_GCC_VERSION_4_3_X
	default "4.4.4"     if BR2_GCC_VERSION_4_4_X
	default $BR2_GCC_SNAP_DATE if BR2_GCC_VERSION_SNAP

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
	depends on BROKEN
	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?"
	depends on !BR2_PREFER_STATIC_LIB
	default y
	depends on !BR2_sparc && !BR2_sparc64
	help
	  Build/install a shared libgcc library

config BR2_GCC_ENABLE_TLS
	bool "Enable compiler tls support"
	default y
	depends on BR2_PTHREADS_NATIVE
	help
	  Enable the compiler to generate code for accessing
	  thread local storage variables
