diff options
| author | Khem Raj <raj.khem@gmail.com> | 2018-05-15 14:19:27 -0700 |
|---|---|---|
| committer | Khem Raj <raj.khem@gmail.com> | 2018-05-15 14:19:27 -0700 |
| commit | e92587be210e380bdd93c94689c43e0c5bdbe7de (patch) | |
| tree | 11102349430e97d1f49cda5137068a7909cca662 | |
| parent | a5bd2ab4771caecab03a26ff267a9c2abf709535 (diff) | |
| download | meta-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.bbclass | 56 |
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 @@ | |||
| 1 | SCANBUILD ??= "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 | ||
| 4 | CFLAGS =+ "${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" | ||
| 5 | CXXFLAGS =+ "${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" | ||
| 3 | 6 | ||
| 7 | DEPENDS += "clang-native" | ||
| 8 | |||
| 9 | #EXTRA_ANALYZER_OPTIONS ?= "-analyze-headers" | ||
| 10 | CLANG_SCAN_ENABLED ??= "1" | ||
| 11 | #CLANG_SCAN_SERVER_IP ??= "127.0.0.1" | ||
| 12 | CLANG_SCAN_SERVER_IP ??= "10.0.0.10" | ||
| 13 | CLANG_SCAN_PORT ??= "8181" | ||
| 14 | SCAN_RESULTS_DIR ?= "${TMPDIR}/static-scan/${PN}" | ||
| 15 | |||
| 16 | do_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 | |||
| 23 | do_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 | |||
| 33 | do_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 | |||
| 41 | do_viewscan[depends] += "${PN}:do_buildscan" | ||
| 42 | do_buildscan[cleandirs] += "${SCAN_RESULTS_DIR}" | ||
| 43 | do_buildscan[dirs] += "${SCAN_RESULTS_DIR}" | ||
| 44 | #do_build[recrdeptask] += "do_buildscan" | ||
| 45 | |||
| 46 | do_buildscan[doc] = "Build and scan static analysis data using clang" | ||
| 47 | do_viewscan[doc] = "Start a webserver to visualize static analysis data" | ||
| 48 | |||
| 49 | addtask buildscan after do_configure before do_compile | ||
| 50 | addtask viewscan | ||
| 51 | |||
| 52 | python () { | ||
| 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 | } | ||
