# 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}/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 (host == "host_k32w") {
    defines += [
      "AX_EMBEDDED",
      "LPC_K32W",
      "SDK_OS_FREE_RTOS=1",
    ]
  }

  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 (host == "host_k32w") {
    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/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 (host == "host_k32w") {
    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 (host == "host_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" ]
}
