1 package dol.visitor.hdsd;
4 import java.io.FileOutputStream;
5 import java.io.OutputStream;
6 import java.io.PrintStream;
7 import java.util.HashSet;
8 import java.util.Iterator;
11 import dol.datamodel.architecture.Processor;
12 import dol.datamodel.mapping.Mapping;
13 import dol.datamodel.pn.Process;
14 import dol.visitor.MapVisitor;
17 * Visitor that is used to generate
18 * a HdS package Makefile for a distributed simulation.
20 public class HdsdMakefileVisitor extends MapVisitor {
25 * @param dir path of the Makefile
27 public HdsdMakefileVisitor(String dir) {
32 * Create a Makefile for the given mapping.
34 * @param x mapping that needs to be rendered.
36 public void visitComponent(Mapping x) {
38 String filename = _dir + "/" + "Makefile";
39 OutputStream file = new FileOutputStream(filename);
40 PrintStream ps = new PrintStream(file);
42 ps.println("CXX = g++");
43 ps.println("CC = g++");
45 ps.println("PREPROC_MACROS = -D __DOL_ETHZ_GEN__ -DINCLUDE_PROFILER");
47 ps.println("SYSTEMC_INC = -I" + _ui.getSystemCINC());
48 ps.println("SYSTEMC_LIB = " + _ui.getSystemCLIB());
49 ps.println("MY_LIB_INC = -Ilib -Iscd -Isc_wrappers -Iprocesses");
50 ps.println("VPATH = lib:scd:scd/fsm:sc_wrappers:processes");
52 ps.println("# append '-rdynamic' for name resolution in exception stack traces");
53 ps.println("# append '-g' for debugging");
54 ps.println("CXXFLAGS = -O0 $(PREPROC_MACROS) $(SYSTEMC_INC) $(MY_LIB_INC)");
55 ps.println("CFLAGS = $(CXXFLAGS)");
58 // scd library objects
59 ps.println("# scd library objects");
60 ps.println("SCD_OBJS = scd_logging.o scd_exception.o scd_socket.o scd_sock_poller.o \\");
61 ps.println("\tscd_init_listener.o scd_in_connector.o scd_out_connector.o \\");
62 ps.println("\tscd_command.o scd_command_reader.o scd_command_writer.o \\");
63 ps.println("\tscd_simulator.o scd_chan_man.o scd_chan_wrapper.o \\");
64 ps.println("\tscd_cont_man_master.o scd_cont_man_slave.o scd_cont_slave_wrapper.o \\");
65 ps.println("\tscd_rem_fifo_in.o scd_rem_fifo_out.o scd_cont_fsm.o \\");
66 ps.println("\tscd_sts_base.o scd_sts_init.o scd_sts_busy.o scd_sts_idle.o \\");
67 ps.println("\tscd_sts_done.o scd_sts_time_ack.o scd_sts_time.o scd_sts_term_ack.o \\");
68 ps.println("\tscd_sts_terminated.o scd_sts_fail.o scd_sts_failed.o \\");
69 ps.println("\tscd_stm_base.o scd_stm_init.o scd_stm_busy.o scd_stm_idle.o \\");
70 ps.println("\tscd_stm_done.o scd_stm_time_req.o scd_stm_time.o scd_stm_term_req.o \\");
71 ps.println("\tscd_stm_terminate.o scd_stm_terminated.o \\");
72 ps.println("\tscd_stm_fail.o scd_stm_failed.o \\");
73 ps.println("\tscd_stsw_base.o scd_stsw_init.o scd_stsw_busy.o \\");
74 ps.println("\tscd_stsw_idle.o scd_stsw_done.o scd_stsw_time_req.o \\");
75 ps.println("\tscd_stsw_time_ack.o scd_stsw_term_req.o scd_stsw_term_ack.o \\");
76 ps.println("\tscd_stsw_terminate.o scd_stsw_terminated.o \\");
77 ps.println("\tscd_stsw_fail.o scd_stsw_failed.o");
81 ps.println("# process objects");
82 ps.print("PROCESS_OBJS = dol.o ");
83 Iterator<Process> i = x.getProcessList().iterator();
84 Set<String> pSet = new HashSet<String>();
86 String basename = i.next().getBasename();
87 if (pSet.add(basename))
88 ps.print(basename + "_wrapper.o ");
94 Iterator<Processor> iter = x.getProcessorList().iterator();
95 String processorList = new String();
96 while (iter.hasNext())
98 Processor p = iter.next();
99 if (x.getProcessList().isEmpty())
101 processorList += " scd_" + p.getName();
103 ps.println("all:" + processorList);
107 iter = x.getProcessorList().iterator();
108 while (iter.hasNext())
110 Processor p = iter.next();
111 if (x.getProcessList().isEmpty())
113 ps.println("scd_" + p.getName() + ": scd_"
114 + p.getName() + ".o $(PROCESS_OBJS)"
116 ps.println("\t$(CXX) $(CXXFLAGS) -o $@ $^ $(SYSTEMC_LIB)");
121 ps.println("clean:");
122 ps.println("\t-rm -f *.o core core.* *.core" + processorList);
124 } catch (Exception e) {
125 System.out.println("HdsdMakefileVisitor: exception occured: "
132 protected String _dir = null;