#
# Copyright 2017, Data61, CSIRO (ABN 41 687 119 230)
#
# SPDX-License-Identifier: BSD-2-Clause
#

cmake_minimum_required(VERSION 3.7.2)

project(libsel4debug C ASM)

set(configure_string "")

config_string(
    LibSel4DebugAllocBufferEntries
    LIBSEL4DEBUG_ALLOC_BUFFER_ENTRIES
    "Pointer tracking buffer entries \
    Size of buffer to use for tracking memory allocations within \
    instrumentation. This setting has no effect if you are not using the \
    allocation instrumentation. Setting this value to 0 disables pointer \
    tracking."
    DEFAULT
    0
    UNQUOTE
)

config_choice(
    LibSel4DebugFunctionInstrumentation
    LIB_SEL4_DEBUG_FUNCTION_INSTRUMENTAITON
    "Function instrumentation to apply to function calls. This setting will only have \
    an effect when your CFLAGS include -finstrument-functions, in which \
    case __cyg_profile_func_enter will be called on every function entry \
    and __cyg_profile_func_exit will be called on every function exit. The \
    value of this setting determines the implementation of \
    __cyg_profile_func_enter and __cyg_profile_func_exit supplied by this \
    library. Regardless of the option you select, you can always override \
    the implementation by providing your own in your application. \
    none -> \
        No implementation of __cyg_profile_func_enter and \
        __cyg_profile_func_exit are provided. \
    printf -> \
        Print entry and exit of every function call. This option is useful for \
        a very coarse and noisy description of what your code is doing. \
    backtrace -> \
        Track function calls for the purposes of a backtrace. You will need to \
        enable this option if you want to retrieve programmatic backtraces."
    "none;LibSel4DebugFunctionInstrumentationNone;LIBSEL4DEBUG_FUNCTION_INSTRUMENTATION_NONE"
    "printf;LibSel4DebugFunctionInstrumentationPrintf;LIBSEL4DEBUG_FUNCTION_INSTRUMENTATION_TRACE"
    "backtrace;LibSel4DebugFunctionInstrumentationBacktrace;LIBSEL4DEBUG_FUNCTION_INSTRUMENTATION_BACKTRACE"
)
mark_as_advanced(LibSel4DebugAllocBufferEntries LibSel4DebugFunctionInstrumentation)
add_config_library(sel4debug "${configure_string}")

file(
    GLOB
        deps
        src/*.c
        src/sel4_arch/${KernelSel4Arch}/*.c
        src/plat/${KernelPlatform}/*.c
        src/sel4_arch/${KernelSel4Arch}/*.S
)

list(SORT deps)

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