Jaben, Sorry to test compile a library just list the library in the [Components] section of the DSC file. MdePkg/MdePkg.dsc is an example of this.
Thanks, Andrew Fish > On Sep 5, 2018, at 11:23 AM, Carsey, Jaben <jaben.car...@intel.com> wrote: > > Aha. So that is very different from a non NULL library when listed in the > components section. The goal is to test compile the library but not use I > think. Is there any way to do that? > > Jaben > > On Sep 5, 2018, at 11:21 AM, Andrew Fish <af...@apple.com > <mailto:af...@apple.com>> wrote: > >> >> >>> On Sep 5, 2018, at 11:05 AM, Carsey, Jaben <jaben.car...@intel.com >>> <mailto:jaben.car...@intel.com>> wrote: >>> >>> But a NULL lib listed in components section shouldn’t be linked in to >>> anything... >>> >> >> Jaben, >> >> A NULL library class means force it to be linked in. >> >> ShellPkg/ShellPkg.dsc:70: # [LibraryClasses.ARM] and NULL mean link this >> library into all ARM images. >> ShellPkg/ShellPkg.dsc:72: >> NULL|ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf >> ShellPkg/ShellPkg.dsc:75: >> NULL|MdePkg/Library/BaseStackCheckLib/BaseStackCheckLib.inf >> ShellPkg/ShellPkg.dsc:78: >> NULL|ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf >> ShellPkg/ShellPkg.dsc:110: >> NULL|ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.inf >> ShellPkg/ShellPkg.dsc:111: >> NULL|ShellPkg/Library/UefiShellLevel1CommandsLib/UefiShellLevel1CommandsLib.inf >> ShellPkg/ShellPkg.dsc:112: >> NULL|ShellPkg/Library/UefiShellLevel3CommandsLib/UefiShellLevel3CommandsLib.inf >> ShellPkg/ShellPkg.dsc:114: >> NULL|ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.inf >> ShellPkg/ShellPkg.dsc:115: >> NULL|ShellPkg/Library/UefiShellInstall1CommandsLib/UefiShellInstall1CommandsLib.inf >> ShellPkg/ShellPkg.dsc:116: >> NULL|ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.inf >> ShellPkg/ShellPkg.dsc:117: >> NULL|ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1CommandsLib.inf >> ShellPkg/ShellPkg.dsc:118: >> NULL|ShellPkg/Library/UefiShellNetwork2CommandsLib/UefiShellNetwork2CommandsLib.inf >> >> Libraries can get pulled in via other libraries. The only way to tell for >> sure is to look at the build report. >> >> $ build -p ShellPkg/ShellPkg.dec -a X64 -t XCODE5 --report-file=report.txt >> $ cat report.txt | grep HobLib >> /Volumes/Case/UDK2018/MdePkg/Library/DxeHobLib/DxeHobLib.inf >> {HobLib: C = HobLibConstructor Time = 19ms} >> >> You can comment out the HobLib reference in the ShellPkg.dsc file and figure >> out who is using it "#### ffHobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf" >> $ build -p ShellPkg/ShellPkg.dec -a X64 -t XCODE5 --report-file=report.txt >> ... >> build.py... >> /Volumes/Case/UDK2018/ShellPkg/ShellPkg.dsc(...): error 4000: Instance of >> library class [HobLib] is not found >> in >> [/Volumes/Case/UDK2018/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf] >> [X64] >> consumed by module >> [/Volumes/Case/UDK2018/ShellPkg/Application/Shell/Shell.inf] >> >> Thanks, >> >> Andrew Fish >> >>> Unless is listed below with the shell INF also, it just test compiles it... >>> >>> Or so I thought. >>> >>> On Sep 5, 2018, at 11:04 AM, Andrew Fish <af...@apple.com >>> <mailto:af...@apple.com>> wrote: >>> >>>> >>>> >>>>> On Sep 5, 2018, at 10:30 AM, Carsey, Jaben <jaben.car...@intel.com >>>>> <mailto:jaben.car...@intel.com>> wrote: >>>>> >>>>> How does removing a lib from the components section affect the shell >>>>> binary output? >>>>> >>>>> Is the asset at compile time? >>>> >>>> Jaben, >>>> >>>> The issue is likely with the HOB lib constructor in the Shell iASSERTing. >>>> Leif's example platform supports UEFI, but not PI so it is not expected >>>> that HOBs exist. >>>> >>>> The library has an explicit assumption that HOBs exist, and that is not >>>> the case in Leif's platform. >>>> >>>> https://github.com/tianocore/edk2/blob/master/MdePkg/Library/DxeHobLib/HobLib.c#L54 >>>> >>>> <https://github.com/tianocore/edk2/blob/master/MdePkg/Library/DxeHobLib/HobLib.c#L54> >>>> >>>> >>>> VOID *mHobList = >>>> NULL; >>>> >>>> >>>> /** >>>> >>>> Returns the pointer to the HOB list. >>>> >>>> >>>> This function returns the pointer to first HOB in the list. >>>> >>>> For PEI phase, the PEI service GetHobList() can be used to retrieve the >>>> pointer >>>> >>>> to the HOB list. For the DXE phase, the HOB list pointer can be retrieved >>>> through >>>> >>>> the EFI System Table by looking up theHOB list GUID in the System >>>> Configuration Table. >>>> >>>> Since the System Configuration Table does not exist that the time the DXE >>>> Core is >>>> >>>> launched, the DXE Core uses a global variable from the DXE Core Entry >>>> Point Library >>>> >>>> to manage the pointer to the HOB list. >>>> >>>> >>>> If the pointer to the HOB list is NULL, then ASSERT(). >>>> >>>> >>>> This function also caches the pointer to the HOB list retrieved. >>>> >>>> >>>> @return The pointer to the HOB list. >>>> >>>> >>>> **/ >>>> >>>> VOID * >>>> >>>> EFIAPI >>>> >>>> GetHobList ( >>>> >>>> VOID >>>> >>>> ) >>>> >>>> { >>>> >>>> EFI_STATUS Status; >>>> >>>> >>>> if (mHobList == >>>> NULL) { >>>> >>>> Status = >>>> EfiGetSystemConfigurationTable (&gEfiHobListGuid, &mHobList); >>>> >>>> ASSERT_EFI_ERROR (Status); >>>> >>>> ASSERT (mHobList != >>>> NULL); >>>> >>>> } >>>> >>>> return mHobList; >>>> >>>> } >>>> >>>> >>>> /** >>>> >>>> The constructor function caches the pointer to HOB list by calling >>>> GetHobList() >>>> >>>> and will always return EFI_SUCCESS. >>>> >>>> >>>> @param ImageHandle The firmware allocated handle for the EFI image. >>>> >>>> @param SystemTable A pointer to the EFI System Table. >>>> >>>> >>>> @retval EFI_SUCCESS The constructor successfully gets HobList. >>>> >>>> >>>> **/ >>>> >>>> EFI_STATUS >>>> >>>> EFIAPI >>>> >>>> HobLibConstructor ( >>>> >>>> IN EFI_HANDLE ImageHandle, >>>> >>>> IN EFI_SYSTEM_TABLE *SystemTable >>>> >>>> ) >>>> >>>> { >>>> >>>> GetHobList (); >>>> >>>> >>>> return EFI_SUCCESS; >>>> >>>> } >>>> >>>> >>>> >>>> /** >>>> >>>> Returns the next instance of a HOB type from the starting HOB. >>>> >>>> >>>> This function searches the first instance of a HOB type from the starting >>>> HOB pointer. >>>> >>>> If there does not exist such HOB type from the starting HOB pointer, it >>>> will return NULL. >>>> >>>> In contrast with macro GET_NEXT_HOB(), this function does not skip the >>>> starting HOB pointer >>>> >>>> unconditionally: it returns HobStart back if HobStart itself meets the >>>> requirement; >>>> >>>> caller is required to use GET_NEXT_HOB() if it wishes to skip current >>>> HobStart. >>>> >>>> >>>> If HobStart is NULL, then ASSERT(). >>>> >>>> >>>> @param Type The HOB type to return. >>>> >>>> @param HobStart The starting HOB pointer to search from. >>>> >>>> >>>> @return The next instance of a HOB type from the starting HOB. >>>> >>>> >>>> **/ >>>> >>>> VOID * >>>> >>>> EFIAPI >>>> >>>> GetNextHob ( >>>> >>>> IN UINT16 Type, >>>> >>>> IN CONST VOID *HobStart >>>> >>>> ) >>>> >>>> { >>>> >>>> EFI_PEI_HOB_POINTERS Hob; >>>> >>>> >>>> ASSERT (HobStart != >>>> NULL); >>>> >>>> >>>> Hob.Raw = (UINT8 *) HobStart; >>>> >>>> // >>>> >>>> // Parse the HOB list until end of list or matching type is found. >>>> >>>> // >>>> >>>> while (!END_OF_HOB_LIST (Hob)) { >>>> >>>> if (Hob.Header->HobType == Type) { >>>> >>>> return Hob.Raw; >>>> >>>> } >>>> >>>> Hob.Raw = >>>> GET_NEXT_HOB (Hob); >>>> >>>> } >>>> >>>> return >>>> NULL; >>>> >>>> } >>>> >>>> Thanks, >>>> >>>> Andrew Fish >>>> >>>>> >>>>> Jaben >>>>> >>>>>> On Sep 5, 2018, at 10:26 AM, Leif Lindholm <leif.lindh...@linaro.org >>>>>> <mailto:leif.lindh...@linaro.org>> wrote: >>>>>> >>>>>> Hi all, >>>>>> >>>>>> (This is partly a summary of discussions that have been held on IRC >>>>>> and offline, with Alex Graf and Mike Kinney.) >>>>>> >>>>>> The UEFI Shell, as produced by the contents of ShellPkg, is needed for >>>>>> running the UEFI SCT. This has never been problematic before - but now >>>>>> we are starting to run SCT on the U-Boot implementation of the UEFI >>>>>> interfaces, certain implicit assumptions may need to be made explicit, >>>>>> and perhaps reevaluated. >>>>>> >>>>>> My feeling is the following: >>>>>> - The MinUefiShell variant should be sufficient to run SCT. >>>>>> - The UEFI Shell as provided by ShellPkg (any flavour) should run on >>>>>> any valid UEFI implementation. Where underlying functionality is >>>>>> missing for certain commands, those commands should be >>>>>> degraded/disabled to let remaining commands function. >>>>>> >>>>>> Ideally, I would like to see a Readme.md in ShellPkg, basically >>>>>> providing a mission statement. I could write one, but I expect the >>>>>> people who actually maintain it would be better suited :) >>>>>> >>>>>> We currently have an issue with running the shell on U-Boot because >>>>>> even MinUefiShell pulls in UefiShellDebug1CommandsLib.inf. This >>>>>> appears to be inadvertent, since it is also included a few lines >>>>>> further down inside an !ifndef $(NO_SHELL_PROFILES) guard. >>>>>> So I would propose the following patch (and can send it out properly >>>>>> if the maintainers agree): >>>>>> >>>>>> diff --git a/ShellPkg/ShellPkg.dsc b/ShellPkg/ShellPkg.dsc >>>>>> index 59dd07e0ae..c852abd3f7 100644 >>>>>> --- a/ShellPkg/ShellPkg.dsc >>>>>> +++ b/ShellPkg/ShellPkg.dsc >>>>>> @@ -101,7 +101,6 @@ [Components] >>>>>> >>>>>> ShellPkg/Library/UefiShellLevel3CommandsLib/UefiShellLevel3CommandsLib.inf >>>>>> >>>>>> ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.inf >>>>>> >>>>>> ShellPkg/Library/UefiShellInstall1CommandsLib/UefiShellInstall1CommandsLib.inf >>>>>> - >>>>>> ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.inf >>>>>> >>>>>> ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1CommandsLib.inf >>>>>> >>>>>> ShellPkg/Library/UefiShellNetwork2CommandsLib/UefiShellNetwork2CommandsLib.inf >>>>>> >>>>>> The reason this causes a problem is because this module has a >>>>>> dependency on HobLib, which ASSERTS if it does not find any HOBs lying >>>>>> around. Since HOBs are a PI concept rather than a UEFI concept, >>>>>> ideally we would not terminate the shell if they are missing. However, >>>>>> since the HobLib is generic to EDK2, we also shouldn't just go >>>>>> stripping ASSERTs out of it. The above patch gives us a way of >>>>>> unblocking the SCT on U-Boot UEFI while we consider what to do about >>>>>> the bigger question. >>>>>> >>>>>> Thoughts? >>>>>> >>>>>> / >>>>>> Leif >>>> >> _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel