cmake_minimum_required(VERSION 3.20)
project(ksOSKernel LANGUAGES ASM C)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

file(GLOB_RECURSE KERNEL_SOURCES CMAKE_CONFIGURE_DEPENDS 
    ${CMAKE_CURRENT_SOURCE_DIR}/Source/KernelMain.c
    ${CMAKE_CURRENT_SOURCE_DIR}/Source/Arch/entry.S
    ${CMAKE_CURRENT_SOURCE_DIR}/Source/Arch/vectors.S
    ${CMAKE_CURRENT_SOURCE_DIR}/Source/**/*.c
)

add_executable(Kernel ${KERNEL_SOURCES})
target_include_directories(Kernel PRIVATE 
    ${CMAKE_CURRENT_SOURCE_DIR}/Include/
    ${CMAKE_CURRENT_SOURCE_DIR}/../Common
)

target_compile_options(Kernel PRIVATE 
    $<$<COMPILE_LANGUAGE:C>:
        -std=c23
        -ffreestanding
        -fno-stack-protector
        -fno-builtin
        -Wall -Wextra
        -g
        -mgeneral-regs-only
    >
)

target_link_options(Kernel PRIVATE 
    -nostdlib
    -static
    -no-pie
    -T "${CMAKE_CURRENT_SOURCE_DIR}/linker.ld"
    -z max-page-size=0x1000
    --image-base=0x40100000
    --no-dynamic-linker
)

set_target_properties(Kernel PROPERTIES
    OUTPUT_NAME "ksOSKernel.elf"
    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
)
