AusweisApp2/libs/README.rst

254 lines
6.9 KiB
ReStructuredText

Libraries
=========
Um die AusweisApp2 zu bauen ist eine Toolchain erforderlich, die die
Abhängigkeiten und die Compilertools beinhaltet.
Unterstützte Compiler:
- MinGW 32 / 64 >= 4.9
- GCC >= 4.7
- Clang >= 3.4
- MSVC >= 2015
Notwendige Bibliotheken:
- Qt >= 5.7
- http://www.qt.io/download/
- OpenSSL >= 1.0.2
- https://www.openssl.org/source/
- Aus dem Ordner "patches" müssen die folgenden Patches angewandt werden.
(Sofern der automatische Build mittels CMake gestartet wird, werden
die Patches automatisch angewandt.)
- openssl_rsa_psk.patch
- pcsclite >= 1.8 (nur Linux)
Notwendige Tools:
- CMake >= 3.1.0
- http://www.cmake.org
Build
-----
Die Abhängigkeiten lassen sich mittels der CMakeLists.txt in diesem Ordner
automatisch aufbauen.
Das Skript kann die abhängigen Bibliotheken als Quellcode selbständig herunterladen,
entpacken und bauen. Dabei ist allerdings zu beachten, dass CMake erst ab v3.1.0
die notwendigen Kompressionen beherrscht [1].
Lokale Pakete können mittels -DPACKAGES_DIR=C:/packages verwendet werden.
Wichtig: Bei PACKAGES_DIR muss ein absoluter Pfad angegeben werden!
Der Build umfasst unter anderem das Qt-Framework, daher kann (je nach Rechenleistung)
der Build einige Stunden dauern.
Wichtig bei der Angabe in CMake ist der Verweis auf den Ordner "libs". Ein Verweis
direkt auf "AusweisApp2" würde den Build für die "AusweisApp2" konfigurieren.
Nach dem Aufruf "make" bzw. "mingw32-make" werden nun alle Bibliotheken gebaut und in
dem Ordner ./dist installiert. Dieser Ordner kann beim Build von der AusweisApp2 mittels
-DCMAKE_PREFIX_PATH als Toolchain angegeben werden.
Zusätzlich kann mit dem make Target "compress" der Inhalt der dist-Ordner bereinigt und
ein Tarball aus den gebauten Bibliotheken erzeugt werden.
[1] http://www.cmake.org/Bug/view.php?id=13515
Proxy
^^^^^
Sofern beim Download der Pakete ein Proxy notwendig ist, müssen vorm Aufruf von "make"
folgende Umgebungsvariablen gesetzt werden. (Ein erneutes Ausführen von CMake ist nicht
notwendig.)
::
http_proxy=host:port
https_proxy=host:port
ftp_proxy=host:port
macOS
^^^^^
Unter MacOS ist die Einrichtung relativ einfach und bedarf nur der oben gennanten Voreinstellungen.
Es wird der von Apple ausgelieferte clang compiler verwendet.
Beispiel: Innerhalb von /Users/governikus/AusweisApp2 befindet sich der Quellcode.
::
$ cd /Users/governikus
$ mkdir build
$ cd build
$ cmake -DPACKAGES_DIR=/Users/governikus/packages ../AusweisApp2/libs
$ make
Windows MinGW
^^^^^^^^^^^^^
Unter Windows ist es derzeit empfohlen einen Teil der Toolchain mittels MSYS zu bauen.
Perl muss dafür ebenfalls installiert sein.
MinGW
"""""
- http://sourceforge.net/projects/mingw-w64/
- Dabei wurde das folgende Paket getestet:
https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/5.3.0/threads-posix/dwarf/i686-5.3.0-release-posix-dwarf-rt_v4-rev0.7z/download
MSYS
""""
- http://www.mingw.org/wiki/msys
- Getestet: 1.0.11
Perl
""""
- http://www.activestate.com/activeperl/downloads
- Getestet: 5.24.0
Vorbereitung
""""""""""""
#. Download und Entpacken des MinGW Paketes.
#. Eintragen des Ordners "bin" von der MinGW-Installation in %PATH%.
#. Installation von MSYS, welche sich auf die MinGW-Installation bezieht.
#. Der Ordner von Perl muss sich in %PATH% befinden.
#. In der Datei "fstab" unter C:\msys\1.0\etc folgende Einträge mit den jeweiligen Pfaden:
::
C:/mingw32/i686-5.3.0-release-posix-dwarf-rt_v4-rev0 /mingw
C:/Perl /perl
Durch einige Probleme mit Unix-Shell-Skripten ist es derzeit leider
notwendig die Toolchain in zwei Schritten aufzubauen.
Hierzu muss OpenSSL und Qt separat gebaut werden.
openssl / Qt
""""""""""""
Da Qt mittels Batchskript gebaut werden muss, ist es leider nicht möglich dies innerhalb
von MSYS zu bauen [2]. Daher wird OpenSSL und Qt mittels Windows-CLI konfiguriert.
Dabei wird Qt über Windows-CLI und OpenSSL unter MSYS gebaut.
#. cmd.exe von Windows starten
#. mkdir c:\msys\1.0\home\user\qt ("user" ist der Benutzer, der unter MSYS verwendet wird)
#. cd c:\msys\1.0\home\user\qt
#. cmake -DPACKAGES_DIR=C:/packages C:/AusweisApp2/libs -G "MinGW Makefiles"
#. MSYS Shell starten
#. cd qt
#. mingw32-make openssl
#. MSYS Shell verlassen
#. In der cmd.exe: c:\msys\1.0\home\user\qt
#. mingw32-make qt
[2] http://sourceforge.net/p/mingw/bugs/1902/
iOS
"""
Die Toolchain für iOS kann nur auf MacOS gebaut werden. Dabei müssen XCode und
die Command Line Tools (siehe "xcode-select -p" bzw. "xcode-select --install")
auf dem Mac vorhanden sein. Die folgende Anleitung wurde unter MacOS 10.9 und 10.11 getestet.
Ebenfalls muss für den Build-Vorgang von Qt ein iOS Developer-Zertifikat mit Wildcard (*)
im Keystore von MacOS hinterlegt sein.
Beispiel: Innerhalb von /Users/governikus/AusweisApp2 befindet sich der Quellcode.
::
$ cd /Users/governikus
$ mkdir build
$ cd build
$ cmake -DPACKAGES_DIR=/Users/governikus/packages -DCMAKE_TOOLCHAIN_FILE=../AusweisApp2/cmake/iOS.toolchain.cmake ../AusweisApp2/libs
$ make
Android
"""""""
Die Toolchain für Android wird derzeit nur unter Linux unterstützt. Dabei müssen folgende
Komponenten vorhanden sein:
- Android NDK mit gesetztem ANDROID_NDK
- https://developer.android.com/tools/sdk/ndk/index.html
- Getestet: r12b (x86_64)
- Android SDK mit gesetztem ANDROID_HOME
- https://developer.android.com/sdk/index.html#Other
- Getestet: 25.1.7
- Unter bestimmten Umständen kann es vorkommen, dass die Build-Tools-Version nicht erkannt
wird. Dies kann mittels der Umgebungsvariable ANDROID_BUILD_TOOLS_REVISION behoben werden.
Die genaue Version ist im Android Manager vom Android SDK (./tools/android) hinterlegt.
- Um Qt erfolgreich zu bauen, sind verschiedene API Level von Android notwendig.
Diese sollten mindestens Level 10, 11, 16 und 18 sein. Nähere Informationen dazu
sind im Wiki von Qt enthalten: http://wiki.qt.io/Android
Die Plattformen können mittels Android Manager nachinstalliert werden.
- JDK mit gesetztem JAVA_HOME
- Apache Ant mit gesetztem ANT_HOME
Beispiel: Innerhalb von /home/governikus/AusweisApp2 befindet sich der Quellcode.
::
$ cd /home/governikus
$ mkdir build
$ cd build
$ cmake -DPACKAGES_DIR=/home/governikus/packages -DCMAKE_TOOLCHAIN_FILE=../AusweisApp2/cmake/android.toolchain.cmake ../AusweisApp2/libs
$ export PATH=/home/governikus/build/standalone/bin:$PATH
$ make
Standardmäßig wird die Architektur "armeabi-v7a" gewählt. Um zum Beispiel die Toolchain für x86-Architektur
zu bauen , ist beim Aufruf von CMake der Parameter "-DANDROID_ABI=x86" mitzugeben.
Der "export" der PATH-Variable wird auch beim Konfigurieren angezeigt. Siehe dazu "You need to call ..."!
Sofern die PATH-Variable nicht um den standalone-Ordner erweitert wird, wird es beim Build zu dem Fehler kommen,
dass der Cross-Compiler für die jeweilige Architektur nicht gefunden werden konnte.