SystemC-2.3.3インストール(Mac)

何年振りかのインストール。

環境

前提

以下がインストールされている状態です。

インストール

こんな感じでインストールしました。

$ wget https://www.accellera.org/images/downloads/standards/systemc/systemc-2.3.3.tar.gz
$ tar xvf systemc-2.3.3.tar.gz
$ cd systemc-2.3.3
$ mkdir objdir
$ cd objdir
$ export CXX=clang++
$ ../configure
#:
---------------------------------------------------------------------
Configuration summary of SystemC 2.3.3 for x86_64-apple-darwin21.6.0
---------------------------------------------------------------------

 Directory setup (based on classic layout):
   Installation prefix (aka SYSTEMC_HOME):
      /{解凍ディレクトリパス}/systemc-2.3.3
   Header files  : <SYSTEMC_HOME>/include
   Libraries     : <SYSTEMC_HOME>/lib-macosx64
   Documentation : <SYSTEMC_HOME>/docs
   Examples      : <SYSTEMC_HOME>/examples

 Architecture    : macosx64
 Compiler        : g++ (C/C++)

 Build settings:
   Enable compiler optimizations  : yes
   Include debugging symbols      : no
   Coroutine package for processes: QuickThreads
   Enable VCD scopes by default   : yes
   Disable async_request_update   : no
   Phase callbacks (experimental) : no

---------------------------------------------------------------------
$ make
$ make check
#:
============================================================================
Testsuite summary for SystemC 2.3.3
============================================================================
# TOTAL: 22
# PASS:  22
# SKIP:  0
# XFAIL: 0
# FAIL:  0
# XPASS: 0
# ERROR: 0
============================================================================
#:
============================================================================
Testsuite summary for TLM 2.0.5
============================================================================
# TOTAL: 11
# PASS:  11
# SKIP:  0
# XFAIL: 0
# FAIL:  0
# XPASS: 0
# ERROR: 0
============================================================================
$ make install

動作確認

SYSTEMC_INCLUDE, SYSTEMC_LIBDIR環境変数として設定済み。

CC = clang++
INCDIR = -I. -I$(SYSTEMC_INCLUDE)
LIBDIR = -L. -L$(SYSTEMC_LIBDIR)
LIBS   = -lsystemc -lm
CFLAGS = -O2 -Wall

TARGET = run.exe
SRCS   = sc_main.cpp
OBJS   = $(SRCS:.cpp=.o)

all: $(TARGET)

$(TARGET): $(OBJS)
    $(CC) -o $@ $(LIBDIR) $(LIBS) $(OBJS)

.cpp.o:
    $(CC) $(CFLAGS) $(INCDIR) -c $<

clean:
    @rm -f *.o $(TARGET)
  • sc_main.cpp
#include <systemc.h>

int sc_main(int argc, char* argv[])
{
    std::cout << "Hello, World" << std::endl;

    return 0;
}
$ make
$ ./run.exe

        SystemC 2.3.3-Accellera --- Aug 15 2022 16:07:44
        Copyright (c) 1996-2018 by all Contributors,
        ALL RIGHTS RESERVED
Hello, World

動いた。

余談1

export CXX=clang++

をせずに、g++のまま実行すると make checkのところでエラーが発生しました。

$ make check
#:
To compile and run the examples type
   make check
============================================================================
Testsuite summary for SystemC 2.3.3
============================================================================
# TOTAL: 22
# PASS:  0
# SKIP:  0
# XFAIL: 0
# FAIL:  22
# XPASS: 0
# ERROR: 0

make checkのエラーについては、フォーラムであがっており、C++11以上であれば問題なさそう。

src/sysc/communication/sc_host_semaphore.hを見ると、SC_CPLUSPLUSで判断しており、
src/sysc/kernel/sc_cmnhdr.h で(多少分岐はあるが)最終的には、 __cplusplusを代入している。

__cplusplusは以下のコマンドで出力することが可能です。

$ g++ -dM -E -x c++ /dev/null
#:
#define __cplusplus 199711L

ちなみに、clang++の場合は以下になってます。

$ clang++ -dM -E -x c++ /dev/null
#:
#define __cplusplus 201402L

余談2

2.3.2でよければ、brew install systemcでインストールできるみたい

2.3.3で TLMが同封された。という記憶。