rules 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. #!/usr/bin/make -f
  2. # -*- makefile -*-
  3. include /usr/share/dpkg/default.mk
  4. # Common variables for all architectures
  5. include debian/rules.d/common.mk
  6. # Pull in some arch specific stuff
  7. include debian/rules.d/arch/${DEB_BUILD_ARCH}.mk
  8. BUILD_DIR ?= ${CURDIR}
  9. KERNEL_SRC := linux
  10. ZFS_SRC := zfs
  11. %:
  12. dh $@ --with quilt
  13. ## Debian package metadata
  14. debian/control: debian/templates/control.in
  15. sed -e 's/@KVNAME@/${KVNAME}/g' -e 's/@KVMAJMIN@/${KERNEL_MAJMIN}/g' < debian/templates/control.in > debian/control
  16. debian/SOURCE:
  17. echo "git clone [email protected]:fabianishere/pve-edge-kernel.git \
  18. git checkout ${PKG_GIT_VERSION} \
  19. git submodule update --init --depth=1" > $@
  20. ## Debhelper phases
  21. override_dh_quilt_patch:
  22. # Apply crack bundle
  23. git -C ${KERNEL_SRC} fetch ../crack.bundle $$(git -C ${KERNEL_SRC} ls-remote ../crack.bundle | cut -f1)
  24. git -C ${KERNEL_SRC} checkout -f FETCH_HEAD
  25. # Apply patches
  26. cd ${KERNEL_SRC}; \
  27. QUILT_PATCHES=../debian/patches \
  28. QUILT_SERIES=series.linux \
  29. quilt --quiltrc /dev/null --color=always push -a || test $$? = 2
  30. cd ${ZFS_SRC}; \
  31. QUILT_PATCHES=../debian/patches \
  32. QUILT_SERIES=series.zfs \
  33. quilt --quiltrc /dev/null --color=always push -a || test $$? = 2
  34. override_dh_quilt_unpatch:
  35. cd ${KERNEL_SRC}; \
  36. QUILT_PATCHES=../debian/patches \
  37. QUILT_SERIES=series.linux \
  38. quilt --quiltrc /dev/null pop -a || test $$? = 2
  39. cd ${ZFS_SRC}; \
  40. QUILT_PATCHES=../debian/patches \
  41. QUILT_SERIES=series.zfs \
  42. quilt --quiltrc /dev/null pop -a || test $$? = 2
  43. rm -rf ${KERNEL_SRC}/.pc ${ZFS_SRC}/.pc
  44. override_dh_autoreconf:
  45. dh_autoreconf -D ${ZFS_SRC}
  46. override_dh_auto_configure: ${KERNEL_SRC}/.config
  47. override_dh_auto_build:
  48. # Kernel
  49. dh_auto_build -D ${KERNEL_SRC} -- \
  50. CC="${PVE_KERNEL_CC}" \
  51. KCFLAGS="${PVE_KERNEL_CFLAGS}" \
  52. EXTRAVERSION="${EXTRAVERSION}" \
  53. LOCALVERSION="${LOCALVERSION}" \
  54. KBUILD_BUILD_VERSION_TIMESTAMP="${PKG_DISTRIBUTOR} ${DEB_VERSION} (${PKG_DATE_UTC_ISO})"
  55. # ZFS
  56. dh_auto_configure -D ${ZFS_SRC} -- CC="${PVE_ZFS_CC}" --with-config=kernel --with-linux=$(realpath ${KERNEL_SRC}) --with-linux-obj=$(realpath ${KERNEL_SRC})
  57. dh_auto_build -D ${ZFS_SRC}
  58. override_dh_auto_install: debian/SOURCE .install_mark .tools_install_mark .headers_install_mark .usr_headers_install_mark
  59. dh_installdocs -A debian/copyright debian/SOURCE
  60. dh_installchangelogs
  61. dh_installman
  62. dh_strip_nondeterminism
  63. dh_compress
  64. dh_fixperms
  65. override_dh_auto_clean: debian/control
  66. dh_clean
  67. dh_auto_clean -D ${KERNEL_SRC}
  68. dh_auto_clean -D ${ZFS_SRC}
  69. rm -f ${PVE_KERNEL_TEMPLATES} ${PVE_HEADER_TEMPLATES}
  70. rm -f debian/SOURCE debian/*.tmp .*_mark
  71. ## Kernel
  72. PVE_KERNEL_TEMPLATES := $(patsubst debian/templates/pve-kernel.%.in, debian/${PVE_KERNEL_PKG}.%, $(wildcard debian/templates/pve-kernel.*.in))
  73. ${KERNEL_SRC}/.config:
  74. python3 ${KERNEL_SRC}/debian/scripts/misc/annotations -f ${KERNEL_SRC}/debian.master/config/annotations -a ${DEB_BUILD_ARCH} --export > ${KERNEL_SRC}/debian.master/config/config.ubuntu
  75. ${KERNEL_SRC}/scripts/kconfig/merge_config.sh -m \
  76. -O ${KERNEL_SRC} \
  77. ${KERNEL_SRC}/debian.master/config/config.ubuntu \
  78. debian/config/config.pve
  79. ${MAKE} -C ${KERNEL_SRC} CC=${PVE_KERNEL_CC} olddefconfig
  80. debian/${PVE_KERNEL_PKG}.%: debian/templates/pve-kernel.%.in
  81. sed -e 's/@@KVNAME@@/${KVNAME}/g' < debian/templates/pve-kernel.$*.in > debian/${PVE_KERNEL_PKG}.$*
  82. chmod +x debian/${PVE_KERNEL_PKG}.$*
  83. .install_mark: ${PVE_KERNEL_TEMPLATES}
  84. rm -rf debian/${PVE_KERNEL_PKG}
  85. mkdir -p debian/${PVE_KERNEL_PKG}/lib/modules/${KVNAME}
  86. mkdir debian/${PVE_KERNEL_PKG}/boot
  87. install -m 644 ${KERNEL_SRC}/.config debian/${PVE_KERNEL_PKG}/boot/config-${KVNAME}
  88. install -m 644 ${KERNEL_SRC}/System.map debian/${PVE_KERNEL_PKG}/boot/System.map-${KVNAME}
  89. install -m 644 ${KERNEL_SRC}/${KERNEL_IMAGE_PATH} debian/${PVE_KERNEL_PKG}/boot/${KERNEL_INSTALL_FILE}-${KVNAME}
  90. ${MAKE} -C ${KERNEL_SRC} INSTALL_MOD_PATH=${BUILD_DIR}/debian/${PVE_KERNEL_PKG}/ modules_install
  91. # install zfs drivers
  92. install -d -m 0755 debian/${PVE_KERNEL_PKG}/lib/modules/${KVNAME}/zfs
  93. install -m 644 ${ZFS_SRC}/module/avl/zavl.ko debian/${PVE_KERNEL_PKG}/lib/modules/${KVNAME}/zfs
  94. install -m 644 ${ZFS_SRC}/module/nvpair/znvpair.ko debian/${PVE_KERNEL_PKG}/lib/modules/${KVNAME}/zfs
  95. install -m 644 ${ZFS_SRC}/module/unicode/zunicode.ko debian/${PVE_KERNEL_PKG}/lib/modules/${KVNAME}/zfs
  96. install -m 644 ${ZFS_SRC}/module/zcommon/zcommon.ko debian/${PVE_KERNEL_PKG}/lib/modules/${KVNAME}/zfs
  97. install -m 644 ${ZFS_SRC}/module/icp/icp.ko debian/${PVE_KERNEL_PKG}/lib/modules/${KVNAME}/zfs
  98. install -m 644 ${ZFS_SRC}/module/zfs/zfs.ko debian/${PVE_KERNEL_PKG}/lib/modules/${KVNAME}/zfs
  99. install -m 644 ${ZFS_SRC}/module/lua/zlua.ko debian/${PVE_KERNEL_PKG}/lib/modules/${KVNAME}/zfs
  100. install -m 644 ${ZFS_SRC}/module/spl/spl.ko debian/${PVE_KERNEL_PKG}/lib/modules/${KVNAME}/zfs
  101. install -m 644 ${ZFS_SRC}/module/zstd/zzstd.ko debian/${PVE_KERNEL_PKG}/lib/modules/${KVNAME}/zfs
  102. # remove firmware
  103. rm -rf debian/${PVE_KERNEL_PKG}/lib/firmware
  104. # strip debug info
  105. find debian/${PVE_KERNEL_PKG}/lib/modules -name \*.ko -print | while read f ; do strip --strip-debug "$$f"; done
  106. # finalize
  107. /sbin/depmod -b debian/${PVE_KERNEL_PKG}/ ${KVNAME}
  108. # Autogenerate blacklist for watchdog devices (see README)
  109. install -m 0755 -d debian/${PVE_KERNEL_PKG}/lib/modprobe.d
  110. ls debian/${PVE_KERNEL_PKG}/lib/modules/${KVNAME}/kernel/drivers/watchdog/ > debian/watchdog-blacklist.tmp
  111. echo ipmi_watchdog.ko >> debian/watchdog-blacklist.tmp
  112. cat debian/watchdog-blacklist.tmp | sed -e 's/^/blacklist /' -e 's/.ko$$//' | sort -u > debian/${PVE_KERNEL_PKG}/lib/modprobe.d/blacklist_${PVE_KERNEL_PKG}.conf
  113. rm -f debian/${PVE_KERNEL_PKG}/lib/modules/${KVNAME}/source
  114. rm -f debian/${PVE_KERNEL_PKG}/lib/modules/${KVNAME}/build
  115. touch $@
  116. ## Kernel tools
  117. .tools_compile_mark:
  118. dh_auto_build -D ${KERNEL_SRC}/tools/perf -- prefix=/usr \
  119. HAVE_NO_LIBBFD=1 \
  120. HAVE_CPLUS_DEMANGLE_SUPPORT=1 \
  121. NO_LIBPYTHON=1 \
  122. NO_LIBPERL=1 \
  123. NO_LIBCRYPTO=1 \
  124. PYTHON=python3
  125. echo "checking GPL-2 only perf binary for library linkage with incompatible licenses.."
  126. ! ldd ${KERNEL_SRC}/tools/perf/perf | grep -q -E '\blibbfd'
  127. ! ldd ${KERNEL_SRC}/tools/perf/perf | grep -q -E '\blibcrypto'
  128. ${MAKE} -C ${KERNEL_SRC}/tools/perf man
  129. touch $@
  130. .tools_install_mark: .tools_compile_mark
  131. rm -rf debian/${LINUX_TOOLS_PKG}
  132. mkdir -p debian/${LINUX_TOOLS_PKG}/usr/bin
  133. mkdir -p debian/${LINUX_TOOLS_PKG}/usr/share/man/man1
  134. install -m 755 ${BUILD_DIR}/${KERNEL_SRC}/tools/perf/perf debian/${LINUX_TOOLS_PKG}/usr/bin/perf_$(KERNEL_MAJMIN)
  135. for i in ${BUILD_DIR}/${KERNEL_SRC}/tools/perf/Documentation/*.1; do \
  136. fname="$${i##*/}"; manname="$${fname%.1}"; \
  137. install -m644 "$$i" "debian/${LINUX_TOOLS_PKG}/usr/share/man/man1/$${manname}_$(KERNEL_MAJMIN).1"; \
  138. done
  139. touch $@
  140. ## Headers
  141. PVE_HEADER_TEMPLATES := $(patsubst debian/templates/pve-headers.%.in, debian/${PVE_HEADER_PKG}.%, $(wildcard debian/templates/pve-headers.*.in))
  142. debian/${PVE_HEADER_PKG}.%: debian/templates/pve-headers.%.in
  143. sed -e 's/@@KVNAME@@/${KVNAME}/g' < debian/templates/pve-headers.$*.in > debian/${PVE_HEADER_PKG}.$*
  144. chmod +x debian/${PVE_HEADER_PKG}.$*
  145. .headers_install_mark: ${PVE_HEADER_TEMPLATES}
  146. rm -rf debian/${PVE_HEADER_PKG}
  147. mkdir -p debian/${PVE_HEADER_PKG}/usr/src/linux-headers-${KVNAME}
  148. install -m 0644 ${KERNEL_SRC}/.config debian/${PVE_HEADER_PKG}/usr/src/linux-headers-${KVNAME}
  149. ( \
  150. cd ${KERNEL_SRC}; \
  151. find . -path './debian/*' -prune \
  152. -o -path './include/*' -prune \
  153. -o -path './scripts' -prune \
  154. -o -type f \
  155. \( \
  156. -name 'Makefile*' \
  157. -o -name 'Kconfig*' \
  158. -o -name 'Kbuild*' \
  159. -o -name '*.sh' \
  160. -o -name '*.pl' \
  161. \) \
  162. -print; \
  163. find include scripts -type f -o -type l; \
  164. find arch/${KERNEL_BUILD_ARCH} -maxdepth 1 -name Makefile\*; \
  165. find arch/${KERNEL_BUILD_ARCH} -name module.lds -o -name Kbuild.platforms -o -name Platform; \
  166. find $$(find arch/${KERNEL_BUILD_ARCH} -name include -o -name scripts -type d) -type f; \
  167. find arch/${KERNEL_BUILD_ARCH}/include Module.symvers include scripts -type f; \
  168. find tools/ -name 'objtool' -type f \
  169. ) | rsync -avq --files-from=- ${KERNEL_SRC} debian/${PVE_HEADER_PKG}/usr/src/linux-headers-${KVNAME}
  170. mkdir -p debian/${PVE_HEADER_PKG}/lib/modules/${KVNAME}
  171. ln -sf /usr/src/linux-headers-${KVNAME} debian/${PVE_HEADER_PKG}/lib/modules/${KVNAME}/build
  172. touch $@
  173. ## User-space headers
  174. .usr_headers_install_mark: PKG_DIR = debian/${PVE_USR_HEADER_PKG}
  175. .usr_headers_install_mark: OUT_DIR = ${PKG_DIR}/usr
  176. .usr_headers_install_mark:
  177. rm -rf '${PKG_DIR}'
  178. mkdir -p '${PKG_DIR}'
  179. $(MAKE) -C ${KERNEL_SRC} headers_install ARCH=$(KERNEL_HEADER_ARCH) INSTALL_HDR_PATH='$(CURDIR)'/$(OUT_DIR)
  180. rm -rf $(OUT_DIR)/include/drm $(OUT_DIR)/include/scsi
  181. find $(OUT_DIR)/include \( -name .install -o -name ..install.cmd \) -execdir rm {} +
  182. # Move include/asm to arch-specific directory
  183. mkdir -p $(OUT_DIR)/include/$(DEB_HOST_MULTIARCH)
  184. mv $(OUT_DIR)/include/asm $(OUT_DIR)/include/$(DEB_HOST_MULTIARCH)/
  185. test ! -d $(OUT_DIR)/include/arch || \
  186. mv $(OUT_DIR)/include/arch $(OUT_DIR)/include/$(DEB_HOST_MULTIARCH)/
  187. touch $@