#===========================================================================
#  Copyright (c) 2011-2016, 2017 QUALCOMM Technologies Incorporated.
#  All Rights Reserved.
#  Qualcomm Confidential and Proprietary
#===========================================================================
#
#
# GENERAL DESCRIPTION
#    build script
#                      EDIT HISTORY FOR FILE
#
#  This section contains comments describing changes made to the module.
#  Notice that changes are listed in reverse chronological order.
#
# when       who     what, where, why
# --------   ---     ---------------------------------------------------------
#
#===============================================================================

#-------------------------------------------------------------------------------
# Source PATH
#-------------------------------------------------------------------------------
import os
Import('env')

env = env.Clone()

#------------------------------------------------------------------------------
# HDCP FUNC
#------------------------------------------------------------------------------
def HDCP_LOGD(str):
  print("\n\033[0;33;40m" +  "[HDCP_DBG] " + str + "\033[0;m\n")

CHIPSET = env['CHIPSET']
MANUFACTURING_TYPE = os.environ['MANUFACTURING_TYPE']
SHIPPING_API_LEVEL = os.environ['SHIPPING_API_LEVEL']

HDCP_LOGD("CHIPSET :" + CHIPSET)
HDCP_LOGD("MANUFACTURING_TYPE :" + MANUFACTURING_TYPE)
HDCP_LOGD("SHIPPING_API_LEVEL :" + SHIPPING_API_LEVEL)


if os.path.exists(env['BUILD_ROOT'] + '/ssg'):
    QSEE_APP_DIR = env['BUILD_ROOT'] + "/ssg"
else:
    QSEE_APP_DIR = env['BUILD_ROOT'] + "/core"

if not hasattr(env, 'IMAGE_ALIASES'):
  HDCP_LOGD("Not Image_aliases")
  aliases = []
  aliases = ['sshdcpapp',]
  env.Replace(OUT_DIR = QSEE_APP_DIR + "/bsp/trustzone/qsapps/sshdcpapp/build")
  env.Replace(LIB_OUT_DIR = QSEE_APP_DIR + "/bsp/trustzone/qsapps/sshdcpapp/build/" + "${SHORT_BUILDPATH}")

#------------------------------------------------------------------------------
# HDCP Defines
#------------------------------------------------------------------------------
if env['PROC'] == 'scorpion':
  env.Append(CCFLAGS = " -mfpu=neon ")

env.Append(CPPDEFINES=['CONFIG_MSM8996'])
env.Append(CPPDEFINES=['CONFIG_MSM8998'])

if not CHIPSET in ['msm8937']:
  env.Append(CPPDEFINES=['CONFIG_HDCP_64BIT'])
if CHIPSET in ['sdm845', 'sdm855', 'sm8250']:
  env.Append(CPPDEFINES=['USE_4KMIRRORING'])
if CHIPSET in ['msm8998']:
  env.Append(CPPDEFINES=['USE_4KMIRRORING'])
  env.Append(CPPDEFINES=['USE_QSEE_WRAP_WITH_SFS'])
if CHIPSET in ['sdm450', 'msm8953', 'msm8937'] and MANUFACTURING_TYPE != 'jdm' and int(SHIPPING_API_LEVEL) < 29:
  env.Append(CPPDEFINES=['USE_QSEE_WRAP_WITH_SFS'])
if MANUFACTURING_TYPE == 'jdm':
  env.Append(CPPDEFINES=['USE_QSEE_WRAP_WITH_WB'])

#if TARGET_BUILD_VARIANT == 'eng':
#env.Append(CPPDEFINES=['DEBUG'])

env.Append(CFLAGS = ' -fstack-protector -fstack-protector-all')
env.Append(CCFLAGS = " -Wno-error -Wno-unused-value ")

#------------------------------------------------------------------------------
# HDCP Source PATH
#------------------------------------------------------------------------------
HDCP_ROOT_PATH = QSEE_APP_DIR + "/securemsm/trustzone/qsapps/sshdcpapp/"

#------------------------------------------------------------------------------
# HDCP includes
#------------------------------------------------------------------------------
incl_common = [
    "${INC_ROOT}/core/api/services",
    "${INC_ROOT}/core/kernel/smmu/ACv3.0/common/inc",
    QSEE_APP_DIR +"/api/securemsm/trustzone/qsee",
    QSEE_APP_DIR + "/securemsm/accesscontrol/api",
    HDCP_ROOT_PATH + "src",
]

