Say hello to Bob the builder! 👷
Bob will help you build all sorts of different projects, as he's the buildsystem for the AQUA ecosystem!
https://www.youtube.com/watch?v=0ldh_Cw6W0c
If you don't already have Bob on your system, you can bootstrap him as such:
sh build.sh
Then, you can install him to your system with:
sh-bin/bob install
Bob always loves to give a helping hand! 🤝
To build a project with Bob, navigate to its root directory and run:
bob build
Bob's favourite pastime is running! 🏃
To run a project with Bob, run:
bob run
Bob is a bona fide science guy in a labcoat! 🧪
To test a project with Bob, run:
bob test
Bob always helps his grandma install Linux Mint on her computer! 👵
To install a project with Bob, run:
bob install
Bob is eternal... 💀
To create and run a new project from a skeleton, run:
bob skeleton c project
cd project
bob run
Bob isn't one of those idiots who says "hurr durr language survurs r fur soydevs, real programmurs don't need cuz never make mistakes" (based on true events). Bob is smart; he knows good tooling makes him a better, more productive developer! 🛠
To generate an LSP configuration for your project, run:
bob lsp
Bob used to work at an Amazon distribution centre! 📦
To create a ZPK package, run:
bob package zpk
Here's a list of projects which use Bob:
- Bob the Builder
- IAR
- Umber
- aquaBSD Aquariums
aqua-unix
aqua-kos
aqua-devices
- LLN Gamejam 2023
- iface
libmkfs_msdos
libcopyfile
I use this list to not forget to update them when I add a new feature to Bob!
- Written in C and with a very basic project structure, so can easily be bootstrapped.
- Automatically installs (certain) dependencies.
- Uses Wren as a dynamic configuration language because regular configuration files sucks.
- Centralized system for building, testing, and installing.
- Logging class (like with
Log.error
,Log.warn
) to provide feedback from within build configurations. - Works with AQUA, i.e. AQUA projects may be built and run just as easily as any other project using Bob.
- Easy method for building out a project skeleton from a template (serves the same purpose as
aqua-manager
did). - Packaging (AQUA ZPK & FreeBSD PKG formats).
- Understands other popular buildsystems (simple makefile, cmake, autoconf, qmake, setup.py, &c) to eliminate tmw you have to google stuff when you just want something to compile 🤪
- Watch source files to automatically rebuild them.
- Can build in sandboxes (local CI in background truly continuously by watching source files instead of just on commits? integration with other CI providers, e.g. with Cirrus CI by Automatically generating
.cirrus.yml
?). - Proper documentation not only on how to use bob, but also on how to write a
build.wren
configuration. - Warn against two commands outputting to the same file.
- Integration with
clangd
? Like we could automatically generate a.clangd
file with the options passed to the C compiler & linker. - If child execution fails from e.g. a segfault, say so (this is for
run
).
Disregard these, these are personal notes for development.
- wren is okay with
wrenGetListCount
on a*Sequence
, which happens becauseIS_LIST
on a sequence value returns true (it shouldn't right? because that breaks things when doingAS_LIST
on it to get aValueBuffer
afterwards...) - the same problem as above seems to happen with foreign type slots