summaryrefslogtreecommitdiffstats
path: root/build/docs/gn.rst
diff options
context:
space:
mode:
Diffstat (limited to 'build/docs/gn.rst')
-rw-r--r--build/docs/gn.rst52
1 files changed, 52 insertions, 0 deletions
diff --git a/build/docs/gn.rst b/build/docs/gn.rst
new file mode 100644
index 0000000000..bf5ad8509c
--- /dev/null
+++ b/build/docs/gn.rst
@@ -0,0 +1,52 @@
+.. _gn:
+
+==============================
+GN support in the build system
+==============================
+
+:abbr:`GN (Generated Ninja)` is a third-party build tool used by chromium and
+some related projects that are vendored in mozilla-central. Rather than
+requiring ``GN`` to build or writing our own build definitions for these projects,
+we have support in the build system for translating GN configuration
+files into moz.build files. In most cases these moz.build files will be like any
+others in the tree (except that they shouldn't be modified by hand), however
+those updating vendored code or building on platforms not supported by
+Mozilla automation may need to re-generate these files. This is a two-step
+process, described below.
+
+Generating GN configs as JSON
+=============================
+
+The first step must take place on a machine with access to the ``GN`` tool, which
+is specified in a mozconfig with::
+
+ export GN=<path/to/gn>
+
+With this specified, and the tree configured, run::
+
+ $ ./mach build-backend -b GnConfigGen
+
+This will run ``gn gen`` on projects found in ``GN_DIRS`` specified in moz.build
+files, injecting variables from the current build configuration and specifying
+the result be written to a JSON file in ``$objdir/gn-output``. The file will
+have a name derived from the arguments passed to ``gn gen``, for instance
+``x64_False_x64_linux.json``.
+
+If updating upstream sources or vendoring a new project, this step must be
+performed for each supported build configuration. If adding support for a
+specific configuration, the generated configuration may be added to existing
+configs before re-generating the ``moz.build`` files, which should be found under
+the ``gn-configs`` directory under the vendored project's top-level directory.
+
+Generating moz.build files from GN JSON configs
+===============================================
+
+Once the relevant JSON configs are present under a project's ``gn-configs``
+directory, run::
+
+ $ ./mach build-backend -b GnMozbuildWriter
+
+This will combine the configuration files present into a set of moz.build files
+that will build the given project. Once the result is verified, the resulting
+moz.build files should be checked in and should build like any other part of
+mozilla-central.