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 $<$: -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 ) set_target_properties(Kernel PROPERTIES OUTPUT_NAME "Kernel.elf" RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" ) add_custom_command(TARGET Kernel POST_BUILD COMMAND ${LLVM_OBJCOPY} -O binary ${CMAKE_BINARY_DIR}/Kernel.elf ${CMAKE_BINARY_DIR}/Kernel.bin COMMENT "Generating ksOSKernel.bin from Kernel.elf" )