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

set(configure_string "")

config_option(
    LibSel4PlatSupportUseDebugPutChar
    LIB_SEL4_PLAT_SUPPORT_USE_SEL4_DEBUG_PUTCHAR
    "Redirect putchar() to seL4_DebugPutchar()"
    DEFAULT
    ON
    DEPENDS
    "KernelPrinting"
    DEFAULT_DISABLED
    OFF
)

config_option(
    LibSel4PlatSupportStart
    LIB_SEL4_PLAT_SUPPORT_START
    "Supply _start entry point. Emit _start with a default definition that sets up a \
    stack and does what's required to enter main()."
    DEFAULT
    OFF
)

config_option(
    LibSel4SupportSel4Start
    LIB_SEL4_PLAT_SUPPORT_SEL4_START
    "Supply _sel4_start entry point. Emit a _sel4_start that sets up a stack and does \
    what's required to enter a regular _start routine"
    DEFAULT
    ON
)
mark_as_advanced(LibSel4PlatSupportUseDebugPutChar LibSel4PlatSupportStart LibSel4SupportSel4Start)
add_config_library(sel4platsupport "${configure_string}")

if(KernelArchRiscV)
    set(kernel_arch arm)
else()
    set(kernel_arch ${KernelArch})
endif()

file(
    GLOB
        deps
        src/*.c
        src/cspace/*.c
        src/arch/${kernel_arch}/*.c
        src/plat/${KernelPlatform}/*.c
        src/mach/${KernelArmMach}/*.c
        src/sel4_arch/${KernelSel4Arch}/*.S
        src/arch/${kernel_arch}/*.S
)

list(SORT deps)

add_library(sel4platsupport STATIC EXCLUDE_FROM_ALL ${deps})
target_include_directories(
    sel4platsupport
    PUBLIC include "arch_include/${kernel_arch}" plat_include/${KernelPlatform}
)
if(NOT "${KernelArmMach}" STREQUAL "")
    target_include_directories(sel4platsupport PUBLIC include "mach_include/${KernelArmMach}")
endif()
target_link_libraries(
    sel4platsupport
    PUBLIC
        muslc
        sel4
        sel4runtime
        sel4simple
        utils
        sel4vspace
        platsupport
        sel4simple-default
    PRIVATE sel4platsupport_Config sel4muslcsys_Config sel4_autoconf
)
