
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