Setting the eMake Root Directory

2 minute read

The --emake-root option (or the EMAKE_ROOT environment variable) specifies the EFS root directory [or directories] location. All files under the eMake root directory are automatically mirrored on each Agent.

eMake uses the current directory as the default if no other root directory is specified. You must specify the correct root directory (or directories) or the build might fail because eMake cannot find the necessary files to complete the build or resolve dependencies.

For best results and performance, be specific when setting the eMake root location. Be sure to include:

  • All files created or modified by the build.

  • All source files.

  • The location where build output files will go during the build, for example, object files, linker output, and so on.

  • Other files read by the build such as third-party tools and system headers, or other files not modified if you need to. Be aware, however, that including these files can affect performance. See Configuring Your Build.

If necessary, specify more than one directory or subdirectory. Separate each location using standard PATH variable syntax (a colon for UNIX, a semicolon for Windows).

UNIX example:

--emake-root=/src/foo:/src/baz

In this example, you have streamlined the root path by excluding other /src subdirectories not necessary to the build.

Windows example:

--emake-root=C:\Build2;C:\Build4_test
Any files used by the build, but not included under an eMake root directory, must be preloaded onto all hosts and identical to corresponding files on the system running eMake. If these files are not identical, eMake could find and use the wrong files for the build. This approach is appropriate for system compilers, libraries, header files, and other files that change infrequently and are used for all builds.

Generally, EMAKE_ROOT can be set to include any existing directory on the host build machine. Files in these directories are automatically accessible by commands running on cluster hosts. However, there are a few exceptions:

  • EMAKE_ROOT cannot be set to the system root directory (for example, “ / ” on UNIX or C:\ on Windows). It might be tempting to try this to specify “mirror everything,” but in practice, this is not desirable because mirroring system directories such as /var or /etc on UNIX or C:\Windows on Windows can lead to unpredictable behavior. eMake will not allow you to specify the root directory as EMAKE_ROOT.

  • /tmp and the Windows temp directory cannot be included in the eMake root.

  • On Windows, another operating system restriction is imposed: EMAKE_ROOT is not a UNC path specification—it must be a drive letter specification or a path relative to a drive letter. It must also be a minimum of three characters.