1 /* $Id: CbeMakefileVisitor.java 1 2010-02-24 13:03:05Z haidw $ */
2 package dol.visitor.cbe;
4 import java.io.FileOutputStream;
5 import java.io.OutputStream;
6 import java.io.PrintStream;
7 import java.util.Vector;
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
17 public class CbeMakefileVisitor extends PNVisitor {
22 * @param dir path of the Makefile
24 public CbeMakefileVisitor(String dir) {
29 * Create a Makefile for the given process network.
31 * @param pn process network
33 public void visitComponent(ProcessNetwork pn) {
35 String filename = _dir + _delimiter + "Makefile";
36 OutputStream file = new FileOutputStream(filename);
37 PrintStream ps = new PrintStream(file);
39 ps.println("##############################################");
40 ps.println("# Main Makefile for DOL application on the CBE");
41 ps.println("##############################################");
43 ps.println("# Subdirectories");
45 String subdirectories = "";
46 Vector<String> pList = new Vector<String>();
47 for (Process process : pn.getProcessList()) {
48 String basename = process.getBasename();
49 if (!pList.contains(basename)) {
50 if (process.getNumOfInports() > 0
51 && process.getNumOfOutports() > 0) {
52 subdirectories += "spu_" + basename + " ";
61 for (Process process : pn.getProcessList()) {
62 String basename = process.getBasename();
63 if (!pList.contains(basename)) {
64 if (!(process.getNumOfInports() > 0
65 && process.getNumOfOutports() > 0)) {
66 linkList += "ppu_" + basename + "/ppu_" + basename
68 srcList += "$(wildcard ppu_" + basename
77 ps.println("DIRS\t := " + subdirectories);
80 ps.println("# General definitions:");
81 ps.println("CC = ppu-g++");
82 ps.println("CCFLAGS = -ftree-vectorize -O3 -maltivec "
83 + "-funroll-loops -mabi=altivec -mcpu=cell");
84 ps.println("COMPILE = $(CC) $(CCFLAGS) -c");
85 ps.println("LINK = $(CC) -lspe2 -lpthread");
86 ps.println("CBE_INCLUDE = /opt/cell/sdk/src/include/ppu");
87 ps.println("LIB_INC = -I lib -I . -I $(CBE_INCLUDE)");
88 ps.println("RM = rm");
89 ps.println("ECHO = echo");
90 ps.println("EXE = ppu_main");
92 ps.println("src := $(wildcard lib/*.c) $(wildcard *.c)");
93 ps.println("srcAll := $(wildcard lib/*.c) "
94 + "$(wildcard lib/*.c) " + srcList);
95 ps.println("obj = $(src:.c=.o)");
97 ps.println("$(EXE): $(obj) $(srcAll)");
98 ps.println("\tfor d in $(DIRS); do (cd $$d; $(MAKE) ); done");
100 for (Process process : pn.getProcessList()) {
101 String basename = process.getBasename();
102 if (!pList.contains(basename)) {
103 if (!(process.getNumOfInports() > 0
104 && process.getNumOfOutports() > 0)) {
105 ps.println("\tcd ppu_" + basename
106 + "; $(COMPILE) -o ppu_" + basename
107 + ".o ppu_" + basename
108 + "_wrapper.c -I .. -I ../lib;");
115 ps.println("\t$(LINK) -o $(EXE) " + linkList + " $(obj)");
118 ps.println("\t$(COMPILE) -o $(*D)/$(*F).o $(*D)/$(*F).c "
121 ps.println("clean:");
122 ps.println("\tfor d in $(DIRS); do (cd $$d; $(MAKE) clean );"
124 ps.println("\trm $(obj) ");
126 for (Process process : pn.getProcessList()) {
127 String basename = process.getBasename();
128 if (!pList.contains(basename)) {
129 if (!(process.getNumOfInports() > 0
130 && process.getNumOfOutports() > 0))
132 ps.println("\trm ppu_" + basename + "/ppu_"
140 ps.println("\trm ppu_main");
143 } catch (Exception e) {
144 System.out.println("CbeMakefileVisitor: exception occured: "
150 protected String _dir = null;