# Choose gcc version.

comment "GCC Options"

choice
	prompt "GCC compiler Version"
	default BR2_GCC_VERSION_4_6_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 && !BR2_cortex_a8 && !BR2_cortex_a9 && !BR2_x86_atom && !BR2_powerpc_e300c2 && !BR2_powerpc_e300c3 && !BR2_powerpc_e500mc
		bool "gcc 4.3.x"

	config BR2_GCC_VERSION_4_4_X
		depends on !BR2_avr32 && !BR2_x86_atom
		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_4_7_X
		depends on !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8
		bool "gcc 4.7.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.8-20120429"
	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.7"     if BR2_GCC_VERSION_4_4_X
	default "4.5.4"     if BR2_GCC_VERSION_4_5_X
	default "4.6.3"     if BR2_GCC_VERSION_4_6_X
	default "4.7.2"     if BR2_GCC_VERSION_4_7_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
