1 package edu.berkeley.fleet;
2 import edu.berkeley.fleet.api.*;
3 import edu.berkeley.fleet.slipway.*;
4 import edu.berkeley.fleet.doc.*;
5 import edu.berkeley.fleet.interpreter.*;
11 static String command;
12 static HashMap<String,String> options = new HashMap<String,String>();
13 static ArrayList<String> args = new ArrayList<String>();
15 public static void main(String[] s) throws Exception {
20 boolean optionsDone = false;
21 for(int i=0; i<s.length; i++) {
22 if (!optionsDone && s[i].indexOf('=') != -1) {
23 options.put(s[i].substring(0, s[i].indexOf('=')),
24 s[i].substring(s[i].indexOf('=')+1));
26 } else if (!optionsDone) {
34 String target = options.get("target");
36 if ("fpga".equals(target)) {
37 fleet = new Slipway();
38 } else if ("sim".equals(target) || "fleetsim".equals(target)) {
39 fleet = (Fleet)Class.forName("com.sunlabs.fleetsim.fleet.FleetDescription").newInstance();
41 fleet = new Interpreter.DynamicInterpreter();
44 if (!"true".equals(options.get("verbose")))
47 if (command.equals("run")) {
50 ByteArrayOutputStream baos = new ByteArrayOutputStream();
51 Reader r = new InputStreamReader(System.in);
52 edu.berkeley.fleet.assembler.Main.assemble(fleet, r, baos);
53 is = new ByteArrayInputStream(baos.toByteArray());
55 String filename = args.get(0);
56 if (filename.endsWith(".fa") || filename.endsWith(".fleet")) {
57 ByteArrayOutputStream baos = new ByteArrayOutputStream();
58 Reader r = new InputStreamReader(new FileInputStream(args.get(0)));
59 edu.berkeley.fleet.assembler.Main.assemble(fleet, r, baos);
60 is = new ByteArrayInputStream(baos.toByteArray());
62 is = new FileInputStream(args.get(0));
67 } else if (command.equals("expand")) {
68 fleet.expand(new ShipDescription(new BufferedReader(new InputStreamReader(new FileInputStream(args.get(0))))));
70 } else if (command.equals("test")) {
71 test(fleet, new File(args.get(0)));
79 static void test(Fleet fleet, File f) throws Exception {
80 if (f.isDirectory()) {
81 for(String s : f.list())
82 test(fleet, new File(f.getPath() + File.separatorChar + s));
83 } else if (f.getPath().endsWith(".fleet")) {
84 ByteArrayOutputStream baos = new ByteArrayOutputStream();
85 edu.berkeley.fleet.assembler.Main.assemble(fleet, new InputStreamReader(new FileInputStream(f)), baos);
86 FleetProcess fp = fleet.run(baos.toByteArray());
88 ArrayList<Long> expect = edu.berkeley.fleet.assembler.Parser.expect;
90 // FIXME: check for extraneous stuff at the end
91 String verdict = "[ ]";
92 boolean failed = false;
94 if (output.length() > 60 && !failed)
95 output = "..."+output.substring(output.length()-57, output.length());
96 if (expect.size() == 0) verdict = "["+Log.green("PASS")+"]";
97 System.out.print("\r" + verdict + " " + Log.yellow(f.getPath()) + ": " + output);
99 if (expect.size() == 0) break;
100 long l = fp.readWord();
101 long l2 = expect.remove(0);
103 verdict = "["+Log.red("FAIL")+"]";
104 output += Log.red("0x"+Long.toString(l, 16)) +
105 Log.yellow(" (expected ")+Log.green("0x"+Long.toString(l2, 16))+Log.yellow(")");
109 output += ("0x"+Long.toString(l2, 16) + " ");
112 System.out.println();
119 public static void run(Fleet fleet, InputStream is) throws IOException {
120 ByteArrayOutputStream baos = new ByteArrayOutputStream();
121 byte[] buf = new byte[1024];
123 int numread = is.read(buf, 0, buf.length);
124 if (numread==-1) break;
125 baos.write(buf, 0, numread);
127 String bitfile = options.get("bitfile");
128 FleetProcess client = fleet.run(baos.toByteArray());
131 ? fleet.run(baos.toByteArray())
132 : fleet.run(bitfile, baos.toByteArray());
135 long result = client.readWord();
136 System.err.print(result);
137 System.err.print(" 0x");
138 System.err.print(Long.toString(result, 16));
139 System.err.println();
143 static void usage() {
144 System.err.println(".........................................................................");
145 System.err.println("Fleet Framework UC Berkeley, Sun Labs / 2007");
146 System.err.println("");
147 System.err.println("usage: java -jar fleet.jar [options] [command] [filename] [args]");
148 System.err.println("");
149 System.err.println("[options] is in the form key=val; supported keys are:");
150 System.err.println(" target={sim,fpga,interp}");
151 System.err.println(" bitfile=(hardware image for fpga)");
152 System.err.println(" verbose={yes,no}");
153 System.err.println("");
154 System.err.println("[command] is one of:");
155 System.err.println(" asm");
156 System.err.println(" disasm");
157 System.err.println(" typeset");
158 System.err.println(" extract [section]");
159 System.err.println(" run");
160 System.err.println("");
161 System.err.println("[filename] is one of:");
162 System.err.println(" *.fa Fleet assembler");
163 System.err.println(" *.f0 F0 code (not yet supported)");
164 System.err.println(" *.fo Fleet binary object");
165 System.err.println(" *.ship Ship description");
166 System.err.println("");
167 System.err.println("All [args] not consumed by [command] are passed to target");
168 System.err.println("");