VivadoやXilinx SDKをLinux (Ubuntu) で動かすメモ　(Ubuntu 16.04 LTS, Vivado 2016.4, 64bit環境)

Xilinx製品の開発に欠かせないVivadoは、ご存知の通りWindows版及びLinux版が提供されています。
開発環境としてLinuxを用いることも多いでしょうが、Windowsに比べLinuxでVivadoを動かすのは少し面倒だったりします。
この記事ではポピュラーなディストリビューションであるUbuntu 16.04 LTSを用い、Vivado、Xilinx SDK、Documentation NavigatorをUbuntuで動かすためのインストール、設定についてまとめました。Vivadoのバージョンは2016.4で確認しています。




#ダウンロードとインストール
https://japan.xilinx.com/support/download.html
上のリンクからインストーラーをダウンロードします。ダウンロードには登録が必要です。Webインストーラーが良いでしょう。
ダウンロードしたbinファイルに実行権限を付与し`/opt/Xilinx`にインストールします[^1]。


```shell-session
sudo chmod +x [インストーラー]
sudo ./[インストーラー]
```

インストール時にもXilinxのアカウント情報が求められるので注意してください。インストール作業自体は特に迷う部分はないかと思います。なお、以下の説明でXilinx SDKも一緒にインストールした前提で話を進めているところがありますので適宜解釈ください。

##Cable Driverのインストール
上で説明した手順では、プログラミングケーブル（あるいはボード）用のデバイスドライバーはインストールされません。これらは別個にインストールする必要があります。これにはroot権限が必要です。例えば`/opt/Xilinx`にインストールした場合、インストールは次のようにします。

```shell-session
sudo /opt/Xilinx/Vivado/2016.4/data/xicom/cable_drivers/lin64/install_script/install/drivers/install_drivers
```

#Vivadoを動かす
インストールが完了した状態でターミナルに`vivado`と打ち込んでみてもVivadoは立ち上がりません。
Vivadoが立ち上がるようにするには`settings64.sh`スクリプトを走らせる必要があります。
`source /opt/Xilinx/Vivado/2016.4/settings64.sh`あるいは`source /opt/Xilinx/SDK/2016.4/settings64.sh`を.bashrc等に追記しておくのがよいでしょう[^2]。

#Xilinx SDKを動かす
`settings64.sh`スクリプトによって$PATHの設定などXilinx SDKを起動する準備はできていますが、Ubuntu 16.04では`xsdk`と打ち込んでもXilinx SDKは失敗します。

これはEclipse系のアプリケーション全体に関わる話であるようなのですが、Ubuntu 16.04で導入されているGTK+3ではうまく動かないようです。起動するには`export SWT_GTK3=0`としてGTK+3を無効にします。
実用的には、以下のようなaliasが便利です。

```shell-session
alias xsdk='env SWT_GTK3=0 xsdk'
```

#Documentation Navigatorを動かす
まだ動かないアプリケーションがあります。それは数々のドキュメントを簡単に参照できるDocumentation Navigatorです。`docnav`と打ち込んでもクラッシュしてしまうことがあります。Vivadoからドキュメントを参照しようとしてもクラッシュしてしまいます。

これはDocumentation Navigatorが32ビット版のライブラリを必要とするためです。解決するには以下のようにして必要なライブラリをインストールします。

```shell-session
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install libstdc++6:i386 libgtk2.0-0:i386 libfontconfig1:i386 libx11-6:i386 libxext6:i386 libxrender1:i386 libsm6:i386 libqtgui4:i386
```

#.desktopファイルでショートカットの作成
.desktopファイルを作成することで、ターミナルからだけでなくUnityやGNOMEなどからVivado等のアプリケーションを起動することができます。

まず、VivadoとXilinx SDKのための起動スクリプトを作成します。以下は`/opt/Xilinx`にインストールした場合です。

```shell-session:/usr/local/bin/run-vivado
#!/bin/bash
. /opt/Xilinx/Vivado/2016.4/settings64.sh
vivado &
```

```shell-session:/usr/local/bin/run-xilinx-sdk
#!/bin/bash
export SWT_GTK3=0
. /opt/Xilinx/SDK/2016.4/settings64.sh
xsdk &
```

これらの配置場所は一例です。どこでも構いません。`sudo chmod +x`を忘れないでください。

次に例えば以下のようなファイルを作成し、`~/.local/share/applications`に配置します。

```shell-session:Xilinx-Vivado.desktop
#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application
Name=Xilinx Vivado
Exec=/usr/local/bin/run-vivado
Path=[Vivadoの作業ディレクトリ]
Icon=/opt/Xilinx/Vivado/2016.4/doc/images/vivado_logo.png
Categories=Development;
Comment=Vivado Integrated Development Environment
StartupNotify=true
```
```shell-session:Xilinx-SDK.desktop
#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application
Name=Xilinx SDK
Exec=/usr/local/bin/run-xilinx-sdk
Icon=/opt/Xilinx/SDK/2016.4/data/sdk/images/sdk_logo.png
Categories=Development;
Comment=Xilinx Software Development Kit
StartupNotify=true
```
```shell-session:Xilinx-DocNav.desktop
#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application
Name=Xilinx Documentation Navigator 
Exec=/opt/Xilinx/DocNav/docnav
Icon=/opt/Xilinx/DocNav/resources/doc_nav_application_48.png
Categories=Development;
Comment=Xilinx Documentation Navigator
```

これでUnity Dashなどからもアプリケーションが見え、起動できるはずです。

#最後に
私は以上の内容について責任を持ちませんが、Vivadoを使ってみようとしている方々にとって少しでも参考になればと思います。

#参考
- インストールについて
https://www.xilinx.com/support/documentation/sw_manuals/xilinx2015_1/ug973-vivado-release-notes-install-license.pdf

- Vivadoを起動するための環境設定について
https://japan.xilinx.com/support/answers/47821.html

- Xilinx SDKが起動できない問題について
https://japan.xilinx.com/support/answers/67580.html

- 必要とするライブラリについて
https://japan.xilinx.com/support/answers/66184.html


[^1]: root権限がなくてもVivadoはインストール可能ですが、ここではデフォルトの場所である`/opt/Xilinx`にインストールするためroot権限でインストールしています。

[^2]: どちらも同じです。