mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-23 00:36:51 +00:00
build: add meson build definition
Currently only been tested on the RPi within gst-build.
This commit is contained in:
parent
b4f3e4094b
commit
ed5f63c9ef
9 changed files with 430 additions and 0 deletions
1
config/bellagio/meson.build
Normal file
1
config/bellagio/meson.build
Normal file
|
@ -0,0 +1 @@
|
|||
install_data (['gstomx.conf'], install_dir : omx_conf_dir)
|
5
config/meson.build
Normal file
5
config/meson.build
Normal file
|
@ -0,0 +1,5 @@
|
|||
if omx_target == 'rpi'
|
||||
subdir ('rpi')
|
||||
elif omx_target == 'bellagio'
|
||||
subdir ('bellagio')
|
||||
endif
|
1
config/rpi/meson.build
Normal file
1
config/rpi/meson.build
Normal file
|
@ -0,0 +1 @@
|
|||
install_data (['gstomx.conf'], install_dir : omx_conf_dir)
|
19
examples/egl/meson.build
Normal file
19
examples/egl/meson.build
Normal file
|
@ -0,0 +1,19 @@
|
|||
if omx_target == 'rpi'
|
||||
egl_sources = ['testegl.c']
|
||||
|
||||
egl_dep = dependency('egl', required : false)
|
||||
if not egl_dep.found()
|
||||
egl_dep = cc.find_library ('EGL')
|
||||
endif
|
||||
|
||||
gles2_dep = dependency('glesv2', required : false)
|
||||
if not gles2_dep.found()
|
||||
gles2_dep = cc.find_library ('GLESv2')
|
||||
endif
|
||||
|
||||
executable ('testegl',
|
||||
sources : egl_sources,
|
||||
c_args : gst_omx_args,
|
||||
include_directories : [configinc],
|
||||
dependencies : [libm, gst_dep, gstvideo_dep, gstgl_dep, egl_dep, gles2_dep])
|
||||
endif
|
3
examples/meson.build
Normal file
3
examples/meson.build
Normal file
|
@ -0,0 +1,3 @@
|
|||
if gstgl_dep.found()
|
||||
subdir('egl')
|
||||
endif
|
83
hooks/pre-commit.hook
Executable file
83
hooks/pre-commit.hook
Executable file
|
@ -0,0 +1,83 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# Check that the code follows a consistant code style
|
||||
#
|
||||
|
||||
# Check for existence of indent, and error out if not present.
|
||||
# On some *bsd systems the binary seems to be called gnunindent,
|
||||
# so check for that first.
|
||||
|
||||
version=`gnuindent --version 2>/dev/null`
|
||||
if test "x$version" = "x"; then
|
||||
version=`gindent --version 2>/dev/null`
|
||||
if test "x$version" = "x"; then
|
||||
version=`indent --version 2>/dev/null`
|
||||
if test "x$version" = "x"; then
|
||||
echo "GStreamer git pre-commit hook:"
|
||||
echo "Did not find GNU indent, please install it before continuing."
|
||||
exit 1
|
||||
else
|
||||
INDENT=indent
|
||||
fi
|
||||
else
|
||||
INDENT=gindent
|
||||
fi
|
||||
else
|
||||
INDENT=gnuindent
|
||||
fi
|
||||
|
||||
case `$INDENT --version` in
|
||||
GNU*)
|
||||
;;
|
||||
default)
|
||||
echo "GStreamer git pre-commit hook:"
|
||||
echo "Did not find GNU indent, please install it before continuing."
|
||||
echo "(Found $INDENT, but it doesn't seem to be GNU indent)"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
INDENT_PARAMETERS="--braces-on-if-line \
|
||||
--case-brace-indentation0 \
|
||||
--case-indentation2 \
|
||||
--braces-after-struct-decl-line \
|
||||
--line-length80 \
|
||||
--no-tabs \
|
||||
--cuddle-else \
|
||||
--dont-line-up-parentheses \
|
||||
--continuation-indentation4 \
|
||||
--honour-newlines \
|
||||
--tab-size8 \
|
||||
--indent-level2 \
|
||||
--leave-preprocessor-space"
|
||||
|
||||
echo "--Checking style--"
|
||||
for file in `git diff-index --cached --name-only HEAD --diff-filter=ACMR| grep "\.c$"` ; do
|
||||
# nf is the temporary checkout. This makes sure we check against the
|
||||
# revision in the index (and not the checked out version).
|
||||
nf=`git checkout-index --temp ${file} | cut -f 1`
|
||||
newfile=`mktemp /tmp/${nf}.XXXXXX` || exit 1
|
||||
$INDENT ${INDENT_PARAMETERS} \
|
||||
$nf -o $newfile 2>> /dev/null
|
||||
# FIXME: Call indent twice as it tends to do line-breaks
|
||||
# different for every second call.
|
||||
$INDENT ${INDENT_PARAMETERS} \
|
||||
$newfile 2>> /dev/null
|
||||
diff -u -p "${nf}" "${newfile}"
|
||||
r=$?
|
||||
rm "${newfile}"
|
||||
rm "${nf}"
|
||||
if [ $r != 0 ] ; then
|
||||
echo "================================================================================================="
|
||||
echo " Code style error in: $file "
|
||||
echo " "
|
||||
echo " Please fix before committing. Don't forget to run git add before trying to commit again. "
|
||||
echo " If the whole file is to be committed, this should work (run from the top-level directory): "
|
||||
echo " "
|
||||
echo " gst-indent $file; git add $file; git commit"
|
||||
echo " "
|
||||
echo "================================================================================================="
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
echo "--Checking style pass--"
|
258
meson.build
Normal file
258
meson.build
Normal file
|
@ -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")')
|
3
meson_options.txt
Normal file
3
meson_options.txt
Normal file
|
@ -0,0 +1,3 @@
|
|||
option('with_omx_header_path', type : 'string', value : '', description : 'An extra include directory to find the OpenMax headers')
|
||||
option('with_omx_target', type : 'combo', choices : ['none', 'generic', 'rpi', 'bellagio'], value : 'none', description : 'The OMX platform to target')
|
||||
option('with_omx_struct_packing', type : 'combo', choices : ['0', '1', '2', '4', '8'], value : '0', description : 'Force OpenMAX struct packing')
|
57
omx/meson.build
Normal file
57
omx/meson.build
Normal file
|
@ -0,0 +1,57 @@
|
|||
omx_sources = [
|
||||
'gstomx.c',
|
||||
'gstomxbufferpool.c',
|
||||
'gstomxvideo.c',
|
||||
'gstomxvideodec.c',
|
||||
'gstomxvideoenc.c',
|
||||
'gstomxaudiodec.c',
|
||||
'gstomxaudioenc.c',
|
||||
'gstomxmjpegdec.c',
|
||||
'gstomxmpeg4videodec.c',
|
||||
'gstomxmpeg2videodec.c',
|
||||
'gstomxh264dec.c',
|
||||
'gstomxh263dec.c',
|
||||
'gstomxwmvdec.c',
|
||||
'gstomxmpeg4videoenc.c',
|
||||
'gstomxh264enc.c',
|
||||
'gstomxh263enc.c',
|
||||
'gstomxaacdec.c',
|
||||
'gstomxmp3dec.c',
|
||||
'gstomxaacenc.c',
|
||||
'gstomxamrdec.c',
|
||||
'gstomxaudiosink.c',
|
||||
'gstomxanalogaudiosink.c',
|
||||
'gstomxhdmiaudiosink.c',
|
||||
]
|
||||
|
||||
extra_inc = []
|
||||
extra_c_args = []
|
||||
|
||||
if have_omx_vp8
|
||||
omx_sources += 'gstomxvp8dec.c'
|
||||
endif
|
||||
|
||||
if have_omx_theora
|
||||
omx_sources += 'gstomxtheoradec.c'
|
||||
endif
|
||||
|
||||
if not have_external_omx
|
||||
extra_inc += include_directories ('openmax')
|
||||
endif
|
||||
|
||||
optional_deps = []
|
||||
if gstgl_dep.found()
|
||||
optional_deps += gstgl_dep
|
||||
extra_c_args += ['-DGST_USE_UNSTABLE_API']
|
||||
endif
|
||||
|
||||
gstomx = library('gstomx',
|
||||
omx_sources,
|
||||
c_args : gst_omx_args + extra_c_args,
|
||||
# link_args : noseh_link_args,
|
||||
include_directories : [configinc] + extra_inc,
|
||||
dependencies : [gstvideo_dep, gstaudio_dep, gstbase_dep, gstcontroller_dep,
|
||||
libm] + optional_deps,
|
||||
install : true,
|
||||
install_dir : plugins_install_dir,
|
||||
)
|
Loading…
Reference in a new issue