cmake_minimum_required(VERSION 3.13) project(magenta C ASM) set(CMAKE_C_STANDARD 17) set(kernel_name "Magenta") set(kernel_exe_name "magenta_kernel") set(generic_src_dirs ds init kernel libc obj sched util vm) set(kernel_sources "") set(kernel_headers "") foreach (dir ${generic_src_dirs}) message(STATUS ${dir}) file(GLOB_RECURSE dir_sources ${dir}/*.c) file(GLOB_RECURSE dir_headers ${dir}/*.h) set(kernel_sources ${kernel_sources} ${dir_sources}) set(kernel_headers ${kernel_headers} ${dir_headers}) endforeach (dir) set(kernel_arch x86_64) file(GLOB_RECURSE arch_sources_c arch/${kernel_arch}/*.c) file(GLOB_RECURSE arch_sources_asm arch/${kernel_arch}/*.S) file(GLOB_RECURSE arch_headers arch/${kernel_arch}/*.h) set_property(SOURCE ${arch_sources_asm} PROPERTY LANGUAGE C) add_executable(${kernel_exe_name} ${kernel_sources} ${kernel_headers} ${arch_sources_c} ${arch_sources_asm} ${arch_headers}) target_include_directories(${kernel_exe_name} PRIVATE include libc/include arch/${kernel_arch}/include) target_compile_options(${kernel_exe_name} PRIVATE -nostdlib -ffreestanding -Wall -Werror -pedantic -Wno-language-extension-token -Wno-unused-function -Wno-gnu-statement-expression -O2 -g -fPIC -Iinclude -Iarch/${kernel_arch}/include -Ilibc/include) target_link_libraries(${kernel_exe_name} -nostdlib -ffreestanding -lgcc) target_compile_definitions(${kernel_exe_name} PRIVATE BUILD_ID="0") include(arch/${kernel_arch}/config.cmake) include(arch/${kernel_arch}/targets.cmake)