From bb92421bdb3fff437e6210cf4792f96e53dff1d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Manuel=20J=C3=A1quez=20Leal?= Date: Fri, 3 Nov 2017 15:47:26 +0100 Subject: Add meson support --- meson.build | 102 ++++++++++++++++++++++ meson_options.txt | 5 ++ src/meson.build | 253 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ test/meson.build | 86 +++++++++++++++++++ 4 files changed, 446 insertions(+) create mode 100644 meson.build create mode 100644 meson_options.txt create mode 100644 src/meson.build create mode 100644 test/meson.build diff --git a/meson.build b/meson.build new file mode 100644 index 00000000..d62e2393 --- /dev/null +++ b/meson.build @@ -0,0 +1,102 @@ +project( + 'intel-vaapi-driver', 'c', + version : '2.1.1.1', + meson_version : '>= 0.43.0', + default_options : [ 'warning_level=1', + 'buildtype=debugoptimized' ]) + +version_arr = meson.project_version().split('.') +intel_vaapi_driver_major_version = version_arr[0] +intel_vaapi_driver_minor_version = version_arr[1] +intel_vaapi_driver_micro_version = version_arr[2] +intel_vaapi_driver_version = '@0@.@1@.@2@'.format(intel_vaapi_driver_major_version, + intel_vaapi_driver_minor_version, + intel_vaapi_driver_micro_version) +if version_arr.length() == 4 + intel_vaapi_driver_pre_version = version_arr[3] + intel_vaapi_driver_version = '@0@.pre@1@'.format(intel_vaapi_driver_version, + intel_vaapi_driver_pre_version) +endif + +cc = meson.get_compiler('c') +dl_dep = cc.find_library('dl') +mathlib_dep = cc.find_library('m', required : false) + +git = find_program('git', required : false) + +thread_dep = dependency('threads') +libdrm_dep = dependency('libdrm', version : '>= 2.4.52') +libdrm_intel_dep = dependency('libdrm_intel') + +libva_version = '>= 1.1.0' +libva_dep = dependency('libva', version : libva_version, + fallback : [ 'libva', 'libva_dep' ]) +if get_option ('enable_tests') + libva_drm_dep = dependency('libva-drm', version : libva_version, + fallback : [ 'libva', 'libva_drm_dep' ]) +endif + +va_api_major_version = '0' +va_api_minor_version = '33' +driverdir = get_option('driverdir') +if libva_dep.type_name() == 'pkgconfig' + if driverdir == '' + driverdir = libva_dep.get_pkgconfig_variable('driverdir') + endif + va_api_version_array = libva_dep.version().split('.') + va_api_major_version = va_api_version_array[0] + va_api_minor_version = va_api_version_array[1] +else + libva = subproject('libva') + if driverdir == '' + driverdir = libva.get_variable('driverdir') + endif + va_api_major_version = libva.get_variable('va_api_major_version') + va_api_minor_version = libva.get_variable('va_api_minor_version') +endif + +if driverdir == '' + driverdir = '@0@/@1@/@2@'.format(get_option('prefix'), get_option('libdir'), 'dri') +endif + +va_driver_init_func = '__vaDriverInit_@0@_@1@'.format(va_api_major_version, + va_api_minor_version) + +WITH_X11 = false +if get_option('with_x11') != 'no' + libva_x11_dep = dependency( + 'libva-x11', + version : libva_version, + required : get_option('with_x11') == 'yes') + + HAVE_X11 = libva_x11_dep.found() +endif + +WITH_WAYLAND = false +if get_option('with_wayland') != 'no' + wayland_client_dep = dependency( + 'wayland-client', + version : '>= 1.11.0', + required : get_option('with_wayland') == 'yes') + + if wayland_client_dep.found() + prefix = wayland_client_dep.get_pkgconfig_variable('prefix') + wl_scanner = find_program( + 'wayland-scanner', + join_paths(prefix, '/bin/wayland-scanner')) + endif + + libva_wayland_dep = dependency( + 'libva-wayland', + version : libva_version, + required : get_option('with_wayland') == 'yes') + + WITH_WAYLAND = wl_scanner.found() and libva_wayland_dep.found() +endif + +subdir('src') + +if get_option('enable_tests') + srcdir = include_directories('src') + subdir('test') +endif diff --git a/meson_options.txt b/meson_options.txt new file mode 100644 index 00000000..ec07a066 --- /dev/null +++ b/meson_options.txt @@ -0,0 +1,5 @@ +option('driverdir', type : 'string', description : 'drivers path') +option('with_x11', type : 'combo', choices : ['yes', 'no', 'auto'], value : 'auto') +option('with_wayland', type : 'combo', choices : ['yes', 'no', 'auto'], value : 'auto') +option('enable_hybrid_codec', type : 'boolean', value : false) +option('enable_tests', type : 'boolean', value : false) diff --git a/src/meson.build b/src/meson.build new file mode 100644 index 00000000..1583c8c6 --- /dev/null +++ b/src/meson.build @@ -0,0 +1,253 @@ +config_cfg = configuration_data() +config_cfg.set('VERSION', intel_vaapi_driver_version) +config_cfg.set('VA_DRIVER_INIT_FUNC', va_driver_init_func) +config_cfg.set('INTEL_DRIVER_MAJOR_VERSION', intel_vaapi_driver_major_version) +config_cfg.set('INTEL_DRIVER_MINOR_VERSION', intel_vaapi_driver_minor_version) +config_cfg.set('INTEL_DRIVER_MICRO_VERSION', intel_vaapi_driver_micro_version) +config_cfg.set('INTEL_DRIVER_PRE_VERSION', intel_vaapi_driver_pre_version) +config_cfg.set10('HAVE_HYBRID_CODEC', get_option('enable_hybrid_codec')) +if WITH_X11 + config_cfg.set10('HAVE_VA_X11', 1) +endif +if WITH_WAYLAND + config_cfg.set10('HAVE_VA_WAYLAND', 1) +endif +if cc.has_function('log2f') + config_cfg.set('HAVE_LOG2F', 1) +endif + +config_file = configure_file( + output : 'config.h', + configuration : config_cfg) + +if git.found() + git_version = run_command( + git, '--git-dir', join_paths(meson.source_root(), '.git'), + 'describe', '--tags') + intel_driver_git_version = git_version.stdout().strip() +else + intel_driver_git_version = intel_vaapi_driver_version +endif + +version_cfg = configuration_data() +version_cfg.set('INTEL_DRIVER_GIT_VERSION', intel_driver_git_version) + +version_file = configure_file( + input : 'intel_version.h.in', + output : 'intel_version.h', + configuration : version_cfg) + +sources = [ + 'dso_utils.c', + 'gen6_mfc.c', + 'gen6_mfc_common.c', + 'gen6_mfd.c', + 'gen6_vme.c', + 'gen7_vme.c', + 'gen7_mfc.c', + 'gen7_mfd.c', + 'gen75_mfd.c', + 'gen75_mfc.c', + 'gen8_encoder_vp8.c', + 'gen8_mfc.c', + 'gen8_mfd.c', + 'gen8_vme.c', + 'gen9_encoder_vp8.c', + 'gen9_vme.c', + 'gen9_mfc.c', + 'gen9_mfc_hevc.c', + 'gen9_mfd.c', + 'gen9_vdenc.c', + 'gen75_picture_process.c', + 'gen75_vme.c', + 'gen75_vpp_gpe.c', + 'gen75_vpp_vebox.c', + 'gen9_post_processing.c', + 'i965_avc_bsd.c', + 'i965_avc_hw_scoreboard.c', + 'i965_avc_ildb.c', + 'i965_decoder_utils.c', + 'i965_device_info.c', + 'i965_drv_video.c', + 'i965_encoder.c', + 'i965_encoder_utils.c', + 'i965_encoder_vp8.c', + 'i965_media.c', + 'i965_media_h264.c', + 'i965_media_mpeg2.c', + 'i965_gpe_utils.c', + 'i965_post_processing.c', + 'i965_yuv_coefs.c', + 'gen8_post_processing.c', + 'i965_render.c', + 'i965_vpp_avs.c', + 'gen8_render.c', + 'gen9_render.c', + 'intel_batchbuffer.c', + 'intel_batchbuffer_dump.c', + 'intel_driver.c', + 'intel_memman.c', + 'object_heap.c', + 'intel_media_common.c', + 'vp8_probs.c', + 'vp9_probs.c', + 'vpx_quant.c', + 'gen9_vp9_encoder_kernels.c', + 'gen9_vp9_const_def.c', + 'gen9_vp9_encoder.c', + 'intel_common_vpp_internal.c', + 'i965_encoder_const_def.c', + 'i965_avc_const_def.c', + 'i965_avc_encoder_kernels.c', + 'i965_avc_encoder_common.c', + 'i965_avc_encoder.c', + 'gen9_hevc_enc_kernels_binary.c', + 'gen9_hevc_encoder.c', + 'gen9_hevc_enc_utils.c', + 'gen10_encoder_vp8.c', + 'gen10_hcp_common.c', + 'gen10_hevc_enc_kernels_binary.c', + 'gen10_hevc_enc_common.c', + 'gen10_hevc_encoder.c', + 'gen10_huc_common.c', + 'gen10_vdenc_common.c', + 'gen10_vdenc_vp9.c', +] + +headers = [ + 'dso_utils.h', + 'gen6_mfc.h', + 'gen6_mfd.h', + 'gen6_vme.h', + 'gen7_mfd.h', + 'gen75_picture_process.h', + 'gen75_vpp_gpe.h', + 'gen75_vpp_vebox.h', + 'gen8_post_processing.h', + 'gen9_mfd.h', + 'gen9_mfc.h', + 'gen9_vdenc.h', + 'i965_avc_bsd.h', + 'i965_avc_hw_scoreboard.h', + 'i965_avc_ildb.h', + 'i965_decoder.h', + 'i965_decoder_utils.h', + 'i965_defines.h', + 'i965_drv_video.h', + 'i965_encoder.h', + 'i965_encoder_utils.h', + 'i965_encoder_vp8.h', + 'i965_media.h', + 'i965_media_h264.h', + 'i965_media_mpeg2.h', + 'i965_mutext.h', + 'i965_gpe_utils.h', + 'i965_pciids.h', + 'i965_post_processing.h', + 'i965_render.h', + 'i965_structs.h', + 'i965_vpp_avs.h', + 'i965_yuv_coefs.h', + 'intel_batchbuffer.h', + 'intel_batchbuffer_dump.h', + 'intel_compiler.h', + 'intel_driver.h', + 'intel_media.h', + 'intel_memman.h', + 'object_heap.h', + 'vp8_probs.h', + 'vp9_probs.h', + 'vpx_quant.h', + 'sysdeps.h', + 'va_backend_compat.h', + 'i965_fourcc.h', + 'gen9_vp9_encoder.h', + 'gen9_vp9_encapi.h', + 'gen9_vp9_const_def.h', + 'gen9_vp9_encoder_kernels.h', + 'intel_gen_vppapi.h', + 'intel_common_vpp_internal.h', + 'i965_encoder_common.h', + 'i965_encoder_api.h', + 'i965_avc_const_def.h', + 'i965_avc_encoder_kernels.h', + 'i965_avc_encoder.h', + 'i965_avc_encoder_common.h', + 'gen9_hevc_enc_const_def.h', + 'gen9_hevc_enc_kernels.h', + 'gen9_hevc_enc_kernels_binary.h', + 'gen9_hevc_enc_utils.h', + 'gen9_hevc_encoder.h', + 'gen10_hcp_common.h', + 'gen10_hevc_enc_kernels_binary.h', + 'gen10_hevc_enc_common.h', + 'gen10_hevc_encoder.h', + 'gen10_hevc_enc_const_def.h', + 'gen10_huc_common.h', + 'gen10_vdenc_common.h', + 'gen10_vdenc_vp9.h', +] + +if WITH_X11 + sources += 'i965_output_dri.c' + headers += 'i965_output_dri.h' +endif + +if WITH_WAYLAND + protocol_header = custom_target( + 'wayland-drm-client-protocol_h', + output : 'wayland-drm-client-protocol.h', + input : 'wayland-drm.xml', + command : [ wl_scanner, 'client-header', '@INPUT@', '@OUTPUT@' ]) + + sources += 'i965_output_wayland.c' + headers += [ 'i965_output_wayland.h', + protocol_header ] +endif + +cflags = [ + '-DVA_DRIVERS_PATH="' + driverdir + '"', + '-DHAVE_CONFIG_H' +] + +if thread_dep.found() + cflags += [ '-DPTHREADS' ] +endif + +shared_deps = [ + dl_dep, + mathlib_dep, + thread_dep, + libdrm_dep, + libdrm_intel_dep, + libva_dep, +] + +if WITH_X11 + shared_deps += [ libva_x11_dep ] +endif + +if WITH_WAYLAND + shared_deps += [ wayland_client_dep, libva_wayland_dep ] +endif + +shared_sources = [ + sources, + headers, + config_file, + version_file, +] + +libi965_drv_video = static_library( + 'i965_drv_video', + c_args : cflags, + sources : shared_sources, + dependencies : shared_deps) + +i965_drv_video = shared_module( + 'i965_drv_video', + name_prefix : '', + install : true, + install_dir : driverdir, + link_whole : libi965_drv_video, + dependencies : shared_deps) diff --git a/test/meson.build b/test/meson.build new file mode 100644 index 00000000..cd434ba3 --- /dev/null +++ b/test/meson.build @@ -0,0 +1,86 @@ +add_languages('cpp') + +gtest_sources = [ + 'gtest/src/gtest-all.cc', + 'gtest/src/gtest_main.cc', +] + +libgtest_includes = [ + include_directories('gtest'), + include_directories('gtest/include'), +] + +libgtest_cppflags = [ + '-DGTEST_HAS_PTHREAD=' + thread_dep.found().to_string('1', '0'), + '-DGTEST_LANG_CXX11=1', + '-DGTEST_USE_OWN_TR1_TUPLE=0', + '-DGTEST_HAS_TR1_TUPLE=1', +] + +libgtest = static_library( + 'gtest', + gtest_sources, + cpp_args : libgtest_cppflags, + override_options : [ 'cpp_std=c++11' ], + dependencies : [ thread_dep ], + include_directories : libgtest_includes) + +test_i965_headers = [ + 'i965_avce_test_common.h', + 'i965_config_test.h', + 'i965_internal_decl.h', + 'i965_jpeg_test_data.h', + 'i965_streamable.h', + 'i965_test_environment.h', + 'i965_test_fixture.h', + 'i965_test_image_utils.h', + 'test.h', + 'test_utils.h', +] + +test_i965_sources = [ + 'i965_avcd_config_test.cpp', + 'i965_avce_config_test.cpp', + 'i965_avce_context_test.cpp', + 'i965_avce_test_common.cpp', + 'i965_chipset_test.cpp', + 'i965_config_test.cpp', + 'i965_initialize_test.cpp', + 'i965_jpeg_test_data.cpp', + 'i965_jpeg_decode_test.cpp', + 'i965_jpeg_encode_test.cpp', + 'i965_jpegd_config_test.cpp', + 'i965_jpege_config_test.cpp', + 'i965_surface_test.cpp', + 'i965_test_environment.cpp', + 'i965_test_fixture.cpp', + 'i965_test_image_utils.cpp', + 'object_heap_test.cpp', + 'test_main.cpp', +] + +gtest_includes = [ + srcdir, + include_directories('gtest/include'), +] + +test_driverdir = join_paths(meson.build_root(), 'src') +test_cppflags = [ + '-DTEST_VA_DRIVERS_PATH="' + test_driverdir + '"', + '-DHAVE_CONFIG_H' +] +if thread_dep.found() + test_cppflags += [ '-DPTHREADS' ] +endif + +test_i965_drv_video = executable( + 'test_i965_drv_video', + [ test_i965_headers, test_i965_sources ], + dependencies : [ shared_deps, libdrm_dep, libva_drm_dep ], + link_with : [ libgtest, libi965_drv_video ], + include_directories : gtest_includes, + cpp_args : [ test_cppflags, libgtest_cppflags ], + override_options : [ 'cpp_std=c++11' ]) + +# 3 minutes for timeout +test('driver test', test_i965_drv_video, timeout : 3 * 60) -- cgit v1.2.1