summaryrefslogtreecommitdiff
path: root/sailcov/README.md
blob: 5f318a339ad90aa068ada133432b20030331a1d0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
sailcov
=======

sailcov is a simple branch coverage visualiser for sail specifications.

### Usage

First, compile your model to c using the `-c_coverage` flag and
including the [sail_coverage.h](../lib/sail_coverage.h) header via
the `-c_include sail_coverage.h` flag. Currently the `-c_coverage`
option will print information about possible branches and function
calls to stdout, which will be needed later, so redirect this to a
file called `all_branches`, i.e.

```
sail -c -c_coverage -c_include sail_coverage.h my_model.sail -o my_model > all_branches
```

Next we need to link implementations of the coverage tracking
functions into the generated C. This done by using the static library
in [lib/coverage/](../lib/coverage/). Currently this is written in Rust
for want of an obvious hashset implementation in C and can be built
using `cargo build --release` which will produce a `libsail_coverage.a`
static library. Once this is done, we can link this into our C
emulator by passing `$SAIL_DIR/lib/coverage/libsail_coverage.a
-lpthread -ldl` to gcc, where SAIL_DIR is the location of this
repository.

Finally, when we run our model it will append coverage information
into a file called `sail_coverage`. The tool in this directory can
compare that will the data contained in the `all_branches` file
described above and produce an html coverage report for each file in
the specification. For example:

```
sailcov -a all_branches -t sail_coverage my_model.sail
```

which produce a my_model.html file.