summaryrefslogtreecommitdiff
path: root/meson.build
diff options
context:
space:
mode:
authorMatthew Waters <matthew@centricular.com>2017-01-18 02:43:44 +1100
committerMatthew Waters <matthew@centricular.com>2017-01-18 15:23:42 +1100
commited5f63c9efcb9746d001819d413b8b20770c3f62 (patch)
tree564bdc9d6b36750dcf4a86a6e07f72be95e64768 /meson.build
parentb4f3e4094bc285f2f7a8d3cea121119e2c5e90cb (diff)
downloadgst-omx-ed5f63c9efcb9746d001819d413b8b20770c3f62.tar.gz
build: add meson build definition
Currently only been tested on the RPi within gst-build.
Diffstat (limited to 'meson.build')
-rw-r--r--meson.build258
1 files changed, 258 insertions, 0 deletions
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000..1afcbe9
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,258 @@
+project('gst-omx', 'c',
+ version : '1.11.1.1',
+ meson_version : '>= 0.36.0',
+ default_options : [ 'warning_level=1',
+ 'buildtype=debugoptimized' ])
+
+gst_version = meson.project_version()
+version_arr = gst_version.split('.')
+gst_version_major = version_arr[0]
+gst_version_minor = version_arr[1]
+gst_version_micro = version_arr[2]
+if version_arr.length() == 4
+ gst_version_nano = version_arr[3]
+else
+ gst_version_nano = 0
+endif
+
+glib_req = '>= 2.40.0'
+gst_req = '>= @0@.@1@.0'.format(gst_version_major, gst_version_minor)
+
+api_version = '1.0'
+soversion = 0
+# maintaining compatibility with the previous libtool versioning
+# current = minor * 100 + micro
+libversion = '@0@.@1@.0'.format(soversion, gst_version_minor.to_int() * 100 + gst_version_micro.to_int())
+
+plugins_install_dir = '@0@/gstreamer-1.0'.format(get_option('libdir'))
+
+cc = meson.get_compiler('c')
+
+if cc.get_id() == 'msvc'
+ # Ignore several spurious warnings for things gstreamer does very commonly
+ # If a warning is completely useless and spammy, use '/wdXXXX' to suppress it
+ # If a warning is harmless but hard to fix, use '/woXXXX' so it's shown once
+ # NOTE: Only add warnings here if you are sure they're spurious
+ add_project_arguments(
+ '/wd4018', # implicit signed/unsigned conversion
+ '/wd4146', # unary minus on unsigned (beware INT_MIN)
+ '/wd4244', # lossy type conversion (e.g. double -> int)
+ '/wd4305', # truncating type conversion (e.g. double -> float)
+ language : 'c')
+ # Disable SAFESEH with MSVC for plugins and libs that use external deps that
+ # are built with MinGW
+ noseh_link_args = ['/SAFESEH:NO']
+else
+ noseh_link_args = []
+endif
+
+cdata = configuration_data()
+check_headers = [
+# ['HAVE_DLFCN_H', 'dlfcn.h'],
+# ['HAVE_FCNTL_H', 'fcntl.h'],
+# ['HAVE_INTTYPES_H', 'inttypes.h'],
+# ['HAVE_MEMORY_H', 'memory.h'],
+# ['HAVE_MSACM_H', 'msacm.h'],
+# ['HAVE_PTHREAD_H', 'pthread.h'],
+# ['HAVE_STDINT_H', 'stdint.h'],
+# ['HAVE_STDLIB_H', 'stdlib.h'],
+# ['HAVE_STRINGS_H', 'strings.h'],
+# ['HAVE_STRING_H', 'string.h'],
+# ['HAVE_SYS_PARAM_H', 'sys/param.h'],
+# ['HAVE_SYS_SOCKET_H', 'sys/socket.h'],
+# ['HAVE_SYS_STAT_H', 'sys/stat.h'],
+# ['HAVE_SYS_TIME_H', 'sys/time.h'],
+# ['HAVE_SYS_TYPES_H', 'sys/types.h'],
+# ['HAVE_SYS_UTSNAME_H', 'sys/utsname.h'],
+# ['HAVE_UNISTD_H', 'unistd.h'],
+]
+
+foreach h : check_headers
+ if cc.has_header(h.get(1))
+ cdata.set(h.get(0), 1)
+ endif
+endforeach
+
+check_functions = [
+# check token HAVE_CPU_ALPHA
+# check token HAVE_CPU_ARM
+# check token HAVE_CPU_CRIS
+# check token HAVE_CPU_CRISV32
+# check token HAVE_CPU_HPPA
+# check token HAVE_CPU_I386
+# check token HAVE_CPU_IA64
+# check token HAVE_CPU_M68K
+# check token HAVE_CPU_MIPS
+# check token HAVE_CPU_PPC
+# check token HAVE_CPU_PPC64
+# check token HAVE_CPU_S390
+# check token HAVE_CPU_SPARC
+# check token HAVE_CPU_X86_64
+# ['HAVE_DCGETTEXT', 'dcgettext'],
+# check token HAVE_EXPERIMENTAL
+# check token HAVE_EXTERNAL
+# ['HAVE_GETPAGESIZE', 'getpagesize'],
+# check token HAVE_GETTEXT
+]
+
+foreach f : check_functions
+ if cc.has_function(f.get(1))
+ cdata.set(f.get(0), 1)
+ endif
+endforeach
+
+#cdata.set('SIZEOF_CHAR', cc.sizeof('char'))
+#cdata.set('SIZEOF_INT', cc.sizeof('int'))
+#cdata.set('SIZEOF_LONG', cc.sizeof('long'))
+#cdata.set('SIZEOF_SHORT', cc.sizeof('short'))
+#cdata.set('SIZEOF_VOIDP', cc.sizeof('void*'))
+
+cdata.set('VERSION', '"@0@"'.format(gst_version))
+cdata.set('PACKAGE', '"gst-omx"')
+cdata.set('PACKAGE_VERSION', '"@0@"'.format(gst_version))
+cdata.set('PACKAGE_BUGREPORT', '"http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer"')
+cdata.set('PACKAGE_NAME', '"GStreamer OMX Plugins"')
+cdata.set('GETTEXT_PACKAGE', '"gst-omx-1.0"')
+cdata.set('GST_API_VERSION', '"@0@"'.format(api_version))
+cdata.set('GST_PACKAGE_NAME', '"GStreamer OpenMX Plug-ins"')
+cdata.set('GST_PACKAGE_ORIGIN', '"Unknown package origin"')
+cdata.set('GST_LICENSE', '"LGPL"')
+cdata.set('LIBDIR', '"@0@"'.format(get_option('libdir')))
+
+# FIXME: This should be exposed as a configuration option
+host_system = host_machine.system()
+if host_system == 'linux'
+ cdata.set('DEFAULT_VIDEOSRC', '"v4l2src"')
+elif host_system == 'osx'
+ cdata.set('DEFAULT_VIDEOSRC', '"avfvideosrc"')
+else
+ cdata.set('DEFAULT_VIDEOSRC', '"videotestsrc"')
+endif
+
+# Mandatory GST deps
+gst_dep = dependency('gstreamer-1.0', version : gst_req,
+ fallback : ['gstreamer', 'gst_dep'])
+gstbase_dep = dependency('gstreamer-base-1.0', version : gst_req,
+ fallback : ['gstreamer', 'gst_base_dep'])
+gstcontroller_dep = dependency('gstreamer-controller-1.0', version : gst_req,
+ fallback : ['gstreamer', 'gst_controller_dep'])
+
+gstpbutils_dep = dependency('gstreamer-pbutils-1.0', version : gst_req,
+ fallback : ['gst-plugins-base', 'pbutils_dep'])
+gstaudio_dep = dependency('gstreamer-audio-1.0', version : gst_req,
+ fallback : ['gst-plugins-base', 'audio_dep'])
+gstfft_dep = dependency('gstreamer-fft-1.0', version : gst_req,
+ fallback : ['gst-plugins-base', 'fft_dep'])
+gsttag_dep = dependency('gstreamer-tag-1.0', version : gst_req,
+ fallback : ['gst-plugins-base', 'tag_dep'])
+gstvideo_dep = dependency('gstreamer-video-1.0', version : gst_req,
+ fallback : ['gst-plugins-base', 'video_dep'])
+
+gstgl_dep = dependency('gstreamer-gl-1.0', version : gst_req,
+ fallback : ['gst-plugins-bad', 'gstgl_dep'], required : false)
+
+libm = cc.find_library('m', required : false)
+glib_dep = dependency('glib-2.0', version : glib_req)
+gio_dep = dependency('gio-2.0', version : glib_req)
+gmodule_dep = dependency('gmodule-2.0', version : glib_req)
+
+gst_omx_args = ['-DHAVE_CONFIG_H']
+configinc = include_directories('.')
+omx_header_path = get_option('with_omx_header_path')
+if omx_header_path != ''
+ gst_omx_args += ['-I' + omx_header_path]
+endif
+
+have_external_omx = cc.has_header(
+ 'OMX_Core.h',
+ args : gst_omx_args,
+ required : false)
+extra_video_headers = ''
+if have_external_omx
+ have_video_ext = cc.has_header (
+ 'OMX_VideoExt.h',
+ args : gst_omx_args,
+ required : false)
+ if have_video_ext
+ extra_video_headers += '''
+#include <OMX_VideoExt.h>'''
+ endif
+endif
+
+have_omx_vp8 = cc.has_header_symbol(
+ 'OMX_Video.h',
+ 'OMX_VIDEO_CodingVP8',
+ prefix : extra_video_headers,
+ args : gst_omx_args,
+ required : false)
+if have_omx_vp8
+ cdata.set('HAVE_VP8', 1)
+endif
+
+have_omx_theora = cc.has_header_symbol(
+ 'OMX_Video.h',
+ 'OMX_VIDEO_CodingTheora',
+ prefix : extra_video_headers,
+ args : gst_omx_args,
+ required : false)
+if have_omx_vp8
+ cdata.set('HAVE_THEORA', 1)
+endif
+
+default_omx_struct_packing = 0
+omx_target = get_option ('with_omx_target')
+if omx_target == 'generic'
+ cdata.set('USE_OMX_TARGET_GENERIC', 1)
+elif omx_target == 'rpi'
+ cdata.set('USE_OMX_TARGET_RPI', 1)
+ cdata.set('OMX_SKIP64BIT', 1)
+ default_omx_struct_packing = 4
+
+ if gstgl_dep.found()
+ if gstgl_dep.type_name() == 'pkgconfig'
+ gl_winsys = gstgl_dep.get_pkgconfig_variable('gl_winsys').split(',')
+ gl_platforms = gstgl_dep.get_pkgconfig_variable('gl_platforms').split(',')
+ elif gstgl_dep.type_name() == 'internal'
+ # XXX assume gst-plugins-bad was built with dispmanx and egl support
+ gl_winsys = ['dispmanx']
+ gl_platforms = ['egl']
+ else
+ error ('unreachable dependency type')
+ endif
+
+ if not gl_winsys.contains('dispmanx') or not gl_platforms.contains ('egl')
+ gstgl_dep = dependency('', required : false)
+ endif
+ endif
+elif omx_target == 'bellagio'
+ cdata.set('USE_OMX_TARGET_BELLAGIO', 1)
+else
+ error ('Unsupported omx target specified. Use the -Dwith_omx_target option')
+endif
+
+if gstgl_dep.found()
+ cdata.set ('HAVE_GST_GL', 1)
+endif
+
+omx_struct_packing = get_option ('with_omx_struct_packing').to_int()
+if omx_struct_packing == 0
+ omx_struct_packing = default_omx_struct_packing
+endif
+if omx_struct_packing != 0
+ cdata.set('GST_OMX_STRUCT_PACKING', omx_struct_packing)
+endif
+
+omx_conf_dir = join_paths (get_option ('prefix'), get_option ('sysconfdir'), 'xdg')
+cdata.set_quoted('GST_OMX_CONFIG_DIR', omx_conf_dir)
+
+configure_file(input : 'config.h.meson',
+ output : 'config.h',
+ configuration : cdata)
+
+subdir('config')
+subdir('examples')
+subdir('omx')
+#subdir('tools')
+
+python3 = find_program('python3')
+run_command(python3, '-c', 'import shutil; shutil.copy("hooks/pre-commit.hook", ".git/hooks/pre-commit")')