PKGBUILD 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. # SPDX-License-Identifier: GPL-2.0-only
  2. # Maintainer: Thomas Weißschuh <linux@weissschuh.net>
  3. # Contributor: Jan Alexander Steffens (heftig) <heftig@archlinux.org>
  4. pkgbase=${PACMAN_PKGBASE:-linux-upstream}
  5. pkgname=("${pkgbase}")
  6. _extrapackages=${PACMAN_EXTRAPACKAGES-headers api-headers debug}
  7. for pkg in $_extrapackages; do
  8. pkgname+=("${pkgbase}-${pkg}")
  9. done
  10. pkgver="${KERNELRELEASE//-/_}"
  11. # The PKGBUILD is evaluated multiple times.
  12. # Running scripts/build-version from here would introduce inconsistencies.
  13. pkgrel="${KBUILD_REVISION}"
  14. pkgdesc='Upstream Linux'
  15. url='https://www.kernel.org/'
  16. # Enable flexible cross-compilation
  17. arch=(${CARCH})
  18. license=(GPL-2.0-only)
  19. makedepends=(
  20. bc
  21. bison
  22. flex
  23. gettext
  24. kmod
  25. libelf
  26. openssl
  27. pahole
  28. perl
  29. python
  30. rsync
  31. tar
  32. )
  33. options=(!debug !strip !buildflags !makeflags)
  34. _prologue() {
  35. # MAKEFLAGS from makepkg.conf override the ones inherited from kbuild.
  36. # Bypass this override with a custom variable.
  37. export MAKEFLAGS="${KBUILD_MAKEFLAGS}"
  38. # Kbuild works in the output directory, where this PKGBUILD is located.
  39. cd "$(dirname "${BASH_SOURCE[0]}")"
  40. }
  41. build() {
  42. _prologue
  43. ${MAKE} KERNELRELEASE="${KERNELRELEASE}" KBUILD_BUILD_VERSION="${pkgrel}"
  44. }
  45. _package() {
  46. pkgdesc="The ${pkgdesc} kernel and modules"
  47. local modulesdir="${pkgdir}/usr/lib/modules/${KERNELRELEASE}"
  48. _prologue
  49. echo "Installing boot image..."
  50. # systemd expects to find the kernel here to allow hibernation
  51. # https://github.com/systemd/systemd/commit/edda44605f06a41fb86b7ab8128dcf99161d2344
  52. install -Dm644 "$(${MAKE} -s image_name)" "${modulesdir}/vmlinuz"
  53. # Used by mkinitcpio to name the kernel
  54. echo "${pkgbase}" > "${modulesdir}/pkgbase"
  55. echo "Installing modules..."
  56. ${MAKE} INSTALL_MOD_PATH="${pkgdir}/usr" INSTALL_MOD_STRIP=1 \
  57. DEPMOD=true modules_install
  58. if [ -d "${srctree}/arch/${SRCARCH}/boot/dts" ]; then
  59. echo "Installing dtbs..."
  60. ${MAKE} INSTALL_DTBS_PATH="${modulesdir}/dtb" dtbs_install
  61. fi
  62. # remove build link, will be part of -headers package
  63. rm -f "${modulesdir}/build"
  64. }
  65. _package-headers() {
  66. pkgdesc="Headers and scripts for building modules for the ${pkgdesc} kernel"
  67. local builddir="${pkgdir}/usr/lib/modules/${KERNELRELEASE}/build"
  68. _prologue
  69. if grep -q CONFIG_MODULES=y include/config/auto.conf; then
  70. echo "Installing build files..."
  71. "${srctree}/scripts/package/install-extmod-build" "${builddir}"
  72. fi
  73. echo "Installing System.map and config..."
  74. mkdir -p "${builddir}"
  75. cp System.map "${builddir}/System.map"
  76. cp .config "${builddir}/.config"
  77. echo "Adding symlink..."
  78. mkdir -p "${pkgdir}/usr/src"
  79. ln -sr "${builddir}" "${pkgdir}/usr/src/${pkgbase}"
  80. }
  81. _package-api-headers() {
  82. pkgdesc="Kernel headers sanitized for use in userspace"
  83. provides=(linux-api-headers="${pkgver}")
  84. conflicts=(linux-api-headers)
  85. _prologue
  86. ${MAKE} headers_install INSTALL_HDR_PATH="${pkgdir}/usr"
  87. }
  88. _package-debug(){
  89. pkgdesc="Non-stripped vmlinux file for the ${pkgdesc} kernel"
  90. local debugdir="${pkgdir}/usr/src/debug/${pkgbase}"
  91. local builddir="${pkgdir}/usr/lib/modules/${KERNELRELEASE}/build"
  92. _prologue
  93. install -Dt "${debugdir}" -m644 vmlinux
  94. mkdir -p "${builddir}"
  95. ln -sr "${debugdir}/vmlinux" "${builddir}/vmlinux"
  96. }
  97. for _p in "${pkgname[@]}"; do
  98. eval "package_$_p() {
  99. $(declare -f "_package${_p#$pkgbase}")
  100. _package${_p#$pkgbase}
  101. }"
  102. done