[Scons-users] Make all Program and SharedLibrary targets implicitly Precious?

Andrew C. Morrow andrew.c.morrow at gmail.com
Thu May 12 16:08:13 EDT 2016


OK, I got something that sort of works for incremental linking. I'm sure it
can be improved:

https://github.com/acmorrow/mongo/blob/0062b8bfa0c24812438f4765fa20755fb5f6fc54/site_scons/site_tools/incremental_link.py

The binaries that ld.gold produces seem terribly broken, but perhaps it
will be useful on Windows.

I wonder if .Precious should have a mode where it behaves like this by
default, or if it should take an optional parameter. It seems useful.

On Thu, May 12, 2016 at 12:18 PM, Andrew C. Morrow <
andrew.c.morrow at gmail.com> wrote:

>
> Hi Bill -
>
> I like this suggestion of adding a PreAction to each executable and shared
> library, but I don't want to have to explicitly call .AddPreAction on each
> target.
>
> Can you suggest an easy way to achieve the same effect globally for all
> SharedLibrary and Program targets, without writing a PseudoBuilder? I'm
> fine though with reaching into the existing builders and altering them.
>
> Thanks,
> Andrew
>
> On Sat, Apr 30, 2016 at 4:38 PM, Bill Deegan <bill at baddogconsulting.com>
> wrote:
>
>> Andrew,
>>
>> How about a pre-action to mv the existing file to another name, and then
>> copy it to original name, then incremental link the copy?
>> That should resolve the crashing bit.
>>
>> lsof filename won't help if the files being used on another system, but
>> would if on current system. (to see if in use)
>>
>> -Bill
>>
>> On Sat, Apr 30, 2016 at 3:47 PM, Andrew C. Morrow <
>> andrew.c.morrow at gmail.com> wrote:
>>
>>>
>>> Definitely a possibility. MongoDB probes for compiler support for
>>> ld.gold and prefers it by default:
>>>
>>> https://github.com/mongodb/mongo/blob/master/SConstruct#L2164-L2167
>>>
>>> The downside to using incremental linking and making dynamic targets
>>> Precious is that by overwriting the binaries you end up crashing running
>>> programs that have them mapped. That happens often enough during developer
>>> workflow that it is unfortunate.
>>>
>>> So, it definitely should be opt-in behavior, and a Tool sounds right for
>>> that.
>>>
>>> I also wonder whether such a Tool might be able to make intelligent use
>>> of gold's --incremental-base file to avoid the above problem. If you first
>>> copied the dynamic target aside under a different name, then unlinked the
>>> original, then used --incremental-base pointing to the moved-aside file,
>>> perhaps you could avoid crashing programs that have the target mapped. I'm
>>> not sure though if the cost of the file copy would eat up most of the gains
>>> from incremental linking.
>>>
>>> That sounds complex enough to also warrant a separate Tool.
>>>
>>>
>>> On Fri, Apr 29, 2016 at 1:52 PM, Bill Deegan <bill at baddogconsulting.com>
>>> wrote:
>>>
>>>> Andrew,
>>>>
>>>> Might make sense to make a gold linker tool?
>>>>
>>>> -Bill
>>>>
>>>> On Fri, Apr 29, 2016 at 9:47 AM, Andrew C. Morrow <
>>>> andrew.c.morrow at gmail.com> wrote:
>>>>
>>>>>
>>>>> Thanks Bill -
>>>>>
>>>>> I think that sounds promising, I'll give it a look. If I get it
>>>>> working well I'll ping the list back and describe my findings.
>>>>>
>>>>> Thanks,
>>>>> Andrew
>>>>>
>>>>> On Fri, Apr 29, 2016 at 12:10 PM, Bill Deegan <
>>>>> bill at baddogconsulting.com> wrote:
>>>>>
>>>>>> Andrew,
>>>>>>
>>>>>> Likely you want to stick this logic in the emitter for building
>>>>>> libraries and programs.
>>>>>> SCons/Tool/link.py  shlib_emitter() is the current logic.
>>>>>> The environment tracks this in:
>>>>>> env['SHLIBEMITTER'] which is a list.
>>>>>> So if you append to SHLIBEMITTER and mark the relevant nodes
>>>>>> Precious()
>>>>>> env['PROGEMITTER'] is the emitter for programs. Looks like it's only
>>>>>> defined for mslink and qt, so you can defined one on non qt/mslink freely
>>>>>> and do the same.
>>>>>>
>>>>>> Hope that helps
>>>>>> -Bill
>>>>>>
>>>>>>
>>>>>> On Fri, Apr 29, 2016 at 8:52 AM, William Blevins <
>>>>>> wblevins001 at gmail.com> wrote:
>>>>>>
>>>>>>> Andrew,
>>>>>>>
>>>>>>> I expect that you could make a Pseudo-Builder that wraps Program and
>>>>>>> Library calls, and replace the top-level calls with your wrappers.
>>>>>>>
>>>>>>> I think you can replace them like env['BUILDERS']['xxxxxx'] =
>>>>>>> Wrapper or env.AddMethod but I haven't tested this explicitly.
>>>>>>>
>>>>>>> https://bitbucket.org/scons/scons/wiki/ToolsForFools
>>>>>>>
>>>>>>> V/R,
>>>>>>> William
>>>>>>>
>>>>>>> On Fri, Apr 29, 2016 at 4:21 PM, Andrew C. Morrow <
>>>>>>> andrew.c.morrow at gmail.com> wrote:
>>>>>>>
>>>>>>>>
>>>>>>>> Hi -
>>>>>>>>
>>>>>>>> Is there a simple way to do this? I'd like to use ld.gold's
>>>>>>>> incremental linking, but I don't want to need to add .Precious to every
>>>>>>>> executable and library in my project.
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>> Andrew
>>>>>>>>
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> Scons-users mailing list
>>>>>>>> Scons-users at scons.org
>>>>>>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Scons-users mailing list
>>>>>>> Scons-users at scons.org
>>>>>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> Scons-users mailing list
>>>>>> Scons-users at scons.org
>>>>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>>>>
>>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Scons-users mailing list
>>>>> Scons-users at scons.org
>>>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> Scons-users mailing list
>>>> Scons-users at scons.org
>>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>>
>>>>
>>>
>>> _______________________________________________
>>> Scons-users mailing list
>>> Scons-users at scons.org
>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>
>>>
>>
>> _______________________________________________
>> Scons-users mailing list
>> Scons-users at scons.org
>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://pairlist4.pair.net/pipermail/scons-users/attachments/20160512/973f5d31/attachment.html>


More information about the Scons-users mailing list