Skip to content

Commit

Permalink
kbuild: refactor kernel-devel RPM package and linux-headers Deb package
Browse files Browse the repository at this point in the history
The kernel-devel RPM package and the linux-headers Debian package
provide headers and scripts needed for building external modules.

They copy the necessary files in slightly different ways - the RPM
copies almost everything except some exclude patterns, while the Debian
copies less number of files. There is no need to maintain different code
to do the same thing.

Split the Debian code out to scripts/package/install-extmod-build, which
is called from both of the packages.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
  • Loading branch information
masahir0y committed Jul 24, 2023
1 parent 76a48b8 commit fe66b5d
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 33 deletions.
29 changes: 1 addition & 28 deletions scripts/package/builddeb
Original file line number Diff line number Diff line change
Expand Up @@ -162,34 +162,7 @@ install_kernel_headers () {

rm -rf $pdir

(
cd $srctree
find . arch/$SRCARCH -maxdepth 1 -name Makefile\*
find include scripts -type f -o -type l
find arch/$SRCARCH -name Kbuild.platforms -o -name Platform
find $(find arch/$SRCARCH -name include -o -name scripts -type d) -type f
) > debian/hdrsrcfiles

{
if is_enabled CONFIG_OBJTOOL; then
echo tools/objtool/objtool
fi

find arch/$SRCARCH/include Module.symvers include scripts -type f

if is_enabled CONFIG_GCC_PLUGINS; then
find scripts/gcc-plugins -name \*.so
fi
} > debian/hdrobjfiles

destdir=$pdir/usr/src/linux-headers-$version
mkdir -p $destdir
tar -c -f - -C $srctree -T debian/hdrsrcfiles | tar -xf - -C $destdir
tar -c -f - -T debian/hdrobjfiles | tar -xf - -C $destdir
rm -f debian/hdrsrcfiles debian/hdrobjfiles

# copy .config manually to be where it's expected to be
cp $KCONFIG_CONFIG $destdir/.config
"${srctree}/scripts/package/install-extmod-build" "${pdir}/usr/src/linux-headers-${version}"

mkdir -p $pdir/lib/modules/$version/
ln -s /usr/src/linux-headers-$version $pdir/lib/modules/$version/build
Expand Down
39 changes: 39 additions & 0 deletions scripts/package/install-extmod-build
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0-only

set -e

destdir=${1}

test -n "${srctree}"
test -n "${SRCARCH}"

is_enabled() {
grep -q "^$1=y" include/config/auto.conf
}

mkdir -p "${destdir}"

(
cd "${srctree}"
echo Makefile
find "arch/${SRCARCH}" -maxdepth 1 -name 'Makefile*'
find include scripts -type f -o -type l
find "arch/${SRCARCH}" -name Kbuild.platforms -o -name Platform
find "$(find "arch/${SRCARCH}" -name include -o -name scripts -type d)" -type f
) | tar -c -f - -C "${srctree}" -T - | tar -xf - -C "${destdir}"

{
if is_enabled CONFIG_OBJTOOL; then
echo tools/objtool/objtool
fi

find "arch/${SRCARCH}/include" Module.symvers include scripts -type f

if is_enabled CONFIG_GCC_PLUGINS; then
find scripts/gcc-plugins -name '*.so'
fi
} | tar -c -f - -T - | tar -xf - -C "${destdir}"

# copy .config manually to be where it's expected to be
cp "${KCONFIG_CONFIG}" "${destdir}/.config"
6 changes: 1 addition & 5 deletions scripts/package/mkspec
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,6 @@ else
fi

__KERNELRELEASE=$(echo $KERNELRELEASE | sed -e "s/-/_/g")
EXCLUDES="$RCS_TAR_IGNORE --exclude=*vmlinux* --exclude=*.mod \
--exclude=*.o --exclude=*.ko --exclude=*.cmd --exclude=Documentation \
--exclude=.config.old --exclude=.missing-syscalls.d --exclude=*.s"

# We can label the here-doc lines for conditional output to the spec file
#
Expand Down Expand Up @@ -112,8 +109,7 @@ $M %{make} %{makeflags} INSTALL_MOD_PATH=%{buildroot} modules_install
cp .config %{buildroot}/boot/config-%{KERNELRELEASE}
$S$M rm -f %{buildroot}/lib/modules/%{KERNELRELEASE}/build
$S$M rm -f %{buildroot}/lib/modules/%{KERNELRELEASE}/source
$S$M mkdir -p %{buildroot}/usr/src/kernels/%{KERNELRELEASE}
$S$M tar cf - $EXCLUDES . | tar xf - -C %{buildroot}/usr/src/kernels/%{KERNELRELEASE}
$S$M %{make} %{makeflags} run-command KBUILD_RUN_COMMAND='\${srctree}/scripts/package/install-extmod-build %{buildroot}/usr/src/kernels/%{KERNELRELEASE}'
$S$M cd %{buildroot}/lib/modules/%{KERNELRELEASE}
$S$M ln -sf /usr/src/kernels/%{KERNELRELEASE} build
$S$M ln -sf /usr/src/kernels/%{KERNELRELEASE} source
Expand Down

0 comments on commit fe66b5d

Please sign in to comment.