# 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.

load("@bazel_skylib//rules:run_binary.bzl", "run_binary")
load(
    "//pw_build:pigweed.bzl",
    "pw_cc_facade",
    "pw_cc_library",
    "pw_cc_test",
)

package(default_visibility = ["//visibility:public"])

licenses(["notice"])

pw_cc_library(
    name = "id_headers",
    hdrs = [
        "id_public_overrides/pw_thread_backend/id_inline.h",
        "id_public_overrides/pw_thread_backend/id_native.h",
        "public/pw_thread_freertos/id_inline.h",
        "public/pw_thread_freertos/id_native.h",
    ],
    includes = [
        "id_public_overrides",
        "public",
    ],
    deps = [
        "//pw_interrupt:context",
        "@freertos",
    ],
)

pw_cc_library(
    name = "id",
    target_compatible_with = [
        "//pw_build/constraints/rtos:freertos",
    ],
    deps = [
        ":id_headers",
        "//pw_thread:id_facade",
    ],
)

pw_cc_library(
    name = "sleep_headers",
    hdrs = [
        "public/pw_thread_freertos/sleep_inline.h",
        "sleep_public_overrides/pw_thread_backend/sleep_inline.h",
    ],
    includes = [
        "public",
        "sleep_public_overrides",
    ],
    deps = [
        "//pw_chrono:system_clock",
    ],
)

pw_cc_library(
    name = "sleep",
    srcs = [
        "sleep.cc",
    ],
    target_compatible_with = [
        "//pw_build/constraints/rtos:freertos",
    ],
    deps = [
        ":sleep_headers",
        "//pw_assert",
        "//pw_chrono:system_clock",
        "//pw_chrono_freertos:system_clock_headers",
        "//pw_thread:id",
        "//pw_thread:sleep_facade",
    ],
)

# This target provides the FreeRTOS specific headers needs for thread creation.
pw_cc_library(
    name = "thread_headers",
    hdrs = [
        "public/pw_thread_freertos/config.h",
        "public/pw_thread_freertos/context.h",
        "public/pw_thread_freertos/options.h",
        "public/pw_thread_freertos/thread_inline.h",
        "public/pw_thread_freertos/thread_native.h",
        "thread_public_overrides/pw_thread_backend/thread_inline.h",
        "thread_public_overrides/pw_thread_backend/thread_native.h",
    ],
    includes = [
        "public",
        "thread_public_overrides",
    ],
    target_compatible_with = [
        "//pw_build/constraints/rtos:freertos",
    ],
    deps = [
        ":id",
        "//pw_assert",
        "//pw_string",
        "//pw_sync:binary_semaphore",
        "//pw_thread:thread_facade",
    ],
)

pw_cc_library(
    name = "thread",
    srcs = [
        "thread.cc",
    ],
    target_compatible_with = [
        "//pw_build/constraints/rtos:freertos",
    ],
    deps = [
        ":id",
        ":thread_headers",
        "//pw_assert",
    ],
)

pw_cc_library(
    name = "dynamic_test_threads",
    srcs = [
        "dynamic_test_threads.cc",
    ],
    target_compatible_with = [
        "//pw_build/constraints/rtos:freertos",
    ],
    deps = [
        "//pw_chrono:system_clock",
        "//pw_thread:sleep",
        "//pw_thread:test_threads_header",
        "//pw_thread:thread_facade",
    ],
)

pw_cc_test(
    name = "dynamic_thread_backend_test",
    # TODO(b/271465588): Get this test to build.
    tags = ["manual"],
    deps = [
        ":dynamic_test_threads",
        "//pw_thread:thread_facade_test",
    ],
)

pw_cc_library(
    name = "static_test_threads",
    srcs = [
        "static_test_threads.cc",
    ],
    target_compatible_with = [
        "//pw_build/constraints/rtos:freertos",
    ],
    deps = [
        "//pw_chrono:system_clock",
        "//pw_thread:sleep",
        "//pw_thread:test_threads_header",
        "//pw_thread:thread_facade",
    ],
)

pw_cc_test(
    name = "static_thread_backend_test",
    # TODO(b/271465588): Get this test to build.
    tags = ["manual"],
    deps = [
        ":static_test_threads",
        "//pw_thread:thread_facade_test",
    ],
)

