# Copyright 2020 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("freertos.gni")

# This file defines a GN source_set for an external installation of freertos.
# To use, checkout the freertos source into a directory, then set the build arg
# dir_pw_third_party_freertos to point to that directory. The freertos library
# will be available in GN at "$dir_pw_third_party/freertos".
if (dir_pw_third_party_freertos != "") {
  config("disable_warnings") {
    cflags = [ "-Wno-error=unused-parameter" ]
    visibility = [ ":*" ]
  }

  config("public_includes") {
    include_dirs = [ "Source/include" ]
    visibility = [ ":*" ]
  }

  pw_source_set("freertos") {
    public_configs = [ ":public_includes" ]
    allow_circular_includes_from = [ pw_third_party_freertos_PORT ]
    public_deps = [
      pw_third_party_freertos_CONFIG,
      pw_third_party_freertos_PORT,
    ]
    public = [
      "$dir_pw_third_party_freertos/Source/include/FreeRTOS.h",
      "$dir_pw_third_party_freertos/Source/include/StackMacros.h",
      "$dir_pw_third_party_freertos/Source/include/croutine.h",
      "$dir_pw_third_party_freertos/Source/include/deprecated_definitions.h",
      "$dir_pw_third_party_freertos/Source/include/event_groups.h",
      "$dir_pw_third_party_freertos/Source/include/list.h",
      "$dir_pw_third_party_freertos/Source/include/message_buffer.h",
      "$dir_pw_third_party_freertos/Source/include/mpu_prototypes.h",
      "$dir_pw_third_party_freertos/Source/include/mpu_wrappers.h",
      "$dir_pw_third_party_freertos/Source/include/portable.h",
      "$dir_pw_third_party_freertos/Source/include/projdefs.h",
      "$dir_pw_third_party_freertos/Source/include/queue.h",
      "$dir_pw_third_party_freertos/Source/include/semphr.h",
      "$dir_pw_third_party_freertos/Source/include/stack_macros.h",
      "$dir_pw_third_party_freertos/Source/include/stream_buffer.h",
      "$dir_pw_third_party_freertos/Source/include/task.h",
      "$dir_pw_third_party_freertos/Source/include/timers.h",
    ]
    configs = [ ":disable_warnings" ]
    sources = [
      "$dir_pw_third_party_freertos/Source/croutine.c",
      "$dir_pw_third_party_freertos/Source/event_groups.c",
      "$dir_pw_third_party_freertos/Source/list.c",
      "$dir_pw_third_party_freertos/Source/queue.c",
      "$dir_pw_third_party_freertos/Source/stream_buffer.c",
      "$dir_pw_third_party_freertos/Source/tasks.c",
      "$dir_pw_third_party_freertos/Source/timers.c",
    ]
  }
} else {
  group("freertos") {
  }
}
