diff mbox series

[SRU,L/M] UBUNTU: [Packaging] introduce a separate linux-lib-rust package

Message ID 20230509071720.35886-1-andrea.righi@canonical.com
State New
Headers show
Series [SRU,L/M] UBUNTU: [Packaging] introduce a separate linux-lib-rust package | expand

Commit Message

Andrea Righi May 9, 2023, 7:17 a.m. UTC
BugLink: https://bugs.launchpad.net/bugs/2015867

After enabling Rust in the kernel, the size of linux-headers increased
consistently.

Some work has been done to reduce the size, such as dropping the binary
artifacts (*.o and *.cmd), but it would be nice to keep the size of
linux-headers reasonably small to avoid wasting too much space in the
cloud images.

For this reason introduce a new package linux-lib-rust to ship all the
Rust headers and libraries required to build out-of-tree kernel modules
in Rust.

Before this patch: 96M	/usr/src/linux-headers-6.2.0-21-generic
 After this patch: 29M	/usr/src/linux-headers-6.2.0-21-generic

Signed-off-by: Andrea Righi <andrea.righi@canonical.com>
---
 debian.master/control.d/flavour-control.stub | 11 ++++++++++
 debian/rules.d/0-common-vars.mk              |  2 ++
 debian/rules.d/1-maintainer.mk               |  1 +
 debian/rules.d/2-binary-arch.mk              | 22 +++++++++++++++-----
 debian/rules.d/3-binary-indep.mk             |  3 +++
 debian/scripts/link-lib-rust                 | 17 +++++++++++++++
 6 files changed, 51 insertions(+), 5 deletions(-)
 create mode 100755 debian/scripts/link-lib-rust

Comments

Luke Nowakowski-Krijger May 9, 2023, 11 a.m. UTC | #1
Acked-by: Luke Nowakowski-Krijger <luke.nowakowskikrijger@canonical.com>

Looks good to me, I pointed out below a line that potentially adds some
whitespace to maybe be aware of when applying.

On Tue, May 9, 2023 at 9:18 AM Andrea Righi <andrea.righi@canonical.com>
wrote:

