diff mbox

[RFC,libdrm,1/2] Port build system to meson

Message ID 5292e55a1b500ffe5eacea073cd9a81e8cec64e1.1489699291.git-series.dylan@pnwbakers.com (mailing list archive)
State New, archived
Headers show

Commit Message

Dylan Baker March 16, 2017, 9:25 p.m. UTC
This is a bit of a tech demo, a bit of a serious port to meson. This
provides almost all of the build system, except for the ability to
install the tests, it doesn't add -lrt for the clock (it's been in core
glibc for some time), has basically no comments, and hasn't been tested
on any platform except Linux (I have cross compiled for arm). It also
relies on unreviewed, unmerged patches to meson for valgrind support
(but will work fine without the patch and without valgrind)

What's not done:
- the install tests flag isn't implemented
- some of the extra data installs aren't implemented
- valgrind is set to "no" rather than "auto". To make valgrind work
  correctly you need a patch that's neither reviewed nor landed in
  meson, or to implement a hack that might make cross compiling
  difficult.
---
 .editorconfig               |   4 +-
 README                      |  21 +--
 amdgpu/meson.build          |  57 +++++++-
 etnaviv/meson.build         |  56 +++++++-
 exynos/meson.build          |  52 +++++++-
 freedreno/meson.build       |  72 +++++++++-
 include/drm/meson.build     |  48 ++++++-
 intel/intel_bufmgr_gem.c    |   8 +-
 intel/meson.build           |  55 +++++++-
 libkms/meson.build          |  71 +++++++++-
 man/meson.build             | 119 +++++++++++++++-
 meson.build                 | 288 +++++++++++++++++++++++++++++++++++++-
 meson_config.h.in           |  24 +++-
 meson_options.txt           |  16 ++-
 nouveau/meson.build         |  63 ++++++++-
 omap/meson.build            |  48 ++++++-
 radeon/meson.build          |  62 ++++++++-
 tegra/meson.build           |  50 ++++++-
 tests/amdgpu/meson.build    |  30 ++++-
 tests/etnaviv/meson.build   |  49 ++++++-
 tests/exynos/meson.build    |  43 ++++++-
 tests/kms/meson.build       |  46 ++++++-
 tests/kmstest/meson.build   |  28 ++++-
 tests/meson.build           |  87 +++++++++++-
 tests/modeprint/meson.build |  27 +++-
 tests/modetest/meson.build  |  27 +++-
 tests/nouveau/meson.build   |  30 ++++-
 tests/proptest/meson.build  |  27 +++-
 tests/radeon/meson.build    |  27 +++-
 tests/tegra/meson.build     |  27 +++-
 tests/util/meson.build      |  35 ++++-
 tests/vbltest/meson.build   |  27 +++-
 vc4/meson.build             |  28 ++++-
 xf86atomic.h                |   4 +-
 34 files changed, 1637 insertions(+), 19 deletions(-)
 create mode 100644 amdgpu/meson.build
 create mode 100644 etnaviv/meson.build
 create mode 100644 exynos/meson.build
 create mode 100644 freedreno/meson.build
 create mode 100644 include/drm/meson.build
 create mode 100644 intel/meson.build
 create mode 100644 libkms/meson.build
 create mode 100644 man/meson.build
 create mode 100644 meson.build
 create mode 100644 meson_config.h.in
 create mode 100644 meson_options.txt
 create mode 100644 nouveau/meson.build
 create mode 100644 omap/meson.build
 create mode 100644 radeon/meson.build
 create mode 100644 tegra/meson.build
 create mode 100644 tests/amdgpu/meson.build
 create mode 100644 tests/etnaviv/meson.build
 create mode 100644 tests/exynos/meson.build
 create mode 100644 tests/kms/meson.build
 create mode 100644 tests/kmstest/meson.build
 create mode 100644 tests/meson.build
 create mode 100644 tests/modeprint/meson.build
 create mode 100644 tests/modetest/meson.build
 create mode 100644 tests/nouveau/meson.build
 create mode 100644 tests/proptest/meson.build
 create mode 100644 tests/radeon/meson.build
 create mode 100644 tests/tegra/meson.build
 create mode 100644 tests/util/meson.build
 create mode 100644 tests/vbltest/meson.build
 create mode 100644 vc4/meson.build
diff mbox

Patch

diff --git a/.editorconfig b/.editorconfig
index 893b7be..ffc477f 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -17,3 +17,7 @@  indent_style = tab
 [*.m4]
 indent_style = space
 indent_size = 2
+
+[meson.build]
+indent_style = space
+indent_size = 2
diff --git a/README b/README
index 26cab9d..b567d7e 100644
--- a/README
+++ b/README
@@ -15,27 +15,22 @@  with an older kernel.
 Compiling
 ---------
 
-libdrm  is  a  standard  autotools  package and  follows  the  normal
-configure, build  and install steps.   The first step is  to configure
-the package, which is done by running the configure shell script:
+libdrm is compiled using meson and ninja. The first step for building for a
+tar-ball or from git is to configure, and set a build directory:
 
-	./configure
+    meson build
 
-By default, libdrm  will install into the /usr/local/  prefix.  If you
-want  to  install   this  DRM  to  replace  your   system  copy,  pass
---prefix=/usr and  --exec-prefix=/ to configure.  If  you are building
-libdrm  from a  git checkout,  you first  need to  run  the autogen.sh
-script.  You can  pass any options to autogen.sh  that you would other
-wise  pass to configure,  or you  can just  re-run configure  with the
-options you need once autogen.sh finishes.
+By default, libdrm will install into the /usr/local/ prefix. If you
+want to install this DRM to replace your system copy, pass
+--prefix=/usr to meson, or -Dprefix=/usr to mesonconf.
 
 Next step is to build libdrm:
 
-	make
+	ninja -C build
 
 and once make finishes successfully, install the package using
 
-	make install
+	ninja install
 
 If you are installing into a system location, you will need to be root
 to perform the install step.
