Thank you for the feedback

Kilian, your suggestion makes sense unfortunately I am working with GNU
toolchain so I don't think I will be able to take advantage of it just yet.

Andrew, I have not thought about renaming the libraries, I will give this a
try to see if I can get rid of the duplicate symbols, it seems like it
should work, thank you very much for that suggestion.

Thank you
xp

On Thu, May 26, 2022 at 12:11 AM Andrew Fish via groups.io <afish=
apple....@groups.io> wrote:

> In edk2 speak Base just means does not depend on any phase of boot, so
> basically standalone code. So you can pull a Base lib into SEC, PEI, DXE,
> SMM, etc.
>
> We never interned different Class Names for libs to map to the same
> library class when we designed the build system.
>
> One of the driving factors for the library classes was to not have to
> change your vendors driver INF file id you wanted to use a different
> instance of the DebugLib etc.
>
> Thanks,
>
> Andrew Fish
>
> > On May 25, 2022, at 9:07 PM, Ethin Probst <harlydavid...@gmail.com>
> wrote:
> >
> > aren't the Base*Libs there in case you want to override existing
> implementations or implement custom versions of them? I'm pretty sure
> that's the logic behind it -- its a hack of sorts to try to get OOP out of
> a purely procedural language. It works, but I don't think its necessarily
> ideal. But there really isn't much of an alternative. Then again, I might
> be wrong, too...
> >
> > On 5/25/22 23:04, Andrew Fish via groups.io wrote:
> >>> On May 25, 2022, at 9:23 AM, M.T. <xzavierpo...@gmail.com <mailto:
> xzavierpo...@gmail.com>> wrote:
> >>>
> >>> Hello
> >>>
> >>> I'm working on a small UEFI shell app.
> >>> I was hoping to make use of the JsonLib found in the Redfish Package.
> >>>
> >>> When I include the Redfish JsonLib and it's dependencies:
> >>> JsonLib|RedfishPkg/Library/JsonLib/JsonLib.inf
> >>> Ucs2Utf8Lib|RedfishPkg/Library/BaseUcs2Utf8Lib/BaseUcs2Utf8Lib.inf
> >>> RedfishCrtLib|RedfishPkg/PrivateLibrary/RedfishCrtLib/RedfishCrtLib.inf
> >>> BaseSortLib|MdeModulePkg/Library/BaseSortLib/BaseSortLib.inf
> >>>
> >>> BaseSortLib has symbol clashes with SortLib resulting in the following:
> >>>
> >> It looks like BaseSortLib and and SortLib are the same library class so
> you should only have one.
> >> /Volumes/Case/edk2(master)*>*git grep --recurse-submodules SortLib  --
> \*.inf | grep LIBRARY_CLASS
> >> MdeModulePkg/Library/BaseSortLib/BaseSortLib.inf:18:  LIBRARY_CLASS
>                = SortLib
> >> MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf:18:  LIBRARY_CLASS
>                = SortLib|UEFI_APPLICATION UEFI_DRIVER UEFI_DRIVER
> DXE_RUNTIME_DRIVER DXE_DRIVER
> >> /Volumes/Case/edk2(master)*>*git grep --recurse-submodules BaseSortLib
> -- \*.inc
> >>
> RedfishPkg/RedfishLibs.dsc.inc:16:*BaseSortLib*|MdeModulePkg/Library/*BaseSortLib*/*BaseSortLib*.inf
> >> OK bingo bingo bingo….
> >> The way the edk2 works is you have a library class that maps to the
> include file. This is the name in the INF file that resolves linking. You
> can have as many instances of the library class as you like. This is why
> the DSC files have the <library class name>|<path to INF file> syntax as
> you are letting the build pick which instance of the library to use. You
> can control this per driver/app if you want.
> >> It looks to me like BaseSortLib is an alias for SortLib and that is a
> bit of hack.
> >> You could try making sure that BaseSortLib and SortLib point to the
> same library instance
> >> The other option would be to edit RedfishCrtLib.inf and make
> BaseSortLib SortLib
> >> /Volumes/Case/edk2(master)*>*git grep --recurse-submodules BaseSortLib
> -- \*.inf
> >> MdeModulePkg/Library/BaseSortLib/BaseSortLib.inf:13:  BASE_NAME
>                = *BaseSortLib*
> >> MdeModulePkg/Library/BaseSortLib/BaseSortLib.inf:14:  MODULE_UNI_FILE
>                = *BaseSortLib*.uni
> >> MdeModulePkg/Library/BaseSortLib/BaseSortLib.inf:25:*BaseSortLib*.c
> >>
> RedfishPkg/PrivateLibrary/RedfishCrtLib/RedfishCrtLib.inf:28:*BaseSortLib*
> >> I’m note sure why this fake BaseSortLib exists. Looks like we would
> need to ask Abner?
> >> *
> >> *
> >> commit 6e9233f968735219b2038c5dd23a46be2c021807
> >> Author: Abner Chang <abner.ch...@hpe.com <mailto:abner.ch...@hpe.com>>
> >> Date:   Fri Dec 4 12:30:05 2020 +0800
> >>     RedfishPkg/RedfishCrtLib: Redfish C runtime library
> >>     Redfish CRT library is currently used by edk2 JsonLib
> >>     (open source jansson project) and edk2 RedfishLib
> >>     (libredfish open source project). Redfish CrtLib library
> >>     provides the necessary C runtime equivalent edk2 functions
> >>     for open source projects.
> >>     Signed-off-by: Abner Chang <abner.ch...@hpe.com <mailto:
> abner.ch...@hpe.com>>
> >>     Cc: Leif Lindholm <l...@nuviainc.com <mailto:l...@nuviainc.com>>
> >>     Cc: Nickle Wang <nickle.w...@hpe.com <mailto:nickle.w...@hpe.com>>
> >>     Cc: Peter O'Hanley <peter.ohan...@hpe.com <mailto:
> peter.ohan...@hpe.com>>
> >>     Reviewed-by: Nickle Wang <nickle.w...@hpe.com <mailto:
> nickle.w...@hpe.com>>
> >>     Acked-by: Leif Lindholm <l...@nuviainc.com <mailto:
> l...@nuviainc.com>>
> >>     Reviewed-by: Michael D Kinney <michael.d.kin...@intel.com <mailto:
> michael.d.kin...@intel.com>>
> >> *
> >> *
> >> Thanks,
> >> Andrew Fish
> >>> /usr/bin/ld: UefiSortLib.obj (symbol from plugin): in function
> `PerformQuickSort':
> >>> (.text+0x0): multiple definition of `PerformQuickSort';
> BaseSortLib.obj (symbol from plugin):(.text+0x0): first defined here
> >>> /usr/bin/ld: UefiSortLib.obj (symbol from plugin): in function
> `PerformQuickSort':
> >>> (.text+0x0): multiple definition of `DevicePathCompare';
> BaseSortLib.obj (symbol from plugin):(.text+0x0): first defined here
> >>> /usr/bin/ld: UefiSortLib.obj (symbol from plugin): in function
> `PerformQuickSort':
> >>> (.text+0x0): multiple definition of `StringNoCaseCompare';
> BaseSortLib.obj (symbol from plugin):(.text+0x0): first defined here
> >>> /usr/bin/ld: UefiSortLib.obj (symbol from plugin): in function
> `PerformQuickSort':
> >>> (.text+0x0): multiple definition of `StringCompare'; BaseSortLib.obj
> (symbol from plugin):(.text+0x0): first defined here
> >>>
> >>> I need SortLib for UEFIShell dependencies, and I need BaseSortLib for
> JsonLib.
> >>> Is there some way around this?  Or is Redfish meant to be standalone?
> >>>
> >>> Thank you in advance
> >>> xp
> >>
>
>
>
> 
>
>
>


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#90061): https://edk2.groups.io/g/devel/message/90061
Mute This Topic: https://groups.io/mt/91336682/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to