linux-yocto/scripts/package/PKGBUILD
Jose Fernandez 4929f5b95f kbuild: add debug package to pacman PKGBUILD
Add a new debug package to the PKGBUILD for the pacman-pkg target. The
debug package includes the non-stripped vmlinux file with debug symbols
for kernel debugging and profiling. The file is installed at
/usr/src/debug/${pkgbase}, with a symbolic link at
/usr/lib/modules/$(uname -r)/build/vmlinux. The debug package is built
by default.

Signed-off-by: Jose Fernandez <jose.fernandez@linux.dev>
Reviewed-by: Peter Jung <ptr1337@cachyos.org>
Acked-by: Thomas Weißschuh <linux@weissschuh.net>
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
2024-09-07 17:24:08 +09:00

3.2 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 cpio 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/${MODLIB}"

_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/${MODLIB}/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) 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/${MODLIB}/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