Correct spelling.
[SquirrelJME.git] / assets / doc / nanocoat-layout.mkd
blob1dd73dc49a07c4d50e3a782d037746f2567fe2ff
1 # NanoCoat Layout
3 This document specifies the layout of a NanoCoat Zip which contains
4 sources and tables for merging and otherwise. NanoCoat is built on top
5 of tables which are used to create the most compact possible output
6 executable which removes any and all duplicates. As such, the structure
7 is akin to a `Map` of source code and constants.
9 ## Libraries
11 Libraries are Jars which have been run through the NanoCoat AOT Compiler
12 which outputs to tables and C source code.
14  * `shared/` -- Fragments and otherwise which are shared across different
15    ROMs and libraries. All sources within are identified by their fingerprint.
16    On merging the content of the individual files should be exactly the same.
17    * `char/` -- Strings which are referred to by other parts of the code.
18    * `code/` -- Source code, based on the code fingerprint and is
19      agnostic of the actual method the code belongs to. For example
20      this may contain a source code file called `code_deadbeef.c` where
21      `deadbeef` is the code fragment identifier.
22    * `ints/` -- Class interface lists.
23    * `lncl/` -- Linkages for `Class` references.
24    * `lnfa/` -- Linkages for field access.
25    * `lnmi/` -- Linkages for method invocations.
26    * `lnst/` -- Linkages for `String` references.
27    * `lnvd/` -- Linkages for `double` values.
28    * `lnvf/` -- Linkages for `float` values.
29    * `lnvi/` -- Linkages for `int` values.
30    * `lnvj/` -- Linkages for `long` values.
31    * `rsrc/` -- Jar resources, unlikely these are duplicated but in the event
32      they are, this will be handled accordingly.
33    * `tyfi/` -- Field type information.
34    * `tyme/` -- Method type information.
35    * `valn/` -- Locals/Stack variable limit tables.
36  * `lib/` -- Library code root.
37    * `$CLUTTER_LEVEL/` -- The clutter level of the library.
38      * `$SOURCE_SET/` -- The source set for the library, will be one of
39        _main_, _test_, or _testFixtures_. 
40        * `$MODULE_NAME/` -- The name of the library module, for example this
41          will be _cldc-compact_.
42          * `classes/` -- Classes within the library
43            * `$CLASS.c` -- Individual class information files, these do not
44              contain any code but instead link to shared fragments.
45          * `$MODULE_NAME.c` -- Module library information file.
46          * `CMakeLists.txt` -- CMake Build file for the library.
48 ## ROMs
50 ROMs are a collection of libraries, which their file structure layout
51 is the same as libraries however they have been flattened from multiple
52 libraries into a single set of files.
54  * `rom/` -- ROM code root.
55    * `$CLUTTER_LEVEL/` -- The name of the ROM, which is the clutter level. 
56      * `$SOURCE_SET/` -- The ROM source set, will be one of _main_, _test_,
57        or _testFixtures_. 
58        * `$SOURCE_SET.c` -- ROM information source.
59        * `CMakeLists.txt` -- CMake Build file for the ROM.