# Choose gcc version.

comment "GCC Options"

choice
	prompt "GCC compiler Version"
	default BR2_GCC_VERSION_4_5_X if !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8
	default BR2_GCC_VERSION_4_4_X if BR2_sparc_sparchfleon || BR2_sparc_sparchfleonv8 || BR2_sparc_sparcsfleon || BR2_sparc_sparcsfleonv8
	default BR2_GCC_VERSION_4_2_2_AVR32_2_1_5 if BR2_avr32
	help
	  Select the version of gcc you wish to use.

	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_3_X
		depends on !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8
		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_4_5_X
		depends on !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8
		bool "gcc 4.5.x"

	config BR2_GCC_VERSION_4_6_X
		depends on !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8
		bool "gcc 4.6.x"

	config BR2_GCC_VERSION_SNAP
		depends on !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8
		bool "gcc snapshot"
endchoice

config BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE
	bool
	default y if !BR2_GCC_VERSION_4_2_2_AVR32_2_1_5

config BR2_GCC_SNAP_DATE
	string "GCC snapshot date"
	default "4.7-20110430"
	depends on BR2_GCC_VERSION_SNAP
	help
	  Enter snapshot date to use for gcc.
	  Format is: A.B-YYYYMMDD

	  A is GCC major version, for example 4.
	  B is GCC minor version, for example 7.
	  YYYYMMDD is snapshot date, for example 20110430.

	  This way we'd get version 4.7-20110430

config BR2_GCC_VERSION
	string
	default "4.2.2-avr32-2.1.5" if BR2_GCC_VERSION_4_2_2_AVR32_2_1_5
	default "4.3.6"     if BR2_GCC_VERSION_4_3_X
	default "4.4.6"     if BR2_GCC_VERSION_4_4_X
	default "4.5.3"     if BR2_GCC_VERSION_4_5_X
	default "4.6.2"     if BR2_GCC_VERSION_4_6_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_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
	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

config BR2_GCC_ENABLE_OPENMP
	bool "Enable compiler OpenMP support"
	depends on !BR2_PTHREADS_NONE && !BR2_avr32
	help
	  Enable OpenMP support for the compiler
