36b6ca6927
This adds support for older hardware such as Power Mac G5 in the BE config and enables some extra options in the LE config. It also enables building on ppc64 glibc. [ci skip]
320 lines
10 KiB
Bash
320 lines
10 KiB
Bash
# Template file for 'linux4.19'
|
|
pkgname=linux4.19
|
|
version=4.19.36
|
|
revision=1
|
|
wrksrc="linux-${version}"
|
|
short_desc="Linux kernel and modules (${version%.*} series)"
|
|
maintainer="Helmut Pozimski <helmut@pozimski.eu>"
|
|
license="GPL-2.0-only"
|
|
homepage="https://www.kernel.org"
|
|
distfiles="https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-${version}.tar.xz"
|
|
checksum=b808b508177f9d288d94a3b9df7b01d5eac9fcc1804a794c913b2144de63f2bc
|
|
patch_args="-Np1"
|
|
|
|
nodebug=yes # -dbg package is generated below manually
|
|
nostrip=yes
|
|
noverifyrdeps=yes
|
|
noshlibprovides=yes
|
|
preserve=yes
|
|
|
|
archs="i686* x86_64* arm* aarch64* ppc64*"
|
|
hostmakedepends="bc elfutils-devel flex gmp-devel kmod libmpc-devel libressl-devel perl uboot-mkimage"
|
|
|
|
_kernver="${version}_${revision}"
|
|
triggers="kernel-hooks"
|
|
kernel_hooks_version="${_kernver}"
|
|
|
|
# These files could be modified when an external module is built.
|
|
mutable_files="
|
|
/usr/lib/modules/${_kernver}/modules.builtin.bin
|
|
/usr/lib/modules/${_kernver}/modules.softdep
|
|
/usr/lib/modules/${_kernver}/modules.dep
|
|
/usr/lib/modules/${_kernver}/modules.dep.bin
|
|
/usr/lib/modules/${_kernver}/modules.symbols
|
|
/usr/lib/modules/${_kernver}/modules.symbols.bin
|
|
/usr/lib/modules/${_kernver}/modules.alias
|
|
/usr/lib/modules/${_kernver}/modules.alias.bin
|
|
/usr/lib/modules/${_kernver}/modules.devname"
|
|
|
|
do_configure() {
|
|
# 4.19 misses Documentation/DocBook. We ship the directory from 4.12 here.
|
|
cp -a $FILESDIR/DocBook -t Documentation
|
|
|
|
# If there's a file called <arch>-dotconfig, use it to
|
|
# configure the kernel; otherwise use arch defaults and all stuff
|
|
# as modules (defconfig+allmodconfig).
|
|
local arch subarch _args
|
|
|
|
case "$XBPS_TARGET_MACHINE" in
|
|
i686*) arch=i386;;
|
|
x86_64*) arch=x86_64;;
|
|
arm*) arch=arm;;
|
|
aarch64*) arch=arm64;;
|
|
ppc64le*) arch=powerpc; subarch=ppc64le;;
|
|
ppc64*) arch=powerpc; subarch=ppc64;;
|
|
esac
|
|
|
|
if [ "$CROSS_BUILD" ]; then
|
|
_args="CROSS_COMPILE=${XBPS_CROSS_TRIPLET}-"
|
|
fi
|
|
|
|
if [ -f ${FILESDIR}/${subarch:-$arch}-dotconfig-custom ]; then
|
|
msg_normal "Detected a custom .config file for your arch, using it.\n"
|
|
cp -f ${FILESDIR}/${subarch:-$arch}-dotconfig-custom .config
|
|
make ${makejobs} ARCH=$arch ${_args} oldconfig
|
|
elif [ -f ${FILESDIR}/${subarch:-$arch}-dotconfig ]; then
|
|
msg_normal "Detected a .config file for your arch, using it.\n"
|
|
cp -f ${FILESDIR}/${subarch:-$arch}-dotconfig .config
|
|
make ${makejobs} ARCH=$arch ${_args} oldconfig
|
|
elif [ -f ${FILESDIR}/${XBPS_TARGET_MACHINE%%-musl}-dotconfig ]; then
|
|
msg_normal "Detected a .config file for your cpu family, using it.\n"
|
|
cp -f ${FILESDIR}/${XBPS_TARGET_MACHINE%%-musl}-dotconfig .config
|
|
make ${makejobs} ARCH=$arch ${_args} oldconfig
|
|
else
|
|
msg_normal "Defaulting to 'defconfig and allmodconfig'.\n"
|
|
make ${makejobs} ARCH=$arch ${_args} defconfig
|
|
make ${makejobs} ARCH=$arch ${_args} allmodconfig
|
|
fi
|
|
# Always use our revision to CONFIG_LOCALVERSION to match our pkg version.
|
|
sed -i -e "s|^\(CONFIG_LOCALVERSION=\).*|\1\"_${revision}\"|" .config
|
|
}
|
|
do_build() {
|
|
local arch _cross _args
|
|
|
|
case "$XBPS_TARGET_MACHINE" in
|
|
i686*) _args="bzImage modules"; arch=i386;;
|
|
x86_64*) _args="bzImage modules"; arch=x86_64;;
|
|
arm*) _args="zImage modules dtbs"; arch=arm;;
|
|
aarch64*) _args="Image modules dtbs"; arch=arm64;;
|
|
ppc64*) _args="zImage modules"; arch=powerpc;;
|
|
esac
|
|
if [ "$CROSS_BUILD" ]; then
|
|
_cross="CROSS_COMPILE=${XBPS_CROSS_TRIPLET}-"
|
|
fi
|
|
if [ "${_patchver}" ]; then
|
|
_version="EXTRAVERSION=${_patchver}"
|
|
fi
|
|
export LDFLAGS=
|
|
make ARCH=$arch ${_version} ${_cross} ${makejobs} prepare
|
|
make ARCH=$arch ${_version} ${_cross} ${makejobs} ${_args}
|
|
}
|
|
do_install() {
|
|
local arch subarch _args hdrdest
|
|
|
|
case "$XBPS_TARGET_MACHINE" in
|
|
i686*) arch=x86; subarch=i386;;
|
|
x86_64*) arch=x86; subarch=x86_64;;
|
|
arm*) arch=arm;;
|
|
aarch64*) arch=arm64;;
|
|
ppc64*) arch=powerpc;;
|
|
esac
|
|
|
|
# Run depmod after compressing modules.
|
|
sed -i '2iexit 0' scripts/depmod.sh
|
|
|
|
# Install kernel, firmware and modules
|
|
make ${makejobs} ARCH=${subarch:-$arch} INSTALL_MOD_PATH=${DESTDIR} modules_install
|
|
|
|
hdrdest=${DESTDIR}/usr/src/kernel-headers-${_kernver}
|
|
|
|
vinstall .config 644 boot config-${_kernver}
|
|
vinstall System.map 644 boot System.map-${_kernver}
|
|
|
|
case "$arch" in
|
|
x86)
|
|
vinstall arch/x86/boot/bzImage 644 boot vmlinuz-${_kernver}
|
|
;;
|
|
arm)
|
|
vinstall arch/arm/boot/zImage 644 boot
|
|
make ${makejobs} ARCH=${subarch:-$arch} INSTALL_DTBS_PATH=${DESTDIR}/boot/dtbs/dtbs-${_kernver} dtbs_install
|
|
;;
|
|
arm64)
|
|
vinstall arch/arm64/boot/Image 644 boot vmlinux-${_kernver}
|
|
make ${makejobs} ARCH=${subarch:-$arch} INSTALL_DTBS_PATH=${DESTDIR}/boot/dtbs/dtbs-${_kernver} dtbs_install
|
|
;;
|
|
powerpc)
|
|
# zImage on powerpc is useless as it won't load initramfs
|
|
# raw vmlinux is huge, and this is nostrip, so do it manually
|
|
vinstall vmlinux 644 boot vmlinux-${_kernver}
|
|
/usr/bin/$STRIP ${DESTDIR}/boot/vmlinux-${_kernver}
|
|
;;
|
|
esac
|
|
|
|
# Switch to /usr.
|
|
vmkdir usr
|
|
mv ${DESTDIR}/lib ${DESTDIR}/usr
|
|
|
|
cd ${DESTDIR}/usr/lib/modules/${_kernver}
|
|
rm -f source build
|
|
ln -sf ../../../src/kernel-headers-${_kernver} build
|
|
|
|
cd ${wrksrc}
|
|
# Install required headers to build external modules
|
|
install -Dm644 Makefile ${hdrdest}/Makefile
|
|
install -Dm644 kernel/Makefile ${hdrdest}/kernel/Makefile
|
|
install -Dm644 .config ${hdrdest}/.config
|
|
for file in $(find . -name Kconfig\*); do
|
|
mkdir -p ${hdrdest}/$(dirname $file)
|
|
install -Dm644 $file ${hdrdest}/${file}
|
|
done
|
|
for file in $(find arch/${subarch:-$arch} -name module.lds -o -name Kbuild.platforms -o -name Platform); do
|
|
mkdir -p ${hdrdest}/$(dirname $file)
|
|
install -Dm644 $file ${hdrdest}/${file}
|
|
done
|
|
mkdir -p ${hdrdest}/include
|
|
# Remove firmware stuff provided by the "linux-firmware" pkg.
|
|
rm -rf ${DESTDIR}/usr/lib/firmware
|
|
|
|
for i in acpi asm-generic clocksource config crypto drm generated linux \
|
|
math-emu media net pcmcia scsi sound trace uapi video xen; do
|
|
if [ -d include/$i ]; then
|
|
cp -a include/$i ${hdrdest}/include
|
|
fi
|
|
done
|
|
|
|
cd ${wrksrc}
|
|
mkdir -p ${hdrdest}/arch/${arch}
|
|
cp -a arch/${arch}/include ${hdrdest}/arch/${arch}
|
|
|
|
# Remove helper binaries built for host,
|
|
# if generated files from the scripts/ directory need to be included,
|
|
# they need to be copied to ${hdrdest} before this step
|
|
if [ "$CROSS_BUILD" ]; then
|
|
make ${makejobs} ARCH=${subarch:-$arch} _mrproper_scripts
|
|
fi
|
|
|
|
# Copy files necessary for later builds, like nvidia and vmware
|
|
cp Module.symvers ${hdrdest}
|
|
cp -a scripts ${hdrdest}
|
|
mkdir -p ${hdrdest}/security/selinux
|
|
cp -a security/selinux/include ${hdrdest}/security/selinux
|
|
mkdir -p ${hdrdest}/tools/include
|
|
cp -a tools/include/tools ${hdrdest}/tools/include
|
|
|
|
mkdir -p ${hdrdest}/arch/${arch}/kernel
|
|
cp arch/${arch}/Makefile ${hdrdest}/arch/${arch}
|
|
if [ "$subarch" = "i386" ]; then
|
|
mkdir -p ${hdrdest}/arch/x86
|
|
cp arch/x86/Makefile_32.cpu ${hdrdest}/arch/x86
|
|
fi
|
|
if [ "$arch" = "x86" ]; then
|
|
mkdir -p ${hdrdest}/arch/x86/kernel
|
|
cp arch/x86/kernel/asm-offsets.s ${hdrdest}/arch/x86/kernel
|
|
elif [ "$arch" = "arm64" ]; then
|
|
mkdir -p ${hdrdest}/arch/arm64/kernel
|
|
cp -a arch/arm64/kernel/vdso ${hdrdest}/arch/arm64/kernel/
|
|
fi
|
|
|
|
# add headers for lirc package
|
|
# pci
|
|
for i in bt8xx cx88 saa7134; do
|
|
mkdir -p ${hdrdest}/drivers/media/pci/${i}
|
|
cp -a drivers/media/pci/${i}/*.h ${hdrdest}/drivers/media/pci/${i}
|
|
done
|
|
# usb
|
|
for i in cpia2 em28xx pwc; do
|
|
mkdir -p ${hdrdest}/drivers/media/usb/${i}
|
|
cp -a drivers/media/usb/${i}/*.h ${hdrdest}/drivers/media/usb/${i}
|
|
done
|
|
# i2c
|
|
mkdir -p ${hdrdest}/drivers/media/i2c
|
|
cp drivers/media/i2c/*.h ${hdrdest}/drivers/media/i2c
|
|
for i in cx25840; do
|
|
mkdir -p ${hdrdest}/drivers/media/i2c/${i}
|
|
cp -a drivers/media/i2c/${i}/*.h ${hdrdest}/drivers/media/i2c/${i}
|
|
done
|
|
|
|
# Add docbook makefile
|
|
install -Dm644 Documentation/DocBook/Makefile \
|
|
${hdrdest}/Documentation/DocBook/Makefile
|
|
|
|
# Add md headers
|
|
mkdir -p ${hdrdest}/drivers/md
|
|
cp drivers/md/*.h ${hdrdest}/drivers/md
|
|
|
|
# Add inotify.h
|
|
mkdir -p ${hdrdest}/include/linux
|
|
cp include/linux/inotify.h ${hdrdest}/include/linux
|
|
|
|
# Add wireless headers
|
|
mkdir -p ${hdrdest}/net/mac80211/
|
|
cp net/mac80211/*.h ${hdrdest}/net/mac80211
|
|
|
|
# add dvb headers for external modules
|
|
mkdir -p ${hdrdest}/include/config/dvb/
|
|
cp include/config/dvb/*.h ${hdrdest}/include/config/dvb/
|
|
|
|
# add dvb headers for http://mcentral.de/hg/~mrec/em28xx-new
|
|
mkdir -p ${hdrdest}/drivers/media/dvb-frontends
|
|
cp drivers/media/dvb-frontends/lgdt330x.h \
|
|
${hdrdest}/drivers/media/dvb-frontends/
|
|
cp drivers/media/i2c/msp3400-driver.h ${hdrdest}/drivers/media/i2c/
|
|
|
|
# add dvb headers
|
|
mkdir -p ${hdrdest}/drivers/media/usb/dvb-usb
|
|
cp drivers/media/usb/dvb-usb/*.h ${hdrdest}/drivers/media/usb/dvb-usb/
|
|
mkdir -p ${hdrdest}/drivers/media/dvb-frontends
|
|
cp drivers/media/dvb-frontends/*.h ${hdrdest}/drivers/media/dvb-frontends/
|
|
mkdir -p ${hdrdest}/drivers/media/tuners
|
|
cp drivers/media/tuners/*.h ${hdrdest}/drivers/media/tuners/
|
|
|
|
# Add xfs and shmem for aufs building
|
|
mkdir -p ${hdrdest}/fs/xfs/libxfs
|
|
mkdir -p ${hdrdest}/mm
|
|
cp fs/xfs/libxfs/xfs_sb.h ${hdrdest}/fs/xfs/libxfs/xfs_sb.h
|
|
|
|
# Add objtool binary, needed to build external modules with dkms
|
|
case "$XBPS_TARGET_MACHINE" in
|
|
x86_64*)
|
|
mkdir -p ${hdrdest}/tools/objtool
|
|
cp tools/objtool/objtool ${hdrdest}/tools/objtool
|
|
;;
|
|
esac
|
|
|
|
# Remove unneeded architectures
|
|
case "$arch" in
|
|
i386|x86_64) _args="arm* p*";;
|
|
arm|arm64) _args="x86* p*";;
|
|
powerpc) _args="arm* x86* parisc";;
|
|
esac
|
|
for arch in alpha avr32 blackfin cris frv h8300 \
|
|
ia64 m* s* um v850 xtensa ${_args}; do
|
|
rm -rf ${hdrdest}/arch/${arch}
|
|
done
|
|
# Keep arch/x86/ras/Kconfig as it is needed by drivers/ras/Kconfig
|
|
mkdir -p ${hdrdest}/arch/x86/ras
|
|
cp -a arch/x86/ras/Kconfig ${hdrdest}/arch/x86/ras/Kconfig
|
|
|
|
# Extract debugging symbols
|
|
msg_normal "$pkgver: extracting debug info, please wait...\n"
|
|
install -Dm644 vmlinux ${DESTDIR}/usr/lib/debug/boot/vmlinux-${_kernver}
|
|
(
|
|
cd ${DESTDIR}
|
|
export DESTDIR
|
|
find ./ -name '*.ko' -print0 | \
|
|
xargs -0r -n1 -P ${XBPS_MAKEJOBS} ${FILESDIR}/mv-debug
|
|
)
|
|
# ... and run depmod again.
|
|
depmod -b ${DESTDIR}/usr -F System.map ${_kernver}
|
|
}
|
|
linux4.19-headers_package() {
|
|
preserve=yes
|
|
nostrip=yes
|
|
noshlibprovides=yes
|
|
short_desc+=" - source headers for 3rd party modules"
|
|
pkg_install() {
|
|
vmove usr/src
|
|
vmove usr/lib/modules/${_kernver}/build
|
|
}
|
|
}
|
|
linux4.19-dbg_package() {
|
|
preserve=yes
|
|
nostrip=yes
|
|
noverifyrdeps=yes
|
|
noshlibprovides=yes
|
|
repository=debug
|
|
short_desc+=" - debugging symbols"
|
|
pkg_install() {
|
|
vmove usr/lib/debug
|
|
}
|
|
}
|