Puzzle box
This repository contains the source code for the puzzle framework designed and implemented during the 2023-2024 run of the Puzzlebox project. This year's run of the project consists of only software students, and was developed using the hardware from the 21-22 run of the project.
The software in this repository should be easily portable to various other microcontrollers, and a recommendation is made in the design document. Please see the handover document first for more details.
[!NOTE] This project was mostly developed on Linux. All subfolders/modules/libraries use CMake, and should build cross-platform when using CMake+Ninja. This has not yet been verified.
Please note that most subfolders use symbolic links to the lib folder, which may not work correctly if you clone the repository under a filesystem or operating system that does not support these.
Documentation
If you are viewing this page from Doxygen, please take a look at the components tab for a comprehensive list of components within this project.
Project documentation is available in the docs folder, and all code is documented using Doxygen. To generate HTML docs, run
$ make doxygen
and open the generated HTML files in a browser. A rendered copy of this documentation is also hosted unofficially at pipeframe.
Tidyness
Please keep this repository tidy by being aware of the following conventions:
An
.editorconfig
file is provided in this repository. Please install the EditorConfig plugin for your text editor of choice to automatically use these.There are also
.clang-tidy
and.clang-format
files, which can be enforced by running$ make format
Libraries
Libraries are stored in the lib folder, and this folder is symlinked to from each subfolder in the project for convenience (allows CMake to include out-of-tree modules). The lib folder contains a mix of direct Git submodules and custom libraries specific to this project. (Most) external dependencies are tracked as git submodules, exceptions are in the puzzle folder.
TL;DR: If something is complaining about missing files
git submodule update --init --recursive --depth 1
until your problems go away.
lazy.mk
lazy.mk
is a file made by Loek,
and includes some rules for forwarding make
calls to
cmake
and ninja
. This is purely for
convenience, and should not become an essential part of the build
system. This file should be included at the end of a regular
makefile. Any targets defined in a makefile can be used as-is, while
targets that would otherwise be unknown will be forwarded to Ninja.