# glibc options

## depends on ! WINDOWS && ! BARE_METAL && ARCH_USE_MMU
##
## select LIBC_SUPPORT_THREADS_NATIVE
## select CC_CORE_PASSES_NEEDED
##
## help The de-facto standard for Linux distributions.
## help Feature-rich, but large...  Most usefull for desktop-like systems.

config THREADS
    default "nptl"

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

config LIBC_GLIBC_V_2_19
    bool
    prompt "2.19"

config LIBC_GLIBC_V_2_18
    bool
    prompt "2.18"

config LIBC_GLIBC_V_2_17
    bool
    prompt "2.17"

config LIBC_GLIBC_V_2_16_0
    bool
    prompt "2.16.0"
    select LIBC_GLIBC_PORTS_EXTERNAL

config LIBC_GLIBC_V_2_15
    bool
    prompt "2.15"
    select LIBC_GLIBC_PORTS_EXTERNAL

config LIBC_GLIBC_V_2_14_1
    bool
    prompt "2.14.1"
    select LIBC_GLIBC_PORTS_EXTERNAL

config LIBC_GLIBC_V_2_14
    bool
    prompt "2.14"
    select LIBC_GLIBC_PORTS_EXTERNAL

config LIBC_GLIBC_V_2_13
    bool
    prompt "2.13"
    select LIBC_GLIBC_PORTS_EXTERNAL

config LIBC_GLIBC_V_2_12_2
    bool
    prompt "2.12.2"
    select LIBC_GLIBC_PORTS_EXTERNAL

config LIBC_GLIBC_V_2_12_1
    bool
    prompt "2.12.1"
    select LIBC_GLIBC_PORTS_EXTERNAL

config LIBC_GLIBC_V_2_11_1
    bool
    prompt "2.11.1"
    select LIBC_GLIBC_PORTS_EXTERNAL

config LIBC_GLIBC_V_2_11
    bool
    prompt "2.11"
    select LIBC_GLIBC_PORTS_EXTERNAL

config LIBC_GLIBC_V_2_10_1
    bool
    prompt "2.10.1"
    select LIBC_GLIBC_PORTS_EXTERNAL
    select LIBC_GLIBC_USE_PORTS

config LIBC_GLIBC_V_2_9
    bool
    prompt "2.9"
    select LIBC_GLIBC_PORTS_EXTERNAL

config LIBC_GLIBC_V_2_8
    bool
    prompt "2.8"
    select LIBC_GLIBC_PORTS_EXTERNAL

endchoice

config LIBC_VERSION
    string
# Don't remove next line
# CT_INSERT_VERSION_STRING_BELOW
    default "2.19" if LIBC_GLIBC_V_2_19
    default "2.18" if LIBC_GLIBC_V_2_18
    default "2.17" if LIBC_GLIBC_V_2_17
    default "2.16.0" if LIBC_GLIBC_V_2_16_0
    default "2.15" if LIBC_GLIBC_V_2_15
    default "2.14.1" if LIBC_GLIBC_V_2_14_1
    default "2.14" if LIBC_GLIBC_V_2_14
    default "2.13" if LIBC_GLIBC_V_2_13
    default "2.12.2" if LIBC_GLIBC_V_2_12_2
    default "2.12.1" if LIBC_GLIBC_V_2_12_1
    default "2.11.1" if LIBC_GLIBC_V_2_11_1
    default "2.11" if LIBC_GLIBC_V_2_11
    default "2.10.1" if LIBC_GLIBC_V_2_10_1
    default "2.9" if LIBC_GLIBC_V_2_9
    default "2.8" if LIBC_GLIBC_V_2_8
