Hmm, I think that may cause problems with the systemc tests. I push some runtime dependencies into the build directory by marking them as dependencies, and the tests refer to them using relative paths. If you run the tests with the source directory as the CWD, they definitely do deposit files where they shouldn't. I sent an email a while ago which described how to use the verify.py script in the src/systemc directory to run the tests if you want to give it a try.
As far as gdb, I don't necessarily have a great answer but this page: https://www-zeuthen.desy.de/unix/unixguide/infohtml/gdb/Source-Path.html mentions something called set substitute-path which looks like it can rewrite source paths that are in the binary. I haven't looked into it, but it might even be possible to tell g++ (or clang, if you prefer) to pretend the sources came from the source directory even though they didn't so that the debugging info in the binary directly contains the source path without substitution. I have no idea if there's actually a way to tell it to do that though. Gabe On Thu, Dec 6, 2018 at 11:49 PM Ciro Santilli <ciro.santi...@arm.com> wrote: > Hey, > > > The method mentioned does not make extra copies of the source, and as far > as I can see from my tests, does not place build outputs in the main source > tree either. > > > In other words, when you use SConscript(variant_dir=, duplicate=0), > scons does the following: > > > - use the source code directly from the main tree, without any symlinks or > copies > > - place only the build outputs in the build directory > > > What annoys me with the symlinks are the following: > > > - I GDB step debug a file. OK, need to open it in my editor. Ctrl + C Ctrl > + V. OK, need to jump to a tag. Arghhh, I'm not on the source tree, need to > find the corresponding file on the source tree to get my ctags. More > generally: it breaks / makes GDB IDE integration harder. > > - the build tree become very cluttered. When analyzing it, it becomes > difficult to find which files are actually being built / generated, since > ls -l shows a large list of symlinks. I end up having to resort to `find > . -type f`. > > > scons rationale for duplication is documented at: > https://scons.org/doc/2.4.1/HTML/scons-user.html#idp1378838508 > > > > The most direct reason to duplicate source files in variant directories > is simply that some tools (mostly older versions) are written to only build > their output files in the same directory as the source files. > > <https://scons.org/doc/2.4.1/HTML/scons-user.html#idp1378838508>but I > think it is being too conservative, I had never seen any modern build > system besides scons doing that, and they work just fine. > ------------------------------ > *From:* Gabe Black <gabebl...@google.com> > *Sent:* Friday, December 7, 2018 12:25:41 AM > *To:* Ciro Santilli > *Cc:* gem5 Developer List > *Subject:* Re: Prevent symlinking of source files in the build directory > > I'm not following why the symlinks are a problem... Could you explain that > more? I've used gdb with gem5 and not had any troubles from that. Using > files from the build directory keeps (or at least helps keep) things from > leaking into the source directory that don't belong there, and when > building 10 different variants, it avoids making 10 copies of the source > tree. I'm pretty strongly in favor of leaving this as is, but I'm always > willing to be enlightened :-). > > Gabe > > On Thu, Dec 6, 2018 at 10:13 AM Ciro Santilli <ciro.santi...@arm.com> > wrote: > > The build symlinks every .cc files from the build directory into the > source directory by default, and it annoys me quite a lot, since when > using GDB I go into the build directory instead of source. > > Today I was studying the build system, and I learned that that this is > an SCons feature of variant dirs, which does hardlinks by default, but > which we force to generate symlinks on gem5 with: > > main.SetOption('duplicate', 'soft-copy') > > I then saw that it is possible to turn off the symlinks / hardlinks and > just use the source directly, at least on a per variant directory basis > with: > > SConscript(variant_dir=, duplicate=0) > > So I ask you the following: > > 1. do you know of a way to turn the duplication off by default in one go > for all variant dirs? > 2. if such method exists, and I made a patch that implements it by > default, would you be favorable to such change? Or do you rely on the > symlinks for some functionality? > > CC @Gabe as I've been told you were planning to do something about the > variants in the build system some time ago. > > _______________________________________________ gem5-dev mailing list gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev