> On Nov 16, 2017, at 1:37 PM, Desimone, Nathaniel L > <nathaniel.l.desim...@intel.com> wrote: > > Hi Liming, > > I chatted with Aaron on the phone today. The VfrCompiler race condition was > discovered using "make -j <n>" (where n > 1). I have filed the bug in > Bugzilla: >
I think there are a few issues like that in BaseTools. We have a parallel makefile and we had to turn off parallelism when calling the BaseTools. In general the edk2 build system fights against "make -j <n>" since the Python build command is trying to do the threading and invoking make in parallel. Given we ported EDK to parallel build, the Python parallel edk2 build is a lot slower than the EDK make parallel build, even when adjusting for the extra work the edk2 does. I even noticed a 1,000,000 calls to regex in Python during the ... phase of the build. I think the correct short term fix may be to put .NOTPARALLEL: in the BaseTools GNUmakefile given it is constructed in a way that it does not support parallelism. Thanks, Andrew Fish > https://bugzilla.tianocore.org/show_bug.cgi?id=786 > > For the ARCH environment variable, we brainstormed two possible new names > HOST_ARCH or BASETOOLS_ARCH. Should I file the ARCH variable request in > Bugzilla as well? > > Thanks, > > Nate > > -----Original Message----- > From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of Gao, > Liming > Sent: Monday, November 13, 2017 5:46 PM > To: Aaron Durbin <adur...@google.com> > Cc: edk2-devel@lists.01.org > Subject: Re: [edk2] EDK2 build issues > > I add my comments. > >> -----Original Message----- >> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of >> Aaron Durbin >> Sent: Tuesday, November 14, 2017 1:38 AM >> To: Gao, Liming <liming....@intel.com> >> Cc: edk2-devel@lists.01.org >> Subject: Re: [edk2] EDK2 build issues >> >> On Sun, Nov 12, 2017 at 7:15 PM, Gao, Liming <liming....@intel.com> wrote: >>> Yes. BaseTools needs some environments. Before build BaseTools, we need to >>> call edkset.sh to setup them. >>> >>> 1. BaseTools Soure tools are compiled in serial instead of parallel. >>> And, VfrCompiler depends on Anltr tool. So, Anltr is required to be >> built first. I agree that this way takes some time to compile >> BaseTools source. I have one proposal to compile C source tools with >> multiple thread. I can share my draft patch. >> >> If the depedencies are correctly met in the makefiles then why are >> they built serially? It sounds like you understand the dependencies so >> why aren't those explicitly noted so one can build in parallel? >> > Seemly, VfrCompiler Makefile doesn't list those dependency clearly. Could you > submit this issue in bugzillar (https://bugzilla.tianocore.org/)? > Besides, do you use make -j option to enable Parallel Execution? I want to > know how to verify it. > >>> 2. BaseTools C source are compiled to the executable files. They run >>> in host machine. Here ARCH is for the executable files those can >> run in host machine. edk2\BaseTools\Source\C\GNUmakefile auto detects ARCH >> based on 'uname -m' command. >> >> ARCH != host is my point. Why are those being conflated? Or are you >> saying edk2 tools define ARCH to be what the host is? >> > Yes. Edk2 BaseTools C source uses it as host arch. I agree ARCH name is too > generic. In your environment, ARCH may be defined for the different purpose. > >>> 3. There are more GCC compiler distribution. We try to use the >>> generic options in GCC tool chain. If you find the option doesn't >>> work >> on your GCC compiler, please report it. And, we also notice >> tools_def.txt is too big to be hard to be maintain. We have one proposal to >> simplify it. I will send this RFC to edk2 community. >>> >>>> -----Original Message----- >>>> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf >>>> Of Aaron Durbin >>>> Sent: Saturday, November 11, 2017 6:27 AM >>>> To: edk2-devel@lists.01.org >>>> Subject: [edk2] EDK2 build issues >>>> >>>> Hello, >>>> >>>> Here are some observations I've encountered trying to utilize edk2 >>>> for certain builds. Part of the problem seems to be with implicit >>>> assumptions in how edk2 is used. I'm trying to build things using >>>> edk2 from a clean enviroment on an automated builder. i.e. there >>>> isn't a workspace that exists on one persons computer for the >>>> lifetime of development. >>>> >>>> 1. BaseTools can't build in parallel. The tests are racey which >>>> result in test failures. Because of this one has to build these in >>>> serial instead of in parallel. >>>> >>>> =========================================================== >>>> =========== >>>> FAIL: testHelp (TianoCompress.Tests) >>>> -------------------------------------------------------------------- >>>> -- >>>> Traceback (most recent call last): >>>> File >>>> "/build/zoombini/tmp/portage/sys-boot/fsp-cnl-9999/work/fsp-cnl- >>>> 9999/Edk2/BaseTools/Tests/TianoCompress.py", >>>> line 34, in testHelp >>>> self.assertTrue(result == 0) >>>> AssertionError: False is not true >>>> >>>> =========================================================== >>>> =========== >>>> FAIL: testRandomDataCycles (TianoCompress.Tests) >>>> -------------------------------------------------------------------- >>>> -- >>>> Traceback (most recent call last): >>>> File >>>> "/build/zoombini/tmp/portage/sys-boot/fsp-cnl-9999/work/fsp-cnl- >>>> 9999/Edk2/BaseTools/Tests/TianoCompress.py", >>>> line 65, in testRandomDataCycles >>>> self.compressionTestCycle(data) >>>> File >>>> "/build/zoombini/tmp/portage/sys-boot/fsp-cnl-9999/work/fsp-cnl- >>>> 9999/Edk2/BaseTools/Tests/TianoCompress.py", >>>> line 44, in compressionTestCycle >>>> self.assertTrue(result == 0) >>>> AssertionError: False is not true >>>> >>>> In addition, it seems compilation even breaks trying to build a parser: >>>> >>>> VfrSyntax.cpp:53:1: error: expected class-name before '{' token {^M >>>> ^ >>>> VfrSyntax.cpp: In constructor 'CVfrDLGLexer::CVfrDLGLexer(DLGFileInput*)': >>>> VfrSyntax.cpp:55:36: error: class 'CVfrDLGLexer' does not have any >>>> field named 'VfrLexer' >>>> CVfrDLGLexer (DLGFileInput *F) : VfrLexer (F) {};^M >>>> ^ >>>> >>>> This just slows down builds needing to things serially. >>>> >>>> 2. It appears the BaseTools uses the ARCH environment variable. I'm >>>> not sure of the origins, but ARCH seems like a complete misnomer for >>>> the *host* you are trying to build tools on -- not the target. >>>> Trying to incorporate edk2 builds into a portage environment >>>> effectively breaks because of this as ARCH refers to target >>>> architecture -- not host builder's ARCH. >>>> >>>> 3. This more of an observation, but the tools definition seems to >>>> make quite the leap on how consistent compilers are of a certain version. >>>> e.g. GCC 4.9 can be built with all kinds of default options that >>>> edk2 implicitly assumes are set based on some distribution's default flags? >>>> And in order to extend toolchain support one needs to create a >>>> series of entries associated with a certain family. Barrier to entry >>>> is pretty high in teasing out where to put things in the ~8000 line >>>> tools_def.template. >>>> >>>> Thanks for the consideration. >>>> >>>> -Aaron >>>> _______________________________________________ >>>> edk2-devel mailing list >>>> edk2-devel@lists.01.org >>>> https://lists.01.org/mailman/listinfo/edk2-devel >> _______________________________________________ >> edk2-devel mailing list >> edk2-devel@lists.01.org >> https://lists.01.org/mailman/listinfo/edk2-devel > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel