[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] libcacard: add libcacard.la target
From: |
Alon Levy |
Subject: |
[Qemu-devel] [PATCH] libcacard: add libcacard.la target |
Date: |
Tue, 17 May 2011 15:03:45 +0300 |
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).
New build artifacts:
.libs subdirectories (at <buildroot> and <buildroot>/libcacard)
*.lo files (at same locations as the respective o files)
Added %.lo : %.c rule that uses libtool.
Updated clean rule to clean up those artifacts.
Added specific rule to call dtrace with libtool wrapper (note that because of
a current upstream dtrace bug fixed by systemtap b1568fd85 commit the -fPIC flag
isn't actually passed on. still current dtrace+libtool produced object links
fine).
Tested to link and load with all tracing backends except ust (no default package
for my development computer for ust).
---
Makefile | 20 +++++++++++++++++++-
Makefile.objs | 3 +++
configure | 12 +++++++++++-
libcacard/Makefile | 32 ++++++++++++++++++++++++++++----
rules.mak | 3 +++
5 files changed, 64 insertions(+), 6 deletions(-)
diff --git a/Makefile b/Makefile
index 2b0438c..c71026c 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 $(addsuffix .lo, $(basename $(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)
@@ -149,7 +166,8 @@ clean:
# avoid old build problems by removing potentially incorrect old files
rm -f config.mak op-i386.h opc-i386.h gen-op-i386.h op-arm.h opc-arm.h
gen-op-arm.h
rm -f qemu-options.def
- rm -f *.o *.d *.a $(TOOLS) TAGS cscope.* *.pod *~ */*~
+ rm -f *.o *.d *.a *.lo $(TOOLS) TAGS cscope.* *.pod *~ */*~
+ rm -Rf .libs
rm -f slirp/*.o slirp/*.d audio/*.o audio/*.d block/*.o block/*.d
net/*.o net/*.d fsdev/*.o fsdev/*.d ui/*.o ui/*.d
rm -f qemu-img-cmds.h
rm -f trace.c trace.h trace.c-timestamp trace.h-timestamp
diff --git a/Makefile.objs b/Makefile.objs
index 4478c61..850e707 100644
--- a/Makefile.objs
+++ b/Makefile.objs
@@ -344,6 +344,9 @@ trace-dtrace.dtrace-timestamp: $(SRC_PATH)/trace-events
config-host.mak
trace-dtrace.o: trace-dtrace.dtrace $(GENERATED_HEADERS)
$(call quiet-command,dtrace -o $@ -G -s $<, " GEN trace-dtrace.o")
+trace-dtrace.lo: trace-dtrace.dtrace
+ $(call quiet-command,libtool --mode=compile --tag=CC dtrace -o $@ -G -s
$<, " lt GEN trace-dtrace.o")
+
simpletrace.o: simpletrace.c $(GENERATED_HEADERS)
ifeq ($(TRACE_BACKEND),dtrace)
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..a35bca4 100644
--- a/libcacard/Makefile
+++ b/libcacard/Makefile
@@ -4,15 +4,39 @@
$(call set-vpath, $(SRC_PATH):$(SRC_PATH)/libcacard)
-QEMU_OBJS=$(addprefix ../, $(oslib-obj-y) $(trace-obj-y) qemu-malloc.o
qemu-timer-common.o)
+# objects linked against normal qemu binaries, not compiled with libtool
+QEMU_OBJS=$(addprefix ../,$(oslib-obj-y) qemu-malloc.o qemu-timer-common.o
$(trace-obj-y))
+
+# objects linked into a shared library, built with libtool with -fPIC if
required
+QEMU_OBJS_LIB=$(addsuffix .lo,$(basename $(QEMU_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 *.lo .libs/* *.la
+ rm -Rf .libs
all: vscclient
-clean:
- rm -f *.o */*.o *.d */*.d *.a */*.a *~ */*~ vscclient
+#########################################################################
+# Rules for building libcacard standalone library
+
+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: $(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
diff --git a/rules.mak b/rules.mak
index ed59c9e..509cc01 100644
--- a/rules.mak
+++ b/rules.mak
@@ -17,6 +17,9 @@ QEMU_DGFLAGS += -MMD -MP -MT $@ -MF $(*D)/$(*F).d
%.o: %.c
$(call quiet-command,$(CC) $(QEMU_CFLAGS) $(QEMU_INCLUDES)
$(QEMU_DGFLAGS) $(CFLAGS) -c -o $@ $<," CC $(TARGET_DIR)$@")
+%.lo: %.c
+ $(call quiet-command,libtool --mode=compile --quiet --tag=CC $(CC)
$(QEMU_CFLAGS) $(QEMU_INCLUDES) $(QEMU_DGFLAGS) $(CFLAGS) -c -o $@ $<," lt CC
$@")
+
%.o: %.S
$(call quiet-command,$(CC) $(QEMU_CFLAGS) $(QEMU_INCLUDES)
$(QEMU_DGFLAGS) $(CFLAGS) -c -o $@ $<," AS $(TARGET_DIR)$@")
--
1.7.5.1
- Re: [Qemu-devel] [PATCH 2/2] libcacard: add libcacard.la target, (continued)
- Re: [Qemu-devel] [PATCH 2/2] libcacard: add libcacard.la target, Paolo Bonzini, 2011/05/16
- Re: [Qemu-devel] [PATCH 2/2] libcacard: add libcacard.la target, Alon Levy, 2011/05/16
- Re: [Qemu-devel] [PATCH 2/2] libcacard: add libcacard.la target, Paolo Bonzini, 2011/05/16
- [Qemu-devel] [PATCH] libcacard: add libcacard.la target, Alon Levy, 2011/05/16
- Re: [Qemu-devel] [PATCH] libcacard: add libcacard.la target, Anthony Liguori, 2011/05/16
- Re: [Qemu-devel] [PATCH] libcacard: add libcacard.la target, Paolo Bonzini, 2011/05/16
- Re: [Qemu-devel] [PATCH] libcacard: add libcacard.la target, Alon Levy, 2011/05/16
- Re: [Qemu-devel] [PATCH] libcacard: add libcacard.la target, Paolo Bonzini, 2011/05/16
- Re: [Qemu-devel] [PATCH] libcacard: add libcacard.la target, Alon Levy, 2011/05/16
- Re: [Qemu-devel] [PATCH] libcacard: add libcacard.la target, Alon Levy, 2011/05/16
- [Qemu-devel] [PATCH] libcacard: add libcacard.la target,
Alon Levy <=
- Re: [Qemu-devel] [PATCH] libcacard: add libcacard.la target, Alon Levy, 2011/05/17
- Message not available
- Re: [Qemu-devel] [PATCH] libcacard: add libcacard.la target, Paolo Bonzini, 2011/05/18
- Re: [Qemu-devel] [PATCH] libcacard: add libcacard.la target, Alon Levy, 2011/05/18
[Qemu-devel] [PATCH 1/2] configure: add libdir and --libdir, Alon Levy, 2011/05/15