Andrew, the problem with multiple library instances is that this does only work globally and it gets in your way if you need different versions of a dependent library.
In our case, Applications/Drivers only depend on LibC, an LibC then depends on ShellLib which means we'd have to create another LibC instance which depends on another version of ShellLib. In other words: you can't use the same Library with different build options in different drivers built by the same DSC. You'd have to create a renamed .inf with different build options which you can't do because your driver doesn't depend directly on that lib. Thanks Michael On Wed, Jul 6, 2016 at 9:55 PM, Andrew Fish <[email protected]> wrote: > > On Jul 6, 2016, at 12:44 PM, Michael Zimmermann <[email protected]> > wrote: > > Andrew, > > sry for not reasing the Shell Spec but I think you can answer this faster. > Does the Spec prevent implementing such a 'pure-EFI' fallback by default > so we can use the same ShellLib globally? > > > Michael, > > If I remember correctly the Shell Spec specifies how the shell functions > and what protocols it produces that other code can depend on. > > and follow-up question: Libraries are not compiled multiple times right? > so If I would specify additional CFLAGs these would only be used to build > your package and not for the libraríes you are using right? > > > The edk2 has the concept of library instances. The DSC file for the > platform picks the instance of the library for the Module Type. Basically > ShellLib.h would be the public API and ShellLib is the library class. The > library class is the public API and it is names in the [Defines] section of > the libraries INF file via LIBRARY_CLASS =. The build system is smart > enough to only build the libraries that are actually being used. > > For example this would be the line in the DSC: > ShellLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf > > And you could change it to: > ShellLib | AltPathToUefiShellLib/AltUefiShellLib.inf > > The upside to all this is the same reason we introduced the concept of > library classes in the 1st place, you can change the behavior of the StdLib > without modifying any of the code in the standard lib. This would be a good > way to experiment and if you get it working I guess it could get added to > the StdLib at some point as an alternate way to build it. > > Thanks, > > Andrew Fish > > If that's correct then we should stay away from changing ShellLib's > behavior using cflags in your DSC because it would prevent building both > shell and efi users of ShellLib with one DSC file. > > Thanks, > Michael > > On Wed, Jul 6, 2016 at 9:25 PM, Andrew Fish <[email protected]> wrote: > >> >> > On Jul 4, 2016, at 11:17 AM, Marvin Häuser <[email protected]> >> wrote: >> > >> > Daryl, Jaben, >> > >> > As you are the package maintainers of StdLib, could you please comment >> on the situation? >> > If modifications to have StdLib working for drivers are welcome, I >> would offer my help in cleaning up the existing stuff and/or write my own >> patches, though of course there is little point if there is no reaction >> from the reviewers. >> > If it is of any interest, I want to write a shim library for Capstone >> and would prefer not to have three copies of Std functions in my tree >> (StdLib, CryptoPkg (SSL) and Capstone), but rather an improved StdLib that >> works for all. >> > >> > Thanks to those who have offered alternative solutions, but I prefer to >> keep it ‚clean‘ and have the libraries shipping with EDK2 work. :) >> > >> >> Marvin, >> >> It looks like the StdLib has a dependency on the ShellLib and >> ShellCEntryLib. One option would be to implement a new instance of the >> ShellLib and the ShellCEntryLib that don't depend on the Shell. You can get >> a template of how to do file operations from here: >> https://github.com/tianocore/edk2/blob/master/EmbeddedPkg/Library/EfiFileLib/EfiFileLib.c >> >> You would have a couple of options. You good go with the EfiFileLib >> volume synatax, you could just do pure EFI (unclear how to specify a volume >> (driver letter)). You could also just add code to fallback if you can't >> find the shell protocols to due more pure EFI stuff. That way you don't >> need to modify the StdLib just how you build the StdLib from the DSC. >> >> For example you could implement the functions in the ShellLib that the >> StdLib requires and use something like the EfiFileLib to make it easier. I >> think ShellCEntryLib would just be a copy of >> https://github.com/tianocore/edk2/tree/master/MdePkg/Library/UefiApplicationEntryPoint >> >> Thanks, >> >> Andrew Fish >> >> > Regards, >> > Marvin. >> > >> > From: Michael Zimmermann [mailto:[email protected]] >> > Sent: Thursday, June 23, 2016 5:32 AM >> > To: Marvin Häuser <[email protected]> >> > Cc: [email protected]; [email protected] >> > Subject: Re: [edk2] StdLib usage for drivers? >> > >> > well for the patch to go upstream it would have to get improved a lot. >> > I've tried to implement this in a way that doesn't need a different dsc >> but the problem is that ShellLib's constructor ASSERT's if it can't find >> the shell protocol and removing that would probably be against the spec's. >> > >> > Also it appears that the StdLib maintainers are kinda busy because most >> of the StdLib patches I've sent to this mailing list didn't get reviewed. >> > >> > Thanks >> > Michael >> > >> > On Wed, Jun 22, 2016 at 10:37 PM, Marvin Häuser < >> [email protected]<mailto:[email protected]>> wrote: >> > Hey Michael, >> > >> > Thank you for your input! This looks interesting. >> > Maybe it would be a good idea to provide the libraries that depend on >> Shell (in master) with functions that call ASSERT (FALSE); for drivers? I >> do not need file I/O, so I think your modifications might work out well for >> me. Would be very nice of course if such changes found their way upstream. >> :) >> > >> > And thank you very much for your comment as well, Andrew! It makes >> sense that StdLib is primarily targeted at porting console applications to >> UEFI Shell. >> > >> > Regards, >> > Marvin. >> > >> > From: Michael Zimmermann [mailto:[email protected]<mailto: >> [email protected]>] >> > Sent: Wednesday, June 22, 2016 10:28 PM >> > To: Marvin H?user <[email protected]<mailto: >> [email protected]>> >> > Cc: [email protected]<mailto:[email protected]> >> > Subject: Re: [edk2] StdLib usage for drivers? >> > >> > In my fork of edk2 I've added support for using StdLib without the >> Shell. >> > It's quite hacky(setenv/getenv are stubs, no File IO and maybe other >> things hidden by linker GC and me not using all features). >> > >> > But depending on which StdLib features you need this can work pretty >> good. >> > >> > here's the commit that does the magic: >> > >> https://github.com/efidroid/edk2/commit/bf7a296718486bafaf774ea8bcf187c162c3c167 >> > >> > and this is how you convert a Shell project to a NonShell one: >> > >> https://github.com/efidroid/uefi_apps_EFIDroidUi/commit/23f0fa08108b8f852564fae733c6a7bce62e2070 >> > >> > as you can see it works by using StdLib with different libraries/cflags >> so you have to compile your driver separately if there are other modules >> which need the normal StdLib. >> > >> > Thanks >> > Michael >> > >> > On Wed, Jun 22, 2016 at 9:38 PM, Marvin H?user < >> [email protected]<mailto:[email protected]><mailto: >> [email protected]<mailto:[email protected]>>> wrote: >> > Dear EDK2 developers, >> > >> > For an experimental project, I'm currently attempting to write a >> library wrapper for the disassembler library 'Capstone' in a similar manner >> to CryptoPkg's OpensslLib. As most C libraries, it also depends on the >> standard headers, which are not provided by 'stock' EDK2. My first guess >> has been to use StdLib, though its description states: >> > 'Due to the execution environment built by the StdLib component, >> execution as a UEFI driver can cause system stability issues.' >> > >> > Inspecting OpensslLib I discovered that CryptoPkg deploys its own >> include files for StdLib. Though, from your experience, what are the issues >> with using StdLibPkg with DXE/UEFI drivers? It might be nice to reduce >> duplicate code, though I honestly don't know anything about StdLibPkg and >> its implementation and would be thankful for some insight on that manner. >> > >> > Thank you in advance for your time! >> > >> > Regards, >> > Marvin. >> > _______________________________________________ >> > edk2-devel mailing list >> > [email protected]<mailto:[email protected]><mailto: >> [email protected]<mailto:[email protected]>> >> > https://lists.01.org/mailman/listinfo/edk2-devel >> > >> > _______________________________________________ >> > edk2-devel mailing list >> > [email protected]<mailto:[email protected]> >> > https://lists.01.org/mailman/listinfo/edk2-devel >> > >> > _______________________________________________ >> > edk2-devel mailing list >> > [email protected] >> > https://lists.01.org/mailman/listinfo/edk2-devel >> >> > > _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

