# Copyright 2021 The Pigweed 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
#
#     https://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/pigweed.gni")

import("$dir_pw_build/target_types.gni")
import("$dir_pw_third_party/freertos/freertos.gni")

dir_freertos = get_path_info("//third_party/freertos/Source", "abspath")

config("cm0_public_config") {
  include_dirs = [
    "$dir_freertos/include",
    "$dir_freertos/portable/GCC/ARM_CM0",
  ]
  cflags = [ "-Wno-cast-qual" ]
  visibility = [ ":*" ]
}

config("cm4f_public_config") {
  include_dirs = [
    "$dir_freertos/include",
    "$dir_freertos/portable/GCC/ARM_CM4F",
  ]
  cflags = [ "-Wno-cast-qual" ]
  visibility = [ ":*" ]
}

config("cm33_public_config") {
  include_dirs = [
    "$dir_freertos/include",
    "$dir_freertos/portable/GCC/ARM_CM33_NTZ",
    "$dir_freertos/portable/GCC/ARM_CM33_NTZ/non_secure",
  ]
  cflags = [ "-Wno-cast-qual" ]
  visibility = [ ":*" ]
}

config("disable_warnings") {
  cflags = [
    "-Wno-error=unknown-pragmas",
    "-Wno-cast-qual",
    "-Wno-redundant-decls",
    "-Wno-undef",
    "-Wno-unused-parameter",
    "-Wno-unused-variable",
  ]
  visibility = [ ":*" ]
}

pw_source_set("arm_cm0_freertos_port") {
  public_configs = [ ":cm0_public_config" ]
  deps = [ "$pw_third_party_freertos_CONFIG" ]
  public = [ "$dir_freertos/portable/GCC/ARM_CM0/portmacro.h" ]
  sources = [
    "$dir_freertos/portable/GCC/ARM_CM0/port.c",
    "$dir_freertos/portable/MemMang/heap_4.c",
  ]
}

pw_source_set("arm_cm4f_freertos_port") {
  public_configs = [ ":cm4f_public_config" ]
  deps = [ "$pw_third_party_freertos_CONFIG" ]
  public = []
  sources = [
    "$dir_freertos/portable/GCC/ARM_CM4F/port.c",
    "$dir_freertos/portable/MemMang/heap_4.c",
  ]
}

pw_source_set("arm_cm33_ntz_freertos_port") {
  public_configs = [
    ":cm33_public_config",
    ":disable_warnings",
  ]
  deps = [ "$pw_third_party_freertos_CONFIG" ]
  public = []
  sources = [
    "$dir_freertos/portable/GCC/ARM_CM23_NTZ/non_secure/portmacro.h",
    "$dir_freertos/portable/GCC/ARM_CM33_NTZ/non_secure/port.c",
    "$dir_freertos/portable/GCC/ARM_CM33_NTZ/non_secure/portasm.c",
    "$dir_freertos/portable/MemMang/heap_4.c",
  ]
}
