cmake_minimum_required(VERSION "3.27") project("kernel" DESCRIPTION "An educational OS kernel" HOMEPAGE_URL "https://gitlab.ost.ch/teachos/kernel" VERSION "0.0.1" LANGUAGES ASM C CXX ) set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/Modules") include("ElfTransformations") include("GenerateBootableIso") #[============================================================================[ # Global Build System Configuration #]============================================================================] set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin") set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib") set(CMAKE_INTERPROCEDURAL_OPTIMIZATION YES) set(CMAKE_CXX_STANDARD "20") set(CMAKE_CXX_STANDARD_REQUIRED YES) set(CMAKE_CXX_EXTENSIONS NO) add_compile_options( "$<$:-Wall>" "$<$:-Wextra>" "$<$:-Werror>" "$<$:-pedantic-errors>" ) #[============================================================================[ # Kernel Executable #]============================================================================] add_subdirectory("arch/${CMAKE_SYSTEM_PROCESSOR}") add_subdirectory("kapi") add_subdirectory("libs") add_executable("kernel" "src/abort.cpp" "src/kstd.cpp" "src/main.cpp" ) target_link_libraries("kernel" PRIVATE "os::arch" "os::kapi" ) target_link_options("kernel" PRIVATE "-T${KERNEL_LINKER_SCRIPT}" "-no-pie" "-nostdlib" ) set_property(TARGET "kernel" APPEND PROPERTY LINK_DEPENDS "${KERNEL_LINKER_SCRIPT}" ) target_disassemble("kernel") target_extract_debug_symbols("kernel") target_strip("kernel") target_generate_bootable_iso("kernel")