# Compiler options
#
## select CC_SUPPORT_CXX
## select CC_SUPPORT_FORTRAN
## select CC_SUPPORT_JAVA
## select CC_SUPPORT_ADA
## select CC_SUPPORT_OBJC
## select CC_SUPPORT_OBJCXX
##
## help gcc is the full-blown GNU compiler. This is what most people will choose.
## help
## help gcc supports many languages, a powerful code parser, optimised binary
## help output, and lots of other features.

config CC_GCC_SHOW_LINARO
    bool
    prompt "Show Linaro versions"
    help
      Linaro is maintaining some advanced/more stable/experimental versions
      of gcc, especially for the ARM architecture.
      
      Those versions have not been blessed by the gcc comunity (nor have they
      been cursed either!), but they look to be pretty much stable, and even
      more stable than the upstream versions. YMMV...
      
      If you do not know what this Linaro stuff is, then simply say 'n' here,
      and rest in peace. OTOH, if you know what you are doing, you will be
      able to use and enjoy :-) the Linaro versions by saying 'y' here.
      
      Linaro: http://www.linaro.org/

choice
    bool
    prompt "gcc version"

# Don't remove next line
# CT_INSERT_VERSION_BELOW

config CC_V_linaro_4_8
    bool
    prompt "linaro-4.8-2013.06-1"
    depends on CC_GCC_SHOW_LINARO
    select CC_GCC_4_8

config CC_V_4_8_1
    bool
    prompt "4.8.1"
    select CC_GCC_4_8

config CC_V_4_8_0
    bool
    prompt "4.8.0"
    select CC_GCC_4_8

config CC_V_linaro_4_7
    bool
    prompt "linaro-4.7-2013.06-1"
    depends on CC_GCC_SHOW_LINARO
    select CC_GCC_4_7

config CC_V_4_7_3
    bool
    prompt "4.7.3"
    select CC_GCC_4_7

config CC_V_4_7_2
    bool
    prompt "4.7.2"
    select CC_GCC_4_7

config CC_V_4_7_1
    bool
    prompt "4.7.1"
    select CC_GCC_4_7

config CC_V_4_7_0
    bool
    prompt "4.7.0"
    select CC_GCC_4_7

config CC_V_linaro_4_6
    bool
    prompt "linaro-4.6-2013.05"
    depends on CC_GCC_SHOW_LINARO
    select CC_GCC_4_6

config CC_V_4_6_4
    bool
    prompt "4.6.4"
    select CC_GCC_4_6

config CC_V_4_6_3
    bool
    prompt "4.6.3"
    select CC_GCC_4_6

config CC_V_4_6_2
    bool
    prompt "4.6.2"
    select CC_GCC_4_6

config CC_V_4_6_1
    bool
    prompt "4.6.1"
    select CC_GCC_4_6

config CC_V_4_6_0
    bool
    prompt "4.6.0"
    select CC_GCC_4_6

config CC_V_linaro_4_5
    bool
    prompt "linaro-4.5-2012.03"
    depends on CC_GCC_SHOW_LINARO
    select CC_GCC_4_5

config CC_V_4_5_3
    bool
    prompt "4.5.3"
    select CC_GCC_4_5

config CC_V_4_5_2
    bool
    prompt "4.5.2"
    select CC_GCC_4_5

config CC_V_4_5_1
    bool
    prompt "4.5.1"
    select CC_GCC_4_5

config CC_V_4_5_0
    bool
    prompt "4.5.0"
    select CC_GCC_4_5


config CC_V_linaro_4_4
    bool
    prompt "linaro-4.4-2011.02-0"
    depends on CC_GCC_SHOW_LINARO
    select CC_GCC_4_4

config CC_V_4_4_7
    bool
    prompt "4.4.7"
    select CC_GCC_4_4

config CC_V_4_4_6
    bool
    prompt "4.4.6"
    select CC_GCC_4_4

config CC_V_4_4_5
    bool
    prompt "4.4.5"
    select CC_GCC_4_4

config CC_V_4_4_4
    bool
    prompt "4.4.4"
    select CC_GCC_4_4

config CC_V_4_4_3
    bool
    prompt "4.4.3"
    select CC_GCC_4_4

config CC_V_4_4_2
    bool
    prompt "4.4.2"
    select CC_GCC_4_4

config CC_V_4_4_1
    bool
    prompt "4.4.1"
    select CC_GCC_4_4

config CC_V_4_4_0
    bool
    prompt "4.4.0"
    select CC_GCC_4_4

config CC_V_4_3_6
    bool
    prompt "4.3.6"
    select CC_GCC_4_3

config CC_V_4_3_5
    bool
    prompt "4.3.5"
    select CC_GCC_4_3

config CC_V_4_3_4
    bool
    prompt "4.3.4"
    select CC_GCC_4_3

config CC_V_4_3_3
    bool
    prompt "4.3.3"
    select CC_GCC_4_3

config CC_V_4_3_2
    bool
    prompt "4.3.2"
    select CC_GCC_4_3

