# 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_assert",
    "$dir_pw_interrupt:context",
    "$dir_pw_sync:thread_notification.facade",
    "$dir_pw_third_party/freertos",
  ]
  sources = [ "thread_notification.cc" ]
  deps = [ ":config" ]
}

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