From 5e7c782b29d4317db9098e7482046fbbc9933054 Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Fri, 27 Dec 2013 22:38:59 +0000 Subject: [PATCH] Strip dead code when linking by default with BFD ld (linux, ...) and ld64 (os x). This reduces the size of clang-format from 22 MB to 1.8 MB, diagtool goes from 21 MB to 2.8 MB, libclang.so goes from 29 MB to 20 MB, etc. The size of the bin/ folder shrinks from 270 MB to 200 MB. Targets that support plugins and don't already use EXPORTED_SYMBOL_FILE (which libclang and libLTO already do) can set NO_DEAD_STRIP to opt out. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@198087 91177308-0d34-0410-b5e6-96231b3b80d8 --- Makefile.rules | 16 ++++++++++++++++ tools/bugpoint/Makefile | 3 +++ tools/llc/Makefile | 3 +++ tools/llvm-shlib/Makefile | 3 --- tools/lto/Makefile | 3 --- tools/opt/Makefile | 3 +++ 6 files changed, 25 insertions(+), 6 deletions(-) diff --git a/Makefile.rules b/Makefile.rules index 68f6cf8ec5d..1eeadac1989 100644 --- a/Makefile.rules +++ b/Makefile.rules @@ -608,6 +608,22 @@ ifndef KEEP_SYMBOLS Install.StripFlag += -s endif +# By default, strip dead symbols at link time +ifneq ($(HOST_OS), $(filter $(HOST_OS), Cygwin MingW)) +ifneq ($(HOST_OS),Darwin) + CXX.Flags += -ffunction-sections -fdata-sections +endif +endif +ifndef NO_DEAD_STRIP + ifeq ($(HOST_OS),Darwin) + LD.Flags += -Wl,-dead_strip + else + ifneq ($(HOST_OS), $(filter $(HOST_OS), Cygwin MingW)) + LD.Flags += -Wl,--gc-sections + endif + endif +endif + # Adjust linker flags for building an executable ifneq ($(HOST_OS), $(filter $(HOST_OS), Cygwin MingW)) ifndef TOOL_NO_EXPORTS diff --git a/tools/bugpoint/Makefile b/tools/bugpoint/Makefile index 20493218b06..96c0fcf519e 100644 --- a/tools/bugpoint/Makefile +++ b/tools/bugpoint/Makefile @@ -12,4 +12,7 @@ TOOLNAME := bugpoint LINK_COMPONENTS := asmparser instrumentation scalaropts ipo linker bitreader \ bitwriter irreader vectorize objcarcopts +# Support plugins. +NO_DEAD_STRIP := 1 + include $(LEVEL)/Makefile.common diff --git a/tools/llc/Makefile b/tools/llc/Makefile index c24f378bc53..71bce4dc1ad 100644 --- a/tools/llc/Makefile +++ b/tools/llc/Makefile @@ -11,5 +11,8 @@ LEVEL := ../.. TOOLNAME := llc LINK_COMPONENTS := all-targets bitreader asmparser irreader +# Support plugins. +NO_DEAD_STRIP := 1 + include $(LEVEL)/Makefile.common diff --git a/tools/llvm-shlib/Makefile b/tools/llvm-shlib/Makefile index 92f3132ff53..317da517202 100644 --- a/tools/llvm-shlib/Makefile +++ b/tools/llvm-shlib/Makefile @@ -49,9 +49,6 @@ ifeq ($(HOST_OS),Darwin) endif # Include everything from the .a's into the shared library. LLVMLibsOptions := $(LLVMLibsOptions) -all_load - # extra options to override libtool defaults - LLVMLibsOptions := $(LLVMLibsOptions) \ - -Wl,-dead_strip # Mac OS X 10.4 and earlier tools do not allow a second -install_name on command line DARWIN_VERS := $(shell echo $(TARGET_TRIPLE) | sed 's/.*darwin\([0-9]*\).*/\1/') diff --git a/tools/lto/Makefile b/tools/lto/Makefile index cedbee188c0..e2b0ff80ef2 100644 --- a/tools/lto/Makefile +++ b/tools/lto/Makefile @@ -37,9 +37,6 @@ ifeq ($(HOST_OS),Darwin) -Wl,$(LTO_LIBRARY_VERSION).$(LLVM_SUBMIT_SUBVERSION) \ -Wl,-compatibility_version -Wl,1 endif - # extra options to override libtool defaults - LLVMLibsOptions := $(LLVMLibsOptions) \ - -Wl,-dead_strip # Mac OS X 10.4 and earlier tools do not allow a second -install_name on command line DARWIN_VERS := $(shell echo $(TARGET_TRIPLE) | sed 's/.*darwin\([0-9]*\).*/\1/') diff --git a/tools/opt/Makefile b/tools/opt/Makefile index a451005574a..fa2d0145531 100644 --- a/tools/opt/Makefile +++ b/tools/opt/Makefile @@ -11,4 +11,7 @@ LEVEL := ../.. TOOLNAME := opt LINK_COMPONENTS := bitreader bitwriter asmparser irreader instrumentation scalaropts objcarcopts ipo vectorize all-targets +# Support plugins. +NO_DEAD_STRIP := 1 + include $(LEVEL)/Makefile.common