# 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")

config("cyw30739_sdk_no_warn_rwx") {
  ldflags = [ "-Wl,--no-warn-rwx-segment" ]
}

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

config("mbedtls_cyw30739_config") {
  defines = [
    "MBEDTLS_CONFIG_FILE=<third_party/openthread/repo/third_party/mbedtls/mbedtls-config.h>",
    "MBEDTLS_USER_CONFIG_FILE=<src/platform/Infineon/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" ]
}
