#
# 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(libsel4utils C)

set(configure_string "")

config_string(
    LibSel4UtilsStackSize
    SEL4UTILS_STACK_SIZE
    "Size of stacks in bytes to allocate if using vspace interface in this library"
    DEFAULT
    65536
    UNQUOTE
)
config_string(
    LibSel4UtilsCSpaceSizeBits
    SEL4UTILS_CSPACE_SIZE_BITS
    "Size of default cspace to spawn processes with"
    DEFAULT
    12
    UNQUOTE
)
config_option(LibSel4UtilsProfile SEL4UTILS_PROFILE "Profiling tools \
    Enables the functionality of a set of profiling tools. When disabled these profiling tools \
    will compile down to nothing." DEFAULT OFF)
mark_as_advanced(LibSel4UtilsStackSize LibSel4UtilsCSpaceSizeBits LibSel4UtilsProfile)
add_config_library(sel4utils "${configure_string}")

file(
    GLOB
        deps
        src/*.c
        src/vspace/*.c
        src/irq_server/*.c
        src/serial_server/*.c
        src/time_server/*.c
        src/sel4_arch/${KernelSel4Arch}/*.c
        src/arch/${KernelArch}/*.c
)

list(SORT deps)

add_library(sel4utils STATIC EXCLUDE_FROM_ALL ${deps})
target_include_directories(
    sel4utils
    PUBLIC include "sel4_arch_include/${KernelSel4Arch}" "arch_include/${KernelArch}"
)
target_link_libraries(
    sel4utils
    muslc
    sel4
    sel4runtime
    sel4vspace
    sel4simple
    sel4platsupport
    elf
    cpio
    sel4utils_Config
    sel4_autoconf
)
