From db01d94484b15531c957dca34f7f2728b98fdc74 Mon Sep 17 00:00:00 2001 From: Frank Morgner Date: Mon, 9 Sep 2013 02:24:30 +0200 Subject: [PATCH] added target to build for Android We use virtualsmartcard's libpcsclite to connect to a smartcard. The PC/SC service with vicc-interface is implemented elsewhere (currently un-free). --- npa/Makefile.am | 7 ++- npa/configure.ac | 2 +- npa/cross/Makefile.am | 127 ++++++++++++++++++++++++++++++++++++++++++ npa/win32/Makefile.am | 80 -------------------------- 4 files changed, 133 insertions(+), 83 deletions(-) create mode 100644 npa/cross/Makefile.am delete mode 100644 npa/win32/Makefile.am diff --git a/npa/Makefile.am b/npa/Makefile.am index bbcb58e..03ed334 100644 --- a/npa/Makefile.am +++ b/npa/Makefile.am @@ -1,5 +1,5 @@ ACLOCAL_AMFLAGS = -I m4 -SUBDIRS = src m4 doc win32 certs +SUBDIRS = src m4 doc cross certs EXTRA_DIST = libnpa.pc.in apdus test_vicc_with_npa-tool.sh @@ -22,7 +22,10 @@ libnpa.pc: libnpa.pc.in $(do_subst) < $(srcdir)/libnpa.pc.in > libnpa.pc win: - make -C win32 $@ + make -C cross $@ + +android: + make -C cross $@ clean-local: rm -f libnpa.pc diff --git a/npa/configure.ac b/npa/configure.ac index a9a558f..9f3ca16 100644 --- a/npa/configure.ac +++ b/npa/configure.ac @@ -197,6 +197,6 @@ AC_CONFIG_FILES([ doc/Makefile m4/Makefile src/Makefile - win32/Makefile + cross/Makefile ]) AC_OUTPUT diff --git a/npa/cross/Makefile.am b/npa/cross/Makefile.am new file mode 100644 index 0000000..dbd5a2f --- /dev/null +++ b/npa/cross/Makefile.am @@ -0,0 +1,127 @@ +all-local: + @echo Use \`$(MAKE) win\` to cross compile for Windows + @echo Use \`$(MAKE) android\` to cross compile for Android + + + +WIN_TOOL ?= i686-w64-mingw32 +WIN_TOOL_DIR ?= /usr/$(WIN_TOOL) +WIN_TARGETDIR = $(abs_top_builddir)/$(PACKAGE_TARNAME)-$(PACKAGE_VERSION)_win32 + +win: + $(MAKE) cross \ + TOOL=$(WIN_TOOL) \ + TOOL_DIR=$(WIN_TOOL_DIR) \ + TARGETDIR=$(ANDROID_TARGETDIR) \ + LIBEAC=$(WIN_TARGETDIR)/bin/libeac-0.dll \ + LIBNPA=$(WIN_TARGETDIR)/bin/libnpa-0.dll + + + +ANDROID_ARCH ?= arm +ANDROID_TOOL ?= $(ANDROID_ARCH)-linux-androideabi +ANDROID_TOOL_DIR ?= $(abs_builddir)/ndk +ANDROID_TARGETDIR = $(abs_top_builddir)/$(PACKAGE_TARNAME)-$(PACKAGE_VERSION)_$(ANDROID_ARCH) +MAKE_STANDALONE_TOOLCHAIN ?= $${HOME}/.local/opt/android-ndk-r9/build/tools/make-standalone-toolchain.sh + +android: $(VIRTUALSMARTCARD_CONFIGURE) + test -d $(ANDROID_TOOL_DIR) \ + || $(MAKE_STANDALONE_TOOLCHAIN) --install-dir=$(ANDROID_TOOL_DIR) --arch=$(ANDROID_ARCH) + cd $(VIRTUALSMARTCARD) && env PATH=$(ANDROID_TOOL_DIR)/bin:$${PATH} ./configure \ + --prefix=/ \ + --host=$(ANDROID_TOOL) --target=$(ANDROID_TOOL) \ + --enable-libpcsclite --enable-vpcdhost=localhost \ + PKG_CONFIG_SYSROOT_DIR=$(ANDROID_TARGETDIR) \ + PKG_CONFIG_LIBDIR=$(ANDROID_TARGETDIR)/lib/pkgconfig \ + CFLAGS=-I$(ANDROID_TOOL_DIR)/include \ + LDFLAGS=-L$(ANDROID_TOOL_DIR)/lib + @echo Compiling virtual smartcard + env PATH=$(ANDROID_TOOL_DIR)/bin:$${PATH} $(MAKE) -C $(VIRTUALSMARTCARD) install DESTDIR=$(ANDROID_TARGETDIR) + env PATH=$(ANDROID_TOOL_DIR)/bin:$${PATH} $(MAKE) cross \ + TOOL=$(ANDROID_TOOL) \ + TOOL_DIR=$(ANDROID_TOOL_DIR) \ + TARGETDIR=$(ANDROID_TARGETDIR) \ + LIBEAC=$(ANDROID_TARGETDIR)/lib/libeac.so \ + LIBNPA=$(ANDROID_TARGETDIR)/lib/libnpa.so + @echo Configuring virtual smartcard + + + +clean-local: + rm -rf $(TARGETDIR) + + + +cross: $(LIBNPA) + +$(LIBNPA): $(OPENPACE_MAKEFILE) + @echo Compiling OpenPACE + $(MAKE) -C $(OPENPACE)/cross cross \ + TOOL=$(TOOL) \ + TOOL_DIR=$(TOOL_DIR) \ + TARGETDIR=$(TARGETDIR) \ + LIBEAC=$(LIBEAC) + @echo Configuring OpenSC + cd $(OPENSC) && ./configure \ + --prefix=/ \ + --host=$(TOOL) --target=$(TOOL) \ + --enable-sm \ + PKG_CONFIG_SYSROOT_DIR=$(TARGETDIR) \ + PKG_CONFIG_LIBDIR=$(TARGETDIR)/lib/pkgconfig \ + CFLAGS=-I$(TOOL_DIR)/include \ + LDFLAGS=-L$(TOOL_DIR)/lib + @echo Compiling OpenSC + $(MAKE) -C $(OPENSC) install DESTDIR=$(TARGETDIR) + @echo Configuring libnpa + cd $(top_builddir) && env ac_cv_func_malloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes ./configure \ + --prefix=/ \ + --host=$(TOOL) --target=$(TOOL) \ + PKG_CONFIG_SYSROOT_DIR=$(TARGETDIR) \ + PKG_CONFIG_LIBDIR=$(TARGETDIR)/lib/pkgconfig \ + OPENSC_LIBS="-L$(TARGETDIR)/lib -lopensc" \ + CFLAGS=-I$(TOOL_DIR)/include \ + LDFLAGS=-L$(TOOL_DIR)/lib + @echo Compiling libnpa + env CROSS_COMPILE=$(CROSS_COMPILE) \ + $(MAKE) -C $(top_builddir) install DESTDIR=$(TARGETDIR) + + + +OPENPACE=$(abs_builddir)/openpace +OPENPACE_CONFIGURE_AC=$(OPENPACE)/configure.ac +OPENPACE_CONFIGURE=$(OPENPACE)/configure +OPENPACE_MAKEFILE=$(OPENPACE)/Makefile + +$(OPENPACE_CONFIGURE_AC): + git clone git://openpace.git.sourceforge.net/gitroot/openpace/openpace $(OPENPACE) + +$(OPENPACE_CONFIGURE): $(OPENPACE_CONFIGURE_AC) + cd $(OPENPACE) && autoreconf --verbose --install --symlink + +$(OPENPACE_MAKEFILE): $(OPENPACE_CONFIGURE) + cd $(OPENPACE) && ./configure + + + +OPENSC=$(abs_builddir)/opensc +OPENSC_CONFIGURE_AC=$(OPENSC)/configure.ac +OPENSC_CONFIGURE=$(OPENSC)/configure + +$(OPENSC_CONFIGURE_AC): + git clone git://github.com/OpenSC/OpenSC.git $(OPENSC) + +$(OPENSC_CONFIGURE): $(OPENSC_CONFIGURE_AC) + cd $(OPENSC) && autoreconf --verbose --install --symlink + + + +VSMARTCARD=$(abs_builddir)/vsmartcard +VIRTUALSMARTCARD=$(VSMARTCARD)/virtualsmartcard +VIRTUALSMARTCARD_CONFIGURE_AC=$(VIRTUALSMARTCARD)/configure.ac +VIRTUALSMARTCARD_CONFIGURE=$(VIRTUALSMARTCARD)/configure + +$(VIRTUALSMARTCARD_CONFIGURE_AC): + git clone git://github.com/frankmorgner/vsmartcard.git $(VSMARTCARD) + +$(VIRTUALSMARTCARD_CONFIGURE): $(VIRTUALSMARTCARD_CONFIGURE_AC) + cd $(VIRTUALSMARTCARD) && autoreconf --verbose --install --symlink diff --git a/npa/win32/Makefile.am b/npa/win32/Makefile.am deleted file mode 100644 index 308ec8f..0000000 --- a/npa/win32/Makefile.am +++ /dev/null @@ -1,80 +0,0 @@ -MINGW ?= i686-w64-mingw32 -MINGW_DIR ?= /usr/$(MINGW) -WIN32_DIR ?= $(abs_top_builddir)/$(PACKAGE_TARNAME)-$(PACKAGE_VERSION)_win32 - -OPENPACE=$(abs_builddir)/openpace -OPENPACE_CONFIGURE_AC=$(OPENPACE)/configure.ac -OPENPACE_CONFIGURE=$(OPENPACE)/configure -OPENPACE_MAKEFILE=$(OPENPACE)/Makefile -LIBEAC=$(WIN32_DIR)/bin/libeac-0.dll - -OPENSC=$(abs_builddir)/opensc -OPENSC_CONFIGURE_AC=$(OPENSC)/configure.ac -OPENSC_CONFIGURE=$(OPENSC)/configure -LIBOPENSC=$(WIN32_DIR)/bin/libopensc-3.dll - -NPA_TOOL=$(WIN32_DIR)/bin/npa-tool.exe - - - -$(OPENPACE_CONFIGURE_AC): - git clone git://openpace.git.sourceforge.net/gitroot/openpace/openpace $(OPENPACE) - -$(OPENPACE_CONFIGURE): $(OPENPACE_CONFIGURE_AC) - cd $(OPENPACE) && autoreconf --verbose --install --symlink - -$(OPENPACE_MAKEFILE): $(OPENPACE_CONFIGURE) - cd $(OPENPACE) && ./configure - -$(LIBEAC): $(OPENPACE_MAKEFILE) - make -C $(OPENPACE) win MINGW=$(MINGW) WIN32_DIR=$(WIN32_DIR) - - - -$(OPENSC_CONFIGURE_AC): - git clone git://github.com/OpenSC/OpenSC.git $(OPENSC) - -$(OPENSC_CONFIGURE): $(OPENSC_CONFIGURE_AC) - cd $(OPENSC) && autoreconf --verbose --install --symlink - -$(LIBOPENSC): $(OPENSC_CONFIGURE) $(LIBEAC) - cd $(OPENSC) && ./configure \ - --prefix=/ \ - --target=$(MINGW) --host=$(MINGW) \ - PKG_CONFIG_SYSROOT_DIR=$(WIN32_DIR) \ - PKG_CONFIG_LIBDIR=$(WIN32_DIR)/lib/pkgconfig \ - CFLAGS=-I$(MINGW_DIR)/include \ - LDFLAGS=-L$(MINGW_DIR)/lib - $(MAKE) -C $(OPENSC) install DESTDIR=$(WIN32_DIR) - - - -$(NPA_TOOL): $(LIBEAC) $(LIBOPENSC) - cd $(abs_top_builddir) \ - && export ac_cv_func_malloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes \ - && ./configure \ - --prefix=/ \ - --host=$(MINGW) --target=$(MINGW) \ - PKG_CONFIG_SYSROOT_DIR=$(WIN32_DIR) \ - PKG_CONFIG_LIBDIR=$(WIN32_DIR)/lib/pkgconfig \ - CFLAGS=-I$(MINGW_DIR)/include \ - LDFLAGS="-L$(MINGW_DIR)/lib " \ - OPENSC_LIBS="-L$(WIN32_DIR)/lib -lopensc" - $(MAKE) -C $(abs_top_builddir) install DESTDIR=$(WIN32_DIR) - - - -all-local: - @echo Use \`$(MAKE) win\` to cross compile for Windows - -win: $(NPA_TOOL) - $(INSTALL) -d $(WIN32_DIR)/include/libopensc - $(INSTALL_DATA) -t $(WIN32_DIR)/include/libopensc \ - $(OPENSC)/src/libopensc/*.h - rm -f $(WIN32_DIR)/include/libopensc/*internal*.h - -clean-local: - rm -rf $(IMAGE) $(WIN32_DIR) - -distclean-local: - rm -rf $(OPENSC) $(BUILD)