linux-yocto/scripts/package/PKGBUILD
Masahiro Yamada 8bdd53e066 kbuild: pacman-pkg: hardcode module installation path
'make pacman-pkg' for architectures with device tree support (i.e., arm,
arm64, etc.) shows logs like follows:

  Installing dtbs...
    INSTALL /home/masahiro/linux/pacman/linux-upstream/pkg/linux-upstream/usr//lib/modules/6.14.0-rc6+/dtb/actions/s700-cubieboard7.dtb
    INSTALL /home/masahiro/linux/pacman/linux-upstream/pkg/linux-upstream/usr//lib/modules/6.14.0-rc6+/dtb/actions/s900-bubblegum-96.dtb
    INSTALL /home/masahiro/linux/pacman/linux-upstream/pkg/linux-upstream/usr//lib/modules/6.14.0-rc6+/dtb/airoha/en7581-evb.dtb
      ...

The double slashes ('//') between 'usr' and 'lib' are somewhat ugly.

Let's hardcode the module installation path because the package contents
should remain unaffected even if ${MODLIB} is overridden. Please note that
scripts/packages/{builddeb,kernel.spec} also hardcode the module
installation path.

With this change, the log will look better, as follows:

  Installing dtbs...
    INSTALL /home/masahiro/linux/pacman/linux-upstream/pkg/linux-upstream/usr/lib/modules/6.14.0-rc6+/dtb/actions/s700-cubieboard7.dtb
    INSTALL /home/masahiro/linux/pacman/linux-upstream/pkg/linux-upstream/usr/lib/modules/6.14.0-rc6+/dtb/actions/s900-bubblegum-96.dtb
    INSTALL /home/masahiro/linux/pacman/linux-upstream/pkg/linux-upstream/usr/lib/modules/6.14.0-rc6+/dtb/airoha/en7581-evb.dtb
      ...

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Acked-by: Thomas Weißschuh <linux@weissschuh.net>
Reviewed-by: Nathan Chancellor <nathan@kernel.org>
2025-03-23 00:56:13 +09:00

3.3 KiB

SPDX-License-Identifier: GPL-2.0-only

Maintainer: Thomas Weißschuh linux@weissschuh.net

Contributor: Jan Alexander Steffens (heftig) heftig@archlinux.org

pkgbase=${PACMAN_PKGBASE:-linux-upstream} pkgname=("${pkgbase}")

_extrapackages=${PACMAN_EXTRAPACKAGES-headers api-headers debug} for pkg in $_extrapackages; do pkgname+=("${pkgbase}-${pkg}") done

pkgver="${KERNELRELEASE//-/_}"

The PKGBUILD is evaluated multiple times.

Running scripts/build-version from here would introduce inconsistencies.

pkgrel="${KBUILD_REVISION}" pkgdesc='Upstream Linux' url='https://www.kernel.org/'

Enable flexible cross-compilation

arch=(${CARCH}) license=(GPL-2.0-only) makedepends=( bc bison flex gettext kmod libelf openssl pahole perl python rsync tar ) options=(!debug !strip !buildflags !makeflags)

_prologue() { # MAKEFLAGS from makepkg.conf override the ones inherited from kbuild. # Bypass this override with a custom variable. export MAKEFLAGS="${KBUILD_MAKEFLAGS}"

# Kbuild works in the output directory, where this PKGBUILD is located.
cd "$(dirname "${BASH_SOURCE[0]}")"

}

build() { _prologue

${MAKE} KERNELRELEASE="${KERNELRELEASE}" KBUILD_BUILD_VERSION="${pkgrel}"

}

_package() { pkgdesc="The ${pkgdesc} kernel and modules"

local modulesdir="${pkgdir}/usr/lib/modules/${KERNELRELEASE}"

_prologue

echo "Installing boot image..."
# systemd expects to find the kernel here to allow hibernation
# https://github.com/systemd/systemd/commit/edda44605f06a41fb86b7ab8128dcf99161d2344
install -Dm644 "$(${MAKE} -s image_name)" "${modulesdir}/vmlinuz"

# Used by mkinitcpio to name the kernel
echo "${pkgbase}" > "${modulesdir}/pkgbase"

echo "Installing modules..."
${MAKE} INSTALL_MOD_PATH="${pkgdir}/usr" INSTALL_MOD_STRIP=1 \
	DEPMOD=true modules_install

if [ -d "${srctree}/arch/${SRCARCH}/boot/dts" ]; then
	echo "Installing dtbs..."
	${MAKE} INSTALL_DTBS_PATH="${modulesdir}/dtb" dtbs_install
fi

# remove build link, will be part of -headers package
rm -f "${modulesdir}/build"

}

_package-headers() { pkgdesc="Headers and scripts for building modules for the ${pkgdesc} kernel"

local builddir="${pkgdir}/usr/lib/modules/${KERNELRELEASE}/build"

_prologue

if grep -q CONFIG_MODULES=y include/config/auto.conf; then
	echo "Installing build files..."
	"${srctree}/scripts/package/install-extmod-build" "${builddir}"
fi

echo "Installing System.map and config..."
mkdir -p "${builddir}"
cp System.map "${builddir}/System.map"
cp .config "${builddir}/.config"

echo "Adding symlink..."
mkdir -p "${pkgdir}/usr/src"
ln -sr "${builddir}" "${pkgdir}/usr/src/${pkgbase}"

}

_package-api-headers() { pkgdesc="Kernel headers sanitized for use in userspace" provides=(linux-api-headers="${pkgver}") conflicts=(linux-api-headers)

_prologue

${MAKE} headers_install INSTALL_HDR_PATH="${pkgdir}/usr"

}

_package-debug(){ pkgdesc="Non-stripped vmlinux file for the ${pkgdesc} kernel"

local debugdir="${pkgdir}/usr/src/debug/${pkgbase}"
local builddir="${pkgdir}/usr/lib/modules/${KERNELRELEASE}/build"

_prologue

install -Dt "${debugdir}" -m644 vmlinux
mkdir -p "${builddir}"
ln -sr "${debugdir}/vmlinux" "${builddir}/vmlinux"

}

for p in "${pkgname[@]}"; do eval "package$_p() { $(declare -f "_package${_p#$pkgbase}") _package${_p#$pkgbase} }" done