| Generated Files |
| ================== |
| |
| The intermediate representation passed from the Mojom parser (the frontend |
| of the Mojom compiler) to the code generators (the backend of the Mojom |
| Compiler) is a `MojomFileGraph` described in mojom_types.mojom and |
| mojom_files.mojom in mojo/public/interfaces/bindings. Thus the Mojom compiler |
| uses Mojo serialization to serialize the intermediate representation. |
| |
| This situation potentially entails a circular dependency because it means that |
| in order to build the Mojom compiler it is necessary to use code that has been |
| generated by the Mojom compiler. In order to break this circular dependency we |
| check in the generated code needed by the compiler rather than generating it |
| while building the compiler. |
| |
| This directory contains the checked-in generated Go code used by the frontend |
| of the compiler: |
| mojom_files/mojom_files.mojom.go and |
| mojom_types/mojom_types.mojom.go. |
| |
| The backend of the Mojom compiler is written in Python and the corresponding |
| generated Python files may be found in |
| mojo/public/tools/bindings/pylib/mojom/generate/generated/mojom_files_mojom.py |
| and |
| mojo/public/tools/bindings/pylib/mojom/generate/generated/mojom_types_mojom.py |
| |
| ### Instructions for updating these files |
| 1) Make changes to mojom_types.mojom and mojom_files.mojom. This may be done |
| either in the same patch as everything below or in its own initial patch. |
| 2) Compile these files to produce new generated files: |
| ninja -C out/Debug mojo/public/interfaces/bindings. |
| 3) Copy the newly generated mojom_files.mojom.go and mojom_types.mojom.go |
| into the appropriate locations in this directory. |
| 4) mojom_files.mojom.go needs to be manually patched in a minor way. In the |
| import section at the top replace "mojo/public/interfaces/bindings/mojom_types" |
| with "mojom/mojom_parser/generated/mojom_types". |
| 5) Update the Go code in the serialization module of the parser to compensate |
| for the changes if necessary. (Not necessary if the changes in step 1 were |
| backward compatible.) |
| 6) Perform the analog of steps 3, 4, 5 for the Python code in the backend of |
| the compiler. See |
| mojo/public/tools/bindings/pylib/mojom/generate/generated/README.md |
| for instructions. |
| 7) Land a patch containing your changes from steps 3 through 6. |