cmake_minimum_required(VERSION 3.20)
project(ksOS_bootloader LANGUAGES C ASM)

set(UEFI_COMPILE_OPTIONS 
    -std=c23
    -target aarch64-unknown-windows-msvc
    -Wall -Wextra
    -fno-builtin
)

set(POSIX_UEFI_SOURCES
    Source/uefi/crt_aarch64.c 
    Source/uefi/dirent.c
    Source/uefi/qsort.c
    Source/uefi/stat.c
    Source/uefi/stdio.c
    Source/uefi/stdlib.c
    Source/uefi/string.c
    Source/uefi/time.c
    Source/uefi/unistd.c
)

add_library(posix_uefi_lib STATIC ${POSIX_UEFI_SOURCES})
target_compile_options(posix_uefi_lib PRIVATE ${UEFI_COMPILE_OPTIONS})
target_include_directories(posix_uefi_lib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/Source/uefi)

add_executable(BOOTAA64 Source/main.c)
target_compile_options(BOOTAA64 PRIVATE ${UEFI_COMPILE_OPTIONS})

target_link_libraries(BOOTAA64 PRIVATE posix_uefi_lib)

target_link_options(BOOTAA64 PRIVATE
    -fuse-ld=lld
    -target aarch64-unknown-windows-msvc
    -nostdlib
    -Wl,-subsystem:efi_application
    -Wl,-entry:uefi_init
)

set_target_properties(BOOTAA64 PROPERTIES 
    SUFFIX ".EFI"
    OUTPUT_NAME "BOOTAA64"
    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/efi_bin"
)