rules 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. #!/usr/bin/make -f
  2. # -*- makefile -*-
  3. # Uncomment this to turn on verbose mode.
  4. #export DH_VERBOSE=1
  5. # TODO: check for headers not being installed
  6. BUILD_DIR=$(shell pwd)
  7. include /usr/share/dpkg/default.mk
  8. include debian/rules.d/env.mk
  9. include debian/rules.d/${DEB_BUILD_ARCH}.mk
  10. CHANGELOG_DATE:=$(shell dpkg-parsechangelog -SDate)
  11. PVE_KERNEL_PKG=pve-kernel-${KVNAME}
  12. PVE_HEADER_PKG=pve-headers-${KVNAME}
  13. PVE_USR_HEADER_PKG=pve-kernel-libc-dev
  14. LINUX_TOOLS_PKG=linux-tools-${KERNEL_MAJMIN}
  15. KERNEL_SRC_COPY=${KERNEL_SRC}_tmp
  16. # TODO: split for archs, move to files?
  17. PVE_CONFIG_OPTS= \
  18. -m INTEL_MEI_WDT \
  19. -d CONFIG_SND_PCM_OSS \
  20. -e CONFIG_TRANSPARENT_HUGEPAGE_MADVISE \
  21. -d CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS \
  22. -m CONFIG_CEPH_FS \
  23. -m CONFIG_BLK_DEV_NBD \
  24. -m CONFIG_BLK_DEV_RBD \
  25. -d CONFIG_SND_PCSP \
  26. -m CONFIG_BCACHE \
  27. -m CONFIG_JFS_FS \
  28. -m CONFIG_HFS_FS \
  29. -m CONFIG_HFSPLUS_FS \
  30. -e CIFS_SMB_DIRECT \
  31. -e CONFIG_BRIDGE \
  32. -e CONFIG_BRIDGE_NETFILTER \
  33. -e CONFIG_BLK_DEV_SD \
  34. -e CONFIG_BLK_DEV_SR \
  35. -e CONFIG_BLK_DEV_DM \
  36. -e CONFIG_BLK_DEV_NVME \
  37. -e CONFIG_NLS_ISO8859_1 \
  38. -d CONFIG_INPUT_EVBUG \
  39. -d CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND \
  40. -e CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE \
  41. -d CONFIG_MODULE_SIG \
  42. -d CONFIG_MEMCG_DISABLED \
  43. -e CONFIG_MEMCG_SWAP_ENABLED \
  44. -e CONFIG_HYPERV \
  45. -m CONFIG_VFIO_IOMMU_TYPE1 \
  46. -m CONFIG_VFIO_VIRQFD \
  47. -m CONFIG_VFIO \
  48. -m CONFIG_VFIO_PCI \
  49. -m CONFIG_USB_XHCI_HCD \
  50. -m CONFIG_USB_XHCI_PCI \
  51. -m CONFIG_USB_EHCI_HCD \
  52. -m CONFIG_USB_EHCI_PCI \
  53. -m CONFIG_USB_EHCI_HCD_PLATFORM \
  54. -m CONFIG_USB_OHCI_HCD \
  55. -m CONFIG_USB_OHCI_HCD_PCI \
  56. -m CONFIG_USB_OHCI_HCD_PLATFORM \
  57. -d CONFIG_USB_OHCI_HCD_SSB \
  58. -m CONFIG_USB_UHCI_HCD \
  59. -d CONFIG_USB_SL811_HCD_ISO \
  60. -e CONFIG_MEMCG_KMEM \
  61. -d CONFIG_DEFAULT_CFQ \
  62. -e CONFIG_DEFAULT_DEADLINE \
  63. -e CONFIG_MODVERSIONS \
  64. -d CONFIG_DEFAULT_SECURITY_DAC \
  65. -e CONFIG_DEFAULT_SECURITY_APPARMOR \
  66. --set-str CONFIG_DEFAULT_SECURITY apparmor \
  67. -d CONFIG_UNWINDER_ORC \
  68. -d CONFIG_UNWINDER_GUESS \
  69. -e CONFIG_UNWINDER_FRAME_POINTER \
  70. -e CONFIG_PAGE_TABLE_ISOLATION
  71. debian/control: $(wildcard debian/*.in)
  72. sed -e 's/@@KVNAME@@/${KVNAME}/g' < debian/pve-kernel.prerm.in > debian/${PVE_KERNEL_PKG}.prerm
  73. sed -e 's/@@KVNAME@@/${KVNAME}/g' < debian/pve-kernel.postrm.in > debian/${PVE_KERNEL_PKG}.postrm
  74. sed -e 's/@@KVNAME@@/${KVNAME}/g' < debian/pve-kernel.postinst.in > debian/${PVE_KERNEL_PKG}.postinst
  75. sed -e 's/@@KVNAME@@/${KVNAME}/g' < debian/pve-headers.postinst.in > debian/${PVE_HEADER_PKG}.postinst
  76. chmod +x debian/${PVE_KERNEL_PKG}.prerm
  77. chmod +x debian/${PVE_KERNEL_PKG}.postrm
  78. chmod +x debian/${PVE_KERNEL_PKG}.postinst
  79. chmod +x debian/${PVE_HEADER_PKG}.postinst
  80. sed -e 's/@KVNAME@/${KVNAME}/g' -e 's/@KVMAJMIN@/${KERNEL_MAJMIN}/g' < debian/control.in > debian/control
  81. build: .compile_mark .tools_compile_mark .modules_compile_mark
  82. install: .install_mark .tools_install_mark .headers_install_mark .usr_headers_install_mark
  83. dh_installdocs -A debian/copyright debian/SOURCE
  84. dh_installchangelogs
  85. dh_installman
  86. dh_strip_nondeterminism
  87. dh_compress
  88. dh_fixperms
  89. binary: install
  90. debian/rules fwcheck abicheck
  91. dh_strip -N${PVE_HEADER_PKG} -N${PVE_USR_HEADER_PKG}
  92. dh_makeshlibs
  93. dh_shlibdeps
  94. dh_installdeb
  95. dh_gencontrol
  96. dh_md5sums
  97. dh_builddeb
  98. .config_mark:
  99. cd ${KERNEL_SRC}; scripts/config ${PVE_CONFIG_OPTS}
  100. ${MAKE} -C ${KERNEL_SRC} oldconfig
  101. touch $@
  102. .compile_mark: .config_mark
  103. ${MAKE} -C ${KERNEL_SRC} KBUILD_BUILD_VERSION_TIMESTAMP="PVE ${DEB_VERSION} (${CHANGELOG_DATE})"
  104. touch $@
  105. .install_mark: .compile_mark .modules_compile_mark
  106. rm -rf debian/${PVE_KERNEL_PKG}
  107. mkdir -p debian/${PVE_KERNEL_PKG}/lib/modules/${KVNAME}
  108. mkdir debian/${PVE_KERNEL_PKG}/boot
  109. install -m 644 ${KERNEL_SRC}/.config debian/${PVE_KERNEL_PKG}/boot/config-${KVNAME}
  110. install -m 644 ${KERNEL_SRC}/System.map debian/${PVE_KERNEL_PKG}/boot/System.map-${KVNAME}
  111. install -m 644 ${KERNEL_SRC}/${KERNEL_IMAGE_PATH} debian/${PVE_KERNEL_PKG}/boot/${KERNEL_INSTALL_FILE}-${KVNAME}
  112. ${MAKE} -C ${KERNEL_SRC} INSTALL_MOD_PATH=${BUILD_DIR}/debian/${PVE_KERNEL_PKG}/ modules_install
  113. # install zfs drivers
  114. install -d -m 0755 debian/${PVE_KERNEL_PKG}/lib/modules/${KVNAME}/zfs
  115. install -m 644 $(addprefix ${MODULES}/,zfs.ko zavl.ko znvpair.ko zunicode.ko zcommon.ko icp.ko zlua.ko spl.ko) debian/${PVE_KERNEL_PKG}/lib/modules/${KVNAME}/zfs
  116. # remove firmware
  117. rm -rf debian/${PVE_KERNEL_PKG}/lib/firmware
  118. # strip debug info
  119. find debian/${PVE_KERNEL_PKG}/lib/modules -name \*.ko -print | while read f ; do strip --strip-debug "$$f"; done
  120. # finalize
  121. /sbin/depmod -b debian/${PVE_KERNEL_PKG}/ ${KVNAME}
  122. # Autogenerate blacklist for watchdog devices (see README)
  123. install -m 0755 -d debian/${PVE_KERNEL_PKG}/lib/modprobe.d
  124. ls debian/${PVE_KERNEL_PKG}/lib/modules/${KVNAME}/kernel/drivers/watchdog/ > watchdog-blacklist.tmp
  125. echo ipmi_watchdog.ko >> watchdog-blacklist.tmp
  126. cat watchdog-blacklist.tmp|sed -e 's/^/blacklist /' -e 's/.ko$$//'|sort -u > debian/${PVE_KERNEL_PKG}/lib/modprobe.d/blacklist_${PVE_KERNEL_PKG}.conf
  127. rm -f debian/${PVE_KERNEL_PKG}/lib/modules/${KVNAME}/source
  128. rm -f debian/${PVE_KERNEL_PKG}/lib/modules/${KVNAME}/build
  129. touch $@
  130. .tools_compile_mark: .compile_mark
  131. ${MAKE} -C ${KERNEL_SRC}/tools/perf prefix=/usr HAVE_NO_LIBBFD=1 HAVE_CPLUS_DEMANGLE_SUPPORT=1 NO_LIBPYTHON=1 NO_LIBPERL=1 NO_LIBCRYPTO=1 PYTHON=python2.7
  132. echo "checking GPL-2 only perf binary for library linkage with incompatible licenses.."
  133. ! ldd ${KERNEL_SRC}/tools/perf/perf | grep -q -E '\blibbfd'
  134. ! ldd ${KERNEL_SRC}/tools/perf/perf | grep -q -E '\blibcrypto'
  135. ${MAKE} -C ${KERNEL_SRC}/tools/perf man
  136. touch $@
  137. .tools_install_mark: .tools_compile_mark
  138. rm -rf debian/${LINUX_TOOLS_PKG}
  139. mkdir -p debian/${LINUX_TOOLS_PKG}/usr/bin
  140. mkdir -p debian/${LINUX_TOOLS_PKG}/usr/share/man/man1
  141. install -m 755 ${BUILD_DIR}/${KERNEL_SRC}/tools/perf/perf debian/${LINUX_TOOLS_PKG}/usr/bin/perf_$(KERNEL_MAJMIN)
  142. for i in ${BUILD_DIR}/${KERNEL_SRC}/tools/perf/Documentation/*.1; do \
  143. fname="$${i##*/}"; manname="$${fname%.1}"; \
  144. install -m644 "$$i" "debian/${LINUX_TOOLS_PKG}/usr/share/man/man1/$${manname}_$(KERNEL_MAJMIN).1"; \
  145. done
  146. touch $@
  147. .headers_prepare_mark: .config_mark
  148. rm -rf debian/${PVE_HEADER_PKG}
  149. mkdir -p debian/${PVE_HEADER_PKG}/usr/src/linux-headers-${KVNAME}
  150. install -m 0644 ${KERNEL_SRC}/.config debian/${PVE_HEADER_PKG}/usr/src/linux-headers-${KVNAME}
  151. # copy to allow building in parallel to kernel/module compilation without interference
  152. rm -rf ${KERNEL_SRC_COPY}
  153. cp -ar ${KERNEL_SRC} ${KERNEL_SRC_COPY}
  154. make -C ${KERNEL_SRC_COPY} mrproper
  155. cd ${KERNEL_SRC_COPY}; find . -path './debian/*' -prune \
  156. -o -path './include/*' -prune \
  157. -o -path './Documentation' -prune \
  158. -o -path './scripts' -prune \
  159. -o -type f \
  160. \( \
  161. -name 'Makefile*' \
  162. -o -name 'Kconfig*' \
  163. -o -name 'Kbuild*' \
  164. -o -name '*.sh' \
  165. -o -name '*.pl' \
  166. \) \
  167. -print | cpio -pd --preserve-modification-time ${BUILD_DIR}/debian/${PVE_HEADER_PKG}/usr/src/linux-headers-${KVNAME}
  168. cd ${KERNEL_SRC_COPY}; cp -a include scripts ${BUILD_DIR}/debian/${PVE_HEADER_PKG}/usr/src/linux-headers-${KVNAME}
  169. cd ${KERNEL_SRC_COPY}; \
  170. ( \
  171. find arch/${KERNEL_HEADER_ARCH} -name include -type d -print | \
  172. xargs -n1 -i: find : -type f \
  173. ) | \
  174. cpio -pd --preserve-modification-time ${BUILD_DIR}/debian/${PVE_HEADER_PKG}/usr/src/linux-headers-${KVNAME}
  175. touch $@
  176. .headers_compile_mark: .headers_prepare_mark
  177. # set output to subdir of source to reduce number of hardcoded paths in output files
  178. rm -rf ${BUILD_DIR}/${KERNEL_SRC_COPY}/${PVE_HEADER_PKG}
  179. mkdir -p ${BUILD_DIR}/${KERNEL_SRC_COPY}/${PVE_HEADER_PKG}
  180. cp ${KERNEL_SRC}/.config ${BUILD_DIR}/${KERNEL_SRC_COPY}/${PVE_HEADER_PKG}/.config
  181. ${MAKE} -C ${KERNEL_SRC_COPY} O=${BUILD_DIR}/${KERNEL_SRC_COPY}/${PVE_HEADER_PKG} -j1 syncconfig prepare scripts
  182. find ${BUILD_DIR}/${KERNEL_SRC_COPY}/${PVE_HEADER_PKG} -name \*.o.ur-\* | xargs rm -f
  183. rsync --ignore-existing -r -v -a $(addprefix ${BUILD_DIR}/${KERNEL_SRC_COPY}/${PVE_HEADER_PKG}/,arch include kernel scripts tools) ${BUILD_DIR}/debian/${PVE_HEADER_PKG}/usr/src/linux-headers-${KVNAME}/
  184. rm -rf ${BUILD_DIR}/${KERNEL_SRC_COPY}
  185. touch $@
  186. .headers_install_mark: .compile_mark .modules_compile_mark .headers_compile_mark
  187. cp ${KERNEL_SRC}/include/generated/compile.h debian/${PVE_HEADER_PKG}/usr/src/linux-headers-${KVNAME}/include/generated/compile.h
  188. install -m 0644 ${KERNEL_SRC}/Module.symvers debian/${PVE_HEADER_PKG}/usr/src/linux-headers-${KVNAME}
  189. mkdir -p debian/${PVE_HEADER_PKG}/lib/modules/${KVNAME}
  190. ln -sf /usr/src/linux-headers-${KVNAME} debian/${PVE_HEADER_PKG}/lib/modules/${KVNAME}/build
  191. touch $@
  192. .usr_headers_install_mark: PKG_DIR = debian/${PVE_USR_HEADER_PKG}
  193. .usr_headers_install_mark: OUT_DIR = ${PKG_DIR}/usr
  194. .usr_headers_install_mark: .config_mark
  195. rm -rf '${PKG_DIR}'
  196. mkdir -p '${PKG_DIR}'
  197. $(MAKE) -C ${KERNEL_SRC} headers_check ARCH=$(KERNEL_HEADER_ARCH)
  198. $(MAKE) -C ${KERNEL_SRC} headers_install ARCH=$(KERNEL_HEADER_ARCH) INSTALL_HDR_PATH='$(CURDIR)'/$(OUT_DIR)
  199. rm -rf $(OUT_DIR)/include/drm $(OUT_DIR)/include/scsi
  200. find $(OUT_DIR)/include \( -name .install -o -name ..install.cmd \) -execdir rm {} +
  201. # Move include/asm to arch-specific directory
  202. mkdir -p $(OUT_DIR)/include/$(DEB_HOST_MULTIARCH)
  203. mv $(OUT_DIR)/include/asm $(OUT_DIR)/include/$(DEB_HOST_MULTIARCH)/
  204. test ! -d $(OUT_DIR)/include/arch || \
  205. mv $(OUT_DIR)/include/arch $(OUT_DIR)/include/$(DEB_HOST_MULTIARCH)/
  206. touch $@
  207. .modules_compile_mark: ${MODULES}/zfs.ko
  208. touch $@
  209. ${MODULES}/zfs.ko: .compile_mark
  210. cd ${MODULES}/${ZFSDIR}; ./autogen.sh
  211. cd ${MODULES}/${ZFSDIR}; ./configure --with-config=kernel --with-linux=${BUILD_DIR}/${KERNEL_SRC} --with-linux-obj=${BUILD_DIR}/${KERNEL_SRC}
  212. ${MAKE} -C ${MODULES}/${ZFSDIR}
  213. cp ${MODULES}/${ZFSDIR}/module/avl/zavl.ko ${MODULES}/
  214. cp ${MODULES}/${ZFSDIR}/module/nvpair/znvpair.ko ${MODULES}/
  215. cp ${MODULES}/${ZFSDIR}/module/unicode/zunicode.ko ${MODULES}/
  216. cp ${MODULES}/${ZFSDIR}/module/zcommon/zcommon.ko ${MODULES}/
  217. cp ${MODULES}/${ZFSDIR}/module/icp/icp.ko ${MODULES}/
  218. cp ${MODULES}/${ZFSDIR}/module/zfs/zfs.ko ${MODULES}/
  219. cp ${MODULES}/${ZFSDIR}/module/lua/zlua.ko ${MODULES}/
  220. cp ${MODULES}/${ZFSDIR}/module/spl/spl.ko ${MODULES}/
  221. fwlist-${KVNAME}: .compile_mark .modules_compile_mark
  222. debian/scripts/find-firmware.pl debian/${PVE_KERNEL_PKG}/lib/modules/${KVNAME} >fwlist.tmp
  223. mv fwlist.tmp $@
  224. .PHONY: fwcheck
  225. fwcheck: fwlist-${KVNAME} fwlist-previous
  226. @echo "checking fwlist for changes since last built firmware package.."
  227. @echo "if this check fails, add fwlist-${KVNAME} to the pve-firmware repository and upload a new firmware package together with the ${KVNAME} kernel"
  228. sort fwlist-previous | uniq > fwlist-previous.sorted
  229. sort fwlist-${KVNAME} | uniq > fwlist-${KVNAME}.sorted
  230. diff -up -N fwlist-previous.sorted fwlist-${KVNAME}.sorted > fwlist.diff
  231. rm fwlist.diff fwlist-previous.sorted fwlist-${KVNAME}.sorted
  232. @echo "done, no need to rebuild pve-firmware"
  233. abi-${KVNAME}: .compile_mark
  234. debian/scripts/abi-generate debian/${PVE_HEADER_PKG}/usr/src/linux-headers-${KVNAME}/Module.symvers abi-${KVNAME} ${KVNAME}
  235. .PHONY: abicheck
  236. abicheck: debian/scripts/abi-check abi-${KVNAME} abi-prev-* abi-blacklist
  237. debian/scripts/abi-check abi-${KVNAME} abi-prev-* ${SKIPABI}
  238. .PHONY: clean