## @file
# This module provide an SMM CIS compliant implementation of SMM Core.
#
# Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR>
# Copyright (c) 2016 - 2018, ARM Limited. All rights reserved.<BR>
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
##

[Defines]
  INF_VERSION                    = 0x0001001A
  BASE_NAME                      = StandaloneMmCore
  FILE_GUID                      = 6E14B6FD-3600-4DD6-A17A-206B3B6DCE16
  MODULE_TYPE                    = MM_CORE_STANDALONE
  VERSION_STRING                 = 1.0
  PI_SPECIFICATION_VERSION       = 0x00010032
  ENTRY_POINT                    = StandaloneMmMain

#  VALID_ARCHITECTURES           = IA32 X64 AARCH64 ARM

[Sources]
  StandaloneMmCore.c
  StandaloneMmCore.h
  StandaloneMmCorePrivateData.h
  Page.c
  Pool.c
  Handle.c
  Locate.c
  Notify.c
  Dependency.c
  Dispatcher.c
  Mmi.c
  InstallConfigurationTable.c
  FwVol.c

[Packages]
  MdePkg/MdePkg.dec
  MdeModulePkg/MdeModulePkg.dec
  StandaloneMmPkg/StandaloneMmPkg.dec

[LibraryClasses]
  BaseLib
  BaseMemoryLib
  CacheMaintenanceLib
  DebugLib
  ExtractGuidedSectionLib
  FvLib
  HobLib
  MemoryAllocationLib
  MemLib
  PeCoffLib
  ReportStatusCodeLib
  StandaloneMmCoreEntryPoint

[Protocols]
  gEfiDxeMmReadyToLockProtocolGuid             ## UNDEFINED # SmiHandlerRegister
  gEfiMmReadyToLockProtocolGuid                ## PRODUCES
  gEfiMmEndOfDxeProtocolGuid                   ## PRODUCES
  gEfiLoadedImageProtocolGuid                   ## PRODUCES
  gEfiMmConfigurationProtocolGuid               ## CONSUMES

[Guids]
  gAprioriGuid                                  ## SOMETIMES_CONSUMES   ## File
  gEfiEventDxeDispatchGuid                      ## PRODUCES             ## GUID # SmiHandlerRegister
  gEfiEndOfDxeEventGroupGuid                    ## PRODUCES             ## GUID # SmiHandlerRegister
  ## SOMETIMES_CONSUMES   ## GUID # Locate protocol
  ## SOMETIMES_PRODUCES   ## GUID # SmiHandlerRegister
  gEdkiiMemoryProfileGuid
  gZeroGuid                                     ## SOMETIMES_CONSUMES   ## GUID
  gEfiHobListGuid
  gEfiHobMemoryAllocModuleGuid
  gMmCoreDataHobGuid
  gMmFvDispatchGuid
  gEfiEventLegacyBootGuid
  gEfiEventExitBootServicesGuid
  gEfiEventReadyToBootGuid

#
# This configuration fails for CLANGPDB, which does not support PIE in the GCC
# sense. Such however is required for ARM family StandaloneMmCore
# self-relocation, and thus the CLANGPDB toolchain is unsupported for ARM and
# AARCH64 for this module.
#
[BuildOptions]
  GCC:*_*_ARM_CC_FLAGS = -fpie
  GCC:*_*_ARM_DLINK_FLAGS = -Wl,-z,text,-Bsymbolic,-pie
  GCC:*_*_AARCH64_CC_FLAGS = -fpie
  GCC:*_*_AARCH64_DLINK_FLAGS = -Wl,-z,text,-Bsymbolic,-pie
