Optimize size by using --dynamic-list linker option
authorSven-Ola Tuecke <sven-ola@gmx.de>
Sat, 3 Jan 2009 20:39:30 +0000 (21:39 +0100)
committerSven-Ola Tuecke <sven-ola@gmx.de>
Sat, 3 Jan 2009 20:39:30 +0000 (21:39 +0100)
Makefile
Makefile.inc
olsrd-exports.sh

index 5af37b6..530c847 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -60,7 +60,10 @@ TAG_SRCS =   $(SRCS) $(HDRS)
 default_target: $(EXENAME)
 
 $(EXENAME):    $(OBJS) src/builddata.o
-               $(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
+ifeq ($(LD_HAS_DYN), yes)
+               $(SHELL) olsrd-exports.sh $$(find src -name "*.h") > $(EXENAME).exports
+endif
+               $(CC) $(LDFLAGS) $(LDFLAGS_EXE) -o $@ $^ $(LIBS)
 
 show-ignored-warnings:
        CC="$(CC)" $(TOPDIR)/gcc-warnings $(ALL_WARNINGS) > /dev/null
@@ -79,6 +82,7 @@ src/builddata.c:
 
 clean:
        -rm -f $(OBJS) $(SRCS:%.c=%.d) $(EXENAME) $(EXENAME).exe src/builddata.c $(TMPFILES)
+       -rm -f $(EXENAME).exports
 ifeq ($(OS), win32)
        -rm -f libolsrd.a
        -rm -f gui/win32/Main/olsrd_cfgparser.lib
index abc90b9..8ca5d28 100644 (file)
@@ -35,6 +35,7 @@ endif
 BISON ?=       bison
 FLEX ?=                flex
 TAGCMD ?=      etags
+LD_HAS_DYN ?=   $(shell $(CC) -Wl,--help 2>&1|grep -w -q -- --dynamic-list && echo yes)
 
 # target directories and names
 PREFIX  ?= /usr/local
@@ -133,7 +134,11 @@ LDFLAGS += -Wl,-soname,$(PLUGIN_NAME)
 LDFLAGS +=     -Wl,--version-script=version-script.txt 
 else
 # c and ld flags for main
-LDFLAGS +=     -Wl,-export-dynamic 
+ifeq ($(LD_HAS_DYN), yes)
+LDFLAGS_EXE += -Wl,--dynamic-list=$(EXENAME).exports
+else
+LDFLAGS_EXE += -Wl,-export-dynamic 
+endif
 LDFLAGS +=     -Wl,-rpath,$(LIBDIR)
 endif
 # LDFLAGS for all 
index e13ec40..29fe2c4 100755 (executable)
@@ -11,6 +11,7 @@
 # make all LDFLAGS=-Wl,--dynamic-list=olsrd.exports
 #
 # To find the used identifiers, you may use this:
-# make libs LDFLAGS=-Wl,--noinhibit-exec
+# make clean_libs libs LDFLAGS=-Wl,--noinhibit-exec 2>&1|sed -n 's/.*undefined reference to //p'|sort|uniq
+# Compare the outcome to olsrd.exports and EXPORT(xxx) all missing.
 
 sed -n -e '1s/.*/{/p;$s/.*/};/p;/#define/d;s/.*\<EXPORT\>[     ]*(\([^)]\+\)).*/  "\1";/p' $*