Index: share/mk/Makefile =================================================================== --- share/mk/Makefile +++ share/mk/Makefile @@ -17,6 +17,7 @@ auto.obj.mk \ bsd.README \ bsd.arch.inc.mk \ + bsd.clang-analyze.mk \ bsd.compiler.mk \ bsd.confs.mk \ bsd.cpu.mk \ Index: share/mk/bsd.clang-analyze.mk =================================================================== --- /dev/null +++ share/mk/bsd.clang-analyze.mk @@ -0,0 +1,44 @@ +# $FreeBSD$ +# $NetBSD: bsd.clang-analyze.mk,v 1.3 2012/04/04 10:37:18 joerg Exp $ + +.if !target(____) +____: + +CLANG_ANALYZE_FLAGS+= --analyze + +CLANG_ANALYZE_CHECKERS+= core deadcode security unix + +.for checker in ${CLANG_ANALYZE_CHECKERS} +CLANG_ANALYZE_FLAGS+= -Xanalyzer -analyzer-checker=${checker} +.endfor + +.SUFFIXES: .c .cc .cpp .cxx .C .clang-analyzer + +CLANG_ANALYZE_CFLAGS= ${CFLAGS:N-Wa,--fatal-warnings} +CLANG_ANALYZE_CXXFLAGS= ${CXXFLAGS:N-Wa,--fatal-warnings} + +.c.clang-analyzer: + ${CC} ${CLANG_ANALYZE_FLAGS} \ + ${CLANG_ANALYZE_CFLAGS} ${CPPFLAGS} \ + ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} \ + ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} +.cc.clang-analyzer .cpp.clang-analyzer .cxx.clang-analyzer .C.clang-analyzer: + ${CXX} ${CLANG_ANALYZE_FLAGS} \ + ${CLANG_ANALYZE_CXXFLAGS} ${CPPFLAGS} \ + ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} \ + ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} + +CLANG_ANALYZE_SRCS= \ + ${SRCS:M*.[cC]} ${SRCS:M*.cc} \ + ${SRCS:M*.cpp} ${SRCS:M*.cxx} \ + ${DPSRCS:M*.[cC]} ${DPSRCS:M*.cc} \ + ${DPSRCS:M*.cpp} ${DPSRCS:M*.cxx} +.if !empty(CLANG_ANALYZE_SRCS) +CLANG_ANALYZE_OUTPUT= ${CLANG_ANALYZE_SRCS:R:S,$,.clang-analyzer,} +.endif + +.if !target(analyze) +analyze: ${DPSRCS} ${CLANG_ANALYZE_OUTPUT} +.endif + +.endif # !target(____) Index: share/mk/bsd.lib.mk =================================================================== --- share/mk/bsd.lib.mk +++ share/mk/bsd.lib.mk @@ -441,5 +441,6 @@ .endif .include +.include .include .include Index: share/mk/bsd.prog.mk =================================================================== --- share/mk/bsd.prog.mk +++ share/mk/bsd.prog.mk @@ -283,5 +283,6 @@ .endif .include +.include .include .include Index: share/mk/bsd.subdir.mk =================================================================== --- share/mk/bsd.subdir.mk +++ share/mk/bsd.subdir.mk @@ -39,7 +39,7 @@ ____: SUBDIR_TARGETS+= \ - all all-man buildconfig buildfiles buildincludes \ + all all-man analyze buildconfig buildfiles buildincludes \ checkdpadd clean cleandepend cleandir cleanilinks \ cleanobj depend distribute files includes installconfig \ installfiles installincludes realinstall lint maninstall \ Index: share/mk/bsd.sys.mk =================================================================== --- share/mk/bsd.sys.mk +++ share/mk/bsd.sys.mk @@ -176,7 +176,7 @@ # Tell bmake not to mistake standard targets for things to be searched for # or expect to ever be up-to-date. -PHONY_NOTMAIN = afterdepend afterinstall all beforedepend beforeinstall \ +PHONY_NOTMAIN = analyze afterdepend afterinstall all beforedepend beforeinstall \ beforelinking build build-tools buildconfig buildfiles \ buildincludes check checkdpadd clean cleandepend cleandir \ cleanobj configure depend distclean distribute exe \ Index: sys/conf/kern.mk =================================================================== --- sys/conf/kern.mk +++ sys/conf/kern.mk @@ -207,7 +207,7 @@ # Tell bmake not to mistake standard targets for things to be searched for # or expect to ever be up-to-date. -PHONY_NOTMAIN = afterdepend afterinstall all beforedepend beforeinstall \ +PHONY_NOTMAIN = analyze afterdepend afterinstall all beforedepend beforeinstall \ beforelinking build build-tools buildfiles buildincludes \ checkdpadd clean cleandepend cleandir cleanobj configure \ depend distclean distribute exe \ Index: sys/conf/kern.post.mk =================================================================== --- sys/conf/kern.post.mk +++ sys/conf/kern.post.mk @@ -30,7 +30,7 @@ .MAIN: all -.for target in all clean cleandepend cleandir clobber depend install \ +.for target in all analyze clean cleandepend cleandir clobber depend install \ obj reinstall tags ${target}: kernel-${target} .if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists($S/modules) @@ -422,3 +422,8 @@ # only appear there, but we don't handle that. .include "kern.mk" + +.sinclude +.if defined(CLANG_ANALYZE_OUTPUT) +kernel-analyze: ${SRCS} ${CLANG_ANALYZE_OUTPUT} +.endif Index: sys/conf/kmod.mk =================================================================== --- sys/conf/kmod.mk +++ sys/conf/kmod.mk @@ -460,6 +460,9 @@ ${OBJS}: ${OBJS_DEPEND_GUESS} .endif +analyze: ${_ILINKS} + .include +.include .include .include "kern.mk"