Ian Campbell
2011-Mar-16 10:38 UTC
[Xen-devel] [PATCH] tools: do not link against unused libraries
# HG changeset patch
# User Ian Campbell <ian.campbell@citrix.com>
# Date 1300271932 0
# Node ID 7e326d27d899a3133479c8b7c983f660cdeda48c
# Parent f35234b6636a0410a7d5eaa409e98ebe59080e4f
tools: do not link against unused libraries.
A fair few things under tools link against libraries which they don''t
even use.
Most of this appears to come from copy-and-pasting previous Makefile
snippets and cargo-culting plus the tendency to define global $(LIBS)
even for Makefiles which build multiple separate utilities or
libraries.
Identified by comparing a build with --as-needed to one without by
looking at the NEEDED header of all ELF objects.
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
diff -r f35234b6636a -r 7e326d27d899 tools/blktap2/drivers/Makefile
--- a/tools/blktap2/drivers/Makefile Tue Mar 15 16:33:59 2011 +0000
+++ b/tools/blktap2/drivers/Makefile Wed Mar 16 10:38:52 2011 +0000
@@ -23,11 +23,7 @@ CFLAGS += -fPIC
CFLAGS += -fPIC
endif
-LIBS += -lrt -lz
-
-LBLIBS_img := $(LDLIBS_libxenctrl) $(CRYPT_LIB) -lpthread -lz -lm
-
-LIBS += -L$(LIBVHDDIR) -lvhd
+VHDLIBS := -L$(LIBVHDDIR) -lvhd
REMUS-OBJS := block-remus.o
REMUS-OBJS += hashtable.o
@@ -88,26 +84,26 @@ all: $(IBIN) lock-util qcow-util
all: $(IBIN) lock-util qcow-util
-tapdisk2: $(TAP-OBJS-y) $(BLK-OBJS-y) $(MISC-OBJS-y) tapdisk2.c
- $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(LIBS) $(AIOLIBS) $(MEMSHRLIBS)
$(LBLIBS_img)
+tapdisk2: $(TAP-OBJS-y) $(BLK-OBJS-y) $(MISC-OBJS-y) tapdisk2.o
+ $(CC) -o $@ $^ $(LDFLAGS) -lrt -lz $(VHDLIBS) $(AIOLIBS) $(MEMSHRLIBS) -lm
tapdisk-client: tapdisk-client.o
- $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(LIBS) $(LBLIBS_img)
+ $(CC) -o $@ $^ $(LDFLAGS) -lrt
tapdisk-stream tapdisk-diff: %: %.o $(TAP-OBJS-y) $(BLK-OBJS-y)
- $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(LIBS) $(AIOLIBS) $(MEMSHRLIBS)
$(LBLIBS_img)
+ $(CC) -o $@ $^ $(LDFLAGS) -lrt -lz $(VHDLIBS) $(AIOLIBS) $(MEMSHRLIBS) -lm
td-util: td.o tapdisk-utils.o tapdisk-log.o $(PORTABLE-OBJS-y)
- $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(LIBS) $(LBLIBS_img)
+ $(CC) -o $@ $^ $(LDFLAGS) $(VHDLIBS)
lock-util: lock.c
- $(CC) $(CFLAGS) -DUTIL -o lock-util lock.c $(LDFLAGS) $(LIBS)
+ $(CC) $(CFLAGS) -DUTIL -o lock-util lock.c $(LDFLAGS)
.PHONY: qcow-util
qcow-util: img2qcow qcow2raw qcow-create
img2qcow qcow2raw qcow-create: %: %.o $(TAP-OBJS-y) $(BLK-OBJS-y)
- $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(LIBS) $(AIOLIBS) $(MEMSHRLIBS)
$(LBLIBS_img)
+ $(CC) -o $@ $^ $(LDFLAGS) -lrt -lz $(VHDLIBS) $(AIOLIBS) $(MEMSHRLIBS) -lm
install: all
$(INSTALL_DIR) -p $(DESTDIR)$(INST_DIR)
diff -r f35234b6636a -r 7e326d27d899 tools/console/Makefile
--- a/tools/console/Makefile Tue Mar 15 16:33:59 2011 +0000
+++ b/tools/console/Makefile Wed Mar 16 10:38:52 2011 +0000
@@ -1,4 +1,3 @@
-
XEN_ROOT=../..
include $(XEN_ROOT)/tools/Rules.mk
@@ -8,9 +7,10 @@ CFLAGS += $(CFLAGS_libxenstore)
CFLAGS += $(CFLAGS_libxenstore)
LDLIBS += $(LDLIBS_libxenctrl)
LDLIBS += $(LDLIBS_libxenstore)
-LDLIBS += $(UTIL_LIBS)
LDLIBS += $(SOCKET_LIBS)
-LDLIBS += -lrt
+
+LDLIBS_xenconsoled += $(UTIL_LIBS)
+LDLIBS_xenconsoled += -lrt
BIN = xenconsoled xenconsole
@@ -23,10 +23,10 @@ clean:
$(RM) client/*.o daemon/*.o
xenconsoled: $(patsubst %.c,%.o,$(wildcard daemon/*.c))
- $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) $(LDLIBS)
+ $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) $(LDLIBS) $(LDLIBS_xenconsoled)
xenconsole: $(patsubst %.c,%.o,$(wildcard client/*.c))
- $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) $(LDLIBS)
+ $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) $(LDLIBS) $(LDLIBS_xenconsole)
.PHONY: install
install: $(BIN)
diff -r f35234b6636a -r 7e326d27d899 tools/misc/Makefile
--- a/tools/misc/Makefile Tue Mar 15 16:33:59 2011 +0000
+++ b/tools/misc/Makefile Wed Mar 16 10:38:52 2011 +0000
@@ -14,6 +14,14 @@ TARGETS-$(CONFIG_X86) += xen-detect xen-
TARGETS-$(CONFIG_X86) += xen-detect xen-hvmctx xen-hvmcrash
TARGETS-$(CONFIG_MIGRATE) += xen-hptool
TARGETS := $(TARGETS-y)
+
+LDLIBS_xenperf := $(LDLIBS_libxenctrl)
+LDLIBS_xenpm := $(LDLIBS_libxenctrl)
+LDLIBS_xenlockprof := $(LDLIBS_libxenctrl)
+LDLIBS_xenwatchdogd := $(LDLIBS_libxenctrl)
+LDLIBS_xen-hvmctx := $(LDLIBS_libxenctrl)
+LDLIBS_xen-hvmcrash := $(LDLIBS_libxenctrl)
+LDLIBS_xen-hptool := $(LDLIBS_libxenctrl) $(LDLIBS_libxenguest)
$(LDLIBS_libxenstore)
SUBDIRS-$(CONFIG_LOMOUNT) += lomount
SUBDIRS-$(CONFIG_MINITERM) += miniterm
@@ -52,7 +60,7 @@ clean:
$(CC) -c $(CFLAGS) -o $@ $<
xen-hvmctx xen-hvmcrash xenperf xenpm gtracestat xenlockprof xen-hptool
xenwatchdogd: %: %.o Makefile
- $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) $(LDLIBS_libxenctrl)
$(LDLIBS_libxenguest) $(LDLIBS_libxenstore)
+ $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) $(LDLIBS_$*)
gtraceview: %: %.o Makefile
$(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) $(CURSES_LIBS)
diff -r f35234b6636a -r 7e326d27d899 tools/xcutils/Makefile
--- a/tools/xcutils/Makefile Tue Mar 15 16:33:59 2011 +0000
+++ b/tools/xcutils/Makefile Wed Mar 16 10:38:52 2011 +0000
@@ -11,12 +11,20 @@ XEN_ROOT = ../..
XEN_ROOT = ../..
include $(XEN_ROOT)/tools/Rules.mk
-CFLAGS += -Werror
-CFLAGS += $(CFLAGS_libxenctrl) $(CFLAGS_libxenguest) $(CFLAGS_libxenstore)
PROGRAMS = xc_restore xc_save readnotes lsevtchn
-LDLIBS = $(LDLIBS_libxenctrl) $(LDLIBS_libxenguest) $(LDLIBS_libxenstore)
+CFLAGS += -Werror
+
+CFLAGS_xc_restore := $(CFLAGS_libxenctrl) $(CFLAGS_libxenguest)
+CFLAGS_xc_save := $(CFLAGS_libxenctrl) $(CFLAGS_libxenguest)
$(CFLAGS_libxenstore)
+CFLAGS_readnotes := $(CFLAGS_libxenctrl) $(CFLAGS_libxenguest)
+CFLAGS_lsevtchn := $(CFLAGS_libxenctrl)
+
+LDLIBS_xc_restore := $(LDLIBS_libxenctrl) $(LDLIBS_libxenguest)
+LDLIBS_xc_save := $(LDLIBS_libxenctrl) $(LDLIBS_libxenguest)
$(LDLIBS_libxenstore)
+LDLIBS_readnotes := $(LDLIBS_libxenctrl) $(LDLIBS_libxenguest)
+LDLIBS_lsevtchn := $(LDLIBS_libxenctrl)
.PHONY: all
all: build
@@ -24,8 +32,11 @@ all: build
.PHONY: build
build: $(PROGRAMS)
+%.o: %.c
+ $(CC) $(CFLAGS) $(CFLAGS_$*) -c $^ -o $@
+
$(PROGRAMS): %: %.o
- $(CC) $(CFLAGS) $(LDFLAGS) $^ $(LDLIBS) -o $@
+ $(CC) $(CFLAGS) $(LDFLAGS) $^ $(LDLIBS) $(LDLIBS_$*) -o $@
.PHONY: install
install: build
diff -r f35234b6636a -r 7e326d27d899 tools/xcutils/lsevtchn.c
--- a/tools/xcutils/lsevtchn.c Tue Mar 15 16:33:59 2011 +0000
+++ b/tools/xcutils/lsevtchn.c Wed Mar 16 10:38:52 2011 +0000
@@ -4,9 +4,7 @@
#include <string.h>
#include <stdio.h>
-#include <xs.h>
#include <xenctrl.h>
-#include <xenguest.h>
int main(int argc, char **argv)
{
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
Ian Campbell
2011-Mar-16 10:40 UTC
[Xen-devel] Re: [PATCH] tools: do not link against unused libraries
This follows on from my "tools: build system fix indirect library usage and --as-needed" series from yesterday. I figure this sort of thing is inevitably going to cause fallout on various system so it''s probably better to get it into 4.2 as early in the cycle as possible to give plenty of time to squish the warts. Ian. On Wed, 2011-03-16 at 10:38 +0000, Ian Campbell wrote:> # HG changeset patch > # User Ian Campbell <ian.campbell@citrix.com> > # Date 1300271932 0 > # Node ID 7e326d27d899a3133479c8b7c983f660cdeda48c > # Parent f35234b6636a0410a7d5eaa409e98ebe59080e4f > tools: do not link against unused libraries. > > A fair few things under tools link against libraries which they don''t > even use. > > Most of this appears to come from copy-and-pasting previous Makefile > snippets and cargo-culting plus the tendency to define global $(LIBS) > even for Makefiles which build multiple separate utilities or > libraries. > > Identified by comparing a build with --as-needed to one without by > looking at the NEEDED header of all ELF objects. > > Signed-off-by: Ian Campbell <ian.campbell@citrix.com> > > diff -r f35234b6636a -r 7e326d27d899 tools/blktap2/drivers/Makefile > --- a/tools/blktap2/drivers/Makefile Tue Mar 15 16:33:59 2011 +0000 > +++ b/tools/blktap2/drivers/Makefile Wed Mar 16 10:38:52 2011 +0000 > @@ -23,11 +23,7 @@ CFLAGS += -fPIC > CFLAGS += -fPIC > endif > > -LIBS += -lrt -lz > - > -LBLIBS_img := $(LDLIBS_libxenctrl) $(CRYPT_LIB) -lpthread -lz -lm > - > -LIBS += -L$(LIBVHDDIR) -lvhd > +VHDLIBS := -L$(LIBVHDDIR) -lvhd > > REMUS-OBJS := block-remus.o > REMUS-OBJS += hashtable.o > @@ -88,26 +84,26 @@ all: $(IBIN) lock-util qcow-util > all: $(IBIN) lock-util qcow-util > > > -tapdisk2: $(TAP-OBJS-y) $(BLK-OBJS-y) $(MISC-OBJS-y) tapdisk2.c > - $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(LIBS) $(AIOLIBS) $(MEMSHRLIBS) $(LBLIBS_img) > +tapdisk2: $(TAP-OBJS-y) $(BLK-OBJS-y) $(MISC-OBJS-y) tapdisk2.o > + $(CC) -o $@ $^ $(LDFLAGS) -lrt -lz $(VHDLIBS) $(AIOLIBS) $(MEMSHRLIBS) -lm > > tapdisk-client: tapdisk-client.o > - $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(LIBS) $(LBLIBS_img) > + $(CC) -o $@ $^ $(LDFLAGS) -lrt > > tapdisk-stream tapdisk-diff: %: %.o $(TAP-OBJS-y) $(BLK-OBJS-y) > - $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(LIBS) $(AIOLIBS) $(MEMSHRLIBS) $(LBLIBS_img) > + $(CC) -o $@ $^ $(LDFLAGS) -lrt -lz $(VHDLIBS) $(AIOLIBS) $(MEMSHRLIBS) -lm > > td-util: td.o tapdisk-utils.o tapdisk-log.o $(PORTABLE-OBJS-y) > - $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(LIBS) $(LBLIBS_img) > + $(CC) -o $@ $^ $(LDFLAGS) $(VHDLIBS) > > lock-util: lock.c > - $(CC) $(CFLAGS) -DUTIL -o lock-util lock.c $(LDFLAGS) $(LIBS) > + $(CC) $(CFLAGS) -DUTIL -o lock-util lock.c $(LDFLAGS) > > .PHONY: qcow-util > qcow-util: img2qcow qcow2raw qcow-create > > img2qcow qcow2raw qcow-create: %: %.o $(TAP-OBJS-y) $(BLK-OBJS-y) > - $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(LIBS) $(AIOLIBS) $(MEMSHRLIBS) $(LBLIBS_img) > + $(CC) -o $@ $^ $(LDFLAGS) -lrt -lz $(VHDLIBS) $(AIOLIBS) $(MEMSHRLIBS) -lm > > install: all > $(INSTALL_DIR) -p $(DESTDIR)$(INST_DIR) > diff -r f35234b6636a -r 7e326d27d899 tools/console/Makefile > --- a/tools/console/Makefile Tue Mar 15 16:33:59 2011 +0000 > +++ b/tools/console/Makefile Wed Mar 16 10:38:52 2011 +0000 > @@ -1,4 +1,3 @@ > - > XEN_ROOT=../.. > include $(XEN_ROOT)/tools/Rules.mk > > @@ -8,9 +7,10 @@ CFLAGS += $(CFLAGS_libxenstore) > CFLAGS += $(CFLAGS_libxenstore) > LDLIBS += $(LDLIBS_libxenctrl) > LDLIBS += $(LDLIBS_libxenstore) > -LDLIBS += $(UTIL_LIBS) > LDLIBS += $(SOCKET_LIBS) > -LDLIBS += -lrt > + > +LDLIBS_xenconsoled += $(UTIL_LIBS) > +LDLIBS_xenconsoled += -lrt > > BIN = xenconsoled xenconsole > > @@ -23,10 +23,10 @@ clean: > $(RM) client/*.o daemon/*.o > > xenconsoled: $(patsubst %.c,%.o,$(wildcard daemon/*.c)) > - $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) $(LDLIBS) > + $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) $(LDLIBS) $(LDLIBS_xenconsoled) > > xenconsole: $(patsubst %.c,%.o,$(wildcard client/*.c)) > - $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) $(LDLIBS) > + $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) $(LDLIBS) $(LDLIBS_xenconsole) > > .PHONY: install > install: $(BIN) > diff -r f35234b6636a -r 7e326d27d899 tools/misc/Makefile > --- a/tools/misc/Makefile Tue Mar 15 16:33:59 2011 +0000 > +++ b/tools/misc/Makefile Wed Mar 16 10:38:52 2011 +0000 > @@ -14,6 +14,14 @@ TARGETS-$(CONFIG_X86) += xen-detect xen- > TARGETS-$(CONFIG_X86) += xen-detect xen-hvmctx xen-hvmcrash > TARGETS-$(CONFIG_MIGRATE) += xen-hptool > TARGETS := $(TARGETS-y) > + > +LDLIBS_xenperf := $(LDLIBS_libxenctrl) > +LDLIBS_xenpm := $(LDLIBS_libxenctrl) > +LDLIBS_xenlockprof := $(LDLIBS_libxenctrl) > +LDLIBS_xenwatchdogd := $(LDLIBS_libxenctrl) > +LDLIBS_xen-hvmctx := $(LDLIBS_libxenctrl) > +LDLIBS_xen-hvmcrash := $(LDLIBS_libxenctrl) > +LDLIBS_xen-hptool := $(LDLIBS_libxenctrl) $(LDLIBS_libxenguest) $(LDLIBS_libxenstore) > > SUBDIRS-$(CONFIG_LOMOUNT) += lomount > SUBDIRS-$(CONFIG_MINITERM) += miniterm > @@ -52,7 +60,7 @@ clean: > $(CC) -c $(CFLAGS) -o $@ $< > > xen-hvmctx xen-hvmcrash xenperf xenpm gtracestat xenlockprof xen-hptool xenwatchdogd: %: %.o Makefile > - $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) $(LDLIBS_libxenctrl) $(LDLIBS_libxenguest) $(LDLIBS_libxenstore) > + $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) $(LDLIBS_$*) > > gtraceview: %: %.o Makefile > $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) $(CURSES_LIBS) > diff -r f35234b6636a -r 7e326d27d899 tools/xcutils/Makefile > --- a/tools/xcutils/Makefile Tue Mar 15 16:33:59 2011 +0000 > +++ b/tools/xcutils/Makefile Wed Mar 16 10:38:52 2011 +0000 > @@ -11,12 +11,20 @@ XEN_ROOT = ../.. > XEN_ROOT = ../.. > include $(XEN_ROOT)/tools/Rules.mk > > -CFLAGS += -Werror > -CFLAGS += $(CFLAGS_libxenctrl) $(CFLAGS_libxenguest) $(CFLAGS_libxenstore) > > PROGRAMS = xc_restore xc_save readnotes lsevtchn > > -LDLIBS = $(LDLIBS_libxenctrl) $(LDLIBS_libxenguest) $(LDLIBS_libxenstore) > +CFLAGS += -Werror > + > +CFLAGS_xc_restore := $(CFLAGS_libxenctrl) $(CFLAGS_libxenguest) > +CFLAGS_xc_save := $(CFLAGS_libxenctrl) $(CFLAGS_libxenguest) $(CFLAGS_libxenstore) > +CFLAGS_readnotes := $(CFLAGS_libxenctrl) $(CFLAGS_libxenguest) > +CFLAGS_lsevtchn := $(CFLAGS_libxenctrl) > + > +LDLIBS_xc_restore := $(LDLIBS_libxenctrl) $(LDLIBS_libxenguest) > +LDLIBS_xc_save := $(LDLIBS_libxenctrl) $(LDLIBS_libxenguest) $(LDLIBS_libxenstore) > +LDLIBS_readnotes := $(LDLIBS_libxenctrl) $(LDLIBS_libxenguest) > +LDLIBS_lsevtchn := $(LDLIBS_libxenctrl) > > .PHONY: all > all: build > @@ -24,8 +32,11 @@ all: build > .PHONY: build > build: $(PROGRAMS) > > +%.o: %.c > + $(CC) $(CFLAGS) $(CFLAGS_$*) -c $^ -o $@ > + > $(PROGRAMS): %: %.o > - $(CC) $(CFLAGS) $(LDFLAGS) $^ $(LDLIBS) -o $@ > + $(CC) $(CFLAGS) $(LDFLAGS) $^ $(LDLIBS) $(LDLIBS_$*) -o $@ > > .PHONY: install > install: build > diff -r f35234b6636a -r 7e326d27d899 tools/xcutils/lsevtchn.c > --- a/tools/xcutils/lsevtchn.c Tue Mar 15 16:33:59 2011 +0000 > +++ b/tools/xcutils/lsevtchn.c Wed Mar 16 10:38:52 2011 +0000 > @@ -4,9 +4,7 @@ > #include <string.h> > #include <stdio.h> > > -#include <xs.h> > #include <xenctrl.h> > -#include <xenguest.h> > > int main(int argc, char **argv) > {_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Ian Jackson
2011-Mar-17 19:42 UTC
Re: [Xen-devel] [PATCH] tools: do not link against unused libraries
Ian Campbell writes ("[Xen-devel] [PATCH] tools: do not link against unused
libraries"):> tools: do not link against unused libraries.
Applied, thanks.
Ian.
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
Ian Jackson
2011-Mar-21 10:54 UTC
Re: [Xen-devel] [PATCH] tools: do not link against unused libraries
Ian Campbell writes ("[Xen-devel] [PATCH] tools: do not link against unused
libraries"):> diff -r f35234b6636a -r 7e326d27d899 tools/console/Makefile
> --- a/tools/console/Makefile Tue Mar 15 16:33:59 2011 +0000
> +++ b/tools/console/Makefile Wed Mar 16 10:38:52 2011 +0000
> @@ -1,4 +1,3 @@
> -
> XEN_ROOT=../..
> include $(XEN_ROOT)/tools/Rules.mk
>
> @@ -8,9 +7,10 @@ CFLAGS += $(CFLAGS_libxenstore)
I applied this (on Friday). I had to fix up a conflict in this
whitespace hunk :-).
Ian.
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
Seemingly Similar Threads
- [PATCH 0 of 2 RESEND] tools: add two new compile flags and perform checks on user defined folders.
- tools/libxl: fix compilation and link errors on NetBSD
- [PATCH 6/7] Create 2 ocaml packages, libxen-4.1-ocaml and libxen-4.1-ocaml-dev.
- [PATCH] Tools: build tests
- [OCAML 0/7] V4 or so of the xen ocaml packaging patches