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

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

pw_add_library(pw_stream STATIC
  HEADERS
    public/pw_stream/memory_stream.h
    public/pw_stream/null_stream.h
    public/pw_stream/seek.h
    public/pw_stream/stream.h
  PUBLIC_INCLUDES
    public
  SOURCES
    memory_stream.cc
  PUBLIC_DEPS
    pw_assert
    pw_bytes
    pw_polyfill
    pw_result
    pw_span
    pw_status
    pw_toolchain._sibling_cast
)

pw_add_library(pw_stream.socket_stream STATIC
  HEADERS
    public/pw_stream/socket_stream.h
  PUBLIC_INCLUDES
    public
  PUBLIC_DEPS
    pw_stream
    pw_sync.mutex
  SOURCES
    socket_stream.cc
  PRIVATE_DEPS
    pw_log
    pw_string
)

pw_add_library(pw_stream.sys_io_stream INTERFACE
  HEADERS
    public/pw_stream/sys_io_stream.h
  PUBLIC_INCLUDES
    public
  PUBLIC_DEPS
    pw_stream
    pw_sys_io
)

pw_add_library(pw_stream.std_file_stream STATIC
  HEADERS
    public/pw_stream/std_file_stream.h
  PUBLIC_INCLUDES
    public
  PUBLIC_DEPS
    pw_stream
  SOURCES
    std_file_stream.cc
)

pw_add_library(pw_stream.interval_reader STATIC
  HEADERS
    public/pw_stream/interval_reader.h
  PUBLIC_INCLUDES
    public
  PUBLIC_DEPS
    pw_assert
    pw_status
    pw_stream
  SOURCES
    interval_reader.cc
)

pw_add_library(pw_stream.mpsc_stream STATIC
  HEADERS
    public/pw_stream/mpsc_stream.h
  PUBLIC_INCLUDES
    public
  PUBLIC_DEPS
    pw_assert
    pw_bytes
    pw_chrono.system_clock
    pw_containers.intrusive_list
    pw_function
    pw_status
    pw_stream
    pw_sync.lock_annotations
    pw_sync.mutex
    pw_sync.timed_thread_notification
  SOURCES
    mpsc_stream.cc
)

pw_add_test(pw_stream.memory_stream_test
  SOURCES
    memory_stream_test.cc
  PRIVATE_DEPS
    pw_stream
  GROUPS
    modules
    pw_stream
)

pw_add_test(pw_stream.null_stream_test
  SOURCES
    null_stream_test.cc
  PRIVATE_DEPS
    pw_stream
  GROUPS
    modules
    pw_stream
)

pw_add_test(pw_stream.seek_test
  SOURCES
    seek_test.cc
  PRIVATE_DEPS
    pw_stream
  GROUPS
    modules
    pw_stream
)

pw_add_test(pw_stream.stream_test
  SOURCES
    stream_test.cc
  PRIVATE_DEPS
    pw_stream
  GROUPS
    modules
    pw_stream
)

pw_add_test(pw_stream.interval_reader_test
  SOURCES
    interval_reader_test.cc
  PRIVATE_DEPS
    pw_stream.interval_reader
  GROUPS
    modules
    pw_stream
)

pw_add_test(pw_stream.mpsc_stream_test
  SOURCES
    mpsc_stream_test.cc
  PRIVATE_DEPS
    pw_stream.mpsc_stream
    pw_containers.vector
    pw_fuzzer.fuzztest
    pw_random
    pw_thread.thread
    pw_thread.test_thread_context
  GROUPS
    modules
    pw_stream
)
