概要
複数のバージョンの Vivado や Vitis を共存させて切り替えながら使いこなしている人も多いと思います。
特に最近私がコマンドラインから使う機会が増えてきたのですが、不用意に settings64.sh を実行すると、他のツールとの競合もあったりして Vivado を使うときだけ使いたいバージョンの settings64.sh を呼んでおりました。
しかしながら、たまたま settings64.sh 実行時に cmake のバージョンが下がってしまって困ったケースがあったので、いっそ vivado コマンドを呼んだタイミングでだけ settings64.sh が実行されるようにしてしまうことができないかと思い、少し試行錯誤してみました。今回はその記録です。
環境は WSL2 の Ubuntu 20.04 でやっております。
やってみたこと
やったのは 下記のようなスクリプト(vivado_env.sh) を作り、パスの通るところ(私の場合は ~/.local/bin/)に置いただけです。
#!/bin/bash if [ -z "$VIVADO_ENV" ]; then VIVADO_ENV=2019.2 fi source /tools/Xilinx/Vitis/$VIVADO_ENV/settings64.sh `basename $0` $@
一応、環境変数が無い時にデフォルトで呼ぶバージョンもここで入れておきます。
そのあとは、同じディレクトリで
ln -s vivado_env.sh vivado ln -s vivado_env.sh vivado_hls ln -s vivado_env.sh vitis_hls ln -s vivado_env.sh vitis ln -s vivado_env.sh xvlog ln -s vivado_env.sh xelab ln -s vivado_env.sh xsim
として、ラッピングしたいコマンド群のシンボリックリンクを作るだけです。私はとりあえず上のような感じで、とりあえず要るものを作りました。
これで VIVADO_ENV という環境変数を変えるだけでバージョンのスイッチができるはずです。
もう少し便利にしてみる
ついでに .bashrc に下記のように切り替えコマンドを定義してみました。
export VIVADO_ENV=2019.2 function vivado_switch() { export VIVADO_ENV=$1 }
として、さらにコマンドプロンプトの表示を変えるように以下にしました。
もともとgitのブランチを表示できるようにこちらを参考にさせて頂いて手を入れていたので、下記のようになりました。
# プロンプト変更 function parse_vivado_version { echo "$VIVADO_ENV" } function parse_git_branch { git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ \(\1\)/' } function promps { local BLUE="\[\e[1;34m\]" local RED="\[\e[1;31m\]" local GREEN="\[\e[1;32m\]" local YELLOW="\[\e[1;33m\]" local WHITE="\[\e[00m\]" local GRAY="\[\e[1;37m\]" case $TERM in xterm*) TITLEBAR='\[\e]0;\W\007\]';; *) TITLEBAR="";; esac local BASE="\u@\h" PS1="${TITLEBAR}${GREEN}${BASE}${WHITE}:${BLUE}\w${GREEN}\$(parse_git_branch)${YELLOW} (vivado\${VIVADO_ENV})${BLUE}${WHITE}\n\$ " } promps
結果
こんな感じでスイッチできるようになりました。
使い心地はこれからです。まだいろいろ課題が出てきそうな気もしていますがとりあえず作業メモまでです。
おまけ
Makefile などからバージョン判定の為の文字列を引っ張り出したメモを貼っておきます。
Makefileの場合
# get vivado version empty:= space:= $(empty) $(empty) VIVADO_VERSIONS := $(subst .,$(space),$(subst v,,$(word 2,$(shell vivado -version)))) VIVADO_VERSION := $(word 1,$(VIVADO_VERSIONS)).$(word 2,$(VIVADO_VERSIONS))
cmake の場合
# vivado version execute_process ( COMMAND vivado -version OUTPUT_VARIABLE VIVADO_VERSION_TEXT ) string(REGEX MATCH [[v[0-9]+\.[0-9]+]] VIVADO_VERSION ${VIVADO_VERSION_TEXT}) string(SUBSTRING ${VIVADO_VERSION} 1 6 VIVADO_VERSION) string(SUBSTRING ${VIVADO_VERSION} 0 4 VIVADO_VERSION_MAJOR) string(SUBSTRING ${VIVADO_VERSION} 5 1 VIVADO_VERSION_MINOR)
追記
最近、もう少し便利なバージョン切り替え方法として、下記のようなツールにしてみました。 よろしければお試しください。