はじめに
本記事では,Linux環境でVivadoを使うことを前提としています.提案する手法は以下の2つの環境で期待通りに動作することを検証済みです.
- 環境1: Ubuntu 16.04LTS
- Vivado 2018.1
- 環境2: Windows Subsystem for Linux (Ubuntu 16.04 LTS)
- Vivado 2017.4
問題: settings64.shを使ったら一部のコマンドが使えなくなった
Linux環境でVivadoを使う際,以下のようにパスを通す必要があります.
$ source path/to/directory/Xilinx/Vivado/2017.4/settings64.sh
このコマンドを.bashrcに書いておけば,Vivadoを起動する度にパスを通す必要がなくなるため便利です.しかしパスを通した後,一部のコマンドのパスがVivadoのディレクトリ下にあるものに変更されることがあります.
$ which cmake
/usr/bin/cmake
$ source path/to/directory/Xilinx/Vivado/2017.4/settings64.sh
$ which cmake
path/to/directory/Xilinx/SDK/2017.4/tps/lnx64/cmake-3.3.2/bin/cmake # 変わった!
この問題に対処する方法としては,Vivadoを起動する度に手動でパスを通したり新たに端末を開くことなどが考えられます.しかし頻繁にVivadoを使うユーザからすると非常に面倒です.できればVivadoの使用中はVivadoのコマンドを参照し,それ以外の場合は普段のコマンドが使えることが望ましいです.
解決策
Vivadoの起動中にのみパスを通すようにする
前述の問題を回避するために,Vivadoの使用時のみVivadoのディレクトリへパスを通します..bashrcに以下を追記しましょう.
# vivado
function vivado(){
# initialize
source path/to/directory/Xilinx/Vivado/2017.4/settings64.sh
# activate
path/to/directory/Xilinx/Vivado/2017.4/bin/vivado $@
# remove path
xilinx_path=(`echo $PATH | tr ":" "\n" | grep Xilinx`)
for ((i = 0; i < ${#xilinx_path[@]}; i++)); do
export PATH=`echo -n $PATH | awk -v RS=: -v ORS=: '$0 != "'${xilinx_path[$i]}'"' | sed 's/:$//'`
done
}
vivadoのラッパ関数をbashで作成し,起動時にパスを通すようにします.vivadoの終了後に"Xilinx"の文字列が含まれるパスを$PATHから削除することで,作業後に既存のコマンドが使えます.なおvivadoの実行は絶対パスで行います."vivado $@"のようにすると,vivado関数が永久的に呼び出されてしまうためです.
副作用
この手法は,パスを通す前に$PATHが"Xilinx"の文字列を含まないことを前提としています.もしお使いの環境で既に"Xilinx"の文字列を含むパスが存在する場合,この手法はオススメできません.
おわりに
.bashrcにvivadoのラッパ関数を記述し,vivadoの使用時にのみVivadoへパスを通す手法を提案しました.ちなみに筆者はVivado HLSのラッパ関数も作って使っています.Vivado,Vivado HLSを使うたびにパスのことで悩まなくなるので非常に便利です.もし他にも賢いやり方があったり,全く違う方法でこの問題に対処している方がいましたら,是非コメントでお教えください!