diff options
author | Petri Latvala <petri.latvala@intel.com> | 2018-06-21 14:06:25 +0300 |
---|---|---|
committer | Arkadiusz Hiler <arkadiusz.hiler@intel.com> | 2018-06-25 10:09:49 +0300 |
commit | 0e98bf69f146eb72fe3a7c3b19a049b5786f0ca3 (patch) | |
tree | 2591f985145975a7da5f521ff077e0c69571ea8d /meson.build | |
parent | 9bbfbb1ce314578f18efe73b2cd74e877eb999fb (diff) |
meson: Add options to control optional parts
Distributions want explicit control over optional parts so they can
state runtime dependencies before building. Let's restore the
functionality autotools used to provide.
Where possible, the selection is done by choosing whether to build a
particular item and the option name is build_$item. Example:
build_overlay. Where not possible, the option name is
with_$item. Example: with_valgrind.
Array options require a bump of required meson version to 0.44. Debian
stable has meson 0.37 which is already too old, stable-backports has
0.45, CI uses 0.45. Mesa's meson requirement is 0.44.1, for a
perspective.
Note, the old hack for not building docs when cross-compiling is
gone, as doc building can be explicitly controlled now.
v2: glib not optional
v3: bump meson version to 0.44
Signed-off-by: Petri Latvala <petri.latvala@intel.com>
Cc: Matt Turner <mattst88@gmail.com>
Cc: Daniel Vetter <daniel@ffwll.ch>
Cc: Eric Anholt <eric@anholt.net>
Cc: Arkadiusz Hiler <arkadiusz.hiler@intel.com>
Signed-off-by: Arkadiusz Hiler <arkadiusz.hiler@intel.com>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'meson.build')
-rw-r--r-- | meson.build | 144 |
1 files changed, 123 insertions, 21 deletions
diff --git a/meson.build b/meson.build index 98216fc4..4d15d623 100644 --- a/meson.build +++ b/meson.build @@ -5,7 +5,7 @@ project('igt-gpu-tools', 'c', 'c_std=gnu99', ], license : 'MIT', - meson_version : '>0.40.0') + meson_version : '>0.44.0') cc = meson.get_compiler('c') @@ -26,36 +26,118 @@ foreach cc_arg : cc_args endif endforeach +_build_overlay = false +_overlay_required = false +_build_man = false +_man_required = false +_build_audio = false +_audio_required = false +_build_chamelium = false +_chamelium_required = false +_build_docs = false +_docs_required = false +_build_tests = false +_tests_required = false + +build_overlay = get_option('build_overlay') +overlay_backends = get_option('overlay_backends') +build_man = get_option('build_man') +with_valgrind = get_option('with_valgrind') +build_audio = get_option('build_audio') +build_chamelium = get_option('build_chamelium') +build_docs = get_option('build_docs') +build_tests = get_option('build_tests') +with_libdrm = get_option('with_libdrm') + +_build_overlay = build_overlay != 'false' +_overlay_required = build_overlay == 'true' +_build_man = build_man != 'false' +_man_required = build_man == 'true' +_build_audio = build_audio != 'false' +_audio_required = build_audio == 'true' +_build_chamelium = build_chamelium != 'false' +_chamelium_required = build_chamelium == 'true' +_build_docs = build_docs != 'false' +_docs_required = build_docs == 'true' +_build_tests = build_tests != 'false' +_tests_required = build_tests == 'true' + +build_info = [] + inc = include_directories('include/drm-uapi', 'lib', '.') inc_for_gtkdoc = include_directories('lib') config = configuration_data() +null_dep = dependency('', required : false) + +libdrm_info = [] +libdrm_intel = null_dep +libdrm_nouveau = null_dep +libdrm_amdgpu = null_dep + libdrm_version = '>=2.4.82' libdrm = dependency('libdrm', version : libdrm_version) -libdrm_intel = dependency('libdrm_intel', version : libdrm_version, required : false) -libdrm_nouveau = dependency('libdrm_nouveau', version : libdrm_version, required : false) -libdrm_amdgpu = dependency('libdrm_amdgpu', version : libdrm_version, required : false) +if with_libdrm.contains('auto') or with_libdrm.contains('intel') + libdrm_intel = dependency('libdrm_intel', version : libdrm_version, required : with_libdrm.contains('intel')) + libdrm_info += 'intel' +endif +if with_libdrm.contains('auto') or with_libdrm.contains('nouveau') + libdrm_nouveau = dependency('libdrm_nouveau', version : libdrm_version, required : with_libdrm.contains('nouveau')) + libdrm_info += 'nouveau' +endif +if with_libdrm.contains('auto') or with_libdrm.contains('amdgpu') + libdrm_amdgpu = dependency('libdrm_amdgpu', version : libdrm_version, required : with_libdrm.contains('amdgpu')) + libdrm_info += 'amdgpu' +endif + +build_info += 'With libdrm: ' + ','.join(libdrm_info) pciaccess = dependency('pciaccess', version : '>=0.10') libkmod = dependency('libkmod') libprocps = dependency('libprocps', required : true) libunwind = dependency('libunwind', required : true) -valgrind = dependency('valgrind', required : false) -if valgrind.found() - config.set('HAVE_VALGRIND', 1) +valgrind = null_dep +valgrindinfo = 'No' +if with_valgrind != 'false' + valgrind = dependency('valgrind', required : with_valgrind == 'true') + if valgrind.found() + config.set('HAVE_VALGRIND', 1) + valgrindinfo = 'Yes' + endif endif +build_info += 'Valgrind annotations: ' + valgrindinfo cairo = dependency('cairo', version : '>1.12.0', required : true) libudev = dependency('libudev', required : true) glib = dependency('glib-2.0', required : true) -gsl = dependency('gsl', required : false) -alsa = dependency('alsa', required : false) +gsl = null_dep +alsa = null_dep +pixman = null_dep +if _build_audio or _build_chamelium + gsl = dependency('gsl', required : _audio_required or _chamelium_required) +endif +if _build_audio + alsa = dependency('alsa', required : _audio_required) +endif +if _build_chamelium + pixman = dependency('pixman-1', required : _chamelium_required) +endif + +audioinfo = 'No' +if _build_audio and alsa.found() and gsl.found() + audioinfo = 'Yes' +else + if _audio_required + error('Cannot build audio test due to missing dependencies') + endif + _build_audio = false +endif +build_info += 'Build audio test: ' + audioinfo -pixman = dependency('pixman-1', required : false) xmlrpc = dependency('xmlrpc', required : false) xmlrpc_util = dependency('xmlrpc_util', required : false) xmlrpc_client = dependency('xmlrpc_client', required : false) @@ -73,13 +155,17 @@ if not xmlrpc.found() and xmlrpc_cmd.found() endif endif -if pixman.found() and gsl.found() and xmlrpc.found() and xmlrpc_util.found() and xmlrpc_client.found() +chamelium = null_dep +chameliuminfo = 'No' +if _build_chamelium and pixman.found() and gsl.found() and xmlrpc.found() and xmlrpc_util.found() and xmlrpc_client.found() chamelium = declare_dependency(dependencies : [ pixman, xmlrpc, - xmlrpc_util, xmlrpc_client]) + xmlrpc_util, xmlrpc_client]) config.set('HAVE_CHAMELIUM', 1) -else - chamelium = dependency('', required: false) + chameliuminfo = 'Yes' +elif _chamelium_required + error('Cannot build chamelium test due to missing dependencies') endif +build_info += 'Build Chamelium test: ' + chameliuminfo pthreads = dependency('threads') math = cc.find_library('m') @@ -130,17 +216,33 @@ mandir = get_option('mandir') pkgconfigdir = join_paths(libdir, 'pkgconfig') subdir('lib') -subdir('tests') +if _build_tests + subdir('tests') + build_info += 'Build tests: Yes' +else + build_info += 'Build tests: No' +endif subdir('benchmarks') subdir('tools') if libdrm_intel.found() subdir('assembler') - if ['x86', 'x86_64'].contains(host_machine.cpu_family()) - subdir('overlay') - endif endif +subdir('overlay') subdir('man') -# has_exe_wrapper() is undefined if building natively -if not meson.is_cross_build() or not meson.has_exe_wrapper() - subdir('docs') + +docs_info = 'No' +if _build_docs + if _build_tests + subdir('docs') + docs_info = 'Yes' + elif _docs_required + error('Documentation requires building tests') + endif endif +build_info += 'Build documentation: ' + docs_info + +message('Build options') +message('=============') +foreach str : build_info + message(str) +endforeach |