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

set(configure_string "")

config_string(LibSel4MuslcSysMorecoreBytes LIB_SEL4_MUSLC_SYS_MORECORE_BYTES "Malloc limit \
    This value sets the number of bytes reserved for the region malloc \
    allocates from. Note that you won't actually be able to allocate this \
    entire amount because there is some bookkeeping overhead. This area is \
    allocated statically." DEFAULT 1048576 UNQUOTE)

config_option(
    LibSel4MuslcSysDebugHalt
    LIB_SEL4_MUSLC_SYS_DEBUG_HALT
    "Perform seL4_DebugHalt on _exit and _abort \
    Controls whether or not a DebugHalt should be called to implement Exit \
    style syscalls. This is useful if you have a single app and thread, but \
    should be turned off if using multiple threads that may wish to exit \
    independently of the whole system"
    DEFAULT
    ON
)

config_option(
    LibSel4MuslcSysCPIOFS
    LIB_SEL4_MUSLC_SYS_CPIO_FS
    "Implementation of a simple file system usi g CPIO archives \
    If this is enabled open and read syscalls will attempt to use the cpio archive \
    _cpio_archive. This implements a basic read only POSIX interface to that file system"
    DEFAULT
    OFF
)

config_option(
    LibSel4MuslcSysArchPutcharWeak
    LIB_SEL4_MUSLC_SYS_ARCH_PUTCHAR_WEAK
    "Make __arch_putchar a weak symbol \
    This allows you to override __arch_putchar in another library or your \
    application."
    DEFAULT
    OFF
)

config_string(
    LibSel4MuslcSysConstructorPriority
    LIB_SEL4_MUSLC_SYS_CONSTRUCTOR_PRIORITY
    "Set the priority of the muslc initialisation constructors such that
	they occur after external initialisation of the system call
	dependencies."
    DEFAULT
    "MUSLCSYS_WITH_VSYSCALL_PRIORITY + 10"
    UNQUOTE
)
mark_as_advanced(
    LibSel4MuslcSysMorecoreBytes
    LibSel4MuslcSysDebugHalt
    LibSel4MuslcSysCPIOFS
    LibSel4MuslcSysArchPutcharWeak
)
add_config_library(sel4muslcsys "${configure_string}")

file(GLOB deps src/*.c)

list(SORT deps)

# TODO: This use to be calculated by the following line. Need to use a generator expression and generate
# this into a header file at build time
# MUSLC_HIGHEST_SYSCALL := $(shell cat $(STAGE_DIR)/include/bits/syscall.h | sed 's/^.*[^0-9]\([0-9]*\)$$/\1/' | sort -nr | head -1)
set(HighestSyscall 400)

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_XOPEN_SOURCE=700 -DMUSLC_HIGHEST_SYSCALL=${HighestSyscall}")

add_library(sel4muslcsys STATIC EXCLUDE_FROM_ALL ${deps})
# Force the muslcsys_init_muslc constructor to be included in dependants
target_link_options(sel4muslcsys BEFORE INTERFACE "-Wl,-umuslcsys_init_muslc")
target_include_directories(sel4muslcsys PUBLIC include)
target_link_libraries(
    sel4muslcsys
    PUBLIC
        # These quotes are needed to prevent cmake splitting these arguments
        "-Wl,-u -Wl,__vsyscall_ptr"
        muslc
        sel4
        cpio
        utils
        sel4utils
        sel4muslcsys_Config
    PRIVATE sel4_autoconf
)
