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 58If you are building something else (which is not the Linux kernel) then use 59something like: 60 61 make CHECK="~/progs/smatch/devel/smatch --full-path" \ 62 CC=~/progs/smatch/devel/smatch/cgcc | tee smatch_warns.txt 63 64The makefile has to let people set the CC with an environment variable for that 65to work, of course. 66 67 68Section 3: Smatch vs Sparse 69---------------------------- 70 71Smatch uses Sparse as a C parser. I have made a few hacks to Sparse so I 72have to distribute the two together. Sparse is released under the MIT license 73and Smatch is GPLv2+. If you make changes to Sparse please send those to the 74Sparse mailing list linux-sparse@vger.kernel.org and I will pick them up from 75there. Partly I do that for licensing reasons because I don't want to pull GPL 76changes into the Sparse code I re-distribute. 77 78