# 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(
    "//pw_build:pigweed.bzl",
    "pw_cc_library",
    "pw_cc_test",
)
load(
    "//pw_build:selects.bzl",
    "TARGET_COMPATIBLE_WITH_HOST_SELECT",
)

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

licenses(["notice"])

pw_cc_library(
    name = "id",
    hdrs = [
        "id_public_overrides/pw_thread_backend/id_inline.h",
        "id_public_overrides/pw_thread_backend/id_native.h",
        "public/pw_thread_stl/id_inline.h",
        "public/pw_thread_stl/id_native.h",
    ],
    includes = [
        "id_public_overrides",
        "public",
    ],
    target_compatible_with = select(TARGET_COMPATIBLE_WITH_HOST_SELECT),
    deps = [
        "//pw_thread:id_facade",
    ],
)

pw_cc_library(
    name = "sleep",
    hdrs = [
        "public/pw_thread_stl/sleep_inline.h",
        "sleep_public_overrides/pw_thread_backend/sleep_inline.h",
    ],
    includes = [
        "public",
        "sleep_public_overrides",
    ],
    target_compatible_with = select(TARGET_COMPATIBLE_WITH_HOST_SELECT),
    deps = [
        "//pw_chrono:system_clock",
        "//pw_thread:sleep_facade",
    ],
)

pw_cc_library(
    name = "thread",
    hdrs = [
        "public/pw_thread_stl/options.h",
        "public/pw_thread_stl/thread_inline.h",
        "public/pw_thread_stl/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 = select(TARGET_COMPATIBLE_WITH_HOST_SELECT),
    deps = [
        "//pw_thread:thread_facade",
    ],
)

# This target provides a stub backend for pw::this_thread::thread_iteration.
# Iterating over child threads isn't supported by STL, so this only exists
# for portability reasons.
pw_cc_library(
    name = "thread_iteration",
    srcs = ["thread_iteration.cc"],
    deps = [
        "//pw_status",
        "//pw_thread:thread_iteration_facade",
    ],
)

pw_cc_library(
    name = "non_portable_test_thread_options",
    srcs = [
        "test_threads.cc",
    ],
    target_compatible_with = select(TARGET_COMPATIBLE_WITH_HOST_SELECT),
    deps = [
        "//pw_thread:non_portable_test_thread_options",
        "//pw_thread:thread_facade",
    ],
)

pw_cc_test(
    name = "thread_backend_test",
    target_compatible_with = select(TARGET_COMPATIBLE_WITH_HOST_SELECT),
    deps = [
        ":non_portable_test_thread_options",
        "//pw_thread:thread_facade_test",
    ],
)

pw_cc_library(
    name = "yield",
    hdrs = [
        "public/pw_thread_stl/yield_inline.h",
        "yield_public_overrides/pw_thread_backend/yield_inline.h",
    ],
    includes = [
        "public",
        "yield_public_overrides",
    ],
    target_compatible_with = select(TARGET_COMPATIBLE_WITH_HOST_SELECT),
    deps = [
        "//pw_thread:yield_facade",
    ],
)

pw_cc_library(
    name = "test_thread_context",
    hdrs = [
        "public/pw_thread_stl/test_thread_context_native.h",
        "test_thread_context_public_overrides/pw_thread_backend/test_thread_context_native.h",
    ],
    includes = [
        "public",
        "test_thread_context_public_overrides",
    ],
    target_compatible_with = select(TARGET_COMPATIBLE_WITH_HOST_SELECT),
    deps = [
        ":thread",
        "//pw_thread:test_thread_context_facade",
    ],
)
