[Scons-users] 回复: Ninja compilation fails after using include path file instead of "-I" option

Daniel Moody dmoody256 at gmail.com
Sun Apr 10 02:14:20 EDT 2022


just to clarify:

you will need to use the @__cpp_path.txt file conditionally if ninja is not
in use

On Sun, Apr 10, 2022 at 1:12 AM Daniel Moody <dmoody256 at gmail.com> wrote:

> I see, I didn't realize you were sharing the file.
>
> The ninja tool will always use response files for the C/C++ related tools,
> so in this case you will need to use the tempfile conditionally if ninja is
> not in use. We have a line item to make response files conditional for
> ninja in this issue: https://github.com/SCons/scons/issues/3929 but it is
> not yet implemented.
>
> Using a shared response file could be an integrated feature for scons, but
> TEMPFILE is not meant for that use case. For now, a shared response file
> will need to be done manually on the command line like you are doing.
>
> On Sat, Apr 9, 2022 at 10:13 PM liruncong2018 <liruncong2018 at qq.com>
> wrote:
>
>> Hello Daniel Moody,
>> The difference is that when "@file" is used, a temporary file is shared
>> at compile time. When using "TEMPFILE", each compile command creates a
>> temporary file, which in my case resulted in thousands of temporary files.
>> After canceling the MAXLINELENGTH setting, there is no time change, it is
>> still 3 minutes longer than using "@file".
>>
>>
>> ------------------ 原始邮件 ------------------
>> *发件人:* "liruncong2018" <liruncong2018 at qq.com>;
>> *发送时间:* 2022年4月10日(星期天) 中午11:11
>> *收件人:* "Daniel Moody"<dmoody256 at gmail.com>;
>> *抄送:* "SCons users mailing list"<scons-users at scons.org>;
>> *主题:* 回复: [Scons-users] 回复: Ninja compilation fails after using include
>> path file instead of "-I" option
>>
>> Hello Daniel Moody,
>> The difference is that when "@file" is used, a temporary file is shared
>> at compile time. When using "TEMPFILE", each compile command creates a
>> temporary file, which in my case resulted in thousands of temporary files.
>>
>>
>> ------------------ 原始邮件 ------------------
>> *发件人:* "Daniel Moody" <dmoody256 at gmail.com>;
>> *发送时间:* 2022年4月10日(星期天) 上午10:56
>> *收件人:* "SCons users mailing list"<scons-users at scons.org>;
>> *抄送:* "liruncong2018"<liruncong2018 at qq.com>;
>> *主题:* Re: [Scons-users] 回复: Ninja compilation fails after using include
>> path file instead of "-I" option
>>
>> liruncong,
>>
>> Using @file also means temporary files are in use, so there is no
>> difference in terms of temporary files.
>>
>> In my diff, I included several statements meant for debugging and example
>> demonstration, for example setting the maxlinelength. SCons will detect
>> this automatically and you should not set it under normal circumstances.
>> Also I set the tempfile to be verbose, but it is not needed. SCons will
>> only use temporary files if it is needed, so there's not really another
>> option, if the temporary file is not used, the compilation will fail.
>> Please make sure you are not setting the maxlinelength.
>>
>>
>> On Sat, Apr 9, 2022 at 8:30 PM liruncong2018 via Scons-users <
>> scons-users at scons.org> wrote:
>>
>>> The "TEMPFILE" function should be improved to improve compilation
>>> efficiency. At present, we have tested our actual project and changed
>>> "@file" to "TEMPFILE". When ninja is not enabled, the compilation time
>>> (j32) is increased from 3:45 to 6:30. The duration has increased by almost
>>> 3 minutes, which should be related to the massive creation of temporary
>>> files. If put "-o $TARGET" and "$SOURCE" directly on the command line
>>> without writing temporary files, the number of temporary files generated in
>>> large numbers can be as few as 2~3.
>>>
>>>
>>> ------------------ 原始邮件 ------------------
>>> *发件人:* "SCons users mailing list" <bill at baddogconsulting.com>;
>>> *发送时间:* 2022年4月10日(星期天) 凌晨2:31
>>> *收件人:* "SCons users mailing list"<scons-users at scons.org>;
>>> *主题:* Re: [Scons-users] Ninja compilation fails after using include
>>> path file instead of "-I" option
>>>
>>> Daniel,
>>>
>>> Is it likely we should define TEMPFILE for mingw as we do for win32?
>>>
>>> -Bill
>>>
>>> On Sat, Apr 9, 2022 at 12:39 AM Daniel Moody <dmoody256 at gmail.com>
>>> wrote:
>>>
>>>> hello liruncong,
>>>>
>>>> You can not directly use the @ response file syntax with ninja, you
>>>> should instead use SCons internal feature for this, TEMPFILE, as the ninja
>>>> tool will know how to process that.
>>>>
>>>> TEMPFILE is meant to be substituted in the full command line, here is
>>>> an example how to make your CC compile commands use the tempfile:
>>>>
>>>> env['_RT_CCCOM'] = env['CCCOM']
>>>> env['CCCOM'] = "${TEMPFILE('$_RT_CCCOM', '$CCCOMSTR')}"
>>>>
>>>> Here is a diff of your project where I am using the response file in
>>>> scons and it works with ninja:
>>>>
>>>> diff --git a/bsp/beaglebone/SConstruct b/bsp/beaglebone/SConstruct
>>>> index e9eceb553..01c27a83f 100644
>>>> --- a/bsp/beaglebone/SConstruct
>>>> +++ b/bsp/beaglebone/SConstruct
>>>> @@ -56,8 +56,26 @@ def GenIncPathsFile(env, objs):
>>>>      env.Depends(objs, [incPathsFile])
>>>>      return incPathsFile
>>>>
>>>> -incPathsFile = GenIncPathsFile(env, objs)
>>>> -env["_CPPINCFLAGS"] = "@%s" % (incPathsFile)
>>>> +env['_RT_CCCOM'] = env['CCCOM']
>>>> +env['CCCOM'] = "${TEMPFILE('$_RT_CCCOM', '$CCCOMSTR')}"
>>>> +
>>>> +# This is only to see the output command using the response file if
>>>> building with scons
>>>> +env['CCCOMSTR'] = None
>>>> +
>>>> +# My system did not hit the limit in order to use response file,
>>>> +# so I had to force it to make sure
>>>> +# I could see the response files in use by scons
>>>> +env['MAXLINELENGTH'] = 10
>>>> +
>>>> +# This function make the response file use the correct slash for mingw
>>>> +from SCons.Subst import quote_spaces
>>>> +def tempfile_arg_esc_func(arg):
>>>> +    arg = quote_spaces(arg)
>>>> +    return arg.replace('\\', '/')
>>>> +env["TEMPFILEARGESCFUNC"] = tempfile_arg_esc_func
>>>> +
>>>> +#incPathsFile = GenIncPathsFile(env, objs)
>>>> +#env["_CPPINCFLAGS"] = "@%s" % (incPathsFile)
>>>>
>>>>  # make a building
>>>>  DoBuilding(TARGET, objs)
>>>>
>>>>
>>>>
>>>> On Fri, Apr 8, 2022 at 7:23 PM liruncong2018 via Scons-users <
>>>> scons-users at scons.org> wrote:
>>>>
>>>>> git repository: https://github.com/liruncong/NinJaTest.git bsp:
>>>>> beaglebone
>>>>> mingw:
>>>>> https://download-sh-cmcc.rt-thread.org:9151/www/aozima/env_released_1%20.2.0.7z gcc
>>>>> position : env\tools\gnu_gcc\arm_gcc\mingw\bin
>>>>> python: 3.8.5(anaconda)
>>>>> platform: win11
>>>>> scons: https://github.com/SCons/scons.git
>>>>>
>>>>> Directly using the "scons" command can compile successfully, but using
>>>>> "scons --experimental=ninja" will fail to compile. Ninja compilation
>>>>> fails after using include path file instead of "-I" option · Issue #4130 ·
>>>>> SCons/scons (github.com) <https://github.com/SCons/scons/issues/4130>
>>>>>
>>>>> Due to the length limit of the windows command line, in our actual
>>>>> project, the command will exceed the length limit of the windows command
>>>>> line, so this test case uses the "@file <https://github.com/file>"
>>>>> option.
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> 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/20220410/872e5710/attachment-0001.htm>


More information about the Scons-users mailing list