mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-10-29 05:40:23 -04:00
Add linker version script to hide non-ABI stable symbols in the client
libraries. While this helps defining a more streamlined ABI, this also requires linking a lot of additional symbols into some PA client utilities which until now made use of the non-ABI stable symbols in libpulse. To minimize the effect on there size a bit, strip unused symbols by linking with -ffunction-sections -fdata-sections -Wl,--gc-sections git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@2018 fefdeb5f-60dc-0310-8127-8f9354f1896f
This commit is contained in:
parent
bc161b4b4a
commit
95af1e616b
2 changed files with 240 additions and 10 deletions
|
|
@ -64,7 +64,7 @@ AM_LIBADD = $(PTHREAD_LIBS)
|
|||
AM_LDADD = $(PTHREAD_LIBS)
|
||||
|
||||
# Only required on some platforms but defined for all to avoid errors
|
||||
AM_LDFLAGS = -Wl,-no-undefined
|
||||
AM_LDFLAGS = -Wl,-no-undefined -ffunction-sections -fdata-sections -Wl,--gc-sections
|
||||
|
||||
if STATIC_BINS
|
||||
BINLDFLAGS = -static
|
||||
|
|
@ -101,7 +101,8 @@ EXTRA_DIST = \
|
|||
daemon/esdcompat.in \
|
||||
utils/padsp \
|
||||
modules/module-defs.h.m4 \
|
||||
daemon/pulseaudio-module-xsmp.desktop
|
||||
daemon/pulseaudio-module-xsmp.desktop \
|
||||
map-file
|
||||
|
||||
pulseconf_DATA = \
|
||||
default.pa \
|
||||
|
|
@ -194,12 +195,12 @@ pasuspender_LDADD = $(AM_LDADD) libpulse.la $(LIBSNDFILE_LIBS)
|
|||
pasuspender_CFLAGS = $(AM_CFLAGS) $(LIBSNDFILE_CFLAGS)
|
||||
pasuspender_LDFLAGS = $(AM_LDFLAGS) $(BINLDFLAGS)
|
||||
|
||||
pacmd_SOURCES = utils/pacmd.c pulsecore/pid.c pulsecore/pid.h
|
||||
pacmd_SOURCES = utils/pacmd.c pulsecore/pid.c pulsecore/pid.h pulsecore/core-util.c pulsecore/core-util.h pulsecore/core-error.c pulsecore/core-error.h pulsecore/log.c pulsecore/log.h pulsecore/once.c pulsecore/once.h $(PA_THREAD_OBJS)
|
||||
pacmd_CFLAGS = $(AM_CFLAGS)
|
||||
pacmd_LDADD = $(AM_LDADD) libpulse.la
|
||||
pacmd_LDFLAGS = $(AM_LDFLAGS) $(BINLDFLAGS)
|
||||
|
||||
pax11publish_SOURCES = utils/pax11publish.c
|
||||
pax11publish_SOURCES = utils/pax11publish.c pulsecore/x11prop.c pulsecore/x11prop.h pulse/client-conf.c pulse/client-conf.h pulsecore/authkey.h pulsecore/authkey.c pulsecore/random.h pulsecore/random.c pulsecore/conf-parser.c pulsecore/conf-parser.h pulsecore/core-util.c pulsecore/core-util.h pulsecore/core-error.c pulsecore/core-error.h pulsecore/log.c pulsecore/log.h pulsecore/once.c pulsecore/once.h $(PA_THREAD_OBJS)
|
||||
pax11publish_CFLAGS = $(AM_CFLAGS) $(X_CFLAGS)
|
||||
pax11publish_LDADD = $(AM_LDADD) libpulse.la $(X_PRE_LIBS) -lX11 $(X_LIBS) $(X_EXTRA_LIBS)
|
||||
pax11publish_LDFLAGS = $(AM_LDFLAGS) $(BINLDFLAGS)
|
||||
|
|
@ -374,7 +375,7 @@ sync_playback_CFLAGS = $(AM_CFLAGS)
|
|||
sync_playback_LDFLAGS = $(AM_LDFLAGS) $(BINLDFLAGS)
|
||||
|
||||
interpol_test_SOURCES = tests/interpol-test.c
|
||||
interpol_test_LDADD = $(AM_LDADD) libpulse.la
|
||||
interpol_test_LDADD = $(AM_LDADD) libpulse.la libpulsecore.la
|
||||
interpol_test_CFLAGS = $(AM_CFLAGS)
|
||||
interpol_test_LDFLAGS = $(AM_LDFLAGS) $(BINLDFLAGS)
|
||||
|
||||
|
|
@ -525,7 +526,7 @@ libpulse_la_SOURCES += \
|
|||
endif
|
||||
|
||||
libpulse_la_CFLAGS = $(AM_CFLAGS)
|
||||
libpulse_la_LDFLAGS = -version-info $(LIBPULSE_VERSION_INFO)
|
||||
libpulse_la_LDFLAGS = -version-info $(LIBPULSE_VERSION_INFO) -Wl,-version-script=$(srcdir)/map-file
|
||||
libpulse_la_LIBADD = $(AM_LIBADD) $(WINSOCK_LIBS) $(LIBICONV)
|
||||
|
||||
if HAVE_X11
|
||||
|
|
@ -541,17 +542,17 @@ endif
|
|||
libpulse_simple_la_SOURCES = pulse/simple.c pulse/simple.h
|
||||
libpulse_simple_la_CFLAGS = $(AM_CFLAGS)
|
||||
libpulse_simple_la_LIBADD = $(AM_LIBADD) libpulse.la
|
||||
libpulse_simple_la_LDFLAGS = -version-info $(LIBPULSE_SIMPLE_VERSION_INFO)
|
||||
libpulse_simple_la_LDFLAGS = -version-info $(LIBPULSE_SIMPLE_VERSION_INFO) -Wl,-version-script=$(srcdir)/map-file
|
||||
|
||||
libpulse_browse_la_SOURCES = pulse/browser.c pulse/browser.h pulsecore/avahi-wrap.c pulsecore/avahi-wrap.h
|
||||
libpulse_browse_la_SOURCES = pulse/browser.c pulse/browser.h pulsecore/avahi-wrap.c pulsecore/avahi-wrap.h pulsecore/core-util.c pulsecore/core-util.h pulsecore/core-error.c pulsecore/core-error.h pulsecore/log.c pulsecore/log.h pulsecore/once.c pulsecore/once.h $(PA_THREAD_OBJS)
|
||||
libpulse_browse_la_CFLAGS = $(AM_CFLAGS) $(AVAHI_CFLAGS)
|
||||
libpulse_browse_la_LIBADD = $(AM_LIBADD) libpulse.la $(AVAHI_LIBS)
|
||||
libpulse_browse_la_LDFLAGS = -version-info $(LIBPULSE_BROWSE_VERSION_INFO)
|
||||
libpulse_browse_la_LDFLAGS = -version-info $(LIBPULSE_BROWSE_VERSION_INFO) -Wl,-version-script=$(srcdir)/map-file
|
||||
|
||||
libpulse_mainloop_glib_la_SOURCES = pulse/glib-mainloop.h pulse/glib-mainloop.c
|
||||
libpulse_mainloop_glib_la_CFLAGS = $(AM_CFLAGS) $(GLIB20_CFLAGS)
|
||||
libpulse_mainloop_glib_la_LIBADD = $(AM_LIBADD) libpulse.la $(GLIB20_LIBS)
|
||||
libpulse_mainloop_glib_la_LDFLAGS = -version-info $(LIBPULSE_MAINLOOP_GLIB_VERSION_INFO)
|
||||
libpulse_mainloop_glib_la_LDFLAGS = -version-info $(LIBPULSE_MAINLOOP_GLIB_VERSION_INFO) -Wl,-version-script=$(srcdir)/map-file
|
||||
|
||||
###################################
|
||||
# OSS emulation #
|
||||
|
|
@ -1459,4 +1460,13 @@ update-speex:
|
|||
update-ffmpeg:
|
||||
wget -O pulsecore/ffmpeg/resample2.c http://svn.mplayerhq.hu/ffmpeg/trunk/libavcodec/resample2.c?view=co
|
||||
|
||||
# Automatically generate linker version script. We use the same one for all public .sos
|
||||
update-map-file:
|
||||
( echo "PULSE_0 {" ; \
|
||||
echo "global:" ; \
|
||||
ctags -I PA_GCC_PURE,PA_GCC_CONST -f - --c-kinds=p $(pulseinclude_HEADERS) | awk '/^pa_/ { print $$1 ";" }' | sort ; \
|
||||
echo "local:" ; \
|
||||
echo "*;" ; \
|
||||
echo "};" ) > $(srcdir)/map-file
|
||||
|
||||
.PHONY: utils/padsp
|
||||
|
|
|
|||
220
src/map-file
Normal file
220
src/map-file
Normal file
|
|
@ -0,0 +1,220 @@
|
|||
PULSE_0 {
|
||||
global:
|
||||
pa_browser_new;
|
||||
pa_browser_new_full;
|
||||
pa_browser_ref;
|
||||
pa_browser_set_callback;
|
||||
pa_browser_set_error_callback;
|
||||
pa_browser_unref;
|
||||
pa_bytes_per_second;
|
||||
pa_bytes_snprint;
|
||||
pa_bytes_to_usec;
|
||||
pa_channel_map_equal;
|
||||
pa_channel_map_init;
|
||||
pa_channel_map_init_auto;
|
||||
pa_channel_map_init_mono;
|
||||
pa_channel_map_init_stereo;
|
||||
pa_channel_map_parse;
|
||||
pa_channel_map_snprint;
|
||||
pa_channel_map_valid;
|
||||
pa_channel_position_to_pretty_string;
|
||||
pa_channel_position_to_string;
|
||||
pa_context_add_autoload;
|
||||
pa_context_connect;
|
||||
pa_context_disconnect;
|
||||
pa_context_drain;
|
||||
pa_context_errno;
|
||||
pa_context_exit_daemon;
|
||||
pa_context_get_autoload_info_by_index;
|
||||
pa_context_get_autoload_info_by_name;
|
||||
pa_context_get_autoload_info_list;
|
||||
pa_context_get_client_info;
|
||||
pa_context_get_client_info_list;
|
||||
pa_context_get_module_info;
|
||||
pa_context_get_module_info_list;
|
||||
pa_context_get_protocol_version;
|
||||
pa_context_get_sample_info_by_index;
|
||||
pa_context_get_sample_info_by_name;
|
||||
pa_context_get_sample_info_list;
|
||||
pa_context_get_server;
|
||||
pa_context_get_server_info;
|
||||
pa_context_get_server_protocol_version;
|
||||
pa_context_get_sink_info_by_index;
|
||||
pa_context_get_sink_info_by_name;
|
||||
pa_context_get_sink_info_list;
|
||||
pa_context_get_sink_input_info;
|
||||
pa_context_get_sink_input_info_list;
|
||||
pa_context_get_source_info_by_index;
|
||||
pa_context_get_source_info_by_name;
|
||||
pa_context_get_source_info_list;
|
||||
pa_context_get_source_output_info;
|
||||
pa_context_get_source_output_info_list;
|
||||
pa_context_get_state;
|
||||
pa_context_is_local;
|
||||
pa_context_is_pending;
|
||||
pa_context_kill_client;
|
||||
pa_context_kill_sink_input;
|
||||
pa_context_kill_source_output;
|
||||
pa_context_load_module;
|
||||
pa_context_move_sink_input_by_index;
|
||||
pa_context_move_sink_input_by_name;
|
||||
pa_context_move_source_output_by_index;
|
||||
pa_context_move_source_output_by_name;
|
||||
pa_context_new;
|
||||
pa_context_play_sample;
|
||||
pa_context_ref;
|
||||
pa_context_remove_autoload_by_index;
|
||||
pa_context_remove_autoload_by_name;
|
||||
pa_context_remove_sample;
|
||||
pa_context_set_default_sink;
|
||||
pa_context_set_default_source;
|
||||
pa_context_set_name;
|
||||
pa_context_set_sink_input_mute;
|
||||
pa_context_set_sink_input_volume;
|
||||
pa_context_set_sink_mute_by_index;
|
||||
pa_context_set_sink_mute_by_name;
|
||||
pa_context_set_sink_volume_by_index;
|
||||
pa_context_set_sink_volume_by_name;
|
||||
pa_context_set_source_mute_by_index;
|
||||
pa_context_set_source_mute_by_name;
|
||||
pa_context_set_source_volume_by_index;
|
||||
pa_context_set_source_volume_by_name;
|
||||
pa_context_set_state_callback;
|
||||
pa_context_set_subscribe_callback;
|
||||
pa_context_stat;
|
||||
pa_context_subscribe;
|
||||
pa_context_suspend_sink_by_index;
|
||||
pa_context_suspend_sink_by_name;
|
||||
pa_context_suspend_source_by_index;
|
||||
pa_context_suspend_source_by_name;
|
||||
pa_context_unload_module;
|
||||
pa_context_unref;
|
||||
pa_cvolume_avg;
|
||||
pa_cvolume_channels_equal_to;
|
||||
pa_cvolume_equal;
|
||||
pa_cvolume_set;
|
||||
pa_cvolume_snprint;
|
||||
pa_cvolume_valid;
|
||||
pa_frame_size;
|
||||
pa_get_binary_name;
|
||||
pa_get_fqdn;
|
||||
pa_get_home_dir;
|
||||
pa_get_host_name;
|
||||
pa_get_library_version;
|
||||
pa_gettimeofday;
|
||||
pa_get_user_name;
|
||||
pa_glib_mainloop_free;
|
||||
pa_glib_mainloop_get_api;
|
||||
pa_glib_mainloop_new;
|
||||
pa_locale_to_utf8;
|
||||
pa_mainloop_api_once;
|
||||
pa_mainloop_dispatch;
|
||||
pa_mainloop_free;
|
||||
pa_mainloop_get_api;
|
||||
pa_mainloop_get_retval;
|
||||
pa_mainloop_iterate;
|
||||
pa_mainloop_new;
|
||||
pa_mainloop_poll;
|
||||
pa_mainloop_prepare;
|
||||
pa_mainloop_quit;
|
||||
pa_mainloop_run;
|
||||
pa_mainloop_set_poll_func;
|
||||
pa_mainloop_wakeup;
|
||||
pa_msleep;
|
||||
pa_operation_cancel;
|
||||
pa_operation_get_state;
|
||||
pa_operation_ref;
|
||||
pa_operation_unref;
|
||||
pa_parse_sample_format;
|
||||
pa_path_get_filename;
|
||||
pa_sample_format_to_string;
|
||||
pa_sample_size;
|
||||
pa_sample_spec_equal;
|
||||
pa_sample_spec_snprint;
|
||||
pa_sample_spec_valid;
|
||||
pa_signal_done;
|
||||
pa_signal_free;
|
||||
pa_signal_init;
|
||||
pa_signal_new;
|
||||
pa_signal_set_destroy;
|
||||
pa_simple_drain;
|
||||
pa_simple_flush;
|
||||
pa_simple_free;
|
||||
pa_simple_get_latency;
|
||||
pa_simple_new;
|
||||
pa_simple_read;
|
||||
pa_simple_write;
|
||||
pa_stream_connect_playback;
|
||||
pa_stream_connect_record;
|
||||
pa_stream_connect_upload;
|
||||
pa_stream_cork;
|
||||
pa_stream_disconnect;
|
||||
pa_stream_drain;
|
||||
pa_stream_drop;
|
||||
pa_stream_finish_upload;
|
||||
pa_stream_flush;
|
||||
pa_stream_get_buffer_attr;
|
||||
pa_stream_get_channel_map;
|
||||
pa_stream_get_context;
|
||||
pa_stream_get_index;
|
||||
pa_stream_get_latency;
|
||||
pa_stream_get_sample_spec;
|
||||
pa_stream_get_state;
|
||||
pa_stream_get_time;
|
||||
pa_stream_get_timing_info;
|
||||
pa_stream_new;
|
||||
pa_stream_peek;
|
||||
pa_stream_prebuf;
|
||||
pa_stream_readable_size;
|
||||
pa_stream_ref;
|
||||
pa_stream_set_latency_update_callback;
|
||||
pa_stream_set_name;
|
||||
pa_stream_set_overflow_callback;
|
||||
pa_stream_set_read_callback;
|
||||
pa_stream_set_state_callback;
|
||||
pa_stream_set_underflow_callback;
|
||||
pa_stream_set_write_callback;
|
||||
pa_stream_trigger;
|
||||
pa_stream_unref;
|
||||
pa_stream_update_timing_info;
|
||||
pa_stream_writable_size;
|
||||
pa_stream_write;
|
||||
pa_strerror;
|
||||
pa_sw_cvolume_multiply;
|
||||
pa_sw_volume_from_dB;
|
||||
pa_sw_volume_from_linear;
|
||||
pa_sw_volume_multiply;
|
||||
pa_sw_volume_to_dB;
|
||||
pa_sw_volume_to_linear;
|
||||
pa_threaded_mainloop_accept;
|
||||
pa_threaded_mainloop_free;
|
||||
pa_threaded_mainloop_get_api;
|
||||
pa_threaded_mainloop_get_retval;
|
||||
pa_threaded_mainloop_in_thread;
|
||||
pa_threaded_mainloop_lock;
|
||||
pa_threaded_mainloop_new;
|
||||
pa_threaded_mainloop_signal;
|
||||
pa_threaded_mainloop_start;
|
||||
pa_threaded_mainloop_stop;
|
||||
pa_threaded_mainloop_unlock;
|
||||
pa_threaded_mainloop_wait;
|
||||
pa_timeval_add;
|
||||
pa_timeval_age;
|
||||
pa_timeval_cmp;
|
||||
pa_timeval_diff;
|
||||
pa_timeval_load;
|
||||
pa_timeval_store;
|
||||
pa_usec_to_bytes;
|
||||
pa_utf8_filter;
|
||||
pa_utf8_to_locale;
|
||||
pa_utf8_valid;
|
||||
pa_xfree;
|
||||
pa_xmalloc;
|
||||
pa_xmalloc0;
|
||||
pa_xmemdup;
|
||||
pa_xrealloc;
|
||||
pa_xstrdup;
|
||||
pa_xstrndup;
|
||||
local:
|
||||
*;
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue