summaryrefslogtreecommitdiffstats
path: root/classes
diff options
context:
space:
mode:
authorKhem Raj <raj.khem@gmail.com>2019-09-16 10:22:52 -0700
committerKhem Raj <raj.khem@gmail.com>2019-09-16 23:11:52 -0700
commitab7260812307bbcd723a34dc98ca11aa5f92c8c0 (patch)
tree833a0279b7aafaf46f07a0ff8bd349c0d4e5ab9c /classes
parentcf5560b703ed9b498d5651ca8fd74ea2566e6f5c (diff)
downloadmeta-clang-ab7260812307bbcd723a34dc98ca11aa5f92c8c0.tar.gz
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 <raj.khem@gmail.com>
Diffstat (limited to 'classes')
-rw-r--r--classes/scan-build.bbclass51
1 files changed, 27 insertions, 24 deletions
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 @@
1# Copyright (C) 2018 Khem Raj <raj.khem@gmail.com> 1# Copyright (C) 2018 Khem Raj <raj.khem@gmail.com>
2# Released under the MIT license (see COPYING.MIT for the terms) 2# Released under the MIT license (see COPYING.MIT for the terms)
3 3
4CFLAGS =+ "${TARGET_CC_ARCH} ${TOOLCHAIN_OPTIONS}" 4EXTRA_ANALYZER_OPTIONS += "-analyze-headers"
5CXXFLAGS =+ "${TARGET_CC_ARCH} ${TOOLCHAIN_OPTIONS}" 5EXTRA_ANALYZER_OPTIONS += "--force-analyze-debug-code"
6SCAN_BUILD ??= "1"
7SCAN_BUILD_class-native = ""
8SCAN_BUILD_class-nativesdk = ""
9SCAN_BUILD_class-cross = ""
10SCAN_BUILD_class-crosssdk = ""
11SCAN_BUILD_class-cross-canadian = ""
6 12
7#EXTRA_ANALYZER_OPTIONS ?= "-analyze-headers"
8CLANG_SCAN_ENABLED ??= "1"
9#CLANG_SCAN_SERVER_IP ??= "127.0.0.1" 13#CLANG_SCAN_SERVER_IP ??= "127.0.0.1"
10CLANG_SCAN_SERVER_IP ??= "10.0.0.10" 14CLANG_SCAN_SERVER_IP ??= "10.0.0.10"
11CLANG_SCAN_PORT ??= "8181" 15CLANG_SCAN_PORT ??= "8181"
12SCAN_RESULTS_DIR ?= "${TMPDIR}/static-scan/${PN}" 16SCAN_RESULTS_DIR ?= "${TMPDIR}/static-scan/${PN}"
13 17
14scanbuild_munge_cc_cxx() { 18CCSCAN ?= "${HOST_PREFIX}${TOOLCHAIN}"
15 cc="`echo ${CC} | cut -f1 -d " "`" 19CXXSCAN_toolchain-clang ?= "${HOST_PREFIX}clang++"
16 cxx="`echo ${CXX} | cut -f1 -d " "`" 20CXXSCAN_toolchain-gcc ?= "${HOST_PREFIX}g++"
17 export CC="${cc}"
18 export CXX="${cxx}"
19}
20
21do_configure[prefuncs] += "scanbuild_munge_cc_cxx"
22 21
23do_scanbuild() { 22do_scanbuild() {
24 cc="`echo ${CC} | cut -f1 -d " "`" 23 rm -rf ${SCAN_RESULTS_DIR}
25 cxx="`echo ${CXX} | cut -f1 -d " "`" 24 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}
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}
31} 25}
32 26
33do_scanview() { 27do_scanview() {
@@ -39,7 +33,8 @@ do_scanview() {
39} 33}
40 34
41do_scanview[depends] += "${PN}:do_scanbuild" 35do_scanview[depends] += "${PN}:do_scanbuild"
42do_scanbuild[cleandirs] += "${SCAN_RESULTS_DIR}" 36do_scanbuild[depends] += "clang-native:do_populate_sysroot"
37#do_scanbuild[cleandirs] += "${SCAN_RESULTS_DIR}"
43do_scanbuild[dirs] += "${B}" 38do_scanbuild[dirs] += "${B}"
44do_scanview[dirs] += "${SCAN_RESULTS_DIR}" 39do_scanview[dirs] += "${SCAN_RESULTS_DIR}"
45#do_build[recrdeptask] += "do_scanbuild" 40#do_build[recrdeptask] += "do_scanbuild"
@@ -48,11 +43,19 @@ do_scanbuild[doc] = "Build and scan static analysis data using clang"
48do_scanview[doc] = "Start a webserver to visualize static analysis data" 43do_scanview[doc] = "Start a webserver to visualize static analysis data"
49 44
50addtask scanbuild after do_configure before do_compile 45addtask scanbuild after do_configure before do_compile
51addtask scanview 46addtask scanview after do_scanbuild
52
53python () { 47python () {
54 # Remove scanbuild task when scanning is not enabled 48 # Remove scanbuild task when scanning is not enabled or recipe does not have do_configure
55 if not(d.getVar('CLANG_SCAN_ENABLED') == "1"): 49 if not(d.getVar('SCAN_BUILD') == "1") or not(d.getVar('TOOLCHAIN') == "clang") or oe.utils.inherits(d, 'allarch'):
56 for i in ['do_scanbuild', 'do_scanview']: 50 for i in ['do_scanbuild', 'do_scanview']:
57 bb.build.deltask(i, d) 51 bb.build.deltask(i, d)
52 else:
53 cflags = d.getVar('CFLAGS', False) + d.getVar('TARGET_CC_ARCH', False) + d.getVar('TOOLCHAIN_OPTIONS', False)
54 cxxflags = d.getVar('CXXFLAGS', False) + d.getVar('TARGET_CC_ARCH', False) + d.getVar('TOOLCHAIN_OPTIONS', False)
55 d.setVar('CFLAGS', cflags)
56 d.setVar('CXXFLAGS', cxxflags)
57 if oe.utils.inherits(d, 'autotools'):
58 cachedvar = d.getVar('CACHED_CONFIGUREVARS', False)
59 cachedvar = cachedvar + " scan-build " + " --analyzer-target " + d.getVar('HOST_SYS', False) + " --use-cc " + d.getVar('CCSCAN', False) + " --use-c++ " + d.getVar('CXXSCAN', False)
60 d.setVar('CACHED_CONFIGUREVARS', cachedvar)
58} 61}