summaryrefslogtreecommitdiff
path: root/meson.build
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2017-10-22 18:40:24 +0300
committerChris Wilson <chris@chris-wilson.co.uk>2018-02-06 13:12:33 +0000
commit781fd07e5518b21b5d910e0c58108a517903fda3 (patch)
tree74d3f45ddbbbba880cd6a5397de505a4a13d8c76 /meson.build
parenta3a9e99b527936502a10aed7559799b2aa1e186e (diff)
meson: Add meson build system
Allow building the driver with meson. Could probably use plenty of cleanups, but at least it gives me a working driver. And I think I managed to make it build everything that autotools builds. Quite a few compiler warnings were suppressed as well. Might want to look at those at some point. Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Diffstat (limited to 'meson.build')
-rw-r--r--meson.build208
1 files changed, 208 insertions, 0 deletions
diff --git a/meson.build b/meson.build
new file mode 100644
index 00000000..227ca2eb
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,208 @@
+project('xf86-video-intel', 'c',
+ version : '2.99.917',
+ default_options: [
+ 'warning_level=2',
+ 'c_std=gnu99',
+ ],
+ license : 'MIT',
+ meson_version : '>0.40.0')
+
+config = configuration_data()
+
+version = meson.project_version().split('.')
+config.set('PACKAGE_VERSION_MAJOR', version[0])
+config.set('PACKAGE_VERSION_MINOR', version[1])
+config.set('PACKAGE_VERSION_PATCHLEVEL', version[2])
+
+config.set_quoted('LIBEXEC_PATH', join_paths(get_option('prefix'),
+ get_option('libexecdir')))
+
+cc = meson.get_compiler('c')
+
+xorg = dependency('xorg-server', version : '>= 1.6', required : true)
+pthreads = dependency('threads', required : true)
+pciaccess = dependency('pciaccess', version : '>= 0.10', required : true)
+
+x11 = dependency('x11', required : false)
+xfixes = dependency('xfixes', required : false)
+png = dependency('libpng', required : false)
+
+if not cc.has_function('clock_gettime', args : '-lrt')
+ error('clock_gettime() missing')
+endif
+
+if cc.has_function('getline')
+ config.set('HAVE_GETLINE', 1)
+endif
+
+if cc.has_function('strndup')
+ config.set('HAVE_STRNDUP', 1)
+endif
+
+if cc.has_function('strcasecmp')
+ config.set('HAVE_STRCASECMP', 1)
+endif
+
+dependency('xproto', required : true)
+dependency('fontsproto', required : true)
+dependency('damageproto', required : true)
+
+if cc.has_header_symbol('xorg-server.h', 'RANDR',
+ dependencies : xorg)
+ dependency('randrproto', required : true)
+endif
+if cc.has_header_symbol('xorg-server.h', 'RENDER',
+ dependencies : xorg)
+ dependency('renderproto', required : true)
+endif
+if cc.has_header_symbol('xorg-server.h', 'DPMSExtension',
+ dependencies : xorg)
+ dependency('xextproto', required : true)
+endif
+
+with_tools = get_option('tools')
+
+config.set('USE_GIT_DESCRIBE', 1)
+config.set('BUILDER_DESCRIPTION', 1)
+
+atomic_primitives = 'none'
+
+atomic_primitives_code = '''
+int atomic_add(int i) {
+ return __sync_fetch_and_add (&i, 1);
+}
+int atomic_cmpxchg(int i, int j, int k) {
+ return __sync_val_compare_and_swap (&i, j, k);
+}
+int main(void) {
+ return 0;
+}'''
+if cc.links(atomic_primitives_code, name : 'atomic primitives')
+ atomic_primitives = 'intel'
+ config.set('HAVE_ATOMIC_PRIMITIVES', 1)
+endif
+
+if atomic_primitives == 'none' and cc.has_header('atomic_ops.h')
+ atomic_primitives = 'libatomic-ops'
+ config.set('HAVE_LIB_ATOMIC_OPS', 1)
+endif
+
+if atomic_primitives == 'none'
+ error('xf86-video-intel depends upon atomic operations, which were not found for your compiler/cpu. Try compiling with -march=native, or install the libatomics-op-dev package.')
+endif
+
+libudev = dependency('libudev', required : false)
+if libudev.found()
+ config.set('HAVE_UDEV', 1)
+endif
+
+cpuid_code = '''
+#include <cpuid.h>
+#include <stddef.h>
+int main(void) {
+ int eax, ebx, ecx, edx;
+ if (__get_cpuid_max(0, NULL) < 4)
+ return 0;
+ __cpuid_count(4, 0, eax, ebx, ecx, edx);
+ return 0;
+}'''
+if cc.links(cpuid_code, name : '__cpuid()')
+ config.set('HAVE_CPUID_H', 1)
+endif
+
+has_shm = (cc.has_header('sys/ipc.h') and
+ cc.has_header('X11/extensions/XShm.h') and
+ cc.has_header('X11/extensions/shmproto.h') and
+ cc.has_header('X11/extensions/shmstr.h'))
+if has_shm
+ config.set('HAVE_MIT_SHM', 1)
+ config.set('HAVE_X11_EXTENSIONS_SHMPROTO_H', 1)
+ config.set('HAVE_X11_EXTENSIONS_SHMSTR_H', 1)
+endif
+
+if cc.has_header('X11/extensions/Xinerama.h')
+ config.set('HAVE_X11_EXTENSIONS_XINERAMA_H', 1)
+endif
+
+if cc.has_header('X11/extensions/dpmsconst.h')
+ config.set('HAVE_X11_EXTENSIONS_DPMSCONST_H', 1)
+endif
+
+pixman = dependency('pixman-1', version : '>= 0.16.0', required : true)
+
+if pixman.version() >= '0.24.0'
+ config.set('HAS_PIXMAN_TRIANGLES', 1)
+endif
+if pixman.version() >= '0.27.1'
+ config.set('HAS_PIXMAN_GLYPHS', 1)
+endif
+
+with_kms = get_option('kms')
+if with_kms
+ config.set('KMS', 1)
+endif
+
+with_ums = get_option('ums')
+if with_ums
+ has_ums = cc.has_header('vgaHW.h',
+ dependencies : xorg)
+
+ # Currently 'required' doesn't work for cc.has_header() & co.
+ if not has_ums
+ error('UMS dependencies not met')
+ endif
+
+ config.set('UMS', 1)
+endif
+
+with_xvmc = get_option('xvmc')
+if with_xvmc
+ dependency('xvmc', required : true)
+ dependency('dri2proto', required : true)
+ dependency('x11', required : true)
+ dependency('x11-xcb', required : true)
+ dependency('xcb-dri2', required : true)
+ dependency('xcb-aux', required : true)
+ dependency('libdrm_intel', required : true)
+
+ config.set('ENABLE_XVMC', 1)
+endif
+
+with_valgrind = get_option('valgrind')
+if with_valgrind
+ message('Checking Valgrind support')
+ valgrind = dependency('valgrind', required : true)
+ config.set('HAVE_VALGRIND', 1)
+endif
+
+inc = include_directories([ '.', 'src', 'xvmc', 'src/render_program', ])
+
+add_project_arguments('-include', 'config.h', language : 'c')
+
+man_config = configuration_data()
+man_config.set('appmansuffix', '1')
+man_config.set('filemansuffix', '5')
+man_config.set('drivermansuffix', '4')
+man_config.set('miscmansuffix', '7')
+man_config.set('xservername',
+ cc.get_define('__XSERVERNAME__',
+ prefix : '#include <xorg-server.h>',
+ dependencies : xorg))
+man_config.set('xconfigfile',
+ cc.get_define('__XCONFIGFILE____',
+ prefix : '#include <xorg-server.h>',
+ dependencies : xorg))
+man_config.set('vendorversion', '"@0@ @1@" "@2@"'.format(meson.project_name(),
+ meson.project_version(),
+ 'X Version 11'))
+
+subdir('src')
+subdir('tools')
+
+if with_xvmc
+ subdir('xvmc')
+endif
+
+subdir('man')
+
+configure_file(output: 'config.h', install: false, configuration: config)