Trac3R bloggt

über die Untiefen des Informatikstudiums an der FH-Lübeck

SystemC unter Linux mit GCC 4.X

2010-12-18, getagged als fh-lübeck, programmieren

Anscheinend liest niemand meinen Foreneintrag auf inf-swt.de, denn ich bekomme ständig komische Anfragen, wie ich die Software unter Linux zum Laufen bekommen hätte und man sagt mir, das sei unglaublich schwer. Komisch, ich hab die Modellierungssoftware jetzt sogar auf den Linux Workstations im Labor laufen, die ja nicht mal mir gehören, also muß es wohl an mir liegen.

Da Peter das Forum sowieso irgendwann einstampfen will, werde ich den Eintrag hier nochmal für die Nachwelt und Öffentlichkeit wiederholen. Ich hab mir das auch nur aus der Googlesuche zusammengestrickt. Das Fedora-Forum u.ä. haben das eigentlich auch alles schon geklärt.

Installation

Natürlich erstmal das Archiv mit den Quellen von systemc.org besorgen. Anmelden ist nicht notwendig, bugmenot kennt das Losungswort.

Das objdir Verzeichnis, welches in der Doku vorgeschlagen wird, kann man nutzen, muß man aber nicht. Nach dem Entpacken fällt Nutzern des GCC 4 jedenfalls auf, dass der Dreisatz ./configure, make, make install nicht richtig funktioniert. Lösung:
Die Datei systemc-2.2.0/src/sysc/utils/sc_utils_ids.cpp patchen, dort muß

#include <cstring>
#include <cstdlib>
oben drin stehen. Jetzt klappt es auch mit make.

Zumindest bis zur Installation. Aus irgendwelchen bescheuerten Gründen will make die Bibliothek in das gleiche Verzeichnis in $HOME installieren, wo die Quellen schon liegen. Was solls, verschiebt man sie eben per Hand nach.

sudo -s
mkdir /usr/local/systemc-2.2
cp -r include /usr/local/systemc-2.2/
cp -r lib-linux64 /usr/local/systemc-2.2/
chown -R root:root /usr/local/systemc-2.2
chmod a+r /usr/local/systemc-2.2
Ich erwähne sicherheitshalber mal, dass der Ordner in 'nem 686er Linux nicht mit 64 endet... Ob man die letzten zwei Zeilen braucht, ist davon abhängig, ob man make install als root ausgeführt hat und wie die Umgebungsvariable $umask gesetzt ist. Schadet aber auch nicht.

Beispiel zum Laufen bringen

Tja und nu? Angeblich sind die Dateien aus Blaurocks Beispiel jetzt voller Syntaxfehler. Nix geht. Lösung:
Zunächst einmal sollte die Umgebungsvariable SYSTEMC gesetzt sein, sagt zumindest diese Seite. Also

export SYSTEMC="/usr/local/systemc-2.2"
in die .bashrc und/oder .bash_profile. Von der Seite hab ich mir dann auch endlich ein Makefile besorgt, dass einfach zu verstehen und zu verändern ist. Die Teile, die mit SystemC geliefert werden sind ja grauenvoll.

Hier das von mir angepasste Beispiel:

#--------------------------------------------------------
# Simple Makefile
# Note header files are not checked if updated!
#--------------------------------------------------------

# Specify all source and header files
SRCS = master.cpp toplevel.cpp
SRCH = master.h myMem.h myMem_if.h

# Target file "run";
TARGET = run

# Variable that points to SystemC installation path
SYSTEMC = /usr/local/systemc-2.2
TARGET_ARCH = linux64

INCDIR = -I. -I.. -I$(SYSTEMC)/include
LIBDIR = -L. -L.. -L$(SYSTEMC)/lib-$(TARGET_ARCH)
LIBS   = -lsystemc -lm

CC     = g++
CFLAGS = -g -Wno-deprecated -Wall
OBJS   = $(SRCS:.cpp=.o)

EXE    = $(TARGET)

.SUFFIXES: .cpp .o  

$(EXE): $(OBJS) $(SRCH)  
    $(CC) $(CFLAGS) $(INCDIR) $(LIBDIR) -o $@ $(OBJS) $(LIBS) 2>&1 | c++filt

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

clean:
    rm -f $(OBJS) *~ $(EXE) *.bak $(TARGET).stackdump
Funktioniert ganz ohne .PHONY! Nochmal der Hinweis: Die 64 gibts nicht überall, also evtl. anpassen.

Damit sollte es jetzt klappen, bei mir tut es das. Have fun!