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

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

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

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

group("cyw30739_sdk") {
  public_deps = [ cyw30739_sdk_target ]
}

config("mbedtls_cyw30739_config") {
  defines = [
    "MBEDTLS_CONFIG_FILE=<third_party/openthread/repo/third_party/mbedtls/mbedtls-config.h>",
    "MBEDTLS_USER_CONFIG_FILE=<src/platform/CYW30739/cyw30739-chip-mbedtls-config.h>",
  ]

  include_dirs = [ chip_root ]
}

mbedtls_target("mbedtls") {
  sources = [
    "${chip_root}/third_party/openthread/ot-ifx/src/cyw30739/mbedtls/library/aes_alt.c",
    "${chip_root}/third_party/openthread/ot-ifx/src/cyw30739/mbedtls/library/ccm_alt.c",
    "${chip_root}/third_party/openthread/ot-ifx/src/cyw30739/mbedtls/library/sha256_alt.c",
  ]

  public_configs = [ ":mbedtls_cyw30739_config" ]

  public_deps = [ "${openthread_root}/src/core:libopenthread_core_headers" ]
}
