# 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/ti_simplelink_sdk.gni")
import("${ti_simplelink_sdk_build_root}/ti_simplelink_sdk.gni")

declare_args() {
  # Build target to use for TI SimpleLink SDK. Use this to set global SDK defines.
  ti_simplelink_sdk_target = ""
  ti_simplelink_sysconfig_target = ""
}

assert(ti_simplelink_sdk_target != "",
       "ti_simplelink_sdk_target must be specified")
assert(ti_simplelink_sysconfig_target != "",
       "ti_simplelink_sysconfig_target must be specified")

group("ti_simplelink_sdk") {
  public_deps = [ ti_simplelink_sdk_target ]
}

group("ti_simplelink_sysconfig") {
  public_deps = [ ti_simplelink_sysconfig_target ]
}

config("ti_simplelink_mbedtls_config") {
  if (ti_simplelink_device_family == "cc13x2_26x2" ||
      ti_simplelink_device_family == "cc13x2x7_26x2x7") {
    defines = [ "MBEDTLS_CONFIG_FILE=\"cc13x2_26x2-mbedtls-config.h\"" ]

    include_dirs = [
      "${chip_root}/src/platform/cc13x2_26x2",
      "${chip_root}/src/platform/cc13x2_26x2/crypto",
      "${ti_simplelink_sdk_root}/source",
    ]
  } else if (ti_simplelink_device_family == "cc32xx") {
    defines = [ "MBEDTLS_CONFIG_FILE=\"cc32xx-mbedtls-config.h\"" ]

    include_dirs = [ "${chip_root}/src/platform/cc32xx" ]
  }
}

mbedtls_target("mbedtls") {
  # Hardware acceleration
  if (ti_simplelink_device_family == "cc13x2_26x2" ||
      ti_simplelink_device_family == "cc13x2x7_26x2x7") {
    sources = [
      "${chip_root}/src/platform/cc13x2_26x2/crypto/aes_alt.c",
      "${chip_root}/src/platform/cc13x2_26x2/crypto/ecdh_alt.c",
      "${chip_root}/src/platform/cc13x2_26x2/crypto/ecdsa_alt.c",
      "${chip_root}/src/platform/cc13x2_26x2/crypto/ecjpake_alt.c",
      "${chip_root}/src/platform/cc13x2_26x2/crypto/sha256_alt.c",
    ]
  }

  public_configs = [ ":ti_simplelink_mbedtls_config" ]

  public_deps = [ ti_simplelink_sysconfig_target ]
}

config("ti_simplelink_freertos_config") {
  if (ti_simplelink_device_family == "cc13x2_26x2" ||
      ti_simplelink_device_family == "cc13x2x7_26x2x7") {
    include_dirs = [
      "${chip_root}/src/platform/cc13x2_26x2",
      "${freertos_root}/repo/portable/GCC/ARM_CM4F",
    ]
  } else if (ti_simplelink_device_family == "cc32xx") {
    include_dirs = [
      "${chip_root}/src/platform/cc32xx",
      "${freertos_root}/repo/portable/GCC/ARM_CM3",
    ]
  }
}

freertos_target("freertos") {
  if (ti_simplelink_device_family == "cc13x2_26x2" ||
      ti_simplelink_device_family == "cc13x2x7_26x2x7") {
    sources = [
      "${freertos_root}/repo/portable/GCC/ARM_CM4F/port.c",
      #"${freertos_root}/repo/portable/MemMang/heap_4.c",
    ]
  } else if (ti_simplelink_device_family == "cc32xx") {
    sources = [
      "${freertos_root}/repo/portable/GCC/ARM_CM3/port.c",
      "${freertos_root}/repo/portable/MemMang/heap_4.c",
    ]
  }

  public_configs = [ ":ti_simplelink_freertos_config" ]

  if (ti_simplelink_device_family == "cc13x2x7_26x2x7") {
    # BLE has to have it's own heap config
    public_deps =
        [ "${chip_root}/third_party/ti_simplelink_sdk:ti_simplelink_sysconfig" ]
  } else if (ti_simplelink_device_family == "cc32xx") {
    public_deps =
        [ "${chip_root}/third_party/ti_simplelink_sdk:ti_simplelink_sysconfig" ]
  }
}
