[PATCH] meson: Disable optimizations if CLang doesn't support -fsemantic-interposition

Michal Prívozník mprivozn at redhat.com
Tue Mar 21 16:34:45 UTC 2023


On 3/21/23 17:04, Pavel Hrdina wrote:
> On Tue, Mar 21, 2023 at 03:33:24PM +0000, Daniel P. Berrangé wrote:
>> On Tue, Mar 21, 2023 at 04:31:00PM +0100, Michal Prívozník wrote:
>>> On 3/21/23 16:25, Daniel P. Berrangé wrote:
>>>> On Tue, Mar 21, 2023 at 04:11:33PM +0100, Michal Privoznik wrote:
>>>>> <snip/>
>>>>
>>>> I don't like the idea of forcing -O0 for the production builds, just to
>>>> work around the problem of our broken tests. Can we approach it from the
>>>> opposite POV and disable building of tests, if we see meson optimization
>>>> level is > 0
>>>>
>>>> eg something roughly like this:
>>>>
>>>>   with_tests = true
>>>>   if cc.get_id() == 'clang' and
>>>>      not supported_cc_flags.contains('-fsemantic-interposition') and
>>>>      get_option('optimization') != 0
>>>>      with_tests = false
>>>>   endif
>>>>
>>>>   if with_tests
>>>>     subdir('tests')
>>>>   endif
>>>>
>>>>
>>>> So people can choose to have tests work or not
>>>
>>> That could work too, yeah. My reasoning for going with -O0 was that it's
>>> very rare that somebody would use such old CLang, but I guess disabling
>>> tests is less invasive. I'll send v2 shortly.
>>
>> It isn't just old Clang. Latest clang lacks -fsemantic-interposition
>> on non-x86_64, which means current macOS M1 platform today. For our
>> CI, I guess we'll want to request non-optimized builds for macOS
>> and FreeBSD 12, so we still run unit tests.
> 
> We can also utilize the meson 'buildtype' option [1] to figure out if we
> need to disable/enable tests or modify the optimization that we use when
> building.
> 
> When building from git the default value is 'debugoptimized' but when
> building using RPM it changes to 'plain'. Not sure what FreeBSD and
> macOS are using.
> 
> The 'buildtype' affects what value will be stored in 'debug' and
> 'optimization' options. That could allow us to run tests from git builds
> where we could disable optimizations and disable tests when libvirt is
> compiled using package manager.

To summarize what we want:

if CLang doesn't support -fsemantic-interposition:
  if building from a git checkout:
    enforce -O0
  else
    disable tests

What worries me about this approach is that some distros might leave
.git/ dir in the checkout (e.g. live ebuilds from Gentoo) in which case
we detect the build as from git. But such distros surely pass
--buildtype=...

Now, we need to distinguish two scenarios: when the default value from
the beginning of the meson.build file was used (and thus we can enforce
-O0), OR when --buildtype=debugoptimized (or any other option that sets
optimization level) was passed on the cmd line (in which case we need to
disable tests). But I don't think there's a way to detect that.

But at the same time, disabling optimization whenever .git/ dir is found
feels very, very wrong.

Michal



More information about the libvir-list mailing list