Jump to content

Recommended Posts

Posted

Hello Everyone,

I have just started to learn system C and I have installed the 2.3.3 version on my linux system 18.04. I have tried installing in usr/local as well as in the local directory (for example : In the downloads itself). I have a very simple hello world program, but i have an error. I feel it is the problem with the installation, any help is highly appreciated. Thank you very much in advance.

 

lugia@celebi:~/SystemC$ make
Makefile:56: *** SYSTEMC_HOME [/usr/local/systemc-2.3.3/] is not present. Please update Makefile.config.  Stop.
lugia@celebi:~/SystemC$ make
Makefile:56: *** SYSTEMC_HOME [/usr/local/systemc-2.3.3/] is not present. Please update Makefile.config.  Stop.
lugia@celebi:~/SystemC$ export SYSTEMC_HOME=/home/lugia/Downloads/systemc-2.3.3/
lugia@celebi:~/SystemC$ make
g++  -g -Wall -pedantic -Wno-long-long -Werror -I. -I.. -I/home/lugia/Downloads/systemc-2.3.3//include  -c hello.cpp -o hello.o
In file included from /home/lugia/Downloads/systemc-2.3.3//include/systemc:74:0,
                 from /home/lugia/Downloads/systemc-2.3.3//include/systemc.h:219,
                 from hello.cpp:1:
/home/lugia/Downloads/systemc-2.3.3//include/sysc/kernel/sc_module.h:397:5: error: expected ‘;’ before ‘struct’
     struct user_module_name : ::sc_core::sc_module
     ^
hello.cpp:4:1: note: in expansion of macro ‘SC_MODULE’
 SC_MODULE (hello_world) {
 ^~~~~~~~~
Makefile:109: recipe for target 'hello.o' failed
make: *** [hello.o] Error 1
lugia@celebi:~/SystemC$ 

The error is as stated above.

The code is as below.

#include <systemc.h>
using namespace std

SC_MODULE (hello_world) {
  SC_CTOR (hello_world) {
  }

  void say_hello() {
    cout << "Hello World SystemC-2.3.1.\n";
  }
};

int sc_main(int argc, char* argv[]) {
  hello_world hello("HELLO");
  hello.say_hello();
  return(0);
}

and my make file is as follows

SYSTEMC_HOME?=/home/lugia/Downloads/systemc-2.3.3/
TARGET_ARCH = linux64
FLAGS_COMMON = -g -Wall
FLAGS_STRICT = -pedantic -Wno-long-long
FLAGS_WERROR = -Werror


PROJECT = hello
#INCDIR = -I.\
#	-I../usaTrackBusSimple
OBJS = $(PROJECT).o


## default values for additional setup variables
ifneq (,$(strip $(TARGET_ARCH)))
ARCH_SUFFIX      ?= -$(TARGET_ARCH)
endif
LDFLAG_RPATH     ?= -Wl,-rpath=

SYSTEMC_INC_DIR  ?= $(SYSTEMC_HOME)/include
SYSTEMC_LIB_DIR  ?= $(SYSTEMC_HOME)/lib$(ARCH_SUFFIX)

SYSTEMC_DEFINES  ?=
SYSTEMC_CXXFLAGS ?= $(FLAGS_COMMON) $(FLAGS_STRICT) $(FLAGS_WERROR)
SYSTEMC_LDFLAGS  ?= -L $(SYSTEMC_LIB_DIR) \
                    $(LDFLAG_RPATH)$(SYSTEMC_LIB_DIR)
SYSTEMC_LIBS     ?= -lsystemc -lm

## Add 'PTHREADS=1' to command line for a pthreads build
## (should not be needed in most cases)
#ifdef PTHREADS
#SYSTEMC_CXXFLAGS += -pthread -fPIC
#SYSTEMC_LIBS     += -lpthread
#endif

## ***************************************************************************
## example defaults
## - basic configuration should be set from Makefile.config

FILTER ?= cat

INCDIR   += -I. -I.. -I$(SYSTEMC_INC_DIR)
LIBDIR   += -L. -L..

CXXFLAGS  += $(CFLAGS) $(SYSTEMC_CXXFLAGS) $(INCDIR) $(SYSTEMC_DEFINES)
LDFLAGS   += $(CFLAGS) $(SYSTEMC_CXXFLAGS) $(LIBDIR) $(SYSTEMC_LDFLAGS)
LIBS      += $(SYSTEMC_LIBS) $(EXTRA_LIBS)

# "real" Makefile needs to set PROJECT
ifeq (,$(strip $(PROJECT)))
$(error PROJECT not set. Cannot build.)
endif

# basic check for SystemC directory
ifeq (,$(wildcard $(SYSTEMC_HOME)/.))
$(error SYSTEMC_HOME [$(SYSTEMC_HOME)] is not present. \
        Please update Makefile.config)
endif
ifeq (,$(wildcard $(SYSTEMC_INC_DIR)/systemc.h))
$(error systemc.h [$(SYSTEMC_INC_DIR)] not found. \
        Please update Makefile.config)
endif
ifeq (,$(wildcard $(SYSTEMC_LIB_DIR)/libsystemc*))
$(error SystemC library [$(SYSTEMC_LIB_DIR)] not found. \
        Please update Makefile.config)
endif

## ***************************************************************************
## build rules

.SUFFIXES: .cc .cpp .o .x

GOLDEN?=$(firstword $(wildcard ../results/expected.log golden.log))
EXEEXT?=.x
EXE   := $(PROJECT)$(EXEEXT)

all: announce build

announce:
	@if test x1 = x$(FLAG_BATCH) ; then \
		echo; echo "*** $(PROJECT):"; echo; \
	fi

check: announce all
	@if test -f "$(INPUT)" ; then INPUT="< $(INPUT)" ; fi ; \
		eval "$(VALGRIND) ./$(EXE) $(ARGS) $${INPUT} > run.log"
	@cat run.log | grep -v "stopped by user" | \
		$(FILTER) | awk '{if($$0!="") print $$0}' > run_trimmed.log
	@if test -f "$(GOLDEN)" ; then \
	  cat "$(GOLDEN)" | grep -v "stopped by user" | \
		awk '{if($$0!="") print $$0}' > ./expected_trimmed.log ; \
	  diff ./run_trimmed.log ./expected_trimmed.log > diff.log 2>&1 ; \
	  if [ -s diff.log ]; then \
	    echo "***ERROR:"; cat diff.log; \
	  else echo "OK"; fi \
	fi

run: announce all
	@if test -f "$(INPUT)" ; then INPUT="< $(INPUT)" ; fi ; \
		eval "./$(EXE) $(ARGS) $${INPUT}"

build: announce $(EXE)

$(EXE): $(OBJS) $(SYSTEMC_LIB_DIR)/libsystemc.a
	$(CXX) $(LDFLAGS) -o $@ $(OBJS) $(LIBS) 2>&1 | c++filt
	@test -x $@

.cpp.o:
	$(CXX) $(CXXFLAGS) -c $< -o $@

.cc.o:
	$(CXX) $(CXXFLAGS) -c $< -o $@

clean:: announce
	rm -f $(OBJS) $(EXE) core $(EXTRA_CLEAN) \
		run.log run_trimmed.log expected_trimmed.log diff.log

ultraclean: announce clean
	rm -f Makefile.deps *~

#Makefile.deps:
#	$(CXX) $(CXXFLAGS) -M $(SRCS) >> Makefile.deps

#include Makefile.deps

 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...