diff options
| author | Felix Morgner <felix.morgner@ost.ch> | 2024-09-16 14:07:41 +0000 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@ost.ch> | 2024-09-17 08:58:55 +0200 |
| commit | 8f9b9cd8aac30572b7e275bbeb1b32d2cbb8950a (patch) | |
| tree | 5e215dd93c34b3d58c287b036ad2d190e0a9a772 /CMakeLists.txt | |
| parent | c16a3739649fa15178df667d610553e93db83e4c (diff) | |
| download | teachos-8f9b9cd8aac30572b7e275bbeb1b32d2cbb8950a.tar.xz teachos-8f9b9cd8aac30572b7e275bbeb1b32d2cbb8950a.zip | |
build: migrate away from conan
Diffstat (limited to 'CMakeLists.txt')
| -rw-r--r-- | CMakeLists.txt | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..c51ffb9 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,121 @@ +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( + "$<$<CXX_COMPILER_ID:GNU>:-Wall>" + "$<$<CXX_COMPILER_ID:GNU>:-Wextra>" + "$<$<CXX_COMPILER_ID:GNU>:-Werror>" + "$<$<CXX_COMPILER_ID:GNU>:-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}") |