> BugLink: https://bugs.launchpad.net/bugs/2015867
>
> After enabling Rust in the kernel, the size of linux-headers increased
> consistently.
>
> Some work has been done to reduce the size, such as dropping the binary
> artifacts (*.o and *.cmd), but it would be nice to keep the size of
> linux-headers reasonably small to avoid wasting too much space in the
> cloud images.
>
> For this reason introduce a new package linux-lib-rust to ship all the
> Rust headers and libraries required to build out-of-tree kernel modules
> in Rust.
>
> Before this patch: 96M  /usr/src/linux-headers-6.2.0-21-generic
>  After this patch: 29M  /usr/src/linux-headers-6.2.0-21-generic
>
> Signed-off-by: Andrea Righi <andrea.righi@canonical.com>
> ---
>  debian.master/control.d/flavour-control.stub | 11 ++++++++++
>  debian/rules.d/0-common-vars.mk              |  2 ++
>  debian/rules.d/1-maintainer.mk               |  1 +
>  debian/rules.d/2-binary-arch.mk              | 22 +++++++++++++++-----
>  debian/rules.d/3-binary-indep.mk             |  3 +++
>  debian/scripts/link-lib-rust                 | 17 +++++++++++++++
>  6 files changed, 51 insertions(+), 5 deletions(-)
>  create mode 100755 debian/scripts/link-lib-rust
>
> diff --git a/debian.master/control.d/flavour-control.stub
> b/debian.master/control.d/flavour-control.stub
> index 2c0bcd194a5c7..67b3a877202a0 100644
> --- a/debian.master/control.d/flavour-control.stub
> +++ b/debian.master/control.d/flavour-control.stub
> @@ -100,6 +100,17 @@ Description: Linux kernel headers for version PKGVER
> on DESC
>   This is for sites that want the latest kernel headers.  Please read
>   /usr/share/doc/linux-headers-PKGVER-ABINUM/debian.README.gz for details.
>
> +Package: SRCPKGNAME-lib-rust-PKGVER-ABINUM-FLAVOUR
> +Build-Profiles: <!stage1>
> +Architecture: amd64
> +Multi-Arch: foreign
> +Section: devel
> +Priority: optional
> +Depends: ${misc:Depends}, coreutils
> +Description: Rust library files related to Linux kernel version PKGVER
> + This package provides kernel library files for version PKGVER, that
> allow to
> + compile out-of-tree kernel modules written in Rust.
> +
>  Package: linux-image=SIGN-ME-PKG=-PKGVER-ABINUM-FLAVOUR-dbgsym
>  Build-Profiles: <!stage1>
>  Architecture: ARCH
> diff --git a/debian/rules.d/0-common-vars.mk b/debian/rules.d/
> 0-common-vars.mk
> index 6b79ba9300e8c..e16e15ef53753 100644
> --- a/debian/rules.d/0-common-vars.mk
> +++ b/debian/rules.d/0-common-vars.mk
> @@ -119,7 +119,9 @@ mods_pkg_name=linux-modules-$(abi_release)
>  mods_extra_pkg_name=linux-modules-extra-$(abi_release)
>  bldinfo_pkg_name=linux-buildinfo-$(abi_release)
>  hdrs_pkg_name=linux-headers-$(abi_release)
> +rust_pkg_name=$(src_pkg_name)-lib-rust-$(abi_release)
>  indep_hdrs_pkg_name=$(src_pkg_name)-headers-$(abi_release)
> +indep_lib_rust_pkg_name=$(src_pkg_name)-lib-rust-$(abi_release)
>
>  #
>  # The generation of content in the doc package depends on
> diff --git a/debian/rules.d/1-maintainer.mk b/debian/rules.d/
> 1-maintainer.mk
> index 6eded3eb4626a..c625715eacf41 100644
> --- a/debian/rules.d/1-maintainer.mk
> +++ b/debian/rules.d/1-maintainer.mk
> @@ -69,6 +69,7 @@ printenv:
>         @echo "flavours                  = $(flavours)"
>         @echo "bin_pkg_name              = $(bin_pkg_name)"
>         @echo "hdr_pkg_name              = $(hdrs_pkg_name)"
> +       @echo "rust_pkg_name             = $(rust_pkg_name)"
>         @echo "doc_pkg_name              = $(doc_pkg_name)"
>         @echo "libc_dev_version          = $(libc_dev_version)"
>         @echo "ubuntu_selftests          = $(ubuntu_selftests)"
> diff --git a/debian/rules.d/2-binary-arch.mk b/debian/rules.d/
> 2-binary-arch.mk
> index 689c9b788cd43..630a335616a74 100644
> --- a/debian/rules.d/2-binary-arch.mk
> +++ b/debian/rules.d/2-binary-arch.mk
> @@ -109,10 +109,12 @@ $(stampdir)/stamp-install-%: signingv =
> $(CURDIR)/debian/$(bin_pkg_name)-signing
>  $(stampdir)/stamp-install-%: toolspkgdir =
> $(CURDIR)/debian/$(tools_flavour_pkg_name)-$*
>  $(stampdir)/stamp-install-%: cloudpkgdir =
> $(CURDIR)/debian/$(cloud_flavour_pkg_name)-$*
>  $(stampdir)/stamp-install-%: basepkg = $(hdrs_pkg_name)
> +$(stampdir)/stamp-install-%: baserustpkg = $(rust_pkg_name)
>  $(stampdir)/stamp-install-%: indeppkg = $(indep_hdrs_pkg_name)
>  $(stampdir)/stamp-install-%: kernfile = $(call
> custom_override,kernel_file,$*)
>  $(stampdir)/stamp-install-%: instfile = $(call
> custom_override,install_file,$*)
>  $(stampdir)/stamp-install-%: hdrdir =
> $(CURDIR)/debian/$(basepkg)-$*/usr/src/$(basepkg)-$*
> +$(stampdir)/stamp-install-%: rustdir =
> $(CURDIR)/debian/$(baserustpkg)-$*/usr/src/$(baserustpkg)-$*
>  $(stampdir)/stamp-install-%: target_flavour = $*
>  $(stampdir)/stamp-install-%: MODHASHALGO=sha512
>  $(stampdir)/stamp-install-%:
> MODSECKEY=$(builddir)/build-$*/certs/signing_key.pem
> @@ -130,6 +132,7 @@ $(stampdir)/stamp-install-%: $(stampdir)/stamp-build-%
> $(stampdir)/stamp-install
>         dh_prep -p$(bin_pkg_name)-$*
>         dh_prep -p$(mods_pkg_name)-$*
>         dh_prep -p$(hdrs_pkg_name)-$*
> +       dh_prep -p$(rust_pkg_name)-$*
>         $(foreach _m,$(all_standalone_dkms_modules), \
>           $(if $(enable_$(_m)),dh_prep -p$(dkms_$(_m)_pkg_name)-$*;)\
>         )
> @@ -336,10 +339,6 @@ endif
>         grep '^HOSTCC   .*$(gcc)$$' $(hdrdir)/Makefile
>         grep '^CC       .*$(gcc)$$' $(hdrdir)/Makefile
>         rm -rf $(hdrdir)/include2 $(hdrdir)/source
> -       # Do not ship .o and .cmd artifacts in headers
> -       find $(hdrdir) -name \*.o -or -name \*.cmd -exec rm -f {} \;
> -       # Strip .so files (e.g., rust/libmacros.so) to reduce size even
> more
> -       find $(hdrdir) -name libmacros.so -exec strip -s {} \;
>         # We do not need the retpoline information.
>         find $(hdrdir) -name \*.o.ur-\* -exec rm -f {} \;
>         # Copy over the compilation version.
> @@ -386,7 +385,7 @@ endif
>         #
>         # Remove files which are generated at installation by postinst,
>         # except for modules.order and modules.builtin
> -       #
>

