forked from openzfs/spl
-
Notifications
You must be signed in to change notification settings - Fork 2
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 SPL as a builtin module. The script makes a full copy of all needed files, thus making the kernel source tree fully independent of the spl 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 spl source package. Signed-off-by: Brian Behlendorf <[email protected]> Issue openzfs/zfs#851
- Loading branch information
1 parent
723aa3b
commit c167aad
Showing
5 changed files
with
137 additions
and
9 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,122 @@ | ||
#!/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 'spl_config.h' ] | ||
then | ||
echo >&2 | ||
echo " $0: you did not run configure, or you're not in the SPL 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/spl" "$KERNEL_DIR/spl" | ||
cp --recursive include "$KERNEL_DIR/include/spl" | ||
cp --recursive module "$KERNEL_DIR/spl" | ||
cp spl_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/spl/$MODULE/Makefile" | ||
done | ||
|
||
cat > "$KERNEL_DIR/spl/Kconfig" <<"EOF" | ||
config SPL | ||
tristate "Solaris Porting Layer (SPL)" | ||
help | ||
This is the SPL library from the ZFS On Linux project. | ||
See http://zfsonlinux.org/ | ||
To compile this library as a module, choose M here. | ||
If unsure, say N. | ||
EOF | ||
|
||
{ | ||
cat <<-"EOF" | ||
SPL_MODULE_CFLAGS = -I$(srctree)/include/spl | ||
SPL_MODULE_CFLAGS += -include $(srctree)/spl_config.h | ||
export SPL_MODULE_CFLAGS | ||
obj-$(CONFIG_SPL) := | ||
EOF | ||
|
||
for MODULE in "${MODULES[@]}" | ||
do | ||
echo 'obj-$(CONFIG_SPL) += ' "$MODULE/" | ||
done | ||
} > "$KERNEL_DIR/spl/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/Kconfig" 'source "arch/$SRCARCH/Kconfig"' 'source "spl/Kconfig"' | ||
# We must take care to build SPL before ZFS, else module initialization order will be wrong | ||
sed -i 's#kernel/ mm/ fs/#kernel/ mm/ spl/ fs/#' "$KERNEL_DIR/Makefile" | ||
|
||
echo >&2 | ||
echo " $0: done." >&2 | ||
echo " $0: now you can build the kernel with SPL support." >&2 | ||
echo " $0: make sure you enable SPL support (CONFIG_SPL) 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
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