# Compiler options

menu "C compiler"

config CC
    string

config CC_VERSION
    string

source "config.gen/cc.in"

config CC_SUPPORT_CXX
    bool

config CC_SUPPORT_FORTRAN
    bool

config CC_SUPPORT_JAVA
    bool

config CC_SUPPORT_ADA
    bool

config CC_SUPPORT_OBJC
    bool

config CC_SUPPORT_OBJCXX
    bool

comment "Additional supported languages:"

config CC_LANG_CXX
    bool
    prompt "C++"
    depends on CC_SUPPORT_CXX
    help
      Enable building a C++ compiler.

      Only select this if you know that your specific version of the
      compiler supports this language.

if ! BARE_METAL

config CC_LANG_FORTRAN
    bool
    prompt "Fortran"
    depends on CC_SUPPORT_FORTRAN
    help
      Enable building a FORTRAN compiler.

      Only select this if you know that your specific version of the
      compiler supports this language.

config CC_LANG_JAVA
    bool
    prompt "Java"
    depends on CC_SUPPORT_JAVA
    help
      Enable building a Java compiler.

      Only select this if you know that your specific version of the
      compiler supports this language.

config CC_LANG_ADA
    bool
    prompt "ADA (EXPERIMENTAL)"
    depends on CC_SUPPORT_ADA
    depends on EXPERIMENTAL
    help
      Enable building an Ada compiler.

      Only select this if you know that your specific version of the
      compiler supports this language.

config CC_LANG_OBJC
    bool
    prompt "Objective-C (EXPERIMENTAL)"
    depends on CC_SUPPORT_OBJC
    depends on EXPERIMENTAL
    help
      Enable building an Objective C compiler.

      Only select this if you know that your specific version of the
      compiler supports this language.

config CC_LANG_OBJCXX
    bool
    prompt "Objective-C++ (EXPERIMENTAL)"
    depends on EXPERIMENTAL
    depends on CC_SUPPORT_OBJCXX
    help
      Enable building an Objective C++ compiler.

      Only select this if you know that your specific version of the
      compiler supports this language.

config CC_LANG_OTHERS
    string
    prompt "Other languages (EXPERIMENTAL)"
    default ""
    depends on EXPERIMENTAL
    help
      Enter here a comma-separated list of languages that you know your compiler
      supports, besides those listed above.

      Eg. gcc-4.1+ has a toy programming language, treelang. As it is not useful
      in real life, it is not available in the selection above.

endif # ! BARE_METAL

source "config.gen/cc.in.2"

endmenu
