ずくなし技術者の雑記帳

趣味レベルでやったこと

Windows上のUbuntuでSystemC環境を整える

Windows上でSystemC環境を整えたくてWindows Subsystem for Linuxの環境でSystemCを試してみた。

Ubuntuのインストールはここでは省略。

準備

Ubuntuを入れた初期状態ではgcc等の開発環境すら入っていないので必要なものをapt-getしてくる

% sudo apt-get update
% sudo apt-get install gcc g++ make

SystemCのソースコードを入手してインストールする

% cd systemc-2.3.1
% mkdir build
% cd build
% sudo mkdir -p /opt/systemc/2.3.1 
% ../configure --prefix=/opt/systemc/2.3.1
% make 
% sudo make install

ここまでは問題なくできた。

サンプルコードをコンパイルしてみる

hello.cpp

#include <systemc.h>

int sc_main(int argc, char* argv[])
{
  printf("Hello SystemC!!!\n");

  return 0;
}

コンパイルは次の通り。

% g++ -c -I/opt/systemc/2.3.1/include hello.cpp
% g++ -o sim.x -L/opt/systemc/2.3.1/lib-linux64 -Wl,-R/opt/systemc/2.3.1/lib-linux64 -Wl,-Bstatic -lsystemc -Wl,-Bdynamic -lm -pthread hello.o

% ./sim.x

        SystemC 2.3.1-Accellera --- Aug 10 2017 20:24:07
        Copyright (c) 1996-2014 by all Contributors,
        ALL RIGHTS RESERVED
Hello SytemC!!!


コンパイルで少しはまりました。

./sim.x: error while loading shared libraries: libsystemc-2.3.1.so: cannot enable executable stack as shared object requires: Invalid argument

このメッセージの対策として

-Wl,-Bstatic -lsystemc -Wl,-Bdynamic

"-Bstatic"と"-Bdynamic"とでsystemcライブラリを挟むと挟まれたライブラリについてスタティックリンクを有効にするという意味になるようだ。
なぜスタティックリンクを有効にしなければならないのかはよくわからない。

ちなみに"-Wl,R"は動的ライブラリパスを教えてあげている。"-WL,rpath"でもよいらしい。
LD_LIBRARY_PATHを指定していれば付ける必要はない。

ついでに、GTKWAVEもインストールしてみた

% sudo apt-get install gtkwave

起動しようとしたとき、次のメッセージが出てしまいGUIが立ち上がらないとき、
Could not initialize GTK! Is DISPLAY env var/xhost set?
どうやら、Xサーバを別途用意しないといけないようだ。

Windows上に別途xmingをインストール
xmingを立ち上げた状態で実行したらGUIが起動できた

% gtkwave

以上