Leif: Right. Current VfrCompiler supports the limited C syntax. Many C syntax are not recognized. So, you will meet with the below build error. For this change, I agree to share the definition between C and VFR source files. The temp solution is to use #ifndef VFRCOMPILE around the definition. The long term solution is to enhance VfrCompiler tool to recognize more C syntax so that C and VFR can share more definitions. For long term solution, you can submit feature request in bugzillia to catch it first.
Thanks Liming > -----Original Message----- > From: Leif Lindholm [mailto:[email protected]] > Sent: Friday, December 15, 2017 1:00 AM > To: Ni, Ruiyu <[email protected]> > Cc: [email protected]; Kinney, Michael D <[email protected]>; > Dong, Eric <[email protected]>; Zeng, Star > <[email protected]>; Gao, Liming <[email protected]>; Ard Biesheuvel > <[email protected]> > Subject: Re: [edk2] [PATCH 1/3] MdePkg: break #defines out of > Uefi/UefiMultiPhase.h > > On Thu, Dec 14, 2017 at 12:03:56PM +0000, Leif Lindholm wrote: > > On Thu, Dec 14, 2017 at 10:44:04AM +0800, Ni, Ruiyu wrote: > > > Can we just move the definitions to UefiBaseTypes.h? > > > > There is nothing in UefiBaseTypes.h that is fundamentally easier to > > deal with than what is in UefiMultiPhase.h to begin with. > > > > > Even vfrcompiler still complains, the syntax enhancement to > > > vfrcompiler should be simple. > > > > It's (probably) not VfrCompile that would need to change. > > The problem is that the build runs the C preprocessor on the .vfr > > source files before passing them to VfrCompile. #defines that just > > replace text work fine, but typedefs and struct definitions make no > > sense in vfr source. > > > > It runs the preprocessor in C mode (for gpp, -x c) which means we > > cannot use __ASSEMBLER__ to filter out typedefs and struct > > definitions. > > > > We could perhaps switch to -x assembler-with-cpp (and filter > > UefiMultiPhase.h on __ASSEMBLER__), like we do for DTC. > > It _seems_ to work in my test, but I do not know what a corresponding > > change for VS would be. > > Well, this turns out to be unworkable anyway, since the affected > .vfr source files depend on certain typedefs and struct definitions. > I was under the misconception that only #defines were used in .vfr. > > So, yes, the better solution would be to teach VfrCompile to > understand enums and other things, but I wouldn't really know where to > start (and I'm about to disappear for a month). > > Symptoms when building MdeModulePkg DriverSampleDxe with > UefiMultiPhase.h include > > ERROR 12288: EFI_GUID > : undefined > ERROR 12288: enum > : unexpected token > > If I then add UefiBaseTypes.h, we insted have issues from the > inclusion of ProcessorBind.h: > > ERROR 12288: unsigned > : unexpected token > ERROR 12288: long > : unexpected token > > and so on. > > An alternative less invasive solution, which would avoid adding new > files, would be to add #ifndef VFRCOMPILE around everything other > than the EFI_VARIABLE_* #defines in UefiMultiPhase.h. > > Would you be happier with that as a temporary measure until someone > gets around to looking at VfrCompile? > > / > Leif _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