if CHIPSET in ['msm8953', 'msm8937']:
  incl_common += [
    "${INC_ROOT}/core/kernel/smmu/v2/inc",
   ]

#----------------------------------------------------------------------------
# App core Objects
#----------------------------------------------------------------------------
sour_common = [
    HDCP_ROOT_PATH + "src/tz_hdcp2.c",
    HDCP_ROOT_PATH + "src/tz_hdcp2_crypto.c",
    HDCP_ROOT_PATH + "src/tz_hdcp2_receiver.c",
    HDCP_ROOT_PATH + "src/tz_hdcp2_transmitter.c",
    HDCP_ROOT_PATH + "src/tz_hdcp2_loadkey.c",
    HDCP_ROOT_PATH + "src/wrapAPI/tz_hdcp2_decode.c",
]

sour_wb = [
    HDCP_ROOT_PATH + "src/wbAPI/swbc-aes.c",
    HDCP_ROOT_PATH + "src/wbAPI/swbc-utils.c",
    HDCP_ROOT_PATH + "src/wbAPI/aes128-swbc-layer1-ctr.c",
    HDCP_ROOT_PATH + "src/wbAPI/hdcp_wb_aes_ctr.c",
]



arm_libs = [
    File(env.SubstRealPath('${LLVMLIB}/libclang_rt.builtins-arm.a'))
]
if env["PROC"] == "scorpion":
    arm_libs.append(File(env.SubstRealPath('${MUSL32PATH}/lib/libc.a')))
else:
    arm_libs.append(File(env.SubstRealPath('${MUSLPATH}/lib/libc.a')))

target_name = 'sshdcpapp'
app_name = 'SshdcpApp'

#-------------------------------------------------------------------------------
# Add metadata to image
#-------------------------------------------------------------------------------
if MANUFACTURING_TYPE == 'jdm':
  sources = [
     sour_common,
     sour_wb
  ]
else :
  sources = [
     sour_common,
  ]

privileges = ['default',
              'I2C',
              'OEMUnwrapKeys',
              'CertValidate',
              'SPI',
              'TLMM',
              'SecureDisplay',
              'IntMask',
              'OEMBuf',
              'TransNSAddr',
             ]

# *Privileges for each chipset*
# ---------------------------------------------------------------
# |                | sdm450 | msm8953 | msm8917 | sdm660 | else |
# ---------------------------------------------------------------
# |   TestSandbox  |    X   |    X    |    X    |    O   |   O  |
# ---------------------------------------------------------------
# |      SPCOM     |    X   |    X    |    X    |    O   |   O  |
# ---------------------------------------------------------------
# | HdcpEncryption |    X   |    X    |    X    |    O   |   O  |
# ---------------------------------------------------------------
# |     System     |    X   |    X    |    X    |    X   |   O  |
# ---------------------------------------------------------------
# |   HDCP_R2P2    |    X   |    X    |    X    |    X   |   O  |
# ---------------------------------------------------------------
# |      OPS       |    X   |    X    |    X    |    X   |   O  |
# ---------------------------------------------------------------

if CHIPSET not in ['sdm450', 'msm8953', 'msm8937']:
  privileges.append('TestSandbox')
  privileges.append('SPCOM')
  privileges.append('HdcpEncryption')
  if CHIPSET not in ['sdm660']:
    privileges.append('System')
    privileges.append('HDCP_R2P2')
    privileges.append('OPS')

md = {
  'appName': app_name,
  'privileges': privileges,
}

if not CHIPSET in ['sdm855', 'sm8250']:
  if env['PROC'] == 'scorpion':
    md['memoryType'] = 'Unprotected'

if CHIPSET in ['sdm845', 'sdm670', 'sdm855', 'sm6150', 'sm7150', 'sm8250', 'saipan', 'kamorta', 'bitra', 'lahaina']:
  md['heapSize'] = 0x13000
  sshdcpapp_units = env.SecureAppBuilder(
    sources = sources,
    includes = incl_common,
    metadata = md,
    image = target_name,
    user_libs = arm_libs,
  )
else:
  sshdcpapp_units = env.SecureAppBuilder(
    sources = sources,
    includes = incl_common,
    metadata = md,
    image = target_name,
    user_libs = arm_libs,
    heap_size = '0x10000',
  )

if hasattr(env, 'IMAGE_ALIASES'):
  for image in env['IMAGE_ALIASES']:
    env.Alias(image, sshdcpapp_units)
else:
  env.Alias(aliases, sshdcpapp_units)
