## @file
#  RedfishLib Library implementation.
#
#  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
#  (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
#  Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
#
#    SPDX-License-Identifier: BSD-2-Clause-Patent
#
##

[Defines]
  INF_VERSION                    = 0x0001001b
  BASE_NAME                      = DxeRedfishLib
  FILE_GUID                      = 9C2CA9CF-4F79-11E8-A7D1-8CDCD426C973
  MODULE_TYPE                    = DXE_DRIVER
  VERSION_STRING                 = 1.0
  LIBRARY_CLASS                  = RedfishLib| DXE_DRIVER UEFI_APPLICATION UEFI_DRIVER

#
#  VALID_ARCHITECTURES           = IA32 X64 ARM AARCH64 RISCV64
#

[Sources]
  edk2libredfish/src/redpath.c
  edk2libredfish/src/service.c
  edk2libredfish/src/payload.c
  edk2libredfish/include/redfish.h
  edk2libredfish/include/redfishPayload.h
  edk2libredfish/include/redfishService.h
  edk2libredfish/include/redpath.h
  RedfishLib.c
  RedfishMisc.h
  RedfishMisc.c

[Packages]
  MdePkg/MdePkg.dec
  MdeModulePkg/MdeModulePkg.dec
  NetworkPkg/NetworkPkg.dec
  RedfishPkg/RedfishPkg.dec

[LibraryClasses]
  BaseLib
  BaseMemoryLib
  DebugLib
  JsonLib
  HttpLib
  MemoryAllocationLib
  NetLib
  RedfishContentCodingLib
  RedfishCrtLib
  UefiBootServicesTableLib
  UefiLib

[Protocols]
  gEfiRestExServiceBindingProtocolGuid  ## Consumed
  gEfiRestExProtocolGuid                ## Consumed
  gEdkIIRedfishCredentialProtocolGuid   ## Consumed

[BuildOptions]
  MSFT:*_*_*_CC_FLAGS = /U_WIN32 /UWIN64 /U_MSC_VER
  GCC:*_*_*_CC_FLAGS = -Wno-unused-function -Wno-unused-but-set-variable
