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

cmake_minimum_required(VERSION 3.7.2)

set(configure_string "")

# TODO(sleffler): not honored by cantrip-os-rootserver
config_choice(
    CapDLLoaderCallingConvention
    CAPDL_LOADER_CALLING_CONVENTION
    "Select the calling convention that loaded processes are expecting. If
    you select the register convention you will be limited to passing four
    arguments to processes and their stack frames will not need to be
    mapped in during thread configuration."
    "standard;CapDLLoaderCallingConventionStandard;CAPDL_LOADER_CC_STANDARD"
    "registers;CapDLLoaderCallingConventionRegisters;CAPDL_LOADER_CC_REGISTERS"
)

config_string(
    CapDLLoaderMaxObjects
    CAPDL_LOADER_MAX_OBJECTS
    "Maximum number of objects that can be handled by the loader. Note that
    there is an upper limit on this based on the size of the initialiser's
    CNode."
    DEFAULT
    4096
    UNQUOTE
)

config_string(
    CapDLLoaderFillsPerFrame
    CAPDL_LOADER_FILLS_PER_FRAME
    "Maximum number of fill commands per frame."
    DEFAULT
    1
    UNQUOTE
)

config_option(
    CapDLLoaderWriteablePages
    CAPDL_LOADER_WRITEABLE_PAGES
    "CapDL Loader will map all pages as writeable if the cap has grant permissions.
    This is currently used to enable instruction and data rewriting by an external debugger such as GDB."
    DEFAULT
    OFF
)

config_option(
    CapDLLoaderStaticAlloc
    CAPDL_LOADER_STATIC_ALLOC
    "Build the loader to expect a statically allocated capDL spec."
    DEFAULT
    OFF
)

add_config_library(capdl_loader_app "${configure_string}")

# Build an archive of the RUST bits
# TODO(mattharvey): rust.cmake maybe belongs here with processmanager
#    doing the reach-over
include(${CMAKE_CURRENT_SOURCE_DIR}/../../cantrip/apps/system/rust.cmake)

RustAddLibrary(
    cantrip_rootserver
    SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}
    LIB_FILENAME libcantrip_os_rootserver.a
)

# The capdl-loader-app requires outside configuration in order to build. To achieve this
# we just declare a target here with custom properties for describing the source and headers.
# This is done here as at this point we know the source directory and can construct these things.
# Later on the user will construct a rule for actually generating the capdl executable from a
# different project directory
add_custom_target(capdl_app_properties)

# Reach over to capdl-loader-app to get capd.lh which is required to build
# the capdl_spec.c code generated by the CAmkES tool.
set_property(
    TARGET capdl_app_properties
    PROPERTY INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/../capdl-loader-app/include"
)

RequireFile(CAPDL_LOADER_BUILD_HELPERS helpers.cmake)