I think there is some whitespace being added here? Its perhaps not worth a
resend but if anyone remembers when applying..


> +       #
>         # NOTE: need to keep this list in sync with postrm
>         #
>         mkdir $(pkgdir)/lib/modules/$(abi_release)-$*/_
> @@ -554,6 +553,17 @@ endif
>         install -m644 $(DROOT)/canonical-certs.pem
> $(pkgdir_bldinfo)/usr/lib/linux/$(abi_release)-$*/canonical-certs.pem
>         install -m644 $(DROOT)/canonical-revoked-certs.pem
> $(pkgdir_bldinfo)/usr/lib/linux/$(abi_release)-$*/canonical-revoked-certs.pem
>
> +       # Get rid of .o and .cmd artifacts in headers
> +       find $(hdrdir) -name \*.o -or -name \*.cmd -exec rm -f {} \;
> +       # Strip .so files (e.g., rust/libmacros.so) to reduce size even
> more
> +       find $(hdrdir) -name libmacros.so -exec strip -s {} \;
> +
> +       # Generate Rust lib files
> +       install -d -m755 $(rustdir)
> +       mv $(hdrdir)/rust $(rustdir)
> +       # Generate symlink for Rust lib directory in headers
> +       $(SHELL) $(DROOT)/scripts/link-lib-rust "$(hdrdir)" "$(indeppkg)"
> "$*"
> +
>  ifneq ($(do_full_build),false)
>         # Clean out this flavours build directory.
>         rm -rf $(builddir)/build-$*
> @@ -626,6 +636,7 @@ binary-%: pkgimg_ex = $(mods_extra_pkg_name)-$*
>  binary-%: pkgdir_ex = $(CURDIR)/debian/$(extra_pkg_name)-$*
>  binary-%: pkgbldinfo = $(bldinfo_pkg_name)-$*
>  binary-%: pkghdr = $(hdrs_pkg_name)-$*
> +binary-%: pkgrust = $(rust_pkg_name)-$*
>  binary-%: dbgpkg = $(bin_pkg_name)-$*-dbgsym
>  binary-%: dbgpkgdir = $(CURDIR)/debian/$(bin_pkg_name)-$*-dbgsym
>  binary-%: pkgtools = $(tools_flavour_pkg_name)-$*
> @@ -664,6 +675,7 @@ endif
>
>         $(call dh_all,$(pkgbldinfo))
>         $(call dh_all,$(pkghdr))
> +       $(call dh_all,$(pkgrust))
>
>  ifneq ($(skipsub),true)
>         @set -e; for sub in $($(*)_sub); do             \
> diff --git a/debian/rules.d/3-binary-indep.mk b/debian/rules.d/
> 3-binary-indep.mk
> index ccc1c1f0079d6..e1b545a4077ae 100644
> --- a/debian/rules.d/3-binary-indep.mk
> +++ b/debian/rules.d/3-binary-indep.mk
> @@ -9,6 +9,7 @@ build-indep:
>  #
>  indep_hdrpkg = $(indep_hdrs_pkg_name)
>  indep_hdrdir = $(CURDIR)/debian/$(indep_hdrpkg)/usr/src/$(indep_hdrpkg)
> +
>  $(stampdir)/stamp-install-headers: $(stampdir)/stamp-prepare-indep
>         @echo Debug: $@
>         dh_testdir
> @@ -25,6 +26,8 @@ ifeq ($(do_flavour_header_package),true)
>         (find arch -name include -type d -print | \
>                 xargs -n1 -i: find : -type f) | \
>                 cpio -pd --preserve-modification-time $(indep_hdrdir)
> +       # Do not ship .o and .cmd artifacts in headers
> +       find $(indep_hdrdir) -name \*.o -or -name \*.cmd -exec rm -f {} \;
>  endif
>         @touch $@
>
> diff --git a/debian/scripts/link-lib-rust b/debian/scripts/link-lib-rust
> new file mode 100755
> index 0000000000000..0bea9729431d2
> --- /dev/null
> +++ b/debian/scripts/link-lib-rust
> @@ -0,0 +1,17 @@
> +#!/bin/bash -e
> +
> +. debian/debian.env
> +
> +hdrdir="$1"
> +symdir="$2"
> +flavour="$3"
> +
> +echo "Symlinking and copying Rust files for $flavour..."
> +
> +# Symlink Rust folder
> +item=rust
> +relpath=$(echo $symdir | sed s/headers/lib-rust/)-$flavour/$item
> +echo ln -s ../$relpath $hdrdir/$item
> +ln -s ../$relpath $hdrdir/$item
> +
> +exit
> --
> 2.39.2
>
>
> --
> kernel-team mailing list
> kernel-team@lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team
>
Andrea Righi May 9, 2023, 11:16 a.m. UTC | #2
On Tue, May 09, 2023 at 01:00:52PM +0200, Luke Nowakowski-Krijger wrote:
> Acked-by: Luke Nowakowski-Krijger <luke.nowakowskikrijger@canonical.com>
> 
> Looks good to me, I pointed out below a line that potentially adds some
> whitespace to maybe be aware of when applying.
> 
> > @@ -386,7 +385,7 @@ endif
> >         #
> >         # Remove files which are generated at installation by postinst,
> >         # except for modules.order and modules.builtin
> > -       #
> >
> 
> I think there is some whitespace being added here? Its perhaps not worth a
> resend but if anyone remembers when applying..

