# 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_4_9_1
    bool
    prompt "4.9.1"
    select CC_GCC_4_9

config CC_V_4_9_0
    bool
    prompt "4.9.0"
    select CC_GCC_4_9

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

config CC_V_4_8_3
    bool
    prompt "4.8.3"
    select CC_GCC_4_8

config CC_V_4_8_2
    bool
    prompt "4.8.2"
    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-2014.01"
    depends on CC_GCC_SHOW_LINARO
    select CC_GCC_4_7

config CC_V_4_7_4
    bool
    prompt "4.7.4"
    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
    select CC_GCC_HAS_LIBSANITIZER
    select CC_SUPPORT_GOLANG

config CC_GCC_4_8_or_later
    bool
    select CC_GCC_4_7_or_later

config CC_GCC_4_9
    bool
    select CC_GCC_4_9_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
    select CC_GCC_HAS_LIBSANITIZER
    select CC_SUPPORT_GOLANG

config CC_GCC_4_9_or_later
    bool
    select CC_GCC_4_8_or_later

config CC_GCC_latest
    bool
    select CC_GCC_4_9_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
    select CC_GCC_HAS_LIBSANITIZER

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_GCC_HAS_LIBSANITIZER
    bool

config CC_VERSION
    string
# Don't remove next line
# CT_INSERT_VERSION_STRING_BELOW
    default "4.9.1" if CC_V_4_9_1
    default "4.9.0" if CC_V_4_9_0
    default "linaro-4.8-2014.01" if CC_V_linaro_4_8
    default "4.8.3" if CC_V_4_8_3
    default "4.8.2" if CC_V_4_8_2
    default "4.8.1" if CC_V_4_8_1
    default "4.8.0" if CC_V_4_8_0
    default "linaro-4.7-2014.01" if CC_V_linaro_4_7
    default "4.7.4" if CC_V_4_7_4
    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
