||Abstract base class for build backends.
A build backend is merely a consumer of the build configuration (the output
of the frontend processing). It does something with said data. What exactly
is the discretion of the specific implementation.
||Configuration that generates the backend for clangd, it is used with `clangd`
extension for vscode
||Helps manage XPCOM IDLs in the context of the build system.
||Error loading config.status
||Backend that generates Cpp Eclipse project files.
||Class encapsulating logic for backends that use Make.
||Represents a generated backend.mk file.
This is both a wrapper around a file handle as well as a container that
holds accumulated state.
It's worth taking a moment to explain the make dependencies. The
generated backend.mk as well as the Makefile.in (if it exists) are in the
GLOBAL_DEPS list. This means that if one of them changes, all targets
in that Makefile are invalidated. backend.mk also depends on all of its
It's worth considering the effect of file mtimes on build behavior.
Since we perform an "all or none" traversal of moz.build files (the whole
tree is scanned as opposed to individual files), if we were to blindly
write backend.mk files, the net effect of updating a single mozbuild file
in the tree is all backend.mk files have new mtimes. This would in turn
invalidate all make targets across the whole tree! This would effectively
undermine incremental builds as any mozbuild change would cause the entire
tree to rebuild!
The solution is to not update the mtimes of backend.mk files unless they
actually change. We use FileAvoidWrite to accomplish this.
||Partial backend that generates test metadata files.
||Generate Visual Studio project files.
This backend is used to produce Visual Studio projects and a solution
to foster developing Firefox with Visual Studio.
This backend is currently considered experimental. There are many things
not optimal about how it works.