Code formatting - portapack-mayhem/mayhem-firmware GitHub Wiki
For this we are using clang format version 18. All the config for this is in the .clang-format file.
Pre-built clang-format 18 binaries are provided for all platforms. To indent the entire project, run the appropriate script from the root of the repository:
Linux/Mac:
./format-code.shWindows (PowerShell):
.\format-code.ps1
⚠️ Before pushing, always run the provided script above. IDE-integrated clang-format (VS Code, CLion, etc.) may produce different formatting results even at the same version and with the same.clang-formatfile, which can cause the GitHub format-check pipeline to fail.
Make sure you have C/C++ extension by Microsoft installed and it should automatically pick up your .clang-format file. You can use the IDE's auto-indent while developing, but do not rely on it as a substitute for the provided script before committing.
CLion has built in clang-format, just press Ctrl + Shift + L (Windows and Linux) to auto-indent while developing with the .clang-format configure file within project directory. However, do not rely on it as a substitute for the provided script before committing.
Note: KDE default keymap is Alt + Shift + L
The pre-built binaries are stored under tools/clang-format-bin/<version>/ with one subdirectory per supported platform:
tools/clang-format-bin/
└── 18.1.8/
├── linux-x86_64/
│ ├── clang-format
│ └── lib/libtinfo.so.5
├── linux-arm64/
│ ├── clang-format
│ └── lib/libtinfo.so.5
├── macos-arm64/
│ └── clang-format
└── windows-x86_64/
└── clang-format.exe
The root format-code.sh and format-code.ps1 scripts delegate to tools/clang-format.sh and tools/clang-format.ps1 respectively, which automatically select the correct binary for the current OS and architecture.
- Edit
tools/fetch-clang-format.shand update the version number. - Run the script, it will download the binaries and create the appropriate versioned directories under
tools/clang-format-bin/. Note that downloading from the LLVM project servers can take a while. - Test each downloaded binary. Some platforms may require additional libraries (e.g.
libtinfo.so.5for Linux). If so, provide the library in alib/subdirectory alongside the binary.tools/get_libtinfo_linux_x86_64_arm64.shhas been left as a reference example, you can copy and adjust it for any future library needs. - Edit
tools/clang-format.shandtools/clang-format.ps1and set the version to the newly downloaded one.
Multiple versions of the binaries can coexist under
tools/clang-format-bin/. The active version is whichever is set intools/clang-format.shandtools/clang-format.ps1, making it easy to switch between versions as needed.