From a0e05355121e650896ec2087ccf8615043ed5b04 Mon Sep 17 00:00:00 2001 From: Roland Kaufmann Date: Thu, 24 Jan 2013 23:05:25 +0100 Subject: [PATCH] Module to prune unnecessary libraries from link On Linux all libraries that are specified on the command-line will be referred to in the resulting binary. There may be find modules which just adds everything to satisfy every possible dependency; we want to discard those unnecessary libraries. --- cmake/Modules/UseOnlyNeeded.cmake | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 cmake/Modules/UseOnlyNeeded.cmake diff --git a/cmake/Modules/UseOnlyNeeded.cmake b/cmake/Modules/UseOnlyNeeded.cmake new file mode 100644 index 00000000..0e641240 --- /dev/null +++ b/cmake/Modules/UseOnlyNeeded.cmake @@ -0,0 +1,18 @@ +# - Use only needed imports from libraries +# +# Add the -Wl,--as-needed flag to the default linker flags on Linux +# in order to get only the minimal set of dependencies. + +function (prepend var_name value) + if (${var_name}) + set (${var_name} "${value} ${${var_name}}" PARENT_SCOPE) + else (${var_name}) + set (${var_name} "${value}") + endif (${var_name}) +endfunction (prepend var_name value) + +if (CMAKE_CXX_PLATFORM_ID STREQUAL "Linux") + prepend (CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed") + prepend (CMAKE_MODULE_LINKER_FLAGS "-Wl,--as-needed") + prepend (CMAKE_SHARED_LINKER_FLAGS "-Wl,--as-needed") +endif (CMAKE_CXX_PLATFORM_ID STREQUAL "Linux")