config CC_V_4_3_1
    bool
    prompt "4.3.1"
    select CC_GCC_4_3

config CC_V_4_2_4
    bool
    prompt "4.2.4"
    select CC_GCC_4_2

# We need that one, it's the only version with avr32 support
# because we have a patch for it
config CC_V_4_2_2
    bool
    prompt "4.2.2"
    select CC_GCC_4_2

config CC_V_4_1_2
    bool
    prompt "4.1.2 (OBSOLETE)"
    depends on OBSOLETE

config CC_V_4_0_4
    bool
    prompt "4.0.4 (OBSOLETE)"
    depends on OBSOLETE

config CC_V_3_4_6
    bool
    prompt "3.4.6 (OBSOLETE)"
    depends on OBSOLETE

config CC_CUSTOM
    bool
    prompt "Custom gcc"
    depends on EXPERIMENTAL
    select CC_GCC_latest

endchoice

if CC_CUSTOM

config CC_CUSTOM_LOCATION
    string
    prompt "Full path to custom gcc source"
    default ""
    help
      Enter the path to the directory (or tarball) of your source for gcc,
      or leave blank to use default CT_CUSTOM_LOCATION_ROOT_DIR/gcc

endif #CC_CUSTOM

config CC_GCC_4_2
    bool
    select CC_GCC_4_2_or_later

config CC_GCC_4_2_or_later
    bool

config CC_GCC_4_3
    bool
    select CC_GCC_4_3_or_later
    select CC_GCC_USE_GMP_MPFR
    select CC_GCC_HAS_PKGVERSION_BUGURL

config CC_GCC_4_3_or_later
    bool
    select CC_GCC_4_2_or_later

config CC_GCC_4_4
    bool
    select CC_GCC_4_4_or_later
    select CC_GCC_USE_GMP_MPFR
    select CC_GCC_HAS_GRAPHITE
    select CC_GCC_HAS_PKGVERSION_BUGURL

config CC_GCC_4_4_or_later
    bool
    select CC_GCC_4_3_or_later

config CC_GCC_4_5
    bool
    select CC_GCC_4_5_or_later
    select CC_GCC_USE_GMP_MPFR
    select CC_GCC_USE_MPC
    select CC_GCC_HAS_GRAPHITE
    select CC_GCC_HAS_LTO
    select CC_GCC_HAS_PKGVERSION_BUGURL
    select CC_GCC_HAS_BUILD_ID

config CC_GCC_4_5_or_later
    bool
    select CC_GCC_4_4_or_later

config CC_GCC_4_6
    bool
    select CC_GCC_4_6_or_later
    select CC_GCC_USE_GMP_MPFR
    select CC_GCC_USE_MPC
    select CC_GCC_HAS_GRAPHITE
    select CC_GCC_HAS_LTO
    select CC_GCC_HAS_PKGVERSION_BUGURL
    select CC_GCC_HAS_BUILD_ID
    select CC_GCC_HAS_LIBQUADMATH

config CC_GCC_4_6_or_later
    bool
    select CC_GCC_4_5_or_later

config CC_GCC_4_7
    bool
    select CC_GCC_4_7_or_later
    select CC_GCC_USE_GMP_MPFR
    select CC_GCC_USE_MPC
    select CC_GCC_HAS_GRAPHITE
    select CC_GCC_HAS_LTO
    select CC_GCC_HAS_PKGVERSION_BUGURL
    select CC_GCC_HAS_BUILD_ID
    select CC_GCC_HAS_LNK_HASH_STYLE
    select CC_GCC_HAS_LIBQUADMATH

config CC_GCC_4_7_or_later
    bool
    select CC_GCC_4_6_or_later

config CC_GCC_4_8
    bool
    select CC_GCC_4_8_or_later
    select CC_GCC_USE_GMP_MPFR
    select CC_GCC_USE_MPC
    select CC_GCC_HAS_GRAPHITE
    select CC_GCC_HAS_LTO
    select CC_GCC_HAS_PKGVERSION_BUGURL
    select CC_GCC_HAS_BUILD_ID
    select CC_GCC_HAS_LNK_HASH_STYLE
    select CC_GCC_HAS_LIBQUADMATH

config CC_GCC_4_8_or_later
    bool
    select CC_GCC_4_7_or_later

config CC_GCC_latest
    bool
    select CC_GCC_4_8_or_later
    select CC_GCC_USE_GMP_MPFR
    select CC_GCC_USE_MPC
    select CC_GCC_HAS_GRAPHITE
    select CC_GCC_HAS_LTO
    select CC_GCC_HAS_PKGVERSION_BUGURL
    select CC_GCC_HAS_BUILD_ID
    select CC_GCC_HAS_LNK_HASH_STYLE
    select CC_GCC_HAS_LIBQUADMATH

config CC_GCC_HAS_GRAPHITE
    bool

