Jetson Nano に pptk をインストールする

# 前置き
[Kaolin](https://github.com/NVIDIAGameWorks/kaolin) を Jetson Nano で動かしてみようと思いました。
ドキュメントに沿って進めてみましたが、**ERROR: kaolin 0.1.0 requires pptk, which is not installed.** など、パッケージの不足を示す複数のエラーが...

ほとんどは **pip install 〇〇** で解決できましたが、 pptk に関しては解決できず、インストールに苦労したので、 pptk を Jetson Nano にインストールする方法をメモとして残します。

# 実行環境

```
$ uname -a
Linux JetsonNano 4.9.140-tegra #1 SMP PREEMPT Mon Dec 9 22:47:42 PST 2019 aarch64 aarch64 aarch64 GNU/Linux
```


# 初めに試したこと
pptk を pip でインストールする。

```
$ pip install pptk
ERROR: Could not find a version that satisfies the requirement pptk (from versions: none)
ERROR: No matching distribution found for pptk
```

上記のように、Jetson Nano Ubuntu18.04 ではインストールすることができませんでした。

また、PyPIから[whlファイル](https://pypi.org/project/pptk/#files)も探しましたが、Jetson Nano Ubuntu18.04 に該当するファイルは見つかりませんでした。

# pptk の GitHub を確認
[pptk の GitHub](https://github.com/heremaps/pptk) を確認したみたところ、インストール方法として pip 以外に、[ソースから pptk をビルドする方法](https://github.com/heremaps/pptk#build)がありました。今回はこの方法を利用します。


# pptk に必要な依存関係のインストール
以下に示す5つが必要です。

- QT
- TBB
- Eigen
- Python
- Numpy

[CMakeCache.linux.txt](https://github.com/heremaps/pptk/blob/master/CMakeCache.linux.txt) を参考に QT、TBB、Eigen のインストール方法をメモとして残します。なお、QT、TBB、Eigen それぞれのバージョンは、[CMakeCache.linux.txt](https://github.com/heremaps/pptk/blob/master/CMakeCache.linux.txt) と一致させています。

また、後述する CmakeCache.txt を作成するための準備として、インストールしたファイルを格納するためのディレクトリを用意します。

```
$ cd
$ mkdir Sources && cd Sources
```
それでは、必要なファイルをインストールしていきます。

## QT

```
$ sudo apt install qtbase5-dev qttools5-dev-tools qt5-default
```

## TBB

```
$ wget wget https://github.com/oneapi-src/oneTBB/releases/download/2018_U1/tbb2018_20170919oss_lin.tgz
$ tar -xzvf tbb2018_20170919oss_lin.tgz
```

## Eigen

```
$ wget http://bitbucket.org/eigen/eigen/get/3.3.4.tar.bz2
$ tar -xjvf 3.3.4.tar.bz2
$ mv eigen-eigen-5a0156e40feb/ eigen-3.3.4/
```

# pptk のビルド
必要なファイルのインストールが完了したら、pptk のビルドを行います。
まず、 pptk を GitHub から クローンします。

```
$ cd
$ git clone https://github.com/heremaps/pptk.git temp
```

次に、ビルドするためのディレクトリを作成し、そのディレクトリ内に CmakeCache.txt を作成します。

```
$ cd temp
$ mkdir build && cd build
$ touch CMakeCache.txt
```

それでは、[CMakeCache.linux.txt](https://github.com/heremaps/pptk/blob/master/CMakeCache.linux.txt) を参考に、CMakeCache.txt を記述します。

上記の手順で進めた場合、CMakeCache.txt は以下のようになります。
Numpy_INCLUDE_DIR:PATH は異なると思いますので、環境に合わせて変更して下さい。

``` CMakeCache.txt
Numpy_INCLUDE_DIR:PATH=/home/JetsonNano/.virtualenvs/py33d/lib/python3.6/site-packages/numpy/core/include/numpy
Eigen_INCLUDE_DIR:PATH=/home/JetsonNano/Sources/eigen-3.3.4
Qt5_DIR:PATH=/usr/lib/aarch64-linux-gnu/cmake/Qt5
TBB_INCLUDE_DIR:PATH=/home/JetsonNano/Sources/tbb2018_20170919oss/include
TBB_tbb_LIBRARY:FILEPATH=/home/JetsonNano/Sources/tbb2018_20170919oss/lib/intel64/gcc4.7/libtbb.so
TBB_tbb_RUNTIME:FILEPATH=/home/JetsonNano/Sources/tbb2018_20170919oss/lib/intel64/gcc4.7/libtbb.so
TBB_tbbmalloc_LIBRARY:FILEPATH=/home/JetsonNano/Sources/tbb2018_20170919oss/lib/intel64/gcc4.7/libtbbmalloc.so
TBB_tbbmalloc_RUNTIME:FILEPATH=/home/JetsonNano/Sources/tbb2018_20170919oss/lib/intel64/gcc4.7/libtbbmalloc.so
PPTK_PATCHELF:FILEPATH=/home/JetsonNano/Sources/install/bin/patchelf
```

CMakeCache.txt の作成後、以下を実行します。

```
$ cmake ~/temp/
```

cmake の 実行後、以下のようにディレクトリ pptk が生成されます。

```
$ tree -L 1 ~/temp/build
/home/JetsonNano/temp/build
├── CMakeCache.txt
├── CMakeFiles
├── cmake_install.cmake
├── licenses
├── Makefile
└── pptk
```

生成された pptk をコピーします。

```
$ cp -r pptk /home/JetsonNano/.virtualenvs/py33d/lib/python3.6/site-packages/
```


# pptk の確認
最後に pptk がインストールされているか確認します。

```
$ python3
>>> import pptk
>>> import kaolin
>>>
```