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

include($ENV{PW_ROOT}/pw_build/pigweed.cmake)

# WARNING: Many of the dependencies in this file are missing and need to be
# added/updated. This is provided as a starting point, but currently does not
# work.

pw_add_module_library("pw_system.config"
  HEADERS
    "public/pw_system/config.h"
)

pw_add_module_library("pw_system.log"
  PUBLIC_DEPS
    "pw_system.config"
    "pw_log_rpc.log_service"
    "pw_log_rpc.rpc_log_drain_thread"
  PRIVATE_DEPS
    "pw_system.rpc"
    "pw_bytes"
    "pw_chrono.system_clock"
    "pw_log"
    "pw_log.proto_utils"
    "pw_log_rpc.rpc_log_drain"
    "pw_log_tokenized.metadata"
    "pw_multisink"
    "pw_result"
    "pw_sync.interrupt_spin_lock"
    "pw_sync.lock_annotations"
    "pw_sync.mutex"
    "pw_tokenizer"
    "pw_tokenizer.global_handler_with_payload.facade"
  SOURCES
    "log.cc"
  HEADERS
    "pw_system_private/log.h"
)

pw_add_module_library("pw_system.rpc"
  PUBLIC_DEPS
    "pw_system.config"
    "pw_rpc.system_server.facade"
    "pw_threadthread_core"
  PRIVATE_DEPS
    "pw_system.io"
    "pw_system.target_io"
    "pw_assert"
    "pw_hdlc.pw_rpc"
    "pw_hdlc.rpc_channel_output"
    "pw_rpc.synchronized_channel_output"
    "pw_sync.mutex"
  SOURCES
    "rpc.cc"
  HEADERS
    "pw_system_private/rpc.h"
)

pw_add_module_library("pw_system.io"
  HEADERS
    "public/pw_system/io.h"
  PUBLIC_DEPS
    "pw_stream"
)

pw_add_module_library("pw_system.init"
  PRIVATE_DEPS
        "pw_system.log"
        "pw_system.rpc"
        "pw_rpc.nanopb.echo_service"
        "pw_thread.thread"
  SOURCES
    "init.cc"
  HEADERS
    "public/pw_system/init.h"
)

pw_add_module_library("pw_system.work_queue"
  PRIVATE_DEPS
    "pw_work_queue"
  SOURCES
    "work_queue.cc"
  HEADERS
    "public/pw_system/work_queue.h"
)

pw_add_module_library("pw_system.target_io"
  PRIVATE_DEPS
    "pw_system.io"
    "pw_stream"
    "pw_stream.sys_io_stream"
  SOURCES
    "target_io.cc"
)

pw_add_module_library("pw_system.target_hooks"
  PUBLIC_DEPS
    "pw_thread"
  HEADERS
    "public/pw_system/target_hooks.h"
)

pw_add_module_library("pw_system.stl_target_hooks"
  PRIVATE_DEPS
    "pw_thread.sleep"
    "pw_thread.thread"
    "pw_thread_stl.thread"

  SOURCES
    "stl_target_hooks.cc"
)

pw_add_module_library("pw_system.freertos_target_hooks"
  SOURCES
    "freertos_target_hooks.cc"
  PRIVATE_DEPS
    "pw_thread.thread"
    "pw_thread_freertos.thread"
    # TODO(pwbug/317): This should depend on FreeRTOS but our third parties
    # currently do not have CMake support.
)

pw_add_module_library("pw_system.system_example"
  PRIVATE_DEPS
    "pw_system.init"
    "pw_system.io"
    "pw_system.target_hooks"
    "pw_stream"
    "pw_stream.sys_io_stream"
  SOURCES
    "example_user_app_init.cc"
)
