#
# Copyright 2017, Data61
# Commonwealth Scientific and Industrial Research Organisation (CSIRO)
# ABN 41 687 119 230.
#
# 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(DATA61_BSD)
#

cmake_minimum_required(VERSION 3.7.2)

project(libsel4vka C)

set(configure_string "")

config_option(LibVKAAllowMemoryLeaks LIB_VKA_ALLOW_MEMORY_LEAKS "Leak memory on free \
    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." DEFAULT OFF)

config_string(
    LibVKADebugLiveSlotsSZ
    LIB_SEL4_VKA_DEBUG_LIVE_SLOTS_SZ
    "(debug allocator) live slot buffer size \
    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."
    DEFAULT
    0
    UNQUOTE
)

config_string(
    LibVKADebugLiveObjsSZ
    LIB_SEL4_VKA_DEBUG_LIVE_OBJS_SZ
    "(debug allocator) live object buffer size \
    As for the above option, but sets the maximum number of objects that \
    can be tracked at any one time."
    DEFAULT
    0
    UNQUOTE
)
mark_as_advanced(LibVKAAllowMemoryLeaks LibVKADebugLiveSlotsSZ LibVKADebugLiveObjsSZ)
add_config_library(sel4vka "${configure_string}")

file(GLOB deps src/*.c)

list(SORT deps)

add_library(sel4vka STATIC EXCLUDE_FROM_ALL ${deps})
target_include_directories(
    sel4vka
    PUBLIC include "sel4_arch_include/${KernelSel4Arch}" "arch_include/${KernelArch}"
)
target_link_libraries(
    sel4vka
    PUBLIC
        muslc
        sel4
        utils
        sel4vka_Config
        sel4_autoconf
)
