Source tree reorganization: - Move StarForth v3 engine to v3/ (src/, include/, Makefile) - Move kernel to kernel/ (src/, include/, linker/, Makefile) - Create v4/ skeleton for F18-ISA golden model (DECOMPOSITION.md, JUSTIFICATION.md) - Move FABRIC-0..4.md to docs/fabric/ - Move ONTOLOGY.md and ROADMAP.md to docs/ Board infrastructure: - Add boards/ser5/, boards/raspi/, boards/milkv/, boards/zynq7020/ - Each board has board.mk (ISA, CPU flags, boot recipe) and README.md - Root Makefile becomes thin dispatcher: boot_image, all, clean, docs take TARGET - make boot_image TARGET=SER5|RASPI|MILKV builds one GPT/MBR image per board - ZYNQ7020 target exists but stops with clear error (ARMv7 port not built yet) - scripts/mkdiskimage.sh builds disk images for all boards Docs pipeline: - docs/book/ with LaTeX master (main.tex) and Makefile - pandoc converts Markdown to LaTeX at build time - Two Lua filters: table-widths.lua (wide tables wrap), code-breaks.lua (inline code breaks) - make docs builds single PDF (754 pages, 0 missing characters) - make docs TARGET=<board> adds board appendix - build/docs/<book|board>/meta.tex stamps git commit into PDF Bug fixes: - 42 include paths that only worked by accident now use correct relative paths - clang-18 hardcode replaced with configurable CC variable (fixed aarch64 build) - Pi 5: kernel_2712.img linked at 0x80000, .bss zeroed, memory reserved - Doxyfile, .clang-tidy, README.md, Kconfig paths updated Verified: - Hosted v3 build passes 1012 tests, 0 failures - SER5 image boots in QEMU (OVMF), POST passes, K exact (65536 = Q48_ONE) - Milk-V image boots in QEMU (OpenSBI + U-Boot + bootefi), POST passes - make clean TARGET=<board> removes only that board and its ISA objects - make all builds all boards, hosted v3, and docs in one run Co-authored-by: Junie <junie@jetbrains.com>
162 lines
5.5 KiB
TeX
162 lines
5.5 KiB
TeX
% docs/book/main.tex -- master file of the single LithosAnanke book.
|
|
%
|
|
% Built by `make docs [TARGET=<board>]` (docs/book/Makefile) with xelatex.
|
|
% Fragments named below (ontology, fabric-0, ...) are generated by pandoc
|
|
% from the Markdown listed in docs/book/Makefile's CHAPTERS into
|
|
% build/docs/gen/; meta.tex is generated per build. Neither is committed.
|
|
\documentclass[11pt,openany]{book}
|
|
|
|
\usepackage{amsmath,amssymb}
|
|
\usepackage{fontspec}
|
|
% fonts-dejavu-core has no serif/sans italics (fonts-dejavu-extra does); when a
|
|
% shape is missing, slant the upright one rather than silently drop emphasis.
|
|
\setmainfont{DejaVu Serif}[AutoFakeSlant=0.2]
|
|
\setsansfont{DejaVu Sans}[AutoFakeSlant=0.2]
|
|
\setmonofont{DejaVu Sans Mono}[Scale=0.85]
|
|
\newfontfamily\symbolfont{DejaVu Sans}
|
|
|
|
\usepackage[letterpaper,margin=1in]{geometry}
|
|
\usepackage{xcolor}
|
|
\usepackage{graphicx}
|
|
\usepackage{longtable,booktabs,array,calc,multirow}
|
|
\usepackage{fancyvrb}
|
|
\usepackage[normalem]{ulem}
|
|
\usepackage{enumitem}
|
|
\usepackage{newunicodechar}
|
|
\usepackage{pgfplots}
|
|
\usepackage{pgfplotstable}
|
|
\pgfplotsset{compat=1.18}
|
|
\usepackage[hidelinks]{hyperref}
|
|
\usepackage{bookmark}
|
|
|
|
% --- what pandoc's LaTeX fragments expect (normally from its own template)
|
|
\providecommand{\tightlist}{\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
|
|
\providecommand{\pandocbounded}[1]{#1}
|
|
\providecommand{\st}[1]{\sout{#1}}
|
|
\newcounter{none} % pandoc: {\def\LTcaptype{none} ...} marks unnumbered tables
|
|
\usepackage{etoolbox}
|
|
\makeatletter
|
|
\def\fnum@table{\tablename~\thetable}
|
|
\patchcmd\longtable{\par}{\if@noskipsec\mbox{}\fi\par}{}{}
|
|
\makeatother
|
|
\usepackage{fvextra}
|
|
\input{pandoc-highlighting}
|
|
% Code and diagrams are wider than the page in places: wrap, never overflow.
|
|
\RecustomVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\},breaklines,breakanywhere,fontsize=\small}
|
|
\RecustomVerbatimEnvironment{verbatim}{Verbatim}{breaklines,breakanywhere,fontsize=\small}
|
|
\setlistdepth{9}
|
|
\renewlist{itemize}{itemize}{9}
|
|
\setlist[itemize]{label=\textbullet}
|
|
\renewlist{enumerate}{enumerate}{9}
|
|
\setlist[enumerate]{label=\arabic*.}
|
|
% Running heads: chapter on the left page, section on the right, both cut to
|
|
% the page width (several design-record titles are a full sentence long).
|
|
\usepackage{fancyhdr}
|
|
\usepackage[fit]{truncate}
|
|
\pagestyle{fancy}
|
|
\fancyhf{}
|
|
\renewcommand{\chaptermark}[1]{\markboth{#1}{}}
|
|
\renewcommand{\sectionmark}[1]{\markright{#1}}
|
|
\fancyhead[LE]{\small\truncate{\dimexpr\headwidth-3em}{\leftmark}}
|
|
\fancyhead[RO]{\small\truncate{\dimexpr\headwidth-3em}{\rightmark}}
|
|
\fancyhead[RE,LO]{\small\thepage}
|
|
\renewcommand{\headrulewidth}{0.4pt}
|
|
\setlength{\headheight}{14pt}
|
|
\fancypagestyle{plain}{\fancyhf{}\fancyfoot[C]{\small\thepage}\renewcommand{\headrulewidth}{0pt}}
|
|
\setlength{\emergencystretch}{3em}
|
|
\setlength{\parindent}{0pt}
|
|
\setlength{\parskip}{0.5em}
|
|
|
|
% --- glyphs DejaVu Serif lacks: the status marks used across the docs
|
|
\newunicodechar{✅}{{\symbolfont ✔}}
|
|
\newunicodechar{✓}{{\symbolfont ✓}}
|
|
\newunicodechar{❌}{{\symbolfont ✘}}
|
|
\newunicodechar{✗}{{\symbolfont ✗}}
|
|
\newunicodechar{⬜}{{\symbolfont ☐}}
|
|
\newunicodechar{⭐}{{\symbolfont ★}}
|
|
\newunicodechar{🔶}{{\symbolfont ◆}}
|
|
\newunicodechar{⚠}{{\symbolfont ⚠}}
|
|
\newunicodechar{📋}{}
|
|
\newunicodechar{🐛}{[bug]}
|
|
\newunicodechar{🎯}{[goal]}
|
|
\newunicodechar{🟡}{{\symbolfont ●}}
|
|
\newunicodechar{📍}{{\symbolfont ▸}}
|
|
\newunicodechar{🔓}{[unlocked]}
|
|
\newunicodechar{❓}{?}
|
|
\newunicodechar{⟺}{\ensuremath{\Longleftrightarrow}}
|
|
\newunicodechar{⋯}{\ensuremath{\cdots}}
|
|
\newunicodechar{^^^^fe0f}{}
|
|
|
|
% --- the documents number their own sections (§III.1, D-3, ...)
|
|
\setcounter{secnumdepth}{0}
|
|
\setcounter{tocdepth}{1}
|
|
|
|
\input{meta}
|
|
|
|
% \datasource{path/to/data.csv}: cite the data behind a figure or table.
|
|
% Every figure or table of measured numbers reads its CSV at build time
|
|
% (\addplot table / \pgfplotstabletypeset) and is followed by this line, so
|
|
% the reader can find the exact file at the exact commit.
|
|
\newcommand{\datasource}[1]{%
|
|
\par{\small Data: \texttt{\detokenize{#1}} at commit \texttt{\bookcommit}.}\par}
|
|
|
|
\title{LithosAnanke and StarForth}
|
|
\author{}
|
|
\date{Built \bookdate{} from commit \texttt{\bookcommit}%
|
|
\ifx\bookboard\empty\else\\Board appendix: \bookboard\fi}
|
|
|
|
\begin{document}
|
|
\frontmatter
|
|
\maketitle
|
|
\tableofcontents
|
|
|
|
\chapter{About this book}
|
|
This book is generated from the repository by \texttt{make docs}. Each
|
|
chapter below is still maintained as the Markdown file named in the table and
|
|
converted at build time; a chapter moves into LaTeX source when it is
|
|
rewritten. Part~III is the design record: those documents are archival and
|
|
are reproduced as written, including their struck-through corrections.
|
|
|
|
\begin{longtable}{@{}ll@{}}
|
|
\toprule
|
|
Chapter & Source \\
|
|
\midrule
|
|
\endhead
|
|
Ontology & \texttt{docs/ONTOLOGY.md} \\
|
|
Roadmap & \texttt{docs/ROADMAP.md} \\
|
|
Boot targets & \texttt{boards/README.md} \\
|
|
v4 justification & \texttt{docs/v4.0.0/JUSTIFICATION.md} \\
|
|
v4 decomposition & \texttt{docs/v4.0.0/DECOMPOSITION.md} \\
|
|
FABRIC-0 \dots{} FABRIC-4 & \texttt{docs/fabric/FABRIC-*.md} \\
|
|
Board appendix (\texttt{TARGET=}) & \texttt{boards/<board>/README.md} \\
|
|
\bottomrule
|
|
\end{longtable}
|
|
|
|
\mainmatter
|
|
|
|
\part{The system}
|
|
\input{ontology}
|
|
\input{roadmap}
|
|
\input{boards}
|
|
|
|
\part{StarForth v4}
|
|
\input{justification}
|
|
\input{decomposition}
|
|
|
|
\part{Design record (FABRIC series)}
|
|
\input{fabric-0}
|
|
\input{fabric-1}
|
|
\input{fabric-2}
|
|
\input{fabric-3}
|
|
\input{fabric-3-5}
|
|
\input{fabric-3-6}
|
|
\input{fabric-3-7}
|
|
\input{fabric-4}
|
|
|
|
\ifdefined\bookboardappendix
|
|
\appendix
|
|
\input{\bookboardappendix}
|
|
\fi
|
|
|
|
\end{document}
|