diff --git a/amdgpu/meson.build b/amdgpu/meson.build
new file mode 100644
index 0000000..71054df
--- /dev/null
+++ b/amdgpu/meson.build
@@ -0,0 +1,57 @@ 
+# Copyright © 2017 Intel Corporation
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+amdgpu_files = files(
+  'amdgpu_asic_id.h',
+  'amdgpu_bo.c',
+  'amdgpu_cs.c',
+  'amdgpu_device.c',
+  'amdgpu_gpu_info.c',
+  'amdgpu_internal.h',
+  'amdgpu_vamgr.c',
+  'util_hash.c',
+  'util_hash.h',
+  'util_hash_table.c',
+  'util_hash_table.h',
+)
+
+libdrm_amdgpu = shared_library(
+  'drm_amdgpu',
+  amdgpu_files,
+  c_args : global_warn_flags,
+  include_directories : [base_include, drm_include],
+  link_with : libdrm,
+  dependencies : pthreadstubs_dep,
+  version : '1.0.0',
+  install : true,
+)
+
+install_headers('amdgpu.h', subdir : 'libdrm')
+
+pkg.generate(
+  name : 'libdrm_amdgpu',
+  description : 'Userspace interface to kernel DRM services for amdgpu',
+  version : meson.project_version(),
+  subdirs : ['', 'libdrm'],
+  libraries : [libdrm_amdgpu],
+  requires_private : 'libdrm',
+)
+
+test('amdgpu-symbol-check', find_program('amdgpu-symbol-check'))
diff --git a/etnaviv/meson.build b/etnaviv/meson.build
new file mode 100644
index 0000000..c57152f
--- /dev/null
+++ b/etnaviv/meson.build
@@ -0,0 +1,56 @@ 
+# Copyright © 2017 Intel Corporation
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+etnaviv_files = files(
+  'etnaviv_device.c',
+  'etnaviv_gpu.c',
+  'etnaviv_bo.c',
+  'etnaviv_bo_cache.c',
+  'etnaviv_pipe.c',
+  'etnaviv_cmd_stream.c',
+  'etnaviv_drm.h',
+  'etnaviv_priv.h',
+)
+
+etnaviv_include = include_directories('.')
+
+libdrm_etnaviv = shared_library(
+  'drm_etnaviv',
+  etnaviv_files,
+  c_args : global_warn_flags,
+  include_directories : [base_include, drm_include],
+  link_with : libdrm,
+  dependencies : [pthreadstubs_dep, valgrind_dep],
+  version : '1.0.0',
+  install : true,
+)
+
+install_headers('etnaviv_drmif.h', subdir : 'libdrm')
+
+pkg.generate(
+  name : 'libdrm_etnaviv',
+  description : 'Userspace interface to etnaviv kernel DRM services',
+  version : meson.project_version(),
+  subdirs : ['', 'libdrm'],
+  libraries : [libdrm_etnaviv],
+  requires_private : 'libdrm',
+)
+
+test('etnaviv-symbol-check', find_program('etnaviv-symbol-check'))
diff --git a/exynos/meson.build b/exynos/meson.build
new file mode 100644
index 0000000..5adc12e
--- /dev/null
+++ b/exynos/meson.build
@@ -0,0 +1,52 @@ 
+# Copyright © 2017 Intel Corporation
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+exynos_files = files(
+  'exynos_drm.c',
+  'exynos_fimg2d.c',
+  'fimg2d_reg.h',
+)
+
+libdrm_exynos = shared_library(
+  'drm_exynos',
+  exynos_files,
+  c_args : global_warn_flags,
+  include_directories : [base_include, drm_include],
+  link_with : libdrm,
+  dependencies : [pthreadstubs_dep, valgrind_dep],
+  version : '1.0.0',
+  install : true,
+)
+
+exynos_include = include_directories('.')
+
+install_headers('exynos_drm.h', 'exynos_fimg2d.h', subdir : 'exynos')
+install_headers('exynos_drmif.h', subdir : 'libdrm')
+
+pkg.generate(
+  name : 'libdrm_exynos',
+  description : 'Userspace interface to exynos kernel DRM services',
+  version : '0.7',
+  subdirs : ['', 'libdrm', 'exynos'],
+  libraries : [libdrm_exynos],
+  requires_private : 'libdrm',
+)
+
+test('exynos-symbol-check', find_program('exynos-symbol-check'))
diff --git a/freedreno/meson.build b/freedreno/meson.build
new file mode 100644
index 0000000..ac02a75
--- /dev/null
+++ b/freedreno/meson.build
@@ -0,0 +1,72 @@ 
+# Copyright © 2017 Intel Corporation
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+freedreno_files = files(
+  'freedreno_device.c',
+  'freedreno_pipe.c',
+  'freedreno_priv.h',
+  'freedreno_ringbuffer.c',
+  'freedreno_bo.c',
+  'freedreno_bo_cache.c',
+  'msm/msm_bo.c',
+  'msm/msm_device.c',
+  'msm/msm_drm.h',
+  'msm/msm_pipe.c',
+  'msm/msm_priv.h',
+  'msm/msm_ringbuffer.c',
+)
+
+if get_option('freedreno-kgsl') == 'yes'
+  freedreno_kgsl_files = files(
+    'kgsl/kgsl_bo.c',
+    'kgsl/kgsl_device.c',
+    'kgsl/kgsl_drm.h',
+    'kgsl/kgsl_pipe.c',
+    'kgsl/kgsl_priv.h',
+    'kgsl/kgsl_ringbuffer.c',
+    'kgsl/msm_kgsl.h',
+  )
+else
+  freedreno_kgsl_files = []
+endif
+
+libdrm_freedreno = shared_library(
+  'drm_freedreno',
+  [freedreno_files, freedreno_kgsl_files],
+  c_args : global_warn_flags,
+  include_directories : [base_include, drm_include],
+  link_with : libdrm,
+  dependencies : pthreadstubs_dep,
+  version : '1.0.0',
+  install : true,
+)
+
+install_headers('freedreno_drmif.h', 'freedreno_ringbuffer.h', subdir : 'freedreno')
+
+pkg.generate(
+  name : 'libdrm_freedreno',
+  description : 'Userspace interface to freedreno kernel DRM services',
+  version : meson.project_version(),
+  subdirs : ['', 'libdrm', 'freedreno'],
+  libraries : [libdrm_freedreno],
+  requires_private : 'libdrm',
+)
+
+test('freedreno-symbol-check', find_program('freedreno-symbol-check'))
diff --git a/include/drm/meson.build b/include/drm/meson.build
new file mode 100644
index 0000000..feaf9c8
--- /dev/null
+++ b/include/drm/meson.build
@@ -0,0 +1,48 @@ 
+# Copyright © 2017 Intel Corporation
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+install_headers(
+  'drm.h',
+  'drm_fourcc.h',
+  'drm_mode.h',
+  'drm_sarea.h',
+  'i915_drm.h',
+  'mach64_drm.h',
+  'mga_drm.h',
+  'nouveau_drm.h',
+  'qxl_drm.h',
+  'r128_drm.h',
+  'radeon_drm.h',
+  'amdgpu_drm.h',
+  'savage_drm.h',
+  'sis_drm.h',
+  'tegra_drm.h',
+  'vc4_drm.h',
+  'via_drm.h',
+  'virtgpu_drm.h',
+  subdir : 'libdrm',
+)
+
+if conf_data.get('HAVE_VMWGFX')
+  install_headers(
+    'vmwgfx_drm.h',
+    subdir : 'libdrm',
+  )
+endif
diff --git a/intel/intel_bufmgr_gem.c b/intel/intel_bufmgr_gem.c
index e260f2d..2ba72bb 100644
--- a/intel/intel_bufmgr_gem.c
+++ b/intel/intel_bufmgr_gem.c
@@ -1,7 +1,7 @@ 
 /**************************************************************************
  *
- * Copyright © 2007 Red Hat Inc.
- * Copyright © 2007-2012 Intel Corporation
+ * Copyright © 2007 Red Hat Inc.
+ * Copyright © 2007-2012 Intel Corporation
  * Copyright 2006 Tungsten Graphics, Inc., Bismarck, ND., USA
  * All Rights Reserved.
  *
@@ -28,7 +28,7 @@ 
  *
  **************************************************************************/
 /*
- * Authors: Thomas Hellström <thomas-at-tungstengraphics-dot-com>
+ * Authors: Thomas Hellström <thomas-at-tungstengraphics-dot-com>
  *          Keith Whitwell <keithw-at-tungstengraphics-dot-com>
  *	    Eric Anholt <eric@anholt.net>
  *	    Dave Airlie <airlied@linux.ie>
@@ -1217,7 +1217,7 @@  drm_intel_gem_bo_free(drm_intel_bo *bo)
 static void
 drm_intel_gem_bo_mark_mmaps_incoherent(drm_intel_bo *bo)
 {
-#if HAVE_VALGRIND
+#ifdef HAVE_VALGRIND
 	drm_intel_bo_gem *bo_gem = (drm_intel_bo_gem *) bo;
 
 	if (bo_gem->mem_virtual)
diff --git a/intel/meson.build b/intel/meson.build
new file mode 100644
index 0000000..6f455bb
--- /dev/null
+++ b/intel/meson.build
@@ -0,0 +1,55 @@ 
+# Copyright © 2017 Intel Corporation
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+libdrm_intel_files = files(
+  'intel_bufmgr.c',
+  'intel_bufmgr_priv.h',
+  'intel_bufmgr_fake.c',
+  'intel_bufmgr_gem.c',
+  'intel_decode.c',
+  'intel_chipset.h',
+  'mm.c',
+  'mm.h',
+  'uthash.h',
+)
+
+libdrm_intel = shared_library(
+  'drm_intel',
+  libdrm_intel_files,
+  c_args : global_warn_flags,
+  include_directories : [base_include, drm_include],
+  link_with : libdrm,
+  dependencies : [pthreadstubs_dep, pciaccess_dep, valgrind_dep],
+  version : '1.0.0',
+  install : true,
+)
+
+install_headers('intel_bufmgr.h', 'intel_aub.h', 'intel_debug.h', subdir : 'libdrm')
+
+pkg.generate(
+  name : 'libdrm_intel',
+  description : 'Userspace interface to intel kernel DRM services',
+  version : meson.project_version(),
+  requires : 'libdrm',
+  subdirs : ['', 'libdrm'],
+  libraries : [libdrm_intel],
+)
+
+test('intel-symbol-check', find_program('intel-symbol-check'))
diff --git a/libkms/meson.build b/libkms/meson.build
new file mode 100644
index 0000000..55e726d
--- /dev/null
+++ b/libkms/meson.build
@@ -0,0 +1,71 @@ 
+# Copyright © 2017 Intel Corporation
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+libkms_files = files(
+  'internal.h',
+  'linux.c',
+  'dumb.c',
+  'api.c',
+)
+
+libkms_include = include_directories('.')
+
+if conf_data.get('HAVE_VMWGFX', false)
+  libkms_files += files('vmwgfx.c')
+endif
+
+if conf_data.get('HAVE_INTEL', false)
+  libkms_files += files('intel.c')
+endif
+
+if conf_data.get('HAVE_NOUVEAU', false)
+  libkms_files += files('nouveau.c')
+endif
+
+if conf_data.get('HAVE_RADEON', false)
+  libkms_files += files('radeon.c')
+endif
+
+if conf_data.get('HAVE_EXYNOS', false)
+  libkms_files += files('exynos.c')
+endif
+
+libkms = shared_library(
+  'kms',
+  libkms_files,
+  c_args : global_warn_flags,
+  include_directories : [base_include, drm_include, include_directories('../exynos')],
+  link_with : libdrm,
+  version : '1.0.0',
+  install : true,
+)
+
+install_headers('libkms.h', subdir : 'libkms')
+
+pkg.generate(
+  name : 'libkms',
+  description : 'Library that abstracts away the different mm interfaces for kernel drivers',
+  version : '1.0.0',
+  requires_private : 'libdrm',
+  subdirs : ['libkms'],
+  libraries : [libkms],
+)
+
+test('kms-symbol-check', find_program('kms-symbol-check'))
diff --git a/man/meson.build b/man/meson.build
new file mode 100644
index 0000000..5108456
--- /dev/null
+++ b/man/meson.build
@@ -0,0 +1,119 @@ 
+# Copyright © 2017 Intel Corporation
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+xsltproc = find_program('xsltproc')
+sed = find_program('sed')
+
+stylesheet_url = 'http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl'
+ret = run_command(xsltproc, '--nonet', stylesheet_url)
+if ret.returncode() != 0
+  error('Cannot build man pages without docbook-xml')
+endif
+
+xsltproc_args = [xsltproc, '-o', '@OUTPUT@',
+                 '--stringparam', 'man.authors.section.enabled', '0',
+                 '--stringparam', 'man.copyright.section.enabled', '0',
+                 '--stringparam', 'funcsynopsis.style', 'ansi',
+                 '--stringparam', 'man.output.quietly', '1',
+                 '--noout', stylesheet_url, '@INPUT@']
+
+# TODO: https://github.com/mesonbuild/meson/issues/1364
+# This issue is about creating reusable custom_target templates, which would
+# simplify the following custom_targets considerably.
+drm_avail_man = custom_target(
+  'drmAvailable.3',
+  input : 'drmAvailable.xml',
+  output : '@BASENAME@.3',
+  command : xsltproc_args,
+  install : true,
+  install_dir : 'usr/share/man/man3',
+)
+
+drm_handleevent_man = custom_target(
+  'drmHandleEvent.3',
+  input : 'drmHandleEvent.xml',
+  output : '@BASENAME@.3',
+  command : xsltproc_args,
+  install : true,
+  install_dir : 'usr/share/man/man3',
+)
+
+drm_modegetresources_man = custom_target(
+  'drmModeGetResources.3',
+  input : 'drmModeGetResources.xml',
+  output : '@BASENAME@.3',
+  command : xsltproc_args,
+  install : true,
+  install_dir : 'usr/share/man/man3',
+)
+
+drm_man = custom_target(
+  'drm.7',
+  input : 'drm.xml',
+  output : '@BASENAME@.7',
+  command : xsltproc_args,
+  install : true,
+  install_dir : 'usr/share/man/man7',
+)
+
+drm_kms_man = custom_target(
+  'kms.7',
+  input : 'drm-kms.xml',
+  output : '@BASENAME@.7',
+  command : xsltproc_args,
+  install : true,
+  install_dir : 'usr/share/man/man7',
+)
+
+drm_memory_man = custom_target(
+  'memory.7',
+  input : 'drm-memory.xml',
+  output : '@BASENAME@.7',
+  command : xsltproc_args,
+  install : true,
+  install_dir : 'usr/share/man/man7',
+)
+
+drm_mm = custom_target(
+  'mm.7',
+  input : 'drm-memory.xml',
+  output : 'drm-mm.7',
+  command : xsltproc_args,
+  install : true,
+  install_dir : 'usr/share/man/man7',
+)
+
+drm_gem = custom_target(
+  'gem.7',
+  input : 'drm-memory.xml',
+  output : 'drm-gem.7',
+  command : xsltproc_args,
+  install : true,
+  install_dir : 'usr/share/man/man7',
+)
+
+drm_gem = custom_target(
+  'ttm.7',
+  input : 'drm-memory.xml',
+  output : 'drm-ttm.7',
+  command : xsltproc_args,
+  install : true,
+  install_dir : 'usr/share/man/man7',
+)
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000..f8a75a0
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,288 @@ 
+# Copyright © 2017 Intel Corporation
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+project('libdrm', 'c', version : '2.4.76-dev', default_options : ['-std=c99'])
+
+pkg = import('pkgconfig')
+
+conf_data = configuration_data()
+
+global_warn_flags = []
+
+atomic_dep = []
+cunit_dep = []
+pciaccess_dep = []
+valgrind_dep = []
+pthreadstubs_dep = dependency('pthread-stubs')  # TODO: is this always required?
+cairo_dep = dependency('cairo', required : false)
+if cairo_dep.found()
+  conf_data.set('HAVE_CAIRO', true)
+endif
+thread_dep = dependency('threads')
+
+system = host_machine.system()
+if system.startswith('linux')
+  add_project_arguments('-D_GNU_SOURCE', language : 'c')
+endif
+
+cc = meson.get_compiler('c')
+
+# TODO: resolve whether we need -lrt
+cc.find_library('m')
+if cc.has_header('sys/sysctl.h')
+  conf_data.set('HAVE_SYS_SYSCTL_H', true)
+endif
+if cc.has_header('sys/select.h')
+  conf_data.set('HAVE_SYS_SELECT_H', true)
+endif
+if cc.has_header('alloca.h')
+  conf_data.set('HAVE_ALLOCA_H', true)
+endif
+if cc.has_function('major', prefix : '#include <sys/sysmacros.h>')
+  conf_data.set('MAJOR_IN_SYSMACROS', true)
+elif cc.has_function('major', prefix : '#include <sys/mkdev.h>')
+  conf_data.set('MAJOR_IN_MKDEV', true)
+endif
+if cc.has_function('open_memstream')
+  conf_data.set('HAVE_OPEN_MEMSTREAM', true)
+endif
+
+if cc.compiles('''int foo_hidden(void) __attribute__((visibility("hidden")));''')
+  conf_data.set('HAVE_ATTRIBUTE_VISIBILITY', true)
+endif
+
+# TODO: copy comment from configure.ac
+global_warn_flag_opts = [
+  '-Wall', '-Wextra', '-Wsign-compare',
+  '-Werror-implicit-function-declaration', '-Wpointer-arith',
+  '-Wwrite-strings', '-Wstrict-prototypes', '-Wmissing-prototypes',
+  '-Wmissing-format-attribute', '-Wnested-externs', '-Wpacked',
+  '-Wswitch-enum', '-Wmissing-format-attribute', '-Wstrict-aliasing=2',
+  '-Winit-self', '-Wdeclaration-after-statement', '-Wold-style-definition',
+  '-Wno-unused-parameter', '-Wno-attributes', '-Wno-long-long', '-Winline',
+  '-Wshadow', '-Wno-missing-field-initializers',
+]
+foreach f : global_warn_flag_opts
+  if cc.has_argument(f)
+    global_warn_flags += f
+  endif
+endforeach
+
+# Check for atomic intrinsics
+if cc.compiles('''
+	int atomic_add(int *i) { return __sync_add_and_fetch (i, 1); }
+	int atomic_cmpxchg(int *i, int j, int k) { return __sync_val_compare_and_swap (i, j, k); }
+    ''')
+  conf_data.set('HAVE_LIBDRM_ATOMIC_PRIMITIVES', true)
+elif (system.startswith('solaris') or system.startswith('netbsd')
+      and cc.has_function('atomic_cas_uint'))
+  if not cc.has_header('sys/atomic.h')
+    error('wat?')
+  endif
+else
+  atomic_dep = dependency('atomic_ops')
+  conf_data.set('HAVE_LIB_ATOMIC_OPS', true)
+endif
+
+if get_option('udev') == 'yes'
+  dependency('udev')
+  conf_data.set('UDEV', true)
+endif
+
+cpu = host_machine.cpu_family()
+if get_option('intel') != 'no'
+  if cpu == 'x86' or cpu == 'x86_64'
+    pciaccess_dep = dependency('pciaccess', version : '>=0.10')
+    conf_data.set('HAVE_INTEL', true)
+  endif
+endif
+if get_option('radeon') != 'no'
+  conf_data.set('HAVE_RADEON', true)
+endif
+if get_option('amdgpu') != 'no'
+  conf_data.set('HAVE_AMDGPU', true)
+  cunit_dep = dependency('cunit', version : '>=2.1', required : false)
+  if cunit_dep.found()
+    conf_data.set('HAVE_CUNIT', true)
+  endif
+endif
+if get_option('nouveau') != 'no'
+  conf_data.set('HAVE_NOUVEAU', true)
+  dl_lib = cc.find_library('dl')
+  if dl_lib.found()
+    dl_dep = declare_dependency(link_args : '-ldl')
+  else
+    error('nouveau tests require dlopen')
+  endif
+endif
+if get_option('freedreno') != 'no'
+  if cpu == 'arm'
+    conf_data.set('HAVE_FREEDRENO', true)
+    if get_option('freedreno-kgsl') == 'yes'
+      conf_data.set('HAVE_FREEDRENO_KGSL', true)
+    endif
+  endif
+endif
+if get_option('vc4') != 'no'
+  if cpu == 'arm'
+    conf_data.set('HAVE_VC4', true)
+  endif
+endif
+if get_option('vmwgfx') == 'yes'
+  conf_data.set('HAVE_VMWGFX', true)
+endif
+if get_option('omap-experimental-api') == 'yes'
+  if cpu == 'arm'
+    conf_data.set('HAVE_OMAP', true)
+  endif
+endif
+if get_option('exynos-experimental-api') == 'yes'
+  if cpu == 'arm'
+    conf_data.set('HAVE_EXYNOS', true)
+  endif
+endif
+if get_option('tegra-experimental-api') == 'yes'
+  if cpu == 'arm'
+    conf_data.set('HAVE_TEGRA', true)
+  endif
+endif
+if get_option('etnaviv-experimental-api') == 'yes'
+  if cpu == 'arm'
+    conf_data.set('HAVE_ETNAVIV', true)
+  endif
+endif
+
+if get_option('libkms') == 'auto'
+  if (system.startswith('linux') or
+      system.startswith('freebsd') or
+      system.startswith('dragonfly') or
+      (system.startswith('kfreebsd') and system.endswith('-gnu')))
+    conf_data.set('HAVE_LIBKMS', true)
+  elif get_option('libkms') == 'no'
+    conf_data.set('HAVE_LIBKMS', false)
+  endif
+elif get_option('libkms') == 'yes'
+  conf_data.set('HAVE_LIBKMS', true)
+else
+  conf_data.set('HAVE_LIBKMS', false)
+endif
+
+# TODO: https://github.com/mesonbuild/meson/issues/826
+# This only works with a dev build of meson
+if get_option('valgrind') != 'no'
+  valgrind_dep = dependency(
+    'valgrind',
+    headers_only : true,
+    required : get_option('valgrind') == 'yes'
+  )
+  if valgrind_dep.found()
+    conf_data.set('HAVE_VALGRIND', true)
+  endif
+endif
+
+config_h = configure_file(
+  input : 'meson_config.h.in',
+  output : 'config.h',
+  configuration : conf_data,
+)
+add_project_arguments('-DHAVE_CONFIG_H', language : 'c')
+
+libdrm_files = files(
+  'xf86drm.c',
+  'xf86drmHash.c',
+  'xf86drmHash.h',
+  'xf86drmRandom.c',
+  'xf86drmRandom.h',
+  'xf86drmSL.c',
+  'xf86drmMode.c',
+  'xf86atomic.h',
+  'libdrm_macros.h',
+  'libdrm_lists.h',
+  'util_double_list.h',
+  'util_math.h',
+)
+
+drm_include = include_directories('include/drm')
+base_include = include_directories('.')
+
+libdrm = shared_library(
+  'drm',
+  libdrm_files,
+  include_directories : [base_include, drm_include],
+  dependencies : valgrind_dep,
+  c_args : global_warn_flags,
+  link_args : '-lm',
+  version : '2.4.0',
+  install : true,
+)
+
+install_headers(
+  'libsync.h',
+  'xf86drm.h',
+  'xf86drmMode.h',
+)
+
+pkg.generate(
+  name : 'libdrm',
+  filebase : 'libdrm',
+  description : 'Userspace interface to kernel DRM services',
+  version : meson.project_version(),
+  libraries : [libdrm],
+  subdirs : ['', 'libdrm'],
+)
+
+subdir('include/drm')
+if conf_data.get('HAVE_LIBKMS', false)
+  subdir('libkms')
+endif
+if conf_data.get('HAVE_INTEL', false)
+  subdir('intel')
+endif
+if conf_data.get('HAVE_NOUVEAU', false)
+  subdir('nouveau')
+endif
+if conf_data.get('HAVE_RADEON', false)
+  subdir('radeon')
+endif
+if conf_data.get('HAVE_AMDGPU', false)
+  subdir('amdgpu')
+endif
+if conf_data.get('HAVE_OMAP', false)
+  subdir('omap')
+endif
+if conf_data.get('HAVE_EXYNOS', false)
+  subdir('exynos')
+endif
+if conf_data.get('HAVE_FREEDRENO', false)
+  subdir('freedreno')
+endif
+if conf_data.get('HAVE_TEGRA', false)
+  subdir('tegra')
+endif
+if conf_data.get('HAVE_VC4', false)
+  subdir('vc4')
+endif
+if conf_data.get('HAVE_ETNAVIV', false)
+  subdir('etnaviv')
+endif
+subdir('tests')
+if get_option('manpages')
+  subdir('man')
+endif
diff --git a/meson_config.h.in b/meson_config.h.in
new file mode 100644
index 0000000..a45723c
--- /dev/null
+++ b/meson_config.h.in
@@ -0,0 +1,24 @@ 
+#mesondefine HAVE_LIBDRM_ATOMIC_PRIMITIVES
+#mesondefine HAVE_LIB_ATOMIC_OPS
+#mesondefine HAVE_INTEL
+#mesondefine HAVE_RADEON
+#mesondefine HAVE_AMDGPU
+#mesondefine HAVE_NOUVEAU
+#mesondefine HAVE_FREEDRENO
+#mesondefine HAVE_FREEDRENO_KGSL
+#mesondefine HAVE_VC4
+#mesondefine HAVE_OMAP
+#mesondefine HAVE_EXYNOS
+#mesondefine HAVE_TEGRA
+#mesondefine HAVE_ETNAVIV
+#mesondefine HAVE_LIBKMS
+#mesondefine HAVE_SYS_SYSCTL_H
+#mesondefine HAVE_SYS_SELECT_H
+#mesondefine HAVE_VALGRIND
+#mesondefine HAVE_OPEN_MEMSTREAM
+#mesondefine HAVE_CAIRO
+#mesondefine UDEV
+#mesondefine HAVE_ATTRIBUTE_VISIBILITY
+#mesondefine HAVE_ALLOCA_H
+#mesondefine MAJOR_IN_SYSMACROS
+#mesondefine MAJOR_IN_MKDEV
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644
index 0000000..d1d7190
--- /dev/null
+++ b/meson_options.txt
@@ -0,0 +1,16 @@ 
+option('intel',                    type : 'combo', choices : ['auto', 'yes', 'no'], value : 'auto')
+option('radeon',                   type : 'combo', choices : ['auto', 'yes', 'no'], value : 'auto')
+option('amdgpu',                   type : 'combo', choices : ['auto', 'yes', 'no'], value : 'auto')
+option('nouveau',                  type : 'combo', choices : ['auto', 'yes', 'no'], value : 'auto')
+option('vmwgfx',                   type : 'combo', choices : ['yes',   'no',     ], value : 'yes')
+option('freedreno',                type : 'combo', choices : ['auto', 'yes', 'no'], value : 'auto')
+option('freedreno-kgsl',           type : 'combo', choices : ['yes',   'no',     ], value : 'no')
+option('vc4',                      type : 'combo', choices : ['auto', 'yes', 'no'], value : 'auto')
+option('omap-experimental-api',    type : 'combo', choices : ['auto', 'yes', 'no'], value : 'no')
+option('exynos-experimental-api',  type : 'combo', choices : ['auto', 'yes', 'no'], value : 'no')
+option('tegra-experimental-api',   type : 'combo', choices : ['auto', 'yes', 'no'], value : 'no')
+option('etnaviv-experimental-api', type : 'combo', choices : ['auto', 'yes', 'no'], value : 'no')
+option('libkms',                   type : 'combo', choices : ['auto', 'yes', 'no'], value : 'auto')
+option('valgrind',                 type : 'combo', choices : ['auto', 'yes', 'no'], value : 'no')
+option('udev',                     type : 'combo', choices : ['yes',   'no',     ], value : 'no')
+option('manpages',                 type : 'boolean', value : false)
diff --git a/nouveau/meson.build b/nouveau/meson.build
new file mode 100644
index 0000000..6101b3c
--- /dev/null
+++ b/nouveau/meson.build
@@ -0,0 +1,63 @@ 
+# Copyright © 2017 Intel Corporation
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+nouveau_files = files(
+  'nouveau.c',
+  'pushbuf.c',
+  'bufctx.c',
+  'abi16.c',
+  'private.h',
+)
+
+nouveau_include = include_directories('.')
+
+libdrm_nouveau = shared_library(
+  'drm_nouveau',
+  nouveau_files,
+  c_args : global_warn_flags,
+  include_directories : [base_include, drm_include],
+  link_with : libdrm,
+  dependencies : pthreadstubs_dep,
+  version : '2.0.0',
+  install : true,
+)
+
+install_headers('nouveau.h', subdir : 'libdrm/nouveau')
+install_headers(
+  'nvif/class.h',
+  'nvif/cl0080.h',
+  'nvif/cl9097.h',
+  'nvif/if0002.h',
+  'nvif/if0003.h',
+  'nvif/ioctl.h',
+  'nvif/unpack.h',
+  subdir : 'nouveau/nvif',
+)
+
+pkg.generate(
+  name : 'libdrm_nouveau',
+  description : 'Userspace interface to nouveau kernel DRM services',
+  version : meson.project_version(),
+  subdirs : ['', 'libdrm'],
+  libraries : [libdrm_nouveau],
+  requires_private : 'libdrm',
+)
+
+test('nouveau-symbol-check', find_program('nouveau-symbol-check'))
diff --git a/omap/meson.build b/omap/meson.build
new file mode 100644
index 0000000..83f3003
--- /dev/null
+++ b/omap/meson.build
@@ -0,0 +1,48 @@ 
+# Copyright © 2017 Intel Corporation
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+omap_files = files(
+  'omap_drm.c',
+)
+
+libdrm_omap = shared_library(
+  'drm_omap',
+  omap_files,
+  c_args : global_warn_flags,
+  include_directories : [base_include, drm_include],
+  link_with : libdrm,
+  dependencies : [pthreadstubs_dep, valgrind_dep],
+  version : '1.0.0',
+  install : true,
+)
+
+install_headers('omap_drm.h', subdir : 'omap')
+install_headers('omap_drmif.h', subdir : 'libdrm')
+
+pkg.generate(
+  name : 'libdrm_omap',
+  description : 'Userspace interface to omap kernel DRM services',
+  version : '0.6',
+  subdirs : ['', 'libdrm', 'omap'],
+  libraries : [libdrm_omap],
+  requires_private : 'libdrm',
+)
+
+test('omap-symbol-check', find_program('omap-symbol-check'))
diff --git a/radeon/meson.build b/radeon/meson.build
new file mode 100644
index 0000000..b1630fc
--- /dev/null
+++ b/radeon/meson.build
@@ -0,0 +1,62 @@ 
+# Copyright © 2017 Intel Corporation
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+radeon_files = files(
+  'radeon_bo_gem.c',
+  'radeon_cs_gem.c',
+  'radeon_cs_space.c',
+  'radeon_bo.c',
+  'radeon_cs.c',
+  'radeon_surface.c',
+)
+
+libdrm_radeon = shared_library(
+  'drm_radeon',
+  radeon_files,
+  c_args : global_warn_flags,
+  include_directories : [base_include, drm_include],
+  link_with : libdrm,
+  dependencies : pthreadstubs_dep,
+  version : '1.0.1',
+  install : true,
+)
+
+install_headers(
+  'radeon_bo.h',
+  'radeon_cs.h',
+  'radeon_surface.h',
+  'radeon_bo_gem.h',
+  'radeon_cs_gem.h',
+  'radeon_bo_int.h',
+  'radeon_cs_int.h',
+  'r600_pci_ids.h',
+  subdir : 'libdrm'
+)
+
+pkg.generate(
+  name : 'libdrm_radeon',
+  description : 'Userspace interface to kernel DRM services for radeon',
+  version : meson.project_version(),
+  subdirs : ['', 'libdrm'],
+  libraries : [libdrm_radeon],
+  requires_private : 'libdrm',
+)
+
+test('radeon-symbol-check', find_program('radeon-symbol-check'))
diff --git a/tegra/meson.build b/tegra/meson.build
new file mode 100644
index 0000000..4a90fc1
--- /dev/null
+++ b/tegra/meson.build
@@ -0,0 +1,50 @@ 
+# Copyright © 2017 Intel Corporation
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+tegra_files = files(
+  'private.h',
+  'tegra.c',
+)
+
+libdrm_tegra = shared_library(
+  'drm_tegra',
+  tegra_files,
+  c_args : global_warn_flags,
+  include_directories : [base_include, drm_include],
+  link_with : libdrm,
+  dependencies : [pthreadstubs_dep, valgrind_dep],
+  version : '1.0.0',
+  install : true,
+)
+
+tegra_include = include_directories('.')
+
+install_headers('tegra.h', subdir : 'libdrm')
+
+pkg.generate(
+  name : 'libdrm_tegra',
+  description : 'Userspace interface to Tegra kernel DRM services',
+  version : meson.project_version(),
+  subdirs : ['', 'libdrm'],
+  libraries : [libdrm_tegra],
+  requires_private : 'libdrm',
+)
+
+test('tegra-symbol-check', find_program('tegra-symbol-check'))
diff --git a/tests/amdgpu/meson.build b/tests/amdgpu/meson.build
new file mode 100644
index 0000000..86bd516
--- /dev/null
+++ b/tests/amdgpu/meson.build
@@ -0,0 +1,30 @@ 
+# Copyright © 2017 Intel Corporation
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+if conf_data.get('HAVE_CUNIT', false)
+  amdgpu_test = executable(
+    'amdgpu_test',
+    ['amdgpu_test.c', 'amdgpu_test.h', 'basic_tests.c', 'bo_tests.c',
+     'cs_tests.c', 'uvd_messages.h', 'vce_tests.c', 'vce_ib.h', 'frame.h'],
+    include_directories : [base_include, include_directories('../../amdgpu'), drm_include],
+    dependencies : cunit_dep,
+    link_with : [libdrm, libdrm_amdgpu],
+  )
+endif
diff --git a/tests/etnaviv/meson.build b/tests/etnaviv/meson.build
new file mode 100644
index 0000000..cb75c03
--- /dev/null
+++ b/tests/etnaviv/meson.build
@@ -0,0 +1,49 @@ 
+# Copyright © 2017 Intel Corporation
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+if conf_data.get('HAVE_LIBKMS', false)
+  test_etnaviv_2d = executable(
+    'etnaviv_2d_test',
+    ['cmdstream.xml.h', 'etnaviv_2d_test.c', 'state.xml.h', 'state_2d.xml.h',
+     'write_bmp.c', 'write_bmp.h'],
+    c_args : global_warn_flags,
+    include_directories : [base_include, drm_include, etnaviv_include],
+    link_with : [libdrm, libdrm_etnaviv],
+    dependencies : thread_dep
+  )
+endif
+
+test_etnaviv_cmd_stream = executable(
+  'etnaviv_cmd_stream_test',
+  'etnaviv_cmd_stream_test.c',
+  c_args : global_warn_flags,
+  include_directories : [base_include, drm_include, etnaviv_include],
+  link_with : [libdrm_etnaviv],
+  dependencies : thread_dep
+)
+
+test_etnaviv_bo_cache = executable(
+  'etnaviv_bo_cache_test',
+  'etnaviv_bo_cache_test.c',
+  c_args : global_warn_flags,
+  include_directories : [base_include, drm_include, etnaviv_include],
+  link_with : [libdrm, libdrm_etnaviv],
+  dependencies : thread_dep
+)
diff --git a/tests/exynos/meson.build b/tests/exynos/meson.build
new file mode 100644
index 0000000..b216e71
--- /dev/null
+++ b/tests/exynos/meson.build
@@ -0,0 +1,43 @@ 
+# Copyright © 2017 Intel Corporation
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+test_exynos_fimg2d_perf = executable(
+  'exynos_fimg2d_perf',
+  'exynos_fim2d_perf.c',
+  include_directories : [base_include, libkms_include, exynos_include, drm_include],
+  link_with : [libdrm, libdrm_exynos],
+)
+
+test_exynos_fimg2d_event = executable(
+  'exynos_fimg2d_event',
+  'exynos_fimg2d_event.c',
+  include_directories : [base_include, kms_include, exynos_include, drm_include],
+  link_with : [libdrm, libdrm_exynos],
+)
+
+if conf_data.get('HAVE_LIBKMS', false):
+  test_exynos_fimg2d_test = executable(
+    'exynos_fimg2d_test',
+    'exynos_fimg2d_test.c',
+    dependencies : test_util_dep,
+    include_directories : [base_include, kms_include, exynos_include, drm_include],
+    link_with : [libdrm, libdrm_exynos],
+  )
+endif
diff --git a/tests/kms/meson.build b/tests/kms/meson.build
new file mode 100644
index 0000000..430bdce
--- /dev/null
+++ b/tests/kms/meson.build
@@ -0,0 +1,46 @@ 
+# Copyright © 2017 Intel Corporation
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+kms_test_common_files = files(
+  'libkms-test.h',
+  'libkms-test-crtc.c',
+  'libkms-test-device.c',
+  'libkms-test-framebuffer.c',
+  'libkms-test-plane.c',
+  'libkms-test-screen.c',
+)
+
+test_kms_steal_crtc = executable(
+  'kms-steal-crtc',
+  [kms_test_common_files, 'kms-steal-crtc.c'],
+  c_args : global_warn_flags,
+  include_directories : drm_include,
+  dependencies : test_util_dep,
+  link_with : libdrm,
+)
+
+test_kms_universal_planes = executable(
+  'kms-universal-planes',
+  [kms_test_common_files, 'kms-universal-planes.c'],
+  c_args : global_warn_flags,
+  dependencies : cairo_dep,
+  include_directories : [base_include, test_include, drm_include],
+  link_with : libdrm,
+)
diff --git a/tests/kmstest/meson.build b/tests/kmstest/meson.build
new file mode 100644
index 0000000..e4cfa13
--- /dev/null
+++ b/tests/kmstest/meson.build
@@ -0,0 +1,28 @@ 
+# Copyright © 2017 Intel Corporation
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+kmstest = executable(
+  'kmstest',
+  'main.c',
+  include_directories : libkms_include,
+  dependencies : test_util_dep,
+  link_with : [libkms, libdrm],
+  c_args : global_warn_flags,
+)
diff --git a/tests/meson.build b/tests/meson.build
new file mode 100644
index 0000000..1989ae1
--- /dev/null
+++ b/tests/meson.build
@@ -0,0 +1,87 @@ 
+# Copyright © 2017 Intel Corporation
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+test_drmsl = executable(
+  'drmsl',
+  'drmsl.c',
+  c_args : global_warn_flags,
+  include_directories : [base_include, drm_include],
+  link_with : libdrm,
+)
+
+test_hash = executable(
+  'hash',
+  'hash.c',
+  c_args : global_warn_flags,
+  include_directories : [base_include, drm_include],
+  link_with : libdrm,
+)
+
+test_random = executable(
+  'random',
+  'random.c',
+  c_args : global_warn_flags,
+  include_directories : [base_include, drm_include],
+  link_with : libdrm,
+)
+
+test_drmdevice = executable(
+  'drmdevice',
+  'drmdevice.c',
+  c_args : global_warn_flags,
+  include_directories : [base_include, drm_include],
+  link_with : libdrm,
+)
+
+test('drmsl', test_drmsl)
+test('hash', test_hash)
+# XXX: This test never seems to finish
+#test('random', test_random)
+test('drmdevice', test_drmdevice)
+
+test_include = include_directories('.')
+
+subdir('util')
+subdir('kms')
+subdir('modeprint')
+subdir('proptest')
+subdir('modetest')
+subdir('vbltest')
+if conf_data.get('HAVE_LIBKMS', false)
+  subdir('kmstest')
+endif
+if conf_data.get('HAVE_RADEON', false)
+  subdir('radeon')
+endif
+if conf_data.get('HAVE_AMDGPU', false) and conf_data.get('HAVE_CUNIT', false)
+  subdir('amdgpu')
+endif
+if conf_data.get('have_exynos', false)
+  subdir('exynos')
+endif
+if conf_data.get('HAVE_TEGRA', false)
+  subdir('tegra')
+endif
+if conf_data.get('HAVE_ETNAVIV', false)
+  subdir('etnaviv')
+endif
+if conf_data.get('HAVE_NOUVEAU', false)
+  subdir('nouveau')
+endif
diff --git a/tests/modeprint/meson.build b/tests/modeprint/meson.build
new file mode 100644
index 0000000..ea8d0de
--- /dev/null
+++ b/tests/modeprint/meson.build
@@ -0,0 +1,27 @@ 
+# Copyright © 2017 Intel Corporation
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+test_modeprint = executable(
+  'modeprint',
+  'modeprint.c',
+  include_directories : [drm_include, test_include, base_include], 
+  link_with : libdrm,
+  c_args : global_warn_flags,
+)
diff --git a/tests/modetest/meson.build b/tests/modetest/meson.build
new file mode 100644
index 0000000..6579a2f
--- /dev/null
+++ b/tests/modetest/meson.build
@@ -0,0 +1,27 @@ 
+# Copyright © 2017 Intel Corporation
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+modetest = executable(
+  'modetest',
+  ['buffers.c', 'buffers.h', 'cursor.c', 'cursor.h', 'modetest.c'],
+  c_args : [global_warn_flags, '-Wno-pointer-arith'],
+  dependencies : [test_util_dep, thread_dep],
+  link_with : libdrm,
+)
diff --git a/tests/nouveau/meson.build b/tests/nouveau/meson.build
new file mode 100644
index 0000000..bd87222
--- /dev/null
+++ b/tests/nouveau/meson.build
@@ -0,0 +1,30 @@ 
+# Copyright © 2017 Intel Corporation
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+test_nouveau_threaded = executable(
+  'threaded',
+  'threaded.c',
+  dependencies : [thread_dep, dl_dep],
+  c_args : global_warn_flags,
+  include_directories : [base_include, drm_include, nouveau_include],
+  link_with : [libdrm_nouveau, libdrm],
+)
+
+test('nouveau-threaded', test_nouveau_threaded)
diff --git a/tests/proptest/meson.build b/tests/proptest/meson.build
new file mode 100644
index 0000000..9d20cb9
--- /dev/null
+++ b/tests/proptest/meson.build
@@ -0,0 +1,27 @@ 
+# Copyright © 2017 Intel Corporation
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+test_proptest = executable(
+  'proptest',
+  'proptest.c',
+  c_args : global_warn_flags,
+  dependencies : [test_util_dep],
+  link_with : libdrm,
+)
diff --git a/tests/radeon/meson.build b/tests/radeon/meson.build
new file mode 100644
index 0000000..8cc58cf
--- /dev/null
+++ b/tests/radeon/meson.build
@@ -0,0 +1,27 @@ 
+# Copyright © 2017 Intel Corporation
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+radeon_ttm = executable(
+  'radeon_ttm',
+  ['rbo.c', 'rbo.h', 'radeon_ttm.c'],
+  c_args : global_warn_flags,
+  include_directories : [base_include, drm_include],
+  link_with : libdrm,
+)
diff --git a/tests/tegra/meson.build b/tests/tegra/meson.build
new file mode 100644
index 0000000..dd3e15a
--- /dev/null
+++ b/tests/tegra/meson.build
@@ -0,0 +1,27 @@ 
+# Copyright © 2017 Intel Corporation
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+test_tegra_openclose = executable(
+  'openclose',
+  'openclose.c',
+  c_args : global_warn_flags,
+  include_directories : [base_include, tegra_include, drm_include],
+  link_with : [libdrm, libdrm_tegra],
+)
diff --git a/tests/util/meson.build b/tests/util/meson.build
new file mode 100644
index 0000000..0c12112
--- /dev/null
+++ b/tests/util/meson.build
@@ -0,0 +1,35 @@ 
+# Copyright © 2017 Intel Corporation
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+test_util_files = files(
+  'common.h',
+  'format.c',
+  'format.h',
+  'kms.c',
+  'kms.h',
+  'pattern.c',
+  'pattern.h',
+)
+
+test_util_dep = declare_dependency(
+  sources : test_util_files,
+  include_directories : [base_include, drm_include, test_include],
+  dependencies : cairo_dep,
+)
diff --git a/tests/vbltest/meson.build b/tests/vbltest/meson.build
new file mode 100644
index 0000000..b454b6d
--- /dev/null
+++ b/tests/vbltest/meson.build
@@ -0,0 +1,27 @@ 
+# Copyright © 2017 Intel Corporation
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+vbltest = executable(
+  'vbltest',
+  'vbltest.c',
+  c_args : global_warn_flags,
+  dependencies : test_util_dep,
+  link_with : libdrm,
+)
diff --git a/vc4/meson.build b/vc4/meson.build
new file mode 100644
index 0000000..a0d9e4f
--- /dev/null
+++ b/vc4/meson.build
@@ -0,0 +1,28 @@ 
+# Copyright © 2017 Intel Corporation
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+install_headers('vc4_packet.h', 'vc4_qpu_defines.h', subdir : 'libdrm')
+
+pkg.generate(
+  name : 'libdrm_vc4',
+  description : 'Userspace interface to vc4 kernel DRM services',
+  version : meson.project_version(),
+  requires_private : 'libdrm',
+)
diff --git a/xf86atomic.h b/xf86atomic.h
index 922b37d..57ccdfd 100644
--- a/xf86atomic.h
+++ b/xf86atomic.h
@@ -38,7 +38,7 @@ 
 #include "config.h"
 #endif
 
-#if HAVE_LIBDRM_ATOMIC_PRIMITIVES
+#ifdef HAVE_LIBDRM_ATOMIC_PRIMITIVES
 
 #define HAS_ATOMIC_OPS 1
 
@@ -57,7 +57,7 @@  typedef struct {
 
 #endif
 
-#if HAVE_LIB_ATOMIC_OPS
+#ifdef HAVE_LIB_ATOMIC_OPS
 #include <atomic_ops.h>
 
 #define HAS_ATOMIC_OPS 1