Commit d681b22e authored by Emil Velikov's avatar Emil Velikov

automake: ask the linker to do garbage collection

By doing GC the linker removes all the symbols that are not referenced
and/or used by the final library. This results in a saving of ~100K
up-to ~600K per (stripped) binary (classic vs gallium drivers).

If interested one can ask the compiler to print the sections that are
removed using -Wl,--print-gc-sections.

v2: Check if ld supports the flag before using it.
Signed-off-by: Emil Velikov's avatarEmil Velikov <emil.l.velikov@gmail.com>
Acked-by: Matt Turner <mattst88@gmail.com> (v1)
parent d187a150
......@@ -315,6 +315,22 @@ if test "x$enable_debug" = xyes; then
fi
fi
dnl
dnl Check if linker supports garbage collection
dnl
save_LDFLAGS=$LDFLAGS
LDFLAGS="$LDFLAGS -Wl,--gc-sections"
AC_MSG_CHECKING([whether ld supports --gc-sections])
AC_LINK_IFELSE(
[AC_LANG_SOURCE([static char UnusedFunc() { return 5; } int main() { return 0;}])],
[AC_MSG_RESULT([yes])
GC_SECTIONS="-Wl,--gc-sections";],
[AC_MSG_RESULT([no])
GC_SECTIONS="";])
LDFLAGS=$save_LDFLAGS
AC_SUBST([GC_SECTIONS])
dnl
dnl compatibility symlinks
dnl
......
......@@ -77,6 +77,7 @@ libEGL_la_LDFLAGS = \
-no-undefined \
-version-number 1:0 \
-Wl,-Bsymbolic \
$(GC_SECTIONS) \
-Wl,--no-undefined
if HAVE_EGL_PLATFORM_X11
......
......@@ -11,6 +11,7 @@ libwayland_egl_la_SOURCES = wayland-egl.c
libwayland_egl_la_LDFLAGS = \
-no-undefined \
-version-info 1 \
$(GC_SECTIONS) \
-Wl,--no-undefined
TESTS = wayland-egl-symbols-check
......
......@@ -57,6 +57,7 @@ GALLIUM_DRI_LINKER_FLAGS = \
-shared \
-module \
-avoid-version \
$(GC_SECTIONS) \
-Wl,--version-script=$(DRI_VERSION_SCRIPT)
GALLIUM_VDPAU_LINKER_FLAGS = \
......@@ -65,6 +66,7 @@ GALLIUM_VDPAU_LINKER_FLAGS = \
-no-undefined \
-version-number $(VDPAU_MAJOR):$(VDPAU_MINOR) \
-export-symbols-regex $(VDPAU_EXPORTS) \
$(GC_SECTIONS) \
-Wl,--no-undefined
GALLIUM_XVMC_LINKER_FLAGS = \
......@@ -73,6 +75,7 @@ GALLIUM_XVMC_LINKER_FLAGS = \
-no-undefined \
-version-number $(XVMC_MAJOR):$(XVMC_MINOR) \
-export-symbols-regex '^XvMC' \
$(GC_SECTIONS) \
-Wl,--no-undefined
GALLIUM_OMX_LINKER_FLAGS = \
......@@ -80,6 +83,7 @@ GALLIUM_OMX_LINKER_FLAGS = \
-module \
-no-undefined \
-export-symbols-regex $(EXPORTS) \
$(GC_SECTIONS) \
-Wl,--no-undefined
GALLIUM_VDPAU_LIB_DEPS = \
......
......@@ -48,6 +48,7 @@ AM_LDFLAGS = \
-module \
-no-undefined \
-avoid-version \
$(GC_SECTIONS) \
-Wl,--no-undefined \
-Wl,--version-script=$(top_srcdir)/src/gallium/targets/egl-static/egl.link
......
......@@ -70,6 +70,7 @@ gbm_gallium_drm_la_LDFLAGS = \
-module \
-no-undefined \
-avoid-version \
$(GC_SECTIONS) \
-Wl,--no-undefined
if HAVE_MESA_LLVM
......
......@@ -47,6 +47,7 @@ libGL_la_SOURCES = xlib.c
libGL_la_LDFLAGS = \
-no-undefined \
-version-number $(GL_MAJOR):$(GL_MINOR):$(GL_TINY) \
$(GC_SECTIONS) \
-Wl,--no-undefined
libGL_la_LIBADD = \
......
......@@ -6,6 +6,7 @@ lib@OPENCL_LIBNAME@_la_LDFLAGS = \
$(LLVM_LDFLAGS) \
-no-undefined \
-version-number 1:0 \
$(GC_SECTIONS) \
-Wl,--no-undefined
......
......@@ -43,6 +43,7 @@ lib@OSMESA_LIB@_la_LDFLAGS = \
-module \
-no-undefined \
-version-number @OSMESA_VERSION@ \
$(GC_SECTIONS) \
-Wl,--no-undefined
......
......@@ -49,6 +49,7 @@ AM_LDFLAGS = \
-module \
-no-undefined \
-avoid-version \
$(GC_SECTIONS) \
-Wl,--no-undefined \
-Wl,--version-script=$(top_srcdir)/src/gallium/targets/pipe-loader/pipe.link
......
......@@ -67,6 +67,7 @@ endif
libxatracker_la_LDFLAGS = \
-no-undefined \
-version-number $(XA_MAJOR):$(XA_MINOR):$(XA_TINY) \
$(GC_SECTIONS) \
-Wl,--no-undefined
if HAVE_MESA_LLVM
......
......@@ -22,6 +22,7 @@ libgbm_la_SOURCES = \
libgbm_la_LDFLAGS = \
-no-undefined \
-version-info 1:0 \
$(GC_SECTIONS) \
-Wl,--no-undefined
libgbm_la_LIBADD = \
......
......@@ -112,6 +112,7 @@ GL_LDFLAGS = \
-no-undefined \
-version-number 1:2 \
-Wl,-Bsymbolic \
$(GC_SECTIONS) \
-Wl,--no-undefined
lib@GL_LIB@_la_SOURCES =
......
......@@ -47,6 +47,7 @@ libGLESv1_CM_la_LIBADD = $(GLESv1_CM_LIB_DEPS)
libGLESv1_CM_la_LDFLAGS = \
-no-undefined \
-version-number 1:1 \
$(GC_SECTIONS) \
-Wl,--no-undefined
if HAVE_SHARED_GLAPI
......
......@@ -51,6 +51,7 @@ libGLESv2_la_LIBADD = $(GLESv2_LIB_DEPS)
libGLESv2_la_LDFLAGS = \
-no-undefined \
-version-number 2 \
$(GC_SECTIONS) \
-Wl,--no-undefined
if HAVE_SHARED_GLAPI
......
......@@ -11,6 +11,7 @@ libglapi_la_SOURCES = $(MAPI_GLAPI_FILES)
libglapi_la_LIBADD = $(PTHREAD_LIBS) $(SELINUX_LIBS)
libglapi_la_LDFLAGS = \
-no-undefined \
$(GC_SECTIONS) \
-Wl,--no-undefined
include $(GLAPI)/gen/glapi_gen.mk
......
......@@ -47,6 +47,7 @@ libOpenVG_la_LIBADD = $(VG_LIB_DEPS)
libOpenVG_la_LDFLAGS = \
-no-undefined \
-version-number 1 \
$(GC_SECTIONS) \
-Wl,--no-undefined
vgapi_tmp.h: $(srcdir)/vgapi.csv $(top_srcdir)/src/mapi/mapi_abi.py
......
......@@ -53,6 +53,7 @@ mesa_dri_drivers_la_SOURCES =
mesa_dri_drivers_la_LDFLAGS = \
-module -avoid-version -shared \
-Wl,-Bsymbolic \
$(GC_SECTIONS) \
$()
mesa_dri_drivers_la_LIBADD = \
../../libmesa.la \
......
......@@ -39,6 +39,7 @@ lib@OSMESA_LIB@_la_LDFLAGS = \
-module \
-no-undefined \
-version-number @OSMESA_VERSION@ \
$(GC_SECTIONS) \
-Wl,--no-undefined
......
......@@ -64,6 +64,7 @@ lib@GL_LIB@_la_LIBADD = \
lib@GL_LIB@_la_LDFLAGS = \
-no-undefined \
-version-number $(GL_MAJOR):$(GL_MINOR):$(GL_PATCH) \
$(GC_SECTIONS) \
-Wl,--no-undefined
include $(top_srcdir)/install-lib-links.mk
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment