kvm tools: Add build target for statically-linked binary
PATCH 1/1 kvm tools: Add build target for statically-linked binary
This commit adds a target for 'lkvm-static' which is linked -static.
(This can be useful to construct kvmtool binaries for minimalist auto-test host filesystems.)
---
Pekka, I found this useful in one of our test setups, hopefully others will too.
Cheers, Matt
tools/kvm/Makefile | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-)
tools/kvm/Makefile +4 -0
@@ -233,6 +233,10 @@ $(PROGRAM): $(DEPS) $(OBJS) $(E) " LINK " $@ $(Q) $(CC) $(CFLAGS) $(OBJS) $(LIBS) -o $@ +$(PROGRAM)-static: $(DEPS) $(OBJS) + $(E) " LINK " $@ + $(Q) $(CC) -static $(CFLAGS) $(OBJS) $(LIBS) -o $@ + $(PROGRAM_ALIAS): $(PROGRAM) $(E) " LN " $@ $(Q) ln -f $(PROGRAM) $@
Signature · 1 line
1.7.0.4
PATCH v2 1/1 kvm tools: Add build target for statically-linked binary
This commit adds a target for 'lkvm-static' which is linked -static.
(This can be useful to construct kvmtool binaries for minimalist auto-test host filesystems.)
---
V2: Argh! Let's remove it on make clean, too...
tools/kvm/Makefile | 6 +++++- 1 files changed, 5 insertions(+), 1 deletions(-)
tools/kvm/Makefile +5 -1
@@ -233,6 +233,10 @@ $(PROGRAM): $(DEPS) $(OBJS) $(E) " LINK " $@ $(Q) $(CC) $(CFLAGS) $(OBJS) $(LIBS) -o $@ +$(PROGRAM)-static: $(DEPS) $(OBJS) + $(E) " LINK " $@ + $(Q) $(CC) -static $(CFLAGS) $(OBJS) $(LIBS) -o $@ + $(PROGRAM_ALIAS): $(PROGRAM) $(E) " LN " $@ $(Q) ln -f $(PROGRAM) $@
@@ -325,7 +329,7 @@ clean: $(Q) rm -f x86/bios/bios-rom.h $(Q) rm -f tests/boot/boot_test.iso $(Q) rm -rf tests/boot/rootfs/ - $(Q) rm -f $(DEPS) $(OBJS) $(PROGRAM) $(PROGRAM_ALIAS) $(GUEST_INIT) $(GUEST_INIT_S2) + $(Q) rm -f $(DEPS) $(OBJS) $(PROGRAM) $(PROGRAM_ALIAS) $(PROGRAM)-static $(GUEST_INIT) $(GUEST_INIT_S2) $(Q) rm -f cscope.* $(Q) rm -f $(KVM_INCLUDE)/common-cmds.h $(Q) rm -f KVMTOOLS-VERSION-FILE
Signature · 1 line
1.7.0.4
Quoted 6 lines · Matt Evans
This commit adds a target for 'lkvm-static' which is linked -static.
(This can be useful to construct kvmtool binaries for minimalist auto-test host filesystems.)
Signed-off-by Matt Evans <[email protected]>
I'm fine with this. Ingo, Sasha?
Quoted 35 lines
---
V2: Argh! Let's remove it on make clean, too...
tools/kvm/Makefile| 6 +++++-1 files changed, 5 insertions(+), 1 deletions(-)tools/kvm/Makefile +5
-1@@ -233,6 +233,10 @@ $(PROGRAM): $(DEPS) $(OBJS) $(E) " LINK " $@ $(Q) $(CC) $(CFLAGS) $(OBJS) $(LIBS) -o $@ +$(PROGRAM)-static: $(DEPS) $(OBJS) + $(E) " LINK " $@ + $(Q) $(CC) -static $(CFLAGS) $(OBJS) $(LIBS) -o $@ + $(PROGRAM_ALIAS): $(PROGRAM) $(E) " LN " $@ $(Q) ln -f $(PROGRAM) $@@@ -325,7 +329,7 @@ clean: $(Q) rm -f x86/bios/bios-rom.h $(Q) rm -f tests/boot/boot_test.iso $(Q) rm -rf tests/boot/rootfs/ - $(Q) rm -f $(DEPS) $(OBJS) $(PROGRAM) $(PROGRAM_ALIAS) $(GUEST_INIT) $(GUEST_INIT_S2) + $(Q) rm -f $(DEPS) $(OBJS) $(PROGRAM) $(PROGRAM_ALIAS) $(PROGRAM)-static $(GUEST_INIT) $(GUEST_INIT_S2) $(Q) rm -f cscope.* $(Q) rm -f $(KVM_INCLUDE)/common-cmds.h $(Q) rm -f KVMTOOLS-VERSION-FILESignature · 1 line
1.7.0.4
Quoted 9 lines · Pekka Enberg
Quoted 6 lines · Matt Evans
This commit adds a target for 'lkvm-static' which is linked -static.
(This can be useful to construct kvmtool binaries for minimalist auto-test host filesystems.)
Signed-off-by Matt Evans <[email protected]>I'm fine with this. Ingo, Sasha?
The tool has some dependencies which are currently dynamically linked, we should either link them statically or disable them if we can't do that.
Signature · 1 line
Sasha.
Quoted 4 lines · Matt Evans
This commit adds a target for 'lkvm-static' which is linked -static.
(This can be useful to construct kvmtool binaries for minimalist auto-test host filesystems.)
This is useful. However, It fails to build for me. Some problem with sdl, bfd and vnc library. Log attached.
Quoted 33 lines
Signed-off-by Matt Evans <[email protected]>---
V2: Argh! Let's remove it on make clean, too...
tools/kvm/Makefile | 6 +++++- 1 files changed, 5 insertions(+), 1 deletions(-)tools/kvm/Makefile +5
-1@@ -233,6 +233,10 @@ $(PROGRAM): $(DEPS) $(OBJS) $(E) " LINK " $@ $(Q) $(CC) $(CFLAGS) $(OBJS) $(LIBS) -o $@ +$(PROGRAM)-static: $(DEPS) $(OBJS) + $(E) " LINK " $@ + $(Q) $(CC) -static $(CFLAGS) $(OBJS) $(LIBS) -o $@ + $(PROGRAM_ALIAS): $(PROGRAM) $(E) " LN " $@ $(Q) ln -f $(PROGRAM) $@@@ -325,7 +329,7 @@ clean: $(Q) rm -f x86/bios/bios-rom.h $(Q) rm -f tests/boot/boot_test.iso $(Q) rm -rf tests/boot/rootfs/ - $(Q) rm -f $(DEPS) $(OBJS) $(PROGRAM) $(PROGRAM_ALIAS) $(GUEST_INIT) $(GUEST_INIT_S2) + $(Q) rm -f $(DEPS) $(OBJS) $(PROGRAM) $(PROGRAM_ALIAS) $(PROGRAM)-static $(GUEST_INIT) $(GUEST_INIT_S2) $(Q) rm -f cscope.* $(Q) rm -f $(KVM_INCLUDE)/common-cmds.h $(Q) rm -f KVMTOOLS-VERSION-FILE
Signature · 1 line
Asias He
Hi Asias,
Remember this patch? :-) I didn't... oops.
Quoted 8 lines · Asias He
Quoted 4 lines · Matt Evans
This commit adds a target for 'lkvm-static' which is linked -static.
(This can be useful to construct kvmtool binaries for minimalist auto-test host filesystems.)
This is useful. However, It fails to build for me. Some problem with sdl, bfd and vnc library. Log attached.
OK, so I've been building statically without the (autodetected) SDL/BFD/VNC libraries, and this works fine on PPC64 and x86.
I'm not quite sure why the libSDL.a/libbfd.a etc. don't statically link.
Sasha's idea of "disable things that don't link correctly" is a good one, though I'm not a Make guru and can't see how to retrospectively unset 'has_SDL', 'has_vncserver' etc. IFF the makefile target is lkvm-static :(
(I guess one way is to try to find every .o that depends on CONFIG_SDL, for example, and add another target compiled without -DCONFIG_SDL :( Ew, and I don't know how to do this.)
This would be easier if we had a proper config system..
In lieu of any good lightweight solutions, can we include this patch as it is still useful for builds on systems without the offending optional libraries?
Cheers,
Matt
Quoted 36 lines
Quoted 34 lines
Signed-off-by Matt Evans <[email protected]>---
V2: Argh! Let's remove it on make clean, too...
tools/kvm/Makefile | 6 +++++- 1 files changed, 5 insertions(+), 1 deletions(-)tools/kvm/Makefile +5
-1@@ -233,6 +233,10 @@ $(PROGRAM): $(DEPS) $(OBJS) $(E) " LINK " $@ $(Q) $(CC) $(CFLAGS) $(OBJS) $(LIBS) -o $@ +$(PROGRAM)-static: $(DEPS) $(OBJS) + $(E) " LINK " $@ + $(Q) $(CC) -static $(CFLAGS) $(OBJS) $(LIBS) -o $@ + $(PROGRAM_ALIAS): $(PROGRAM) $(E) " LN " $@ $(Q) ln -f $(PROGRAM) $@@@ -325,7 +329,7 @@ clean: $(Q) rm -f x86/bios/bios-rom.h $(Q) rm -f tests/boot/boot_test.iso $(Q) rm -rf tests/boot/rootfs/ - $(Q) rm -f $(DEPS) $(OBJS) $(PROGRAM) $(PROGRAM_ALIAS) $(GUEST_INIT) $(GUEST_INIT_S2) + $(Q) rm -f $(DEPS) $(OBJS) $(PROGRAM) $(PROGRAM_ALIAS) $(PROGRAM)-static $(GUEST_INIT) $(GUEST_INIT_S2) $(Q) rm -f cscope.* $(Q) rm -f $(KVM_INCLUDE)/common-cmds.h $(Q) rm -f KVMTOOLS-VERSION-FILE
Quoted 2 lines · Matt Evans
In lieu of any good lightweight solutions, can we include this patch as it is still useful for builds on systems without the offending optional libraries?
How about we do it as a 'make static' target which will generate a static binary without optional libraries (or just libs that don't link statically)?
Signature · 1 line
Sasha.
Quoted 7 lines · Sasha Levin
Quoted 2 lines · Matt Evans
In lieu of any good lightweight solutions, can we include this patch as it is still useful for builds on systems without the offending optional libraries?
How about we do it as a 'make static' target which will generate a static binary without optional libraries (or just libs that don't link statically)?
Sure, but that was my question: how? That 'make static' target can drop -lbfd, -lSDL etc. from the link line but all of the '.o's that we've already built either may depend on one of those libs or may do something different because CONFIG_HAS_SDL (or similar) was set. The only way I can think of doing this is to have 'make static' depend on a second set of $(all_objects_except_without_optional_libs) which are built without CONFIG_HAS_SDL etc., but that'd make Makefile fugly IMHO.
Unless, that is, CFLAGS (and thus CONFIG_HAS_SDL, has_SDL probing, etc.) can somehow change depending on the make target.
Matt