0e6c493fec
In order for cppcheck to perform a proper analysis it needs to be aware of how the sources are compiled (source files, include paths/files, extra defines, etc). All the needed information is available from the Makefiles and can be leveraged with a generic cppcheck Makefile target. So let's add one. Additional minor changes: * Removing the cppcheck-suppressions.txt file. With cppcheck 2.3 and these changes it appears to no longer be needed. Some inline suppressions were also removed since they appear not to be needed. We can add them back if it turns out they're needed for older versions of cppcheck. * Added the ax_count_cpus m4 macro to detect at configure time how many processors are available in order to run multiple cppcheck jobs. This value is also now used as a replacement for nproc when executing the kernel interface checks. * "PHONY =" line moved in to the Rules.am file which is included at the top of all Makefile.am's. This is just convenient becase it allows us to use the += syntax to add phony targets. * One upside of this integration worth mentioning is it now allows `make cppcheck` to be run in any directory to check that subtree. * For the moment, cppcheck is not run against the FreeBSD specific kernel sources. The cppcheck-FreeBSD target will need to be implemented and testing on FreeBSD to support this. Reviewed-by: Ryan Moeller <ryan@ixsystems.com> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #11508
136 lines
3.8 KiB
Makefile
136 lines
3.8 KiB
Makefile
include Kbuild
|
|
|
|
INSTALL_MOD_DIR ?= extra
|
|
|
|
SUBDIR_TARGETS = icp lua zstd
|
|
|
|
all: modules
|
|
distclean maintainer-clean: clean
|
|
install: modules_install
|
|
uninstall: modules_uninstall
|
|
check:
|
|
|
|
.PHONY: all distclean maintainer-clean install uninstall check distdir \
|
|
modules modules-Linux modules-FreeBSD modules-unknown \
|
|
clean clean-Linux clean-FreeBSD \
|
|
modules_install modules_install-Linux modules_install-FreeBSD \
|
|
modules_uninstall modules_uninstall-Linux modules_uninstall-FreeBSD \
|
|
cppcheck cppcheck-Linux cppcheck-FreeBSD
|
|
|
|
# Filter out options that FreeBSD make doesn't understand
|
|
getflags = ( \
|
|
set -- \
|
|
$(filter-out --%,$(firstword $(MFLAGS))) \
|
|
$(filter -I%,$(MFLAGS)) \
|
|
$(filter -j%,$(MFLAGS)); \
|
|
fmakeflags=""; \
|
|
while getopts :deiI:j:knqrstw flag; do \
|
|
case $$flag in \
|
|
\?) :;; \
|
|
:) if [ $$OPTARG = "j" ]; then \
|
|
ncpus=$$(sysctl -n kern.smp.cpus 2>/dev/null || :); \
|
|
if [ -n "$$ncpus" ]; then fmakeflags="$$fmakeflags -j$$ncpus"; fi; \
|
|
fi;; \
|
|
d) fmakeflags="$$fmakeflags -dA";; \
|
|
*) fmakeflags="$$fmakeflags -$$flag$$OPTARG";; \
|
|
esac; \
|
|
done; \
|
|
echo $$fmakeflags \
|
|
)
|
|
FMAKEFLAGS = -C @abs_srcdir@ -f Makefile.bsd $(shell $(getflags))
|
|
|
|
ifneq (@abs_srcdir@,@abs_builddir@)
|
|
FMAKEFLAGS += MAKEOBJDIR=@abs_builddir@
|
|
endif
|
|
FMAKE = env -u MAKEFLAGS make $(FMAKEFLAGS)
|
|
|
|
modules-Linux:
|
|
list='$(SUBDIR_TARGETS)'; for targetdir in $$list; do \
|
|
$(MAKE) -C $$targetdir; \
|
|
done
|
|
$(MAKE) -C @LINUX_OBJ@ M=`pwd` @KERNEL_MAKE@ CONFIG_ZFS=m modules
|
|
|
|
modules-FreeBSD:
|
|
+$(FMAKE)
|
|
|
|
modules-unknown:
|
|
@true
|
|
|
|
modules: modules-@ac_system@
|
|
|
|
clean-Linux:
|
|
@# Only cleanup the kernel build directories when CONFIG_KERNEL
|
|
@# is defined. This indicates that kernel modules should be built.
|
|
@CONFIG_KERNEL_TRUE@ $(MAKE) -C @LINUX_OBJ@ M=`pwd` @KERNEL_MAKE@ clean
|
|
|
|
if [ -f @LINUX_SYMBOLS@ ]; then $(RM) @LINUX_SYMBOLS@; fi
|
|
if [ -f Module.markers ]; then $(RM) Module.markers; fi
|
|
|
|
find . -name '*.ur-safe' -type f -print | xargs $(RM)
|
|
|
|
clean-FreeBSD:
|
|
+$(FMAKE) clean
|
|
|
|
clean: clean-@ac_system@
|
|
|
|
modules_install-Linux:
|
|
@# Install the kernel modules
|
|
$(MAKE) -C @LINUX_OBJ@ M=`pwd` modules_install \
|
|
INSTALL_MOD_PATH=$(DESTDIR)$(INSTALL_MOD_PATH) \
|
|
INSTALL_MOD_DIR=$(INSTALL_MOD_DIR) \
|
|
KERNELRELEASE=@LINUX_VERSION@
|
|
@# Remove extraneous build products when packaging
|
|
kmoddir=$(DESTDIR)$(INSTALL_MOD_PATH)/lib/modules/@LINUX_VERSION@; \
|
|
if [ -n "$(DESTDIR)" ]; then \
|
|
find $$kmoddir -name 'modules.*' | xargs $(RM); \
|
|
fi
|
|
sysmap=$(DESTDIR)$(INSTALL_MOD_PATH)/boot/System.map-@LINUX_VERSION@; \
|
|
if [ -f $$sysmap ]; then \
|
|
depmod -ae -F $$sysmap @LINUX_VERSION@; \
|
|
fi
|
|
|
|
modules_install-FreeBSD:
|
|
@# Install the kernel modules
|
|
+$(FMAKE) install
|
|
|
|
modules_install: modules_install-@ac_system@
|
|
|
|
modules_uninstall-Linux:
|
|
@# Uninstall the kernel modules
|
|
kmoddir=$(DESTDIR)$(INSTALL_MOD_PATH)/lib/modules/@LINUX_VERSION@; \
|
|
for objdir in $(ZFS_MODULES); do \
|
|
$(RM) -R $$kmoddir/$(INSTALL_MOD_DIR)/$$objdir; \
|
|
done
|
|
|
|
modules_uninstall-FreeBSD:
|
|
@false
|
|
|
|
modules_uninstall: modules_uninstall-@ac_system@
|
|
|
|
cppcheck-Linux:
|
|
@CPPCHECK@ -j@CPU_COUNT@ --std=c99 --quiet --force --error-exitcode=2 \
|
|
--inline-suppr --suppress=noValidConfiguration \
|
|
--enable=warning,information -D_KERNEL \
|
|
--include=@LINUX_OBJ@/include/generated/autoconf.h \
|
|
--include=@top_srcdir@/zfs_config.h \
|
|
--config-exclude=@LINUX_OBJ@/include \
|
|
-I @LINUX_OBJ@/include \
|
|
-I @top_srcdir@/include/os/linux/kernel \
|
|
-I @top_srcdir@/include/os/linux/spl \
|
|
-I @top_srcdir@/include/os/linux/zfs \
|
|
-I @top_srcdir@/include \
|
|
avl icp lua nvpair spl unicode zcommon zfs zstd os/linux
|
|
|
|
cppcheck-FreeBSD:
|
|
@true
|
|
|
|
cppcheck: cppcheck-@ac_system@
|
|
|
|
distdir:
|
|
(cd @srcdir@ && find $(ZFS_MODULES) os -name '*.[chS]') | \
|
|
while read path; do \
|
|
mkdir -p $$distdir/$${path%/*}; \
|
|
cp @srcdir@/$$path $$distdir/$$path; \
|
|
done; \
|
|
cp @srcdir@/Makefile.bsd $$distdir/Makefile.bsd
|