summaryrefslogtreecommitdiffstats
path: root/external/meta-clang/classes/scan-build.bbclass
diff options
context:
space:
mode:
Diffstat (limited to 'external/meta-clang/classes/scan-build.bbclass')
-rw-r--r--external/meta-clang/classes/scan-build.bbclass51
1 files changed, 27 insertions, 24 deletions
diff --git a/external/meta-clang/classes/scan-build.bbclass b/external/meta-clang/classes/scan-build.bbclass
index e0de56bb..6d3fe652 100644
--- a/external/meta-clang/classes/scan-build.bbclass
+++ b/external/meta-clang/classes/scan-build.bbclass
@@ -1,33 +1,27 @@
# Copyright (C) 2018 Khem Raj <raj.khem@gmail.com>
# 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)
}