summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKhem Raj <raj.khem@gmail.com>2018-05-15 14:19:27 -0700
committerKhem Raj <raj.khem@gmail.com>2018-05-15 14:19:27 -0700
commite92587be210e380bdd93c94689c43e0c5bdbe7de (patch)
tree11102349430e97d1f49cda5137068a7909cca662
parenta5bd2ab4771caecab03a26ff267a9c2abf709535 (diff)
downloadmeta-clang-e92587be210e380bdd93c94689c43e0c5bdbe7de.tar.gz
scan-build: Add mechanism to run static analysis using clang
Implements issues #44 Signed-off-by: Khem Raj <raj.khem@gmail.com>
-rw-r--r--classes/scan-build.bbclass56
1 files changed, 55 insertions, 1 deletions
diff --git a/classes/scan-build.bbclass b/classes/scan-build.bbclass
index f7bc5e5..6948bde 100644
--- a/classes/scan-build.bbclass
+++ b/classes/scan-build.bbclass
@@ -1,3 +1,57 @@
1SCANBUILD ??= "1" 1# Copyright (C) 2018 Khem Raj <raj.khem@gmail.com>
2# Released under the MIT license (see COPYING.MIT for the terms)
2 3
4CFLAGS =+ "${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}"
5CXXFLAGS =+ "${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}"
3 6
7DEPENDS += "clang-native"
8
9#EXTRA_ANALYZER_OPTIONS ?= "-analyze-headers"
10CLANG_SCAN_ENABLED ??= "1"
11#CLANG_SCAN_SERVER_IP ??= "127.0.0.1"
12CLANG_SCAN_SERVER_IP ??= "10.0.0.10"
13CLANG_SCAN_PORT ??= "8181"
14SCAN_RESULTS_DIR ?= "${TMPDIR}/static-scan/${PN}"
15
16do_configure_prepend() {
17 cc="`echo ${CC} | cut -f1 -d " "`"
18 cxx="`echo ${CXX} | cut -f1 -d " "`"
19 export CC="${cc}"
20 export CXX="${cxx}"
21}
22
23do_buildscan() {
24 cc="`echo ${CC} | cut -f1 -d " "`"
25 cxx="`echo ${CXX} | cut -f1 -d " "`"
26# mk="scan-build --use-cc=${cc} --use-c++=${cxx} --analyzer-target=${HOST_SYS} --html-title="${BP}" -o ${SCAN_RESULTS_DIR} ${EXTRA_ANALYZER_OPTIONS} make"
27# export MAKE="${mk}"
28 export CC="${cc}"
29 export CXX="${cxx}"
30 scan-build --use-cc=${cc} --use-c++=${cxx} --analyzer-target=${HOST_SYS} --html-title="${BP}" -o ${SCAN_RESULTS_DIR} ${EXTRA_ANALYZER_OPTIONS} ${MAKE} ${EXTRA_OEMAKE} "$@" -C ${S}
31}
32
33do_viewscan() {
34 bbplain "================================================================"
35 bbplain "Stating scan-view server at: http://${CLANG_SCAN_SERVER_IP}:${CLANG_SCAN_PORT}"
36 bbplain "Use Ctrl-C to exit"
37 bbplain "================================================================"
38 scan-view --host ${CLANG_SCAN_SERVER_IP} --port ${CLANG_SCAN_PORT} --allow-all-hosts ${SCAN_RESULTS_DIR}/*/
39}
40
41do_viewscan[depends] += "${PN}:do_buildscan"
42do_buildscan[cleandirs] += "${SCAN_RESULTS_DIR}"
43do_buildscan[dirs] += "${SCAN_RESULTS_DIR}"
44#do_build[recrdeptask] += "do_buildscan"
45
46do_buildscan[doc] = "Build and scan static analysis data using clang"
47do_viewscan[doc] = "Start a webserver to visualize static analysis data"
48
49addtask buildscan after do_configure before do_compile
50addtask viewscan
51
52python () {
53 # Remove buildscan task when scanning is not enabled
54 if not(d.getVar('CLANG_SCAN_ENABLED') == "1"):
55 for i in ['do_buildscan', 'do_viewscan']:
56 bb.build.deltask(i, d)
57}