|
@@ -0,0 +1,47 @@
|
|
|
|
|
+# Summary — toto.mod test build (`invoke.sh`)
|
|
|
|
|
+
|
|
|
|
|
+A tiny end-to-end smoke build of a user program, added on top of step
|
|
|
|
|
+8.3 (suite 106/106).
|
|
|
|
|
+
|
|
|
|
|
+## Files
|
|
|
|
|
+
|
|
|
|
|
+- `compiler/toto.mod` — `MODULE toto;`, imports `FROM TestIO IMPORT
|
|
|
|
|
+ WriteString, WriteLn;` and prints
|
|
|
|
|
+ `Hello world, I'm coming to life!`.
|
|
|
|
|
+- `compiler/TestIO.def` / `compiler/TestIO.mod` — minimal `WriteString`
|
|
|
|
|
+ + `WriteLn`, bound to the runtime shim externals (`m2write`,
|
|
|
|
|
+ `m2writeln`), same approach as `stdlib/SysIO`. (No `TestIO` existed
|
|
|
|
|
+ in the tree before.)
|
|
|
|
|
+- `compiler/invoke.sh` — the build pipeline, executable.
|
|
|
|
|
+
|
|
|
|
|
+## Pipeline
|
|
|
|
|
+
|
|
|
|
|
+```sh
|
|
|
|
|
+./M2 TestIO.def TestIO.mod toto.mod # module `toto` -> gen_ssa/toto.ssa
|
|
|
|
|
+qbe -o gen_ssa/toto.s gen_ssa/toto.ssa
|
|
|
|
|
+cc gen_ssa/toto.s ../runtime/syslib/shim.c -o gen_ssa/toto -lm
|
|
|
|
|
+./gen_ssa/toto
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+The output name is the **module name** (`toto`, as written in the
|
|
|
|
|
+source), not the file name. Session files: definitions/implementations
|
|
|
|
|
+first, the program module last.
|
|
|
|
|
+
|
|
|
|
|
+## Verification
|
|
|
|
|
+
|
|
|
|
|
+`./invoke.sh` (from `compiler/`):
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+Parsed correctly
|
|
|
|
|
+--- running gen_ssa/toto ---
|
|
|
|
|
+Hello world, I'm coming to life!
|
|
|
|
|
+exit=0
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+## Notes
|
|
|
|
|
+
|
|
|
|
|
+- `/*.LST` added to `compiler/.gitignore` (driver listings at the
|
|
|
|
|
+ compiler root are build artifacts, like `src/*.LST` and
|
|
|
|
|
+ `tests/*.LST`).
|
|
|
|
|
+- `invoke.sh` is toto-specific; adapt `PROG`/the `./M2` file list for
|
|
|
|
|
+ other programs.
|