From 8257164533a3b5b6ce73645326050d53d4a67f2b Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sat, 10 Oct 2026 09:17:43 +0200 Subject: [PATCH 1/4] Add missing doc --- src/runtime/renderer/rendercore.h | 18 ++++++++++-------- src/runtime/renderer/vulkantypes.h | 2 ++ 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/runtime/renderer/rendercore.h b/src/runtime/renderer/rendercore.h index 03f42e5..f0d2434 100644 --- a/src/runtime/renderer/rendercore.h +++ b/src/runtime/renderer/rendercore.h @@ -32,14 +32,15 @@ namespace segfault::renderer { class RHI; + /// @brief Enum class representing buffer usage flags for Vulkan buffers. enum class BufferUsage : uint32_t { - TransferSourceBit = 0x00000001, - TransferDestinationBit = 0x00000002, - UniformTexelBufferBit = 0x00000004, - StorageTexelBufferBit = 0x00000008, - UniformBuffer = 0x00000010, - IndexBuffer = 0x00000040, - VertexBuffer = 0x00000080, + TransferSourceBit = 0x00000001, ///< Buffer can be used as a source for transfer operations. + TransferDestinationBit = 0x00000002, ///< Buffer can be used as a destination for transfer operations. + UniformTexelBufferBit = 0x00000004, ///< Buffer can be used as a uniform texel buffer. + StorageTexelBufferBit = 0x00000008, ///< Buffer can be used as a storage texel buffer. + UniformBuffer = 0x00000010, ///< Buffer can be used as a uniform buffer. + IndexBuffer = 0x00000040, ///< Buffer can be used as an index buffer. + VertexBuffer = 0x00000080, ///< Buffer can be used as a vertex buffer. }; /// @brief Represents a vertex with position, color, and texture coordinates. @@ -60,6 +61,7 @@ namespace segfault::renderer { using VertexArray = std::vector; ///< Type alias for a vector of Vertex objects. using IndexArray = std::vector; ///< Type alias for a vector of index values. + /// @brief Represents a uniform buffer object containing transformation matrices. struct UniformBufferObject { glm::mat4 model; glm::mat4 view; @@ -90,7 +92,7 @@ namespace segfault::renderer { } }; - + /// @brief Represents a rendering frame with methods to begin, submit, and end the frame. struct Frame { void begin(); void submit(); diff --git a/src/runtime/renderer/vulkantypes.h b/src/runtime/renderer/vulkantypes.h index 85aba14..2af4424 100644 --- a/src/runtime/renderer/vulkantypes.h +++ b/src/runtime/renderer/vulkantypes.h @@ -34,6 +34,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. namespace segfault::renderer { + /// @brief Represents the indices of queue families for a Vulkan physical device. struct QueueFamilyIndices { std::optional graphicsFamily{}; std::optional presentFamily{}; @@ -60,6 +61,7 @@ namespace segfault::renderer { } }; + /// @brief Represents the details of swap chain support for a Vulkan physical device. struct SwapChainSupportDetails { VkSurfaceCapabilitiesKHR capabilities{}; std::vector formats{}; From b8ada666222f16e03cbf034259650bdbde9536ea Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sat, 10 Oct 2026 09:23:00 +0200 Subject: [PATCH 2/4] Add doxygeh build. --- CMakeLists.txt | 1 + docs/CMakeLists.txt | 46 +++ docs/Doxyfile | 867 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 914 insertions(+) create mode 100644 docs/CMakeLists.txt create mode 100644 docs/Doxyfile diff --git a/CMakeLists.txt b/CMakeLists.txt index e4849c5..eb1964b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,3 +42,4 @@ add_subdirectory(src/runtime) add_subdirectory(src/tools) add_subdirectory(src/examples) add_subdirectory(scripts) +add_subdirectory(docs) diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt new file mode 100644 index 0000000..b115208 --- /dev/null +++ b/docs/CMakeLists.txt @@ -0,0 +1,46 @@ +# Documentation configuration for Segfault +# This file sets up the Doxygen documentation target + +# Find Doxygen +find_package(Doxygen QUIET) + +if(DOXYGEN_FOUND) + message(STATUS "Doxygen found: ${DOXYGEN_EXECUTABLE}") + + # Configure Doxygen + set(DOXYGEN_INPUT ${CMAKE_CURRENT_SOURCE_DIR}/../src/runtime + ${CMAKE_CURRENT_SOURCE_DIR}/../src/contrib/cppcore/include + ${CMAKE_CURRENT_SOURCE_DIR}/Architecture.md) + + # Set output directory + set(DOXYGEN_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/html) + + # Add custom target for documentation + add_custom_target(doc + COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMENT "Generating API documentation with Doxygen" + VERBATIM + ) + + # Add a clean target for documentation + add_custom_target(doc-clean + COMMAND ${CMAKE_COMMAND} -E remove_directory ${DOXYGEN_OUTPUT_DIR} + COMMENT "Cleaning Doxygen documentation" + VERBATIM + ) + + # Make doc-clean depend on doc (optional) + add_dependencies(doc-clean doc) + + message(STATUS "Documentation target 'doc' available - run 'cmake --build . --target doc' to generate") +else() + message(WARNING "Doxygen not found. Documentation target 'doc' will not be available.") + + # Create a dummy target so the build doesn't fail + add_custom_target(doc + COMMAND ${CMAKE_COMMAND} -E echo "Doxygen not found. Please install Doxygen to generate documentation." + COMMENT "Doxygen not available - skipping documentation generation" + VERBATIM + ) +endif() diff --git a/docs/Doxyfile b/docs/Doxyfile new file mode 100644 index 0000000..1abc199 --- /dev/null +++ b/docs/Doxyfile @@ -0,0 +1,867 @@ +# Doxyfile 1.9.8 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" "). + +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +PROJECT_NAME = "Segfault Game Engine" + +# The PROJECT_NUMBER tag can be used to enter a project number or version +# identifier. When the VERSION option is set to YES in the configuration +# file then this will be used as the version of the project. See also +# the VERSION tag. +PROJECT_NUMBER = 0.1.0 + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. +PROJECT_BRIEF = "Vulkan-based game engine written in C++17" + +# With the PROJECT_LOGO tag one can specify a logo or icon that is included in +# the documentation. The maximum height of the logo should not exceed 55 pixels +# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo +# from the file and place it in the HTML output directory. +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path +# is entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. +OUTPUT_DIRECTORY = docs/html + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format. +# This can be used to split up a large documentation set in smaller parts. +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES, then doxygen will include brief +# member descriptions after the members that are listed in the file and class +# documentation (similar to JavaDoc). Set to NO to disable this. +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES, then doxygen will repeat the brief +# description (defined by the \brief command) before the detailed member +# description. If set to NO, the brief description will only appear in the +# member list and not in the detailed description of the member. +REPEAT_BRIEF = YES + +# This tag implements a quasi-preprocessor that will replace each occurrence +# of the target word with the replacement text. For instance, if you want to +# replace "My Company Inc." with "ABC" then specify +# ALIASES += "My Company Inc.==ABC" +ALIASES = + +# The OPTIMIZE_OUTPUT_JAVASCRIPT tag can be used to indicate that the +# HTML output should be further optimized using JavaScript. +# Doxygen will then remove redundant qualifiers and include statements +# from the generated HTML output and instead put them in a separate JavaScript +# file. This can reduce the size of the HTML files significantly. +# The default value is: YES +OPTIMIZE_OUTPUT_JAVA = YES + +# If the OPTIMIZE_OUTPUT_SLIM tag is set to YES the JavaScript will be further +# optimized using a built-in JavaScript slim optimization algorithm. +# The default value is: NO +OPTIMIZE_OUTPUT_SLIM = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output tailored for Fortran code. +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources. Doxygen will then generate output tailored for Java/Python +# code. +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_JAVASCRIPT tag to YES if your project consists of +# JavaScript sources. Doxygen will then generate output tailored for +# JavaScript code. +OPTIMIZE_FOR_JAVASCRIPT = NO + +# Set the EXTRACT_ALL tag to YES to force the extraction of all entities from +# the source files. This is helpful for C++ projects where the class members +# are not explicitly documented. +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES, then all private members of +# classes will be included in the documentation. +EXTRACT_PRIVATE = YES + +# If the EXTRACT_STATIC tag is set to YES, then static members will be included +# in the documentation. +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, then classes (and structs) +# defined locally in source files will be included in the documentation. +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. If set to YES, then local +# methods, which are defined in the implementation section but not in the +# interface are included in the documentation. If set to NO (the default), +# these methods are not included. +EXTRACT_LOCAL_METHODS = YES + +# If the EXTRACT_ANON_NSPACES tag is set to YES, then doxygen will also +# extract anonymous namespaces from the code. +EXTRACT_ANON_NSPACES = YES + +# If this flag is set to YES, the contents of anonymous namespaces will be +# extracted and appear in the documentation as if their contents had been put +# in the global namespace. +EXTRACT_ANON_NSPACE_MEMBERS = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, then doxygen will hide all +# undocumented members of documented classes and files. If set to NO, these +# members will be included in the documentation and marked as "undocumented". +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, then doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO, these classes will be included in the class hierarchy and marked as +# "undocumented". +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, then doxygen will hide all +# friend declarations. If set to NO, these declarations will be included in +# the documentation. +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, then doxygen will hide all +# documentation for functions and class members that appears inside the body of +# a function or class definition. +HIDE_IN_BODY_DOCS = NO + +# If the INTERNAL_DOCS tag is set to YES, then doxygen will also process the +# \internal command and include the documentation in the output. If set to NO, +# these commands are left in the source code but will be omitted from the output. +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO, then doxygen will only generate +# file names in lower-case letters. If set to YES, upper-case letters are +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case-sensitive file names. Windows +# and Mac users are advised to set this option to NO. +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO, then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES, the +# scope will be hidden. +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES, then doxygen will list all the +# include files that are included by a file in the documentation of that file. +SHOW_INCLUDE_FILES = YES + +# If the FORCE_LOCAL_INCLUDES tag is set to YES, then doxygen will list include +# files with the INCLUDE_AS_MEMBER_ST tag also when they are included only in +# source files. +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES, then a tag [inline] is inserted in the +# documentation for inline members. +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES, then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. +SORT_MEMBER_DOCS = NO + +# If the SORT_BRIEF_DOCS tag is set to YES, then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES, then doxygen will sort the +# (detailed) documentation of class members so that constructors and destructors +# are listed first. If set to NO, the constructors and destructors will be +# listed in the same order as the other class members. +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES, then doxygen will sort the hierarchy +# of group names in the documentation of a file. If set to NO, the group names +# will appear in their defined order. +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, then doxygen will sort groups of +# members in the documentation by the scope in which they are declared. +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo +# list. Doxygen will then extract the todo items from the source code and +# include them in the documentation. +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test +# list. Doxygen will then extract the test items from the source code and +# include them in the documentation. +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug +# list. Doxygen will then extract the bug items from the source code and include +# them in the documentation. +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) the +# deprecated list. Doxygen will then extract the deprecated items from the +# source code and include them in the documentation. +GENERATE_DEPRECATEDLIST = YES + +# If the ENABLED_SECTIONS tag is set to YES, then doxygen will enable the use of +# the \enable command. This can be used to enable or disable the generation of +# certain parts of the documentation. +ENABLED_SECTIONS = YES + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro can have for it to appear in the +# documentation. If the initial value consists of more than MAX_INITIALIZER_LINES +# lines then it will be omitted from the output and replaced with the \<...\> +# string. +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to YES to list all the files that are explicitly +# or implicitly used by the documented files. +SHOW_USED_FILES = YES + +# If the SHOW_FILES tag is set to YES, then doxygen will list all the files that +# are included in the documentation in the index page. +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to YES to list all the namespaces in the +# documentation of a file or class. If set to NO only the namespaces that are +# used in the documented file/class will be shown. +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing +# (via popen()) the command , where is the value +# of the FILE_VERSION_FILTER tag, and is the name of an input file +# passed to doxygen. Whatever the program outputs to standard output is used as +# the file version. For an example see the documentation. +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format in a similar way as a web site. The layout +# file has a different format for each supported output file format. +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference information for each citation. These files are expected to be in +# the bibtex format. If the value of this tag is empty, then doxygen will look +# for a file with the name "references.bib" in the directory of the input file. +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES, then doxygen will also extract the +# following items from the source code: +# - Static members of classes +# - Static global functions +# - Non-public class members (including inherited ones) +# - Enumeration values +# - Preprocessor definitions +# +# If the EXTRACT_STATIC tag is set to YES, then doxygen will also extract +# static members of classes and static global functions. +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, then doxygen will also +# extract classes (and structs) defined locally in source files. +EXTRACT_LOCAL_CLASSES = YES + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, then doxygen will hide all +# undocumented members inside documented classes or files. +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, then doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, then doxygen will hide all +# friend declarations. +HIDE_FRIEND_COMPOUNDS = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that should be +# parsed by doxygen. You can specify the INPUT tags in a number of ways: +# - INPUT = file1 file2 file3 ... +# - INPUT = dir1 dir2 dir3 ... +# - INPUT = dir1 file1 dir2 file2 ... +# - INPUT = glob-pattern1 glob-pattern2 ... +# +# Note that relative paths are relative to the directory from which doxygen +# is run. +INPUT = src/runtime src/contrib/cppcore/include docs/Architecture.md + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libstdc++) for the transcoding. See the +# libiconv documentation (see: http://www.gnu.org/software/libiconv) for the +# list of possible encodings. +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcards to match certain files +# inside those directories. +FILE_PATTERNS = *.h *.cpp *.c *.md + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT tag. Wildcards can be used to specify the files and/or +# directories to exclude. By default all files and directories in the path +# specified by INPUT are included in the documentation. +EXCLUDE = src/contrib/cppcore/contrib src/contrib/cppcore/test + +# The EXCLUDE_SYMLINKS tag can be used to select whether to exclude symbolic +# links. If set to YES, symbolic links to files or directories will be +# excluded. If set to NO, they will be included. +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcards to exclude certain +# files from those directories. Note that the wildcards must match the file +# names, not the path. +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, it can match any sequence of characters. +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). +EXAMPLE_PATH = src/examples + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcards to match certain files +# inside those directories. +EXAMPLE_PATTERNS = *.cpp *.h + +# If the EXAMPLE_RECURSIVE tag is set to YES, then doxygen will also look into +# subdirectories for files to include in the examples. +EXAMPLE_RECURSIVE = YES + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation. +IMAGE_PATH = docs/ + +# The INPUT_FILTER tag can be used to specify a program to preprocess the input +# for files. Doxygen will execute the program by executing (via popen()) the +# command , where is the value of the INPUT_FILTER +# tag, and is the name of an input file. Whatever the filter +# outputs to standard output is used as input for doxygen. +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will use the filter that matches the file pattern to +# preprocess the file. +FILTER_PATTERNS = + +# The FILTER_SOURCE_FILES tag can be used to specify whether to apply the input +# filter to source files as well. If not specified, the default is YES. +FILTER_SOURCE_FILES = YES + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source file patterns for +# which the input filter should be applied. If not specified, the default is +# all source files. +FILTER_SOURCE_PATTERNS = + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES, then a list of source files will be +# generated. From these source files, the code that is part of the documentation +# can be included (with syntax highlighting). If set to NO, then no source files +# will be generated at all. +SOURCE_BROWSER = YES + +# If the INLINE_SOURCES tag is set to YES, then the source code for classes and +# files will be included in the documentation. If set to NO, only the +# documentation will be included. +INLINE_SOURCES = NO + +# If the STRIP_CODE_COMMENTS tag is set to YES, then doxygen will remove all +# comments from the source code. This is useful if the source code contains +# sensitive information or if the comments are not relevant for the generated +# documentation. +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES, then for each documented +# function all documented functions referencing it will be listed. +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES, then for each documented +# function all documented entities that reference it will be listed. +REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES, then the hyperlinks from +# functions in the code to the source files will be shown. Otherwise, the +# functions will be listed without any hyperlinks. +REFERENCES_LINK_SOURCE = YES + +# If the SOURCE_TOOLTIPS tag is set to YES, then doxygen will generate +# tooltips for the source code in the HTML documentation. If set to NO, +# no tooltips will be generated. +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES, then doxygen will generate HTML files +# with the htags extension. If set to NO, the files will have the html +# extension. +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES, then doxygen will generate +# verbatim headers for each code block that is included in the documentation. +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, then doxygen will generate an +# alphabetical index of all compounds. If set to NO, no alphabetical index +# will be generated. +ALPHABETICAL_INDEX = YES + +# The COLS_IN_ALPHA_INDEX tag specifies the number of columns in which the +# alphabetical index will be divided. The default value is 5. +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a lower case letter, this +# option turns the automatic sorting of classes in the alphabetical index +# off. Note that this does not compare the class names case-insensitively +# but only the starting letter. It is expected that all classes start with a +# different letter, so that the alphabetical index can be used as a +# table of contents. If the default value is used, the index will be sorted +# in a case-sensitive way. +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES, then doxygen will generate HTML +# files for the documentation. +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML files will be written. +# If a relative path is entered, it will be relative to the location where +# doxygen was started. If left blank the current directory will be used. +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for the +# generated HTML files. If a file extension is not specified, the default +# extension .html will be used. +HTML_FILE_EXTENSION = .html + +# The HTML_COLORSTYLE_HUE tag controls the color hue of the HTML output. +# Doxygen will adjust the colors of the HTML output to match this hue. The +# range is 0-359 degrees. +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the color saturation of the HTML output. +# Doxygen will adjust the colors of the HTML output to match this saturation. +# The range is 0-255. +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the color gamma of the HTML output. +# Doxygen will adjust the colors of the HTML output to match this gamma. +# The range is 0-255. +HTML_COLORSTYLE_GAMMA = 80 + +# The HTML_TIMESTAMP tag can be used to specify whether to include the date and +# time when the documentation was generated. If set to YES, the date and time +# will be included in the HTML output. If set to NO, they will be omitted. +HTML_TIMESTAMP = YES + +# If the HTML_DYNAMIC_MENUS tag is set to YES, then the generated HTML +# documentation will contain dynamic menus. If set to NO, static menus will +# be generated. This can be useful if the generated HTML documentation is to be +# put on a CD-ROM or other static media. +HTML_DYNAMIC_MENUS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES, then the generated HTML +# documentation will contain dynamic sections. If set to NO, static sections +# will be generated. +HTML_DYNAMIC_SECTIONS = YES + +# If the HTML_INDEX_NUM_ENTRIES tag is set to a number greater than 0, then +# doxygen will split the index into chunks with that number of entries. +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, then doxygen will generate a docset +# in Apple's AppleDoc format. If set to NO, it will not generate any docset. +GENERATE_DOCSET = NO + +# This tag determines the name that will be used for the docset. The default +# value is: org.doxygen.Project. +DOCSET_NAME = org.doxygen.Segfault + +# This tag specifies a string that will be used as the feed title for the +# generated docset's search feed. +DOCSET_FEEDNAME = "Segfault Documentation" + +# This tag specifies a URL that will be used as the feed URL for the generated +# docset's search feed. +DOCSET_FEEDURL = + +# If the DOCSET_BUNDLE_ID tag is set to a non-empty string, then this will be +# used as the bundle identifier for the docset. The default value is +# org.doxygen.Project. +DOCSET_BUNDLE_ID = org.doxygen.Segfault + +# If the DOCSET_PUBLISHER_ID tag is set to a non-empty string, then this will +# be used as the publisher identifier for the docset. The default value is +# org.doxygen.Publisher. +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# If the DOCSET_PUBLISHER_NAME tag is set to a non-empty string, then this +# will be used as the provider name for the docset. The default value is +# doxygen. +DOCSET_PUBLISHER_NAME = doxygen + +#--------------------------------------------------------------------------- +# Configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES, then doxygen will generate LaTeX +# files for the documentation. +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX files will be written. +# If a relative path is entered, it will be relative to the location where +# doxygen was started. If left blank the current directory will be used. +LATEX_OUTPUT = latex + +#--------------------------------------------------------------------------- +# Configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES, then doxygen will generate RTF files +# for the documentation. +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF files will be written. +# If a relative path is entered, it will be relative to the location where +# doxygen was started. If left blank the current directory will be used. +RTF_OUTPUT = rtf + +#--------------------------------------------------------------------------- +# Configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES, then doxygen will generate man pages +# for the documentation. +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be written. +# If a relative path is entered, it will be relative to the location where +# doxygen was started. If left blank the current directory will be used. +MAN_OUTPUT = man + +#--------------------------------------------------------------------------- +# Configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES, then doxygen will generate XML files +# for the documentation. +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML files will be written. +# If a relative path is entered, it will be relative to the location where +# doxygen was started. If left blank the current directory will be used. +XML_OUTPUT = xml + +#--------------------------------------------------------------------------- +# Configuration options related to the DOCBOOK output +#--------------------------------------------------------------------------- + +# If the GENERATE_DOCBOOK tag is set to YES, then doxygen will generate +# DocBook files for the documentation. +GENERATE_DOCBOOK = NO + +# The DOCBOOK_OUTPUT tag is used to specify where the DocBook files will be +# written. If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. +DOCBOOK_OUTPUT = docbook + +#--------------------------------------------------------------------------- +# Configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTODEF tag is set to YES, then doxygen will generate +# AutoDef files for the documentation. +GENERATE_AUTODEF = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES, then doxygen will generate a +# Perl module for the documentation. +GENERATE_PERLMOD = NO + +# If the PERLMOD_NAMESPACE tag is set to a non-empty string, then this will be +# used as the namespace for the Perl module. If not set, the default +# namespace "Doxygen::Project" will be used. +PERLMOD_NAMESPACE = Doxygen::Segfault + +# If the PERLMOD_LOCATION tag is set to a non-empty string, then this will be +# used to specify the location where the Perl module output will be written. +# If a relative path is entered, it will be relative to the location where +# doxygen was started. If left blank the current directory will be used. +PERLMOD_LOCATION = + +# If the PERLMOD_IMPLEMENTATION tag is set to a non-empty string, then this +# will be used to specify the location where the Perl module implementation +# will be written. If a relative path is entered, it will be relative to the +# location where doxygen was started. If left blank the current directory will +# be used. +PERLMOD_IMPLEMENTATION = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES, then doxygen will evaluate +# all C-preprocessor directives found in the sources and include files. +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES, then doxygen will expand all +# macro invocations in the source code. If set to NO, then only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. +MACRO_EXPANSION = YES + +# If the EXPAND_ONLY_PREDEF tag is set to YES, then doxygen will only expand +# macros that have been defined in the PREDEFINED tag. If set to NO, then doxygen +# will expand all macros. +EXPAND_ONLY_PREDEF = NO + +# The PREDEFINED tag can be used to specify one or more macro names that should be +# defined before the preprocessor starts. The macro definitions are given as +# key=value pairs. If the value is empty, the macro is defined without a value. +# Multiple macro definitions can be specified as a space-separated list. +PREDEFINED = SEGFAULT_EXPORT= SEGFAULT_WINDOWS=1 + +# If the EXPAND_AS_DEFINED tag is set to a list of macro names, then doxygen will +# expand the macro as if it were defined. For each macro name in the list, the +# macro will be expanded as if it were a #define with no arguments. If the macro +# name is followed by a : then the macro will be expanded as if it were a +# #define with the specified number of arguments. +EXPAND_AS_DEFINED = + +# The SKIP_FUNCTION_MACROS tag can be used to specify that preprocessor macros +# that expand to a function definition should be skipped. If set to YES, such +# macros will be skipped. If set to NO, they will be included. +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration options related to the C and C++ languages +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES, then doxygen will also extract the +# following items from the source code: +# - Static members of classes +# - Static global functions +# - Non-public class members (including inherited ones) +# - Enumeration values +# - Preprocessor definitions +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES, then all private members of +# classes will be included in the documentation. +EXTRACT_PRIVATE = YES + +# If the EXTRACT_STATIC tag is set to YES, then doxygen will also extract +# static members of classes and static global functions. +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, then doxygen will also +# extract classes (and structs) defined locally in source files. +EXTRACT_LOCAL_CLASSES = YES + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, then doxygen will hide all +# undocumented members inside documented classes or files. +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, then doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, then doxygen will hide all +# friend declarations. +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, then doxygen will hide all +# documentation for functions and class members that appears inside the body of +# a function or class definition. +HIDE_IN_BODY_DOCS = NO + +# If the INTERNAL_DOCS tag is set to YES, then doxygen will also process the +# \internal command and include the documentation in the output. +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO, then doxygen will only generate +# file names in lower-case letters. If set to YES, upper-case letters are +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case-sensitive file names. +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO, then doxygen will show members with +# their full class and namespace scopes in the documentation. +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES, then doxygen will list all the +# include files that are included by a file in the documentation of that file. +SHOW_INCLUDE_FILES = YES + +# If the FORCE_LOCAL_INCLUDES tag is set to YES, then doxygen will list include +# files with the INCLUDE_AS_MEMBER_ST tag also when they are included only in +# source files. +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES, then a tag [inline] is inserted in the +# documentation for inline members. +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES, then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. +SORT_MEMBER_DOCS = NO + +# If the SORT_BRIEF_DOCS tag is set to YES, then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES, then doxygen will sort the +# (detailed) documentation of class members so that constructors and destructors +# are listed first. +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES, then doxygen will sort the hierarchy +# of group names in the documentation of a file. +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, then doxygen will sort groups of +# members in the documentation by the scope in which they are declared. +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTECTED_MATCHING tag is set to YES, then doxygen will +# consider a class member to be protected if it is declared as such in the +# source code. Otherwise, it will consider a class member to be protected if it +# is declared in a protected section. +STRICT_PROTECTED_MATCHING = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# Set the DOT image format for graph generation. Doxygen can generate graphs +# in several formats, including PNG, JPEG, GIF, and SVG. The default is PNG. +# Note: To use dot graphs, you must have Graphviz (dot) installed. +HAVE_DOT = NO + +# If the DOT_NUM_THREADS tag is set to a number greater than 0, then doxygen will +# use that many threads to generate the graphs. The default is 0, which means +# doxygen will use a single thread. +DOT_NUM_THREADS = 0 + +# Set the DOT_FONTNAME tag to the preferred font for dot graphs. The default +# font is Helvetica. +DOT_FONTNAME = Helvetica + +# Set the DOT_FONTSIZE tag to the preferred font size for dot graphs. The +# default font size is 10. +DOT_FONTSIZE = 10 + +# Set the DOT_FONTPATH tag to the directory containing the fonts for dot graphs. +# If left blank, doxygen will use the system fonts. +DOT_FONTPATH = + +# Set the CLASS_GRAPH tag to YES to generate a collaboration graph for each class. +CLASS_GRAPH = YES + +# Set the COLLABORATION_GRAPH tag to YES to generate a collaboration graph for +# each class. This shows the inheritance and usage relations between classes. +COLLABORATION_GRAPH = YES + +# Set the GROUP_GRAPHS tag to YES to generate graphs for groups of classes. +GROUP_GRAPHS = YES + +# Set the UML_LOOK tag to YES to generate UML-style class diagrams. +UML_LOOK = NO + +# Set the UML_LIMIT_NUM_FIELDS tag to the maximum number of fields to show in +# UML diagrams. The default is 100. +UML_LIMIT_NUM_FIELDS = 100 + +# Set the TEMPLATE_RELATIONS tag to YES to include template relations in the +# class diagrams. +TEMPLATE_RELATIONS = YES + +# Set the INCLUDE_GRAPH tag to YES to generate a graph showing which files are +# directly or indirectly included by each file. +INCLUDE_GRAPH = YES + +# Set the INCLUDED_BY_GRAPH tag to YES to generate a graph showing which files +# include this file. +INCLUDED_BY_GRAPH = YES + +# Set the CALL_GRAPH tag to YES to generate a call graph for each function. +CALL_GRAPH = NO + +# Set the CALLER_GRAPH tag to YES to generate a caller graph for each function. +CALLER_GRAPH = NO + +# Set the GRAPHICAL_HIERARCHY tag to YES to generate a graphical hierarchy of +# classes. +GRAPHICAL_HIERARCHY = YES + +# Set the DIRECTORY_GRAPH tag to YES to generate a directory dependency graph. +DIRECTORY_GRAPH = YES + +#--------------------------------------------------------------------------- +# Configuration options related to the search engine +#--------------------------------------------------------------------------- + +# If the SEARCHENGINE tag is set to YES, then doxygen will generate a search +# engine for the HTML output. +SEARCHENGINE = YES From 2d300011fa52bac885f0149ea777ca591e6279b0 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sat, 10 Oct 2026 11:10:03 +0200 Subject: [PATCH 3/4] Update .gitignore --- .gitignore | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.gitignore b/.gitignore index 42c098d..4a4570c 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ bin/ lib/ build/ +x64/ # CMake generated files CMakeCache.txt @@ -9,9 +10,11 @@ CMakeFiles/ Makefile cmake_install.cmake install_manifest.txt +*.dir/ # vcpkg vcpkg/ +vcpkg_installed/ vcpkg-installed/ # Compiler and linker output @@ -31,11 +34,13 @@ vcpkg-installed/ # IDE files # Visual Studio +.vs/ *.sln *.vcxproj *.vcxproj.filters *.vcxproj.user *.userosscache +*.slnx *.suo # VS Code From e1fb1ce02c7626315ef8c0a528cc1a2d57ef3579 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sat, 10 Oct 2026 12:58:08 +0200 Subject: [PATCH 4/4] Fix doxygen generation --- docs/CMakeLists.txt | 19 ++++++++++++++++--- docs/Doxyfile | 4 ++-- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt index b115208..81d142b 100644 --- a/docs/CMakeLists.txt +++ b/docs/CMakeLists.txt @@ -15,17 +15,30 @@ if(DOXYGEN_FOUND) # Set output directory set(DOXYGEN_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/html) + # Create output directory before running Doxygen + file(MAKE_DIRECTORY ${DOXYGEN_OUTPUT_DIR}) + + # Configure Doxyfile path with absolute paths + set(DOXYGEN_CONFIG_FILE ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile.configured) + + # Create a configured Doxyfile with absolute paths + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile + ${DOXYGEN_CONFIG_FILE} + @ONLY + ) + # Add custom target for documentation add_custom_target(doc - COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_CONFIG_FILE} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Generating API documentation with Doxygen" VERBATIM ) # Add a clean target for documentation add_custom_target(doc-clean - COMMAND ${CMAKE_COMMAND} -E remove_directory ${DOXYGEN_OUTPUT_DIR} + COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_CURRENT_BINARY_DIR}/html COMMENT "Cleaning Doxygen documentation" VERBATIM ) diff --git a/docs/Doxyfile b/docs/Doxyfile index 1abc199..0a356a7 100644 --- a/docs/Doxyfile +++ b/docs/Doxyfile @@ -47,7 +47,7 @@ PROJECT_LOGO = # into which the generated documentation will be written. If a relative path # is entered, it will be relative to the location where doxygen was started. If # left blank the current directory will be used. -OUTPUT_DIRECTORY = docs/html +OUTPUT_DIRECTORY = @CMAKE_CURRENT_BINARY_DIR@/html # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub- # directories (in 2 levels) under the output directory of each output format. @@ -322,7 +322,7 @@ HIDE_FRIEND_COMPOUNDS = NO # # Note that relative paths are relative to the directory from which doxygen # is run. -INPUT = src/runtime src/contrib/cppcore/include docs/Architecture.md +INPUT = "@CMAKE_SOURCE_DIR@/src/runtime" "@CMAKE_SOURCE_DIR@/src/contrib/cppcore/include" "@CMAKE_SOURCE_DIR@/docs/Architecture.md" # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses