Message ID | 1290702170-3775-5-git-send-email-alevy@redhat.com |
---|---|
State | New |
Headers | show |
On Thu, Nov 25, 2010 at 4:22 PM, Alon Levy <alevy@redhat.com> wrote: > Signed-off-by: Alon Levy <alevy@redhat.com> > --- > Makefile | 6 ++++-- > Makefile.objs | 5 +++++ > Makefile.target | 2 ++ > configure | 24 ++++++++++++++++++++++++ > libcaccard/Makefile | 18 ++++++++++++++++++ > 5 files changed, 53 insertions(+), 2 deletions(-) > create mode 100644 libcaccard/Makefile > > diff --git a/Makefile b/Makefile > index 4e120a2..e673bf1 100644 > --- a/Makefile > +++ b/Makefile > @@ -172,6 +172,8 @@ check-qlist: check-qlist.o qlist.o qint.o $(CHECK_PROG_DEPS) > check-qfloat: check-qfloat.o qfloat.o $(CHECK_PROG_DEPS) > check-qjson: check-qjson.o qfloat.o qint.o qdict.o qstring.o qlist.o qbool.o qjson.o json-streamer.o json-lexer.o json-parser.o $(CHECK_PROG_DEPS) > > +QEMULIBS=libhw32 libhw64 libuser libdis libdis-user libcaccard > + > 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 > @@ -183,7 +185,7 @@ clean: > rm -f trace-dtrace.dtrace trace-dtrace.dtrace-timestamp > rm -f trace-dtrace.h trace-dtrace.h-timestamp > $(MAKE) -C tests clean > - for d in $(ALL_SUBDIRS) libhw32 libhw64 libuser libdis libdis-user; do \ > + for d in $(ALL_SUBDIRS) $(QEMULIBS); do \ > if test -d $$d; then $(MAKE) -C $$d $@ || exit 1; fi; \ > rm -f $$d/qemu-options.def; \ > done > @@ -194,7 +196,7 @@ distclean: clean > rm -f roms/seabios/config.mak roms/vgabios/config.mak > rm -f qemu-doc.info qemu-doc.aux qemu-doc.cp qemu-doc.dvi qemu-doc.fn qemu-doc.info qemu-doc.ky qemu-doc.log qemu-doc.pdf qemu-doc.pg qemu-doc.toc qemu-doc.tp qemu-doc.vr > rm -f qemu-tech.info qemu-tech.aux qemu-tech.cp qemu-tech.dvi qemu-tech.fn qemu-tech.info qemu-tech.ky qemu-tech.log qemu-tech.pdf qemu-tech.pg qemu-tech.toc qemu-tech.tp qemu-tech.vr > - for d in $(TARGET_DIRS) libhw32 libhw64 libuser libdis libdis-user; do \ > + for d in $(TARGET_DIRS) $(QEMULIBS); do \ > rm -rf $$d || exit 1 ; \ > done > > diff --git a/Makefile.objs b/Makefile.objs > index 2059e89..82691c0 100644 > --- a/Makefile.objs > +++ b/Makefile.objs > @@ -297,6 +297,11 @@ user-obj-y += qemu-timer-common.o > endif > endif > > +###################################################################### > +# smartcard > + > +libcaccard-y = cac.o event.o passthru.o vcard.o vreader.o vcard_emul_nss.o vcard_emul_type.o card_7816.o > + > vl.o: QEMU_CFLAGS+=$(GPROF_CFLAGS) > > vl.o: QEMU_CFLAGS+=$(SDL_CFLAGS) > diff --git a/Makefile.target b/Makefile.target > index 2800f47..7dd6932 100644 > --- a/Makefile.target > +++ b/Makefile.target > @@ -341,6 +341,8 @@ obj-y += $(addprefix $(HWDIR)/, $(hw-obj-y)) > > endif # CONFIG_SOFTMMU > > +obj-y += $(addprefix $(SRC_PATH)/libcaccard/, $(libcaccard-$(CONFIG_SMARTCARD))) > + > obj-y += $(addprefix ../, $(trace-obj-y)) > obj-$(CONFIG_GDBSTUB_XML) += gdbstub-xml.o > > diff --git a/configure b/configure > index fb9eac2..4b55904 100755 > --- a/configure > +++ b/configure > @@ -2130,6 +2130,25 @@ EOF > fi > fi > > +# check for libcaccard for smartcard support > +if test "$smartcard" != "no" ; then > + smartcard_cflags="-I\$(SRC_PATH)/libcaccard" > + smartcard_libs="-L\$(SRC_PATH)/libcaccard -lcaccard" > + libcaccard_libs=$($pkgconfig --libs nss 2>/dev/null) > + libcaccard_cflags=$($pkgconfig --cflags nss) > + # TODO - what's the minimal nss version we support? > + if $pkgconfig --atleast-version=3.12.8 nss; then > + smartcard="yes" > + QEMU_CFLAGS="$QEMU_CFLAGS $smartcard_cflags $libcaccard_cflags" > + LIBS="$libcaccard_libs $LIBS" > + else > + if test "smartcard" = "yes" ; then > + feature_not_found "smartcard" > + fi > + smartcard="no" > + fi > +fi > + > ########################################## > > ########################################## > @@ -2956,6 +2975,11 @@ fi > if test "$target_darwin_user" = "yes" ; then > echo "CONFIG_DARWIN_USER=y" >> $config_target_mak > fi > +if test "$smartcard" = "yes" ; then > + echo "subdir-$target: subdir-libcaccard" >> $config_host_mak > + echo "libcaccard_libs=$libcaccard_libs" >> $config_host_mak > + echo "libcaccard_cflags=$libcaccard_cflags" >> $config_host_mak > +fi > list="" > if test ! -z "$gdb_xml_files" ; then > for x in $gdb_xml_files; do > diff --git a/libcaccard/Makefile b/libcaccard/Makefile > new file mode 100644 > index 0000000..a339af1 > --- /dev/null > +++ b/libcaccard/Makefile > @@ -0,0 +1,18 @@ > +include ../Makefile.objs > +include ../config-host.mak > +include ../config-all-devices.mak > +include $(SRC_PATH)/rules.mak > + > +CFLAGS+=-fPIC > + > +libcaccard.so: $(libcaccard-y) > + gcc -shared $(libcaccard_libs) -o $@ $^ This is not going to work, the shared library would need to be shipped with QEMU binaries, with a lot of hassle for no benefit. Just do it like other libs do and add the objects to the list of linked files.
On Fri, Nov 26, 2010 at 06:50:07PM +0000, Blue Swirl wrote: > On Thu, Nov 25, 2010 at 4:22 PM, Alon Levy <alevy@redhat.com> wrote: > > Signed-off-by: Alon Levy <alevy@redhat.com> > > --- > > Makefile | 6 ++++-- > > Makefile.objs | 5 +++++ > > Makefile.target | 2 ++ > > configure | 24 ++++++++++++++++++++++++ > > libcaccard/Makefile | 18 ++++++++++++++++++ > > 5 files changed, 53 insertions(+), 2 deletions(-) > > create mode 100644 libcaccard/Makefile > > > > diff --git a/Makefile b/Makefile > > index 4e120a2..e673bf1 100644 > > --- a/Makefile > > +++ b/Makefile > > @@ -172,6 +172,8 @@ check-qlist: check-qlist.o qlist.o qint.o $(CHECK_PROG_DEPS) > > check-qfloat: check-qfloat.o qfloat.o $(CHECK_PROG_DEPS) > > check-qjson: check-qjson.o qfloat.o qint.o qdict.o qstring.o qlist.o qbool.o qjson.o json-streamer.o json-lexer.o json-parser.o $(CHECK_PROG_DEPS) > > > > +QEMULIBS=libhw32 libhw64 libuser libdis libdis-user libcaccard > > + > > 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 > > @@ -183,7 +185,7 @@ clean: > > rm -f trace-dtrace.dtrace trace-dtrace.dtrace-timestamp > > rm -f trace-dtrace.h trace-dtrace.h-timestamp > > $(MAKE) -C tests clean > > - for d in $(ALL_SUBDIRS) libhw32 libhw64 libuser libdis libdis-user; do \ > > + for d in $(ALL_SUBDIRS) $(QEMULIBS); do \ > > if test -d $$d; then $(MAKE) -C $$d $@ || exit 1; fi; \ > > rm -f $$d/qemu-options.def; \ > > done > > @@ -194,7 +196,7 @@ distclean: clean > > rm -f roms/seabios/config.mak roms/vgabios/config.mak > > rm -f qemu-doc.info qemu-doc.aux qemu-doc.cp qemu-doc.dvi qemu-doc.fn qemu-doc.info qemu-doc.ky qemu-doc.log qemu-doc.pdf qemu-doc.pg qemu-doc.toc qemu-doc.tp qemu-doc.vr > > rm -f qemu-tech.info qemu-tech.aux qemu-tech.cp qemu-tech.dvi qemu-tech.fn qemu-tech.info qemu-tech.ky qemu-tech.log qemu-tech.pdf qemu-tech.pg qemu-tech.toc qemu-tech.tp qemu-tech.vr > > - for d in $(TARGET_DIRS) libhw32 libhw64 libuser libdis libdis-user; do \ > > + for d in $(TARGET_DIRS) $(QEMULIBS); do \ > > rm -rf $$d || exit 1 ; \ > > done > > > > diff --git a/Makefile.objs b/Makefile.objs > > index 2059e89..82691c0 100644 > > --- a/Makefile.objs > > +++ b/Makefile.objs > > @@ -297,6 +297,11 @@ user-obj-y += qemu-timer-common.o > > endif > > endif > > > > +###################################################################### > > +# smartcard > > + > > +libcaccard-y = cac.o event.o passthru.o vcard.o vreader.o vcard_emul_nss.o vcard_emul_type.o card_7816.o > > + > > vl.o: QEMU_CFLAGS+=$(GPROF_CFLAGS) > > > > vl.o: QEMU_CFLAGS+=$(SDL_CFLAGS) > > diff --git a/Makefile.target b/Makefile.target > > index 2800f47..7dd6932 100644 > > --- a/Makefile.target > > +++ b/Makefile.target > > @@ -341,6 +341,8 @@ obj-y += $(addprefix $(HWDIR)/, $(hw-obj-y)) > > > > endif # CONFIG_SOFTMMU > > > > +obj-y += $(addprefix $(SRC_PATH)/libcaccard/, $(libcaccard-$(CONFIG_SMARTCARD))) > > + > > obj-y += $(addprefix ../, $(trace-obj-y)) > > obj-$(CONFIG_GDBSTUB_XML) += gdbstub-xml.o > > > > diff --git a/configure b/configure > > index fb9eac2..4b55904 100755 > > --- a/configure > > +++ b/configure > > @@ -2130,6 +2130,25 @@ EOF > > fi > > fi > > > > +# check for libcaccard for smartcard support > > +if test "$smartcard" != "no" ; then > > + smartcard_cflags="-I\$(SRC_PATH)/libcaccard" > > + smartcard_libs="-L\$(SRC_PATH)/libcaccard -lcaccard" > > + libcaccard_libs=$($pkgconfig --libs nss 2>/dev/null) > > + libcaccard_cflags=$($pkgconfig --cflags nss) > > + # TODO - what's the minimal nss version we support? > > + if $pkgconfig --atleast-version=3.12.8 nss; then > > + smartcard="yes" > > + QEMU_CFLAGS="$QEMU_CFLAGS $smartcard_cflags $libcaccard_cflags" > > + LIBS="$libcaccard_libs $LIBS" > > + else > > + if test "smartcard" = "yes" ; then > > + feature_not_found "smartcard" > > + fi > > + smartcard="no" > > + fi > > +fi > > + > > ########################################## > > > > ########################################## > > @@ -2956,6 +2975,11 @@ fi > > if test "$target_darwin_user" = "yes" ; then > > echo "CONFIG_DARWIN_USER=y" >> $config_target_mak > > fi > > +if test "$smartcard" = "yes" ; then > > + echo "subdir-$target: subdir-libcaccard" >> $config_host_mak > > + echo "libcaccard_libs=$libcaccard_libs" >> $config_host_mak > > + echo "libcaccard_cflags=$libcaccard_cflags" >> $config_host_mak > > +fi > > list="" > > if test ! -z "$gdb_xml_files" ; then > > for x in $gdb_xml_files; do > > diff --git a/libcaccard/Makefile b/libcaccard/Makefile > > new file mode 100644 > > index 0000000..a339af1 > > --- /dev/null > > +++ b/libcaccard/Makefile > > @@ -0,0 +1,18 @@ > > +include ../Makefile.objs > > +include ../config-host.mak > > +include ../config-all-devices.mak > > +include $(SRC_PATH)/rules.mak > > + > > +CFLAGS+=-fPIC > > + > > +libcaccard.so: $(libcaccard-y) > > + gcc -shared $(libcaccard_libs) -o $@ $^ > > This is not going to work, the shared library would need to be shipped > with QEMU binaries, with a lot of hassle for no benefit. Just do it > like other libs do and add the objects to the list of linked files. If you'll notice the libcaccard-y define above, that's exactly what I'm doing. Both qemu and the vscclient (in libcaccard) are linked directly with that list of objects, like you said. Why the shard object too? because I intended to use it for external clients. I don't have an install rule yet, I thought I'll do that later.
On Sun, Nov 28, 2010 at 9:14 AM, Alon Levy <alevy@redhat.com> wrote: > On Fri, Nov 26, 2010 at 06:50:07PM +0000, Blue Swirl wrote: >> On Thu, Nov 25, 2010 at 4:22 PM, Alon Levy <alevy@redhat.com> wrote: >> > Signed-off-by: Alon Levy <alevy@redhat.com> >> > --- >> > Makefile | 6 ++++-- >> > Makefile.objs | 5 +++++ >> > Makefile.target | 2 ++ >> > configure | 24 ++++++++++++++++++++++++ >> > libcaccard/Makefile | 18 ++++++++++++++++++ >> > 5 files changed, 53 insertions(+), 2 deletions(-) >> > create mode 100644 libcaccard/Makefile >> > >> > diff --git a/Makefile b/Makefile >> > index 4e120a2..e673bf1 100644 >> > --- a/Makefile >> > +++ b/Makefile >> > @@ -172,6 +172,8 @@ check-qlist: check-qlist.o qlist.o qint.o $(CHECK_PROG_DEPS) >> > check-qfloat: check-qfloat.o qfloat.o $(CHECK_PROG_DEPS) >> > check-qjson: check-qjson.o qfloat.o qint.o qdict.o qstring.o qlist.o qbool.o qjson.o json-streamer.o json-lexer.o json-parser.o $(CHECK_PROG_DEPS) >> > >> > +QEMULIBS=libhw32 libhw64 libuser libdis libdis-user libcaccard >> > + >> > 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 >> > @@ -183,7 +185,7 @@ clean: >> > rm -f trace-dtrace.dtrace trace-dtrace.dtrace-timestamp >> > rm -f trace-dtrace.h trace-dtrace.h-timestamp >> > $(MAKE) -C tests clean >> > - for d in $(ALL_SUBDIRS) libhw32 libhw64 libuser libdis libdis-user; do \ >> > + for d in $(ALL_SUBDIRS) $(QEMULIBS); do \ >> > if test -d $$d; then $(MAKE) -C $$d $@ || exit 1; fi; \ >> > rm -f $$d/qemu-options.def; \ >> > done >> > @@ -194,7 +196,7 @@ distclean: clean >> > rm -f roms/seabios/config.mak roms/vgabios/config.mak >> > rm -f qemu-doc.info qemu-doc.aux qemu-doc.cp qemu-doc.dvi qemu-doc.fn qemu-doc.info qemu-doc.ky qemu-doc.log qemu-doc.pdf qemu-doc.pg qemu-doc.toc qemu-doc.tp qemu-doc.vr >> > rm -f qemu-tech.info qemu-tech.aux qemu-tech.cp qemu-tech.dvi qemu-tech.fn qemu-tech.info qemu-tech.ky qemu-tech.log qemu-tech.pdf qemu-tech.pg qemu-tech.toc qemu-tech.tp qemu-tech.vr >> > - for d in $(TARGET_DIRS) libhw32 libhw64 libuser libdis libdis-user; do \ >> > + for d in $(TARGET_DIRS) $(QEMULIBS); do \ >> > rm -rf $$d || exit 1 ; \ >> > done >> > >> > diff --git a/Makefile.objs b/Makefile.objs >> > index 2059e89..82691c0 100644 >> > --- a/Makefile.objs >> > +++ b/Makefile.objs >> > @@ -297,6 +297,11 @@ user-obj-y += qemu-timer-common.o >> > endif >> > endif >> > >> > +###################################################################### >> > +# smartcard >> > + >> > +libcaccard-y = cac.o event.o passthru.o vcard.o vreader.o vcard_emul_nss.o vcard_emul_type.o card_7816.o >> > + >> > vl.o: QEMU_CFLAGS+=$(GPROF_CFLAGS) >> > >> > vl.o: QEMU_CFLAGS+=$(SDL_CFLAGS) >> > diff --git a/Makefile.target b/Makefile.target >> > index 2800f47..7dd6932 100644 >> > --- a/Makefile.target >> > +++ b/Makefile.target >> > @@ -341,6 +341,8 @@ obj-y += $(addprefix $(HWDIR)/, $(hw-obj-y)) >> > >> > endif # CONFIG_SOFTMMU >> > >> > +obj-y += $(addprefix $(SRC_PATH)/libcaccard/, $(libcaccard-$(CONFIG_SMARTCARD))) >> > + >> > obj-y += $(addprefix ../, $(trace-obj-y)) >> > obj-$(CONFIG_GDBSTUB_XML) += gdbstub-xml.o >> > >> > diff --git a/configure b/configure >> > index fb9eac2..4b55904 100755 >> > --- a/configure >> > +++ b/configure >> > @@ -2130,6 +2130,25 @@ EOF >> > fi >> > fi >> > >> > +# check for libcaccard for smartcard support >> > +if test "$smartcard" != "no" ; then >> > + smartcard_cflags="-I\$(SRC_PATH)/libcaccard" >> > + smartcard_libs="-L\$(SRC_PATH)/libcaccard -lcaccard" >> > + libcaccard_libs=$($pkgconfig --libs nss 2>/dev/null) >> > + libcaccard_cflags=$($pkgconfig --cflags nss) >> > + # TODO - what's the minimal nss version we support? >> > + if $pkgconfig --atleast-version=3.12.8 nss; then >> > + smartcard="yes" >> > + QEMU_CFLAGS="$QEMU_CFLAGS $smartcard_cflags $libcaccard_cflags" >> > + LIBS="$libcaccard_libs $LIBS" >> > + else >> > + if test "smartcard" = "yes" ; then >> > + feature_not_found "smartcard" >> > + fi >> > + smartcard="no" >> > + fi >> > +fi >> > + >> > ########################################## >> > >> > ########################################## >> > @@ -2956,6 +2975,11 @@ fi >> > if test "$target_darwin_user" = "yes" ; then >> > echo "CONFIG_DARWIN_USER=y" >> $config_target_mak >> > fi >> > +if test "$smartcard" = "yes" ; then >> > + echo "subdir-$target: subdir-libcaccard" >> $config_host_mak >> > + echo "libcaccard_libs=$libcaccard_libs" >> $config_host_mak >> > + echo "libcaccard_cflags=$libcaccard_cflags" >> $config_host_mak >> > +fi >> > list="" >> > if test ! -z "$gdb_xml_files" ; then >> > for x in $gdb_xml_files; do >> > diff --git a/libcaccard/Makefile b/libcaccard/Makefile >> > new file mode 100644 >> > index 0000000..a339af1 >> > --- /dev/null >> > +++ b/libcaccard/Makefile >> > @@ -0,0 +1,18 @@ >> > +include ../Makefile.objs >> > +include ../config-host.mak >> > +include ../config-all-devices.mak >> > +include $(SRC_PATH)/rules.mak >> > + >> > +CFLAGS+=-fPIC >> > + >> > +libcaccard.so: $(libcaccard-y) >> > + gcc -shared $(libcaccard_libs) -o $@ $^ >> >> This is not going to work, the shared library would need to be shipped >> with QEMU binaries, with a lot of hassle for no benefit. Just do it >> like other libs do and add the objects to the list of linked files. > > If you'll notice the libcaccard-y define above, that's exactly what I'm doing. Both qemu and the vscclient (in libcaccard) are linked directly with that list of objects, like you said. Why the shard object too? because I intended to use it for external clients. I don't have an install rule yet, I thought I'll do that later. But then -fPIC shouldn't be used for QEMU objects. Please see how objects which are common to user and system emulators are compiled with different set of flags.
On Sun, Nov 28, 2010 at 09:42:05AM +0000, Blue Swirl wrote: > On Sun, Nov 28, 2010 at 9:14 AM, Alon Levy <alevy@redhat.com> wrote: > > On Fri, Nov 26, 2010 at 06:50:07PM +0000, Blue Swirl wrote: > >> On Thu, Nov 25, 2010 at 4:22 PM, Alon Levy <alevy@redhat.com> wrote: > >> > Signed-off-by: Alon Levy <alevy@redhat.com> > >> > --- > >> > Makefile | 6 ++++-- > >> > Makefile.objs | 5 +++++ > >> > Makefile.target | 2 ++ > >> > configure | 24 ++++++++++++++++++++++++ > >> > libcaccard/Makefile | 18 ++++++++++++++++++ > >> > 5 files changed, 53 insertions(+), 2 deletions(-) > >> > create mode 100644 libcaccard/Makefile > >> > > >> > diff --git a/Makefile b/Makefile > >> > index 4e120a2..e673bf1 100644 > >> > --- a/Makefile > >> > +++ b/Makefile > >> > @@ -172,6 +172,8 @@ check-qlist: check-qlist.o qlist.o qint.o $(CHECK_PROG_DEPS) > >> > check-qfloat: check-qfloat.o qfloat.o $(CHECK_PROG_DEPS) > >> > check-qjson: check-qjson.o qfloat.o qint.o qdict.o qstring.o qlist.o qbool.o qjson.o json-streamer.o json-lexer.o json-parser.o $(CHECK_PROG_DEPS) > >> > > >> > +QEMULIBS=libhw32 libhw64 libuser libdis libdis-user libcaccard > >> > + > >> > 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 > >> > @@ -183,7 +185,7 @@ clean: > >> > rm -f trace-dtrace.dtrace trace-dtrace.dtrace-timestamp > >> > rm -f trace-dtrace.h trace-dtrace.h-timestamp > >> > $(MAKE) -C tests clean > >> > - for d in $(ALL_SUBDIRS) libhw32 libhw64 libuser libdis libdis-user; do \ > >> > + for d in $(ALL_SUBDIRS) $(QEMULIBS); do \ > >> > if test -d $$d; then $(MAKE) -C $$d $@ || exit 1; fi; \ > >> > rm -f $$d/qemu-options.def; \ > >> > done > >> > @@ -194,7 +196,7 @@ distclean: clean > >> > rm -f roms/seabios/config.mak roms/vgabios/config.mak > >> > rm -f qemu-doc.info qemu-doc.aux qemu-doc.cp qemu-doc.dvi qemu-doc.fn qemu-doc.info qemu-doc.ky qemu-doc.log qemu-doc.pdf qemu-doc.pg qemu-doc.toc qemu-doc.tp qemu-doc.vr > >> > rm -f qemu-tech.info qemu-tech.aux qemu-tech.cp qemu-tech.dvi qemu-tech.fn qemu-tech.info qemu-tech.ky qemu-tech.log qemu-tech.pdf qemu-tech.pg qemu-tech.toc qemu-tech.tp qemu-tech.vr > >> > - for d in $(TARGET_DIRS) libhw32 libhw64 libuser libdis libdis-user; do \ > >> > + for d in $(TARGET_DIRS) $(QEMULIBS); do \ > >> > rm -rf $$d || exit 1 ; \ > >> > done > >> > > >> > diff --git a/Makefile.objs b/Makefile.objs > >> > index 2059e89..82691c0 100644 > >> > --- a/Makefile.objs > >> > +++ b/Makefile.objs > >> > @@ -297,6 +297,11 @@ user-obj-y += qemu-timer-common.o > >> > endif > >> > endif > >> > > >> > +###################################################################### > >> > +# smartcard > >> > + > >> > +libcaccard-y = cac.o event.o passthru.o vcard.o vreader.o vcard_emul_nss.o vcard_emul_type.o card_7816.o > >> > + > >> > vl.o: QEMU_CFLAGS+=$(GPROF_CFLAGS) > >> > > >> > vl.o: QEMU_CFLAGS+=$(SDL_CFLAGS) > >> > diff --git a/Makefile.target b/Makefile.target > >> > index 2800f47..7dd6932 100644 > >> > --- a/Makefile.target > >> > +++ b/Makefile.target > >> > @@ -341,6 +341,8 @@ obj-y += $(addprefix $(HWDIR)/, $(hw-obj-y)) > >> > > >> > endif # CONFIG_SOFTMMU > >> > > >> > +obj-y += $(addprefix $(SRC_PATH)/libcaccard/, $(libcaccard-$(CONFIG_SMARTCARD))) > >> > + > >> > obj-y += $(addprefix ../, $(trace-obj-y)) > >> > obj-$(CONFIG_GDBSTUB_XML) += gdbstub-xml.o > >> > > >> > diff --git a/configure b/configure > >> > index fb9eac2..4b55904 100755 > >> > --- a/configure > >> > +++ b/configure > >> > @@ -2130,6 +2130,25 @@ EOF > >> > fi > >> > fi > >> > > >> > +# check for libcaccard for smartcard support > >> > +if test "$smartcard" != "no" ; then > >> > + smartcard_cflags="-I\$(SRC_PATH)/libcaccard" > >> > + smartcard_libs="-L\$(SRC_PATH)/libcaccard -lcaccard" > >> > + libcaccard_libs=$($pkgconfig --libs nss 2>/dev/null) > >> > + libcaccard_cflags=$($pkgconfig --cflags nss) > >> > + # TODO - what's the minimal nss version we support? > >> > + if $pkgconfig --atleast-version=3.12.8 nss; then > >> > + smartcard="yes" > >> > + QEMU_CFLAGS="$QEMU_CFLAGS $smartcard_cflags $libcaccard_cflags" > >> > + LIBS="$libcaccard_libs $LIBS" > >> > + else > >> > + if test "smartcard" = "yes" ; then > >> > + feature_not_found "smartcard" > >> > + fi > >> > + smartcard="no" > >> > + fi > >> > +fi > >> > + > >> > ########################################## > >> > > >> > ########################################## > >> > @@ -2956,6 +2975,11 @@ fi > >> > if test "$target_darwin_user" = "yes" ; then > >> > echo "CONFIG_DARWIN_USER=y" >> $config_target_mak > >> > fi > >> > +if test "$smartcard" = "yes" ; then > >> > + echo "subdir-$target: subdir-libcaccard" >> $config_host_mak > >> > + echo "libcaccard_libs=$libcaccard_libs" >> $config_host_mak > >> > + echo "libcaccard_cflags=$libcaccard_cflags" >> $config_host_mak > >> > +fi > >> > list="" > >> > if test ! -z "$gdb_xml_files" ; then > >> > for x in $gdb_xml_files; do > >> > diff --git a/libcaccard/Makefile b/libcaccard/Makefile > >> > new file mode 100644 > >> > index 0000000..a339af1 > >> > --- /dev/null > >> > +++ b/libcaccard/Makefile > >> > @@ -0,0 +1,18 @@ > >> > +include ../Makefile.objs > >> > +include ../config-host.mak > >> > +include ../config-all-devices.mak > >> > +include $(SRC_PATH)/rules.mak > >> > + > >> > +CFLAGS+=-fPIC > >> > + > >> > +libcaccard.so: $(libcaccard-y) > >> > + gcc -shared $(libcaccard_libs) -o $@ $^ > >> > >> This is not going to work, the shared library would need to be shipped > >> with QEMU binaries, with a lot of hassle for no benefit. Just do it > >> like other libs do and add the objects to the list of linked files. > > > > If you'll notice the libcaccard-y define above, that's exactly what I'm doing. Both qemu and the vscclient (in libcaccard) are linked directly with that list of objects, like you said. Why the shard object too? because I intended to use it for external clients. I don't have an install rule yet, I thought I'll do that later. > > But then -fPIC shouldn't be used for QEMU objects. Please see how > objects which are common to user and system emulators are compiled > with different set of flags. > ok, so maybe I should include a Makefile.external explicitly for external projects to build, and then just drop the -fPIC and libcaccard.so?
On Sun, Nov 28, 2010 at 10:44 AM, Alon Levy <alevy@redhat.com> wrote: > On Sun, Nov 28, 2010 at 09:42:05AM +0000, Blue Swirl wrote: >> On Sun, Nov 28, 2010 at 9:14 AM, Alon Levy <alevy@redhat.com> wrote: >> > On Fri, Nov 26, 2010 at 06:50:07PM +0000, Blue Swirl wrote: >> >> On Thu, Nov 25, 2010 at 4:22 PM, Alon Levy <alevy@redhat.com> wrote: >> >> > Signed-off-by: Alon Levy <alevy@redhat.com> >> >> > --- >> >> > Makefile | 6 ++++-- >> >> > Makefile.objs | 5 +++++ >> >> > Makefile.target | 2 ++ >> >> > configure | 24 ++++++++++++++++++++++++ >> >> > libcaccard/Makefile | 18 ++++++++++++++++++ >> >> > 5 files changed, 53 insertions(+), 2 deletions(-) >> >> > create mode 100644 libcaccard/Makefile >> >> > >> >> > diff --git a/Makefile b/Makefile >> >> > index 4e120a2..e673bf1 100644 >> >> > --- a/Makefile >> >> > +++ b/Makefile >> >> > @@ -172,6 +172,8 @@ check-qlist: check-qlist.o qlist.o qint.o $(CHECK_PROG_DEPS) >> >> > check-qfloat: check-qfloat.o qfloat.o $(CHECK_PROG_DEPS) >> >> > check-qjson: check-qjson.o qfloat.o qint.o qdict.o qstring.o qlist.o qbool.o qjson.o json-streamer.o json-lexer.o json-parser.o $(CHECK_PROG_DEPS) >> >> > >> >> > +QEMULIBS=libhw32 libhw64 libuser libdis libdis-user libcaccard >> >> > + >> >> > 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 >> >> > @@ -183,7 +185,7 @@ clean: >> >> > rm -f trace-dtrace.dtrace trace-dtrace.dtrace-timestamp >> >> > rm -f trace-dtrace.h trace-dtrace.h-timestamp >> >> > $(MAKE) -C tests clean >> >> > - for d in $(ALL_SUBDIRS) libhw32 libhw64 libuser libdis libdis-user; do \ >> >> > + for d in $(ALL_SUBDIRS) $(QEMULIBS); do \ >> >> > if test -d $$d; then $(MAKE) -C $$d $@ || exit 1; fi; \ >> >> > rm -f $$d/qemu-options.def; \ >> >> > done >> >> > @@ -194,7 +196,7 @@ distclean: clean >> >> > rm -f roms/seabios/config.mak roms/vgabios/config.mak >> >> > rm -f qemu-doc.info qemu-doc.aux qemu-doc.cp qemu-doc.dvi qemu-doc.fn qemu-doc.info qemu-doc.ky qemu-doc.log qemu-doc.pdf qemu-doc.pg qemu-doc.toc qemu-doc.tp qemu-doc.vr >> >> > rm -f qemu-tech.info qemu-tech.aux qemu-tech.cp qemu-tech.dvi qemu-tech.fn qemu-tech.info qemu-tech.ky qemu-tech.log qemu-tech.pdf qemu-tech.pg qemu-tech.toc qemu-tech.tp qemu-tech.vr >> >> > - for d in $(TARGET_DIRS) libhw32 libhw64 libuser libdis libdis-user; do \ >> >> > + for d in $(TARGET_DIRS) $(QEMULIBS); do \ >> >> > rm -rf $$d || exit 1 ; \ >> >> > done >> >> > >> >> > diff --git a/Makefile.objs b/Makefile.objs >> >> > index 2059e89..82691c0 100644 >> >> > --- a/Makefile.objs >> >> > +++ b/Makefile.objs >> >> > @@ -297,6 +297,11 @@ user-obj-y += qemu-timer-common.o >> >> > endif >> >> > endif >> >> > >> >> > +###################################################################### >> >> > +# smartcard >> >> > + >> >> > +libcaccard-y = cac.o event.o passthru.o vcard.o vreader.o vcard_emul_nss.o vcard_emul_type.o card_7816.o >> >> > + >> >> > vl.o: QEMU_CFLAGS+=$(GPROF_CFLAGS) >> >> > >> >> > vl.o: QEMU_CFLAGS+=$(SDL_CFLAGS) >> >> > diff --git a/Makefile.target b/Makefile.target >> >> > index 2800f47..7dd6932 100644 >> >> > --- a/Makefile.target >> >> > +++ b/Makefile.target >> >> > @@ -341,6 +341,8 @@ obj-y += $(addprefix $(HWDIR)/, $(hw-obj-y)) >> >> > >> >> > endif # CONFIG_SOFTMMU >> >> > >> >> > +obj-y += $(addprefix $(SRC_PATH)/libcaccard/, $(libcaccard-$(CONFIG_SMARTCARD))) >> >> > + >> >> > obj-y += $(addprefix ../, $(trace-obj-y)) >> >> > obj-$(CONFIG_GDBSTUB_XML) += gdbstub-xml.o >> >> > >> >> > diff --git a/configure b/configure >> >> > index fb9eac2..4b55904 100755 >> >> > --- a/configure >> >> > +++ b/configure >> >> > @@ -2130,6 +2130,25 @@ EOF >> >> > fi >> >> > fi >> >> > >> >> > +# check for libcaccard for smartcard support >> >> > +if test "$smartcard" != "no" ; then >> >> > + smartcard_cflags="-I\$(SRC_PATH)/libcaccard" >> >> > + smartcard_libs="-L\$(SRC_PATH)/libcaccard -lcaccard" >> >> > + libcaccard_libs=$($pkgconfig --libs nss 2>/dev/null) >> >> > + libcaccard_cflags=$($pkgconfig --cflags nss) >> >> > + # TODO - what's the minimal nss version we support? >> >> > + if $pkgconfig --atleast-version=3.12.8 nss; then >> >> > + smartcard="yes" >> >> > + QEMU_CFLAGS="$QEMU_CFLAGS $smartcard_cflags $libcaccard_cflags" >> >> > + LIBS="$libcaccard_libs $LIBS" >> >> > + else >> >> > + if test "smartcard" = "yes" ; then >> >> > + feature_not_found "smartcard" >> >> > + fi >> >> > + smartcard="no" >> >> > + fi >> >> > +fi >> >> > + >> >> > ########################################## >> >> > >> >> > ########################################## >> >> > @@ -2956,6 +2975,11 @@ fi >> >> > if test "$target_darwin_user" = "yes" ; then >> >> > echo "CONFIG_DARWIN_USER=y" >> $config_target_mak >> >> > fi >> >> > +if test "$smartcard" = "yes" ; then >> >> > + echo "subdir-$target: subdir-libcaccard" >> $config_host_mak >> >> > + echo "libcaccard_libs=$libcaccard_libs" >> $config_host_mak >> >> > + echo "libcaccard_cflags=$libcaccard_cflags" >> $config_host_mak >> >> > +fi >> >> > list="" >> >> > if test ! -z "$gdb_xml_files" ; then >> >> > for x in $gdb_xml_files; do >> >> > diff --git a/libcaccard/Makefile b/libcaccard/Makefile >> >> > new file mode 100644 >> >> > index 0000000..a339af1 >> >> > --- /dev/null >> >> > +++ b/libcaccard/Makefile >> >> > @@ -0,0 +1,18 @@ >> >> > +include ../Makefile.objs >> >> > +include ../config-host.mak >> >> > +include ../config-all-devices.mak >> >> > +include $(SRC_PATH)/rules.mak >> >> > + >> >> > +CFLAGS+=-fPIC >> >> > + >> >> > +libcaccard.so: $(libcaccard-y) >> >> > + gcc -shared $(libcaccard_libs) -o $@ $^ >> >> >> >> This is not going to work, the shared library would need to be shipped >> >> with QEMU binaries, with a lot of hassle for no benefit. Just do it >> >> like other libs do and add the objects to the list of linked files. >> > >> > If you'll notice the libcaccard-y define above, that's exactly what I'm doing. Both qemu and the vscclient (in libcaccard) are linked directly with that list of objects, like you said. Why the shard object too? because I intended to use it for external clients. I don't have an install rule yet, I thought I'll do that later. >> >> But then -fPIC shouldn't be used for QEMU objects. Please see how >> objects which are common to user and system emulators are compiled >> with different set of flags. >> > > ok, so maybe I should include a Makefile.external explicitly for external projects to build, and then just drop the -fPIC and libcaccard.so? External projects should use git subproject and add their Makefiles that way. I don't think it's even possible to support any external files, which are unused by QEMU, in long term.
On Sun, Nov 28, 2010 at 12:03:02PM +0000, Blue Swirl wrote: > On Sun, Nov 28, 2010 at 10:44 AM, Alon Levy <alevy@redhat.com> wrote: > > On Sun, Nov 28, 2010 at 09:42:05AM +0000, Blue Swirl wrote: > >> On Sun, Nov 28, 2010 at 9:14 AM, Alon Levy <alevy@redhat.com> wrote: > >> > On Fri, Nov 26, 2010 at 06:50:07PM +0000, Blue Swirl wrote: > >> >> On Thu, Nov 25, 2010 at 4:22 PM, Alon Levy <alevy@redhat.com> wrote: > >> >> > Signed-off-by: Alon Levy <alevy@redhat.com> > >> >> > --- > >> >> > Makefile | 6 ++++-- > >> >> > Makefile.objs | 5 +++++ > >> >> > Makefile.target | 2 ++ > >> >> > configure | 24 ++++++++++++++++++++++++ > >> >> > libcaccard/Makefile | 18 ++++++++++++++++++ > >> >> > 5 files changed, 53 insertions(+), 2 deletions(-) > >> >> > create mode 100644 libcaccard/Makefile > >> >> > > >> >> > diff --git a/Makefile b/Makefile > >> >> > index 4e120a2..e673bf1 100644 > >> >> > --- a/Makefile > >> >> > +++ b/Makefile > >> >> > @@ -172,6 +172,8 @@ check-qlist: check-qlist.o qlist.o qint.o $(CHECK_PROG_DEPS) > >> >> > check-qfloat: check-qfloat.o qfloat.o $(CHECK_PROG_DEPS) > >> >> > check-qjson: check-qjson.o qfloat.o qint.o qdict.o qstring.o qlist.o qbool.o qjson.o json-streamer.o json-lexer.o json-parser.o $(CHECK_PROG_DEPS) > >> >> > > >> >> > +QEMULIBS=libhw32 libhw64 libuser libdis libdis-user libcaccard > >> >> > + > >> >> > 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 > >> >> > @@ -183,7 +185,7 @@ clean: > >> >> > rm -f trace-dtrace.dtrace trace-dtrace.dtrace-timestamp > >> >> > rm -f trace-dtrace.h trace-dtrace.h-timestamp > >> >> > $(MAKE) -C tests clean > >> >> > - for d in $(ALL_SUBDIRS) libhw32 libhw64 libuser libdis libdis-user; do \ > >> >> > + for d in $(ALL_SUBDIRS) $(QEMULIBS); do \ > >> >> > if test -d $$d; then $(MAKE) -C $$d $@ || exit 1; fi; \ > >> >> > rm -f $$d/qemu-options.def; \ > >> >> > done > >> >> > @@ -194,7 +196,7 @@ distclean: clean > >> >> > rm -f roms/seabios/config.mak roms/vgabios/config.mak > >> >> > rm -f qemu-doc.info qemu-doc.aux qemu-doc.cp qemu-doc.dvi qemu-doc.fn qemu-doc.info qemu-doc.ky qemu-doc.log qemu-doc.pdf qemu-doc.pg qemu-doc.toc qemu-doc.tp qemu-doc.vr > >> >> > rm -f qemu-tech.info qemu-tech.aux qemu-tech.cp qemu-tech.dvi qemu-tech.fn qemu-tech.info qemu-tech.ky qemu-tech.log qemu-tech.pdf qemu-tech.pg qemu-tech.toc qemu-tech.tp qemu-tech.vr > >> >> > - for d in $(TARGET_DIRS) libhw32 libhw64 libuser libdis libdis-user; do \ > >> >> > + for d in $(TARGET_DIRS) $(QEMULIBS); do \ > >> >> > rm -rf $$d || exit 1 ; \ > >> >> > done > >> >> > > >> >> > diff --git a/Makefile.objs b/Makefile.objs > >> >> > index 2059e89..82691c0 100644 > >> >> > --- a/Makefile.objs > >> >> > +++ b/Makefile.objs > >> >> > @@ -297,6 +297,11 @@ user-obj-y += qemu-timer-common.o > >> >> > endif > >> >> > endif > >> >> > > >> >> > +###################################################################### > >> >> > +# smartcard > >> >> > + > >> >> > +libcaccard-y = cac.o event.o passthru.o vcard.o vreader.o vcard_emul_nss.o vcard_emul_type.o card_7816.o > >> >> > + > >> >> > vl.o: QEMU_CFLAGS+=$(GPROF_CFLAGS) > >> >> > > >> >> > vl.o: QEMU_CFLAGS+=$(SDL_CFLAGS) > >> >> > diff --git a/Makefile.target b/Makefile.target > >> >> > index 2800f47..7dd6932 100644 > >> >> > --- a/Makefile.target > >> >> > +++ b/Makefile.target > >> >> > @@ -341,6 +341,8 @@ obj-y += $(addprefix $(HWDIR)/, $(hw-obj-y)) > >> >> > > >> >> > endif # CONFIG_SOFTMMU > >> >> > > >> >> > +obj-y += $(addprefix $(SRC_PATH)/libcaccard/, $(libcaccard-$(CONFIG_SMARTCARD))) > >> >> > + > >> >> > obj-y += $(addprefix ../, $(trace-obj-y)) > >> >> > obj-$(CONFIG_GDBSTUB_XML) += gdbstub-xml.o > >> >> > > >> >> > diff --git a/configure b/configure > >> >> > index fb9eac2..4b55904 100755 > >> >> > --- a/configure > >> >> > +++ b/configure > >> >> > @@ -2130,6 +2130,25 @@ EOF > >> >> > fi > >> >> > fi > >> >> > > >> >> > +# check for libcaccard for smartcard support > >> >> > +if test "$smartcard" != "no" ; then > >> >> > + smartcard_cflags="-I\$(SRC_PATH)/libcaccard" > >> >> > + smartcard_libs="-L\$(SRC_PATH)/libcaccard -lcaccard" > >> >> > + libcaccard_libs=$($pkgconfig --libs nss 2>/dev/null) > >> >> > + libcaccard_cflags=$($pkgconfig --cflags nss) > >> >> > + # TODO - what's the minimal nss version we support? > >> >> > + if $pkgconfig --atleast-version=3.12.8 nss; then > >> >> > + smartcard="yes" > >> >> > + QEMU_CFLAGS="$QEMU_CFLAGS $smartcard_cflags $libcaccard_cflags" > >> >> > + LIBS="$libcaccard_libs $LIBS" > >> >> > + else > >> >> > + if test "smartcard" = "yes" ; then > >> >> > + feature_not_found "smartcard" > >> >> > + fi > >> >> > + smartcard="no" > >> >> > + fi > >> >> > +fi > >> >> > + > >> >> > ########################################## > >> >> > > >> >> > ########################################## > >> >> > @@ -2956,6 +2975,11 @@ fi > >> >> > if test "$target_darwin_user" = "yes" ; then > >> >> > echo "CONFIG_DARWIN_USER=y" >> $config_target_mak > >> >> > fi > >> >> > +if test "$smartcard" = "yes" ; then > >> >> > + echo "subdir-$target: subdir-libcaccard" >> $config_host_mak > >> >> > + echo "libcaccard_libs=$libcaccard_libs" >> $config_host_mak > >> >> > + echo "libcaccard_cflags=$libcaccard_cflags" >> $config_host_mak > >> >> > +fi > >> >> > list="" > >> >> > if test ! -z "$gdb_xml_files" ; then > >> >> > for x in $gdb_xml_files; do > >> >> > diff --git a/libcaccard/Makefile b/libcaccard/Makefile > >> >> > new file mode 100644 > >> >> > index 0000000..a339af1 > >> >> > --- /dev/null > >> >> > +++ b/libcaccard/Makefile > >> >> > @@ -0,0 +1,18 @@ > >> >> > +include ../Makefile.objs > >> >> > +include ../config-host.mak > >> >> > +include ../config-all-devices.mak > >> >> > +include $(SRC_PATH)/rules.mak > >> >> > + > >> >> > +CFLAGS+=-fPIC > >> >> > + > >> >> > +libcaccard.so: $(libcaccard-y) > >> >> > + gcc -shared $(libcaccard_libs) -o $@ $^ > >> >> > >> >> This is not going to work, the shared library would need to be shipped > >> >> with QEMU binaries, with a lot of hassle for no benefit. Just do it > >> >> like other libs do and add the objects to the list of linked files. > >> > > >> > If you'll notice the libcaccard-y define above, that's exactly what I'm doing. Both qemu and the vscclient (in libcaccard) are linked directly with that list of objects, like you said. Why the shard object too? because I intended to use it for external clients. I don't have an install rule yet, I thought I'll do that later. > >> > >> But then -fPIC shouldn't be used for QEMU objects. Please see how > >> objects which are common to user and system emulators are compiled > >> with different set of flags. > >> > > > > ok, so maybe I should include a Makefile.external explicitly for external projects to build, and then just drop the -fPIC and libcaccard.so? > > External projects should use git subproject and add their Makefiles > that way. I don't think it's even possible to support any external > files, which are unused by QEMU, in long term. > ok, I'll do that.
diff --git a/Makefile b/Makefile index 4e120a2..e673bf1 100644 --- a/Makefile +++ b/Makefile @@ -172,6 +172,8 @@ check-qlist: check-qlist.o qlist.o qint.o $(CHECK_PROG_DEPS) check-qfloat: check-qfloat.o qfloat.o $(CHECK_PROG_DEPS) check-qjson: check-qjson.o qfloat.o qint.o qdict.o qstring.o qlist.o qbool.o qjson.o json-streamer.o json-lexer.o json-parser.o $(CHECK_PROG_DEPS) +QEMULIBS=libhw32 libhw64 libuser libdis libdis-user libcaccard + 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 @@ -183,7 +185,7 @@ clean: rm -f trace-dtrace.dtrace trace-dtrace.dtrace-timestamp rm -f trace-dtrace.h trace-dtrace.h-timestamp $(MAKE) -C tests clean - for d in $(ALL_SUBDIRS) libhw32 libhw64 libuser libdis libdis-user; do \ + for d in $(ALL_SUBDIRS) $(QEMULIBS); do \ if test -d $$d; then $(MAKE) -C $$d $@ || exit 1; fi; \ rm -f $$d/qemu-options.def; \ done @@ -194,7 +196,7 @@ distclean: clean rm -f roms/seabios/config.mak roms/vgabios/config.mak rm -f qemu-doc.info qemu-doc.aux qemu-doc.cp qemu-doc.dvi qemu-doc.fn qemu-doc.info qemu-doc.ky qemu-doc.log qemu-doc.pdf qemu-doc.pg qemu-doc.toc qemu-doc.tp qemu-doc.vr rm -f qemu-tech.info qemu-tech.aux qemu-tech.cp qemu-tech.dvi qemu-tech.fn qemu-tech.info qemu-tech.ky qemu-tech.log qemu-tech.pdf qemu-tech.pg qemu-tech.toc qemu-tech.tp qemu-tech.vr - for d in $(TARGET_DIRS) libhw32 libhw64 libuser libdis libdis-user; do \ + for d in $(TARGET_DIRS) $(QEMULIBS); do \ rm -rf $$d || exit 1 ; \ done diff --git a/Makefile.objs b/Makefile.objs index 2059e89..82691c0 100644 --- a/Makefile.objs +++ b/Makefile.objs @@ -297,6 +297,11 @@ user-obj-y += qemu-timer-common.o endif endif +###################################################################### +# smartcard + +libcaccard-y = cac.o event.o passthru.o vcard.o vreader.o vcard_emul_nss.o vcard_emul_type.o card_7816.o + vl.o: QEMU_CFLAGS+=$(GPROF_CFLAGS) vl.o: QEMU_CFLAGS+=$(SDL_CFLAGS) diff --git a/Makefile.target b/Makefile.target index 2800f47..7dd6932 100644 --- a/Makefile.target +++ b/Makefile.target @@ -341,6 +341,8 @@ obj-y += $(addprefix $(HWDIR)/, $(hw-obj-y)) endif # CONFIG_SOFTMMU +obj-y += $(addprefix $(SRC_PATH)/libcaccard/, $(libcaccard-$(CONFIG_SMARTCARD))) + obj-y += $(addprefix ../, $(trace-obj-y)) obj-$(CONFIG_GDBSTUB_XML) += gdbstub-xml.o diff --git a/configure b/configure index fb9eac2..4b55904 100755 --- a/configure +++ b/configure @@ -2130,6 +2130,25 @@ EOF fi fi +# check for libcaccard for smartcard support +if test "$smartcard" != "no" ; then + smartcard_cflags="-I\$(SRC_PATH)/libcaccard" + smartcard_libs="-L\$(SRC_PATH)/libcaccard -lcaccard" + libcaccard_libs=$($pkgconfig --libs nss 2>/dev/null) + libcaccard_cflags=$($pkgconfig --cflags nss) + # TODO - what's the minimal nss version we support? + if $pkgconfig --atleast-version=3.12.8 nss; then + smartcard="yes" + QEMU_CFLAGS="$QEMU_CFLAGS $smartcard_cflags $libcaccard_cflags" + LIBS="$libcaccard_libs $LIBS" + else + if test "smartcard" = "yes" ; then + feature_not_found "smartcard" + fi + smartcard="no" + fi +fi + ########################################## ########################################## @@ -2956,6 +2975,11 @@ fi if test "$target_darwin_user" = "yes" ; then echo "CONFIG_DARWIN_USER=y" >> $config_target_mak fi +if test "$smartcard" = "yes" ; then + echo "subdir-$target: subdir-libcaccard" >> $config_host_mak + echo "libcaccard_libs=$libcaccard_libs" >> $config_host_mak + echo "libcaccard_cflags=$libcaccard_cflags" >> $config_host_mak +fi list="" if test ! -z "$gdb_xml_files" ; then for x in $gdb_xml_files; do diff --git a/libcaccard/Makefile b/libcaccard/Makefile new file mode 100644 index 0000000..a339af1 --- /dev/null +++ b/libcaccard/Makefile @@ -0,0 +1,18 @@ +include ../Makefile.objs +include ../config-host.mak +include ../config-all-devices.mak +include $(SRC_PATH)/rules.mak + +CFLAGS+=-fPIC + +libcaccard.so: $(libcaccard-y) + gcc -shared $(libcaccard_libs) -o $@ $^ + +vscclient: $(libcaccard-y) vscclient.o + gcc $(libcaccard_libs) -o $@ $^ + +all: libcaccard.so vscclient + +clean: + rm -f *.o */*.o *.d */*.d *.a */*.a *~ */*~ libcaccard.so +
Signed-off-by: Alon Levy <alevy@redhat.com> --- Makefile | 6 ++++-- Makefile.objs | 5 +++++ Makefile.target | 2 ++ configure | 24 ++++++++++++++++++++++++ libcaccard/Makefile | 18 ++++++++++++++++++ 5 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 libcaccard/Makefile