From: "Daniel P. Berrange" <berrange@redhat.com>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>
Subject: [Qemu-devel] [PATCH PULL v3 03/11] crypto: move crypto objects out of libqemuutil.la
Date: Tue, 15 Sep 2015 15:36:10 +0100 [thread overview]
Message-ID: <1442327778-6562-4-git-send-email-berrange@redhat.com> (raw)
In-Reply-To: <1442327778-6562-1-git-send-email-berrange@redhat.com>
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 <berrange@redhat.com>
---
Makefile | 9 ++++++---
Makefile.objs | 6 +++++-
Makefile.target | 4 ++++
crypto/Makefile.objs | 13 ++++++++-----
tests/Makefile | 7 ++++---
5 files changed, 27 insertions(+), 12 deletions(-)
diff --git a/Makefile b/Makefile
index 9ce3972..9c08b11 100644
--- a/Makefile
+++ b/Makefile
@@ -152,6 +152,8 @@ dummy := $(call unnest-vars,, \
qga-vss-dll-obj-y \
block-obj-y \
block-obj-m \
+ crypto-obj-y \
+ crypto-aes-obj-y \
common-obj-y \
common-obj-m)
@@ -173,6 +175,7 @@ SUBDIR_RULES=$(patsubst %,subdir-%, $(TARGET_DIRS))
SOFTMMU_SUBDIR_RULES=$(filter %-softmmu,$(SUBDIR_RULES))
$(SOFTMMU_SUBDIR_RULES): $(block-obj-y)
+$(SOFTMMU_SUBDIR_RULES): $(crypto-obj-y)
$(SOFTMMU_SUBDIR_RULES): config-all-devices.mak
subdir-%:
@@ -227,9 +230,9 @@ util/module.o-cflags = -D'CONFIG_BLOCK_MODULES=$(block-modules)'
qemu-img.o: qemu-img-cmds.h
-qemu-img$(EXESUF): qemu-img.o $(block-obj-y) libqemuutil.a libqemustub.a
-qemu-nbd$(EXESUF): qemu-nbd.o $(block-obj-y) libqemuutil.a libqemustub.a
-qemu-io$(EXESUF): qemu-io.o $(block-obj-y) libqemuutil.a libqemustub.a
+qemu-img$(EXESUF): qemu-img.o $(block-obj-y) $(crypto-obj-y) libqemuutil.a libqemustub.a
+qemu-nbd$(EXESUF): qemu-nbd.o $(block-obj-y) $(crypto-obj-y) libqemuutil.a libqemustub.a
+qemu-io$(EXESUF): qemu-io.o $(block-obj-y) $(crypto-obj-y) libqemuutil.a libqemustub.a
qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o
diff --git a/Makefile.objs b/Makefile.objs
index f094eff..655c1f0 100644
--- a/Makefile.objs
+++ b/Makefile.objs
@@ -2,7 +2,6 @@
# Common libraries for tools and emulators
stub-obj-y = stubs/
util-obj-y = util/ qobject/ qapi/ qapi-types.o qapi-visit.o qapi-event.o
-util-obj-y += crypto/
#######################################################################
# block-obj-y is code used by both qemu system emulation and qemu-img
@@ -21,6 +20,11 @@ block-obj-y += coroutine-$(CONFIG_COROUTINE_BACKEND).o
block-obj-m = block/
+#######################################################################
+# crypto-obj-y is code used by both qemu system emulation and qemu-img
+
+crypto-obj-y = crypto/
+crypto-aes-obj-y = crypto/
######################################################################
# smartcard
diff --git a/Makefile.target b/Makefile.target
index dc32294..3d97966 100644
--- a/Makefile.target
+++ b/Makefile.target
@@ -170,12 +170,16 @@ target-obj-y-save := $(target-obj-y)
dummy := $(call unnest-vars,.., \
block-obj-y \
block-obj-m \
+ crypto-obj-y \
+ crypto-aes-obj-y \
common-obj-y \
common-obj-m)
target-obj-y := $(target-obj-y-save)
all-obj-y += $(common-obj-y)
all-obj-y += $(target-obj-y)
all-obj-$(CONFIG_SOFTMMU) += $(block-obj-y)
+all-obj-$(CONFIG_USER_ONLY) += $(crypto-aes-obj-y)
+all-obj-$(CONFIG_SOFTMMU) += $(crypto-obj-y)
$(QEMU_PROG_BUILD): config-devices.mak
diff --git a/crypto/Makefile.objs b/crypto/Makefile.objs
index b050138..2167fd2 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
diff --git a/tests/Makefile b/tests/Makefile
index 0fcf148..d77ccee 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -290,7 +290,8 @@ test-qom-obj-y = qom/object.o qom/qom-qobject.o \
test-qapi-obj-y = tests/test-qapi-visit.o tests/test-qapi-types.o \
tests/test-qapi-event.o \
$(test-qom-obj-y)
-test-block-obj-y = $(block-obj-y) $(test-util-obj-y)
+test-crypto-obj-y = $(crypto-obj-y) $(test-util-obj-y)
+test-block-obj-y = $(block-obj-y) $(test-crypto-obj-y)
tests/check-qint$(EXESUF): tests/check-qint.o $(test-util-obj-y)
tests/check-qstring$(EXESUF): tests/check-qstring.o $(test-util-obj-y)
@@ -357,8 +358,8 @@ tests/test-opts-visitor$(EXESUF): tests/test-opts-visitor.o $(test-qapi-obj-y)
tests/test-mul64$(EXESUF): tests/test-mul64.o $(test-util-obj-y)
tests/test-bitops$(EXESUF): tests/test-bitops.o $(test-util-obj-y)
-tests/test-crypto-hash$(EXESUF): tests/test-crypto-hash.o $(test-util-obj-y)
-tests/test-crypto-cipher$(EXESUF): tests/test-crypto-cipher.o $(test-util-obj-y)
+tests/test-crypto-hash$(EXESUF): tests/test-crypto-hash.o $(test-crypto-obj-y)
+tests/test-crypto-cipher$(EXESUF): tests/test-crypto-cipher.o $(test-crypto-obj-y)
libqos-obj-y = tests/libqos/pci.o tests/libqos/fw_cfg.o tests/libqos/malloc.o
libqos-obj-y += tests/libqos/i2c.o tests/libqos/libqos.o
--
2.4.3
next prev parent reply other threads:[~2015-09-15 14:36 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-15 14:36 [Qemu-devel] [PATCH PULL v3 00/11] Extract TLS handling code from VNC server Daniel P. Berrange
2015-09-15 14:36 ` [Qemu-devel] [PATCH PULL v3 01/11] qapi: allow override of default enum prefix naming Daniel P. Berrange
2015-09-15 14:36 ` [Qemu-devel] [PATCH PULL v3 02/11] tests: remove repetition in unit test object deps Daniel P. Berrange
2015-09-15 14:36 ` Daniel P. Berrange [this message]
2015-09-15 14:36 ` [Qemu-devel] [PATCH PULL v3 04/11] qom: allow QOM to be linked into tools binaries Daniel P. Berrange
2015-09-15 14:36 ` [Qemu-devel] [PATCH PULL v3 05/11] crypto: introduce new base module for TLS credentials Daniel P. Berrange
2015-09-15 14:36 ` [Qemu-devel] [PATCH PULL v3 06/11] crypto: introduce new module for TLS anonymous credentials Daniel P. Berrange
2015-09-15 14:36 ` [Qemu-devel] [PATCH PULL v3 07/11] crypto: introduce new module for TLS x509 credentials Daniel P. Berrange
2015-09-15 14:36 ` [Qemu-devel] [PATCH PULL v3 08/11] crypto: add sanity checking of " Daniel P. Berrange
2015-09-20 4:47 ` Peter Crosthwaite
2015-09-21 8:48 ` Daniel P. Berrange
2015-09-21 16:38 ` Daniel P. Berrange
2015-09-15 14:36 ` [Qemu-devel] [PATCH PULL v3 09/11] crypto: introduce new module for handling TLS sessions Daniel P. Berrange
2015-09-15 14:36 ` [Qemu-devel] [PATCH PULL v3 10/11] ui: fix return type for VNC I/O functions to be ssize_t Daniel P. Berrange
2015-09-15 14:36 ` [Qemu-devel] [PATCH PULL v3 11/11] ui: convert VNC server to use QCryptoTLSSession Daniel P. Berrange
2015-09-15 16:24 ` [Qemu-devel] [PATCH PULL v3 00/11] Extract TLS handling code from VNC server Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1442327778-6562-4-git-send-email-berrange@redhat.com \
--to=berrange@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).