diff options
author | Beniamino Galvani <bgalvani@redhat.com> | 2018-09-11 14:12:10 +0200 |
---|---|---|
committer | Beniamino Galvani <bgalvani@redhat.com> | 2018-09-13 11:50:45 +0200 |
commit | dfa2a2b40c866bf7a5484b72639464c31b80e7da (patch) | |
tree | 5a2af1328005adaad90bf5c344d02e36969a6b3b | |
parent | 9b4bc0824c1d8925f1ecfa4856757d322f030427 (diff) | |
download | NetworkManager-dfa2a2b40c866bf7a5484b72639464c31b80e7da.tar.gz |
build: meson: generate and use a linker script for NM binary
Generate the NetworkManager.ver link script to link the NM binary so
that unneeded symbol are unexported and can be dropped, reducing the
binary size.
Reported-by: Michael Biebl <biebl@debian.org>
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/issues/33
-rw-r--r-- | src/meson.build | 80 |
1 files changed, 33 insertions, 47 deletions
diff --git a/src/meson.build b/src/meson.build index 83fc3eacaf..f46366a904 100644 --- a/src/meson.build +++ b/src/meson.build @@ -143,7 +143,7 @@ sources = files( 'nm-sleep-monitor.c' ) -deps = [ +nm_deps = [ dl_dep, libndp_dep, libudev_dep, @@ -153,70 +153,29 @@ deps = [ ] if enable_concheck - deps += libcurl_dep + nm_deps += libcurl_dep endif if enable_libaudit - deps += libaudit_dep + nm_deps += libaudit_dep endif if enable_libpsl - deps += libpsl_dep + nm_deps += libpsl_dep endif if enable_selinux - deps += selinux_dep + nm_deps += selinux_dep endif libnetwork_manager = static_library( nm_name, sources: sources, - dependencies: deps, + dependencies: nm_deps, c_args: cflags, link_with: [libnetwork_manager_base, libsystemd_nm] ) -ldflags = ['-rdynamic'] - -# FIXME: this doesn't work and it depends on libtool -''' -src/NetworkManager.ver: src/libNetworkManager.la $(core_plugins) - $(AM_V_GEN) NM="$(NM)" "$(srcdir)/tools/create-exports-NetworkManager.sh" --called-from-make "$(srcdir)" - -src_NetworkManager_LDFLAGS = \ - -rdynamic \ - -Wl,--version-script="src/NetworkManager.ver" - -nm = find_program('gcc-nm', 'nm') -create_exports_networkmanager = join_paths(meson.source_root(), 'tools', 'create-exports-NetworkManager.sh') - -symbol_map_name = 'NetworkManager.ver' - -linker_script = custom_target( - symbol_map_name, - input: meson.source_root(), - output: symbol_map_name, - capture: true, - #command: ['NM=' + nm.path(), create_exports_networkmanager, '--called-from-make', '@INPUT@'] - command: [create_exports_networkmanager, '--called-from-make', '@INPUT@'] -) - -ldflags += '-Wl,--version-script,@0@'.format(linker_script) -''' - -network_manager = executable( - nm_name, - 'main.c', - dependencies: deps, - c_args: cflags, - link_with: libnetwork_manager, - link_args: ldflags, - #FIXME - #link_depends: linker_script, - install: true, - install_dir: nm_sbindir -) - deps = [ dl_dep, libndp_dep, @@ -287,3 +246,30 @@ endif subdir('devices') subdir('settings/plugins') + +# NetworkManager binary + +create_exports_networkmanager = join_paths(meson.source_root(), 'tools', 'create-exports-NetworkManager.sh') +symbol_map_name = 'NetworkManager.ver' + +ver_script = custom_target( + symbol_map_name, + input: meson.source_root(), + output: symbol_map_name, + depends: [ libnetwork_manager, core_plugins ], + command: [create_exports_networkmanager, '--called-from-build', '@INPUT@'] +) + +ldflags = ['-rdynamic', '-Wl,--version-script,@0@'.format(ver_script.full_path())] + +network_manager = executable( + nm_name, + 'main.c', + dependencies: nm_deps, + c_args: nm_cflags, + link_with: libnetwork_manager, + link_args: ldflags, + link_depends: ver_script, + install: true, + install_dir: nm_sbindir +) |