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 String bitfile = options.get("bitfile");
38 fleet = bitfile == null ? new Slipway() : new Slipway(bitfile);
39 } else if ("sim".equals(target) || "fleetsim".equals(target)) {
40 fleet = (Fleet)Class.forName("com.sunlabs.fleetsim.fleet.FleetDescription").newInstance();
42 fleet = new Interpreter.DynamicInterpreter();
45 if (!"true".equals(options.get("verbose")))
48 if (command.equals("run")) {
51 ByteArrayOutputStream baos = new ByteArrayOutputStream();
52 Reader r = new InputStreamReader(System.in);
53 edu.berkeley.fleet.assembler.Main.assemble(fleet, r, baos);
54 is = new ByteArrayInputStream(baos.toByteArray());
56 String filename = args.get(0);
57 if (filename.endsWith(".fa") || filename.endsWith(".fleet")) {
58 ByteArrayOutputStream baos = new ByteArrayOutputStream();
59 Reader r = new InputStreamReader(new FileInputStream(args.get(0)));
60 edu.berkeley.fleet.assembler.Main.assemble(fleet, r, baos);
61 is = new ByteArrayInputStream(baos.toByteArray());
63 is = new FileInputStream(args.get(0));
68 } else if (command.equals("expand")) {
69 fleet.expand(new ShipDescription(new BufferedReader(new InputStreamReader(new FileInputStream(args.get(0))))));
71 } else if (command.equals("test")) {
72 test(fleet, new File(args.get(0)));
80 static void test(Fleet fleet, File f) throws Exception {
81 if (f.isDirectory()) {
82 for(String s : f.list())
83 test(fleet, new File(f.getPath() + File.separatorChar + s));
84 } else if (f.getPath().endsWith(".fleet")) {
85 ByteArrayOutputStream baos = new ByteArrayOutputStream();
86 edu.berkeley.fleet.assembler.Main.assemble(fleet, new InputStreamReader(new FileInputStream(f)), baos);
87 FleetProcess fp = fleet.run(baos.toByteArray());
89 ArrayList<Long> expect = edu.berkeley.fleet.assembler.Parser.expect;
91 // FIXME: check for extraneous stuff at the end
92 String verdict = "[ ]";
93 boolean failed = false;
95 if (output.length() > 60 && !failed)
96 output = "..."+output.substring(output.length()-57, output.length());
97 if (expect.size() == 0) verdict = "["+Log.green("PASS")+"]";
98 System.out.print("\r" + verdict + " " + Log.yellow(f.getPath()) + ": " + output);
100 if (expect.size() == 0) break;
101 long l = fp.readWord();
102 long l2 = expect.remove(0);
104 verdict = "["+Log.red("FAIL")+"]";
105 output += Log.red("0x"+Long.toString(l, 16)) +
106 Log.yellow(" (expected ")+Log.green("0x"+Long.toString(l2, 16))+Log.yellow(")");
110 output += ("0x"+Long.toString(l2, 16) + " ");
113 System.out.println();
120 public static void run(Fleet fleet, InputStream is) throws IOException {
121 ByteArrayOutputStream baos = new ByteArrayOutputStream();
122 byte[] buf = new byte[1024];
124 int numread = is.read(buf, 0, buf.length);
125 if (numread==-1) break;
126 baos.write(buf, 0, numread);
128 FleetProcess client = fleet.run(baos.toByteArray());
130 long result = client.readWord();
131 System.err.print(result);
132 System.err.print(" 0x");
133 System.err.print(Long.toString(result, 16));
134 System.err.println();
138 static void usage() {
139 System.err.println(".........................................................................");
140 System.err.println("Fleet Framework UC Berkeley, Sun Labs / 2007");
141 System.err.println("");
142 System.err.println("usage: java -jar fleet.jar [options] [command] [filename] [args]");
143 System.err.println("");
144 System.err.println("[options] is in the form key=val; supported keys are:");
145 System.err.println(" target={sim,fpga,interp}");
146 System.err.println(" bitfile=(hardware image for fpga)");
147 System.err.println(" verbose={yes,no}");
148 System.err.println("");
149 System.err.println("[command] is one of:");
150 System.err.println(" asm");
151 System.err.println(" disasm");
152 System.err.println(" typeset");
153 System.err.println(" extract [section]");
154 System.err.println(" run");
155 System.err.println("");
156 System.err.println("[filename] is one of:");
157 System.err.println(" *.fa Fleet assembler");
158 System.err.println(" *.f0 F0 code (not yet supported)");
159 System.err.println(" *.fo Fleet binary object");
160 System.err.println(" *.ship Ship description");
161 System.err.println("");
162 System.err.println("All [args] not consumed by [command] are passed to target");
163 System.err.println("");