From: Guillaume Desmottes Date: Tue, 11 Aug 2020 13:49:53 +0000 (+0200) Subject: meson: add gst-full-version-script option X-Git-Tag: 1.19.3~481^2~63 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=89faf739c92e0e9ec72eb06cc224e1d64173b537;p=platform%2Fupstream%2Fgstreamer.git meson: add gst-full-version-script option Can be used to control the exact symbols exported, or not, in libgstreamer-full. This is useful when building a tailored libgstreamer-full aimed to be run with some specific binaries. By using such version script one can reduce the size of the generated lib by letting the linker garbage collect all the unused APIs. Part-of: --- diff --git a/README.md b/README.md index 452190f..c9ca051 100644 --- a/README.md +++ b/README.md @@ -131,6 +131,12 @@ Since *1.20.0* `gst_init_static_plugins()` is called automatically by `gst_init()` and applications must not call it manually any more. The header file has been removed from public API. +One can use the `gst-full-version-script` option to pass a +[version script](https://www.gnu.org/software/gnulib/manual/html_node/LD-Version-Scripts.html) +to the linker. This can be used to control the exact symbols that are exported by +the gstreamer-full library, allowing the linker to garbage collect unused code +and so reduce the total library size. + This is an experimental feature, backward uncompatible changes could still be made in the future. diff --git a/meson.build b/meson.build index 89041f7..99ce972 100644 --- a/meson.build +++ b/meson.build @@ -297,6 +297,18 @@ if get_option('default_library') == 'static' requires = ['glib-2.0', 'gobject-2.0'] endif + link_deps = [] + if get_option('gst-full-version-script') != '' + symbol_map = meson.current_source_dir() / get_option('gst-full-version-script') + link_arg = '-Wl,--version-script=' + symbol_map + if cc.has_link_argument(link_arg) + gstfull_link_args += link_arg + else + error('Failed to link with version script (' + symbol_map + '), check logs for details') + endif + link_deps += symbol_map + endif + # Build both shared and static library gstfull = both_libraries('gstreamer-full-1.0', init_static_plugins_c, @@ -304,6 +316,7 @@ if get_option('default_library') == 'static' link_args: gstfull_link_args, link_whole : exposed_libs, dependencies : gst_dep, + link_depends : link_deps, install : true, ) pkgconfig.generate(gstfull, diff --git a/meson_options.txt b/meson_options.txt index c285a3c..a3b73a1 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -21,6 +21,8 @@ option('qt5', type : 'feature', value : 'auto', description : 'Qt5 Support') option('custom_subprojects', type : 'string', value : '', description : 'Comma-separated project names') option('gst-full-libraries', type : 'array', value : [], description : '''List of libraries to expose in gstreamer-full's ABI. gstreamer, glib and gobject are always included.''') +option('gst-full-version-script', type : 'string', value: '', + description : 'path of the version script to be used by the linker, see https://www.gnu.org/software/gnulib/manual/html_node/LD-Version-Scripts.html') # Common options, automatically inherited by subprojects option('tests', type : 'feature', value : 'auto', description : 'Build tests')