On Tue, Mar 21, 2023 at 05:34:45PM +0100, Michal Prívozník wrote:
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.
I don't believe we need to check 'buildtype'. A
get_option("optimization")
call should reflect the results of the 'buildtype' option IIRC>
But at the same time, disabling optimization whenever .git/ dir is
found
feels very, very wrong.
Yeah, I wouldn't enforce -O0, just disable tests, and print a message
at end of meson execution to use 'buildtype' to turn off optimization
or use a newer clang, if they want to re-enable tests.
With regards,
Daniel
--
|:
https://berrange.com -o-
https://www.flickr.com/photos/dberrange :|
|:
https://libvirt.org -o-
https://fstop138.berrange.com :|
|:
https://entangle-photo.org -o-
https://www.instagram.com/dberrange :|