Skip to contentSkip to conversation

kvm tools: Add build target for statically-linked binary

PATCH Superseded Matt Evans 4 participants 8 messages Jan 9, 2012 – Jan 30, 2012 KVM

v1 of 3 Superseded Latest is v3 →

lore
Share & tools
lore

Matt Evans

author
#0 lore raw

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
index ce3df65..309cc6b 100644
@@ -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
author
#1 lore raw

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
index d54fa47..ebc0c7c 100644
@@ -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
#2 lore raw
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.)

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
index d54fa47..ebc0c7c 100644
@@ -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
#3 lore raw
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.)

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.
#4 lore raw
In reply to Matt Evans
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

---

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
index d54fa47..ebc0c7c 100644
@@ -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
author
#5 lore raw

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

---

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
index d54fa47..ebc0c7c 100644
@@ -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
#6 lore raw
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.
author
#7 lore raw
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