All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Daniel P. Berrange" <berrange@redhat.com>
To: qemu-devel@nongnu.org
Cc: Paolo Bonzini <pbonzini@redhat.com>, Gerd Hoffmann <kraxel@redhat.com>
Subject: [Qemu-devel] [PATCH v6 03/11] crypto: move crypto objects out of libqemuutil.la
Date: Wed,  2 Sep 2015 12:18:02 +0100	[thread overview]
Message-ID: <1441192690-15413-4-git-send-email-berrange@redhat.com> (raw)
In-Reply-To: <1441192690-15413-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).

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
---
 Makefile             |  8 +++++---
 Makefile.objs        |  5 ++++-
 Makefile.target      |  2 ++
 crypto/Makefile.objs | 10 +++++-----
 tests/Makefile       |  7 ++++---
 5 files changed, 20 insertions(+), 12 deletions(-)

diff --git a/Makefile b/Makefile
index 340d9c8..5e63da8 100644
--- a/Makefile
+++ b/Makefile
@@ -151,6 +151,7 @@ dummy := $(call unnest-vars,, \
                 qga-vss-dll-obj-y \
                 block-obj-y \
                 block-obj-m \
+                crypto-obj-y \
                 common-obj-y \
                 common-obj-m)
 
@@ -172,6 +173,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-%:
@@ -226,9 +228,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..c7ed989 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,10 @@ 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/
 
 ######################################################################
 # smartcard
diff --git a/Makefile.target b/Makefile.target
index 3e7aafd..2053ecd 100644
--- a/Makefile.target
+++ b/Makefile.target
@@ -170,12 +170,14 @@ target-obj-y-save := $(target-obj-y)
 dummy := $(call unnest-vars,.., \
                block-obj-y \
                block-obj-m \
+               crypto-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_SOFTMMU) += $(crypto-obj-y)
 
 $(QEMU_PROG_BUILD): config-devices.mak
 
diff --git a/crypto/Makefile.objs b/crypto/Makefile.objs
index b050138..2cf5b70 100644
--- a/crypto/Makefile.objs
+++ b/crypto/Makefile.objs
@@ -1,5 +1,5 @@
-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
diff --git a/tests/Makefile b/tests/Makefile
index f7e3619..938e8d5 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -283,7 +283,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)
@@ -350,8 +351,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

  parent reply	other threads:[~2015-09-02 11:18 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-02 11:17 [Qemu-devel] [PATCH v6 00/11] Extract TLS handling code from VNC server Daniel P. Berrange
2015-09-02 11:18 ` [Qemu-devel] [PATCH v6 01/11] qapi: allow override of default enum prefix naming Daniel P. Berrange
2015-09-02 11:18 ` [Qemu-devel] [PATCH v6 02/11] tests: remove repetition in unit test object deps Daniel P. Berrange
2015-09-02 11:18 ` Daniel P. Berrange [this message]
2015-09-02 11:18 ` [Qemu-devel] [PATCH v6 04/11] qom: allow QOM to be linked into tools binaries Daniel P. Berrange
2015-09-02 11:18 ` [Qemu-devel] [PATCH v6 05/11] crypto: introduce new base module for TLS credentials Daniel P. Berrange
2015-09-02 11:18 ` [Qemu-devel] [PATCH v6 06/11] crypto: introduce new module for TLS anonymous credentials Daniel P. Berrange
2015-09-02 11:18 ` [Qemu-devel] [PATCH v6 07/11] crypto: introduce new module for TLS x509 credentials Daniel P. Berrange
2015-09-02 11:18 ` [Qemu-devel] [PATCH v6 08/11] crypto: add sanity checking of " Daniel P. Berrange
2015-09-02 11:18 ` [Qemu-devel] [PATCH v6 09/11] crypto: introduce new module for handling TLS sessions Daniel P. Berrange
2015-09-02 11:18 ` [Qemu-devel] [PATCH v6 10/11] ui: fix return type for VNC I/O functions to be ssize_t Daniel P. Berrange
2015-09-02 11:18 ` [Qemu-devel] [PATCH v6 11/11] ui: convert VNC server to use QCryptoTLSSession Daniel P. Berrange
2015-09-08 10:04 ` [Qemu-devel] [PATCH v6 00/11] Extract TLS handling code from VNC server Paolo Bonzini
2015-09-08 11:24   ` Gerd Hoffmann

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=1441192690-15413-4-git-send-email-berrange@redhat.com \
    --to=berrange@redhat.com \
    --cc=kraxel@redhat.com \
    --cc=pbonzini@redhat.com \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.