# 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/error.gni")
import("$dir_pw_build/module_config.gni")
import("$dir_pw_build/target_types.gni")
import("$dir_pw_chrono/backend.gni")
import("$dir_pw_docgen/docs.gni")

declare_args() {
  # The build target that overrides the default configuration options for this
  # module. This should point to a source set that provides defines through a
  # public config (which may -include a file or add defines directly).
  pw_sync_freertos_CONFIG = pw_build_DEFAULT_MODULE_CONFIG
}

config("public_include_path") {
  include_dirs = [ "public" ]
  visibility = [ ":*" ]
}

config("backend_config") {
  include_dirs = [ "public_overrides" ]
  visibility = [ ":*" ]
}

pw_source_set("config") {
  public = [ "public/pw_sync_freertos/config.h" ]
  public_configs = [ ":public_include_path" ]
  public_deps = [
    "$dir_pw_third_party/freertos",
    pw_sync_freertos_CONFIG,
  ]
}

pw_build_assert("check_system_clock_backend") {
  condition =
      pw_chrono_SYSTEM_CLOCK_BACKEND == "" ||
      pw_chrono_SYSTEM_CLOCK_BACKEND == "$dir_pw_chrono_freertos:system_clock"
  message = "The FreeRTOS pw_sync backends only work with the FreeRTOS " +
            "pw::chrono::SystemClock backend."
  visibility = [ ":*" ]
}

# This target provides the backend for pw::sync::BinarySemaphore.
pw_source_set("binary_semaphore") {
  public_configs = [
    ":public_include_path",
    ":backend_config",
  ]
  public = [
    "public/pw_sync_freertos/binary_semaphore_inline.h",
    "public/pw_sync_freertos/binary_semaphore_native.h",
    "public_overrides/pw_sync_backend/binary_semaphore_inline.h",
    "public_overrides/pw_sync_backend/binary_semaphore_native.h",
  ]
  public_deps = [
    "$dir_pw_assert",
    "$dir_pw_chrono:system_clock",
    "$dir_pw_chrono_freertos:system_clock",
    "$dir_pw_interrupt:context",
    "$dir_pw_third_party/freertos",
  ]
  sources = [ "binary_semaphore.cc" ]
  deps = [
    ":check_system_clock_backend",
    "$dir_pw_sync:binary_semaphore.facade",
  ]
}

# This target provides the backend for pw::sync::CountingSemaphore.
pw_source_set("counting_semaphore") {
  public_configs = [
    ":public_include_path",
    ":backend_config",
  ]
  public = [
    "public/pw_sync_freertos/counting_semaphore_inline.h",
    "public/pw_sync_freertos/counting_semaphore_native.h",
    "public_overrides/pw_sync_backend/counting_semaphore_inline.h",
    "public_overrides/pw_sync_backend/counting_semaphore_native.h",
  ]
  public_deps = [
    "$dir_pw_assert",
    "$dir_pw_chrono:system_clock",
    "$dir_pw_chrono_freertos:system_clock",
    "$dir_pw_interrupt:context",
    "$dir_pw_third_party/freertos",
  ]
  sources = [ "counting_semaphore.cc" ]
  deps = [
    ":check_system_clock_backend",
    "$dir_pw_sync:counting_semaphore.facade",
  ]
}

# This target provides the backend for pw::sync::Mutex.
pw_source_set("mutex") {
  public_configs = [
    ":public_include_path",
    ":backend_config",
  ]
  public = [
    "public/pw_sync_freertos/mutex_inline.h",
    "public/pw_sync_freertos/mutex_native.h",
    "public_overrides/pw_sync_backend/mutex_inline.h",
    "public_overrides/pw_sync_backend/mutex_native.h",
  ]
  public_deps = [
    "$dir_pw_assert",
    "$dir_pw_interrupt:context",
    "$dir_pw_sync:mutex.facade",
    "$dir_pw_third_party/freertos",
  ]
}

