This repository includes templates and scripts intended to make it easy to get started writing CBMC proofs for your code. The first script installs proof infrastructure in the form of a few directories containing code, templates, and Makefiles that facilitate writing CBMC proofs in general. The second script installs, for a particular proof, a directory containing skeletons of all the files needed to start writing that proof.
The script scripts/setup.py will set up the infrastructure for CBMC proofs.
- Choose the path to the source root (eg, /usr/project)
- Choose the path to a directory under the source root that should hold the infrastructure (eg, /usr/project/cbmc)
- Submodule the AWS-templates-for-CBMC repository into this directory (eg,
/usr/project/cbmc/aws-templates-for-cbmc)
cd /usr/project/cbmc git submodule add https://github.com/awslabs/aws-templates-for-cbmc-proofs.git aws-templates-for-cbmc-proofs
- Use the script
aws-templates-for-cbmc-proofs/scripts/setup.py
to setup the standard directory structure for CBMC proof.The script will ask for the path to the source rootcd /usr/project/cbmc python3 aws-templates-for-cbmc-proofs/scripts/setup.py
/usr/project
. The script will install the directories- include: contains include files for the proofs
- sources: contains source code for the proofs
- stubs: contains stubs for the proofs
- proofs: contains the proofs themselves (the proof root).
The script scripts/setup-proof.py will set up a directory for a CBMC proof.
- Change to a directory under the proof root (/usr/project/cbmc/proofs)
- Run the script
aws-templates-for-cbmc/scripts/setup-proof.py
and give- The name of the function under test.
- The path to the source file defining the function under test.
- The path to the source root
The script will create a directory named for the function, and will install files needed to run the proof.
You can cut and paste into the files, and type make
to run and debug
the proof. For more details, see the instructions in the training
materials repository.
See CONTRIBUTING for more information.
This project is licensed under the Apache-2.0 License.