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();
39 fleet = new Interpreter.DynamicInterpreter();
42 if (!"true".equals(options.get("verbose")))
45 if (command.equals("run")) {
48 ByteArrayOutputStream baos = new ByteArrayOutputStream();
49 Reader r = new InputStreamReader(System.in);
50 edu.berkeley.fleet.assembler.Main.assemble(fleet, r, baos);
51 is = new ByteArrayInputStream(baos.toByteArray());
53 String filename = args.get(0);
54 if (filename.endsWith(".fa") || filename.endsWith(".fleet")) {
55 ByteArrayOutputStream baos = new ByteArrayOutputStream();
56 Reader r = new InputStreamReader(new FileInputStream(args.get(0)));
57 edu.berkeley.fleet.assembler.Main.assemble(fleet, r, baos);
58 is = new ByteArrayInputStream(baos.toByteArray());
60 is = new FileInputStream(args.get(0));
65 } else if (command.equals("expand")) {
66 fleet.expand(new ShipDescription(new BufferedReader(new InputStreamReader(new FileInputStream(args.get(0))))));
68 } else if (command.equals("test")) {
69 test(fleet, new File(args.get(0)));
77 static void test(Fleet fleet, File f) throws Exception {
78 if (f.isDirectory()) {
79 for(String s : f.list())
80 test(fleet, new File(f.getPath() + File.separatorChar + s));
81 } else if (f.getPath().endsWith(".fleet")) {
82 ByteArrayOutputStream baos = new ByteArrayOutputStream();
83 edu.berkeley.fleet.assembler.Main.assemble(fleet, new InputStreamReader(new FileInputStream(f)), baos);
84 FleetProcess fp = fleet.run(baos.toByteArray());
86 ArrayList<Long> expect = edu.berkeley.fleet.assembler.Parser.expect;
88 // FIXME: check for extraneous stuff at the end
89 String verdict = "[ ]";
90 boolean failed = false;
92 if (output.length() > 60 && !failed)
93 output = "..."+output.substring(output.length()-57, output.length());
94 if (expect.size() == 0) verdict = "["+Log.green("PASS")+"]";
95 System.out.print("\r" + verdict + " " + Log.yellow(f.getPath()) + ": " + output);
97 if (expect.size() == 0) break;
98 long l = fp.readWord();
99 long l2 = expect.remove(0);
101 verdict = "["+Log.red("FAIL")+"]";
102 output += Log.red("0x"+Long.toString(l, 16)) +
103 Log.yellow(" (expected ")+Log.green("0x"+Long.toString(l2, 16))+Log.yellow(")");
107 output += ("0x"+Long.toString(l2, 16) + " ");
110 System.out.println();
117 public static void run(Fleet fleet, InputStream is) throws IOException {
118 ByteArrayOutputStream baos = new ByteArrayOutputStream();
119 byte[] buf = new byte[1024];
121 int numread = is.read(buf, 0, buf.length);
122 if (numread==-1) break;
123 baos.write(buf, 0, numread);
125 String bitfile = options.get("bitfile");
126 FleetProcess client = fleet.run(baos.toByteArray());
129 ? fleet.run(baos.toByteArray())
130 : fleet.run(bitfile, baos.toByteArray());
133 long result = client.readWord();
134 System.err.print(result);
135 System.err.print(" 0x");
136 System.err.print(Long.toString(result, 16));
137 System.err.println();
141 static void usage() {
142 System.err.println(".........................................................................");
143 System.err.println("Fleet Framework UC Berkeley, Sun Labs / 2007");
144 System.err.println("");
145 System.err.println("usage: java -jar fleet.jar [options] [command] [filename] [args]");
146 System.err.println("");
147 System.err.println("[options] is in the form key=val; supported keys are:");
148 System.err.println(" target={igor,fpga,interp}");
149 System.err.println(" bitfile=(hardware image for fpga)");
150 System.err.println(" verbose={yes,no}");
151 System.err.println("");
152 System.err.println("[command] is one of:");
153 System.err.println(" asm");
154 System.err.println(" disasm");
155 System.err.println(" typeset");
156 System.err.println(" extract [section]");
157 System.err.println(" run");
158 System.err.println("");
159 System.err.println("[filename] is one of:");
160 System.err.println(" *.fa Fleet assembler");
161 System.err.println(" *.f0 F0 code (not yet supported)");
162 System.err.println(" *.fo Fleet binary object");
163 System.err.println(" *.ship Ship description");
164 System.err.println("");
165 System.err.println("All [args] not consumed by [command] are passed to target");
166 System.err.println("");