diff --git a/README.md b/README.md index 452190fc25..c9ca05158e 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 89041f7b6e..99ce97282d 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 c285a3cff9..a3b73a1538 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')