# Copyright 2021 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_binary",
    "pw_cc_library",
)

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

licenses(["notice"])

pw_cc_library(
    name = "config",
    hdrs = [
        "public/pw_system/config.h",
    ],
)

pw_cc_library(
    name = "log",
    srcs = [
        "log.cc",
    ],
    hdrs = [
        "pw_system_private/log.h",
    ],
    includes = ["public"],
    deps = [
        ":logger",
        ":rpc",
        "//pw_bytes",
        "//pw_chrono:system_clock",
        "//pw_log",
        "//pw_log:proto_utils",
        "//pw_log_rpc:log_service",
        "//pw_log_rpc:rpc_log_drain",
        "//pw_log_rpc:rpc_log_drain_thread",
        "//pw_log_tokenized:metadata",
        "//pw_multisink",
        "//pw_result",
        "//pw_sync:interrupt_spin_lock",
        "//pw_sync:lock_annotations",
        "//pw_sync:mutex",
        "//pw_tokenizer",
    ],
)

pw_cc_library(
    name = "rpc",
    srcs = [
        "rpc.cc",
    ],
    hdrs = [
        "pw_system_private/rpc.h",
    ],
    includes = ["public"],
    deps = [
        ":io",
        ":target_io",
        "//pw_assert",
        "//pw_hdlc:pw_rpc",
        "//pw_hdlc:rpc_channel_output",
        "//pw_rpc:synchronized_channel_output",
        "//pw_rpc/system_server:facade",
        "//pw_sync:mutex",
        "//pw_thread:thread_core",
    ],
)

pw_cc_library(
    name = "io",
    hdrs = [
        "public/pw_system/io.h",
    ],
    deps = [
        "//pw_stream",
    ],
)

pw_cc_library(
    name = "init",
    srcs = [
        "init.cc",
    ],
    hdrs = [
        "public/pw_system/init.h",
    ],
    includes = ["public"],
    deps = [
        ":log",
        ":rpc",
        "//pw_rpc/nanopb:echo_service",
        "//pw_thread:thread",
    ],
)

pw_cc_library(
    name = "work_queue",
    srcs = [
        "work_queue.cc",
    ],
    hdrs = [
        "public/pw_system/work_queue.h",
    ],
    includes = ["public"],
    deps = [
        "//pw_work_queue",
    ],
)

pw_cc_library(
    name = "target_io",
    srcs = [
        "target_io.cc",
    ],
    includes = ["public"],
    deps = [
        ":io",
        "//pw_stream",
        "//pw_stream:sys_io_stream",
    ],
)

pw_cc_library(
    name = "target_hooks",
    hdrs = [
        "public/pw_system/target_hooks.h",
    ],
    includes = ["public"],
    deps = [
        "//pw_thread:thread",
    ],
)

pw_cc_library(
    name = "stl_target_hooks",
    srcs = [
        "stl_target_hooks.cc",
    ],
    deps = [
        "//pw_thread:sleep",
        "//pw_thread:thread",
        "//pw_thread_stl:thread",
    ],
)

pw_cc_library(
    name = "freertos_target_hooks",
    srcs = [
        "freertos_target_hooks.cc",
    ],

    # TODO(pwbug/317): This should depend on FreeRTOS but our third parties
    # currently do not have Bazel support.
    deps = [
        "//pw_thread:thread",
        "//pw_thread_freertos:thread",
    ],
)

pw_cc_binary(
    name = "system_example",
    srcs = ["example_user_app_init.cc"],
    deps = [
        ":init",
        ":io",
        ":target_hooks",
        "//pw_stream",
        "//pw_stream:sys_io_stream",
    ],
)
