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