# Copyright (C) 2015 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

LOCAL_PATH := $(call my-dir)

# libtpm2
# ========================================================
include $(CLEAR_VARS)
LOCAL_MODULE := libtpm2
LOCAL_CFLAGS := -Wall -Wextra -Werror \
  -Wno-typedef-redefinition \
  -Wno-unused-parameter \
  -Wno-missing-field-initializers \
  -Wno-tautological-compare \
  -Wno-sign-compare
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include/tpm2
LOCAL_CLANG := true
LOCAL_SHARED_LIBRARIES := libcrypto
LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include
LOCAL_SRC_FILES := \
  ActivateCredential.c \
  AlgorithmCap.c \
  Attest_spt.c \
  Bits.c \
  Cancel.c \
  Certify.c \
  CertifyCreation.c \
  ChangeEPS.c \
  ChangePPS.c \
  Clear.c \
  ClearControl.c \
  Clock.c \
  ClockRateAdjust.c \
  ClockSet.c \
  CommandAudit.c \
  CommandCodeAttributes.c \
  CommandDispatcher.c \
  Commit.c \
  ContextLoad.c \
  ContextSave.c \
  Context_spt.c \
  CpriCryptPri.c \
  CpriECC.c \
  CpriHash.c \
  CpriMisc.c \
  CpriRNG.c \
  CpriRSA.c \
  CpriSym.c \
  Create.c \
  CreatePrimary.c \
  CryptSelfTest.c \
  CryptUtil.c \
  DA.c \
  DRTM.c \
  DictionaryAttackLockReset.c \
  DictionaryAttackParameters.c \
  Duplicate.c \
  ECC_Parameters.c \
  ECDH_KeyGen.c \
  ECDH_ZGen.c \
  EC_Ephemeral.c \
  EncryptDecrypt.c \
  Entity.c \
  Entropy.c \
  EventSequenceComplete.c \
  EvictControl.c \
  ExecCommand.c \
  FieldUpgradeData.c \
  FieldUpgradeStart.c \
  FirmwareRead.c \
  FlushContext.c \
  GetCapability.c \
  GetCommandAuditDigest.c \
  GetCommandCodeString.c \
  GetRandom.c \
  GetSessionAuditDigest.c \
  GetTestResult.c \
  GetTime.c \
  Global.c \
  HMAC.c \
  HMAC_Start.c \
  Handle.c \
  HandleProcess.c \
  Hash.c \
  HashSequenceStart.c \
  Hierarchy.c \
  HierarchyChangeAuth.c \
  HierarchyControl.c \
  Import.c \
  IncrementalSelfTest.c \
  Load.c \
  LoadExternal.c \
  Locality.c \
  LocalityPlat.c \
  MakeCredential.c \
  Marshal_ActivateCredential.c \
  Marshal_Certify.c \
  Marshal_CertifyCreation.c \
  Marshal_ChangeEPS.c \
  Marshal_ChangePPS.c \
  Marshal_Clear.c \
  Marshal_ClearControl.c \
  Marshal_ClockRateAdjust.c \
  Marshal_ClockSet.c \
  Marshal_Commit.c \
  Marshal_ContextLoad.c \
  Marshal_ContextSave.c \
  Marshal_Create.c \
  Marshal_CreatePrimary.c \
  Marshal_DictionaryAttackLockReset.c \
  Marshal_DictionaryAttackParameters.c \
  Marshal_Duplicate.c \
  Marshal_ECC_Parameters.c \
  Marshal_ECDH_KeyGen.c \
  Marshal_ECDH_ZGen.c \
  Marshal_EC_Ephemeral.c \
  Marshal_EncryptDecrypt.c \
  Marshal_EventSequenceComplete.c \
  Marshal_EvictControl.c \
  Marshal_FirmwareRead.c \
  Marshal_FlushContext.c \
  Marshal_GetCapability.c \
  Marshal_GetCommandAuditDigest.c \
  Marshal_GetRandom.c \
  Marshal_GetSessionAuditDigest.c \
  Marshal_GetTestResult.c \
  Marshal_GetTime.c \
  Marshal_HMAC.c \
  Marshal_HMAC_Start.c \
  Marshal_Hash.c \
  Marshal_HashSequenceStart.c \
  Marshal_HierarchyChangeAuth.c \
  Marshal_HierarchyControl.c \
  Marshal_Import.c \
  Marshal_IncrementalSelfTest.c \
  Marshal_Load.c \
  Marshal_LoadExternal.c \
  Marshal_MakeCredential.c \
  Marshal_NV_Certify.c \
  Marshal_NV_ChangeAuth.c \
  Marshal_NV_DefineSpace.c \
  Marshal_NV_Extend.c \
  Marshal_NV_GlobalWriteLock.c \
  Marshal_NV_Increment.c \
  Marshal_NV_Read.c \
  Marshal_NV_ReadLock.c \
  Marshal_NV_ReadPublic.c \
  Marshal_NV_SetBits.c \
  Marshal_NV_UndefineSpace.c \
  Marshal_NV_UndefineSpaceSpecial.c \
  Marshal_NV_Write.c \
  Marshal_NV_WriteLock.c \
  Marshal_ObjectChangeAuth.c \
  Marshal_PCR_Allocate.c \
  Marshal_PCR_Event.c \
  Marshal_PCR_Extend.c \
  Marshal_PCR_Read.c \
  Marshal_PCR_Reset.c \
  Marshal_PCR_SetAuthPolicy.c \
  Marshal_PCR_SetAuthValue.c \
  Marshal_PP_Commands.c \
  Marshal_PolicyAuthValue.c \
  Marshal_PolicyAuthorize.c \
  Marshal_PolicyCommandCode.c \
  Marshal_PolicyCounterTimer.c \
  Marshal_PolicyCpHash.c \
  Marshal_PolicyDuplicationSelect.c \
  Marshal_PolicyGetDigest.c \
  Marshal_PolicyLocality.c \
  Marshal_PolicyNV.c \
  Marshal_PolicyNameHash.c \
  Marshal_PolicyNvWritten.c \
  Marshal_PolicyOR.c \
  Marshal_PolicyPCR.c \
  Marshal_PolicyPassword.c \
  Marshal_PolicyPhysicalPresence.c \
  Marshal_PolicyRestart.c \
  Marshal_PolicySecret.c \
  Marshal_PolicySigned.c \
  Marshal_PolicyTicket.c \
  Marshal_Quote.c \
  Marshal_RSA_Decrypt.c \
  Marshal_RSA_Encrypt.c \
  Marshal_ReadClock.c \
  Marshal_ReadPublic.c \
  Marshal_Rewrap.c \
  Marshal_SelfTest.c \
  Marshal_SequenceComplete.c \
  Marshal_SequenceUpdate.c \
  Marshal_SetAlgorithmSet.c \
  Marshal_SetCommandCodeAuditStatus.c \
  Marshal_SetPrimaryPolicy.c \
  Marshal_Shutdown.c \
  Marshal_Sign.c \
  Marshal_StartAuthSession.c \
  Marshal_Startup.c \
  Marshal_StirRandom.c \
  Marshal_TestParms.c \
  Marshal_Unseal.c \
  Marshal_VerifySignature.c \
  Marshal_ZGen_2Phase.c \
  Manufacture.c \
  MathFunctions.c \
  MemoryLib.c \
  NV.c \
  NVMem.c \
  NV_Certify.c \
  NV_ChangeAuth.c \
  NV_DefineSpace.c \
  NV_Extend.c \
  NV_GlobalWriteLock.c \
  NV_Increment.c \
  NV_Read.c \
  NV_ReadLock.c \
  NV_ReadPublic.c \
  NV_SetBits.c \
  NV_UndefineSpace.c \
  NV_UndefineSpaceSpecial.c \
  NV_Write.c \
  NV_WriteLock.c \
  NV_spt.c \
  Object.c \
  ObjectChangeAuth.c \
  Object_spt.c \
  PCR.c \
  PCR_Allocate.c \
  PCR_Event.c \
  PCR_Extend.c \
  PCR_Read.c \
  PCR_Reset.c \
  PCR_SetAuthPolicy.c \
  PCR_SetAuthValue.c \
  PP.c \
  PPPlat.c \
  PP_Commands.c \
  PlatformData.c \
  PolicyAuthValue.c \
  PolicyAuthorize.c \
  PolicyCommandCode.c \
  PolicyCounterTimer.c \
  PolicyCpHash.c \
  PolicyDuplicationSelect.c \
  PolicyGetDigest.c \
  PolicyLocality.c \
  PolicyNV.c \
  PolicyNameHash.c \
  PolicyNvWritten.c \
  PolicyOR.c \
  PolicyPCR.c \
  PolicyPassword.c \
  PolicyPhysicalPresence.c \
  PolicyRestart.c \
  PolicySecret.c \
  PolicySigned.c \
  PolicyTicket.c \
  Policy_spt.c \
  Power.c \
  PowerPlat.c \
  PropertyCap.c \
  Quote.c \
  RSAData.c \
  RSAKeySieve.c \
  RSA_Decrypt.c \
  RSA_Encrypt.c \
  ReadClock.c \
  ReadPublic.c \
  Rewrap.c \
  SelfTest.c \
  SequenceComplete.c \
  SequenceUpdate.c \
  Session.c \
  SessionProcess.c \
  SetAlgorithmSet.c \
  SetCommandCodeAuditStatus.c \
  SetPrimaryPolicy.c \
  Shutdown.c \
  Sign.c \
  StartAuthSession.c \
  Startup.c \
  StirRandom.c \
  TestParms.c \
  Ticket.c \
  Time.c \
  TpmFail.c \
  Unique.c \
  Unseal.c \
  VerifySignature.c \
  ZGen_2Phase.c \
  _TPM_Hash_Data.c \
  _TPM_Hash_End.c \
  _TPM_Hash_Start.c \
  _TPM_Init.c \
  tpm_generated.c
include $(BUILD_SHARED_LIBRARY)
