cmake_minimum_required(VERSION "3.27") project("kernel" DESCRIPTION "${TEACHOS_DESCRIPTION}" HOMEPAGE_URL "${TEACHOS_HOMEPAGE_URL}" VERSION "${TEACHOS_VERSION}" LANGUAGES ASM C CXX ) #[============================================================================[ # 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_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/Modules") set(CMAKE_CXX_STANDARD "20") set(CMAKE_CXX_STANDARD_REQUIRED YES) set(CMAKE_CXX_EXTENSIONS NO) #[============================================================================[ # Documentation #]============================================================================] find_package("Doxygen") set(DOXYGEN_GENERATE_HTML NO) 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" ) #[============================================================================[ # Global Compiler Configuration #]============================================================================] add_compile_options( "$<$:-Wall>" "$<$:-Wextra>" "$<$:-Werror>" "$<$:-pedantic-errors>" ) #[============================================================================[ # Global Directories #]============================================================================] include_directories( "include" "arch/${CMAKE_SYSTEM_PROCESSOR}/include" ) #[============================================================================[ # The Bootstrap Library #]============================================================================] add_library("_boot" OBJECT) add_library("teachos::boot" ALIAS "_boot") #[============================================================================[ # The Video Library #]============================================================================] add_library("_video" OBJECT) add_library("teachos::video" ALIAS "_video") #[============================================================================[ # The Kernel #]============================================================================] add_executable("_kernel" "src/kernel/main.cpp" ) add_executable("teachos::kernel" ALIAS "_kernel") target_link_libraries("_kernel" PRIVATE "teachos::boot" "teachos::video" ) #[============================================================================[ # Platform Specific Components #]============================================================================] add_subdirectory("arch/${CMAKE_SYSTEM_PROCESSOR}")