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

package {
    default_applicable_licenses: ["external_pigweed_license"],
}

java_library {
    name: "pw_rpc_java_client",
    srcs: ["java/main/dev/pigweed/pw_rpc/*.java"],
    visibility: ["//visibility:public"],
    static_libs: [
        "pw_log_android_java",
        "pw_rpc_packet_proto_java_lite",
    ],
    libs: [
        "auto_value_annotations",
        "guava",
        "jsr305",
        "libprotobuf-java-lite",
    ],
    plugins: ["auto_value_plugin"],
    sdk_version: "current",
}

java_library_static {
    name: "pw_rpc_packet_proto_java_lite",
    host_supported: true,
    proto: {
        type: "lite",
    },
    srcs: ["internal/packet.proto"],
    sdk_version: "current",
}

java_library_static {
    name: "pw_rpc_echo_proto_java_lite",
    visibility: ["//visibility:public"],
    host_supported: true,
    proto: {
        type: "lite",
    },
    srcs: ["echo.proto"],
    sdk_version: "current",
}

cc_library_static {
    name: "pw_rpc",
    cpp_std: "c++2a",
    vendor_available: true,
    export_include_dirs: [
        "public",
    ],
    header_libs: [
        "fuschia_sdk_lib_fit",
        "fuschia_sdk_lib_stdcompat",
        "pw_assert_headers",
        "pw_assert_log_headers",
        "pw_function_headers",
        "pw_log_headers",
        "pw_log_null_headers",
        "pw_polyfill_headers",
        "pw_preprocessor_headers",
        "pw_result_headers",
        "pw_span_headers",
        "pw_sync_baremetal_headers",
        "pw_sync_headers",
        "pw_toolchain",
    ],
    export_header_lib_headers: [
        "fuschia_sdk_lib_fit",
        "fuschia_sdk_lib_stdcompat",
        "pw_assert_headers",
        "pw_assert_log_headers",
        "pw_function_headers",
        "pw_log_headers",
        "pw_log_null_headers",
        "pw_polyfill_headers",
        "pw_preprocessor_headers",
        "pw_result_headers",
        "pw_span_headers",
        "pw_sync_baremetal_headers",
        "pw_sync_headers",
    ],
    static_libs: [
        "pw_bytes",
        "pw_containers",
        "pw_protobuf",
        "pw_status",
        "pw_stream",
        "pw_string",
        "pw_varint",
    ],
    export_static_lib_headers: [
        "pw_bytes",
        "pw_containers",
        "pw_protobuf",
        "pw_status",
        "pw_stream",
        "pw_string",
        "pw_varint",
    ],
    generated_headers: [
        "pw_rpc_internal_packet_pwpb_h",
    ],
    export_generated_headers: [
        "pw_rpc_internal_packet_pwpb_h",
    ],
    srcs: [
        "call.cc",
        "channel.cc",
        "channel_list.cc",
        "client.cc",
        "client_call.cc",
        "endpoint.cc",
        "packet.cc",
        "packet_meta.cc",
        "server.cc",
        "server_call.cc",
        "service.cc",
    ],
    cflags: [
        "-DPW_RPC_USE_GLOBAL_MUTEX=0",
        "-DPW_RPC_CLIENT_STREAM_END_CALLBACK",
        "-DPW_RPC_DYNAMIC_ALLOCATION",
    ],
    host_supported: true,
}

genrule {
    name: "pw_rpc_internal_packet_pwpb_h",
    srcs: ["internal/packet.proto"],
    cmd: "python3 $(location pw_protobuf_compiler_py) " +
         "--out-dir=$$(dirname $(location pw_rpc/internal/packet.pwpb.h)) " +
         "--plugin-path=$(location pw_protobuf_plugin_py) " +
         "--compile-dir=$$(dirname $(in)) " +
         "--sources $(in) " +
         "--language pwpb " +
         "--no-experimental-proto3-optional " +
         "--protoc=$(location aprotoc) ",
    out: [
        "pw_rpc/internal/packet.pwpb.h",
    ],
    tools: [
        "aprotoc",
        "pw_protobuf_plugin_py",
        "pw_protobuf_compiler_py",
    ],
}

genrule {
    name: "pw_rpc_internal_packet_py",
    srcs: ["internal/packet.proto"],
    cmd: "python3 $(location pw_protobuf_compiler_py) " +
         "--out-dir=$(genDir) " +
         "--compile-dir=$$(dirname $(in)) " +
         "--sources $(in) " +
         "--language python " +
         "--no-generate-type-hints " +
         "--no-experimental-proto3-optional " +
         "--protoc=$(location aprotoc)",
    out: [
        "packet_pb2.py",
    ],
    tools: [
        "aprotoc",
        "pw_protobuf_compiler_py",
    ],
}

// Generate cc and header nanopb files.
// The output file names are based on the srcs file name with a .pb.c / .pb.h extension.
genrule_defaults {
    name: "pw_rpc_generate_nanopb_proto",
    cmd: "python3 $(location pw_protobuf_compiler_py) " +
         "--plugin-path=$(location protoc-gen-nanopb) " +
         "--out-dir=$(genDir) " +
         "--compile-dir=$$(dirname $(in)) " +
         "--language nanopb " +
         "--sources $(in) " +
         "--no-experimental-proto3-optional " +
         "--protoc=$(location aprotoc)",
    tools: [
        "aprotoc",
        "protoc-gen-nanopb",
        "pw_protobuf_compiler_py",
    ],
}

// Generate the header nanopb RPC file.
// The output file name is based on the srcs file name with a .rpc.pb.h extension.
genrule_defaults {
    name: "pw_rpc_generate_nanopb_rpc_header",
    cmd: "python3 $(location pw_protobuf_compiler_py) " +
         "--plugin-path=$(location pw_rpc_plugin_nanopb_py) " +
         "--out-dir=$(genDir) " +
         "--compile-dir=$$(dirname $(in)) " +
         "--language nanopb_rpc " +
         "--sources $(in) " +
         "--no-experimental-proto3-optional " +
         "--protoc=$(location aprotoc)",
    tools: [
        "aprotoc",
        "pw_protobuf_compiler_py",
        "pw_rpc_plugin_nanopb_py",
    ],
}

python_library_host {
    name: "pw_rpc_internal_packet_py_lib",
    srcs: [
        ":pw_rpc_internal_packet_py",
    ],
    pkg_path: "pw_rpc/internal",
}
