project(termOS_Bootloader LANGUAGES C ASM)

if(APPLE)
    set(CMAKE_C_LINK_FLAGS "")
endif()

set(UEFI_COMPILE_OPTIONS 
    -std=c23
    -target x86_64-unknown-windows-msvc
    -Wall -Wextra
    -fno-builtin
    $<$<CONFIG:Release>:-Werror>
)

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

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

add_executable(BOOTX64 src/main.c)
target_compile_options(BOOTX64 PRIVATE ${UEFI_COMPILE_OPTIONS})
target_sources(BOOTX64 PRIVATE $<TARGET_OBJECTS:posix_uefi_lib>)

target_include_directories(BOOTX64 PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/uefi)

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

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