@@ -240,3 +240,97 @@ or use a symbolic link. Then, when running git commit, you should get the
240
240
linter output (if any) before being prompted to enter a commit message. To
241
241
bypass the check (e.g. if there was a false positive), add the option
242
242
` --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.
0 commit comments