[RFC libdrm 0/2] Replace the build system with meson

Marek Olšák maraeo at gmail.com
Thu Mar 16 22:36:26 UTC 2017


Is there a way not to use ninja with meson, because ninja redirects
all stderr output from gcc to stdout, which breaks many development
environments that expect errors in stderr?

I'm basically saying that if ninja can't keep gcc errors in stderr, I
wouldn't like any project that I might be involved in to require ninja
for building.

Marek

On Thu, Mar 16, 2017 at 10:25 PM, Dylan Baker <dylan at pnwbakers.com> wrote:
> Why bother, and why would we want this?                                                              │~
>
> First it's written in python, which means the potential developer base
> is massive. And it provides a recursive view for humans, but a
> non-recursive view for the system. This is the best of both worlds,
> humans can organize the build system in a way that makes sense, and the
> machine gets a non-recursive build system. It also uses ninja rather
> than make, and ninja is faster than make inherently. Meson is also a
> simpler syntax than autotools or cmake it's not Turing Complete by
> design nor does it expose python, again, by design. This allows meson
> itself to be reimplemented in a another language if python becomes a
> dead-end or a bottle-neck. It also makes it much easier to understand
> what the build system is doing.
>
> What's different about using meson?
>
> Well, apart from a faster builds and less magic in the build system? The
> configure flags are different, it uses -D<opt>=<value> more like cmake
> than the --enable or --with flags of autotools, although oddly it uses
> --prefix and friends when calling meson, but not with mesonconf, there's
> a bug opened on this. Meson also doesn't support in-tree builds at all;
> all builds are done out of tree. It also doesn't provide a "make dist"
> target, fortunately there's this awesome tool called git, and it
> provides a "git archive" command that does much the same thing. Did I
> mention it's fast?
>
> Here are the performance numbers I see on a 2 core 4 thread SKL, without
> initial configuration, and building out of tree (using zsh):
>
> For meson the command line is:
> time (meson build -Dmanpages=true && ninja -C build)
>
> For autotools the command line is:
> time (mdkir build && cd build && ../autotools && make -j5 -l4)<Paste>
>
> meson (cold ccache):     13.37s user 1.74s system 255% cpu  5.907 total
> autotools (cold ccache): 26.50s user 1.71s system 129% cpu 21.835 total
> meson (hot ccache):       2.13s user 0.39s system 154% cpu  1.633 total
> autotools (hot ccache):  13.93s user 0.73s system 102% cpu 14.259 total
>
> That's ~4x faster for a cold build and ~10x faster for a hot build.
>
> For a make clean && make style build with a hot cache:
> meson:     4.64s user 0.33s system 334% cpu 1.486 total
> autotools: 7.93s user 0.32s system 167% cpu 4.920 total
>
> Why bother with libdrm?
>
> It's a simple build system, that could be completely (or mostly
> completely) be ported in a very short time, and could serve as a tech
> demo for the advantages of using meson to garner feedback for embarking
> on a larger project, like mesa (which is what I'm planning to work on
> next).
>
> tl;dr
>
> I wrote this as practice for porting Mesa, and figured I might as well
> send it out since I wrote it.
>
> It is very likely that neither of these large patches will show up on the
> mailing list, but this is available at my github:
> https://github.com/dcbaker/libdrm wip/meson
>
> Dylan Baker (2):
>   Port build system to meson
>   remove autotools build
>
>  .editorconfig                    |   2 +-
>  .gitignore                       |  82 +-----
>  Makefile.am                      | 144 +--------
>  Makefile.sources                 |  41 +--
>  README                           |  21 +-
>  amdgpu/Makefile.am               |  47 +---
>  amdgpu/Makefile.sources          |  15 +-
>  amdgpu/libdrm_amdgpu.pc.in       |  11 +-
>  amdgpu/meson.build               |  57 +++-
>  autogen.sh                       |  20 +-
>  configure.ac                     | 568 +--------------------------------
>  etnaviv/Makefile.am              |  26 +-
>  etnaviv/Makefile.sources         |  12 +-
>  etnaviv/libdrm_etnaviv.pc.in     |  11 +-
>  etnaviv/meson.build              |  56 +++-
>  exynos/Makefile.am               |  27 +--
>  exynos/libdrm_exynos.pc.in       |  11 +-
>  exynos/meson.build               |  52 +++-
>  freedreno/Makefile.am            |  30 +--
>  freedreno/Makefile.sources       |  26 +-
>  freedreno/libdrm_freedreno.pc.in |  11 +-
>  freedreno/meson.build            |  72 ++++-
>  include/drm/meson.build          |  48 +++-
>  intel/Makefile.am                |  73 +----
>  intel/Makefile.sources           |  15 +-
>  intel/intel_bufmgr_gem.c         |   8 +-
>  intel/libdrm_intel.pc.in         |  11 +-
>  intel/meson.build                |  55 +++-
>  libdrm.pc.in                     |  10 +-
>  libkms/Makefile.am               |  43 +--
>  libkms/Makefile.sources          |  23 +-
>  libkms/libkms.pc.in              |  11 +-
>  libkms/meson.build               |  71 ++++-
>  m4/.gitignore                    |   5 +-
>  man/Makefile.am                  |  62 +---
>  man/meson.build                  | 119 +++++++-
>  meson.build                      | 288 ++++++++++++++++-
>  meson_config.h.in                |  24 +-
>  meson_options.txt                |  16 +-
>  nouveau/Makefile.am              |  33 +--
>  nouveau/Makefile.sources         |   9 +-
>  nouveau/libdrm_nouveau.pc.in     |  11 +-
>  nouveau/meson.build              |  63 ++++-
>  omap/Makefile.am                 |  24 +-
>  omap/libdrm_omap.pc.in           |  11 +-
>  omap/meson.build                 |  48 +++-
>  radeon/Makefile.am               |  47 +---
>  radeon/Makefile.sources          |  21 +-
>  radeon/libdrm_radeon.pc.in       |  11 +-
>  radeon/meson.build               |  62 +++-
>  tegra/Makefile.am                |  25 +-
>  tegra/libdrm_tegra.pc.in         |  11 +-
>  tegra/meson.build                |  50 +++-
>  tests/Makefile.am                |  47 +---
>  tests/amdgpu/Makefile.am         |  29 +--
>  tests/amdgpu/meson.build         |  30 ++-
>  tests/etnaviv/Makefile.am        |  41 +--
>  tests/etnaviv/meson.build        |  49 +++-
>  tests/exynos/Makefile.am         |  47 +---
>  tests/exynos/meson.build         |  43 ++-
>  tests/kms/Makefile.am            |  36 +--
>  tests/kms/meson.build            |  46 +++-
>  tests/kmstest/Makefile.am        |  25 +-
>  tests/kmstest/meson.build        |  28 ++-
>  tests/meson.build                |  87 +++++-
>  tests/modeprint/Makefile.am      |  18 +-
>  tests/modeprint/meson.build      |  27 ++-
>  tests/modetest/Makefile.am       |  24 +-
>  tests/modetest/Makefile.sources  |   6 +-
>  tests/modetest/meson.build       |  27 ++-
>  tests/nouveau/Makefile.am        |  16 +-
>  tests/nouveau/meson.build        |  30 ++-
>  tests/proptest/Makefile.am       |  21 +-
>  tests/proptest/Makefile.sources  |   2 +-
>  tests/proptest/meson.build       |  27 ++-
>  tests/radeon/Makefile.am         |  14 +-
>  tests/radeon/meson.build         |  27 ++-
>  tests/tegra/Makefile.am          |  13 +-
>  tests/tegra/meson.build          |  27 ++-
>  tests/ttmtest/Makefile.am        |   1 +-
>  tests/ttmtest/src/Makefile.am    |   8 +-
>  tests/util/Makefile.am           |  13 +-
>  tests/util/Makefile.sources      |   8 +-
>  tests/util/meson.build           |  35 ++-
>  tests/vbltest/Makefile.am        |  19 +-
>  tests/vbltest/meson.build        |  27 ++-
>  vc4/Makefile.am                  |  34 +--
>  vc4/Makefile.sources             |   3 +-
>  vc4/libdrm_vc4.pc.in             |   9 +-
>  vc4/meson.build                  |  28 ++-
>  xf86atomic.h                     |   4 +-
>  91 files changed, 1634 insertions(+), 1992 deletions(-)
>  delete mode 100644 Makefile.am
>  delete mode 100644 Makefile.sources
>  delete mode 100644 amdgpu/Makefile.am
>  delete mode 100644 amdgpu/Makefile.sources
>  delete mode 100644 amdgpu/libdrm_amdgpu.pc.in
>  create mode 100644 amdgpu/meson.build
>  delete mode 100755 autogen.sh
>  delete mode 100644 configure.ac
>  delete mode 100644 etnaviv/Makefile.am
>  delete mode 100644 etnaviv/Makefile.sources
>  delete mode 100644 etnaviv/libdrm_etnaviv.pc.in
>  create mode 100644 etnaviv/meson.build
>  delete mode 100644 exynos/Makefile.am
>  delete mode 100644 exynos/libdrm_exynos.pc.in
>  create mode 100644 exynos/meson.build
>  delete mode 100644 freedreno/Makefile.am
>  delete mode 100644 freedreno/Makefile.sources
>  delete mode 100644 freedreno/libdrm_freedreno.pc.in
>  create mode 100644 freedreno/meson.build
>  create mode 100644 include/drm/meson.build
>  delete mode 100644 intel/Makefile.am
>  delete mode 100644 intel/Makefile.sources
>  delete mode 100644 intel/libdrm_intel.pc.in
>  create mode 100644 intel/meson.build
>  delete mode 100644 libdrm.pc.in
>  delete mode 100644 libkms/Makefile.am
>  delete mode 100644 libkms/Makefile.sources
>  delete mode 100644 libkms/libkms.pc.in
>  create mode 100644 libkms/meson.build
>  delete mode 100644 m4/.gitignore
>  delete mode 100644 man/Makefile.am
>  create mode 100644 man/meson.build
>  create mode 100644 meson.build
>  create mode 100644 meson_config.h.in
>  create mode 100644 meson_options.txt
>  delete mode 100644 nouveau/Makefile.am
>  delete mode 100644 nouveau/Makefile.sources
>  delete mode 100644 nouveau/libdrm_nouveau.pc.in
>  create mode 100644 nouveau/meson.build
>  delete mode 100644 omap/Makefile.am
>  delete mode 100644 omap/libdrm_omap.pc.in
>  create mode 100644 omap/meson.build
>  delete mode 100644 radeon/Makefile.am
>  delete mode 100644 radeon/Makefile.sources
>  delete mode 100644 radeon/libdrm_radeon.pc.in
>  create mode 100644 radeon/meson.build
>  delete mode 100644 tegra/Makefile.am
>  delete mode 100644 tegra/libdrm_tegra.pc.in
>  create mode 100644 tegra/meson.build
>  delete mode 100644 tests/Makefile.am
>  delete mode 100644 tests/amdgpu/Makefile.am
>  create mode 100644 tests/amdgpu/meson.build
>  delete mode 100644 tests/etnaviv/Makefile.am
>  create mode 100644 tests/etnaviv/meson.build
>  delete mode 100644 tests/exynos/Makefile.am
>  create mode 100644 tests/exynos/meson.build
>  delete mode 100644 tests/kms/Makefile.am
>  create mode 100644 tests/kms/meson.build
>  delete mode 100644 tests/kmstest/Makefile.am
>  create mode 100644 tests/kmstest/meson.build
>  create mode 100644 tests/meson.build
>  delete mode 100644 tests/modeprint/Makefile.am
>  create mode 100644 tests/modeprint/meson.build
>  delete mode 100644 tests/modetest/Makefile.am
>  delete mode 100644 tests/modetest/Makefile.sources
>  create mode 100644 tests/modetest/meson.build
>  delete mode 100644 tests/nouveau/Makefile.am
>  create mode 100644 tests/nouveau/meson.build
>  delete mode 100644 tests/proptest/Makefile.am
>  delete mode 100644 tests/proptest/Makefile.sources
>  create mode 100644 tests/proptest/meson.build
>  delete mode 100644 tests/radeon/Makefile.am
>  create mode 100644 tests/radeon/meson.build
>  delete mode 100644 tests/tegra/Makefile.am
>  create mode 100644 tests/tegra/meson.build
>  delete mode 100644 tests/ttmtest/Makefile.am
>  delete mode 100644 tests/ttmtest/src/Makefile.am
>  delete mode 100644 tests/util/Makefile.am
>  delete mode 100644 tests/util/Makefile.sources
>  create mode 100644 tests/util/meson.build
>  delete mode 100644 tests/vbltest/Makefile.am
>  create mode 100644 tests/vbltest/meson.build
>  delete mode 100644 vc4/Makefile.am
>  delete mode 100644 vc4/Makefile.sources
>  delete mode 100644 vc4/libdrm_vc4.pc.in
>  create mode 100644 vc4/meson.build
>
> base-commit: 19c4cfc54918d361f2535aec16650e9f0be667cd
> --
> git-series 0.9.1
>
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
>


More information about the dri-devel mailing list