Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 923491 - media-video/ffmpeg tc-is-lto, filter-lto, and multiple lib issues
Summary: media-video/ffmpeg tc-is-lto, filter-lto, and multiple lib issues
Status: RESOLVED FIXED
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: Current packages (show other bugs)
Hardware: All Linux
: Normal normal (vote)
Assignee: Gentoo Media-video project
URL:
Whiteboard:
Keywords: PATCH
Depends on:
Blocks: lto
  Show dependency tree
 
Reported: 2024-02-01 21:25 UTC by Michael Cook
Modified: 2024-06-04 03:26 UTC (History)
4 users (show)

See Also:
Package list:
Runtime testing required: ---


Attachments
Fixed ffmpeg ebuild (ffmpeg-6.1.1-r2.ebuild,19.18 KB, text/plain)
2024-02-01 21:27 UTC, Michael Cook
Details
Min-repo ebuild demonstrating issue (test-1.ebuild,497 bytes, application/vnd.gentoo.ebuild)
2024-02-01 21:37 UTC, Michael Cook
Details
Min-repo ebuild eclass-debug.log (eclass-debug.log,4.71 KB, text/plain)
2024-02-01 21:39 UTC, Michael Cook
Details
diff of the changes to the ebuild (ffmpeg.diff,1.38 KB, text/plain)
2024-06-04 02:58 UTC, Michael Cook
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Michael Cook 2024-02-01 21:25:29 UTC
With multilib systems, the 2nd arch run will return false when tc-is-lto is called since filter-lto was called in the previous one.

On my system it builds x86 first, which skips LTO due to previous bugs, but still calls filter-lto which means when it gets to build amd64 tc-is-lto will return false and skip LTO.

I did check an object file with readelf -S when it should have compiled with LTO and it did not. 

I did try moving the LTO stuff to src_prepare (anything only called once before src_configure will work, but I thought it made sense to do it there)
Comment 1 Michael Cook 2024-02-01 21:27:10 UTC
Created attachment 883955 [details]
Fixed ffmpeg ebuild

This is what I ended up doing which works out fine (verified with checking object files with readelf -S)
Comment 2 Michael Cook 2024-02-01 21:37:56 UTC
Created attachment 883956 [details]
Min-repo ebuild demonstrating issue
Comment 3 Michael Cook 2024-02-01 21:39:36 UTC
Created attachment 883957 [details]
Min-repo ebuild eclass-debug.log
Comment 4 Michael Cook 2024-02-02 01:41:08 UTC
I couldn't find any other multilib packages in the tree that has this issue, but media-libs/x264 would if LTO support was added (they support LTO as a config flag) which does make me wonder if pkg_setup would be a better place to do a fix like this.
Comment 5 Eli Schwartz gentoo-dev 2024-05-26 23:57:02 UTC
Splitting the logic across multiple phases here feels kind of awkward. I sort of feel like a better approach would be to handle the LTO in a subshell, possibly a subshell for the whole src_configure.

Similar handling exists for meson.eclass, which calculates arguments including -Db_lto=true inside a subshell since commit e9189344b971f7ee0e2bec36650c57dbade4f122.
Comment 6 Michael Cook 2024-06-04 02:58:02 UTC
Created attachment 895028 [details]
diff of the changes to the ebuild
Comment 7 Larry the Git Cow gentoo-dev 2024-06-04 03:26:38 UTC
The bug has been closed via the following commit(s):

https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=d9a701f0e4dfecb71ff54d4c8dba1a4494a2f3ea

commit d9a701f0e4dfecb71ff54d4c8dba1a4494a2f3ea
Author:     Sam James <sam@gentoo.org>
AuthorDate: 2024-06-04 03:23:30 +0000
Commit:     Sam James <sam@gentoo.org>
CommitDate: 2024-06-04 03:25:05 +0000

    media-video/ffmpeg: fix LTO handling with multilib
    
    Checking ABI and filtering based on that doesn't work in multilib_src_configure
    because of contamination & the order the phases / ABIs run in.
    
    Closes: https://bugs.gentoo.org/923491
    Thanks-to: Michael Cook <mackal.cook@gmail.com>
    Signed-off-by: Sam James <sam@gentoo.org>

 media-video/ffmpeg/ffmpeg-6.1.1-r6.ebuild | 15 ++++++++++-----
 media-video/ffmpeg/ffmpeg-9999.ebuild     | 15 ++++++++++-----
 2 files changed, 20 insertions(+), 10 deletions(-)