config("public_overrides_thread_notification_include_path") {
  include_dirs = [ "public_overrides/thread_notification" ]
  visibility = [ ":thread_notification" ]
}

# This target provides the backend for pw::sync::ThreadNotification based on
# task notifications.
pw_source_set("thread_notification") {
  public_configs = [
    ":public_include_path",
    ":public_overrides_thread_notification_include_path",
  ]
  public = [
    "public/pw_sync_freertos/thread_notification_inline.h",
    "public/pw_sync_freertos/thread_notification_native.h",
    "public_overrides/thread_notification/pw_sync_backend/thread_notification_inline.h",
    "public_overrides/thread_notification/pw_sync_backend/thread_notification_native.h",
  ]
  public_deps = [
    "$dir_pw_interrupt:context",
    "$dir_pw_sync:thread_notification.facade",
    "$dir_pw_third_party/freertos",
  ]
  sources = [ "thread_notification.cc" ]
  deps = [
    ":config",
    dir_pw_assert,
  ]
}

config("public_overrides_timed_thread_notification_include_path") {
  include_dirs = [ "public_overrides/timed_thread_notification" ]
  visibility = [ ":timed_thread_notification" ]
}

# This target provides the backend for pw::sync::TimedThreadNotification based
# on task notifications.
pw_source_set("timed_thread_notification") {
  public_configs = [
    ":public_include_path",
    ":public_overrides_timed_thread_notification_include_path",
  ]
  public = [
    "public/pw_sync_freertos/timed_thread_notification_inline.h",
    "public_overrides/timed_thread_notification/pw_sync_backend/timed_thread_notification_inline.h",
  ]
  public_deps = [
    ":thread_notification",
    "$dir_pw_chrono:system_clock",
    "$dir_pw_sync:timed_thread_notification.facade",
  ]
  sources = [ "timed_thread_notification.cc" ]
  deps = [
    ":check_system_clock_backend",
    ":config",
    "$dir_pw_assert",
    "$dir_pw_chrono_freertos:system_clock",
    "$dir_pw_interrupt:context",
    "$dir_pw_third_party/freertos",
  ]
}

# This target provides the backend for pw::sync::TimedMutex.
pw_source_set("timed_mutex") {
  public_configs = [
    ":public_include_path",
    ":backend_config",
  ]
  public = [
    "public/pw_sync_freertos/timed_mutex_inline.h",
    "public_overrides/pw_sync_backend/timed_mutex_inline.h",
  ]
  public_deps = [
    "$dir_pw_chrono:system_clock",
    "$dir_pw_sync:timed_mutex.facade",
  ]
  sources = [ "timed_mutex.cc" ]
  deps = [
    ":check_system_clock_backend",
    "$dir_pw_assert",
    "$dir_pw_chrono_freertos:system_clock",
    "$dir_pw_interrupt:context",
    "$dir_pw_third_party/freertos",
  ]
}

# This target provides the backend for pw::sync::InterruptSpinLock.
pw_source_set("interrupt_spin_lock") {
  public_configs = [
    ":public_include_path",
    ":backend_config",
  ]
  public = [
    "public/pw_sync_freertos/interrupt_spin_lock_inline.h",
    "public/pw_sync_freertos/interrupt_spin_lock_native.h",
    "public_overrides/pw_sync_backend/interrupt_spin_lock_inline.h",
    "public_overrides/pw_sync_backend/interrupt_spin_lock_native.h",
  ]
  public_deps = [ "$dir_pw_third_party/freertos" ]
  sources = [ "interrupt_spin_lock.cc" ]
  deps = [
    "$dir_pw_assert",
    "$dir_pw_interrupt:context",
    "$dir_pw_sync:interrupt_spin_lock.facade",
    "$dir_pw_third_party/freertos",
  ]
}

pw_doc_group("docs") {
  sources = [ "docs.rst" ]
}
