# 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. import("//build_overrides/pigweed.gni") import("$dir_pw_build/module_config.gni") import("$dir_pw_docgen/docs.gni") import("$dir_pw_protobuf_compiler/proto.gni") import("$dir_pw_rpc/internal/integration_test_ports.gni") import("$dir_pw_thread/backend.gni") import("$dir_pw_toolchain/generate_toolchain.gni") import("$dir_pw_unit_test/test.gni") declare_args() { # The build target that overrides the default configuration options for this # module. This should point to a source set that provides defines through a # public config (which may -include a file or add defines directly). pw_transfer_CONFIG = pw_build_DEFAULT_MODULE_CONFIG } config("public_include_path") { include_dirs = [ "public" ] visibility = [ ":*" ] } pw_source_set("config") { public = [ "public/pw_transfer/internal/config.h" ] public_configs = [ ":public_include_path" ] public_deps = [ "$dir_pw_chrono:system_timer", pw_transfer_CONFIG, ] visibility = [ ":*" ] } pw_source_set("pw_transfer") { public_configs = [ ":public_include_path" ] public_deps = [ ":core", ":proto.raw_rpc", "$dir_pw_sync:mutex", dir_pw_assert, dir_pw_bytes, dir_pw_result, dir_pw_status, dir_pw_stream, ] deps = [ dir_pw_log ] public = [ "public/pw_transfer/transfer.h" ] sources = [ "transfer.cc" ] } pw_source_set("client") { public_configs = [ ":public_include_path" ] public_deps = [ ":core", ":proto.raw_rpc", dir_pw_assert, dir_pw_function, dir_pw_stream, ] deps = [ dir_pw_log ] public = [ "public/pw_transfer/client.h" ] sources = [ "client.cc" ] } pw_source_set("core") { public_configs = [ ":public_include_path" ] public_deps = [ ":config", ":proto.pwpb", "$dir_pw_chrono:system_clock", "$dir_pw_preprocessor", "$dir_pw_rpc:client", "$dir_pw_rpc/raw:client_api", "$dir_pw_rpc/raw:server_api", "$dir_pw_sync:binary_semaphore", "$dir_pw_sync:timed_thread_notification", "$dir_pw_thread:thread_core", dir_pw_assert, dir_pw_bytes, dir_pw_result, dir_pw_span, dir_pw_status, dir_pw_stream, ] deps = [ "$dir_pw_log:rate_limited", dir_pw_log, dir_pw_protobuf, dir_pw_varint, ] public = [ "public/pw_transfer/handler.h", "public/pw_transfer/rate_estimate.h", "public/pw_transfer/transfer_thread.h", ] sources = [ "chunk.cc", "client_context.cc", "context.cc", "public/pw_transfer/internal/chunk.h", "public/pw_transfer/internal/client_context.h", "public/pw_transfer/internal/context.h", "public/pw_transfer/internal/event.h", "public/pw_transfer/internal/protocol.h", "public/pw_transfer/internal/server_context.h", "rate_estimate.cc", "server_context.cc", "transfer_thread.cc", ] friend = [ ":*" ] visibility = [ ":*" ] } pw_source_set("atomic_file_transfer_handler") { public_configs = [ ":public_include_path" ] public = [ "public/pw_transfer/atomic_file_transfer_handler.h" ] sources = [ "atomic_file_transfer_handler.cc" ] public_deps = [ ":core", "$dir_pw_stream:std_file_stream", ] deps = [ ":atomic_file_transfer_handler_internal", dir_pw_log, ] } pw_source_set("atomic_file_transfer_handler_internal") { sources = [ "pw_transfer_private/filename_generator.h" ] friend = [ ":*" ] visibility = [ ":*" ] } pw_source_set("test_helpers") { public_deps = [ ":core", dir_pw_containers, ] sources = [ "pw_transfer_private/chunk_testing.h" ] friend = [ ":*" ] visibility = [ ":*" ] } pw_proto_library("proto") { sources = [ "transfer.proto" ] python_package = "py" prefix = "pw_transfer" } pw_test_group("tests") { tests = [ ":chunk_test", ":client_test", ":transfer_thread_test", ":handler_test", ":atomic_file_transfer_handler_test", ":transfer_test", ] } # TODO: b/235345886 - Fix transfer tests on Windows and non-host builds. _is_host_toolchain = defined(pw_toolchain_SCOPE.is_host_toolchain) && pw_toolchain_SCOPE.is_host_toolchain not_needed([ "_is_host_toolchain" ]) pw_test("chunk_test") { enable_if = pw_thread_THREAD_BACKEND != "" sources = [ "chunk_test.cc" ] deps = [ ":core" ] } pw_test("handler_test") { enable_if = pw_thread_THREAD_BACKEND != "" && _is_host_toolchain && host_os != "win" sources = [ "handler_test.cc" ] deps = [ ":pw_transfer" ] } pw_test("atomic_file_transfer_handler_test") { enable_if = pw_thread_THREAD_BACKEND != "" && _is_host_toolchain && host_os != "win" sources = [ "atomic_file_transfer_handler_test.cc" ] deps = [ ":atomic_file_transfer_handler", ":atomic_file_transfer_handler_internal", ":pw_transfer", "$dir_pw_random", "$dir_pw_string", ] } pw_test("transfer_test") { enable_if = pw_thread_THREAD_BACKEND == "$dir_pw_thread_stl:thread" && _is_host_toolchain && host_os != "win" sources = [ "transfer_test.cc" ] deps = [ ":proto.pwpb", ":pw_transfer", ":test_helpers", "$dir_pw_assert", "$dir_pw_containers", "$dir_pw_rpc:test_helpers", "$dir_pw_rpc/raw:test_method_context", "$dir_pw_thread:thread", ] } pw_test("transfer_thread_test") { enable_if = pw_thread_THREAD_BACKEND == "$dir_pw_thread_stl:thread" && pw_unit_test_BACKEND == "$dir_pw_unit_test:light" sources = [ "transfer_thread_test.cc" ] deps = [ ":core", ":proto.raw_rpc", ":pw_transfer", ":test_helpers", "$dir_pw_rpc:test_helpers", "$dir_pw_rpc/raw:client_testing", "$dir_pw_rpc/raw:test_method_context", "$dir_pw_thread:thread", ] } pw_test("client_test") { enable_if = pw_thread_THREAD_BACKEND == "$dir_pw_thread_stl:thread" sources = [ "client_test.cc" ] deps = [ ":client", ":test_helpers", "$dir_pw_rpc:test_helpers", "$dir_pw_rpc/raw:client_testing", "$dir_pw_thread:sleep", "$dir_pw_thread:thread", ] } pw_doc_group("docs") { sources = [ "api.rst", "docs.rst", ] inputs = [ "transfer.proto", "read.svg", "write.svg", ] } pw_executable("integration_test_server") { sources = [ "integration_test/server.cc" ] deps = [ ":pw_transfer", "$dir_pw_assert", "$dir_pw_rpc/system_server", "$dir_pw_rpc/system_server:socket", "$dir_pw_stream", "$dir_pw_stream:std_file_stream", "$dir_pw_thread:thread", "$dir_pw_thread_stl:thread", dir_pw_log, ] } pw_executable("integration_test_client") { testonly = pw_unit_test_TESTONLY sources = [ "integration_test/client.cc" ] deps = [ ":client", "$dir_pw_rpc:integration_testing", "$dir_pw_stream:std_file_stream", "$dir_pw_sync:binary_semaphore", "$dir_pw_thread:thread", dir_pw_assert, dir_pw_log, dir_pw_status, ] } # TODO: b/228516801 - Make this actually work; this is just a placeholder. pw_python_script("integration_test_python_client") { sources = [ "integration_test/python_client.py" ] } # TODO: b/228516801 - Make this actually work; this is just a placeholder. pw_python_script("integration_test_proxy") { sources = [ "integration_test/proxy.py" ] } # TODO: b/228516801 - Make this actually work; this is just a placeholder. pw_python_script("integration_test_proxy_test") { sources = [ "integration_test/proxy_test.py" ] } # TODO: b/228516801 - Make this actually work; this is just a placeholder. pw_python_script("integration_test_fixture") { sources = [ "integration_test/test_fixture.py" ] } # TODO: b/228516801 - Make this actually work; this is just a placeholder. pw_python_script("cross_language_small_test") { sources = [ "integration_test/cross_language_small_test.py" ] } # TODO: b/228516801 - Make this actually work; this is just a placeholder. pw_python_script("cross_language_medium_read_test") { sources = [ "integration_test/cross_language_medium_read_test.py" ] } # TODO: b/228516801 - Make this actually work; this is just a placeholder. pw_python_script("cross_language_medium_write_test") { sources = [ "integration_test/cross_language_medium_write_test.py" ] } # TODO: b/228516801 - Make this actually work; this is just a placeholder. pw_python_script("cross_language_large_read_test") { sources = [ "integration_test/cross_language_large_read_test.py" ] } # TODO: b/228516801 - Make this actually work; this is just a placeholder. pw_python_script("cross_language_large_write_test") { sources = [ "integration_test/cross_language_large_write_test.py" ] } # TODO: b/228516801 - Make this actually work; this is just a placeholder. pw_python_script("multi_transfer_test") { sources = [ "integration_test/multi_transfer_test.py" ] } # TODO: b/228516801 - Make this actually work; this is just a placeholder. pw_python_script("expected_errors_test") { sources = [ "integration_test/expected_errors_test.py" ] } # TODO: b/228516801 - Make this actually work; this is just a placeholder. pw_python_script("legacy_binaries_test") { sources = [ "integration_test/legacy_binaries_test.py" ] }