diff options
author | Khem Raj <raj.khem@gmail.com> | 2019-09-16 10:22:52 -0700 |
---|---|---|
committer | Khem Raj <raj.khem@gmail.com> | 2019-09-16 23:11:52 -0700 |
commit | ab7260812307bbcd723a34dc98ca11aa5f92c8c0 (patch) | |
tree | 833a0279b7aafaf46f07a0ff8bd349c0d4e5ab9c | |
parent | cf5560b703ed9b498d5651ca8fd74ea2566e6f5c (diff) | |
download | meta-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>
-rw-r--r-- | classes/scan-build.bbclass | 51 | ||||
-rw-r--r-- | conf/layer.conf | 1 | ||||
-rw-r--r-- | conf/nonscanable.conf | 22 |
3 files changed, 50 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 | ||
4 | CFLAGS =+ "${TARGET_CC_ARCH} ${TOOLCHAIN_OPTIONS}" | 4 | EXTRA_ANALYZER_OPTIONS += "-analyze-headers" |
5 | CXXFLAGS =+ "${TARGET_CC_ARCH} ${TOOLCHAIN_OPTIONS}" | 5 | EXTRA_ANALYZER_OPTIONS += "--force-analyze-debug-code" |
6 | SCAN_BUILD ??= "1" | ||
7 | SCAN_BUILD_class-native = "" | ||
8 | SCAN_BUILD_class-nativesdk = "" | ||
9 | SCAN_BUILD_class-cross = "" | ||
10 | SCAN_BUILD_class-crosssdk = "" | ||
11 | SCAN_BUILD_class-cross-canadian = "" | ||
6 | 12 | ||
7 | #EXTRA_ANALYZER_OPTIONS ?= "-analyze-headers" | ||
8 | CLANG_SCAN_ENABLED ??= "1" | ||
9 | #CLANG_SCAN_SERVER_IP ??= "127.0.0.1" | 13 | #CLANG_SCAN_SERVER_IP ??= "127.0.0.1" |
10 | CLANG_SCAN_SERVER_IP ??= "10.0.0.10" | 14 | CLANG_SCAN_SERVER_IP ??= "10.0.0.10" |
11 | CLANG_SCAN_PORT ??= "8181" | 15 | CLANG_SCAN_PORT ??= "8181" |
12 | SCAN_RESULTS_DIR ?= "${TMPDIR}/static-scan/${PN}" | 16 | SCAN_RESULTS_DIR ?= "${TMPDIR}/static-scan/${PN}" |
13 | 17 | ||
14 | scanbuild_munge_cc_cxx() { | 18 | CCSCAN ?= "${HOST_PREFIX}${TOOLCHAIN}" |
15 | cc="`echo ${CC} | cut -f1 -d " "`" | 19 | CXXSCAN_toolchain-clang ?= "${HOST_PREFIX}clang++" |
16 | cxx="`echo ${CXX} | cut -f1 -d " "`" | 20 | CXXSCAN_toolchain-gcc ?= "${HOST_PREFIX}g++" |
17 | export CC="${cc}" | ||
18 | export CXX="${cxx}" | ||
19 | } | ||
20 | |||
21 | do_configure[prefuncs] += "scanbuild_munge_cc_cxx" | ||
22 | 21 | ||
23 | do_scanbuild() { | 22 | do_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 | ||
33 | do_scanview() { | 27 | do_scanview() { |
@@ -39,7 +33,8 @@ do_scanview() { | |||
39 | } | 33 | } |
40 | 34 | ||
41 | do_scanview[depends] += "${PN}:do_scanbuild" | 35 | do_scanview[depends] += "${PN}:do_scanbuild" |
42 | do_scanbuild[cleandirs] += "${SCAN_RESULTS_DIR}" | 36 | do_scanbuild[depends] += "clang-native:do_populate_sysroot" |
37 | #do_scanbuild[cleandirs] += "${SCAN_RESULTS_DIR}" | ||
43 | do_scanbuild[dirs] += "${B}" | 38 | do_scanbuild[dirs] += "${B}" |
44 | do_scanview[dirs] += "${SCAN_RESULTS_DIR}" | 39 | do_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" | |||
48 | do_scanview[doc] = "Start a webserver to visualize static analysis data" | 43 | do_scanview[doc] = "Start a webserver to visualize static analysis data" |
49 | 44 | ||
50 | addtask scanbuild after do_configure before do_compile | 45 | addtask scanbuild after do_configure before do_compile |
51 | addtask scanview | 46 | addtask scanview after do_scanbuild |
52 | |||
53 | python () { | 47 | python () { |
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 | } |
diff --git a/conf/layer.conf b/conf/layer.conf index 61e13a2..6474f26 100644 --- a/conf/layer.conf +++ b/conf/layer.conf | |||
@@ -21,3 +21,4 @@ PREFERRED_PROVIDER_libgcc-initial = "libgcc-initial" | |||
21 | INHERIT += "clang" | 21 | INHERIT += "clang" |
22 | 22 | ||
23 | require conf/nonclangable.conf | 23 | require conf/nonclangable.conf |
24 | require conf/nonscanable.conf | ||
diff --git a/conf/nonscanable.conf b/conf/nonscanable.conf new file mode 100644 index 0000000..e2b8f5d --- /dev/null +++ b/conf/nonscanable.conf | |||
@@ -0,0 +1,22 @@ | |||
1 | SCAN_BUILD_pn-linux-libc-headers = "" | ||
2 | SCAN_BUILD_pn-update-rc.d = "" | ||
3 | SCAN_BUILD_pn-initscripts = "" | ||
4 | SCAN_BUILD_pn-base-files = "" | ||
5 | SCAN_BUILD_pn-os-release = "" | ||
6 | SCAN_BUILD_pn-wireless-regdb = "" | ||
7 | SCAN_BUILD_pn-tzdata = "" | ||
8 | SCAN_BUILD_pn-qemuwrapper-cross = "" | ||
9 | SCAN_BUILD_pn-depmodwrapper-cross = "" | ||
10 | SCAN_BUILD_pn-bluez-firmware-rpidistro = "" | ||
11 | SCAN_BUILD_pn-udev-rules-rpi = "" | ||
12 | SCAN_BUILD_pn-shadow-securetty = "" | ||
13 | SCAN_BUILD_pn-96boards-tools = "" | ||
14 | SCAN_BUILD_pn-run-postinsts = "" | ||
15 | SCAN_BUILD_pn-keymaps = "" | ||
16 | SCAN_BUILD_pn-sysvinit-inittab = "" | ||
17 | SCAN_BUILD_pn-pi-bluetooth = "" | ||
18 | SCAN_BUILD_pn-rpi-config = "" | ||
19 | SCAN_BUILD_pn-bcm2835-bootfiles = "" | ||
20 | SCAN_BUILD_pn-autoconf-archive = "" | ||
21 | SCAN_BUILD_pn-compiler-rt = "" | ||
22 | SCAN_BUILD_pn-libcxx = "" | ||