From e92587be210e380bdd93c94689c43e0c5bdbe7de Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Tue, 15 May 2018 14:19:27 -0700 Subject: scan-build: Add mechanism to run static analysis using clang Implements issues #44 Signed-off-by: Khem Raj --- classes/scan-build.bbclass | 56 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) (limited to 'classes/scan-build.bbclass') 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 @@ -SCANBUILD ??= "1" +# Copyright (C) 2018 Khem Raj +# Released under the MIT license (see COPYING.MIT for the terms) +CFLAGS =+ "${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" +CXXFLAGS =+ "${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" +DEPENDS += "clang-native" + +#EXTRA_ANALYZER_OPTIONS ?= "-analyze-headers" +CLANG_SCAN_ENABLED ??= "1" +#CLANG_SCAN_SERVER_IP ??= "127.0.0.1" +CLANG_SCAN_SERVER_IP ??= "10.0.0.10" +CLANG_SCAN_PORT ??= "8181" +SCAN_RESULTS_DIR ?= "${TMPDIR}/static-scan/${PN}" + +do_configure_prepend() { + cc="`echo ${CC} | cut -f1 -d " "`" + cxx="`echo ${CXX} | cut -f1 -d " "`" + export CC="${cc}" + export CXX="${cxx}" +} + +do_buildscan() { + cc="`echo ${CC} | cut -f1 -d " "`" + cxx="`echo ${CXX} | cut -f1 -d " "`" +# mk="scan-build --use-cc=${cc} --use-c++=${cxx} --analyzer-target=${HOST_SYS} --html-title="${BP}" -o ${SCAN_RESULTS_DIR} ${EXTRA_ANALYZER_OPTIONS} make" +# export MAKE="${mk}" + export CC="${cc}" + export CXX="${cxx}" + 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} +} + +do_viewscan() { + bbplain "================================================================" + bbplain "Stating scan-view server at: http://${CLANG_SCAN_SERVER_IP}:${CLANG_SCAN_PORT}" + bbplain "Use Ctrl-C to exit" + bbplain "================================================================" + scan-view --host ${CLANG_SCAN_SERVER_IP} --port ${CLANG_SCAN_PORT} --allow-all-hosts ${SCAN_RESULTS_DIR}/*/ +} + +do_viewscan[depends] += "${PN}:do_buildscan" +do_buildscan[cleandirs] += "${SCAN_RESULTS_DIR}" +do_buildscan[dirs] += "${SCAN_RESULTS_DIR}" +#do_build[recrdeptask] += "do_buildscan" + +do_buildscan[doc] = "Build and scan static analysis data using clang" +do_viewscan[doc] = "Start a webserver to visualize static analysis data" + +addtask buildscan after do_configure before do_compile +addtask viewscan + +python () { + # Remove buildscan task when scanning is not enabled + if not(d.getVar('CLANG_SCAN_ENABLED') == "1"): + for i in ['do_buildscan', 'do_viewscan']: + bb.build.deltask(i, d) +} -- cgit v1.2.3-54-g00ecf