#
# Copyright 2014, NICTA
#
# This software may be distributed and modified according to the terms of
# the BSD 2-Clause license. Note that NO WARRANTY is provided.
# See "LICENSE_BSD2.txt" for details.
#
# @TAG(NICTA_BSD)
#

menuconfig LIB_SEL4_VKA
    bool "libsel4vka"
    depends on HAVE_LIB_SEL4 && HAVE_LIBC && HAVE_LIB_UTILS
    select HAVE_SEL4_LIBS
    select HAVE_LIB_SEL4_VKA
    default y
    help
        Virtual kernel allocator interface, for allocating memory, untyped memory and cslots.

config LIB_VKA_ALLOW_MEMORY_LEAKS
    bool "Leak memory on free"
    depends on LIB_SEL4_VKA
    default n
    help
        Changes the default free functions to silently leak memory
         instead of assert failing.
         This is useful in scenarios where code is correctly freeing
         resources, but you want to use an allocator that does not
         implement free.

config LIB_SEL4_VKA_DEBUG_LIVE_SLOTS_SZ
    int "(debug allocator) live slot buffer size"
    depends on LIB_SEL4_VKA
    default 0
    help
        VKA contains an allocator, debugvka, that wraps a target VKA allocator
        for the purposes of debugging. It tracks slot and object allocations
        and catches both caller problems like double free, and allocator
        problems like handing out the same resource twice. This configuration
        option sets the maximum number of CSlots that can be tracked at any one
        time.

config LIB_SEL4_VKA_DEBUG_LIVE_OBJS_SZ
    int "(debug allocator) live object buffer size"
    depends on LIB_SEL4_VKA
    default 0
    help
        As for the above option, but sets the maximum number of objects that
        can be tracked at any one time.

config HAVE_LIB_SEL4_VKA
    bool
