# 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("//build_overrides/nlassert.gni")

import("${chip_root}/build/chip/buildconfig_header.gni")
import("${chip_root}/src/crypto/crypto.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",
    ]
  }

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

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

  sources += [
    "repo/hostlib/hostLib/libCommon/smCom/T1oI2C/phNxpEsePal_i2c.c",
    "repo/hostlib/hostLib/libCommon/smCom/T1oI2C/phNxpEseProto7816_3.c",
    "repo/hostlib/hostLib/libCommon/smCom/T1oI2C/phNxpEse_Api.c",
    "repo/hostlib/hostLib/libCommon/smCom/smComT1oI2C.c",
  ]

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

  public_configs = [ ":se05x_config" ]
}