# For graphite: gcc 4.4..4.7 need ppl, while 4.8.. need isl
# Prompt in config/cc/gcc.in.2
config CC_GCC_USE_GRAPHITE
    bool
    default y
    depends on CC_GCC_HAS_GRAPHITE
    select CLOOG_NEEDED
    select PPL_NEEDED if !CC_GCC_4_8_or_later
    select ISL_NEEDED if CC_GCC_4_8_or_later
    help
      Enable the GRAPHITE loop optimsations.
      
      On some systems (eg. Cygwin), PPL and/or CLooG (required to enable
      GRAPHITE) may not build properly (yet), so you'll have to say 'N'
      here (or help debug the issues)

# The way LTO works is a bit twisted.
# See: http://gcc.gnu.org/wiki/LinkTimeOptimization#Requirements
# Basically:
#   - if binutils has plugins: LTO is handled by ld/gold by loading
#     the plugin when linking
#   - if binutils does not have plugins: LTO is handled by collect2
# In any case, LTO support does not depend on plugins, but takes
# advantage of it
config CC_GCC_HAS_LTO
    bool

# Prompt in config/cc/gcc.in.2
config CC_GCC_USE_LTO
    bool
    default y
    depends on CC_GCC_HAS_LTO
    select CC_GCC_USE_LIBELF if CC_GCC_4_5
    help
      Enable the Link Time Optimisations.

config CC_GCC_HAS_PKGVERSION_BUGURL
    bool

config CC_GCC_HAS_BUILD_ID
    bool

config CC_GCC_HAS_LNK_HASH_STYLE
    bool

# Only enable gcc's support for plugins if binutils has it as well
# They are usefull only when doing LTO, but it does no harm enabling
# them even without LTO.
config CC_GCC_ENABLE_PLUGINS
    bool
    depends on BINUTILS_PLUGINS
    depends on ! STATIC_TOOLCHAIN
    default y

# If binutils installs gold, enable support for gold in gcc
config CC_GCC_GOLD
    bool
    depends on BINUTILS_GOLD_INSTALLED
    default y

config CC_GCC_USE_GMP_MPFR
    bool
    select GMP_NEEDED
    select MPFR_NEEDED

config CC_GCC_USE_MPC
    bool
    select MPC_NEEDED

config CC_GCC_USE_LIBELF
    bool
    select LIBELF_NEEDED

config CC_GCC_HAS_LIBQUADMATH
    bool

config CC_VERSION
    string
# Don't remove next line
# CT_INSERT_VERSION_STRING_BELOW
    default "linaro-4.8-2013.06-1" if CC_V_linaro_4_8
    default "4.8.1" if CC_V_4_8_1
    default "4.8.0" if CC_V_4_8_0
    default "linaro-4.7-2013.06-1" if CC_V_linaro_4_7
    default "4.7.3" if CC_V_4_7_3
    default "4.7.2" if CC_V_4_7_2
    default "4.7.1" if CC_V_4_7_1
    default "4.7.0" if CC_V_4_7_0
    default "linaro-4.6-2013.05" if CC_V_linaro_4_6
    default "4.6.4" if CC_V_4_6_4
    default "4.6.3" if CC_V_4_6_3
    default "4.6.2" if CC_V_4_6_2
    default "4.6.1" if CC_V_4_6_1
    default "4.6.0" if CC_V_4_6_0
    default "linaro-4.5-2012.03" if CC_V_linaro_4_5
    default "4.5.3" if CC_V_4_5_3
    default "4.5.2" if CC_V_4_5_2
    default "4.5.1" if CC_V_4_5_1
    default "4.5.0" if CC_V_4_5_0
    default "linaro-4.4-2011.02-0" if CC_V_linaro_4_4
    default "4.4.7" if CC_V_4_4_7
    default "4.4.6" if CC_V_4_4_6
    default "4.4.5" if CC_V_4_4_5
    default "4.4.4" if CC_V_4_4_4
    default "4.4.3" if CC_V_4_4_3
    default "4.4.2" if CC_V_4_4_2
    default "4.4.1" if CC_V_4_4_1
    default "4.4.0" if CC_V_4_4_0
    default "4.3.6" if CC_V_4_3_6
    default "4.3.5" if CC_V_4_3_5
    default "4.3.4" if CC_V_4_3_4
    default "4.3.3" if CC_V_4_3_3
    default "4.3.2" if CC_V_4_3_2
    default "4.3.1" if CC_V_4_3_1
    default "4.3.0" if CC_V_4_3_0
    default "4.2.4" if CC_V_4_2_4
    default "4.2.2" if CC_V_4_2_2
    default "4.1.2" if CC_V_4_1_2
    default "4.0.4" if CC_V_4_0_4
    default "3.4.6" if CC_V_3_4_6
    default "custom" if CC_CUSTOM

config CC_LANG_JAVA_USE_ECJ
    bool
    default y
    depends on CC_LANG_JAVA
    depends on CC_GCC_4_3_or_later

# Fortran always requires GMP+MPFR, whatever the gcc version
config CC_LANG_FORTRAN
    select CC_GCC_USE_GMP_MPFR
