diff --git a/srcpkgs/pinebookpro-kernel-dbg b/srcpkgs/pinebookpro-kernel-dbg
new file mode 120000
index 00000000000..4bfa7ac6ecc
--- /dev/null
+++ b/srcpkgs/pinebookpro-kernel-dbg
@@ -0,0 +1 @@
+pinebookpro-kernel
\ No newline at end of file
diff --git a/srcpkgs/pinebookpro-kernel-headers b/srcpkgs/pinebookpro-kernel-headers
new file mode 120000
index 00000000000..4bfa7ac6ecc
--- /dev/null
+++ b/srcpkgs/pinebookpro-kernel-headers
@@ -0,0 +1 @@
+pinebookpro-kernel
\ No newline at end of file
diff --git a/srcpkgs/pinebookpro-kernel/files/DocBook/Makefile b/srcpkgs/pinebookpro-kernel/files/DocBook/Makefile
new file mode 100644
index 00000000000..85916f13d33
--- /dev/null
+++ b/srcpkgs/pinebookpro-kernel/files/DocBook/Makefile
@@ -0,0 +1,282 @@
+###
+# This makefile is used to generate the kernel documentation,
+# primarily based on in-line comments in various source files.
+# See Documentation/kernel-doc-nano-HOWTO.txt for instruction in how
+# to document the SRC - and how to read it.
+# To add a new book the only step required is to add the book to the
+# list of DOCBOOKS.
+
+DOCBOOKS := z8530book.xml \
+ kernel-hacking.xml kernel-locking.xml \
+ networking.xml \
+ filesystems.xml lsm.xml kgdb.xml \
+ libata.xml mtdnand.xml librs.xml rapidio.xml \
+ s390-drivers.xml scsi.xml \
+ sh.xml w1.xml
+
+ifeq ($(DOCBOOKS),)
+
+# Skip DocBook build if the user explicitly requested no DOCBOOKS.
+.DEFAULT:
+ @echo " SKIP DocBook $@ target (DOCBOOKS=\"\" specified)."
+else
+ifneq ($(SPHINXDIRS),)
+
+# Skip DocBook build if the user explicitly requested a sphinx dir
+.DEFAULT:
+ @echo " SKIP DocBook $@ target (SPHINXDIRS specified)."
+else
+
+
+###
+# The build process is as follows (targets):
+# (xmldocs) [by docproc]
+# file.tmpl --> file.xml +--> file.ps (psdocs) [by db2ps or xmlto]
+# +--> file.pdf (pdfdocs) [by db2pdf or xmlto]
+# +--> DIR=file (htmldocs) [by xmlto]
+# +--> man/ (mandocs) [by xmlto]
+
+
+# for PDF and PS output you can choose between xmlto and docbook-utils tools
+PDF_METHOD = $(prefer-db2x)
+PS_METHOD = $(prefer-db2x)
+
+
+targets += $(DOCBOOKS)
+BOOKS := $(addprefix $(obj)/,$(DOCBOOKS))
+xmldocs: $(BOOKS)
+sgmldocs: xmldocs
+
+PS := $(patsubst %.xml, %.ps, $(BOOKS))
+psdocs: $(PS)
+
+PDF := $(patsubst %.xml, %.pdf, $(BOOKS))
+pdfdocs: $(PDF)
+
+HTML := $(sort $(patsubst %.xml, %.html, $(BOOKS)))
+htmldocs: $(HTML)
+ $(call cmd,build_main_index)
+
+MAN := $(patsubst %.xml, %.9, $(BOOKS))
+mandocs: $(MAN)
+ find $(obj)/man -name '*.9' | xargs gzip -nf
+
+# Default location for installed man pages
+export INSTALL_MAN_PATH = $(objtree)/usr
+
+installmandocs: mandocs
+ mkdir -p $(INSTALL_MAN_PATH)/man/man9/
+ find $(obj)/man -name '*.9.gz' -printf '%h %f\n' | \
+ sort -k 2 -k 1 | uniq -f 1 | sed -e 's: :/:' | \
+ xargs install -m 644 -t $(INSTALL_MAN_PATH)/man/man9/
+
+# no-op for the DocBook toolchain
+epubdocs:
+latexdocs:
+linkcheckdocs:
+
+###
+#External programs used
+KERNELDOCXMLREF = $(srctree)/scripts/kernel-doc-xml-ref
+KERNELDOC = $(srctree)/scripts/kernel-doc
+DOCPROC = $(objtree)/scripts/docproc
+CHECK_LC_CTYPE = $(objtree)/scripts/check-lc_ctype
+
+# Use a fixed encoding - UTF-8 if the C library has support built-in
+# or ASCII if not
+LC_CTYPE := $(call try-run, LC_CTYPE=C.UTF-8 $(CHECK_LC_CTYPE),C.UTF-8,C)
+export LC_CTYPE
+
+XMLTOFLAGS = -m $(srctree)/$(src)/stylesheet.xsl
+XMLTOFLAGS += --skip-validation
+
+###
+# DOCPROC is used for two purposes:
+# 1) To generate a dependency list for a .tmpl file
+# 2) To preprocess a .tmpl file and call kernel-doc with
+# appropriate parameters.
+# The following rules are used to generate the .xml documentation
+# required to generate the final targets. (ps, pdf, html).
+quiet_cmd_docproc = DOCPROC $@
+ cmd_docproc = SRCTREE=$(srctree)/ $(DOCPROC) doc $< >$@
+define rule_docproc
+ set -e; \
+ $(if $($(quiet)cmd_$(1)),echo ' $($(quiet)cmd_$(1))';) \
+ $(cmd_$(1)); \
+ ( \
+ echo 'cmd_$@ := $(cmd_$(1))'; \
+ echo $@: `SRCTREE=$(srctree) $(DOCPROC) depend $<`; \
+ ) > $(dir $@).$(notdir $@).cmd
+endef
+
+%.xml: %.tmpl $(KERNELDOC) $(DOCPROC) $(KERNELDOCXMLREF) FORCE
+ $(call if_changed_rule,docproc)
+
+# Tell kbuild to always build the programs
+always := $(hostprogs-y)
+
+notfoundtemplate = echo "*** You have to install docbook-utils or xmlto ***"; \
+ exit 1
+db2xtemplate = db2TYPE -o $(dir $@) $<
+xmltotemplate = xmlto TYPE $(XMLTOFLAGS) -o $(dir $@) $<
+
+# determine which methods are available
+ifeq ($(shell which db2ps >/dev/null 2>&1 && echo found),found)
+ use-db2x = db2x
+ prefer-db2x = db2x
+else
+ use-db2x = notfound
+ prefer-db2x = $(use-xmlto)
+endif
+ifeq ($(shell which xmlto >/dev/null 2>&1 && echo found),found)
+ use-xmlto = xmlto
+ prefer-xmlto = xmlto
+else
+ use-xmlto = notfound
+ prefer-xmlto = $(use-db2x)
+endif
+
+# the commands, generated from the chosen template
+quiet_cmd_db2ps = PS $@
+ cmd_db2ps = $(subst TYPE,ps, $($(PS_METHOD)template))
+%.ps : %.xml
+ $(call cmd,db2ps)
+
+quiet_cmd_db2pdf = PDF $@
+ cmd_db2pdf = $(subst TYPE,pdf, $($(PDF_METHOD)template))
+%.pdf : %.xml
+ $(call cmd,db2pdf)
+
+
+index = index.html
+main_idx = $(obj)/$(index)
+quiet_cmd_build_main_index = HTML $(main_idx)
+ cmd_build_main_index = rm -rf $(main_idx); \
+ echo '
Linux Kernel HTML Documentation
' >> $(main_idx) && \
+ echo 'Kernel Version: $(KERNELVERSION)
' >> $(main_idx) && \
+ cat $(HTML) >> $(main_idx)
+
+quiet_cmd_db2html = HTML $@
+ cmd_db2html = xmlto html $(XMLTOFLAGS) -o $(patsubst %.html,%,$@) $< && \
+ echo ' \
+ $(patsubst %.html,%,$(notdir $@))' > $@
+
+###
+# Rules to create an aux XML and .db, and use them to re-process the DocBook XML
+# to fill internal hyperlinks
+ gen_aux_xml = :
+ quiet_gen_aux_xml = echo ' XMLREF $@'
+silent_gen_aux_xml = :
+%.aux.xml: %.xml
+ @$($(quiet)gen_aux_xml)
+ @rm -rf $@
+ @(cat $< | egrep "^ $<.db)
+ @$(KERNELDOCXMLREF) -db $<.db $< > $@
+.PRECIOUS: %.aux.xml
+
+%.html: %.aux.xml
+ @(which xmlto > /dev/null 2>&1) || \
+ (echo "*** You need to install xmlto ***"; \
+ exit 1)
+ @rm -rf $@ $(patsubst %.html,%,$@)
+ $(call cmd,db2html)
+ @if [ ! -z "$(PNG-$(basename $(notdir $@)))" ]; then \
+ cp $(PNG-$(basename $(notdir $@))) $(patsubst %.html,%,$@); fi
+
+quiet_cmd_db2man = MAN $@
+ cmd_db2man = if grep -q refentry $<; then xmlto man $(XMLTOFLAGS) -o $(obj)/man/$(*F) $< ; fi
+%.9 : %.xml
+ @(which xmlto > /dev/null 2>&1) || \
+ (echo "*** You need to install xmlto ***"; \
+ exit 1)
+ $(Q)mkdir -p $(obj)/man/$(*F)
+ $(call cmd,db2man)
+ @touch $@
+
+###
+# Rules to generate postscripts and PNG images from .fig format files
+quiet_cmd_fig2eps = FIG2EPS $@
+ cmd_fig2eps = fig2dev -Leps $< $@
+
+%.eps: %.fig
+ @(which fig2dev > /dev/null 2>&1) || \
+ (echo "*** You need to install transfig ***"; \
+ exit 1)
+ $(call cmd,fig2eps)
+
+quiet_cmd_fig2png = FIG2PNG $@
+ cmd_fig2png = fig2dev -Lpng $< $@
+
+%.png: %.fig
+ @(which fig2dev > /dev/null 2>&1) || \
+ (echo "*** You need to install transfig ***"; \
+ exit 1)
+ $(call cmd,fig2png)
+
+###
+# Rule to convert a .c file to inline XML documentation
+ gen_xml = :
+ quiet_gen_xml = echo ' GEN $@'
+silent_gen_xml = :
+%.xml: %.c
+ @$($(quiet)gen_xml)
+ @( \
+ echo ""; \
+ expand --tabs=8 < $< | \
+ sed -e "s/&/\\&/g" \
+ -e "s/\\</g" \
+ -e "s/>/\\>/g"; \
+ echo "") > $@
+
+endif # DOCBOOKS=""
+endif # SPHINDIR=...
+
+###
+# Help targets as used by the top-level makefile
+dochelp:
+ @echo ' Linux kernel internal documentation in different formats (DocBook):'
+ @echo ' htmldocs - HTML'
+ @echo ' pdfdocs - PDF'
+ @echo ' psdocs - Postscript'
+ @echo ' xmldocs - XML DocBook'
+ @echo ' mandocs - man pages'
+ @echo ' installmandocs - install man pages generated by mandocs to INSTALL_MAN_PATH'; \
+ echo ' (default: $(INSTALL_MAN_PATH))'; \
+ echo ''
+ @echo ' cleandocs - clean all generated DocBook files'
+ @echo
+ @echo ' make DOCBOOKS="s1.xml s2.xml" [target] Generate only docs s1.xml s2.xml'
+ @echo ' valid values for DOCBOOKS are: $(DOCBOOKS)'
+ @echo
+ @echo " make DOCBOOKS=\"\" [target] Don't generate docs from Docbook"
+ @echo ' This is useful to generate only the ReST docs (Sphinx)'
+
+
+###
+# Temporary files left by various tools
+clean-files := $(DOCBOOKS) \
+ $(patsubst %.xml, %.dvi, $(DOCBOOKS)) \
+ $(patsubst %.xml, %.aux, $(DOCBOOKS)) \
+ $(patsubst %.xml, %.tex, $(DOCBOOKS)) \
+ $(patsubst %.xml, %.log, $(DOCBOOKS)) \
+ $(patsubst %.xml, %.out, $(DOCBOOKS)) \
+ $(patsubst %.xml, %.ps, $(DOCBOOKS)) \
+ $(patsubst %.xml, %.pdf, $(DOCBOOKS)) \
+ $(patsubst %.xml, %.html, $(DOCBOOKS)) \
+ $(patsubst %.xml, %.9, $(DOCBOOKS)) \
+ $(patsubst %.xml, %.aux.xml, $(DOCBOOKS)) \
+ $(patsubst %.xml, %.xml.db, $(DOCBOOKS)) \
+ $(patsubst %.xml, %.xml, $(DOCBOOKS)) \
+ $(patsubst %.xml, .%.xml.cmd, $(DOCBOOKS)) \
+ $(index)
+
+clean-dirs := $(patsubst %.xml,%,$(DOCBOOKS)) man
+
+cleandocs:
+ $(Q)rm -f $(call objectify, $(clean-files))
+ $(Q)rm -rf $(call objectify, $(clean-dirs))
+
+# Declare the contents of the .PHONY variable as phony. We keep that
+# information in a variable so we can use it in if_changed and friends.
+
+.PHONY: $(PHONY)
diff --git a/srcpkgs/pinebookpro-kernel/files/mv-debug b/srcpkgs/pinebookpro-kernel/files/mv-debug
new file mode 100755
index 00000000000..8898c928d11
--- /dev/null
+++ b/srcpkgs/pinebookpro-kernel/files/mv-debug
@@ -0,0 +1,7 @@
+#!/bin/sh
+mod=$1
+mkdir -p usr/lib/debug/${mod%/*}
+$OBJCOPY --only-keep-debug --compress-debug-sections $mod usr/lib/debug/$mod
+$OBJCOPY --add-gnu-debuglink=${DESTDIR}/usr/lib/debug/$mod $mod
+/usr/bin/$STRIP --strip-debug $mod
+gzip -9 $mod
diff --git a/srcpkgs/pinebookpro-kernel/patches/musl.patch b/srcpkgs/pinebookpro-kernel/patches/musl.patch
new file mode 100644
index 00000000000..412d61ff071
--- /dev/null
+++ b/srcpkgs/pinebookpro-kernel/patches/musl.patch
@@ -0,0 +1,19 @@
+diff --git a/crypto/aegis128-neon-inner.c b/crypto/aegis128-neon-inner.c
+index 2a660ac1bc3a..41d39fcd6e54 100644
+--- a/crypto/aegis128-neon-inner.c
++++ b/crypto/aegis128-neon-inner.c
+@@ -15,13 +15,10 @@
+
+ #define AEGIS_BLOCK_SIZE 16
+
+-#include
++#include
+
+ extern int aegis128_have_aes_insn;
+
+-void *memcpy(void *dest, const void *src, size_t n);
+-void *memset(void *s, int c, size_t n);
+-
+ struct aegis128_state {
+ uint8x16_t v[5];
+ };
diff --git a/srcpkgs/pinebookpro-kernel/patches/smsc95xx-mac.patch b/srcpkgs/pinebookpro-kernel/patches/smsc95xx-mac.patch
new file mode 100644
index 00000000000..bf77c2d9e23
--- /dev/null
+++ b/srcpkgs/pinebookpro-kernel/patches/smsc95xx-mac.patch
@@ -0,0 +1,95 @@
+From e36d607d56dc5c0cbf2cb600e7686b559ea77b44 Mon Sep 17 00:00:00 2001
+From: popcornmix
+Date: Tue, 18 Feb 2014 01:43:50 -0300
+Subject: [PATCH] net/smsc95xx: Allow mac address to be set as a parameter
+
+---
+ drivers/net/usb/smsc95xx.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 56 insertions(+)
+
+diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c
+index dc989a8..912be75 100644
+--- a/drivers/net/usb/smsc95xx.c
++++ b/drivers/net/usb/smsc95xx.c
+@@ -60,6 +60,7 @@
+ #define SUSPEND_SUSPEND3 (0x08)
+ #define SUSPEND_ALLMODES (SUSPEND_SUSPEND0 | SUSPEND_SUSPEND1 | \
+ SUSPEND_SUSPEND2 | SUSPEND_SUSPEND3)
++#define MAC_ADDR_LEN (6)
+
+ #define CARRIER_CHECK_DELAY (2 * HZ)
+
+@@ -80,6 +81,10 @@ static bool turbo_mode = true;
+ module_param(turbo_mode, bool, 0644);
+ MODULE_PARM_DESC(turbo_mode, "Enable multiple frames per Rx transaction");
+
++static char *macaddr = ":";
++module_param(macaddr, charp, 0);
++MODULE_PARM_DESC(macaddr, "MAC address");
++
+ static int __must_check __smsc95xx_read_reg(struct usbnet *dev, u32 index,
+ u32 *data, int in_pm)
+ {
+@@ -809,8 +814,59 @@ static int smsc95xx_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd)
+ return generic_mii_ioctl(&dev->mii, if_mii(rq), cmd, NULL);
+ }
+
++/* Check the macaddr module parameter for a MAC address */
++static int smsc95xx_is_macaddr_param(struct usbnet *dev, u8 *dev_mac)
++{
++ int i, j, got_num, num;
++ u8 mtbl[MAC_ADDR_LEN];
++
++ if (macaddr[0] == ':')
++ return 0;
++
++ i = 0;
++ j = 0;
++ num = 0;
++ got_num = 0;
++ while (j < MAC_ADDR_LEN) {
++ if (macaddr[i] && macaddr[i] != ':') {
++ got_num++;
++ if ('0' <= macaddr[i] && macaddr[i] <= '9')
++ num = num * 16 + macaddr[i] - '0';
++ else if ('A' <= macaddr[i] && macaddr[i] <= 'F')
++ num = num * 16 + 10 + macaddr[i] - 'A';
++ else if ('a' <= macaddr[i] && macaddr[i] <= 'f')
++ num = num * 16 + 10 + macaddr[i] - 'a';
++ else
++ break;
++ i++;
++ } else if (got_num == 2) {
++ mtbl[j++] = (u8) num;
++ num = 0;
++ got_num = 0;
++ i++;
++ } else {
++ break;
++ }
++ }
++
++ if (j == MAC_ADDR_LEN) {
++ netif_dbg(dev, ifup, dev->net, "Overriding MAC address with: "
++ "%02x:%02x:%02x:%02x:%02x:%02x\n", mtbl[0], mtbl[1], mtbl[2],
++ mtbl[3], mtbl[4], mtbl[5]);
++ for (i = 0; i < MAC_ADDR_LEN; i++)
++ dev_mac[i] = mtbl[i];
++ return 1;
++ } else {
++ return 0;
++ }
++}
++
+ static void smsc95xx_init_mac_address(struct usbnet *dev)
+ {
++ /* Check module parameters */
++ if (smsc95xx_is_macaddr_param(dev, dev->net->dev_addr))
++ return;
++
+ const u8 *mac_addr;
+
+ /* maybe the boot loader passed the MAC address in devicetree */
+--
+2.10.2
+
diff --git a/srcpkgs/pinebookpro-kernel/template b/srcpkgs/pinebookpro-kernel/template
new file mode 100644
index 00000000000..061c2fd0cbb
--- /dev/null
+++ b/srcpkgs/pinebookpro-kernel/template
@@ -0,0 +1,253 @@
+# Template file for 'pinebookpro-kernel'
+pkgname=pinebookpro-kernel
+version=5.5.0
+revision=1
+_commit=799b9141e48783a0844187ad00855b3d53f77998
+wrksrc="linux-pinebook-pro-${_commit}"
+short_desc="Linux kernel for Pinebook Pro (${version%.*} series)"
+maintainer="Renato Aguiar "
+license="GPL-2.0-only"
+homepage="https://www.kernel.org"
+distfiles="https://gitlab.manjaro.org/tsys/linux-pinebook-pro/-/archive/${_commit}/linux-pinebook-pro-${_commit}.tar.gz"
+checksum=81cc691e5772ab710621db9e8e67a4d3c1f7121024ebce0df962003694c53e9d
+patch_args="-Np1"
+
+archs="aarch64*"
+
+nodebug=yes # -dbg package is generated below manually
+nostrip=yes
+noverifyrdeps=yes
+noshlibprovides=yes
+preserve=yes
+
+hostmakedepends="tar xz bc elfutils-devel flex gmp-devel kmod libmpc-devel
+ libressl-devel perl uboot-mkimage cpio"
+
+_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() {
+ # 5.4 misses Documentation/DocBook. We ship the directory from 4.12 here.
+ cp -a $FILESDIR/DocBook -t Documentation
+
+ local arch subarch _args
+
+ arch=arm64
+
+ if [ "$CROSS_BUILD" ]; then
+ _args="CROSS_COMPILE=${XBPS_CROSS_TRIPLET}-"
+ fi
+
+ make ${makejobs} ARCH=$arch ${_args} pinebook_pro_defconfig
+ # 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
+
+ _args="Image modules dtbs"
+ arch=arm64
+
+ 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
+
+ arch=arm64
+
+ # 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}
+
+ vinstall arch/arm64/boot/Image 644 boot vmlinux-${_kernver}
+ make ${makejobs} ARCH=${subarch:-$arch} INSTALL_DTBS_PATH=${DESTDIR}/boot/dtbs/dtbs-${_kernver} dtbs_install
+
+ # 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 dt-bindings; 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
+ # remove host specific objects as well
+ find scripts -name '*.o' -delete
+ 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}
+
+ mkdir -p ${hdrdest}/arch/arm64/kernel
+ cp -a arch/arm64/kernel/vdso ${hdrdest}/arch/arm64/kernel/
+
+ # 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
+
+ # Remove unneeded architectures
+ for arch in alpha avr32 blackfin cris frv h8300 \
+ ia64 m* s* um v850 xtensa x86* p*; 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 and compress modules
+ msg_normal "$pkgver: extracting debug info and compressing modules, 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}
+}
+pinebookpro-kernel-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
+ }
+}
+pinebookpro-kernel-dbg_package() {
+ preserve=yes
+ nostrip=yes
+ noverifyrdeps=yes
+ noshlibprovides=yes
+ repository=debug
+ short_desc+=" - debugging symbols"
+ pkg_install() {
+ vmove usr/lib/debug
+ }
+}