# The C++ standard library for OS operations (userspace only), so most things that have to do with calling the kernel, or functions that the kernel has no use for.

file(GLOB HEADERS include/os/*.h)

set(SOURCES
    ${HEADERS}
    src/ArgumentParser.cpp
    src/EventLoop.cpp
    src/File.cpp
    src/FileSystem.cpp
    src/Process.cpp
    src/Directory.cpp
    src/Main.cpp
    src/Path.cpp
    src/Mode.cpp
    src/Prompt.cpp
    src/Security.cpp
    src/LocalServer.cpp
    src/LocalClient.cpp
    src/IPC.cpp
    src/SharedMemory.cpp
    src/Timer.cpp
)

add_library(os ${SOURCES})
target_compile_options(os PRIVATE ${COMMON_FLAGS})
target_include_directories(os PUBLIC include/)
target_include_directories(os PUBLIC ${LUNA_BASE}/usr/include)

if("${LUNA_ARCH}" MATCHES "x86_64")
target_compile_definitions(os PUBLIC ARCH_X86_64)
endif()

add_custom_command(
    TARGET os
    COMMAND "${CMAKE_COMMAND}" -E copy ${CMAKE_CURRENT_BINARY_DIR}/libos.a ${LUNA_BASE}/usr/lib/libos.a
)