On Jan 31, 2013, at 2:01 PM, "David F." <[email protected]> wrote:
> Andrew, Thanks. I think I get it, another way to say it would be the PCD
> replaces the #ifdef and #defines, replacing #if with compile time conditional
> builds (though compiler optimizations) that prevent code rot and #defines
> (and perhaps static const int var= which in c++ or other compilers may be
> treated as #defines) with memory space that is patchable in binaries? And
> the 1-4 view is how you define those variables to use.
>
> Also, notice most things reference C - I presume one could get C++ code
> (without exception handling) to work okay (change new/delete to malloc/free)
> similar to how I set it up so I can code the Windows DDK using C++?
>
Well back to that history of paranoia... We don't include any outside libs,
even the ones needed to make the compilers work. We don't have C++ support,
since C++ in the hands of a novice programmer is a dangerous weapon. But folks
have discussed in the past about getting an embedded subset of C++ working, so
I'm sure it is possible.
I think you may find the C++ compiler may generate calls to intrinsics that you
may have to provide. We have generally avoid providing these functions for C to
make it easier to port new compilers (so no initing structures with = or doing
64-bit math without lib functions) but we hit the breaking point when we ported
to ARM. It seems some ARM processor don't have a divide instruction, so we
ended up adding a compiler intrinsic lib for ARM that supports RVCT and GCC.
You can do something similar. You can use the NULL library class to force a
library to link with your modules. The following example is the ARM compiler
intrinsic lib statement that ends up in DSC files:
[LibraryClasses.ARM]
NULL|ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf
Also since we don't use any system include files you have to make sure that
what every basic C++ header files you use make sense for this environment.
Thanks,
Andrew
> Thanks again.
>
>
>
> On Thu, Jan 31, 2013 at 1:21 PM, Andrew Fish <[email protected]> wrote:
>
> On Jan 31, 2013, at 12:05 PM, "David F." <[email protected]> wrote:
>
>> Thanks Mike. That leads me to the next point of confusion. Is the purpose
>> of the Platform Configuration Database (PCD) to share variables across
>> drivers, applications, and/or whatever is launching an app or driver; or is
>> it just a method the build system offers for you to define variables in a
>> configuration file instead of a .h header file?
>>
>
>
> There were a couple of requirements for the edk2 that ended up turning into
> PCD.
> 1) Config knobs for a driver need to be configurable by the platform so that
> they could be setup options (Hii), or constants, or SKU defined, programmed
> in the factory (VPD), etc.
> 2) We needed a mechanism to support patching config values into a binary, and
> a runtime mechanism to configure a binary module.
>
> Both Mike and I hated code bases with large numbers of #ifdefs to turn stuff
> on and off because in our experience code will rot out in some of the #ifdef
> paths and make the entire thing very hard to maintain.
> It was also the vision that chip vendors would provide a package(s) of code
> to the platform vendor. If a chip vendor had a large number of config knobs
> for validation or just end customer configuration we wanted the person
> building the platform to be able to set the config knobs to what made sense
> to that platform. We also wanted to minimize the changes that the platform
> vendor would have to make to the chip vendors code, so syncing up with future
> code drops would be easier.
>
> I'm sorry that the terminology for PCD can get confusing and I think its
> partly my fault. Here is my 10,000 foot view cheat sheet for how to
> use/conceptualize PCD:
> 1) .DEC file - is the definition of the PCD entry. You get the pick the legal
> forms, and default values for a PCD. When in doubt make it as flexible as
> possible [PcdsFixedAtBuild, PcdsPatchableInModule, PcdsDynamic,
> PcdsDynamicEx].
> 2) .INF file - The PCD settings in the INF represent how the module was
> coded. When in doubt use the generic form [Pcd] with PcdGet32() , and
> [FeaturePcd] with FeaturePcdGet().
> 3) .DSC file - Within the constraints of how the PCD was defined and used in
> modules you get to pick the form of the PCD for this specific build and set
> values.
> 4) Ex - The Ex versions of the APIs include the GUID. These are only needed
> for binaries or modules not built together. Each build will generate a unique
> token space that the code uses, and this is to save space.
>
> There are some other advantages to PCDs over h files. Since in any given
> build a library is only built one time you can use FixedAtBuild PCD values to
> have different settings on a per module basis for the library. So for example
> you can pick a single driver to have very verbose DEBUG macro output while
> the reset of the system is less verbose.
>
> Thanks,
>
> Andrew Fish
>
> PS. Our dislike of lots of #ifdefs is why we ended up with FeaturePcdGet().
> This lets you have an #ifdefs like construct where both sides always compile
> so code never rots out. As long as you compiler does a good job dead
> stripping you don't pay a size penalty in the binary.
>
> ------------------------------------------------------------------------------
> Everyone hates slow websites. So do we.
> Make your web apps faster with AppDynamics
> Download AppDynamics Lite for free today:
> http://p.sf.net/sfu/appdyn_d2d_jan
> _______________________________________________
> edk2-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/edk2-devel
>
>
> ------------------------------------------------------------------------------
> Everyone hates slow websites. So do we.
> Make your web apps faster with AppDynamics
> Download AppDynamics Lite for free today:
> http://p.sf.net/sfu/appdyn_d2d_jan_______________________________________________
> edk2-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/edk2-devel
------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_jan
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel