Next: , Previous: Debugging, Up: Amake Features

13.5 Execution Architecture

An amake system may encompass multiple amake processes executing for multiple users on multiple computers.

If target caching is enabled, multiple tcd processes may be executing on multiple computers. They are started as needed, and exit when idle. In contrast, a single long-lived sqld must be executing.

The components of a executing amake system are shown in this picture:



In the picture, the multiple amake processes indicate that at least one user has started amake from a shell. Of course, an amake process can start other amake processes, via a rule's commands.

In deciding whether a target must be updated, amake reads the target's .cmd and .dep files, writing a new .cmd file as needed. These files are assumed to be in a normal user-private workspace.

If a target must be updated, amake starts an amake-collect process for the target and executes the its rule's commands. The commands call wrapper functions in the libaccess shared-library, which write the target's dependency data to its amake-collect process, via an anonymous pipe. amake-collect reads the target's dependency data from the pipe and writes the target's .dep and .sib files. As usual, the commands update the target file in the workspace filesystem.

If the target cache is enabled, the sqld and cache filesystem are assumed to be available. The cache filesystem can be shared among workspaces on a single host, or shared among hosts (via NFS, for example). Files are stored in the cache filesystem below directories whose names prevent collisions. The database filesystem holds metadata about those files (e.g., names and checksums).

If the target cache is enabled, amake consults the target-cache subsystem, prior to, and perhaps instead of, executing a rule's commands. If needed, a tcd process is started. Each amake process has a single tcd process, with which it communicates via a named socket. tcd searches the cache for a suitable target, by querying sqld and analyzing candidates in the cache filesystem. If successful, files are hard-linked or copied to the workspace filesystem. If unsuccessful, the rule's commands are executed as usual, the updated target's metadata is stored by sqld, and the updated target's files are hard-linked or copied to the cache filesystem. A target's siblings are stored in the cache filesystem as a single tar file.