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>" ) #[============================================================================[ # Global Build System Configuration #]============================================================================] add_executable("kernel") add_subdirectory("libs") add_subdirectory("kern") add_subdirectory("arch") target_link_libraries("kernel" PRIVATE "arch::${CMAKE_SYSTEM_PROCESSOR}" "os::kern" ) target_link_options("kernel" PRIVATE "-no-pie" "-nostdlib" ) target_disassemble("kernel") target_extract_debug_symbols("kernel") target_strip("kernel") target_generate_bootable_iso("kernel") #[============================================================================[ # Documentation #]============================================================================] # find_package("Doxygen") # set(DOXYGEN_GENERATE_HTML YES) # set(DOXYGEN_GENERATE_XML YES) # set(DOXYGEN_EXCLUDE_PATTERNS "*.cpp") # set(DOXYGEN_OUTPUT_DIRECTORY "doxygen") # set(DOXYGEN_QUIET YES) # file(GLOB_RECURSE DOXYGEN_SOURCES CONFIGURE_DEPENDS "*.hpp") # message(STATUS "${SPHINX_SOURCES}") # doxygen_add_docs("docs_xml" # ${DOXYGEN_SOURCES} # ALL # USE_STAMP_FILE # COMMENT "Generating developer documentation sources" # ) # set_target_properties("docs_xml" PROPERTIES # ADDITIONAL_CLEAN_FILES # "${PROJECT_BINARY_DIR}/doxygen" # ) # file(GLOB_RECURSE SPHINX_SOURCES CONFIGURE_DEPENDS "../docs/**.rst") # add_custom_target("docs" ALL # COMMAND "${SPHINX_BUILD_EXE}" # "../docs" # "docs" # "-q" # DEPENDS "docs_xml" # SOURCES ${SPHINX_SOURCES} # COMMENT "Generating developer documentation html" # ) # set_target_properties("docs" PROPERTIES # ADDITIONAL_CLEAN_FILES # "${PROJECT_BINARY_DIR}/docs" # )