# Copyright (c) 2020 Project CHIP Authors
#
# 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.

import("//build_overrides/chip.gni")
import("${chip_root}/src/platform/device.gni")
import("${chip_root}/third_party/simw-top-mini/simw_config.gni")

config("se05x_config") {
  defines = [ "SSS_USE_FTR_FILE" ]

  defines += [
    "T1oI2C",
    "T1oI2C_UM11225",
    "SMCOM_T1oI2C",
  ]

  #defines += ["FLOW_VERBOSE"]

  if (chip_device_platform == "k32w0") {
    defines += [
      "AX_EMBEDDED",
      "LPC_K32W",
      "SDK_OS_FREE_RTOS=1",
    ]
  }

  if (chip_rpi_se05x_t4t_demo == 1) {
    defines += [ "CHIP_RPI_SE05X_T4T_DEMO" ]
  }

  include_dirs = [
    "${chip_root}/third_party/simw-top-mini/repo",
    "${chip_root}/third_party/simw-top-mini/repo/sss/inc",
    "${chip_root}/third_party/simw-top-mini/repo/sss/port/default",
    "${chip_root}/third_party/simw-top-mini/repo/sss/ex/src",
    "${chip_root}/third_party/simw-top-mini/repo/sss/ex/inc",
    "${chip_root}/third_party/simw-top-mini/repo/hostlib/hostLib/inc",
    "${chip_root}/third_party/simw-top-mini/repo/hostlib/hostLib/libCommon/infra",
    "${chip_root}/third_party/simw-top-mini/repo/hostlib/hostLib/libCommon/smCom",
    "${chip_root}/third_party/simw-top-mini/repo/hostlib/hostLib/libCommon/log",
    "${chip_root}/third_party/simw-top-mini/repo/hostlib/hostLib/libCommon/smCom/T1oI2C",
    "${chip_root}/third_party/simw-top-mini/repo/hostlib/hostLib/se05x_03_xx_xx",
    "${chip_root}/third_party/simw-top-mini/repo/hostlib/hostLib/platform/inc",
    "${chip_root}/third_party/simw-top-mini/repo/hostlib/hostLib/libCommon/smCom",
  ]
  if (chip_device_platform == "k32w0") {
    include_dirs += [
      "${chip_root}/third_party/simw-top-mini/repo/demos/ksdk/common/boards/DK6/wireless_examples/chip",
      "${chip_root}/third_party/simw-top-mini/repo/demos/ksdk/common/freertos/boards/DK6",
    ]
  }
}

source_set("se05x") {
  sources = [
    "${chip_root}/third_party/simw-top-mini/repo/hostlib/hostLib/libCommon/infra/global_platf.c",
    "${chip_root}/third_party/simw-top-mini/repo/hostlib/hostLib/libCommon/infra/sm_apdu.c",
    "${chip_root}/third_party/simw-top-mini/repo/hostlib/hostLib/libCommon/infra/sm_connect.c",
    "${chip_root}/third_party/simw-top-mini/repo/hostlib/hostLib/libCommon/infra/sm_errors.c",
    "${chip_root}/third_party/simw-top-mini/repo/hostlib/hostLib/libCommon/infra/sm_printf.c",
    "${chip_root}/third_party/simw-top-mini/repo/hostlib/hostLib/libCommon/log/nxLog.c",
    "${chip_root}/third_party/simw-top-mini/repo/hostlib/hostLib/libCommon/smCom/smCom.c",
    "${chip_root}/third_party/simw-top-mini/repo/hostlib/hostLib/platform/generic/se05x_t4t_utils.cpp",
    "${chip_root}/third_party/simw-top-mini/repo/hostlib/hostLib/platform/rsp/se05x_reset.c",
    "${chip_root}/third_party/simw-top-mini/repo/hostlib/hostLib/se05x/src/se05x_ECC_curves.c",
    "${chip_root}/third_party/simw-top-mini/repo/hostlib/hostLib/se05x/src/se05x_mw.c",
    "${chip_root}/third_party/simw-top-mini/repo/hostlib/hostLib/se05x/src/se05x_tlv.c",
    "${chip_root}/third_party/simw-top-mini/repo/hostlib/hostLib/se05x_03_xx_xx/se05x_APDU.c",
    "${chip_root}/third_party/simw-top-mini/repo/sss/ex/src/ex_sss_boot.c",
    "${chip_root}/third_party/simw-top-mini/repo/sss/ex/src/ex_sss_boot_connectstring.c",
    "${chip_root}/third_party/simw-top-mini/repo/sss/ex/src/ex_sss_se05x.c",
    "${chip_root}/third_party/simw-top-mini/repo/sss/ex/src/ex_sss_se05x_auth.c",
    "${chip_root}/third_party/simw-top-mini/repo/sss/src/fsl_sss_apis.c",
    "${chip_root}/third_party/simw-top-mini/repo/sss/src/fsl_sss_util_asn1_der.c",
    "${chip_root}/third_party/simw-top-mini/repo/sss/src/fsl_sss_util_rsa_sign_utils.c",
    "${chip_root}/third_party/simw-top-mini/repo/sss/src/keystore/keystore_cmn.c",
    "${chip_root}/third_party/simw-top-mini/repo/sss/src/keystore/keystore_pc.c",
    "${chip_root}/third_party/simw-top-mini/repo/sss/src/mbedtls/fsl_sss_mbedtls_apis.c",
    "${chip_root}/third_party/simw-top-mini/repo/sss/src/se05x/fsl_sss_se05x_apis.c",
    "${chip_root}/third_party/simw-top-mini/repo/sss/src/se05x/fsl_sss_se05x_mw.c",
    "${chip_root}/third_party/simw-top-mini/repo/sss/src/se05x/fsl_sss_se05x_policy.c",
  ]

  sources += [
    "${chip_root}/third_party/simw-top-mini/repo/hostlib/hostLib/libCommon/smCom/T1oI2C/phNxpEsePal_i2c.c",
    "${chip_root}/third_party/simw-top-mini/repo/hostlib/hostLib/libCommon/smCom/T1oI2C/phNxpEseProto7816_3.c",
    "${chip_root}/third_party/simw-top-mini/repo/hostlib/hostLib/libCommon/smCom/T1oI2C/phNxpEse_Api.c",
    "${chip_root}/third_party/simw-top-mini/repo/hostlib/hostLib/libCommon/smCom/smComT1oI2C.c",
  ]

  if (chip_device_platform == "k32w0") {
    sources += [
      "${chip_root}/third_party/simw-top-mini/repo/hostlib/hostLib/platform/ksdk/i2c_dk6.c",
      "${chip_root}/third_party/simw-top-mini/repo/hostlib/hostLib/platform/ksdk/timer_kinetis_freertos.c",
    ]
  } else if (chip_device_platform == "linux") {
    sources += [
      "${chip_root}/third_party/simw-top-mini/repo/hostlib/hostLib/platform/generic/sm_timer.c",
      "${chip_root}/third_party/simw-top-mini/repo/hostlib/hostLib/platform/linux/i2c_a7.c",
    ]
  }

  public_deps = [ "${chip_root}/third_party/mbedtls:mbedtls" ]
  configs += [ ":se05x_config" ]
}
