# newlib options

## depends on BARE_METAL
##
## select LIBC_SUPPORT_THREADS_NONE
##
## help Newlib is a C library intended for use on embedded systems. It is a
## help conglomeration of several library parts, all under free software
## help licenses that make them easily usable on embedded products. Newlib
## help is only available in source form. It can be compiled for a wide
## help array of processors, and will usually work on any architecture with
## help the addition of a few low-level routines.

choice
    bool
    prompt "newlib version"
# Don't remove next line
# CT_INSERT_VERSION_BELOW

config LIBC_NEWLIB_V_1_19_0
    bool
    prompt "1.19.0 (EXPERIMENTAL)"
    depends on EXPERIMENTAL

config LIBC_NEWLIB_V_1_18_0
    bool
    prompt "1.18.0 (EXPERIMENTAL)"
    depends on EXPERIMENTAL

config LIBC_NEWLIB_V_1_17_0
    bool
    prompt "1.17.0"

config LIBC_NEWLIB_CVS
    bool
    prompt "Use CVS snapshot"
    depends on CONFIGURE_has_cvs
    help
      The newlib "team" rolls new releases about once a year (december).
      This is quite a long time between releases, in case code was fixed.
      
      Saying 'Y' here will allow you to use the bleeding-edge code from
      the CVS repository. This may or may not fix your issues, may or may
      not build, may or may not crash your machine, may or may not withdraw
      money from your bank account, may or may not date your girlfriend,
      may or may not resurect Elvis... :-)
      
      In a word: use the CVS snapshot at your own risk! 

endchoice

config LIBC_VERSION
    string
    prompt "use CVS tag" if LIBC_NEWLIB_CVS
# Don't remove next line
# CT_INSERT_VERSION_STRING_BELOW
    default "1.19.0" if LIBC_NEWLIB_V_1_19_0
    default "1.18.0" if LIBC_NEWLIB_V_1_18_0
    default "1.17.0" if LIBC_NEWLIB_V_1_17_0
    help
      Enter the tag you want to use.
      Leave empty to use the 'head' of the repository.

comment "Architecture specific options"

config ATMEL_AVR32_HEADERS
    bool
    prompt "Install Atmel AVR32 headers"
    depends on ARCH_avr32
    default y
    help
      Install Atmel AVR32 headers for native AVR32 development. Most
      AVR32 MCU devices are supported.
      
      If you do native AVR32 development you want to say 'Y' here.
