Rui Ueyama via llvm-dev
2019-Jul-31 02:03 UTC
[llvm-dev] RFC: auto-generating build dependency file from lld
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>
Fāng-ruì Sòng via llvm-dev
2019-Jul-31 07:04 UTC
[llvm-dev] RFC: auto-generating build dependency file from lld
On the COFF side, I think /verbose already gives `Reading ...` logs. Users can parse the filenames. It probably makes sense to add a fine-grained option /trace as per ELF (-t --trace). On Wed, Jul 31, 2019 at 2:03 AM Rui Ueyama via llvm-dev < llvm-dev at lists.llvm.org> wrote:> 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 >> >> _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >-- 宋方睿 -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190731/26741382/attachment.html>
Finkel, Hal J. via llvm-dev
2019-Jul-31 20:32 UTC
[llvm-dev] RFC: auto-generating build dependency file from lld
On 7/30/19 9:03 PM, Rui Ueyama via llvm-dev wrote: 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. That would be very useful. -Hal On Wed, Jul 31, 2019 at 10:55 AM Shi, Steven <steven.shi at intel.com<mailto: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<mailto:ruiu at google.com>] Sent: Wednesday, July 31, 2019 9:29 AM To: Shi, Steven <steven.shi at intel.com<mailto:steven.shi at intel.com>> Cc: llvm-dev <llvm-dev at lists.llvm.org<mailto: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<mailto: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<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<mailto: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 _______________________________________________ LLVM Developers mailing list llvm-dev at lists.llvm.org<mailto:llvm-dev at lists.llvm.org> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev -- Hal Finkel Lead, Compiler Technology and Programming Languages Leadership Computing Facility Argonne National Laboratory -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190731/1867ea1f/attachment.html>
Rui Ueyama via llvm-dev
2019-Aug-01 00:48 UTC
[llvm-dev] RFC: auto-generating build dependency file from lld
On Wed, Jul 31, 2019 at 4:04 PM Fāng-ruì Sòng <maskray at google.com> wrote:> On the COFF side, I think /verbose already gives `Reading ...` logs. Users > can parse the filenames. > It probably makes sense to add a fine-grained option /trace as per ELF (-t > --trace). >That is also true for lld/ELF and perhaps even for the compilers. If you enable logging, it must contain input filenames, and you can create a dep file from it. So the point is convenience -- you don't have to parse linker logs to create a dep file (and that's true for compiler's -MD option, I think). On Wed, Jul 31, 2019 at 2:03 AM Rui Ueyama via llvm-dev <> llvm-dev at lists.llvm.org> wrote: > >> 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 >>> >>> _______________________________________________ >> LLVM Developers mailing list >> llvm-dev at lists.llvm.org >> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >> > > > -- > 宋方睿 >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190801/5ad725d1/attachment.html>