diff options
Diffstat (limited to 'classes/scan-build.bbclass')
-rw-r--r-- | classes/scan-build.bbclass | 51 |
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 | ||
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 | } |