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

import("${k32w0_sdk_build_root}/k32w0_sdk.gni")
import("${mbedtls_root}/mbedtls.gni")

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

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

group("k32w0_sdk") {
  public_deps = [ k32w0_sdk_target ]
}

if (chip_crypto == "tinycrypt") {
  assert(
      mbedtls_repo ==
          "//third_party/connectedhomeip/third_party/nxp/libs/mbedtls",
      "mbedtls_repo must be set to nxp mbedtls-tinycrypt library when chip_crypto == \"tinycrypt\"")
}

config("mbedtls_k32w0_config") {
  defines = [
    "MBEDTLS_CONFIG_FILE=<third_party/openthread/repo/third_party/mbedtls/mbedtls-config.h>",
    "MBEDTLS_USER_CONFIG_FILE=<src/platform/nxp/k32w/k32w0/k32w0-chip-mbedtls-config.h>",

    # These options should really be in the config.h...
    "MBEDTLS_FREESCALE_FREERTOS_CALLOC_ALT=1",
    "MBEDTLS_THREADING_C=1",
    "MBEDTLS_THREADING_ALT=1",
    "MBEDTLS_X509_CSR_WRITE_C",
    "MBEDTLS_X509_CREATE_C",
    "MBEDTLS_PEM_WRITE_C",
    "MBEDTLS_HKDF_C",
    "MBEDTLS_PKCS5_C",
  ]

  if (chip_mdns == "none") {
    defines += [
      "MBEDTLS_PK_WRITE_C",
      "MBEDTLS_OID_C",
      "MBEDTLS_BASE64_C",
    ]
  }

  if (chip_crypto == "tinycrypt") {
    defines += [
      "MBEDTLS_USE_TINYCRYPT",
      "MBEDTLS_OPTIMIZE_TINYCRYPT_ASM",
    ]
  }

  include_dirs = [ chip_root ]

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

mbedtls_target("mbedtls") {
  sources = [
    "${k32w0_sdk_root}/middleware/mbedtls/port/ksdk/aes_alt.c",
    "${k32w0_sdk_root}/middleware/mbedtls/port/ksdk/ksdk_mbedtls.c",
  ]

  if (chip_crypto == "tinycrypt") {
    sources += [
      "${mbedtls_repo}/repo/tinycrypt/ecc.c",
      "${mbedtls_repo}/repo/tinycrypt/ecc_dh.c",
      "${mbedtls_repo}/repo/tinycrypt/ecc_dsa.c",
    ]
  }

  public_configs = [ ":mbedtls_k32w0_config" ]

  public_deps = [
    ":k32w0_sdk",
    "${chip_root}/third_party/openthread/platforms/nxp/k32w/k32w0:openthread_mbedtls_config_k32w0",
  ]
}
