// Copyright 2023 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.

package {
    default_applicable_licenses: ["external_pigweed_license"],
}

cc_library_static {
    name: "pw_transfer_core",
    cpp_std: "c++20",
    vendor_available: true,
    host_supported: true,
    defaults: [
        "pw_android_common_backends",
        "pw_rpc_raw_defaults",
        "pw_rpc_defaults",
    ],
    srcs: [
        "chunk.cc",
        "client_context.cc",
        "context.cc",
        "rate_estimate.cc",
        "server_context.cc",
        "transfer_thread.cc",
    ],
    export_include_dirs: [
        "public",
    ],
    header_libs: [
        "pw_assert",
        "pw_chrono",
        "pw_log",
        "pw_sync",
        "pw_transfer_raw_rpc",
        "pw_transfer_pwpb",
    ],
    export_header_lib_headers: [
        "pw_transfer_raw_rpc",
        "pw_transfer_pwpb",
    ],
    static_libs: [
        "pw_containers",
        "pw_preprocessor",
        "pw_protobuf",
        "pw_result",
        "pw_span",
        "pw_status",
        "pw_stream",
        "pw_thread",
        "pw_varint",
    ],
    whole_static_libs: [
        "pw_log_rate_limited",
        "pw_sync.binary_semaphore_thread_notification",
    ],
}

cc_library_static {
    name: "pw_transfer",
    vendor_available: true,
    host_supported: true,
    defaults: [
        "pw_android_common_backends",
    ],
    srcs: [
        "transfer.cc",
    ],
    export_include_dirs: [
        "public",
    ],
    static_libs: [
        "pw_bytes",
        "pw_result",
        "pw_status",
        "pw_stream",
        "pw_transfer_core",
    ],
}

cc_library_static {
    name: "pw_transfer_client",
    vendor_available: true,
    host_supported: true,
    defaults: [
        "pw_android_common_backends",
    ],
    srcs: [
        "client.cc",
    ],
    export_include_dirs: [
        "public",
    ],
    static_libs: [
        "pw_function",
        "pw_stream",
        "pw_transfer_core",
    ],
}

genrule {
    name: "pw_transfer_proto_with_prefix",
    defaults: ["pw_rpc_add_prefix_to_proto"],
    srcs: ["transfer.proto"],
    out: ["pw_transfer/transfer.proto"],
}

genrule {
    name: "pw_transfer_raw_rpc_header",
    defaults: ["pw_rpc_generate_raw_rpc_header_with_prefix"],
    srcs: [":pw_transfer_proto_with_prefix"],
    out: ["pw_transfer/transfer.raw_rpc.pb.h"],
}

genrule {
    name: "pw_transfer_pwpb_rpc_header",
    defaults: ["pw_rpc_generate_pwpb_rpc_header_with_prefix"],
    srcs: [":pw_transfer_proto_with_prefix"],
    out: ["pw_transfer/transfer.rpc.pwpb.h"],
}

genrule {
    name: "pw_transfer_pwpb_proto_header",
    defaults: ["pw_rpc_generate_pwpb_proto_with_prefix"],
    srcs: [":pw_transfer_proto_with_prefix"],
    out: ["pw_transfer/transfer.pwpb.h"],
}

cc_library_headers {
    name: "pw_transfer_pwpb",
    cpp_std: "c++20",
    vendor_available: true,
    host_supported: true,
    generated_headers: [
        "pw_transfer_pwpb_proto_header",
        "pw_transfer_pwpb_rpc_header",
    ],
    export_generated_headers: [
        "pw_transfer_pwpb_proto_header",
        "pw_transfer_pwpb_rpc_header",
    ],
}

cc_library_headers {
    name: "pw_transfer_raw_rpc",
    cpp_std: "c++20",
    vendor_available: true,
    host_supported: true,
    generated_headers: [
        "pw_transfer_raw_rpc_header",
    ],
    export_generated_headers: [
        "pw_transfer_raw_rpc_header",
    ],
}
