# 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 (EXPERIMENTAL)"
    depends on EXPERIMENTAL
    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_6_2011_10
    bool
    prompt "linaro-4.6-2011.10 (EXPERIMENTAL)"
    depends on CC_GCC_SHOW_LINARO
    select CC_GCC_4_6

config CC_V_4_6_1
    bool
    prompt "4.6.1 (EXPERIMENTAL)"
    depends on EXPERIMENTAL
    select CC_GCC_4_6

config CC_V_4_6_0
    bool
    prompt "4.6.0 (EXPERIMENTAL)"
    depends on EXPERIMENTAL
    select CC_GCC_4_6

config CC_V_linaro_4_5_2011_10
    bool
    prompt "linaro-4.5-2011.10 (EXPERIMENTAL)"
    depends on CC_GCC_SHOW_LINARO
    select CC_GCC_4_5

config CC_V_4_5_3
    bool
    prompt "4.5.3 (EXPERIMENTAL)"
    depends on EXPERIMENTAL
    select CC_GCC_4_5

config CC_V_4_5_2
    bool
    prompt "4.5.2 (EXPERIMENTAL)"
    depends on EXPERIMENTAL
    select CC_GCC_4_5

config CC_V_4_5_1
    bool
    prompt "4.5.1 (EXPERIMENTAL)"
    depends on EXPERIMENTAL
    select CC_GCC_4_5

config CC_V_4_5_0
    bool
    prompt "4.5.0 (EXPERIMENTAL)"
    depends on EXPERIMENTAL
    select CC_GCC_4_5


config CC_V_linaro_4_4_2011_02_0
    bool
    prompt "linaro-4.4-2011.02-0 (EXPERIMENTAL)"
    depends on CC_GCC_SHOW_LINARO
    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

config CC_V_4_2_3
    bool
    prompt "4.2.3 (OBSOLETE)"
    select CC_GCC_4_2
    depends on OBSOLETE

config CC_V_4_2_2
    bool
    prompt "4.2.2"
    select CC_GCC_4_2

config CC_V_4_2_1
    bool
    prompt "4.2.1 (OBSOLETE)"
    select CC_GCC_4_2
    depends on OBSOLETE

config CC_V_4_2_0
    bool
    prompt "4.2.0 (OBSOLETE)"
    select CC_GCC_4_2
    depends on OBSOLETE

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

endchoice

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

config CC_GCC_4_6_or_later
    bool
    select CC_GCC_4_5_or_later

config CC_GCC_HAS_GRAPHITE
    bool

# 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

config CC_GCC_HAS_PKGVERSION_BUGURL
    bool

config CC_GCC_HAS_BUILD_ID
    bool

# For the upcoming 4.7 ?
# None have linker-hash-style support for now...
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_PPL_CLOOG
    bool
    select PPL_NEEDED
    select CLOOG_NEEDED

config CC_GCC_USE_MPC
    bool
    select MPC_NEEDED

config CC_GCC_USE_LIBELF
    bool
    select LIBELF_NEEDED

config CC_VERSION
    string
# Don't remove next line
# CT_INSERT_VERSION_STRING_BELOW
    default "linaro-4.6-2011.10" if CC_V_linaro_4_6_2011_10
    default "4.6.1" if CC_V_4_6_1
    default "4.6.0" if CC_V_4_6_0
    default "linaro-4.5-2011.10" if CC_V_linaro_4_5_2011_10
    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_2011_02_0
    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.3" if CC_V_4_2_3
    default "4.2.2" if CC_V_4_2_2
    default "4.2.1" if CC_V_4_2_1
    default "4.2.0" if CC_V_4_2_0
    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

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
