From fb37726db77b21f3731b90693d2c93ade1777528 Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Wed, 2 Sep 2015 10:57:27 +0100 Subject: crypto: move crypto objects out of libqemuutil.la Future patches will be adding more crypto related APIs which rely on QOM infrastructure. This creates a problem, because QOM relies on library constructors to register objects. When you have a file in a static .a library though which is only referenced by a constructor the linker is dumb and will drop that file when linking to the final executable :-( The only workaround for this is to link the .a library to the executable using the -Wl,--whole-archive flag, but this creates its own set of problems because QEMU is relying on lazy linking for libqemuutil.a. Using --whole-archive majorly increases the size of final executables as they now contain a bunch of object code they don't actually use. The least bad option is to thus not include the crypto objects in libqemuutil.la, and instead define a crypto-obj-y variable that is referenced directly by all the executables that need this code (tools + softmmu, but not qemu-ga). We avoid pulling entire of crypto-obj-y into the userspace emulators as that would force them to link to gnutls too, which is not required. Signed-off-by: Daniel P. Berrange --- crypto/Makefile.objs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'crypto/Makefile.objs') diff --git a/crypto/Makefile.objs b/crypto/Makefile.objs index b05013831b..2167fd2fdf 100644 --- a/crypto/Makefile.objs +++ b/crypto/Makefile.objs @@ -1,5 +1,8 @@ -util-obj-y += init.o -util-obj-y += hash.o -util-obj-y += aes.o -util-obj-y += desrfb.o -util-obj-y += cipher.o +crypto-obj-y = init.o +crypto-obj-y += hash.o +crypto-obj-y += aes.o +crypto-obj-y += desrfb.o +crypto-obj-y += cipher.o + +# Let the userspace emulators avoid linking gnutls/etc +crypto-aes-obj-y = aes.o -- cgit v1.2.3