aboutsummaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2024-09-16 14:07:41 +0000
committerFelix Morgner <felix.morgner@ost.ch>2024-09-17 08:58:55 +0200
commit8f9b9cd8aac30572b7e275bbeb1b32d2cbb8950a (patch)
tree5e215dd93c34b3d58c287b036ad2d190e0a9a772 /CMakeLists.txt
parentc16a3739649fa15178df667d610553e93db83e4c (diff)
downloadteachos-8f9b9cd8aac30572b7e275bbeb1b32d2cbb8950a.tar.xz
teachos-8f9b9cd8aac30572b7e275bbeb1b32d2cbb8950a.zip
build: migrate away from conan
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt121
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}")