SystemCのexample
手始めに/usr/local/systemc/2.3.3/examples/の中身を見てみることにする。
まずはmake
とりあえずbuild-unix/というディレクトリ以下でmakeできるようなので、makeしてみた。
$ make make[1]: ディレクトリ `/home/XXXX/sandbox/systemc/tutorial/examples/sysc/pipe' に入ります ../../build-unix/Makefile.rules:101: *** SystemC library [/usr/local/systemc/2.3.3/lib] not found. Please update Makefile.config. 中止. make[1]: ディレクトリ `/home/XXXX/sandbox/systemc/tutorial/examples/sysc/pipe' から出ます make: *** [all] エラー 2
lib-linux64を見てほしいのに、libを見に行ってしまっている。以下の$SYSTEMC_LIB_DIRが環境とあっていない模様。
Makefile.rules:SYSTEMC_LIB_DIR ?= $(SYSTEMC_HOME)/lib$(ARCH_SUFFIX)
?=は左辺が空(未定義)の時に右辺を代入するという意味らしい。で、$ARCH_SUFFIXが空だと、今のエラーにつながりそう。 READMEによると
The following variables can be set (or overridden from the environment): SYSTEMC_HOME - path to installation TARGET_ARCH - target architecture ARCH_SUFFIX - library architecture suffix (see INSTALL)
なので、自分で設定してしまってよいのかな。$SYSTEMC_HOMEはインストール時に.bashrcに設定しているので、$TARGET_ARCHと$ARCH_SUFFIXはMakefile.rulesに書いてしまおう。今後もよく使う変数ならその時.bashrcに移動させる。さらにMakefile.rulesの書き方だと$ARCH_SUFFIXは$TARGET_ARCHを参照しているので、$TARGET_ARCHのみ設定してあげた。
## Select the TARGET_ARCH needs to be set # TARGET_ARCH ?= linux TARGET_ARCH = linux64 ## default values for additional setup variables ifneq (,$(strip $(TARGET_ARCH))) ARCH_SUFFIX ?= -$(TARGET_ARCH) endif LDFLAG_RPATH ?= -Wl,-rpath=
で、再度make
$ make make[1]: ディレクトリ `/home/XXXX/sandbox/systemc/tutorial/examples/sysc/pipe' に入ります *** pipe: g++ -g -Wall -pedantic -Wno-long-long -Werror -I. -I.. -I/usr/local/systemc/2.3.3/include -c stage2.cpp -o stage2.o In file included from /usr/local/systemc/2.3.3/include/sysc/datatypes/bit/sc_logic.h:68:0, from /usr/local/systemc/2.3.3/include/sysc/kernel/sc_wait_cthread.h:36, from /usr/local/systemc/2.3.3/include/sysc/kernel/sc_module.h:40, from /usr/local/systemc/2.3.3/include/systemc:74, from /usr/local/systemc/2.3.3/include/systemc.h:219, from stage2.cpp:38: /usr/local/systemc/2.3.3/include/sysc/kernel/sc_macros.h:120:18: エラー: 無名可変引数マクロは C99 で導入されました [-Werror=variadic-macros] #define SC_NAMED(...) \ ^ /usr/local/systemc/2.3.3/include/sysc/kernel/sc_macros.h:131:36: エラー: 無名可変引数マクロは C99 で導入されました [-Werror=variadic-macros] # define SC_NAMED_IMPL_MORE_(inst, ...) \ ^ /usr/local/systemc/2.3.3/include/sysc/kernel/sc_macros.h:135:24: エラー: 無名可変引数マクロは C99 で導入されました [-Werror=variadic-macros] #define SC_NAMED_IMPL_(...) \ ^ /usr/local/systemc/2.3.3/include/sysc/kernel/sc_macros.h:137:31: エラー: 無名可変引数マクロは C99 で導入されました [-Werror=variadic-macros] #define SC_NAMED_IMPL_EXPAND_(...) \ ^ /usr/local/systemc/2.3.3/include/sysc/kernel/sc_macros.h:148:35: エラー: 無名可変引数マクロは C99 で導入されました [-Werror=variadic-macros] _25,_26,_27,_28,_29,_30,_31, N, ...) N ^ cc1plus: all warnings being treated as errors make[1]: *** [stage2.o] エラー 1 make[1]: ディレクトリ `/home/XXXX/sandbox/systemc/tutorial/examples/sysc/pipe' から出ます make: *** [all] エラー 2
とりあえずライブラリの参照は解決したが、次なるエラー。ひとまずMakefile.ruleを以下のように書き換えて再度makeしたところ今度はコンパイルが通った様子。
CXXFLAGS += $(CFLAGS) $(SYSTEMC_CXXFLAGS) $(INCDIR) $(SYSTEMC_DEFINES) -std=c++11
なお、これに合わせて、SystemC自体も一部設定を変えて再インストールした
とりあえずsimple_fifoを実行してみた
$ ./simple_fifo.x SystemC 2.3.3-Accellera --- Mar 8 2020 14:00:56 Copyright (c) 1996-2018 by all Contributors, ALL RIGHTS RESERVED V<9>isit www<1>.a<9>ccellera<1>.o<9>rg and s<1>ee<9> what Sy<1>st<9>emC can <1>do<9> for you<1> today!<1>
なんか余分な文字が含まれている気がするが、何かしらは動いた。次はexampleの中身を詳しく見ていこうと思う。