All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC libdrm 0/2] Replace the build system with meson
@ 2017-03-16 21:25 Dylan Baker
  2017-03-16 21:25 ` [RFC libdrm 1/2] Port build system to meson Dylan Baker
                   ` (7 more replies)
  0 siblings, 8 replies; 94+ messages in thread
From: Dylan Baker @ 2017-03-16 21:25 UTC (permalink / raw)
  To: dri-devel; +Cc: mesa-dev, Dylan Baker

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=true, Size: 10779 bytes --]

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

[-- Attachment #2: Type: text/plain, Size: 160 bytes --]

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 94+ messages in thread

end of thread, other threads:[~2017-03-28 23:19 UTC | newest]

Thread overview: 94+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-03-16 21:25 [RFC libdrm 0/2] Replace the build system with meson Dylan Baker
2017-03-16 21:25 ` [RFC libdrm 1/2] Port build system to meson Dylan Baker
2017-03-16 21:25 ` [RFC libdrm 2/2] remove autotools build Dylan Baker
2017-03-16 21:32 ` [RFC libdrm 0/2] Replace the build system with meson Ilia Mirkin
2017-03-16 21:57   ` Dylan Baker
2017-03-17 10:05     ` Neil Armstrong
2017-03-16 22:36 ` Marek Olšák
2017-03-16 23:11   ` Dylan Baker
2017-03-17  1:53     ` Marek Olšák
2017-03-17  4:15       ` Dylan Baker
2017-03-17 21:18         ` Marek Olšák
2017-03-22 17:26   ` Jose Fonseca
2017-03-22 17:50     ` [Mesa-dev] " Marek Olšák
2017-03-16 23:35 ` Emil Velikov
2017-03-17  0:21   ` Dylan Baker
2017-03-17  0:41     ` Emil Velikov
2017-03-17  2:03       ` Jason Ekstrand
2017-03-17  2:28         ` Brian Paul
2017-03-22 17:59           ` Jose Fonseca
2017-03-22 20:57             ` [Mesa-dev] " Dylan Baker
2017-03-22 22:02               ` Rob Clark
2017-03-22 22:15                 ` Eric Anholt
2017-03-22 22:33                   ` Dylan Baker
2017-03-24 14:03               ` Jose Fonseca
2017-03-24 14:22                 ` [Mesa-dev] " Daniel Stone
2017-03-24 15:47                   ` Jose Fonseca
2017-03-25 20:15                     ` [Mesa-dev] " Rob Clark
2017-03-24 16:23                 ` Bas Nieuwenhuizen
2017-03-17  4:12         ` Dylan Baker
2017-03-17  6:02           ` Jonathan Gray
2017-03-20 13:55         ` [Mesa-dev] " Emil Velikov
2017-03-20 18:30           ` Matt Turner
2017-03-20 19:39             ` [Mesa-dev] " Emil Velikov
2017-03-20 21:28               ` Timothy Arceri
2017-03-20 21:38                 ` Jason Ekstrand
2017-03-21  5:00                 ` Jonathan Gray
2017-03-21 16:00                   ` Matt Turner
2017-03-23 12:23                   ` Jonathan Gray
2017-03-23 18:31                   ` Emil Velikov
2017-03-21 15:57               ` [Mesa-dev] " Matt Turner
2017-03-21 17:16                 ` Emil Velikov
2017-03-21 18:06                   ` Matt Turner
2017-03-21 18:56                     ` [Mesa-dev] " Emil Velikov
2017-03-21 19:08                       ` Jason Ekstrand
2017-03-21 19:10                       ` [Mesa-dev] " Matt Turner
2017-03-22 17:16                         ` Emil Velikov
2017-03-24 20:59                     ` Chad Versace
2017-03-24 20:44                 ` [Mesa-dev] " Chad Versace
2017-03-28 16:59                   ` Emil Velikov
2017-03-28 23:19                     ` Timothy Arceri
2017-03-21  5:10             ` Jonathan Gray
2017-03-21 16:11               ` [Mesa-dev] " Matt Turner
2017-03-24 16:58             ` randyf
2017-03-20 19:29           ` Rob Clark
2017-03-21 14:44 ` Jani Nikula
2017-03-21 15:13   ` Grazvydas Ignotas
2017-03-21 15:15     ` Ilia Mirkin
2017-03-21 16:16     ` Dylan Baker
2017-03-21 16:22   ` Dylan Baker
2017-03-22  4:23     ` [Mesa-dev] " Jonathan Gray
2017-03-22  8:24     ` Jani Nikula
2017-03-22 21:05       ` Dylan Baker
2017-03-23  8:13         ` Jani Nikula
2017-03-21 16:50 ` Kai Wasserbäch
2017-03-21 17:34   ` Dylan Baker
2017-03-21 18:36     ` [Mesa-dev] " Kai Wasserbäch
2017-03-21 21:16       ` Dylan Baker
2017-03-22 16:40 ` Alex Deucher
2017-03-22 17:07   ` Rob Clark
2017-03-22 20:10     ` [Mesa-dev] " Dylan Baker
2017-03-22 21:48       ` Rob Clark
2017-03-23 21:56         ` Greg Hackmann
2017-03-23 22:14           ` Colin Cross
2017-03-23 23:56             ` Dylan Baker
2017-03-24  0:03               ` [Mesa-dev] " Colin Cross
2017-03-24 16:54                 ` Dylan Baker
2017-03-23  1:18       ` [Mesa-dev] " Jonathan Gray
2017-03-23  1:38         ` Rob Clark
2017-03-24 13:42           ` Jose Fonseca
2017-03-24 17:13             ` Dylan Baker
2017-03-24 17:51               ` Eric Anholt
2017-03-24 18:34                 ` [Mesa-dev] " Daniel Stone
2017-03-24 19:10             ` Kristian Høgsberg
2017-03-24 19:44               ` Jose Fonseca
2017-03-24 20:08                 ` Kristian Høgsberg
2017-03-24 21:16                   ` Jose Fonseca
2017-03-24 21:20                     ` Jason Ekstrand
2017-03-24 21:34                     ` [Mesa-dev] " Rob Clark
2017-03-25  1:25                     ` Dylan Baker
2017-03-24 21:09               ` [Mesa-dev] " Rob Clark
2017-03-23 11:39       ` Emil Velikov
2017-03-23 17:54         ` Dylan Baker
2017-03-25  1:06         ` Kenneth Graunke
2017-03-22 22:30   ` [Mesa-dev] " Eric Anholt

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.