From 33982eb24c615f78b8f6b5f54c6acb6c29cbf6e3 Mon Sep 17 00:00:00 2001 From: Arvind Sankar Date: Fri, 19 Jun 2020 13:33:56 -0400 Subject: [PATCH] Support out-of-tree kmod build on FreeBSD If srcdir != builddir, pass down MAKEOBJDIR to the FreeBSD make to support out-of-tree builds. Also allow passing all the gmake options that FreeBSD make understands to support useful flags like -k, -n, -q etc, and detect the number of CPUs if -j was specified without an argument. Reviewed-by: Ryan Moeller Reviewed-by: Brian Behlendorf Signed-off-by: Arvind Sankar Closes #10493 --- module/Makefile.in | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/module/Makefile.in b/module/Makefile.in index 3485649dc1..6df0f5636b 100644 --- a/module/Makefile.in +++ b/module/Makefile.in @@ -10,16 +10,41 @@ install: modules_install uninstall: modules_uninstall check: +# 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 -# Only pass down gmake -j flag, if used. modules-FreeBSD: - flags="$$(echo $$MAKEFLAGS | awk -v RS=' ' /^-j/)"; \ - env MAKEFLAGS="" make $${flags} -f Makefile.bsd + +$(FMAKE) modules-unknown: @true @@ -37,8 +62,7 @@ clean-Linux: find . -name '*.ur-safe' -type f -print | xargs $(RM) clean-FreeBSD: - flags="$$(echo $$MAKEFLAGS | awk -v RS=' ' /^-j/)"; \ - env MAKEFLAGS="" make $${flags} -f Makefile.bsd clean + +$(FMAKE) clean clean: clean-@ac_system@ @@ -87,8 +111,7 @@ cscopelist-am: $(am__tagged_files) modules_install-FreeBSD: @# Install the kernel modules - flags="$$(echo $$MAKEFLAGS | awk -v RS=' ' /^-j/)"; \ - env MAKEFLAGS="" make $${flags} -f Makefile.bsd install + +$(FMAKE) install modules_install: modules_install-@ac_system@