This commit delivers a comprehensive set of updates including development
environment setup, advanced spinlock features, initial IPC robustness
KASSERTs, extensive Doxygen commenting, code formatting, and Doxygen setup.
Key Changes:
Part 0: Development Environment Setup
- Created `setup.sh` to automate installation of `doxygen`, `graphviz`,
`clang-format`, and `cppcheck`. (Tools were installed in the environment).
Part 1: Advanced Spinlock Features
- Enhanced `simple_spin_lock()` in `kernel/k_spinlock.h` with:
- Adaptive spinning: `MAX_SPIN_THRESHOLD` and a stubbed `kernel_yield()`
(calling `arch_pause()`).
- Contention statistics: `acquisitions` and `contentions` counters
added to `simple_spinlock_t` and integrated into lock functions.
- Added extensive Doxygen and inline comments for all spinlock code.
- Updated `docs/Signal_Refactoring_Verification.md` with these features.
Part 2: Initial IPC Robustness Analysis & KASSERTs
- Implemented an initial set of KASSERTs in `kernel/system.c` (in
`kernel_call`, `kernel_call_dispatch`, `kernel_call_finish`) for
validating IPC message parameters, call numbers, privileges, and
internal states.
- Added Doxygen/inline comments to these IPC functions.
- Created `docs/IPC_Robustness_Analysis.md` documenting these KASSERTs
and areas for further IPC validation.
Part 3: Code Formatting, Doxygen Setup & Review
- Code Formatting: Applied `clang-format --style=Google` to all C/H
files modified in recent KASSERT and spinlock work.
- Static Analysis: Ran `cppcheck`; no critical issues found in recent
changes requiring immediate code modification.
- Doxygen Setup: Created `docs/Doxyfile.kernel` with a comprehensive,
C23-aware configuration based on your feedback. This file enables
generation of extensive kernel documentation.
- `docs/Lock_Ordering.md`: Reviewed; no updates needed in this pass.
This work significantly improves kernel robustness, developer tooling,
code quality, and documentation infrastructure.
302 lines
12 KiB
Plaintext
302 lines
12 KiB
Plaintext
# Doxyfile.kernel - Optimized for C23 MINIX Kernel Documentation
|
|
# Project Settings
|
|
PROJECT_NAME = "MINIX C23 Microkernel"
|
|
PROJECT_NUMBER = "3.5.0" # Example version
|
|
PROJECT_BRIEF = "In-depth documentation of the MINIX microkernel components."
|
|
PROJECT_LOGO = # docs/images/minix_logo.png # Optional: Path to project logo
|
|
OUTPUT_DIRECTORY = ./generated-docs # Relative to this Doxyfile's location (docs/)
|
|
CREATE_SUBDIRS = YES
|
|
OUTPUT_LANGUAGE = English
|
|
BRIEF_MEMBER_DESC = YES
|
|
REPEAT_BRIEF = YES
|
|
ALWAYS_DETAILED_SEC = NO
|
|
INLINE_INHERITED_MEMB = NO
|
|
FULL_PATH_NAMES = YES
|
|
STRIP_FROM_PATH = ../
|
|
STRIP_FROM_INC_PATH =
|
|
SHORT_NAMES = NO
|
|
JAVADOC_AUTOBRIEF = YES
|
|
QT_AUTOBRIEF = YES
|
|
MULTILINE_CPP_IS_BRIEF = YES
|
|
INHERIT_DOCS = YES
|
|
SEPARATE_MEMBERS = YES
|
|
TAB_SIZE = 4
|
|
ALIASES = "rst=\verbatim embed:rst:leading-asterisk" \
|
|
"endrst=\endverbatim"
|
|
TCL_SUBST =
|
|
OPTIMIZE_OUTPUT_FOR_C = YES
|
|
OPTIMIZE_OUTPUT_JAVA = NO
|
|
OPTIMIZE_FOR_FORTRAN = NO
|
|
OPTIMIZE_OUTPUT_VHDL = NO
|
|
OPTIMIZE_OUTPUT_SLICE = NO
|
|
EXTENSION_MAPPING = .h=C .c=C .S=Assembly .s=Assembly .asm=Assembly
|
|
MARKDOWN_SUPPORT = YES
|
|
TOC_INCLUDE_HEADINGS = 3 # Up to ### level
|
|
AUTOLINK_SUPPORT = YES
|
|
BUILTIN_STL_SUPPORT = NO # MINIX kernel doesn't use STL
|
|
CPP_CLI_SUPPORT = NO
|
|
SIP_SUPPORT = NO
|
|
IDL_PROPERTY_SUPPORT = YES
|
|
DISTRIBUTE_GROUP_DOC = NO # Group docs with their groups
|
|
GROUP_NESTED_COMPOUNDS = NO
|
|
SUBGROUPING = YES
|
|
INLINE_GROUPED_CLASSES = NO
|
|
INLINE_SIMPLE_STRUCTS = NO
|
|
TYPEDEF_HIDES_STRUCT = NO
|
|
LOOKUP_CACHE_SIZE = 0 # Default, consider increasing for very large projects
|
|
NUM_PROC_THREADS = 1 # Default, adjust based on build machine
|
|
# Build Process Related
|
|
QUIET = YES # Suppress normal messages
|
|
WARNINGS = YES
|
|
WARN_IF_UNDOCUMENTED = NO # Change to YES for full coverage checks
|
|
WARN_IF_DOC_ERROR = YES
|
|
WARN_NO_PARAMDOC = YES
|
|
WARN_AS_ERROR = NO # Treat warnings as errors
|
|
WARN_FORMAT = "$file:$line: $text"
|
|
WARN_LOGFILE = doxygen_warnings.log
|
|
# Input Files
|
|
INPUT = ../minix/kernel \
|
|
../minix/lib/klib \
|
|
../minix/include \
|
|
../minix/kernel/arch/i386/include \
|
|
../minix/kernel/arch/earm/include
|
|
# Add other relevant paths: ../minix/drivers, ../minix/servers, etc.
|
|
INPUT_ENCODING = UTF-8
|
|
FILE_PATTERNS = *.c *.h *.S *.s *.asm *.md *.markdown *.dox
|
|
# Add C++ patterns if any C++ is used: *.cpp *.hpp *.cc *.hh *.cxx *.hxx *.C
|
|
RECURSIVE = YES
|
|
EXCLUDE = ../minix/kernel/arch/x86_64 # Example: if x86_64 is not current target
|
|
EXCLUDE_SYMLINKS = NO
|
|
EXCLUDE_PATTERNS = */.git/* \
|
|
*/build*/* \
|
|
*/tests/old/* \
|
|
*Doxyfile.userland # Exclude other Doxyfiles
|
|
EXCLUDE_SYMBOLS = # Symbols to exclude
|
|
# Source Browsing
|
|
SOURCE_BROWSER = YES
|
|
INLINE_SOURCES = NO # Set to YES to embed sources in docs (larger output)
|
|
STRIP_CODE_COMMENTS = YES
|
|
REFERENCED_BY_RELATION = YES
|
|
REFERENCES_RELATION = YES
|
|
REFERENCES_LINK_SOURCE = YES
|
|
SOURCE_TOOLTIPS = YES
|
|
USE_HTAGS = YES # If you use ctags/etags
|
|
VERBATIM_HEADERS = YES
|
|
# Alphabetical Index
|
|
ALPHABETICAL_INDEX = YES
|
|
COLS_IN_ALPHA_INDEX = 3
|
|
IGNORE_PREFIX = # Prefixes to ignore in index
|
|
# HTML Output
|
|
GENERATE_HTML = YES
|
|
HTML_OUTPUT = html # Subdirectory under OUTPUT_DIRECTORY
|
|
HTML_FILE_EXTENSION = .html
|
|
HTML_HEADER = # html_header.html # Custom header
|
|
HTML_FOOTER = # html_footer.html # Custom footer
|
|
HTML_STYLESHEET = # custom_doxygen.css # Custom stylesheet
|
|
HTML_EXTRA_STYLESHEET =
|
|
HTML_EXTRA_FILES = # docs/images # For logos, etc.
|
|
HTML_COLORSTYLE_HUE = 220 # Blueish
|
|
HTML_COLORSTYLE_SAT = 100
|
|
HTML_COLORSTYLE_GAMMA = 80
|
|
HTML_TIMESTAMP = YES
|
|
HTML_DYNAMIC_SECTIONS = YES
|
|
HTML_INDEX_NUM_ENTRIES = 100
|
|
GENERATE_DOCSET = NO
|
|
GENERATE_HTMLHELP = NO
|
|
GENERATE_CHI = NO
|
|
GENERATE_QHP = NO
|
|
DISABLE_INDEX = NO
|
|
GENERATE_TREEVIEW = YES # Creates a navigation tree
|
|
ENUM_VALUES_PER_LINE = 4
|
|
TREEVIEW_WIDTH = 250
|
|
EXT_LINKS_IN_WINDOW = YES
|
|
FORMULA_FONTSIZE = 10
|
|
FORMULA_TRANSPARENT = YES
|
|
USE_MATHJAX = NO # Set to YES if using MathJax for formulas
|
|
MATHJAX_FORMAT = HTML-CSS # Or NativeMML, TeX
|
|
MATHJAX_RELPATH = https://cdn.jsdelivr.net/npm/mathjax@3
|
|
MATHJAX_EXTENSIONS =
|
|
MATHJAX_CODEFILE =
|
|
SEARCHENGINE = YES # Enable built-in search
|
|
SERVER_BASED_SEARCH = NO
|
|
EXTERNAL_SEARCH = NO
|
|
SEARCHENGINE_URL =
|
|
SEARCHDATA_FILE = searchdata.xml
|
|
SEARCHINDEX_HASH = djb2
|
|
# LaTeX Output (Optional)
|
|
GENERATE_LATEX = NO
|
|
LATEX_OUTPUT = latex
|
|
LATEX_CMD_NAME = latex
|
|
MAKEINDEX_CMD_NAME = makeindex
|
|
COMPACT_LATEX = YES
|
|
PAPER_TYPE = a4
|
|
EXTRA_PACKAGES =
|
|
LATEX_HEADER =
|
|
LATEX_FOOTER =
|
|
LATEX_EXTRA_FILES =
|
|
PDF_HYPERLINKS = YES
|
|
USE_PDFLATEX = YES
|
|
LATEX_BATCHMODE = NO
|
|
LATEX_HIDE_INDICES = NO
|
|
LATEX_SOURCE_CODE = NO
|
|
LATEX_BIB_STYLE = plain
|
|
LATEX_TIMESTAMP = NO
|
|
# RTF Output (Optional)
|
|
GENERATE_RTF = NO
|
|
RTF_OUTPUT = rtf
|
|
COMPACT_RTF = YES
|
|
RTF_HYPERLINKS = NO
|
|
RTF_STYLESHEET_FILE =
|
|
RTF_EXTENSIONS_FILE =
|
|
# Man Page Output (Optional)
|
|
GENERATE_MAN = NO
|
|
MAN_OUTPUT = man
|
|
MAN_EXTENSION = .3
|
|
MAN_LINKS = NO
|
|
# XML Output (Optional)
|
|
GENERATE_XML = NO
|
|
XML_OUTPUT = xml
|
|
XML_PROGRAMLISTING = YES
|
|
XML_NS_MEMB_FILE_SCOPE = NO
|
|
# DOCBOOK Output (Optional)
|
|
GENERATE_DOCBOOK = NO
|
|
DOCBOOK_OUTPUT = docbook
|
|
# AutoGen Definitions (Optional)
|
|
GENERATE_AUTOGEN_DEF = NO
|
|
# Perl Module Output (Optional)
|
|
GENERATE_PERLMOD = NO
|
|
PERLMOD_LATEX = NO
|
|
PERLMOD_PRETTY = YES
|
|
PERLMOD_MAKEVAR_PREFIX =
|
|
# Preprocessor Settings
|
|
ENABLE_PREPROCESSING = YES
|
|
MACRO_EXPANSION = YES
|
|
EXPAND_ONLY_PREDEF = NO # Expand all macros
|
|
SEARCH_INCLUDES = YES
|
|
INCLUDE_PATH = ../minix/include \
|
|
../minix/kernel \
|
|
../minix/lib
|
|
INCLUDE_FILE_PATTERNS = *.h
|
|
PREDEFINED = __GNUC__ \
|
|
__x86_64__ \
|
|
CONFIG_SMP \
|
|
DEBUG \
|
|
KERNEL_SPACE \
|
|
KDEBUG \
|
|
"KASSERT(x)=" \
|
|
"_BitInt(n)=long long" \
|
|
"typeof(x)=__typeof__(x)" \
|
|
"restrict=" \
|
|
"_Static_assert(x,y)=" \
|
|
"__aligned(x)=__attribute__((aligned(x)))" \
|
|
"__packed=__attribute__((packed))" \
|
|
"__unused=__attribute__((unused))" \
|
|
"__deprecated__=__attribute__((deprecated))" \
|
|
"__dead=__attribute__((noreturn))" \
|
|
"__pure=__attribute__((pure))" \
|
|
"__const=__attribute__((const))" \
|
|
"__weak=__attribute__((weak))" \
|
|
"__always_inline=inline __attribute__((always_inline))" \
|
|
"__noinline=__attribute__((noinline))" \
|
|
"__returns_twice=__attribute__((returns_twice))" \
|
|
"__nonnull(x)=__attribute__((nonnull x))" \
|
|
"__printf_like(f,a)=__attribute__((format(printf,f,a)))" \
|
|
"__scanf_like(f,a)=__attribute__((format(scanf,f,a)))" \
|
|
"EXTERN=extern" \
|
|
"FORWARD=static" \
|
|
"PRIVATE=static" \
|
|
"PUBLIC=" \
|
|
"DEFINE_SPINLOCK(name)=simple_spinlock_t name" \
|
|
"DEFINE_SPINLOCK_IRQ(name)=spinlock_irq_t name" \
|
|
"NOT_REACHABLE=kprintf_nolock(\"FATAL: Unreachable code in %s at %d\\n\", __FILE__, __LINE__); panic(\"Not reachable\")" \
|
|
"BIT(n)=(1UL << (n))" \
|
|
"CEIL_DIV(a,b)=(((a) + (b) - 1) / (b))" \
|
|
"IS_ALIGNED(n, alignment)=(((n) % (alignment)) == 0)" \
|
|
"TRUE=1" \
|
|
"FALSE=0" \
|
|
"NULL=((void *)0)" \
|
|
"SELF=0" \
|
|
"ANY=0x7fff" \
|
|
"NONE=-1" \
|
|
"CLOCK_SYNC_HZ=60" \
|
|
"HZ=system_hz" \
|
|
"CONFIG_MAX_CPUS=1" # Adjust if actual is different
|
|
# Expand ifdef blocks to show all code paths
|
|
EXPAND_AS_DEFINED = # Add symbols here that should be treated as defined
|
|
SKIP_FUNCTION_MACROS = YES # Process function-like macros like functions
|
|
# External Reference Support
|
|
TAGFILES = # tagfile1=../../tagfile_dir/tagfile.xml=../../html_dir/
|
|
GENERATE_TAGFILE = # docs/kernel.tags
|
|
ALLEXTERNALS = NO
|
|
EXTERNAL_GROUPS = YES
|
|
EXTERNAL_PAGES = YES
|
|
PERL_PATH = /usr/bin/perl
|
|
# Dot Graph Visualization
|
|
CLASS_DIAGRAMS = YES
|
|
CLASS_GRAPH = YES
|
|
COLLABORATION_GRAPH = YES
|
|
GROUP_GRAPHS = YES
|
|
UML_LOOK = YES
|
|
UML_LIMIT_NUM_FIELDS = 10
|
|
TEMPLATE_RELATIONS = YES
|
|
INCLUDE_GRAPH = YES
|
|
INCLUDED_BY_GRAPH = YES
|
|
CALL_GRAPH = YES # Enable call graphs
|
|
CALLER_GRAPH = YES # Enable caller graphs
|
|
GRAPHICAL_HIERARCHY = YES
|
|
DIRECTORY_GRAPH = YES
|
|
DOT_IMAGE_FORMAT = svg # png, jpg, gif, svg
|
|
INTERACTIVE_SVG = YES # If svg, make it interactive
|
|
DOT_PATH = # /usr/bin/dot (usually found in PATH)
|
|
DOTFILE_DIRS =
|
|
MSCFILE_DIRS =
|
|
DIAFILE_DIRS =
|
|
DOT_FONTNAME = Sans
|
|
DOT_FONTSIZE = 10
|
|
DOT_FONTPATH =
|
|
PLANTUML_JAR_PATH =
|
|
PLANTUML_CFG_FILE =
|
|
PLANTUML_INCLUDE_PATH =
|
|
DOT_GRAPH_MAX_NODES = 100 # Increased from 50 for better overview
|
|
MAX_DOT_GRAPH_DEPTH = 0 # Unlimited depth
|
|
DOT_TRANSPARENT = NO
|
|
DOT_MULTI_TARGETS = YES
|
|
GENERATE_LEGEND = YES
|
|
DOT_CLEANUP = YES
|
|
# Search Options
|
|
SEARCHENGINE = YES # Already enabled, ensure it works
|
|
SERVER_BASED_SEARCH = NO
|
|
EXTERNAL_SEARCH = NO
|
|
# Other settings from user's Doxyfile.kernel
|
|
WARN_ON_MISSING_BRIEF = NO # Was YES, set to NO for now
|
|
JAVADOC_BANNER = YES
|
|
HTML_DYNAMIC_MENUS = YES
|
|
HTML_SIDEBAR_HIGHLIGHT = YES
|
|
DISABLE_म्EMPERL = NO
|
|
LOOKUP_CACHE_SIZE = 2
|
|
# User specific settings, ensuring these are present as requested
|
|
# (Many of these are defaults, but explicitly setting for clarity)
|
|
EXTRACT_ANON_NSPACES = NO
|
|
HIDE_UNDOC_MEMBERS = NO
|
|
HIDE_UNDOC_CLASSES = NO
|
|
HIDE_FRIEND_COMPOUNDS = NO
|
|
HIDE_IN_BODY_DOCS = NO
|
|
INTERNAL_DOCS = NO
|
|
CASE_SENSE_NAMES = YES # Default for C/C++
|
|
HIDE_SCOPE_NAMES = NO
|
|
SHOW_INCLUDE_FILES = YES
|
|
SHOW_GROUPED_MEMB_INC = NO
|
|
FORCE_LOCAL_INCLUDES = NO
|
|
INLINE_INFO_AFTER_REMOTE = NO
|
|
STRIP_UNDERSCORED_NAMES = NO
|
|
TYPEDEF_HIDES_STRUCT = NO
|
|
SYMBOL_CACHE_SIZE = 0
|
|
# Further graph settings
|
|
DOT_MAX_ semplice_NODES = 100 # Corrected typo from example to MAX_DOT_GRAPH_NODES
|
|
DOT_MAX_ semplice_DEPTH = 0 # Corrected typo
|
|
# Ensure these C specific settings are optimal
|
|
CLANG_ASSISTED_PARSING = NO # Set to YES if clang is available and configured
|
|
CLANG_OPTIONS =
|
|
CLANG_DATABASE_PATH =
|
|
# End of Doxyfile.kernel configuration
|