Architecture
Project structure
The project is structured in folders as follows:
- .github contains files used by the repository itself and Github Actions workflows.
- python contains all bindings for Python.
- regression contains Proof Harness to validate ESBMC tool.
- scripts contains all helper tools, configurations and modules that aren’t used directly by ESBMC.
- src Source code of ESBMC.
- unit Unit test cases.
ESBMC repository relies on GitHub Actions for all its CI/CD needs. The workflows files are all inside the .github/workflows and are described as follows:
- benchexec: This workflow does a run of benchexec in a given branch. It is only used by manual dispatch.
- build: This is the main build workflow, which is invoked for every push/PR in ESBMC. It works by running fuzzing and unit tests and by: (1) configuring a build environment for macOS, Linux, and Windows; (2) Building the system and saving the results as artifacts; (3) Running the regression and unit tests.
- linter: This applies linters over the code.
- release: Similar to the build, but generates release builds of ESBMC and creates a new release at the GitHub page.
- sanitizers: Does a quick build of ESBMC with clang sanitizers enabled.