qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] libcacard: add libcacard.la target


From: Anthony Liguori
Subject: Re: [Qemu-devel] [PATCH] libcacard: add libcacard.la target
Date: Mon, 16 May 2011 08:28:49 -0500
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.17) Gecko/20110424 Lightning/1.0b2 Thunderbird/3.1.10

On 05/16/2011 08:25 AM, Alon Levy wrote:
No flag to configure is required. Instead, added a libcacard.la target that
is not built by default, only when requested explicitly via:

mkdir build
cd build
../configure
make libcacard.la
make install-libcacard

Uses libtool to do actual linking of object files and shared library, and
installing. Tested only under linux, but supposed to work on other systems as
well.

If libtool isn't found you get a message complaining about that, only at build
time (since it is not a default target I did not add a message at configure
time).

Note: please ignore the following warning message, it is harmless, and fixing
it would require using libtool to build trace-dtrace.lo which, since it isn't
built by gcc, I don't know how to do.

  *** Warning: Linking the shared library libcacard.la against the non-libtool
  *** objects  ../trace-dtrace.o is not portable!

I don't think slipping in libtool like this is such a good idea.

Why do you need this target?

Isn't la just a static archive compiled with -fPIC? Doesn't the whole code base need to be compiled with -fPIC then (and isn't the warning above a legitimate concern?).

Regards,

Anthony Liguori

---
  Makefile           |   17 +++++++++++++++++
  configure          |   12 +++++++++++-
  libcacard/Makefile |   38 ++++++++++++++++++++++++++++++++++----
  3 files changed, 62 insertions(+), 5 deletions(-)

diff --git a/Makefile b/Makefile
index 2b0438c..0215307 100644
--- a/Makefile
+++ b/Makefile
@@ -119,6 +119,23 @@ version.o: $(SRC_PATH)/version.rc config-host.mak

  version-obj-$(CONFIG_WIN32) += version.o
  ######################################################################
+# Support building shared library libcacard
+
+.PHONY: libcacard.la install-libcacard
+ifeq ($(LIBTOOL),)
+libcacard.la:
+       @echo libtool is missing, please install and rerun configure
+
+install-libcacard:
+       @echo libtool is missing, please install and rerun configure
+else
+libcacard.la: $(GENERATED_HEADERS) $(oslib-obj-y) qemu-malloc.o 
qemu-timer-common.o $(trace-obj-y)
+       $(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C libcacard V="$(V)" 
TARGET_DIR="$*/" libcacard.la,)
+
+install-libcacard: libcacard.la
+       $(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C libcacard V="$(V)" 
TARGET_DIR="$*/" install-libcacard,)
+endif
+######################################################################

  qemu-img.o: qemu-img-cmds.h
  qemu-img.o qemu-tool.o qemu-nbd.o qemu-io.o cmd.o: $(GENERATED_HEADERS)
diff --git a/configure b/configure
index 0627f1d..e62841e 100755
--- a/configure
+++ b/configure
@@ -1276,6 +1276,15 @@ if ! has $pkg_config; then
  fi

  ##########################################
+# libtool probe
+
+if ! has libtool; then
+    libtool=
+else
+    libtool=libtool
+fi
+
+##########################################
  # Sparse probe
  if test "$sparse" != "no" ; then
    if has cgcc; then
@@ -3060,6 +3069,7 @@ echo "AR=$ar">>  $config_host_mak
  echo "OBJCOPY=$objcopy">>  $config_host_mak
  echo "LD=$ld">>  $config_host_mak
  echo "WINDRES=$windres">>  $config_host_mak
+echo "LIBTOOL=$libtool">>  $config_host_mak
  echo "CFLAGS=$CFLAGS">>  $config_host_mak
  echo "QEMU_CFLAGS=$QEMU_CFLAGS">>  $config_host_mak
  echo "QEMU_INCLUDES=$QEMU_INCLUDES">>  $config_host_mak
@@ -3595,7 +3605,7 @@ if [ "$source_path" != `pwd` ]; then
      # out of tree build
      mkdir -p libcacard
      rm -f libcacard/Makefile
-    ln -s "$source_path/libcacard/Makefile" libcacard/Makefile
+    symlink "$source_path/libcacard/Makefile" libcacard/Makefile
  fi

  d=libuser
diff --git a/libcacard/Makefile b/libcacard/Makefile
index 1d34df0..3a5ad61 100644
--- a/libcacard/Makefile
+++ b/libcacard/Makefile
@@ -4,15 +4,45 @@

  $(call set-vpath, $(SRC_PATH):$(SRC_PATH)/libcacard)

-QEMU_OBJS=$(addprefix ../, $(oslib-obj-y) $(trace-obj-y) qemu-malloc.o 
qemu-timer-common.o)
+QEMU_TRACE_OBJS=$(addprefix ../,$(trace-obj-y))
+
+QEMU_BASE_OBJS=$(addprefix ../,$(oslib-obj-y) qemu-malloc.o 
qemu-timer-common.o)
+
+# objects linked against normal qemu binaries, not compiled with libtool
+QEMU_OBJS = $(QEMU_BASE_OBJS) $(QEMU_TRACE_OBJS)
+
+# objects linked into a shared library, built with libtool with -fPIC if 
required
+QEMU_BASE_OBJS_LIB=$(addsuffix .lo,$(basename $(QEMU_BASE_OBJS)))
+
+QEMU_OBJS_LIB = $(QEMU_BASE_OBJS_LIB) $(QEMU_TRACE_OBJS)

  QEMU_CFLAGS+=-I../

+libcacard.lib-y=$(addsuffix .lo,$(basename $(libcacard-y)))
+
  vscclient: $(libcacard-y) $(QEMU_OBJS) vscclient.o
-       $(call quiet-command,$(CC) $(libcacard_libs) -lrt -o $@ $^,"  LINK  
$(TARGET_DIR)$@")
+       $(call quiet-command,$(CC) $(libcacard_libs) -lrt -o $@ $^,"  LINK  $@")
+
+clean:
+       rm -f *.o */*.o *.d */*.d *.a */*.a *~ */*~ vscclient libcacard.so *.lo 
.libs/* *.la
+       rm -Rf .libs

  all: vscclient

-clean:
-       rm -f *.o */*.o *.d */*.d *.a */*.a *~ */*~ vscclient
+ifeq ($(LIBTOOL),)
+libcacard.la:
+       @echo libtool is missing, please install and rerun configure
+
+install-libcacard:
+       @echo libtool is missing, please install and rerun configure
+else
+$(libcacard.lib-y) $(QEMU_BASE_OBJS_LIB) : %.lo: %.c
+       $(call quiet-command,libtool --mode=compile --quiet --tag=CC $(CC) $(QEMU_CFLAGS) 
$(QEMU_INCLUDES) $(QEMU_DGFLAGS) $(CFLAGS) -c -o $@ $<,"  lt CC $@")
+
+libcacard.la: $(libcacard.lib-y) $(QEMU_OBJS_LIB)
+       $(call quiet-command,libtool --mode=link --quiet --tag=CC $(CC) $(libcacard_libs) 
-lrt -rpath $(libdir) -o $@ $^,"  lt LINK $@")

+install-libcacard: libcacard.la
+       $(INSTALL_DIR) "$(DESTDIR)$(libdir)"
+       libtool --mode=install $(INSTALL_PROG) libcacard.la 
"$(DESTDIR)$(libdir)"
+endif




reply via email to

[Prev in Thread] Current Thread [Next in Thread]