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

# TODO(cachinchilla): Make the target provide this.
pw_cc_library(
    name = "target_io",
    srcs = [
        "target_io.cc",
    ],
    includes = ["public"],
    deps = [
        ":io",
        "//pw_stream",
        "//pw_stream:sys_io_stream",
    ],
)

# TODO(cachinchilla): Make the target provide this.
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",
    ],
)
