<div dir="ltr"><div>Acked-by: Luke Nowakowski-Krijger <<a href="mailto:luke.nowakowskikrijger@canonical.com">luke.nowakowskikrijger@canonical.com</a>> <br></div><div><br></div><div>Looks good to me, I pointed out below a line that potentially adds some whitespace to maybe be aware of when applying. <br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, May 9, 2023 at 9:18 AM Andrea Righi <<a href="mailto:andrea.righi@canonical.com">andrea.righi@canonical.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">BugLink: <a href="https://bugs.launchpad.net/bugs/2015867" rel="noreferrer" target="_blank">https://bugs.launchpad.net/bugs/2015867</a><br>
<br>
After enabling Rust in the kernel, the size of linux-headers increased<br>
consistently.<br>
<br>
Some work has been done to reduce the size, such as dropping the binary<br>
artifacts (*.o and *.cmd), but it would be nice to keep the size of<br>
linux-headers reasonably small to avoid wasting too much space in the<br>
cloud images.<br>
<br>
For this reason introduce a new package linux-lib-rust to ship all the<br>
Rust headers and libraries required to build out-of-tree kernel modules<br>
in Rust.<br>
<br>
Before this patch: 96M /usr/src/linux-headers-6.2.0-21-generic<br>
After this patch: 29M /usr/src/linux-headers-6.2.0-21-generic<br>
<br>
Signed-off-by: Andrea Righi <<a href="mailto:andrea.righi@canonical.com" target="_blank">andrea.righi@canonical.com</a>><br>
---<br>
debian.master/control.d/flavour-control.stub | 11 ++++++++++<br>
debian/rules.d/<a href="http://0-common-vars.mk" rel="noreferrer" target="_blank">0-common-vars.mk</a> | 2 ++<br>
debian/rules.d/<a href="http://1-maintainer.mk" rel="noreferrer" target="_blank">1-maintainer.mk</a> | 1 +<br>
debian/rules.d/<a href="http://2-binary-arch.mk" rel="noreferrer" target="_blank">2-binary-arch.mk</a> | 22 +++++++++++++++-----<br>
debian/rules.d/<a href="http://3-binary-indep.mk" rel="noreferrer" target="_blank">3-binary-indep.mk</a> | 3 +++<br>
debian/scripts/link-lib-rust | 17 +++++++++++++++<br>
6 files changed, 51 insertions(+), 5 deletions(-)<br>
create mode 100755 debian/scripts/link-lib-rust<br>
<br>
diff --git a/debian.master/control.d/flavour-control.stub b/debian.master/control.d/flavour-control.stub<br>
index 2c0bcd194a5c7..67b3a877202a0 100644<br>
--- a/debian.master/control.d/flavour-control.stub<br>
+++ b/debian.master/control.d/flavour-control.stub<br>
@@ -100,6 +100,17 @@ Description: Linux kernel headers for version PKGVER on DESC<br>
This is for sites that want the latest kernel headers. Please read<br>
/usr/share/doc/linux-headers-PKGVER-ABINUM/debian.README.gz for details.<br>
<br>
+Package: SRCPKGNAME-lib-rust-PKGVER-ABINUM-FLAVOUR<br>
+Build-Profiles: <!stage1><br>
+Architecture: amd64<br>
+Multi-Arch: foreign<br>
+Section: devel<br>
+Priority: optional<br>
+Depends: ${misc:Depends}, coreutils<br>
+Description: Rust library files related to Linux kernel version PKGVER<br>
+ This package provides kernel library files for version PKGVER, that allow to<br>
+ compile out-of-tree kernel modules written in Rust.<br>
+<br>
Package: linux-image=SIGN-ME-PKG=-PKGVER-ABINUM-FLAVOUR-dbgsym<br>
Build-Profiles: <!stage1><br>
Architecture: ARCH<br>
diff --git a/debian/rules.d/<a href="http://0-common-vars.mk" rel="noreferrer" target="_blank">0-common-vars.mk</a> b/debian/rules.d/<a href="http://0-common-vars.mk" rel="noreferrer" target="_blank">0-common-vars.mk</a><br>
index 6b79ba9300e8c..e16e15ef53753 100644<br>
--- a/debian/rules.d/<a href="http://0-common-vars.mk" rel="noreferrer" target="_blank">0-common-vars.mk</a><br>
+++ b/debian/rules.d/<a href="http://0-common-vars.mk" rel="noreferrer" target="_blank">0-common-vars.mk</a><br>
@@ -119,7 +119,9 @@ mods_pkg_name=linux-modules-$(abi_release)<br>
mods_extra_pkg_name=linux-modules-extra-$(abi_release)<br>
bldinfo_pkg_name=linux-buildinfo-$(abi_release)<br>
hdrs_pkg_name=linux-headers-$(abi_release)<br>
+rust_pkg_name=$(src_pkg_name)-lib-rust-$(abi_release)<br>
indep_hdrs_pkg_name=$(src_pkg_name)-headers-$(abi_release)<br>
+indep_lib_rust_pkg_name=$(src_pkg_name)-lib-rust-$(abi_release)<br>
<br>
#<br>
# The generation of content in the doc package depends on<br>
diff --git a/debian/rules.d/<a href="http://1-maintainer.mk" rel="noreferrer" target="_blank">1-maintainer.mk</a> b/debian/rules.d/<a href="http://1-maintainer.mk" rel="noreferrer" target="_blank">1-maintainer.mk</a><br>
index 6eded3eb4626a..c625715eacf41 100644<br>
--- a/debian/rules.d/<a href="http://1-maintainer.mk" rel="noreferrer" target="_blank">1-maintainer.mk</a><br>
+++ b/debian/rules.d/<a href="http://1-maintainer.mk" rel="noreferrer" target="_blank">1-maintainer.mk</a><br>
@@ -69,6 +69,7 @@ printenv:<br>
@echo "flavours = $(flavours)"<br>
@echo "bin_pkg_name = $(bin_pkg_name)"<br>
@echo "hdr_pkg_name = $(hdrs_pkg_name)"<br>
+ @echo "rust_pkg_name = $(rust_pkg_name)"<br>
@echo "doc_pkg_name = $(doc_pkg_name)"<br>
@echo "libc_dev_version = $(libc_dev_version)"<br>
@echo "ubuntu_selftests = $(ubuntu_selftests)"<br>
diff --git a/debian/rules.d/<a href="http://2-binary-arch.mk" rel="noreferrer" target="_blank">2-binary-arch.mk</a> b/debian/rules.d/<a href="http://2-binary-arch.mk" rel="noreferrer" target="_blank">2-binary-arch.mk</a><br>
index 689c9b788cd43..630a335616a74 100644<br>
--- a/debian/rules.d/<a href="http://2-binary-arch.mk" rel="noreferrer" target="_blank">2-binary-arch.mk</a><br>
+++ b/debian/rules.d/<a href="http://2-binary-arch.mk" rel="noreferrer" target="_blank">2-binary-arch.mk</a><br>
@@ -109,10 +109,12 @@ $(stampdir)/stamp-install-%: signingv = $(CURDIR)/debian/$(bin_pkg_name)-signing<br>
$(stampdir)/stamp-install-%: toolspkgdir = $(CURDIR)/debian/$(tools_flavour_pkg_name)-$*<br>
$(stampdir)/stamp-install-%: cloudpkgdir = $(CURDIR)/debian/$(cloud_flavour_pkg_name)-$*<br>
$(stampdir)/stamp-install-%: basepkg = $(hdrs_pkg_name)<br>
+$(stampdir)/stamp-install-%: baserustpkg = $(rust_pkg_name)<br>
$(stampdir)/stamp-install-%: indeppkg = $(indep_hdrs_pkg_name)<br>
$(stampdir)/stamp-install-%: kernfile = $(call custom_override,kernel_file,$*)<br>
$(stampdir)/stamp-install-%: instfile = $(call custom_override,install_file,$*)<br>
$(stampdir)/stamp-install-%: hdrdir = $(CURDIR)/debian/$(basepkg)-$*/usr/src/$(basepkg)-$*<br>
+$(stampdir)/stamp-install-%: rustdir = $(CURDIR)/debian/$(baserustpkg)-$*/usr/src/$(baserustpkg)-$*<br>
$(stampdir)/stamp-install-%: target_flavour = $*<br>
$(stampdir)/stamp-install-%: MODHASHALGO=sha512<br>
$(stampdir)/stamp-install-%: MODSECKEY=$(builddir)/build-$*/certs/signing_key.pem<br>
@@ -130,6 +132,7 @@ $(stampdir)/stamp-install-%: $(stampdir)/stamp-build-% $(stampdir)/stamp-install<br>
dh_prep -p$(bin_pkg_name)-$*<br>
dh_prep -p$(mods_pkg_name)-$*<br>
dh_prep -p$(hdrs_pkg_name)-$*<br>
+ dh_prep -p$(rust_pkg_name)-$*<br>
$(foreach _m,$(all_standalone_dkms_modules), \<br>
$(if $(enable_$(_m)),dh_prep -p$(dkms_$(_m)_pkg_name)-$*;)\<br>
)<br>
@@ -336,10 +339,6 @@ endif<br>
grep '^HOSTCC .*$(gcc)$$' $(hdrdir)/Makefile<br>
grep '^CC .*$(gcc)$$' $(hdrdir)/Makefile<br>
rm -rf $(hdrdir)/include2 $(hdrdir)/source<br>
- # Do not ship .o and .cmd artifacts in headers<br>
- find $(hdrdir) -name \*.o -or -name \*.cmd -exec rm -f {} \;<br>
- # Strip .so files (e.g., rust/libmacros.so) to reduce size even more<br>
- find $(hdrdir) -name libmacros.so -exec strip -s {} \;<br>
# We do not need the retpoline information.<br>
find $(hdrdir) -name \*.o.ur-\* -exec rm -f {} \;<br>
# Copy over the compilation version.<br>
@@ -386,7 +385,7 @@ endif<br>
#<br>
# Remove files which are generated at installation by postinst,<br>
# except for modules.order and modules.builtin<br>
- # <br></blockquote><div><br></div><div>I think there is some whitespace being added here? Its perhaps not worth a resend but if anyone remembers when applying.. <br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
+ #<br>
# NOTE: need to keep this list in sync with postrm<br>
#<br>
mkdir $(pkgdir)/lib/modules/$(abi_release)-$*/_<br>
@@ -554,6 +553,17 @@ endif<br>
install -m644 $(DROOT)/canonical-certs.pem $(pkgdir_bldinfo)/usr/lib/linux/$(abi_release)-$*/canonical-certs.pem<br>
install -m644 $(DROOT)/canonical-revoked-certs.pem $(pkgdir_bldinfo)/usr/lib/linux/$(abi_release)-$*/canonical-revoked-certs.pem<br>
<br>
+ # Get rid of .o and .cmd artifacts in headers<br>
+ find $(hdrdir) -name \*.o -or -name \*.cmd -exec rm -f {} \;<br>
+ # Strip .so files (e.g., rust/libmacros.so) to reduce size even more<br>
+ find $(hdrdir) -name libmacros.so -exec strip -s {} \;<br>
+<br>
+ # Generate Rust lib files<br>
+ install -d -m755 $(rustdir)<br>
+ mv $(hdrdir)/rust $(rustdir)<br>
+ # Generate symlink for Rust lib directory in headers<br>
+ $(SHELL) $(DROOT)/scripts/link-lib-rust "$(hdrdir)" "$(indeppkg)" "$*"<br>
+<br>
ifneq ($(do_full_build),false)<br>
# Clean out this flavours build directory.<br>
rm -rf $(builddir)/build-$*<br>
@@ -626,6 +636,7 @@ binary-%: pkgimg_ex = $(mods_extra_pkg_name)-$*<br>
binary-%: pkgdir_ex = $(CURDIR)/debian/$(extra_pkg_name)-$*<br>
binary-%: pkgbldinfo = $(bldinfo_pkg_name)-$*<br>
binary-%: pkghdr = $(hdrs_pkg_name)-$*<br>
+binary-%: pkgrust = $(rust_pkg_name)-$*<br>
binary-%: dbgpkg = $(bin_pkg_name)-$*-dbgsym<br>
binary-%: dbgpkgdir = $(CURDIR)/debian/$(bin_pkg_name)-$*-dbgsym<br>
binary-%: pkgtools = $(tools_flavour_pkg_name)-$*<br>
@@ -664,6 +675,7 @@ endif<br>
<br>
$(call dh_all,$(pkgbldinfo))<br>
$(call dh_all,$(pkghdr))<br>
+ $(call dh_all,$(pkgrust))<br>
<br>
ifneq ($(skipsub),true)<br>
@set -e; for sub in $($(*)_sub); do \<br>
diff --git a/debian/rules.d/<a href="http://3-binary-indep.mk" rel="noreferrer" target="_blank">3-binary-indep.mk</a> b/debian/rules.d/<a href="http://3-binary-indep.mk" rel="noreferrer" target="_blank">3-binary-indep.mk</a><br>
index ccc1c1f0079d6..e1b545a4077ae 100644<br>
--- a/debian/rules.d/<a href="http://3-binary-indep.mk" rel="noreferrer" target="_blank">3-binary-indep.mk</a><br>
+++ b/debian/rules.d/<a href="http://3-binary-indep.mk" rel="noreferrer" target="_blank">3-binary-indep.mk</a><br>
@@ -9,6 +9,7 @@ build-indep:<br>
#<br>
indep_hdrpkg = $(indep_hdrs_pkg_name)<br>
indep_hdrdir = $(CURDIR)/debian/$(indep_hdrpkg)/usr/src/$(indep_hdrpkg)<br>
+<br>
$(stampdir)/stamp-install-headers: $(stampdir)/stamp-prepare-indep<br>
@echo Debug: $@<br>
dh_testdir<br>
@@ -25,6 +26,8 @@ ifeq ($(do_flavour_header_package),true)<br>
(find arch -name include -type d -print | \<br>
xargs -n1 -i: find : -type f) | \<br>
cpio -pd --preserve-modification-time $(indep_hdrdir)<br>
+ # Do not ship .o and .cmd artifacts in headers<br>
+ find $(indep_hdrdir) -name \*.o -or -name \*.cmd -exec rm -f {} \;<br>
endif<br>
@touch $@<br>
<br>
diff --git a/debian/scripts/link-lib-rust b/debian/scripts/link-lib-rust<br>
new file mode 100755<br>
index 0000000000000..0bea9729431d2<br>
--- /dev/null<br>
+++ b/debian/scripts/link-lib-rust<br>
@@ -0,0 +1,17 @@<br>
+#!/bin/bash -e<br>
+<br>
+. debian/debian.env<br>
+<br>
+hdrdir="$1"<br>
+symdir="$2"<br>
+flavour="$3"<br>
+<br>
+echo "Symlinking and copying Rust files for $flavour..."<br>
+<br>
+# Symlink Rust folder<br>
+item=rust<br>
+relpath=$(echo $symdir | sed s/headers/lib-rust/)-$flavour/$item<br>
+echo ln -s ../$relpath $hdrdir/$item<br>
+ln -s ../$relpath $hdrdir/$item<br>
+<br>
+exit<br>
-- <br>
2.39.2<br>
<br>
<br>
-- <br>
kernel-team mailing list<br>
<a href="mailto:kernel-team@lists.ubuntu.com" target="_blank">kernel-team@lists.ubuntu.com</a><br>
<a href="https://lists.ubuntu.com/mailman/listinfo/kernel-team" rel="noreferrer" target="_blank">https://lists.ubuntu.com/mailman/listinfo/kernel-team</a><br>
</blockquote></div></div>