I actually removed some whitespaces here. Sorry, my vim is screaming
when there are trailing whitespaces, so I noticed them and removed as a
bonus cleanup, I should have mentioned it... :)

Thanks,
-Andrea

PS from my ~/.vimrc:

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

Applied to lunar:linux/master-next. Thanks.

-Stefan
diff mbox series

Patch

diff --git a/debian.master/control.d/flavour-control.stub b/debian.master/control.d/flavour-control.stub
index 2c0bcd194a5c7..67b3a877202a0 100644
--- a/debian.master/control.d/flavour-control.stub
+++ b/debian.master/control.d/flavour-control.stub
@@ -100,6 +100,17 @@  Description: Linux kernel headers for version PKGVER on DESC
  This is for sites that want the latest kernel headers.  Please read
  /usr/share/doc/linux-headers-PKGVER-ABINUM/debian.README.gz for details.
 
+Package: SRCPKGNAME-lib-rust-PKGVER-ABINUM-FLAVOUR
+Build-Profiles: <!stage1>
+Architecture: amd64
+Multi-Arch: foreign
+Section: devel
+Priority: optional
+Depends: ${misc:Depends}, coreutils
+Description: Rust library files related to Linux kernel version PKGVER
+ This package provides kernel library files for version PKGVER, that allow to
+ compile out-of-tree kernel modules written in Rust.
+
 Package: linux-image=SIGN-ME-PKG=-PKGVER-ABINUM-FLAVOUR-dbgsym
 Build-Profiles: <!stage1>
 Architecture: ARCH
diff --git a/debian/rules.d/0-common-vars.mk b/debian/rules.d/0-common-vars.mk
index 6b79ba9300e8c..e16e15ef53753 100644
--- a/debian/rules.d/0-common-vars.mk
+++ b/debian/rules.d/0-common-vars.mk
@@ -119,7 +119,9 @@  mods_pkg_name=linux-modules-$(abi_release)
 mods_extra_pkg_name=linux-modules-extra-$(abi_release)
 bldinfo_pkg_name=linux-buildinfo-$(abi_release)
 hdrs_pkg_name=linux-headers-$(abi_release)
