LIBRA (Luigi buIld Reusable Automation)
Motivation
No existing C/C++/CUDA build system supported automatic file discovery like
make
via globs.No existing C/C++/CUDA build system provided 100% reusability across projects (assuming some conventions for file naming, directory layout, etc.). I found myself frequently copying and pasting
CmakeLists.txt
(or whatever the tool’s configuration was) between projects, as I added and when I find a new flag I want to add, or a new static analysis checker, etc., I would have to go and add it to EVERY project.No existing C/C++/CUDA build systems supported doing things like running one or more static analyzers on a repository, formatting the repository, building and running tests, etc., using
make check
,make format
, ormake tests
, or other simple cmdline syntax.
Flavors
LIBRA can be used in any of the following mutually exclusive ways:
Build system middleware, providing nice syntactic sugar for automating various things, but not: packaging, versioning, installation, and deployment. The use case here is to support using a package manager such as conan to manage package-y things, and let LIBRA handle all the build system-y things (separation of responsibilities), rather than having a package manager or LIBRA do everything.
As a stand-alone cmake framework, including packaging, versioning, installation, and deployment.
This documentation has 3 parts, listed in probable descending order of interest:
- High-Level Architectural Guide
- OOP Software Design Principles And Patterns
- Core Development Guide
- C Development Guide
- C++ Development Guide
- Python Development Guide
- CUDA Development Guide
- Git Usage Guide
- Git Commit Guide
- Github Issues Usage Guide
- ld/Linker Script Development Guide
- General Development Workflow
- Helpful Links
- Bazel Resources