Bug 109391

Summary: LTO Build fails
Product: Mesa Reporter: Rudolf Kastl <che666>
Component: GLXAssignee: mesa-dev
Status: RESOLVED FIXED QA Contact: mesa-dev
Severity: normal    
Priority: medium CC: Hi-Angel, pedretti.fabio
Version: git   
Hardware: Other   
OS: All   
Whiteboard:
i915 platform: i915 features:
Attachments: Fix LTO build with GCC

Description Rudolf Kastl 2019-01-19 00:49:19 UTC
Building mesa git with meson fails if LTO is enabled. This has been working before for a long time (when i was still using autotools to build, though due to a longer christmas holiday this was some time ago). 

Here is the build log of the failed build:

https://copr-be.cloud.fedoraproject.org/results/che/mesa/fedora-29-x86_64/00847998-mesa/build.log.gz
Comment 1 Hi-Angel 2019-01-31 11:06:12 UTC
I just researched the problem, and it comes down to function declarations using assembly. Maybe there some __attribute__ needs to be added and what not, but I kind of stuck ATM, because the assembly code is in a generated header `build/src/glapi/gen/glapi_mapi_tmp.h`.

I would appreciate if anybody acknowledged would tell what part of code is responsible for generating the header above.

I hope to take a closer look on the weekend.
Comment 2 Eric Engestrom 2019-01-31 14:47:40 UTC
That file is generated by src/mapi/mapi_abi.py
The exact command line used to generate src/glapi/gen/glapi_mapi_tmp.h is:
$ python3 src/mapi/mapi_abi.py --printer glapi src/mapi/glapi/gen/gl_and_es_API.xml > build/src/glapi/gen/glapi_mapi_tmp.h

I'm afraid I can't help with any assembly issue though.

As for LTO, it never worked for me :/
It's been on my "to look at eventually" list, but I haven't yet.
Comment 3 Hi-Angel 2019-01-31 22:57:59 UTC
(In reply to Eric Engestrom from comment #2)
> That file is generated by src/mapi/mapi_abi.py
> The exact command line used to generate src/glapi/gen/glapi_mapi_tmp.h is:
> $ python3 src/mapi/mapi_abi.py --printer glapi
> src/mapi/glapi/gen/gl_and_es_API.xml > build/src/glapi/gen/glapi_mapi_tmp.h
> 
> I'm afraid I can't help with any assembly issue though.
> 
> As for LTO, it never worked for me :/
> It's been on my "to look at eventually" list, but I haven't yet.

Oh, thank you very much! For some reason I didn't get a notification about reply, it could've saved me some hours :(

------

To give some update, I reduced it to a minimal testcase, the problem turns out that gcc with flto removes functions implemented in asm. I reported a bug on that https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89147 FWIW with clang it works correctly.
Comment 4 Hi-Angel 2019-02-03 18:55:32 UTC
Please test the following patch, it should resolve the building problem.

What it does is disables flto for specific files with assembly defined functions. It's okay since from a cursory look there's not much code except the assembly stuff.

I should mention however, for some reason flto-optimized r600g works incorrectly for me. But this is irrelevant to the current problem, and in fact I've stopped using LTO build some months ago for that reason (yeah, LTO build with GCC worked for me too, I don't know why it broke recently). I wanted to bisect that back then, but screwed bisection up, and later I just didn't have motivation or time.
Comment 5 Hi-Angel 2019-02-03 18:56:02 UTC
Created attachment 143280 [details] [review]
Fix LTO build with GCC
Comment 6 Rudolf Kastl 2019-02-03 22:34:50 UTC
(In reply to Hi-Angel from comment #5)
> Created attachment 143280 [details] [review] [review]
> Fix LTO build with GCC

(In reply to Hi-Angel from comment #3)
> (In reply to Eric Engestrom from comment #2)
> > That file is generated by src/mapi/mapi_abi.py
> > The exact command line used to generate src/glapi/gen/glapi_mapi_tmp.h is:
> > $ python3 src/mapi/mapi_abi.py --printer glapi
> > src/mapi/glapi/gen/gl_and_es_API.xml > build/src/glapi/gen/glapi_mapi_tmp.h
> > 
> > I'm afraid I can't help with any assembly issue though.
> > 
> > As for LTO, it never worked for me :/
> > It's been on my "to look at eventually" list, but I haven't yet.
> 
> Oh, thank you very much! For some reason I didn't get a notification about
> reply, it could've saved me some hours :(
> 
> ------
> 
> To give some update, I reduced it to a minimal testcase, the problem turns
> out that gcc with flto removes functions implemented in asm. I reported a
> bug on that https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89147 FWIW with
> clang it works correctly.

Thank you for taking the time to look into that. I will do a scratch build with the patch tomorrow and some testing! Awesome!
Comment 7 Hi-Angel 2019-02-13 18:40:02 UTC
The build fail should be fixed with https://gitlab.freedesktop.org/mesa/mesa/commit/fccc9d3de6cfd1f4d7dbf49af1582b88d143c4cd

Feel free to reopen if it's not the case.

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.