[Debian-med-packaging] Bug#1010276: Bug#1010276: parasail: compiles something extra (or less) depending on the CPU features available
Andreas Tille
andreas at an3as.eu
Sun May 1 10:23:48 BST 2022
Hi Étienne,
Am Sun, May 01, 2022 at 10:50:16AM +0200 schrieb Étienne Mollier:
> I'm still looking up this issue, but I wrap up a status to clear
> my mind.
>
> To me, the main topic of the bug is the reproducibility issue[1]
> observed on i386, but other architectures may be affected. The
> difference is of one *.a file, and after looking up the d/rules
> file, this seems to be caused by the assumption that find sorts
> in a predictable way in the recipe below, which is not the case:
>
> override_dh_install:
> dh_install
> mv `find .libs -name "libparasail*.a" | head -n1` debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libparasail.a
> d-shlibmove --commit \
> --multiarch \
> --devunversioned \
> --exclude-la \
> --movedev debian/tmp/usr/include usr \
> --movedev "debian/tmp/usr/lib/*/pkgconfig/*.pc" usr/lib/$(DEB_HOST_MULTIARCH)/pkgconfig \
> debian/tmp/usr/lib/*/*.so
> rm debian/libparasail-dev/usr/lib/$(DEB_HOST_MULTIARCH)/libparasail.a
> dh_install -p libparasail-dev .libs/*.a usr/lib/$(DEB_HOST_MULTIARCH)
> find debian -name "lib*.la" -delete
>
> I would welcome thoughts on the intent of this part of the code,
> because I'm not sure which .a is the one that is supposed to be
> selected. If the content is not that important, then maybe it
> is just a matter of putting a `sort` between the `find` and the
> `head` in the `mv` command.
Thanks for having a look into this. I think it does not matter much
wgat file is copied here since it is removed afterwadrs inside the rm
statement. It was just a trick to make d-shlibmove not complaining
about a missing libparasail.a file which is provided that way.
Later in the `dh_install -p` statement simply all *.a files are copied
by keeping their names whatever it might be.
> [1]: https://tests.reproducible-builds.org/debian/dbdtxt/unstable/i386/parasail_2.5+dfsg-3.diffoscope.txt.gz
>
> Mattia Rizzolo, on 2022-04-27:
> > In fact, it seems that depending on the type of CPU it builds on,
> > sometimes there are slightly different files. For example, on an i386
> > system:
> > - usr/lib/i386-linux-gnu/libparasail_novec_table.a
> > - usr/lib/i386-linux-gnu/libparasail_sse41_rowcol.a
> > - usr/lib/i386-linux-gnu/libparasail_avx2_table.a
> > or in an amrhf system:
> > - usr/lib/arm-linux-gnueabihf/libparasail_novec.a
> > - usr/lib/arm-linux-gnueabihf/libparasail_novec_rowcol.a
> > sometimes are there or not.
>
> While I agree it is an error to build binaries to target
> specific CPU when doing large scale distribution, in the case of
> parasail, this is actually normal. Upstream implements run time
> CPU detection to avoid baseline violation on older CPU. After
> building the package with avx2 support, I could run the
> autopkgtest suite on a generic x86_64 virtual machine (no avx2,
> no sse4) without an illegal instruction crash. From the
> README.md file in parasail source code:
>
> >> parasail uses CPU dispatching at runtime to correctly select
> >> the appropriate implementation for the highest level of
> >> instruction set supported.
>
> Interestingly, while trying to understand the variability of
> build result, I noticed that we were missing builds for avx512
> instruction set, which seems to stem from ./configure failure to
> recognize the option due to warnings occurring in the sample
> code when -Wall build option is in use. That's probably worth
> forwarding upstream.
Thanks for noticing this.
> > Furthermore, I notice that amongst the i386 build, there are files such
> > as
> > - usr/lib/i386-linux-gnu/libparasail_sse2.a
> > - usr/lib/i386-linux-gnu/libparasail_sse41.a
> > that makes me wonder if the program is unconditially using SSE
> > instructions on i386, that would be a baseline violation; but since I
> > haven't verified if those features are used unconditially I'm not filing
> > this report about this, however please do check.
>
> On the i386 build, I also see avx2 builds, and I would tend to
> think those extensions were never implemented on i386, so I
> guess it wouldn't hurt, and would reduce resource consumption on
> build machines in the process, that these variants are actually
> not built. It should be a matter of just passing --disable-avx2
> and similar to the configure step when targeting i386 host
> architecture.
ACK.
> So I identified three todo items:
> 1. address reproducibility issue likely caused by find|head;
As I tried to explain this theory is not really plausible.
> 2. fix avx512 support for amd64 architecture;
This would be great.
> 3. disable execessive build artifacts for i386 architecture.
My guess is this will rather lead to solving the reproducibly
issue.
> Thanks Mattia for your work on the reproducible build effort,
> these issues may not have been caught otherwise!
+1
> Have a nice day, :)
+1
Kind regards
Andreas.
--
http://fam-tille.de
More information about the Debian-med-packaging
mailing list