pw_cc_library(
    name = "yield_headers",
    hdrs = [
        "public/pw_thread_freertos/yield_inline.h",
        "yield_public_overrides/pw_thread_backend/yield_inline.h",
    ],
    includes = [
        "public",
        "yield_public_overrides",
    ],
    target_compatible_with = [
        "//pw_build/constraints/rtos:freertos",
    ],
    deps = [
        "@freertos",
    ],
)

pw_cc_library(
    name = "yield",
    deps = [
        ":yield_headers",
        "//pw_thread:yield_facade",
    ],
)

pw_cc_library(
    name = "thread_iteration",
    srcs = [
        "pw_thread_freertos_private/thread_iteration.h",
        "thread_iteration.cc",
    ],
    target_compatible_with = [
        "//pw_build/constraints/rtos:freertos",
    ],
    deps = [
        ":freertos_tasktcb",
        "//pw_function",
        "//pw_span",
        "//pw_status",
        "//pw_thread:thread_info",
        "//pw_thread:thread_iteration_facade",
        "//pw_thread_freertos:util",
    ],
)

pw_cc_test(
    name = "thread_iteration_test",
    srcs = [
        "pw_thread_freertos_private/thread_iteration.h",
        "thread_iteration_test.cc",
    ],
    # TODO(b/271465588): Get this test to build.
    tags = ["manual"],
    deps = [
        ":freertos_tasktcb",
        ":static_test_threads",
        ":thread_iteration",
        "//pw_bytes",
        "//pw_span",
        "//pw_string:builder",
        "//pw_string:util",
        "//pw_sync:thread_notification",
        "//pw_thread:test_threads_header",
        "//pw_thread:thread",
        "//pw_thread:thread_info",
        "//pw_thread:thread_iteration",
    ],
)

pw_cc_library(
    name = "util",
    srcs = [
        "util.cc",
    ],
    hdrs = [
        "public/pw_thread_freertos/util.h",
    ],
    includes = ["public"],
    target_compatible_with = [
        "//pw_build/constraints/rtos:freertos",
    ],
    deps = [
        "//pw_function",
        "//pw_log",
        "//pw_status",
        "@freertos",
    ],
)

pw_cc_library(
    name = "snapshot",
    srcs = [
        "snapshot.cc",
    ],
    hdrs = [
        "public/pw_thread_freertos/snapshot.h",
    ],
    # TODO(b/269204725): Put this in the toolchain configuration instead.  I
    # would like to say `copts = ["-Wno-c++20-designator"]`, but arm-gcc tells
    # me that's an "unrecognized command line option"; I think it may be a
    # clang-only flag.
    copts = ["-Wno-pedantic"],
    target_compatible_with = [
        "//pw_build/constraints/rtos:freertos",
    ],
    deps = [
        ":freertos_tasktcb",
        ":util",
        "//pw_function",
        "//pw_log",
        "//pw_protobuf",
        "//pw_status",
        "//pw_thread:snapshot",
        "//pw_thread:thread_cc.pwpb",
    ],
)

pw_cc_facade(
    name = "freertos_tasktcb_facade",
    hdrs = [
        "public/pw_thread_freertos/freertos_tsktcb.h",
    ],
    includes = ["public"],
    target_compatible_with = [
        "//pw_build/constraints/rtos:freertos",
    ],
)

pw_cc_library(
    name = "freertos_tasktcb",
    hdrs = [
        ":generate_freertos_tsktcb",
    ],
    includes = ["thread_public_overrides"],
    deps = [
        ":freertos_tasktcb_facade",
    ],
)

run_binary(
    name = "generate_freertos_tsktcb",
    srcs = [
        "@freertos//:tasks.c",
    ],
    outs = [":thread_public_overrides/pw_thread_freertos_backend/freertos_tsktcb.h"],
    args = [
        "--freertos-tasks-c=$(location @freertos//:tasks.c)",
        "--output=$(location :thread_public_overrides/pw_thread_freertos_backend/freertos_tsktcb.h)",
    ],
    tool = "//pw_thread_freertos/py:generate_freertos_tsktcb",
)
