X-Git-Url: http://sraa.de/git/?a=blobdiff_plain;f=dol%2Fsrc%2Fdol%2Fvisitor%2Frtems%2FRtemsMakefileVisitor.java;fp=dol%2Fsrc%2Fdol%2Fvisitor%2Frtems%2FRtemsMakefileVisitor.java;h=04c617e89e648308393e43bfa8079c29816ccd2c;hb=8c411cf24ed0eb889191aaeafd8fa1e69081df42;hp=0000000000000000000000000000000000000000;hpb=dea7a4fb1ed110d3ce6e6d9255103d724bd66c0e;p=jump.git diff --git a/dol/src/dol/visitor/rtems/RtemsMakefileVisitor.java b/dol/src/dol/visitor/rtems/RtemsMakefileVisitor.java new file mode 100644 index 0000000..04c617e --- /dev/null +++ b/dol/src/dol/visitor/rtems/RtemsMakefileVisitor.java @@ -0,0 +1,296 @@ +/* $Id: RtemsMakefileVisitor.java 1 2010-02-24 13:03:05Z haidw $ */ +package dol.visitor.rtems; + +import java.io.FileOutputStream; +import java.io.OutputStream; +import java.io.PrintStream; +import java.util.Vector; + +import dol.datamodel.architecture.Architecture; +import dol.datamodel.mapping.Mapping; +import dol.datamodel.pn.Process; +import dol.datamodel.pn.ProcessNetwork; +import dol.datamodel.pn.Configuration; +import dol.main.UserInterface; +import dol.parser.xml.archischema.ArchiXmlParser; +import dol.parser.xml.mapschema.MapXmlParser; +import dol.visitor.PNVisitor; + +/** + * This class is a class for a visitor that is used to generate + * a RTEMS package Makefile. + */ +public class RtemsMakefileVisitor extends PNVisitor { + + /** + * Constructor. + * + * @param dir path of the Makefile + */ + public RtemsMakefileVisitor(String dir) { + _dir = dir; + } + + /** + * Create a Makefile for the given process network. + * + * @param pn process network + */ + public void visitComponent(ProcessNetwork pn) { + try { + String filename = _dir + _delimiter + "Makefile"; + OutputStream file = new FileOutputStream(filename); + PrintStream ps = new PrintStream(file); + + _ui = UserInterface.getInstance(); + if (_ui.getRtemsBSP().equals("pc386")) { + ps.println(getPc386Makefile(pn)); + } else if (_ui.getRtemsBSP().equals("mparm")) { + ps.println(getMparmMakefile(pn)); + } + } catch (Exception e) { + System.out.println("RtemsMakefileVisitor: exception occured: " + + e.getMessage()); + e.printStackTrace(); + } + } + + /** + * Create a makefile for the pc386 board support package. + * + * @param pn process network + * @return makefile for pc386 board support package + */ + protected String getMparmMakefile(ProcessNetwork pn) { + String makefile = ""; + String newline = System.getProperty("line.separator"); + makefile += "ifndef SWARMDIR" + newline; + makefile += " $(error Fatal error: Undefined SWARMDIR " + + "environment variable!)" + newline; + makefile += "endif" + newline; + makefile += "" + newline; + makefile += "ifndef RTEMS_MAKEFILE_PATH" + newline; + makefile += " $(error Fatal error: Undefined " + + "RTEMS_MAKEFILE_PATH environment variable!)" + newline; + makefile += "endif" + newline; + makefile += "" + newline; + makefile += "ifdef EXENAME" + newline; + makefile += " EXEC=$(EXENAME).exe" + newline; + makefile += "else" + newline; + makefile += " EXEC=app.exe" + newline; + makefile += "endif" + newline; + makefile += "" + newline; + makefile += "PGM=${ARCH}/$(EXEC)" + newline; + makefile += "" + newline; + makefile += "# optional managers required" + newline; + makefile += "MANAGERS=io mp msg signal event region partition"; + makefile += newline + newline; + + if (_ui.getRtemsBSP().equals("mparm")) { + makefile += "# scratchpad queue lib" + newline; + makefile += "QUEUELIB=que_lib/lib" + newline; + makefile += "SS_SEMAPHORE_LIB_PATH = " + + "${QUEUELIB}/ss_semaphore_lib" + newline; + makefile +="SCRATCH_QUEUE_LIB_PATH = " + + "${QUEUELIB}/scratch_queue_lib" + newline; + makefile += "SCRATCH_SEMAPHORE_LIB_PATH = " + + "${QUEUELIB}/scratch_semaphore_lib" + newline; + makefile += "EXT_INT_LIB_PATH = ${QUEUELIB}/ext_int_lib" + newline; + } + + makefile += "" + newline; + makefile += "#H_files" + newline; + makefile += "H_FILES=buffer_test_io.h" + newline; + + if (_ui.getRtemsBSP().equals("mparm")) { + makefile += "H_FILES += system.h tmacros.h" + newline; + makefile += newline; + makefile += "COMMON_FLAGS += -DMPARM" + newline; + makefile += "COMMON_FLAGS += -I$(QUEUELIB)" + newline; + makefile += "COMMON_FLAGS += -I$(SS_SEMAPHORE_LIB_PATH)" + + newline; + makefile += "COMMON_FLAGS += -I$(SCRATCH_QUEUE_LIB_PATH)" + + newline; + makefile += "COMMON_FLAGS += -I$(SCRATCH_SEMAPHORE_LIB_PATH)"; + makefile += newline; + makefile += newline; + makefile += "# communication options" + newline; + makefile += "COMMON_FLAGS += -DMPARM_SCRATCHPAD_QUEUE" + + newline; + makefile+="COMMON_FLAGS += -DQUEUE_BUFF_IN_PRODUCER " + + "-Dshaper_PROCESSOR" + newline; + makefile+="#COMMON_FLAGS += -DQUEUE_BUFF_IN_PRODUCER_DMA " + + "-Dshaper_PROCESSOR" + newline; + makefile+="#COMMON_FLAGS += -DQUEUE_BUFF_IN_CONSUMER " + + "-Dshaper_PROCESSOR" + newline; + makefile+="#COMMON_FLAGS += -DQUEUE_BUFF_IN_CONSUMER_DMA " + + "-Dshaper_PROCESSOR" + newline; + makefile+="#COMMON_FLAGS += -DQUEUE_BUFF_IN_SHARDMEM " + + "-Dshaper_PROCESSOR" + newline; + + int shaperProcessorID; + if (_ui.getMappingFileName() == null) { + shaperProcessorID = pn.getProcessList().size(); + } else { + ArchiXmlParser archParser = new ArchiXmlParser(); + Architecture arch = archParser. + doParse(_ui.getPlatformFileName()); + MapXmlParser mappingParser = new MapXmlParser(pn, arch); + Mapping mapping = mappingParser. + doParse(_ui.getMappingFileName()); + shaperProcessorID = mapping.getProcessorList().size(); + } + makefile +="#COMMON_FLAGS += -DQUEUE_BUFF_SHAPER " + + "-Dshaper_PROCESSOR=" + shaperProcessorID + newline; + + makefile += newline; + makefile += "LIBFILECXX = " + + "$(SS_SEMAPHORE_LIB_PATH)/ss_semaphore.cpp " + + "$(SCRATCH_QUEUE_LIB_PATH)/scratch_queue.cpp" + + newline; + makefile += "VPATH = SCRATCH_QUEUE_LIB_PATH" + newline; + } + + makefile += "" + newline; + makefile += "# C source names" + newline; + if (_ui.getRtemsBSP().equals("pc386")) { + makefile += "CSRCS = main.c rtems_process_wrapper.c "; + for (String basename : pn.getProcessBasenames()) { + makefile += basename + "_wrapper.c "; + } + } + makefile += newline; + makefile += "COBJS_ = $(CSRCS:.c=.o)" + newline; + makefile += "COBJS = $(COBJS_:%=%)" + newline; + makefile += "" + newline; + makefile += "# C++ source names" + newline; + makefile += "CXXSRCS = appsupport.c" + newline; + + if (_ui.getRtemsBSP().equals("mparm")) { + makefile += "CXXSRCS += main.c traffic_shaping.c " + + "rtems_process_wrapper.c "; + Vector pList = new Vector(); + for (Process p : pn.getProcessList()) { + String basename = p.getBasename(); + if (!pList.contains(basename)) { + makefile += p.getBasename() + "_wrapper.c "; + pList.add(basename); + } + } + makefile += newline; + makefile += "CXXSRCS += $(LIBFILECXX)" + newline; + } + + makefile += newline; + makefile += newline; + makefile += "CXXOBJS_ = $(CXXSRCS:.cpp=.o)" + newline; + makefile += "CXXOBJS = $(CXXOBJS_:%=%)" + newline; + makefile += "" + newline; + makefile += "# AS source names" + newline; + makefile += "ASSRCS =" + newline; + makefile += "ASOBJS_ = $(ASSRCS:.s=.o)" + newline; + makefile += "ASOBJS = $(ASOBJS_:%=%)" + newline; + makefile += "" + newline; + makefile += "# Libraries" + newline; + makefile += "LIBS = -lrtemsall -lc" + newline; + makefile += "" + newline; + makefile += "include $(RTEMS_MAKEFILE_PATH)/Makefile.inc" + + newline; + makefile += "include $(RTEMS_CUSTOM)" + newline; + makefile += "include $(PROJECT_ROOT)/make/leaf.cfg" + newline; + makefile += "" + newline; + makefile += "#CXXFLAGS += -DAUTOSTARTMEASURING" + newline; + makefile += "#CXXFLAGS += -DVERBOSE" + newline; + makefile += "CXXFLAGS += -I$(SWARMDIR)/core" + newline; + makefile += "CFLAGS += -I$(SWARMDIR)/core" + newline; + + if (_ui.getRtemsBSP().equals("mparm")) { + makefile += "CXXFLAGS += $(COMMON_FLAGS) -I${PWD}" + newline; + makefile += "CFLAGS += $(COMMON_FLAGS) -I${PWD}" + newline; + + makefile += newline; + makefile += "#### for calibration" + newline; + makefile += "CXXFLAGS += -Ilib" + newline; + makefile += "CXXFLAGS += -D_GLIBCPP_HAVE_WCHAR_H " + + "-D_GLIBCPP_HAVE_MBSTATE_T" + newline; + makefile += "CXXFLAGS += -DWORKLOAD_EXTRACT" + newline; + makefile += "CXXFLAGS += -DPRINTF_TO_DEBUG" + newline; + } + makefile += "" + newline; + makefile += "SRCS=$(H_FILES)" + newline; + makefile += "OBJS= $(COBJS) $(CXXOBJS) $(ASOBJS)" + newline; + makefile += "" + newline; + makefile += "all: ${ARCH} $(SRCS) $(PGM) " + newline; + makefile += "" + newline; + makefile += "$(PGM): $(OBJS) " + newline; + makefile += "\t$(make-exe)" + newline; + makefile += "clean:" + newline; + makefile += "\t-rm -f ${SS_SEMAPHORE_LIB_PATH}/*.o " + + "${SCRATCH_QUEUE_LIB_PATH}/*.o" + newline; + + return makefile; + } + + /** + * Create a makefile for the pc386 board support package. + * + * @param pn process network + * @return makefile for pc386 board support package + */ + protected String getPc386Makefile(ProcessNetwork pn) { + String makefile = ""; + String newline = System.getProperty("line.separator"); + makefile += "EXEC=main.exe" + newline; + makefile += "PGM=${ARCH}/$(EXEC)" + newline; + makefile += newline; + makefile += "# optional managers required" + newline; + makefile += "MANAGERS=all" + newline; + makefile += newline; + makefile += "# C source names" + newline; + makefile += "CSRCS = main.c rtems_process_wrapper.c "; + for (String basename : pn.getProcessBasenames()) { + makefile += basename + "_wrapper.c "; + } + for (Configuration conf : pn.getCfgList()) { + if (conf.getName().equals("EXTERNAL_SRC")) { + makefile += conf.getValue(); + } + } + makefile += newline; + makefile += "COBJS_ = $(CSRCS:.c=.o)" + newline; + makefile += "COBJS = $(COBJS_:%=${ARCH}/%)" + newline; + makefile += newline; + makefile += "# C++ source names" + newline; + makefile += "CXXSRCS =" + newline; + makefile += "CXXOBJS_ = $(CXXSRCS:.cc=.o)" + newline; + makefile += "CXXOBJS = $(CXXOBJS_:%=${ARCH}/%)" + newline; + makefile += newline; + makefile += "# AS source names" + newline; + makefile += "ASSRCS =" + newline; + makefile += "ASOBJS_ = $(ASSRCS:.s=.o)" + newline; + makefile += "ASOBJS = $(ASOBJS_:%=${ARCH}/%)" + newline; + makefile += newline; + makefile += "# Libraries" + newline; + makefile += "LIBS = -lrtemsall -lc "; + for (Configuration conf : pn.getCfgList()) { + if (conf.getName().equals("DYNAMIC_LINK")) + makefile += conf.getValue() + newline; + } + makefile += newline; + makefile += "include $(RTEMS_MAKEFILE_PATH)/Makefile.inc" + + newline; + makefile += newline; + makefile += "include $(RTEMS_CUSTOM)" + newline; + makefile += "include $(PROJECT_ROOT)/make/leaf.cfg" + newline; + makefile += newline; + makefile += "OBJS= $(COBJS) $(CXXOBJS) $(ASOBJS)" + newline; + makefile += newline; + makefile += "all: ${ARCH} $(PGM)" + newline; + makefile += newline; + makefile += "$(PGM): $(OBJS)" + newline; + makefile += "\t$(make-exe)" + newline; + return makefile; + } + + protected String _dir = null; +}