Re: 回复: Ninja compilation fa ils after using include path file instead of "-I" op tion
Daniel Moody <[email protected]>
| Newsgroups | gmane.comp.programming.tools.scons.user |
|---|---|
| Message-ID | <CANws3JQOEb1OqALAvO07z5Dkjn6Fh6=+VnmyyLr6eDs=wpN42w@mail.gmail.com> |
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 <[email protected]> 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" <[email protected]>; > *发送时间:* 2022年4月10日(星期天) 中午11:11 > *收件人:* "Daniel Moody"<[email protected]>; > *抄送:* "SCons users mailing list"<[email protected]>; > *主题:* 回复: [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" <[email protected]>; > *发送时间:* 2022年4月10日(星期天) 上午10:56 > *收件人:* "SCons users mailing list"<[email protected]>; > *抄送:* "liruncong2018"<[email protected]>; > *主题:* 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 < > [email protected]> 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" <[email protected]>; >> *发送时间:* 2022年4月10日(星期天) 凌晨2:31 >> *收件人:* "SCons users mailing list"<[email protected]>; >> *主题:* 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 <[email protected]> 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 < >>> [email protected]> 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 >>>> [email protected] >>>> https://pairlist4.pair.net/mailman/listinfo/scons-users >>>> >>> _______________________________________________ >>> Scons-users mailing list >>> [email protected] >>> https://pairlist4.pair.net/mailman/listinfo/scons-users >>> >> _______________________________________________ >> Scons-users mailing list >> [email protected] >> https://pairlist4.pair.net/mailman/listinfo/scons-users >> > _______________________________________________ Scons-users mailing list [email protected] https://pairlist4.pair.net/mailman/listinfo/scons-users