Skip to content

Commit 4368385

Browse files
author
Daniel Kroening
committed
move developer tips from COMPILING to CODING_STANDARD
1 parent 47f413a commit 4368385

File tree

2 files changed

+127
-128
lines changed

2 files changed

+127
-128
lines changed

CODING_STANDARD.md

+94
Original file line numberDiff line numberDiff line change
@@ -240,3 +240,97 @@ or use a symbolic link. Then, when running git commit, you should get the
240240
linter output (if any) before being prompted to enter a commit message. To
241241
bypass the check (e.g. if there was a false positive), add the option
242242
`--no-verify`.
243+
244+
# CODE COVERAGE
245+
246+
Code coverage metrics are provided using gcov and lcov. Ensure that you have
247+
installed lcov from http://ltp.sourceforge.net/coverage/lcov.php note for
248+
ubuntu lcov is available in the standard apt-get repos.
249+
250+
To get coverage metrics run the following script from the regression directory:
251+
```
252+
get_coverage.sh
253+
```
254+
This will:
255+
1) Rebuild CBMC with gcov enabled
256+
2) Run all the regression tests
257+
3) Collate the coverage metrics
258+
4) Provide an HTML report of the current coverage
259+
260+
# USING CLANG-FORMAT
261+
262+
CBMC uses clang-format to ensure that the formatting of new patches is readable
263+
and consistent. There are two main ways of running clang-format: remotely, and
264+
locally.
265+
266+
## RUNNING CLANG-FORMAT REMOTELY
267+
268+
When patches are submitted to CBMC, they are automatically run through
269+
continuous integration (CI). One of the CI checks will run clang-format over
270+
the diff that your pull request introduces. If clang-format finds formatting
271+
issues at this point, the build will be failed, and a patch will be produced
272+
in the CI output that you can apply to your code so that it conforms to the
273+
style guidelines.
274+
275+
To apply the patch, copy and paste it into a local file (`patch.txt`) and then
276+
run:
277+
```
278+
patch -p1 -i patch.txt
279+
```
280+
Now, you can commit and push the formatting fixes.
281+
282+
## RUNNING CLANG-FORMAT LOCALLY
283+
284+
### INSTALLATION
285+
286+
To avoid waiting until you've made a PR to find formatting issues, you can
287+
install clang-format locally and run it against your code as you are working.
288+
289+
Different versions of clang-format have slightly different behaviors. CBMC uses
290+
clang-format-3.8 as it is available the repositories for Ubuntu 16.04 and
291+
Homebrew.
292+
To install on a Unix-like system, try installing using the system package
293+
manager:
294+
```
295+
apt-get install clang-format-3.8 # Run this on Ubuntu, Debian etc.
296+
brew install [email protected] # Run this on a Mac with Homebrew installed
297+
```
298+
299+
If your platform doesn't have a package for clang-format, you can download a
300+
pre-built binary, or compile clang-format yourself using the appropriate files
301+
from the [LLVM Downloads page](http://releases.llvm.org/download.html).
302+
303+
An installer for Windows (along with a Visual Studio plugin) can be found at
304+
the [LLVM Snapshot Builds page](http://llvm.org/builds/).
305+
306+
### FORMATTING A RANGE OF COMMITS
307+
308+
Clang-format is distributed with a driver script called git-clang-format-3.8.
309+
This script can be used to format git diffs (rather than entire files).
310+
311+
After committing some code, it is recommended to run:
312+
```
313+
git-clang-format-3.8 upstream/develop
314+
```
315+
*Important:* If your branch is based on a branch other than `upstream/develop`,
316+
use the name or checksum of that branch instead. It is strongly recommended to
317+
rebase your work onto the tip of the branch it's based on before running
318+
`git-clang-format` in this way.
319+
320+
### RETROACTIVELY FORMATTING INDIVIDUAL COMMITS
321+
322+
If your works spans several commits and you'd like to keep the formatting
323+
correct in each individual commit, you can automatically rewrite the commits
324+
with correct formatting.
325+
326+
The following command will stop at each commit in the range and run
327+
clang-format on the diff at that point. This rewrites git history, so it's
328+
*unsafe*, and you should back up your branch before running this command:
329+
```
330+
git filter-branch --tree-filter 'git-clang-format-3.8 upstream/develop' \
331+
-- upstream/develop..HEAD
332+
```
333+
*Important*: `upstream/develop` should be changed in *both* places in the
334+
command above if your work is based on a different branch. It is strongly
335+
recommended to rebase your work onto the tip of the branch it's based on before
336+
running `git-clang-format` in this way.

COMPILING.md

+33-128
Original file line numberDiff line numberDiff line change
@@ -19,41 +19,36 @@ We assume that you have a Debian/Ubuntu or Red Hat-like distribution.
1919

2020
1. You need a C/C++ compiler, Flex and Bison, and GNU make.
2121
The GNU Make needs to be version 3.81 or higher.
22-
On Debian-like distributions, do
22+
On Debian-like distributions, do as root:
2323
```
2424
apt-get install g++ gcc flex bison make git libwww-perl patch
2525
```
26-
On Red Hat/Fedora or derivates, do
26+
On Red Hat/Fedora or derivates, do as root:
2727
```
28-
yum install gcc gcc-c++ flex bison perl-libwww-perl patch devtoolset-6
28+
dnf install gcc gcc-c++ flex bison perl-libwww-perl patch
2929
```
3030
Note that you need g++ version 5.0 or newer.
3131

3232
To compile JBMC, you additionally need the JDK and the java-models-library.
33-
For the JDK, on Debian-like distributions, do
33+
For the JDK, on Debian-like distributions, do as root:
3434
```
3535
apt-get install openjdk-8-jdk
3636
```
37-
On Red Hat/Fedora or derivates, do
37+
On Red Hat/Fedora or derivates, do as root:
3838
```
39-
yum install java-1.8.0-openjdk-devel
39+
dnf install java-1.8.0-openjdk-devel
4040
```
4141

4242
2. As a user, get the CBMC source via
4343
```
4444
git clone https://github.com/diffblue/cbmc cbmc-git
45+
cd cbmc-git
4546
```
4647

47-
3. On Debian or Ubuntu, do
48+
3. To compile, do
4849
```
49-
make -C cbmc-git/src minisat2-download
50-
make -C cbmc-git/src
51-
```
52-
On Redhat/Fedora etc., do
53-
```
54-
scl enable devtoolset-6 bash
55-
make -C cbmc-git/src minisat2-download
56-
make -C cbmc-git/src
50+
make -C src minisat2-download
51+
make -C src
5752
```
5853

5954
4. Linking against an IPASIR SAT solver
@@ -71,8 +66,8 @@ We assume that you have a Debian/Ubuntu or Red Hat-like distribution.
7166

7267
5. To compile JBMC, do
7368
```
74-
make -C cbmc-git/jbmc/src java-models-library-download
75-
make -C cbmc-git/jbmc/src
69+
make -C jbmc/src java-models-library-download
70+
make -C jbmc/src
7671
```
7772

7873
# COMPILATION ON SOLARIS 11
@@ -87,16 +82,17 @@ We assume that you have a Debian/Ubuntu or Red Hat-like distribution.
8782
```
8883
export PATH=/opt/csw/bin:$PATH
8984
git clone https://github.com/diffblue/cbmc cbmc-git
85+
cd cbmc-git
9086
```
9187
3. To compile CBMC, type
9288
```
93-
gmake -C cbmc-git/src minisat2-download DOWNLOADER=wget TAR=gtar
94-
gmake -C cbmc-git/src
89+
gmake -C src minisat2-download DOWNLOADER=wget TAR=gtar
90+
gmake -C src
9591
```
9692
4. To compile JBMC, type
9793
```
98-
gmake -C cbmc-git/jbmc/src java-models-library-download
99-
gmake -C cbmc-git/jbmc/src
94+
gmake -C jbmc/src java-models-library-download
95+
gmake -C jbmc/src
10096
```
10197

10298
# COMPILATION ON FREEBSD 11
@@ -115,13 +111,13 @@ We assume that you have a Debian/Ubuntu or Red Hat-like distribution.
115111
```
116112
3. To compile CBMC, do
117113
```
118-
gmake -C cbmc-git/src minisat2-download
119-
gmake -C cbmc-git/src
114+
gmake -C src minisat2-download
115+
gmake -C src
120116
```
121117
4. To compile JBMC, do
122118
```
123-
gmake -C cbmc-git/jbmc/src java-models-library-download
124-
gmake -C cbmc-git/jbmc/src
119+
gmake -C jbmc/src java-models-library-download
120+
gmake -C jbmc/src
125121
```
126122

127123
# COMPILATION ON MACOS X
@@ -137,16 +133,17 @@ Follow these instructions:
137133
2. Then get the CBMC source via
138134
```
139135
git clone https://github.com/diffblue/cbmc cbmc-git
136+
cd cbmc-git
140137
```
141138
3. To compile CBMC, do
142139
```
143-
make -C cbmc-git/src minisat2-download
144-
make -C cbmc-git/src
140+
make -C src minisat2-download
141+
make -C src
145142
```
146143
4. To compile JBMC, do
147144
```
148-
make -C cbmc-git/jbmc/src java-models-library-download
149-
make -C cbmc-git/jbmc/src
145+
make -C jbmc/src java-models-library-download
146+
make -C jbmc/src
150147
```
151148

152149
# COMPILATION ON WINDOWS
@@ -163,6 +160,7 @@ Follow these instructions:
163160
2. Get the CBMC source via
164161
```
165162
git clone https://github.com/diffblue/cbmc cbmc-git
163+
cd cbmc-git
166164
```
167165
3. Depending on your choice of compiler:
168166
1. To compile with Visual Studio, change the second line of `src/config.inc`
@@ -171,19 +169,19 @@ Follow these instructions:
171169
BUILD_ENV = MSVC
172170
```
173171
Open the Developer Command Prompt for Visual Studio, then start the
174-
Cygwin shell with
175-
```
176-
bash.exe -login
177-
```
172+
Cygwin shell with
173+
```
174+
bash.exe -login
175+
```
178176
2. To compile with MinGW, use Cygwin setup to install a mingw g++ compiler
179177
package, i.e. one of `mingw{32,64}-{x86_64,i686}-gcc-g++`. You may also
180178
have to adjust the section in `src/common` that defines `CC` and `CXX`
181179
for BUILD_ENV = Cygwin.
182180
Then start the Cygwin shell.
183181
4. In the Cygwin shell, type
184182
```
185-
make -C cbmc-git/src DOWNLOADER=wget minisat2-download
186-
make -C cbmc-git/src
183+
make -C src DOWNLOADER=wget minisat2-download
184+
make -C src
187185
```
188186
189187
(Optional) A Visual Studio project file can be generated with the script
@@ -278,96 +276,3 @@ To work with Eclipse, do the following:
278276
5. Click "Finish"
279277
6. Select Project -> Build All
280278
281-
# CODE COVERAGE
282-
283-
Code coverage metrics are provided using gcov and lcov. Ensure that you have
284-
installed lcov from http://ltp.sourceforge.net/coverage/lcov.php note for
285-
ubuntu lcov is available in the standard apt-get repos.
286-
287-
To get coverage metrics run the following script from the regression directory:
288-
```
289-
get_coverage.sh
290-
```
291-
This will:
292-
1) Rebuild CBMC with gcov enabled
293-
2) Run all the regression tests
294-
3) Collate the coverage metrics
295-
4) Provide an HTML report of the current coverage
296-
297-
# USING CLANG-FORMAT
298-
299-
CBMC uses clang-format to ensure that the formatting of new patches is readable
300-
and consistent. There are two main ways of running clang-format: remotely, and
301-
locally.
302-
303-
## RUNNING CLANG-FORMAT REMOTELY
304-
305-
When patches are submitted to CBMC, they are automatically run through
306-
continuous integration (CI). One of the CI checks will run clang-format over
307-
the diff that your pull request introduces. If clang-format finds formatting
308-
issues at this point, the build will be failed, and a patch will be produced
309-
in the CI output that you can apply to your code so that it conforms to the
310-
style guidelines.
311-
312-
To apply the patch, copy and paste it into a local file (`patch.txt`) and then
313-
run:
314-
```
315-
patch -p1 -i patch.txt
316-
```
317-
Now, you can commit and push the formatting fixes.
318-
319-
## RUNNING CLANG-FORMAT LOCALLY
320-
321-
### INSTALLATION
322-
323-
To avoid waiting until you've made a PR to find formatting issues, you can
324-
install clang-format locally and run it against your code as you are working.
325-
326-
Different versions of clang-format have slightly different behaviors. CBMC uses
327-
clang-format-3.8 as it is available the repositories for Ubuntu 16.04 and
328-
Homebrew.
329-
To install on a Unix-like system, try installing using the system package
330-
manager:
331-
```
332-
apt-get install clang-format-3.8 # Run this on Ubuntu, Debian etc.
333-
brew install [email protected] # Run this on a Mac with Homebrew installed
334-
```
335-
336-
If your platform doesn't have a package for clang-format, you can download a
337-
pre-built binary, or compile clang-format yourself using the appropriate files
338-
from the [LLVM Downloads page](http://releases.llvm.org/download.html).
339-
340-
An installer for Windows (along with a Visual Studio plugin) can be found at
341-
the [LLVM Snapshot Builds page](http://llvm.org/builds/).
342-
343-
### FORMATTING A RANGE OF COMMITS
344-
345-
Clang-format is distributed with a driver script called git-clang-format-3.8.
346-
This script can be used to format git diffs (rather than entire files).
347-
348-
After committing some code, it is recommended to run:
349-
```
350-
git-clang-format-3.8 upstream/develop
351-
```
352-
*Important:* If your branch is based on a branch other than `upstream/develop`,
353-
use the name or checksum of that branch instead. It is strongly recommended to
354-
rebase your work onto the tip of the branch it's based on before running
355-
`git-clang-format` in this way.
356-
357-
### RETROACTIVELY FORMATTING INDIVIDUAL COMMITS
358-
359-
If your works spans several commits and you'd like to keep the formatting
360-
correct in each individual commit, you can automatically rewrite the commits
361-
with correct formatting.
362-
363-
The following command will stop at each commit in the range and run
364-
clang-format on the diff at that point. This rewrites git history, so it's
365-
*unsafe*, and you should back up your branch before running this command:
366-
```
367-
git filter-branch --tree-filter 'git-clang-format-3.8 upstream/develop' \
368-
-- upstream/develop..HEAD
369-
```
370-
*Important*: `upstream/develop` should be changed in *both* places in the
371-
command above if your work is based on a different branch. It is strongly
372-
recommended to rebase your work onto the tip of the branch it's based on before
373-
running `git-clang-format` in this way.

0 commit comments

Comments
 (0)