[Mesa-dev] Meson's default build type

Michel Dänzer michel at daenzer.net
Fri Nov 3 09:25:56 UTC 2017


On 02/11/17 07:45 PM, Andres Rodriguez wrote:
> On 2017-11-02 01:52 PM, Eric Engestrom wrote:
>> On Thursday, 2017-11-02 17:39:53 +0000, Eric Engestrom wrote:
>>> On Thursday, 2017-11-02 09:46:05 -0700, Chad Versace wrote:
>>>> On Wed 01 Nov 2017, Dylan Baker wrote:
>>>>> Quoting Ilia Mirkin (2017-11-01 16:05:17)
>>>>>> On Wed, Nov 1, 2017 at 7:03 PM, Dylan Baker <dylan at pnwbakers.com>
>>>>>> wrote:
>>>>>>> Quoting Ilia Mirkin (2017-11-01 15:52:56)
>>>>>>>> On Wed, Nov 1, 2017 at 6:49 PM, Chad Versace
>>>>>>>> <chadversary at chromium.org> wrote:
>>>>>>>>> On Wed 01 Nov 2017, Dylan Baker wrote:
>>>>>>>>>> Quoting Chad Versace (2017-11-01 14:43:28)
>>>>>>>>>>> Wow. 10 seconds from a clean checkout to an installed Vulkan
>>>>>>>>>>> driver.
>>>>>>>>>
>>>>>>>>>> Glad that it's working out for you guys!
>>>>>>>>>>
>>>>>>>>>> Can I convince you to wire the anvil and i965 android/arc++
>>>>>>>>>> bits? ;)
>>>>>>>>>>
>>>>>>>>>> JFYI, the meson build will (I consider it a bug if it doesn't)
>>>>>>>>>> turn off all
>>>>>>>>>> glapi, egl, and glx if there are no dri or gallium drivers
>>>>>>>>>> built unless you
>>>>>>>>>> force them on.
>>>>>>>>>
>>>>>>>>> Thanks for turning that stuff off. Last time I tried to build just
>>>>>>>>> Vulkan without GL (maybe 1.5 years ago), Autotools didn't allow
>>>>>>>>> it. It
>>>>>>>>> insisted that i965 was a build dependency for anvil.
>>>>>>>>>
>>>>>>>>>> It also avoids building the glsl compiler unless there's a driver
>>>>>>>>>> that uses it.
>>>>>>>>>
>>>>>>>>> I expected the buildtime to be much longer because I expected
>>>>>>>>> it to
>>>>>>>>> build the GLSL compiler too. I was surprised and happy to
>>>>>>>>> discover that
>>>>>>>>> it builds only the SPIR-V compiler.
>>>>>>>>>
>>>>>>>>>> And it defaults to debug, which might be surprising, but people
>>>>>>>>>> around here thought that default debug is a feature.
>>>>>>>>>
>>>>>>>>> Huh... For infrastructure projects like Mesa (as opposed to test
>>>>>>>>> projects like Piglit), I expect the default build to be the
>>>>>>>>> release
>>>>>>>>> build. But I can understand why others would want default=debug.
>>>>>>>>
>>>>>>>> autotools defaults to debug disabled. I think that's how almost
>>>>>>>> every
>>>>>>>> project does it... debug enabled is definitely a surprise.
>>>>>>>>
>>>>>>>>    -ilia
>>>>>>>
>>>>>>> Well, for distros they likely want to set the buildtype to plain
>>>>>>> (meson adds no
>>>>>>> compiler flags except ones the project defines), and then add
>>>>>>> their default
>>>>>>> flags via CFLAGS and CXXFLAGS. That is certainly *not* what
>>>>>>> anyone except a
>>>>>>> distro (or some kind of build infrastructure like jenkins or
>>>>>>> gentoo) would want.
>>>>>>> Xorg's default is debugoptimzed, for reference.
>>>>>>
>>>>>> --enable-debug enables -DDEBUG in mesa. Are you saying that this is
>>>>>> the default? Or are you just saying that you're not adding extra
>>>>>> -O100073 options?
>>>>>
>>>>> The meson build keys -DDEBUG on the builtype, debug or
>>>>> debugoptimized you get
>>>>> -DDEBUG, anything else, you don't. The way mesa is setup if you
>>>>> don't have
>>>>> -DNDEBUG you have to have -DDEBUG or asserts happen for member of
>>>>> structures
>>>>> that don't exist.
>>>>>
>>>>> I'm not dead set on debug as the default buildtype, it's what we
>>>>> have ATM
>>>>> though. I asked around here and the feeling was that builtype debug
>>>>> by default
>>>>> was a feature. If the larger community disagrees we can change it.
>>>>
>>>> When making this decision, I think we should also consider the needs of
>>>> non-developers who build and install Mesa from source to get the latest
>>>> version or bugfix. I strongly suspect those people want
>>>> buildtype=debugoptimized or buildtype=release.
>>>>
>>>> I think it's important for Mesa to follow the established convention of
>>>> most other Linux projects: if a user downloads the source, builds, and
>>>> installs, then the user gets a working installation suitable for normal
>>>> usage. Today, Meson doesn't give that because it builds Mesa with -O0.
>>>>
>>>> Some context... I install a lot of packages from source on my work
>>>> machine because I often want or need newer versions of some packages
>>>> than what's available through the package manager.
>>>
>>> How do you ensure it integrates correctly with your system [1], other
>>> than by using the package manager's package and updating the version
>>> number locally?
>>>
>>>    [1] by "integrate" I mean things like installing things in the right
>>>    locations, removing stale files from old packages, providing new
>>>    dependencies for other packages, etc.
>>>
>>> I also install newer version of stuff on various machines, but if I had
>>> to configure each project manually to integrate with my system, then
>>> I would just give up. That burden does not scale :P
>>>
>>> The only way I can make this work is by grabbing the existing package,
>>> bumping the version and recompiling it. Part of the configuration set in
>>> the package is the various optimisation flags, be that through
>>> buildtype=release or buildtype=plain + manual cflags.
>>>
>>> (Note that for Meson, Arch provides a wrapper [2] that sets all the
>>> options to the right values for ease of use.)
>>> [2]
>>> https://git.archlinux.org/svntogit/packages.git/tree/meson/trunk/arch-meson
>>>
>>>
>>
>> I think I wasn't clear, but my point was that IMHO the only time someone
>> would build something without going through a package is when they're
>> dev'ing it, in which case buildtype=debug is what they want.
>>
>> It's not too hard to ask all the devs to manually set it every time
>> though,
>> especially since we're all used to having to do it with autotools.
> 
> I think this is one of the better reasons to go with an optimized build
> type by default.
> 
> Additionally, it is very easy for a developer to realize that a build is
> missing debug symbols (you'll get the feedback from your debugger
> immediately). However, a user might never notice that their build is not
> optimized. This can lead to a bad experience that could've easily been
> avoided, and possibly some noise in bug reports.

Builds without debugging symbols also result in noise in bug reports.


-- 
Earthling Michel Dänzer               |               http://www.amd.com
Libre software enthusiast             |             Mesa and X developer


More information about the mesa-dev mailing list