[llvm-dev] RFC: auto-generating build dependency file from lld

Rui Ueyama via llvm-dev llvm-dev at lists.llvm.org
Tue Jul 30 17:53:49 PDT 2019


I'd like to propose a new feature and a flag
(`--write-dependencies=<path>`) for lld so that the linker can generate a
dependency file (.d file). This is analogous to `-MD` compiler flag.

Clang and GCC have a feature (`-MD` flag) to create a dependency file in a
format that `make` and other build tools can read, so that you don't have
to manually maintain dependencies between .c files and .h files. There's no
similar feature for the linker, even though it seems useful in some

In particular, if a compiler driver automatically appends a static library
to the final executable but you don't know the exact path of the library,
there's currently no way to keep track of that dependency. A typical
example of it is `-fsanitizer=asan` which adds libasan to the linker
command line. If libasan is updated, you may want to rebuild your program,
but you don't want to manually write its path to a build file because that
may change.

Add a new command line flag `--write-dependencies=<path>` to lld. If the
flag is given, lld creates a file at a given path with the following

  <output-file>: <input-file> ...

where <output-file> is a pathname of an output file and <input-file> ... is
a list of pathnames of all input files. This file format is the same as the
`-MD` compiler flag output.

Here is a change to implement the above feature:

Any comments?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190731/ef0d4220/attachment.html>

More information about the llvm-dev mailing list