+rust_pkg_name=$(src_pkg_name)-lib-rust-$(abi_release)
 indep_hdrs_pkg_name=$(src_pkg_name)-headers-$(abi_release)
+indep_lib_rust_pkg_name=$(src_pkg_name)-lib-rust-$(abi_release)
 
 #
 # The generation of content in the doc package depends on
diff --git a/debian/rules.d/1-maintainer.mk b/debian/rules.d/1-maintainer.mk
index 6eded3eb4626a..c625715eacf41 100644
--- a/debian/rules.d/1-maintainer.mk
+++ b/debian/rules.d/1-maintainer.mk
@@ -69,6 +69,7 @@  printenv:
 	@echo "flavours                  = $(flavours)"
 	@echo "bin_pkg_name              = $(bin_pkg_name)"
 	@echo "hdr_pkg_name              = $(hdrs_pkg_name)"
+	@echo "rust_pkg_name             = $(rust_pkg_name)"
 	@echo "doc_pkg_name              = $(doc_pkg_name)"
 	@echo "libc_dev_version          = $(libc_dev_version)"
 	@echo "ubuntu_selftests          = $(ubuntu_selftests)"
diff --git a/debian/rules.d/2-binary-arch.mk b/debian/rules.d/2-binary-arch.mk
index 689c9b788cd43..630a335616a74 100644
--- a/debian/rules.d/2-binary-arch.mk
+++ b/debian/rules.d/2-binary-arch.mk
@@ -109,10 +109,12 @@  $(stampdir)/stamp-install-%: signingv = $(CURDIR)/debian/$(bin_pkg_name)-signing
 $(stampdir)/stamp-install-%: toolspkgdir = $(CURDIR)/debian/$(tools_flavour_pkg_name)-$*
 $(stampdir)/stamp-install-%: cloudpkgdir = $(CURDIR)/debian/$(cloud_flavour_pkg_name)-$*
 $(stampdir)/stamp-install-%: basepkg = $(hdrs_pkg_name)
+$(stampdir)/stamp-install-%: baserustpkg = $(rust_pkg_name)
 $(stampdir)/stamp-install-%: indeppkg = $(indep_hdrs_pkg_name)
 $(stampdir)/stamp-install-%: kernfile = $(call custom_override,kernel_file,$*)
 $(stampdir)/stamp-install-%: instfile = $(call custom_override,install_file,$*)
 $(stampdir)/stamp-install-%: hdrdir = $(CURDIR)/debian/$(basepkg)-$*/usr/src/$(basepkg)-$*
+$(stampdir)/stamp-install-%: rustdir = $(CURDIR)/debian/$(baserustpkg)-$*/usr/src/$(baserustpkg)-$*
 $(stampdir)/stamp-install-%: target_flavour = $*
 $(stampdir)/stamp-install-%: MODHASHALGO=sha512
 $(stampdir)/stamp-install-%: MODSECKEY=$(builddir)/build-$*/certs/signing_key.pem
@@ -130,6 +132,7 @@  $(stampdir)/stamp-install-%: $(stampdir)/stamp-build-% $(stampdir)/stamp-install
 	dh_prep -p$(bin_pkg_name)-$*
 	dh_prep -p$(mods_pkg_name)-$*
 	dh_prep -p$(hdrs_pkg_name)-$*
+	dh_prep -p$(rust_pkg_name)-$*
 	$(foreach _m,$(all_standalone_dkms_modules), \
 	  $(if $(enable_$(_m)),dh_prep -p$(dkms_$(_m)_pkg_name)-$*;)\
 	)
@@ -336,10 +339,6 @@  endif
 	grep '^HOSTCC	.*$(gcc)$$' $(hdrdir)/Makefile
 	grep '^CC	.*$(gcc)$$' $(hdrdir)/Makefile
 	rm -rf $(hdrdir)/include2 $(hdrdir)/source
-	# Do not ship .o and .cmd artifacts in headers
-	find $(hdrdir) -name \*.o -or -name \*.cmd -exec rm -f {} \;
-	# Strip .so files (e.g., rust/libmacros.so) to reduce size even more
-	find $(hdrdir) -name libmacros.so -exec strip -s {} \;
 	# We do not need the retpoline information.
 	find $(hdrdir) -name \*.o.ur-\* -exec rm -f {} \;
 	# Copy over the compilation version.
@@ -386,7 +385,7 @@  endif
 	#
 	# Remove files which are generated at installation by postinst,
 	# except for modules.order and modules.builtin
