# Function from osdev wiki: https://wiki.osdev.org/CMake_Build_System
FUNCTION(LOAD_PROFILE ISA PLATFORM)
    # Platform specific sources
    FILE(GLOB ISA_SRCS "${ISA}/*.c" "${ISA}/*.h" "${ISA}/*.s")
    FILE(GLOB PLATFORM_SRCS "${ISA}/${PLATFORM}/*.c" "${ISA}/${PLATFORM}/*.s")

    # Load flags, not sure what these are for yet
    INCLUDE("${ISA}/flags.cmake")
    INCLUDE("${ISA}/${PLATFORM}/flags.cmake")

    # Export the variables
    SET(ISA_SRCS ${ISA_SRCS} PARENT_SCOPE)
    SET(PLATFORM_SRCS ${PLATFORM_SRCS} PARENT_SCOPE)
    SET(PLATFORM_LAYOUT "${CMAKE_SOURCE_DIR}/src/kernel/${ISA}/${PLATFORM}/layout.ld" PARENT_SCOPE)
    SET(ISA_C_FLAGS ${ISA_C_FLAGS} PARENT_SCOPE)
    SET(PLATFORM_C_FLAGS ${PLATFORM_C_FLAGS} PARENT_SCOPE)
    SET(ISA_ASM_FLAGS ${ISA_ASM_FLAGS} PARENT_SCOPE)
    SET(PLATFORM_ASM_FLAGS ${PLATFORM_ASM_FLAGS} PARENT_SCOPE)
    SET(ISA_LINKER_FLAGS ${ISA_LINKER_FLAGS} PARENT_SCOPE)
    SET(PLATFORM_LINKER_FLAGS ${PLATFORM_LINKER_FLAGS} PARENT_SCOPE)
ENDFUNCTION(LOAD_PROFILE)

FILE(GLOB GENERIC_SRCS ./*.c)

# Set the current profile
LOAD_PROFILE("riscv64" "qemu")

ADD_EXECUTABLE(kernel ${PLATFORM_SRCS} ${ISA_SRCS} ${GENERIC_SRCS})

SET(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> -c ${ISA_ASM_FLAGS} ${PLATFORM_ASM_FLAGS} -o <OBJECT> <SOURCE>")
SET(CMAKE_C_FLAGS "${ISA_C_FLAGS} ${PLATFORM_C_FLAGS}")
SET_TARGET_PROPERTIES(kernel PROPERTIES LINK_FLAGS "-T ${PLATFORM_LAYOUT} -N ${ISA_LINKER_FLAGS} ${PLATFORM_LINKER_FLAGS}")

# Set the name of the executable to 'kernel.elf'
SET_TARGET_PROPERTIES(kernel PROPERTIES OUTPUT_NAME kernel.elf)

include(CMakePrintHelpers)
CMAKE_PRINT_VARIABLES(PLATFORM_SRCS)