-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add script for builtin module building.
This commit introduces a "copy-builtin" script designed to prepare a kernel source tree for building ZFS as a builtin module. The script makes a full copy of all needed files, thus making the kernel source tree fully independent of the zfs source package. To achieve that, some compilation flags (-include, -I) have been moved to module/Makefile. This Makefile is only used when compiling external modules; when compiling builtin modules, a Kbuild file generated by the configure-builtin script is used instead. This makes sure Makefiles inside the kernel source tree does not contain references to the zfs source package. Signed-off-by: Brian Behlendorf <[email protected]> Issue #851
- Loading branch information
1 parent
7057418
commit 2ee4a18
Showing
9 changed files
with
145 additions
and
31 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,121 @@ | ||
#!/bin/bash | ||
|
||
set -e | ||
|
||
usage() | ||
{ | ||
echo "usage: $0 <kernel source tree>" >&2 | ||
exit 1 | ||
} | ||
|
||
[ "$#" -eq 1 ] || usage | ||
KERNEL_DIR="$(readlink --canonicalize-existing "$1")" | ||
|
||
MODULES=() | ||
for MODULE_DIR in module/* | ||
do | ||
[ -d "$MODULE_DIR" ] || continue | ||
MODULES+=("${MODULE_DIR##*/}") | ||
done | ||
|
||
if ! [ -e 'zfs_config.h' ] | ||
then | ||
echo >&2 | ||
echo " $0: you did not run configure, or you're not in the ZFS source directory." >&2 | ||
echo " $0: run configure with --with-linux=$KERNEL_DIR and --enable-linux-builtin." >&2 | ||
echo >&2 | ||
exit 1 | ||
fi | ||
|
||
make clean || true | ||
|
||
rm -rf "$KERNEL_DIR/include/zfs" "$KERNEL_DIR/fs/zfs" | ||
cp --recursive include "$KERNEL_DIR/include/zfs" | ||
cp --recursive module "$KERNEL_DIR/fs/zfs" | ||
cp zfs_config.h "$KERNEL_DIR/" | ||
|
||
adjust_obj_paths() | ||
{ | ||
local FILE="$1" | ||
local LINE OBJPATH | ||
|
||
while IFS='' read -r LINE | ||
do | ||
OBJPATH="${LINE#\$(MODULE)-objs += }" | ||
if [ "$OBJPATH" = "$LINE" ] | ||
then | ||
echo "$LINE" | ||
else | ||
echo "\$(MODULE)-objs += ${OBJPATH##*/}" | ||
fi | ||
done < "$FILE" > "$FILE.new" | ||
mv "$FILE.new" "$FILE" | ||
} | ||
|
||
for MODULE in "${MODULES[@]}" | ||
do | ||
adjust_obj_paths "$KERNEL_DIR/fs/zfs/$MODULE/Makefile" | ||
done | ||
|
||
cat > "$KERNEL_DIR/fs/zfs/Kconfig" <<"EOF" | ||
config ZFS | ||
tristate "ZFS" | ||
depends on SPL | ||
help | ||
This is the ZFS filesystem from the ZFS On Linux project. | ||
See http://zfsonlinux.org/ | ||
To compile this file system support as a module, choose M here. | ||
If unsure, say N. | ||
EOF | ||
|
||
{ | ||
cat <<-"EOF" | ||
ZFS_MODULE_CFLAGS = -I$(srctree)/include/zfs -I$(srctree)/include/spl | ||
ZFS_MODULE_CFLAGS += -include $(srctree)/spl_config.h -include $(srctree)/zfs_config.h | ||
export ZFS_MODULE_CFLAGS | ||
obj-$(CONFIG_ZFS) := | ||
EOF | ||
|
||
for MODULE in "${MODULES[@]}" | ||
do | ||
echo 'obj-$(CONFIG_ZFS) += ' "$MODULE/" | ||
done | ||
} > "$KERNEL_DIR/fs/zfs/Kbuild" | ||
|
||
add_after() | ||
{ | ||
local FILE="$1" | ||
local MARKER="$2" | ||
local NEW="$3" | ||
local LINE | ||
|
||
while IFS='' read -r LINE | ||
do | ||
echo "$LINE" | ||
|
||
if [ -n "$MARKER" -a "$LINE" = "$MARKER" ] | ||
then | ||
echo "$NEW" | ||
MARKER='' | ||
if IFS='' read -r LINE | ||
then | ||
[ "$LINE" != "$NEW" ] && echo "$LINE" | ||
fi | ||
fi | ||
done < "$FILE" > "$FILE.new" | ||
|
||
mv "$FILE.new" "$FILE" | ||
} | ||
|
||
add_after "$KERNEL_DIR/fs/Kconfig" 'if BLOCK' 'source "fs/zfs/Kconfig"' | ||
add_after "$KERNEL_DIR/fs/Makefile" 'endif' 'obj-$(CONFIG_ZFS) += zfs/' | ||
|
||
echo >&2 | ||
echo " $0: done." >&2 | ||
echo " $0: now you can build the kernel with ZFS support." >&2 | ||
echo " $0: make sure you enable ZFS support (CONFIG_ZFS) before building." >&2 | ||
echo >&2 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,7 @@ | ||
MODULE := zavl | ||
|
||
EXTRA_CFLAGS = @KERNELCPPFLAGS@ | ||
EXTRA_CFLAGS += -include @SPL_OBJ@/spl_config.h | ||
EXTRA_CFLAGS += -include @abs_top_builddir@/zfs_config.h | ||
EXTRA_CFLAGS += -I@abs_top_srcdir@/include -I@SPL@/include -I@SPL@ | ||
EXTRA_CFLAGS = $(ZFS_MODULE_CFLAGS) @KERNELCPPFLAGS@ | ||
|
||
obj-m := $(MODULE).o | ||
obj-$(CONFIG_ZFS) := $(MODULE).o | ||
|
||
$(MODULE)-objs += @top_srcdir@/module/avl/avl.o |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,8 @@ | ||
MODULE := zunicode | ||
|
||
EXTRA_CFLAGS = @KERNELCPPFLAGS@ | ||
EXTRA_CFLAGS += -include @SPL_OBJ@/spl_config.h | ||
EXTRA_CFLAGS += -include @abs_top_builddir@/zfs_config.h | ||
EXTRA_CFLAGS += -I@abs_top_srcdir@/include -I@SPL@/include -I@SPL@ | ||
EXTRA_CFLAGS = $(ZFS_MODULE_CFLAGS) @KERNELCPPFLAGS@ | ||
|
||
obj-m := $(MODULE).o | ||
obj-$(CONFIG_ZFS) := $(MODULE).o | ||
|
||
$(MODULE)-objs += @top_srcdir@/module/unicode/u8_textprep.o | ||
$(MODULE)-objs += @top_srcdir@/module/unicode/uconv.o |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,7 @@ | ||
MODULE := zpios | ||
|
||
EXTRA_CFLAGS = @KERNELCPPFLAGS@ | ||
EXTRA_CFLAGS += -include @SPL_OBJ@/spl_config.h | ||
EXTRA_CFLAGS += -include @abs_top_builddir@/zfs_config.h | ||
EXTRA_CFLAGS += -I@abs_top_srcdir@/include -I@SPL@/include -I@SPL@ | ||
EXTRA_CFLAGS = $(ZFS_MODULE_CFLAGS) @KERNELCPPFLAGS@ | ||
|
||
obj-m := $(MODULE).o | ||
obj-$(CONFIG_ZFS) := $(MODULE).o | ||
|
||
$(MODULE)-objs += @top_srcdir@/module/zpios/pios.o |