<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<p><br>
</p>
<div class="moz-cite-prefix">On 7/30/19 9:03 PM, Rui Ueyama via llvm-dev wrote:<br>
</div>
<blockquote type="cite" cite="mid:CAJENXgsywaxos_9JpNSsKbNZxLrMrZbNhT+rEbPKwjbNeyqu5Q@mail.gmail.com">
<div dir="ltr">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.</div>
</blockquote>
<p><br>
</p>
<p>That would be very useful.</p>
<p> -Hal<br>
</p>
<p><br>
</p>
<blockquote type="cite" cite="mid:CAJENXgsywaxos_9JpNSsKbNZxLrMrZbNhT+rEbPKwjbNeyqu5Q@mail.gmail.com">
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Wed, Jul 31, 2019 at 10:55 AM Shi, Steven <<a href="mailto:steven.shi@intel.com" target="_blank" moz-do-not-send="true">steven.shi@intel.com</a>> wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
          0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div lang="EN-US">
<div class="gmail-m_-8129337549807827575gmail-m_3803103687571245022gmail-m_6860700984809400629gmail-m_6706030245267268102WordSection1">
<p class="MsoNormal"><a name="m_-8129337549807827575_m_3803103687571245022_m_6860700984809400629_m_6706030245267268102__MailEndCompose" moz-do-not-send="true"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">Very nice. It can
 directly help me know which lib and obj file is redundant in my linker script.</span></a></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"> </span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">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.</span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"> </span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"> </span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">Thanks</span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">Steven</span><b><span style="font-family:Arial,sans-serif;color:rgb(31,73,125)"></span></b></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"> </span></p>
<div style="border-top:none;border-right:none;border-bottom:none;border-left:1.5pt
                solid blue;padding:0in 0in 0in 4pt">
<div>
<div style="border-right:none;border-bottom:none;border-left:none;border-top:1pt
                    solid rgb(225,225,225);padding:3pt 0in 0in">
<p class="MsoNormal"><a name="m_-8129337549807827575_m_3803103687571245022_m_6860700984809400629_m_6706030245267268102______replyseparator" moz-do-not-send="true"></a><b><span style="font-size:11pt;font-family:Calibri,sans-serif">From:</span></b><span style="font-size:11pt;font-family:Calibri,sans-serif">
 Rui Ueyama [mailto:<a href="mailto:ruiu@google.com" target="_blank" moz-do-not-send="true">ruiu@google.com</a>]
<br>
<b>Sent:</b> Wednesday, July 31, 2019 9:29 AM<br>
<b>To:</b> Shi, Steven <<a href="mailto:steven.shi@intel.com" target="_blank" moz-do-not-send="true">steven.shi@intel.com</a>><br>
<b>Cc:</b> llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank" moz-do-not-send="true">llvm-dev@lists.llvm.org</a>><br>
<b>Subject:</b> Re: [llvm-dev] RFC: auto-generating build dependency file from lld</span></p>
</div>
</div>
<p class="MsoNormal"> </p>
<div>
<p class="MsoNormal">Yeah, I think there's no reason to not add this to lld/COFF if people find it useful.</p>
</div>
<p class="MsoNormal"> </p>
<div>
<div>
<p class="MsoNormal">On Wed, Jul 31, 2019 at 10:25 AM Shi, Steven <<a href="mailto:steven.shi@intel.com" target="_blank" moz-do-not-send="true">steven.shi@intel.com</a>> wrote:</p>
</div>
<blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt
                    solid rgb(204,204,204);padding:0in 0in 0in
                    6pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">I love this feature. Does it plan to support COFF as well?</span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"> </span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"> </span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">Thanks</span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">Steven</span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"> </span></p>
<div style="border-top:none;border-right:none;border-bottom:none;border-left:1.5pt
                          solid blue;padding:0in 0in 0in 4pt">
<div>
<div style="border-right:none;border-bottom:none;border-left:none;border-top:1pt
                              solid rgb(225,225,225);padding:3pt 0in
                              0in">
<p class="MsoNormal"><a name="m_-8129337549807827575_m_3803103687571245022_m_6860700984809400629_m_6706030245267268102_m_-8764770562920469159_m_582533476218688" moz-do-not-send="true"></a><b><span style="font-size:11pt;font-family:Calibri,sans-serif">From:</span></b><span style="font-size:11pt;font-family:Calibri,sans-serif">
 llvm-dev [mailto:<a href="mailto:llvm-dev-bounces@lists.llvm.org" target="_blank" moz-do-not-send="true">llvm-dev-bounces@lists.llvm.org</a>]
<b>On Behalf Of </b>Rui Ueyama via llvm-dev<br>
<b>Sent:</b> Wednesday, July 31, 2019 8:54 AM<br>
<b>To:</b> llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank" moz-do-not-send="true">llvm-dev@lists.llvm.org</a>><br>
<b>Subject:</b> [llvm-dev] RFC: auto-generating build dependency file from lld</span></p>
</div>
</div>
<p class="MsoNormal"> </p>
<div>
<p class="MsoNormal">Hi,</p>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal">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.</p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal">Background:</p>
</div>
<div>
<p class="MsoNormal">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.</p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal">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.</p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal">Proposal:</p>
</div>
<div>
<p class="MsoNormal">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:</p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal">  <output-file>: <input-file> ...</p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<p class="MsoNormal">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.</p>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<div>
<p class="MsoNormal">Here is a change to implement the above feature: <a href="https://reviews.llvm.org/D65430" target="_blank" moz-do-not-send="true">
https://reviews.llvm.org/D65430</a></p>
</div>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal">Any comments?</p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal">Thanks,</p>
</div>
<div>
<p class="MsoNormal">Rui</p>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
LLVM Developers mailing list
<a class="moz-txt-link-abbreviated" href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>
<a class="moz-txt-link-freetext" href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a>
</pre>
</blockquote>
<pre class="moz-signature" cols="72">-- 
Hal Finkel
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory</pre>
</body>
</html>