mirror of
https://github.com/openzfs/zfs.git
synced 2025-10-01 02:46:29 +00:00

The icp Makefile was referencing absolute paths to the zfs source tree for include files. The result was that even though the headers get added to the Linux kernel tree, building fails if you move/remove the zfs checkout. Signed-off-by: Michael D Labriola <michael.d.labriola@gmail.com>
116 lines
2.6 KiB
Bash
Executable File
116 lines
2.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
usage()
|
|
{
|
|
echo "usage: $0 <kernel source tree>" >&2
|
|
exit 1
|
|
}
|
|
|
|
[ "$#" -eq 1 ] || usage
|
|
KERNEL_DIR="$(readlink --canonicalize-existing "$1")"
|
|
|
|
MODULES=()
|
|
MODULES+="spl"
|
|
for MODULE_DIR in module/*
|
|
do
|
|
[ -d "$MODULE_DIR" ] || continue
|
|
[ "spl" = "${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
|
|
scripts/make_gitrev.sh || 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/include/zfs/"
|
|
rm "$KERNEL_DIR/include/zfs/.gitignore"
|
|
|
|
for MODULE in "${MODULES[@]}"
|
|
do
|
|
sed -i '/obj =/d' "$KERNEL_DIR/fs/zfs/$MODULE/Makefile"
|
|
sed -i '/src =/d' "$KERNEL_DIR/fs/zfs/$MODULE/Makefile"
|
|
sed -i "s|-I$PWD/module/|-I\$(srctree)/fs/zfs/|" "$KERNEL_DIR/fs/zfs/$MODULE/Makefile"
|
|
done
|
|
|
|
cat > "$KERNEL_DIR/fs/zfs/Kconfig" <<"EOF"
|
|
config ZFS
|
|
tristate "ZFS filesystem support"
|
|
depends on EFI_PARTITION
|
|
select ZLIB_INFLATE
|
|
select ZLIB_DEFLATE
|
|
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
|
|
ZFS_MODULE_CFLAGS += -I$(srctree)/include/zfs/spl
|
|
ZFS_MODULE_CFLAGS += -include $(srctree)/include/zfs/zfs_config.h
|
|
ZFS_MODULE_CFLAGS += -std=gnu99 -Wno-declaration-after-statement
|
|
ZFS_MODULE_CPPFLAGS = -D_KERNEL
|
|
ZFS_MODULE_CPPFLAGS += -UDEBUG -DNDEBUG
|
|
export ZFS_MODULE_CFLAGS ZFS_MODULE_CPPFLAGS
|
|
|
|
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
|