xref: /illumos-gate/usr/src/tools/smatch/src/Documentation/smatch.txt (revision d2f7972d81337947df76c36b8c2a5f290829fa7a)
1Smatch
2
31.  Building Smatch
42.  Using Smatch
53.  Smatch vs Sparse
6
7
8Section 1:  Building Smatch
9---------------------------
10
11Smatch requires sqlite3.  It requires the binaries and the C, Perl and
12Python libraries for sqlite3.
13
14apt-get install sqlite3 libsqlite3-dev libdbd-sqlite3-perl
15
16Smatch is easy to build.  Just type `make`.  There isn't an install process
17right now so just run it from the build directory.
18
19
20Section 2:  Using Smatch
21------------------------
22
23Smatch can be used with a cross function database. It's not mandatory to
24build the database but it's a useful thing to do.  Building the database
25for the kernel takes 2-3 hours on my computer.  For the kernel you build
26the database with:
27
28	cd ~/path/to/kernel_dir
29	~/path/to/smatch_dir/smatch_scripts/build_kernel_data.sh
30
31For projects other than the kernel you run Smatch with the options
32"--call-tree --info --param-mapper --spammy" and finish building the
33database by running the script:
34
35	~/progs/smatch/devel/smatch_data/db/create_db.sh
36
37Each time you rebuild the cross function database it becomes more accurate. I
38normally rebuild the database every morning.
39
40If you are running Smatch over the whole kernel you can use the following
41command:
42
43	~/progs/smatch/devel/smatch_scripts/test_kernel.sh
44
45The test_kernel.sh script will create a .c.smatch file for every file it tests
46and a combined smatch_warns.txt file with all the warnings.
47
48If you are running Smatch just over one kernel file:
49
50	~/progs/smatch/devel/smatch_scripts/kchecker drivers/whatever/file.c
51
52You can also build a directory like this:
53
54	~/progs/smatch/devel/smatch_scripts/kchecker drivers/whatever/
55
56The kchecker script prints its warnings to stdout.
57
58The above scripts will ensure that any ARCH or CROSS_COMPILE environment
59variables are passed to kernel build system - thus allowing for the use of
60Smatch with kernels that are normally built with cross-compilers.
61
62If you are building something else (which is not the Linux kernel) then use
63something like:
64
65	make CHECK="~/progs/smatch/devel/smatch --full-path" \
66		CC=~/progs/smatch/devel/smatch/cgcc | tee smatch_warns.txt
67
68The makefile has to let people set the CC with an environment variable for that
69to work, of course.
70
71
72Section 3:  Smatch vs Sparse
73----------------------------
74
75Smatch uses Sparse as a C parser.  I have made a few hacks to Sparse so I
76have to distribute the two together.  Sparse is released under the MIT license
77and Smatch is GPLv2+.  If you make changes to Sparse please send those to the
78Sparse mailing list linux-sparse@vger.kernel.org and I will pick them up from
79there.  Partly I do that for licensing reasons because I don't want to pull GPL
80changes into the Sparse code I re-distribute.
81
82