Files
magenta/CMakeLists.txt
T

88 lines
2.6 KiB
CMake
Raw Normal View History

2026-04-19 19:58:30 +01:00
cmake_minimum_required(VERSION 3.31)
2026-04-30 20:30:36 +01:00
project(magenta C ASM)
if (NOT BUILD_TOOLS_DIR)
message(FATAL_ERROR "No build tools directory specified. Please run build.sh")
endif ()
2024-09-17 17:50:15 +01:00
set(CMAKE_C_STANDARD 17)
set(kernel_arch x86_64)
2026-04-30 20:30:36 +01:00
set(kernel_name "Magenta")
set(kernel_exe_name "magenta_kernel")
2024-09-17 17:50:15 +01:00
2026-02-08 16:17:11 +00:00
set(generic_src_dirs ds init kernel libc sched util vm syscall)
2024-09-17 17:50:15 +01:00
set(kernel_sources "")
set(kernel_headers "")
2026-04-30 20:53:24 +01:00
set(version_args --arch ${CMAKE_SYSTEM_PROCESSOR})
2026-05-28 18:12:13 +01:00
if (CMAKE_BUILD_TYPE)
if (NOT "${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
set(version_args ${version_args} "--release")
endif ()
2026-04-30 20:53:24 +01:00
endif()
execute_process(
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/tools/magenta.buildid
${version_args}
OUTPUT_VARIABLE kernel_version
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_STRIP_TRAILING_WHITESPACE)
message(STATUS "Magenta kernel version: ${kernel_version}")
2024-09-17 17:50:15 +01:00
foreach (dir ${generic_src_dirs})
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)
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)
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
2024-09-17 17:50:15 +01:00
libc/include
2026-04-30 20:30:36 +01:00
libmagenta/include
2024-09-17 17:50:15 +01:00
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
2026-02-03 21:28:15 +00:00
-g -fPIC -Iinclude -Iarch/${kernel_arch}/include -Ilibc/include)
add_custom_command(
TARGET ${kernel_exe_name}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${kernel_exe_name}> $<TARGET_FILE:${kernel_exe_name}>.debug
COMMAND ${CMAKE_STRIP} -g $<TARGET_FILE:${kernel_exe_name}>)
2024-09-17 17:50:15 +01:00
target_link_libraries(${kernel_exe_name} -nostdlib -ffreestanding -lgcc)
2026-06-06 17:25:00 +01:00
target_compile_definitions(${kernel_exe_name} PRIVATE
KERNEL_NAME="${kernel_name}"
KERNEL_VERSION="${kernel_version}"
KERNEL_ARCH="${kernel_arch}")
2024-09-17 17:50:15 +01:00
include(arch/${kernel_arch}/config.cmake)
include(arch/${kernel_arch}/targets.cmake)
2026-06-06 17:25:00 +01:00
add_subdirectory(debug)
target_link_libraries(${kernel_exe_name} magenta_debug)
target_compile_definitions(magenta_debug PRIVATE KERNEL_VERSION="${kernel_version}")
target_include_directories(magenta_debug PRIVATE
include
libc/include
libmagenta/include
arch/${kernel_arch}/include)