README.md
1# MISRA Compliance for FreeRTOS-Kernel
2FreeRTOS-Kernel is MISRA C:2012 compliant. This directory contains a project to
3run [Synopsys Coverity](https://www.synopsys.com/software-integrity/security-testing/static-analysis-sast.html)
4for checking MISRA compliance.
5
6> **Note**
7Coverity version 2023.6.1 incorrectly infers the type of `pdTRUE` and `pdFALSE`
8as boolean because of their names, resulting in multiple false positive warnings
9about type mismatch. We replace `pdTRUE` with `pdPASS` and `pdFALSE` with
10`pdFAIL` to avoid these false positive warnings. This workaround will not be
11needed after Coverity fixes the issue of incorrectly inferring the type of
12`pdTRUE` and `pdFALSE` as boolean.
13
14Deviations from the MISRA C:2012 guidelines are documented in
15[MISRA.md](../../MISRA.md) and [coverity_misra.config](coverity_misra.config)
16files.
17
18## Getting Started
19### Prerequisites
20Coverity can be run on any platform mentioned [here](https://sig-docs.synopsys.com/polaris/topics/c_coverity-compatible-platforms.html).
21The following are the prerequisites to generate coverity report:
22
231. CMake version > 3.13.0 (You can check whether you have this by typing `cmake --version`).
242. GCC compiler.
25 - See download and installation instructions [here](https://gcc.gnu.org/install/).
263. Clone the repo using the following command:
27 - `git clone https://github.com/FreeRTOS/FreeRTOS-Kernel.git ./FreeRTOS-Kernel`
28
29### Generating Report
30Go to the root directory of the FreeRTOS-Kernel repo and run the following
31commands in a terminal:
321. Update the compiler configuration in Coverity:
33 ~~~
34 cov-configure --force --compiler cc --comptype gcc
35 ~~~
362. Create the build files using CMake in a `build` directory:
37
38Singe core FreeRTOS:
39 ~~~
40 cmake -B build -S examples/coverity
41 ~~~
42
43SMP FreeRTOS:
44 ~~~
45 cmake -B build -S examples/coverity -DFREERTOS_SMP_EXAMPLE=1
46 ~~~
473. Build the (pseudo) application:
48 ~~~
49 cd build/
50 cov-build --emit-complementary-info --dir cov-out make coverity
51 ~~~
524. Go to the Coverity output directory (`cov-out`) and begin Coverity static
53 analysis:
54 ~~~
55 cov-analyze --dir ./cov-out \
56 --coding-standard-config ../examples/coverity/coverity_misra.config \
57 --tu-pattern "file('[A-Za-z_]+\.c') && ( ! file('main.c') ) && ( ! file('port.c') )"
58 ~~~
595. Generate the HTML report:
60 ~~~
61 cov-format-errors --dir ./cov-out --html-output html-output
62 ~~~
63
64HTML report should now be generated in a directory named `html-output`.
65