From ab7260812307bbcd723a34dc98ca11aa5f92c8c0 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Mon, 16 Sep 2019 10:22:52 -0700 Subject: scan-build: Limit scans to target recipes only Add a blacklist for scanning, add packages which are not scannable Add --force-analyze-debug-code and -analyze-headers to default set of scan options Signed-off-by: Khem Raj --- classes/scan-build.bbclass | 51 ++++++++++++++++++++++++---------------------- 1 file changed, 27 insertions(+), 24 deletions(-) (limited to 'classes/scan-build.bbclass') diff --git a/classes/scan-build.bbclass b/classes/scan-build.bbclass index e0de56b..6d3fe65 100644 --- a/classes/scan-build.bbclass +++ b/classes/scan-build.bbclass @@ -1,33 +1,27 @@ # Copyright (C) 2018 Khem Raj # Released under the MIT license (see COPYING.MIT for the terms) -CFLAGS =+ "${TARGET_CC_ARCH} ${TOOLCHAIN_OPTIONS}" -CXXFLAGS =+ "${TARGET_CC_ARCH} ${TOOLCHAIN_OPTIONS}" +EXTRA_ANALYZER_OPTIONS += "-analyze-headers" +EXTRA_ANALYZER_OPTIONS += "--force-analyze-debug-code" +SCAN_BUILD ??= "1" +SCAN_BUILD_class-native = "" +SCAN_BUILD_class-nativesdk = "" +SCAN_BUILD_class-cross = "" +SCAN_BUILD_class-crosssdk = "" +SCAN_BUILD_class-cross-canadian = "" -#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}" -scanbuild_munge_cc_cxx() { - cc="`echo ${CC} | cut -f1 -d " "`" - cxx="`echo ${CXX} | cut -f1 -d " "`" - export CC="${cc}" - export CXX="${cxx}" -} - -do_configure[prefuncs] += "scanbuild_munge_cc_cxx" +CCSCAN ?= "${HOST_PREFIX}${TOOLCHAIN}" +CXXSCAN_toolchain-clang ?= "${HOST_PREFIX}clang++" +CXXSCAN_toolchain-gcc ?= "${HOST_PREFIX}g++" do_scanbuild() { - 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} + rm -rf ${SCAN_RESULTS_DIR} + scan-build --use-cc ${CCSCAN} --use-c++ ${CXXSCAN} --analyzer-target ${HOST_SYS} --html-title ${BP} -o ${SCAN_RESULTS_DIR} ${EXTRA_ANALYZER_OPTIONS} ${MAKE} ${PARALLEL_MAKE} ${EXTRA_OEMAKE} } do_scanview() { @@ -39,7 +33,8 @@ do_scanview() { } do_scanview[depends] += "${PN}:do_scanbuild" -do_scanbuild[cleandirs] += "${SCAN_RESULTS_DIR}" +do_scanbuild[depends] += "clang-native:do_populate_sysroot" +#do_scanbuild[cleandirs] += "${SCAN_RESULTS_DIR}" do_scanbuild[dirs] += "${B}" do_scanview[dirs] += "${SCAN_RESULTS_DIR}" #do_build[recrdeptask] += "do_scanbuild" @@ -48,11 +43,19 @@ do_scanbuild[doc] = "Build and scan static analysis data using clang" do_scanview[doc] = "Start a webserver to visualize static analysis data" addtask scanbuild after do_configure before do_compile -addtask scanview - +addtask scanview after do_scanbuild python () { - # Remove scanbuild task when scanning is not enabled - if not(d.getVar('CLANG_SCAN_ENABLED') == "1"): + # Remove scanbuild task when scanning is not enabled or recipe does not have do_configure + if not(d.getVar('SCAN_BUILD') == "1") or not(d.getVar('TOOLCHAIN') == "clang") or oe.utils.inherits(d, 'allarch'): for i in ['do_scanbuild', 'do_scanview']: bb.build.deltask(i, d) + else: + cflags = d.getVar('CFLAGS', False) + d.getVar('TARGET_CC_ARCH', False) + d.getVar('TOOLCHAIN_OPTIONS', False) + cxxflags = d.getVar('CXXFLAGS', False) + d.getVar('TARGET_CC_ARCH', False) + d.getVar('TOOLCHAIN_OPTIONS', False) + d.setVar('CFLAGS', cflags) + d.setVar('CXXFLAGS', cxxflags) + if oe.utils.inherits(d, 'autotools'): + cachedvar = d.getVar('CACHED_CONFIGUREVARS', False) + cachedvar = cachedvar + " scan-build " + " --analyzer-target " + d.getVar('HOST_SYS', False) + " --use-cc " + d.getVar('CCSCAN', False) + " --use-c++ " + d.getVar('CXXSCAN', False) + d.setVar('CACHED_CONFIGUREVARS', cachedvar) } -- cgit v1.2.3-54-g00ecf