1 package dol.visitor.cell;
3 import java.io.FileOutputStream;
4 import java.io.OutputStream;
5 import java.io.PrintStream;
6 import java.util.Vector;
8 import dol.datamodel.pn.Configuration;
9 import dol.datamodel.pn.Process;
10 import dol.datamodel.pn.ProcessNetwork;
11 import dol.visitor.PNVisitor;
14 * This class is a class for a visitor that is used to generate a CBE package
17 public class CellMakefileVisitor extends PNVisitor {
23 * path of the Makefile
25 public CellMakefileVisitor(String dir, CellMapping mapping) {
31 * Create a Makefile for the given process network.
36 public void visitComponent(ProcessNetwork pn) {
38 String filename = _dir + _delimiter + "Makefile";
39 OutputStream file = new FileOutputStream(filename);
40 PrintStream ps = new PrintStream(file);
42 ps.println("####################");
43 ps.println("# Main Makefile for the DOL application on the CBE");
44 ps.println("####################");
46 ps.println("# Subdirectories");
49 // Subdirectories of baseprocesses on the SPU
50 String subdirectories = "";
51 Vector<String> pList = new Vector<String>();
52 for (Process process : _mapping.getAllSpuBaseProcess()) {
53 String basename = process.getBasename();
54 subdirectories += "spu_" + basename + " ";
57 // Directory for the SPU OS'es (only if there are really processes on the SPE!
58 if (_mapping.getNrSPUProcess() > 0)
59 subdirectories += "spu";
61 String srcdirectories = "";
63 // Subdirectory of baseprocesses on the PPU
64 for (Process process : _mapping.getAllPPUBaseProcess()) {
65 String basename = process.getBasename();
66 srcdirectories += " $(wildcard ppu_" + basename + "/*.cpp)";
69 // Directory for the PPU OS'es
70 srcdirectories += " $(wildcard ppu/*.cpp)";
74 for (Process process : _mapping.getAllPPUBaseProcess()) {
75 String basename = process.getBasename();
76 linkList += "ppu_" + basename + "/ppu_" + basename + ".o ";
77 srcList += "$(wildcard ppu_" + basename + "/*.cpp) ";
81 ps.println("DIRS := " + subdirectories);
84 ps.println("# General definitions:");
85 ps.println("CC = ppu-g++");
86 ps.println("CCFLAGS = -ftree-vectorize -O3 -maltivec -funroll-loops -mabi=altivec -mcpu=cell");
87 ps.println("COMPILE = $(CC) $(CCFLAGS) -c");
88 ps.print("LINK = $(CC) -lspe2 -lpthread ");
89 for (Configuration conf : pn.getCfgList()) {
90 if (conf.getName().equals("DYNAMIC_LINK"))
91 ps.print(conf.getValue() + " ");
95 ps.println("CBE_INCLUDE = /opt/cell/sdk/usr/include");
96 ps.println("LIB_INC = -I lib -I lib/ppu -I lib/pt -I . -I $(CBE_INCLUDE)");
97 ps.println("RM = rm");
98 ps.println("ECHO = echo");
99 ps.println("EXE = sc_application");
101 ps.println("src := $(wildcard lib/ppu/*.cpp) $(wildcard *.cpp)" + srcdirectories);
102 ps.println("srcAll := $(wildcard lib/ppu/*.cpp) $(wildcard *.cpp) " + srcList);
103 ps.println("srcspu := $(wildcard lib/spu/*.cpp) ");
104 ps.println("obj = $(src:.cpp=.o)");
105 ps.println("objspu = $(srcspu:.cpp=.o)");
107 ps.println("$(EXE): $(obj) $(srcAll)");
108 ps.println("\tfor d in $(DIRS); do (cd $$d; $(MAKE) ); done");
109 ps.println("\t$(LINK) -o $(EXE) $(obj)");
112 ps.println("\t$(COMPILE) -o $(*D)/$(*F).o $(*D)/$(*F).cpp $(LIB_INC)");
114 ps.println("clean:");
115 ps.println("\tfor d in $(DIRS); do (cd $$d; $(MAKE) clean ); done");
116 ps.println("\trm $(objspu)");
117 ps.println("\trm $(obj) ");
118 ps.println("\trm $(EXE)");
121 } catch (Exception e) {
122 System.out.println("CbeMakefileVisitor: exception occured: "
128 protected String _dir = null;
129 protected CellMapping _mapping;