# 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/lwip.gni")
import("//build_overrides/mbedtls.gni")
import("//build_overrides/mw320_sdk.gni")

import("${lwip_root}/lwip.gni")
import("${mbedtls_root}/mbedtls.gni")
import("${mw320_sdk_build_root}/mw320_sdk.gni")

declare_args() {
  # Build target to use for mw320 SDK. Use this to set global SDK defines.
  mw320_sdk_target = ""
}

assert(mw320_sdk_target != "", "mw320_sdk_target must be specified")

group("mw320_sdk") {
  public_deps = [ mw320_sdk_target ]
}

config("mbedtls_mw320_config") {
  defines = [
    "MBEDTLS_CONFIG_FILE=<src/platform/nxp/mw320/mw320-chip-mbedtls-config.h>",

    # These options should really be in the config.h...
    "MBEDTLS_NO_PLATFORM_ENTROPY",
    "MBEDTLS_ECP_C",
    "ECP_SHORTWEIERSTRASS",
    "MBEDTLS_BIGNUM_C",
    "MBEDTLS_MD_C",
    "MBEDTLS_SHA256_C",
    "MBEDTLS_X509_CSR_WRITE_C",
    "MBEDTLS_X509_CREATE_C",
    "MBEDTLS_PK_WRITE_C",
    "MBEDTLS_PK_C",
    "MBEDTLS_ASN1_WRITE_C",
    "MBEDTLS_ASN1_PARSE_C",
    "MBEDTLS_OID_C",
    "MBEDTLS_PEM_WRITE_C",
    "MBEDTLS_BASE64_C",
    "MBEDTLS_HKDF_C",
    "MBEDTLS_ERROR_C",
    "MBEDTLS_PKCS5_C",
    "MBEDTLS_CTR_DRBG_C",
    "MBEDTLS_AES_C",
    "MBEDTLS_CIPHER_C",
    "MBEDTLS_CCM_C",
    "MBEDTLS_ENTROPY_C",

    #    "MBEDTLS_ECP_SHORT_WEIERSTRASS_ENABLED",
  ]
  if (mbedtls_use_tinycrypt) {
    defines += [
      "MBEDTLS_USE_TINYCRYPT",
      "MBEDTLS_OPTIMIZE_TINYCRYPT_ASM",
    ]
  }

  include_dirs = [ chip_root ]

  if (mbedtls_use_tinycrypt) {
    include_dirs += [ "${mbedtls_repo}/repo/include/tinycrypt" ]
  }
}

mbedtls_target("mbedtls") {
  import("${mw320_sdk_build_root}/mw320_sdk.gni")

  if (mbedtls_use_tinycrypt) {
    if (!defined(sources)) {
      sources = []
    }
    sources += [
      "${mbedtls_repo}/repo/tinycrypt/ecc.c",
      "${mbedtls_repo}/repo/tinycrypt/ecc_dh.c",
      "${mbedtls_repo}/repo/tinycrypt/ecc_dsa.c",
    ]
  }
  public_configs = [ ":mbedtls_mw320_config" ]

  public_deps = [ ":mw320_sdk" ]
}
