143 lines
5.0 KiB
Bash
143 lines
5.0 KiB
Bash
# This is the recipe.sh script. It is executed by BPM in a temporary directory when compiling a source package
|
|
# BPM Expects the source code to be extracted into the automatically created 'source' directory which can be accessed using $BPM_SOURCE
|
|
# BPM Expects the output files to be present in the automatically created 'output' directory which can be accessed using $BPM_OUTPUT
|
|
|
|
# The prepare function is executed in the root of the temp directory
|
|
# This function is used for putting downloaded files to the correct location or applying patches
|
|
prepare() {
|
|
cd "$BPM_SOURCE"
|
|
|
|
make mrproper
|
|
cp ../config .config
|
|
}
|
|
|
|
# The build function is executed in the source directory
|
|
# This function is used to compile the source code
|
|
build() {
|
|
make LLVM=1 olddefconfig
|
|
make LLVM=1
|
|
make -C tools/bpf/bpftool vmlinux.h feature-clang-bpf-co-re=1
|
|
}
|
|
|
|
# The package function is executed in the source directory
|
|
# This function is used to move the compiled files into the output directory
|
|
package_linux-lts() {
|
|
# Install kernel modules
|
|
make INSTALL_MOD_PATH="$BPM_OUTPUT"/usr INSTALL_MOD_STRIP=1 modules_install
|
|
|
|
# Install kernel image and config
|
|
install -Dm644 arch/x86/boot/bzImage "$BPM_OUTPUT"/boot/vmlinuz-linux-lts
|
|
install -Dm644 .config "$BPM_OUTPUT"/boot/config-linux-lts
|
|
|
|
# Remove build link
|
|
rm "$BPM_OUTPUT"/usr/lib/modules/$(make -s kernelrelease)/build
|
|
|
|
# Install package licenses
|
|
install -d "$BPM_OUTPUT"/usr/share/licenses
|
|
cp -r LICENSES "$BPM_OUTPUT"/usr/share/licenses/linux-lts
|
|
}
|
|
|
|
package_linux-lts-headers() {
|
|
local builddir="$BPM_OUTPUT"/usr/lib/modules/$(make -s kernelrelease)/build
|
|
|
|
local karch
|
|
case $CARCH in
|
|
x86_64) karch=x86 ;;
|
|
*) echo "Unknown CARCH $CARCH"; exit 1 ;;
|
|
esac
|
|
|
|
|
|
echo "Installing build files..."
|
|
install -Dt "$builddir" -m644 .config Makefile Module.symvers System.map vmlinux tools/bpf/bpftool/vmlinux.h
|
|
install -Dt "$builddir/kernel" -m644 kernel/Makefile
|
|
install -Dt "$builddir/arch/$karch" -m644 arch/$karch/Makefile
|
|
cp -t "$builddir" -a scripts
|
|
ln -srt "$builddir" "$builddir/scripts/gdb/vmlinux-gdb.py"
|
|
|
|
if [[ $(scripts/config -s CONFIG_HAVE_STACK_VALIDATION) = y ]]; then
|
|
install -Dt "$builddir/tools/objtool" tools/objtool/objtool
|
|
fi
|
|
|
|
if [[ $(scripts/config -s CONFIG_DEBUG_INFO_BTF_MODULES) = y ]]; then
|
|
install -Dt "$builddir/tools/bpf/resolve_btfids" tools/bpf/resolve_btfids/resolve_btfids
|
|
fi
|
|
|
|
echo "Installing headers..."
|
|
cp -t "$builddir" -a include
|
|
cp -t "$builddir/arch/$karch" -a arch/$karch/include
|
|
install -Dt "$builddir/arch/$karch/kernel" -m644 arch/$karch/kernel/asm-offsets.s
|
|
|
|
install -Dt "$builddir/drivers/md" -m644 drivers/md/*.h
|
|
install -Dt "$builddir/net/mac80211" -m644 net/mac80211/*.h
|
|
|
|
install -Dt "$builddir/drivers/media/i2c" -m644 drivers/media/i2c/msp3400-driver.h
|
|
|
|
install -Dt "$builddir/drivers/media/usb/dvb-usb" -m644 drivers/media/usb/dvb-usb/*.h
|
|
install -Dt "$builddir/drivers/media/dvb-frontends" -m644 drivers/media/dvb-frontends/*.h
|
|
install -Dt "$builddir/drivers/media/tuners" -m644 drivers/media/tuners/*.h
|
|
|
|
install -Dt "$builddir/drivers/iio/common/hid-sensors" -m644 drivers/iio/common/hid-sensors/*.h
|
|
|
|
echo "Installing KConfig files..."
|
|
find . -name 'Kconfig*' -exec install -Dm644 {} "$builddir/{}" \;
|
|
|
|
echo "Installing Rust files..."
|
|
if [[ $(scripts/config -s CONFIG_RUST) = y ]]; then
|
|
install -Dt "$builddir/rust" -m644 rust/*.rmeta
|
|
install -Dt "$builddir/rust" rust/*.so
|
|
fi
|
|
|
|
echo "Installing unstripped VDSO..."
|
|
make INSTALL_MOD_PATH="$BPM_OUTPUT"/usr vdso_install \
|
|
link= # Suppress build-id symlinks
|
|
|
|
echo "Removing unneeded architectures..."
|
|
local arch
|
|
for arch in "$builddir"/arch/*/; do
|
|
[[ $arch = */$karch/ ]] && continue
|
|
echo "Removing $(basename "$arch")"
|
|
rm -r "$arch"
|
|
done
|
|
|
|
echo "Removing documentation..."
|
|
rm -r "$builddir/Documentation"
|
|
|
|
echo "Removing broken symlinks..."
|
|
find -L "$builddir" -type l -printf 'Removing %P\n' -delete
|
|
|
|
echo "Removing loose objects..."
|
|
find "$builddir" -type f -name '*.o' -printf 'Removing %P\n' -delete
|
|
|
|
echo "Stripping build tools..."
|
|
local file
|
|
while read -rd '' file; do
|
|
case "$(file -Sib "$file")" in
|
|
application/x-sharedlib\;*) # Libraries (.so)
|
|
strip -v $STRIP_SHARED "$file" ;;
|
|
application/x-archive\;*) # Libraries (.a)
|
|
strip -v $STRIP_STATIC "$file" ;;
|
|
application/x-executable\;*) # Binaries
|
|
strip -v $STRIP_BINARIES "$file" ;;
|
|
application/x-pie-executable\;*) # Relocatable binaries
|
|
strip -v $STRIP_SHARED "$file" ;;
|
|
esac
|
|
done < <(find "$builddir" -type f -perm -u+x ! -name vmlinux -print0)
|
|
|
|
echo "Stripping vmlinux..."
|
|
strip -v $STRIP_STATIC "$builddir/vmlinux"
|
|
|
|
echo "Adding symlink..."
|
|
mkdir -p "$BPM_OUTPUT"/usr/src
|
|
ln -sr "$builddir" "$BPM_OUTPUT"/usr/src/linux-lts
|
|
}
|
|
|
|
package_linux-lts-docs() {
|
|
# Install documentation
|
|
install -d "$BPM_OUTPUT"/usr/share/doc/
|
|
cp -r Documentation "$BPM_OUTPUT"/usr/share/doc/linux-lts
|
|
|
|
# Install package licenses
|
|
install -d "$BPM_OUTPUT"/usr/share/licenses
|
|
ln -sf linux-lts "$BPM_OUTPUT"/usr/share/licenses/linux-lts-docs
|
|
}
|