[Mesa-dev] [RFC libdrm 0/2] Replace the build system with meson
Dylan Baker
dylan at pnwbakers.com
Thu Mar 16 21:25:35 UTC 2017
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
More information about the mesa-dev
mailing list