# Copyright (c) 2023 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/stm32_sdk.gni")
import("${chip_root}/src/lib/lib.gni")
import("${chip_root}/src/platform/device.gni")
import("${srm32_sdk_build_root}/stm32_board.gni")
import("${stm32_sdk_build_root}/stm32_sdk.gni")

config("chip_examples_project_config") {
  include_dirs = [ "project_include" ]

  # Link options that provide a replacement for dynamic memory operations in standard
  # library with the FreeRTOS malloc in platform code.
  ldflags = [
    # memory allocation -- these must be re-entrant and do locking
    #"-Wl,--wrap=malloc",
    #"-Wl,--wrap=free",
    #"-Wl,--wrap=realloc",
    #"-Wl,--wrap=calloc",
    #"-Wl,--wrap=MemoryAlloc",
    # Wrap these in case internal newlib call them (e.g. strdup will)
    # directly call _malloc_r)
    #"-Wl,--wrap=_malloc_r",
    #"-Wl,--wrap=_realloc_r",
    #"-Wl,--wrap=_free_r",
    #"-Wl,--wrap=_calloc_r",
  ]
}

source_set("openthread_core_config_stm32_chip_examples") {
  if (chip_enable_openthread) {
    sources = [
      #  "project_include/OpenThreadConfig.h"
    ]

    public_deps = [ "${stm32_sdk_build_root}:stm32_sdk" ]

    if (use_st_thread_lib) {
      public_deps += [ "${stm32_sdk_build_root}:openthread_core_config_stm32" ]
    } else {
      public_deps += [ "${chip_root}/third_party/openthread/platforms/stm32:openthread_core_config_stm32" ]
    }

    public_configs = [ ":chip_examples_project_config" ]
  }
}

config("attestation-credentials-config") {
  include_dirs = [ "${chip_root}" ]

  defines = [
    # Set to 1 to enable stm32 attestation credentials
    "STM32_ATTESTATION_CREDENTIALS",
  ]
}

source_set("stm32-attestation-credentials") {
  sources = [
    # "stm32DeviceAttestationCreds.cpp",
    # "stm32DeviceAttestationCreds.h",
  ]

  public_deps = [
    "${chip_root}/src/credentials",
    "${chip_root}/src/platform:platform_base",
  ]

  public_configs = [ ":attestation-credentials-config" ]
}
