# 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")
import("$dir_pw_sync/backend.gni")
import("$dir_pw_thread/backend.gni")
import("$dir_pw_unit_test/test.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",
  ]
}

# 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",
  ]
}

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 = [
    "$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::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",
  ]
}

pw_test_group("tests") {
  tests = [
    ":thread_notification_test_with_static_threads",
    ":timed_thread_notification_test_with_static_threads",
  ]
}

# You can instantiate this with your own provided "$dir_pw_thread:test_threads",
# see ":thread_notification_test_with_static_threads" below as an example.
pw_source_set("thread_notification_test") {
  sources = [ "thread_notification_test.cc" ]
  deps = [
    "$dir_pw_chrono:system_clock",
    "$dir_pw_sync:thread_notification",
    "$dir_pw_third_party/freertos",
    "$dir_pw_thread:sleep",
    "$dir_pw_thread:test_threads",
    "$dir_pw_thread:thread",
    "$dir_pw_unit_test",
  ]
}

pw_test("thread_notification_test_with_static_threads") {
  enable_if = pw_sync_THREAD_NOTIFICATION_BACKEND ==
              "$dir_pw_sync_freertos:thread_notification" &&
              pw_chrono_SYSTEM_CLOCK_BACKEND != "" &&
              pw_thread_THREAD_BACKEND != "" && pw_thread_SLEEP_BACKEND != ""
  deps = [
    ":thread_notification_test",
    "$dir_pw_thread_freertos:static_test_threads",
  ]
}

# You can instantiate this with your own provided "$dir_pw_thread:test_threads",
# see ":timed_thread_notification_test_with_static_threads" below as an example.
pw_source_set("timed_thread_notification_test") {
  sources = [ "timed_thread_notification_test.cc" ]
  deps = [
    "$dir_pw_chrono:system_clock",
    "$dir_pw_sync:timed_thread_notification",
    "$dir_pw_third_party/freertos",
    "$dir_pw_thread:sleep",
    "$dir_pw_thread:test_threads",
    "$dir_pw_thread:thread",
    "$dir_pw_unit_test",
  ]
}

pw_test("timed_thread_notification_test_with_static_threads") {
  enable_if = pw_sync_TIMED_THREAD_NOTIFICATION_BACKEND ==
              "$dir_pw_sync_freertos:timed_thread_notification" &&
              pw_chrono_SYSTEM_CLOCK_BACKEND != "" &&
              pw_thread_THREAD_BACKEND != "" && pw_thread_SLEEP_BACKEND != ""
  deps = [
    ":timed_thread_notification_test",
    "$dir_pw_thread_freertos:static_test_threads",
  ]
}

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