47a4a6fd5f
Build products from an out of tree build should be written relative to the build directory. Sources should be referred to by their locations in the source directory. This is accomplished by adding the 'src' and 'obj' variables for the module Makefile.am, using relative paths to reference source files, and by setting VPATH when source files are not co-located with the Makefile. This enables the following: $ mkdir build $ cd build $ ../configure \ --with-spl=$HOME/src/git/spl/ \ --with-spl-obj=$HOME/src/git/spl/build $ make -s This change also has the advantage of resolving the following warning which is generated by modern versions of automake. Makefile.am:00: warning: source file 'xxx' is in a subdirectory, Makefile.am:00: but option 'subdir-objects' is disabled Signed-off-by: Turbo Fredriksson <turbo@bayour.com> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #1082
76 lines
2.5 KiB
Makefile
76 lines
2.5 KiB
Makefile
subdir-m += avl
|
|
subdir-m += nvpair
|
|
subdir-m += unicode
|
|
subdir-m += zcommon
|
|
subdir-m += zfs
|
|
subdir-m += zpios
|
|
|
|
INSTALL_MOD_DIR ?= extra
|
|
|
|
ZFS_MODULE_CFLAGS += -include @SPL_OBJ@/spl_config.h
|
|
ZFS_MODULE_CFLAGS += -include @abs_top_builddir@/zfs_config.h
|
|
ZFS_MODULE_CFLAGS += -I@abs_top_srcdir@/include -I@SPL@/include -I@SPL@
|
|
export ZFS_MODULE_CFLAGS
|
|
|
|
modules:
|
|
@# Make the exported SPL symbols available to these modules.
|
|
@# They may be in the root of SPL_OBJ when building against
|
|
@# installed devel headers, or they may be in the module
|
|
@# subdirectory when building against the spl source tree.
|
|
@if [ -f @SPL_OBJ@/@SPL_SYMBOLS@ ]; then \
|
|
/bin/cp @SPL_OBJ@/@SPL_SYMBOLS@ .; \
|
|
elif [ -f @SPL_OBJ@/module/@SPL_SYMBOLS@ ]; then \
|
|
/bin/cp @SPL_OBJ@/module/@SPL_SYMBOLS@ .; \
|
|
else \
|
|
echo -e "\n" \
|
|
"*** Missing spl symbols ensure you have built the spl:\n" \
|
|
"*** - @SPL_OBJ@/@SPL_SYMBOLS@, or\n" \
|
|
"*** - @SPL_OBJ@/module/@SPL_SYMBOLS@\n"; \
|
|
exit 1; \
|
|
fi
|
|
$(MAKE) -C @LINUX_OBJ@ SUBDIRS=`pwd` @KERNELMAKE_PARAMS@ CONFIG_ZFS=m $@
|
|
|
|
clean:
|
|
@# 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@ SUBDIRS=`pwd` @KERNELMAKE_PARAMS@ $@
|
|
|
|
if [ -f @SPL_SYMBOLS@ ]; then $(RM) @SPL_SYMBOLS@; fi
|
|
if [ -f @LINUX_SYMBOLS@ ]; then $(RM) @LINUX_SYMBOLS@; fi
|
|
if [ -f Module.markers ]; then $(RM) Module.markers; fi
|
|
|
|
modules_install:
|
|
@# Install the kernel modules
|
|
$(MAKE) -C @LINUX_OBJ@ SUBDIRS=`pwd` $@ \
|
|
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 $$kmoddir ]; 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_uninstall:
|
|
@# Uninstall the kernel modules
|
|
kmoddir=$(DESTDIR)$(INSTALL_MOD_PATH)/lib/modules/@LINUX_VERSION@
|
|
list='$(subdir-m)'; for subdir in $$list; do \
|
|
$(RM) -R $$kmoddir/$(INSTALL_MOD_DIR)/$$subdir; \
|
|
done
|
|
|
|
distdir:
|
|
list='$(subdir-m)'; for subdir in $$list; do \
|
|
(find @top_srcdir@/module/$$subdir -name '*.c' -o -name '*.h' |\
|
|
xargs /bin/cp -t $$distdir/$$subdir); \
|
|
done
|
|
|
|
distclean maintainer-clean: clean
|
|
install: modules_install
|
|
uninstall: modules_uninstall
|
|
all: modules
|
|
check:
|