SystemCの環境構築
SystemC。名前と何となくは知っていたけど、日本語の文献があまりにも少ないor高いことから躊躇していたけど、どうもある程度理解しないといけない雰囲気になってきている。今更感がすごいけど。 今回は環境の勉強も兼ねてWSLにSystemCをいれて、Hello Wolrdを表示させるところまで。
ダウンロード
Accelleraのサイトから最新の2.3.3をダウンロードしてきた。
インストール
まずはC++
SystemC以前にg++すら入っていないので、まずはこれから。
# g++のインストール $ sudo yum -y install gcc-c++ # バージョン確認 $ g++ --version g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39)
余談だが、markdownでソースコードの埋め込みをはじめてやってみた。Syntaxハイライトがいい感じ。行ごとに色を変えるとか行番号をつけるとかもできるらしい。 ただ、今後勉強したいSystemVerilogは非対応っぽい。やはりHDL全体的に下火なのか。。
SystemC
先ほどダウンロードしたsystemc-2.3.3.tar.gzを適当なディレクトリに持ってきて、
# 解凍 $ tar zxvf systemc-2.3.3.tar.gz $ cd systemc-2.3.3 # 適当に作業用のディレクトリを作成 $ mkdir obj $ cd obj # インストール先は/usr/local/systemcでバージョンを切っておく $ ../configure --prefix=/usr/local/systemc/2.3.3 'CXXFLAGS=-std=c++11' $ export CXX=g++ $ make $ sudo make install $ make check
SystemCのインストール先を環境変数に設定しておく。慣習的に$SYSTEMC_HOMEなのか?
export SYSTEMC_HOME=/usr/local/systemc/2.3.3
Hello Worldするまで
make checkも通ったし、これでSystemCの準備ができたはず。まずは定番のHello World。
#include <systemc.h> int sc_main(int argc, char *argv[]){ printf("Hello world\n"); return 0; }
で、$SYSTEMC_HOME/includeをインクルードディレクトリに入れてコンパイル。
$ g++ -I. -I$SYSTEMC_HOME/include -c hello.cpp -std=c++11 $ g++ -I$SYSTEMC_HOME/include -L. -L$SYSTEMC_HOME/lib-linux64 hello.o -lsystemc -lm $ ./a.out ./a.out: error while loading shared libraries: libsystemc-2.3.3.so: cannot open shared object file: No such file or directory
コンパイルはできたけど、systemc-2.3.3.soが見つからないらしい。
$ ldd a.out linux-vdso.so.1 => (0x00007fffd9cba000) libsystemc-2.3.3.so => not found libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f17ccf00000) libm.so.6 => /lib64/libm.so.6 (0x00007f17ccbf0000) libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f17cc9d0000) libc.so.6 => /lib64/libc.so.6 (0x00007f17cc5f0000) /lib64/ld-linux-x86-64.so.2 (0x00007f17cd400000)
$LD_LIBRARY_PATHの設定を見てみると、環境変数自体が宣言されていなかった。
$ echo $LD_LIBRARY_PATH
これも.bashrcに書いてやって、
export LD_LIBRARY_PATH # for systemc export SYSTEMC_HOME=/usr/local/systemc/2.3.3 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$SYSTEMC_HOME/lib-linux64
再度実行
$ ./a.out SystemC 2.3.3-Accellera --- Mar 6 2020 21:56:17 Copyright (c) 1996-2018 by all Contributors, ALL RIGHTS RESERVED Hello world
最後にコンパイルコマンドをスクリプトとしてまとめておいた。実行ファイル名はrun.xにするのが慣習のようなので?そのようにしておいた。
#!/bin/sh g++ -I. -I$SYSTEMC_HOME/include -c hello.cpp -std=c++11 g++ -I$SYSTEMC_HOME/include -L. -L$SYSTEMC_HOME/lib-linux64 -o run.x hello.o -lsystemc -lm
とりあえずここまで。