-	# 
+	#
 	# NOTE: need to keep this list in sync with postrm
 	#
 	mkdir $(pkgdir)/lib/modules/$(abi_release)-$*/_
@@ -554,6 +553,17 @@  endif
 	install -m644 $(DROOT)/canonical-certs.pem $(pkgdir_bldinfo)/usr/lib/linux/$(abi_release)-$*/canonical-certs.pem
 	install -m644 $(DROOT)/canonical-revoked-certs.pem $(pkgdir_bldinfo)/usr/lib/linux/$(abi_release)-$*/canonical-revoked-certs.pem
 
+	# Get rid of .o and .cmd artifacts in headers
+	find $(hdrdir) -name \*.o -or -name \*.cmd -exec rm -f {} \;
+	# Strip .so files (e.g., rust/libmacros.so) to reduce size even more
+	find $(hdrdir) -name libmacros.so -exec strip -s {} \;
+
+	# Generate Rust lib files
+	install -d -m755 $(rustdir)
+	mv $(hdrdir)/rust $(rustdir)
+	# Generate symlink for Rust lib directory in headers
+	$(SHELL) $(DROOT)/scripts/link-lib-rust "$(hdrdir)" "$(indeppkg)" "$*"
+
 ifneq ($(do_full_build),false)
 	# Clean out this flavours build directory.
 	rm -rf $(builddir)/build-$*
@@ -626,6 +636,7 @@  binary-%: pkgimg_ex = $(mods_extra_pkg_name)-$*
 binary-%: pkgdir_ex = $(CURDIR)/debian/$(extra_pkg_name)-$*
 binary-%: pkgbldinfo = $(bldinfo_pkg_name)-$*
 binary-%: pkghdr = $(hdrs_pkg_name)-$*
+binary-%: pkgrust = $(rust_pkg_name)-$*
 binary-%: dbgpkg = $(bin_pkg_name)-$*-dbgsym
 binary-%: dbgpkgdir = $(CURDIR)/debian/$(bin_pkg_name)-$*-dbgsym
 binary-%: pkgtools = $(tools_flavour_pkg_name)-$*
@@ -664,6 +675,7 @@  endif
 
 	$(call dh_all,$(pkgbldinfo))
 	$(call dh_all,$(pkghdr))
+	$(call dh_all,$(pkgrust))
 
 ifneq ($(skipsub),true)
 	@set -e; for sub in $($(*)_sub); do		\
diff --git a/debian/rules.d/3-binary-indep.mk b/debian/rules.d/3-binary-indep.mk
index ccc1c1f0079d6..e1b545a4077ae 100644
--- a/debian/rules.d/3-binary-indep.mk
+++ b/debian/rules.d/3-binary-indep.mk
@@ -9,6 +9,7 @@  build-indep:
 #
 indep_hdrpkg = $(indep_hdrs_pkg_name)
 indep_hdrdir = $(CURDIR)/debian/$(indep_hdrpkg)/usr/src/$(indep_hdrpkg)
+
 $(stampdir)/stamp-install-headers: $(stampdir)/stamp-prepare-indep
 	@echo Debug: $@
 	dh_testdir
@@ -25,6 +26,8 @@  ifeq ($(do_flavour_header_package),true)
 	(find arch -name include -type d -print | \
 		xargs -n1 -i: find : -type f) | \
 		cpio -pd --preserve-modification-time $(indep_hdrdir)
+	# Do not ship .o and .cmd artifacts in headers
+	find $(indep_hdrdir) -name \*.o -or -name \*.cmd -exec rm -f {} \;
 endif
 	@touch $@
 
diff --git a/debian/scripts/link-lib-rust b/debian/scripts/link-lib-rust
new file mode 100755
index 0000000000000..0bea9729431d2
--- /dev/null
+++ b/debian/scripts/link-lib-rust
@@ -0,0 +1,17 @@ 
+#!/bin/bash -e
+
+. debian/debian.env
+
+hdrdir="$1"
+symdir="$2"
+flavour="$3"
+
+echo "Symlinking and copying Rust files for $flavour..."
+
+# Symlink Rust folder
+item=rust
+relpath=$(echo $symdir | sed s/headers/lib-rust/)-$flavour/$item
+echo ln -s ../$relpath $hdrdir/$item
+ln -s ../$relpath $hdrdir/$item
+
+exit