Update docs to include notes on build.json

Add details on how to update `build.json` and generate the build files.
diff --git a/doc/contributing.md b/doc/contributing.md
index f6146a4..8074449 100644
--- a/doc/contributing.md
+++ b/doc/contributing.md
@@ -29,6 +29,41 @@
 and be committed to the Emboss repository in a specific location.
 
 
+### Updating Build Helper Files
+
+The Emboss project provides a set of generated files in the `gen/` directory
+that can be used by other build systems (like CMake, GN, etc.) to easily
+include the Emboss compiler and C++ runtime sources.
+
+These files are generated from a single source of truth: `build.json`.
+
+-   **`build.json`**: This file, located in the project root, contains the
+    canonical lists of source files required for the compiler and the C++
+    runtime. It is the only file in this system that should be manually
+    edited, though it is typically updated via a script.
+
+-   **`gen/`**: This directory contains the generated helper files. **Do not
+    edit these files directly**, as they will be overwritten.
+
+If you change the dependencies of the Emboss compiler or runtime in the Bazel
+build system, you will need to update `build.json` and regenerate the helper
+files.
+
+-   To update `build.json` with the latest sources from Bazel, run:
+    ```bash
+    ./scripts/build_helpers/manage_build_json.py
+    ```
+
+-   To regenerate the files in `gen/` after modifying `build.json`, run:
+    ```bash
+    ./scripts/build_helpers/generate_build_files.py
+    ```
+
+A CI check is in place to ensure that `build.json` is always in sync with the
+Bazel build. If this check fails, you will need to run the `manage_build_json.py`
+script and commit the changes.
+
+
 ### How-To Guides
 
 This document covers the process of getting a change into the main Emboss