X-Git-Url: http://sraa.de/git/?a=blobdiff_plain;f=dol%2Fsrc%2Fdol%2Fvisitor%2Fhdsd%2FHdsdMakefileVisitor.java;fp=dol%2Fsrc%2Fdol%2Fvisitor%2Fhdsd%2FHdsdMakefileVisitor.java;h=8458b32db2742936481051db7b7e6808e832e6ed;hb=8c411cf24ed0eb889191aaeafd8fa1e69081df42;hp=0000000000000000000000000000000000000000;hpb=dea7a4fb1ed110d3ce6e6d9255103d724bd66c0e;p=jump.git diff --git a/dol/src/dol/visitor/hdsd/HdsdMakefileVisitor.java b/dol/src/dol/visitor/hdsd/HdsdMakefileVisitor.java new file mode 100644 index 0000000..8458b32 --- /dev/null +++ b/dol/src/dol/visitor/hdsd/HdsdMakefileVisitor.java @@ -0,0 +1,134 @@ +package dol.visitor.hdsd; + + +import java.io.FileOutputStream; +import java.io.OutputStream; +import java.io.PrintStream; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + +import dol.datamodel.architecture.Processor; +import dol.datamodel.mapping.Mapping; +import dol.datamodel.pn.Process; +import dol.visitor.MapVisitor; + +/** + * Visitor that is used to generate + * a HdS package Makefile for a distributed simulation. + */ +public class HdsdMakefileVisitor extends MapVisitor { + + /** + * Constructor. + * + * @param dir path of the Makefile + */ + public HdsdMakefileVisitor(String dir) { + _dir = dir; + } + + /** + * Create a Makefile for the given mapping. + * + * @param x mapping that needs to be rendered. + */ + public void visitComponent(Mapping x) { + try { + String filename = _dir + "/" + "Makefile"; + OutputStream file = new FileOutputStream(filename); + PrintStream ps = new PrintStream(file); + + ps.println("CXX = g++"); + ps.println("CC = g++"); + ps.println(); + ps.println("PREPROC_MACROS = -D __DOL_ETHZ_GEN__ -DINCLUDE_PROFILER"); + ps.println(); + ps.println("SYSTEMC_INC = -I" + _ui.getSystemCINC()); + ps.println("SYSTEMC_LIB = " + _ui.getSystemCLIB()); + ps.println("MY_LIB_INC = -Ilib -Iscd -Isc_wrappers -Iprocesses"); + ps.println("VPATH = lib:scd:scd/fsm:sc_wrappers:processes"); + ps.println(); + ps.println("# append '-rdynamic' for name resolution in exception stack traces"); + ps.println("# append '-g' for debugging"); + ps.println("CXXFLAGS = -O0 $(PREPROC_MACROS) $(SYSTEMC_INC) $(MY_LIB_INC)"); + ps.println("CFLAGS = $(CXXFLAGS)"); + ps.println(); + + // scd library objects + ps.println("# scd library objects"); + ps.println("SCD_OBJS = scd_logging.o scd_exception.o scd_socket.o scd_sock_poller.o \\"); + ps.println("\tscd_init_listener.o scd_in_connector.o scd_out_connector.o \\"); + ps.println("\tscd_command.o scd_command_reader.o scd_command_writer.o \\"); + ps.println("\tscd_simulator.o scd_chan_man.o scd_chan_wrapper.o \\"); + ps.println("\tscd_cont_man_master.o scd_cont_man_slave.o scd_cont_slave_wrapper.o \\"); + ps.println("\tscd_rem_fifo_in.o scd_rem_fifo_out.o scd_cont_fsm.o \\"); + ps.println("\tscd_sts_base.o scd_sts_init.o scd_sts_busy.o scd_sts_idle.o \\"); + ps.println("\tscd_sts_done.o scd_sts_time_ack.o scd_sts_time.o scd_sts_term_ack.o \\"); + ps.println("\tscd_sts_terminated.o scd_sts_fail.o scd_sts_failed.o \\"); + ps.println("\tscd_stm_base.o scd_stm_init.o scd_stm_busy.o scd_stm_idle.o \\"); + ps.println("\tscd_stm_done.o scd_stm_time_req.o scd_stm_time.o scd_stm_term_req.o \\"); + ps.println("\tscd_stm_terminate.o scd_stm_terminated.o \\"); + ps.println("\tscd_stm_fail.o scd_stm_failed.o \\"); + ps.println("\tscd_stsw_base.o scd_stsw_init.o scd_stsw_busy.o \\"); + ps.println("\tscd_stsw_idle.o scd_stsw_done.o scd_stsw_time_req.o \\"); + ps.println("\tscd_stsw_time_ack.o scd_stsw_term_req.o scd_stsw_term_ack.o \\"); + ps.println("\tscd_stsw_terminate.o scd_stsw_terminated.o \\"); + ps.println("\tscd_stsw_fail.o scd_stsw_failed.o"); + ps.println(); + + // process objects + ps.println("# process objects"); + ps.print("PROCESS_OBJS = dol.o "); + Iterator i = x.getProcessList().iterator(); + Set pSet = new HashSet(); + while (i.hasNext()) { + String basename = i.next().getBasename(); + if (pSet.add(basename)) + ps.print(basename + "_wrapper.o "); + } + ps.println(); + ps.println(); + + // target all + Iterator iter = x.getProcessorList().iterator(); + String processorList = new String(); + while (iter.hasNext()) + { + Processor p = iter.next(); + if (x.getProcessList().isEmpty()) + continue; + processorList += " scd_" + p.getName(); + } + ps.println("all:" + processorList); + ps.println(); + + // processor targets + iter = x.getProcessorList().iterator(); + while (iter.hasNext()) + { + Processor p = iter.next(); + if (x.getProcessList().isEmpty()) + continue; + ps.println("scd_" + p.getName() + ": scd_" + + p.getName() + ".o $(PROCESS_OBJS)" + + " $(SCD_OBJS)"); + ps.println("\t$(CXX) $(CXXFLAGS) -o $@ $^ $(SYSTEMC_LIB)"); + ps.println(); + } + + // clean target + ps.println("clean:"); + ps.println("\t-rm -f *.o core core.* *.core" + processorList); + + } catch (Exception e) { + System.out.println("HdsdMakefileVisitor: exception occured: " + + e.getMessage()); + e.printStackTrace(); + } + + } + + protected String _dir = null; +} +