## @file
#  Support for Simple File System over Firmware Volume.
#
#  This driver uses the EFI_FIRMWARE_VOLUME2_PROTOCOL to expose files in firmware
#  volumes via the the EFI_SIMPLE_FILESYSTEM_PROTOCOL and EFI_FILE_PROTOCOL.
#
#  It will expose a single directory, containing one file for each file in the firmware
#  volume. If a file has a UI section, its contents will be used as a filename.
#  Otherwise, a string representation of the GUID will be used.
#  Files of an executable type (That is PEIM, DRIVER, COMBINED_PEIM_DRIVER and APPLICATION)
#  will have ".efi" added to their filename.
#
#  Its primary intended use is to be able to start EFI applications embedded in FVs
#  from the UEFI shell. It is entirely read-only.
#
#  Copyright (c) 2014, ARM Ltd. All rights reserved.<BR>
#  Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved.<BR>
#
#  This program and the accompanying materials
#  are licensed and made available under the terms and conditions of the BSD License
#  which accompanies this distribution.  The full text of the license may be found at
#  http://opensource.org/licenses/bsd-license.php
#
#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#
##

[Defines]
  INF_VERSION                    = 0x00010005
  BASE_NAME                      = FvSimpleFileSystem
  MODULE_UNI_FILE                = FvSimpleFileSystem.uni
  FILE_GUID                      = 907125c0-a5f1-11e3-a3fe-a3198b49350c
  MODULE_TYPE                    = UEFI_DRIVER
  VERSION_STRING                 = 1.0
  ENTRY_POINT                    = FvSimpleFileSystemEntryPoint

[Sources]

  ComponentName.c
  FvSimpleFileSystem.c
  FvSimpleFileSystemEntryPoint.c
  FvSimpleFileSystemInternal.h

[Packages]
  MdePkg/MdePkg.dec
  MdeModulePkg/MdeModulePkg.dec

[LibraryClasses]
  BaseLib
  DevicePathLib
  MemoryAllocationLib
  PrintLib
  UefiDriverEntryPoint
  UefiLib

[Pcd]
  gEfiMdePkgTokenSpaceGuid.PcdUefiVariableDefaultPlatformLang              ## SOMETIMES_CONSUMES
  gEfiMdePkgTokenSpaceGuid.PcdUefiVariableDefaultLang                      ## SOMETIMES_CONSUMES

[Guids]
  gEfiFileInfoGuid                                                         ## SOMETIMES_CONSUMES   ## UNDEFINED
  gEfiFileSystemInfoGuid                                                   ## SOMETIMES_CONSUMES   ## UNDEFINED
  gEfiFileSystemVolumeLabelInfoIdGuid                                      ## SOMETIMES_CONSUMES   ## UNDEFINED

[Protocols]
  gEfiDevicePathProtocolGuid                                               ## TO_START
  gEfiFirmwareVolume2ProtocolGuid                                          ## TO_START
  gEfiUnicodeCollationProtocolGuid                                         ## TO_START
  gEfiUnicodeCollation2ProtocolGuid                                        ## TO_START
  gEfiSimpleFileSystemProtocolGuid                                         ## BY_START

[UserExtensions.TianoCore."ExtraFiles"]
  FvSimpleFileSystemExtra.uni
