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

Rui Ueyama via llvm-dev llvm-dev at lists.llvm.org
Tue Jul 30 19:03:02 PDT 2019


Yes, it's a little bit off-topic, but it is also planned. The data
structure that the linker handles can be considered a large graph where
vertices are file sections and edges are symbol names. You can say that
file A depends on file B if and only if in the graph a section in file A
has an edge to a section in file B. There is a plan to dump the graph in a
machine-readable format such as JSON so that you can run arbitrary graph
analysis algorithms on it.

On Wed, Jul 31, 2019 at 10:55 AM Shi, Steven <steven.shi at intel.com> wrote:

> Very nice. It can directly help me know which lib and obj file is
> redundant in my linker script.
>
>
>
> BTW, besides the lib and file level dependency, is it possible to further
> print the function and global variable level dependency? E.g. the really
> linked symbols before any link level optimization. The fine granularity
> dependency could help me clean the redundant code and more accurately
> select regression test case in CI.
>
>
>
>
>
> Thanks
>
> Steven
>
>
>
> *From:* Rui Ueyama [mailto:ruiu at google.com]
> *Sent:* Wednesday, July 31, 2019 9:29 AM
> *To:* Shi, Steven <steven.shi at intel.com>
> *Cc:* llvm-dev <llvm-dev at lists.llvm.org>
> *Subject:* Re: [llvm-dev] RFC: auto-generating build dependency file from
> lld
>
>
>
> Yeah, I think there's no reason to not add this to lld/COFF if people find
> it useful.
>
>
>
> On Wed, Jul 31, 2019 at 10:25 AM Shi, Steven <steven.shi at intel.com> wrote:
>
> I love this feature. Does it plan to support COFF as well?
>
>
>
>
>
> Thanks
>
> Steven
>
>
>
> *From:* llvm-dev [mailto:llvm-dev-bounces at lists.llvm.org] *On Behalf Of *Rui
> Ueyama via llvm-dev
> *Sent:* Wednesday, July 31, 2019 8:54 AM
> *To:* llvm-dev <llvm-dev at lists.llvm.org>
> *Subject:* [llvm-dev] RFC: auto-generating build dependency file from lld
>
>
>
> Hi,
>
>
>
> 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.
>
>
>
> Background:
>
> 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
> situations.
>
>
>
> 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.
>
>
>
> Proposal:
>
> 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
> contents:
>
>
>
>   <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:
> https://reviews.llvm.org/D65430
>
>
>
> Any comments?
>
>
>
> Thanks,
>
> Rui
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190731/c106c914/attachment-0001.html>


More information about the llvm-dev mailing list