# This BUILD file shows how to use protobuf with bazel. Before you can use
# proto_library/<lang>_proto_library rules in a BUILD file, you need to
# include protobuf repo as remote repositories in your WORKSPACE file. See
# the WORKSPACE file in the same directory with this BUILD file for an
# example.

load("@bazel_skylib//rules:build_test.bzl", "build_test")
load("@protobuf//bazel:cc_proto_library.bzl", "cc_proto_library")
load("@protobuf//bazel:java_lite_proto_library.bzl", "java_lite_proto_library")
load("@protobuf//bazel:java_proto_library.bzl", "java_proto_library")
load("@protobuf//bazel:proto_library.bzl", "proto_library")
load("@protobuf//bazel:py_proto_library.bzl", "py_proto_library")
load("@rules_cc//cc:defs.bzl", "cc_binary")
load("@rules_pkg//pkg:mappings.bzl", "pkg_files", "strip_prefix")
load("@rules_python//python:py_binary.bzl", "py_binary")

# For each .proto file, a proto_library target should be defined. This target
# is not bound to any particular language. Instead, it defines the dependency
# graph of the .proto files (i.e., proto imports) and serves as the provider
# of .proto source files to the protocol compiler.
#
# Remote repository "protobuf" must be defined to use this rule.
proto_library(
    name = "addressbook_proto",
    srcs = ["addressbook.proto"],
    deps = ["@protobuf//:timestamp_proto"],
)

# The cc_proto_library rule generates C++ code for a proto_library rule. It
# must have exactly one proto_library dependency. If you want to use multiple
# proto_library targets, create a separate cc_proto_library target for each
# of them.
#
# Remote repository "com_google_protobuf_cc" must be defined to use this rule.
cc_proto_library(
    name = "addressbook_cc_proto",
    deps = [":addressbook_proto"],
)

# cc_library/cc_binary targets can depend on cc_proto_library targets.
cc_binary(
    name = "add_person_cpp",
    srcs = ["add_person.cc"],
    deps = [
        ":addressbook_cc_proto",
        "@protobuf",
        "@protobuf//src/google/protobuf/util:time_util",
    ],
)

cc_binary(
    name = "list_people_cpp",
    srcs = ["list_people.cc"],
    deps = [
        ":addressbook_cc_proto",
        "@protobuf",
        "@protobuf//src/google/protobuf/util:time_util",
    ],
)

# Similar to cc_proto_library but for Java.
#
# Remote repository "com_google_protobuf_java" must be defined to use this rule.
java_proto_library(
    name = "addressbook_java_proto",
    deps = [":addressbook_proto"],
)

java_binary(
    name = "add_person_java",
    srcs = ["AddPerson.java"],
    main_class = "AddPerson",
    deps = [":addressbook_java_proto"],
)

java_binary(
    name = "list_people_java",
    srcs = ["ListPeople.java"],
    main_class = "ListPeople",
    deps = [":addressbook_java_proto"],
)

# Java lite.
#
# Remote repository "com_google_protobuf_javalite" must be defined to use this
# rule.
java_lite_proto_library(
    name = "addressbook_java_lite_proto",
    deps = [":addressbook_proto"],
)

# Java lite API is a subset of the regular Java API so if you only uses this
# subset in your code, you can actually compile your code against both (i.e.,
# share code between server build and Android build).
#
# The lite version has a smaller code size, and you can see that by comparing
# the resulted .jar file:
#
#   $ bazel build :add_person_java_deploy.jar :add_person_java_lite_deploy.jar
#   $ ls -l bazel-bin/*_deploy.jar
#   -r-xr-xr-x 1 xiaofeng eng 1230797 Sep  8 12:24 bazel-bin/add_person_java_deploy.jar
#   -r-xr-xr-x 1 xiaofeng eng  236166 Sep  8 12:24 bazel-bin/add_person_java_lite_deploy.jar
#
# In the above example, the lite .jar file is 6 times smaller. With proper
# proguard inlining/stripping, the difference can be much more larger than
# that.
java_binary(
    name = "add_person_java_lite",
    srcs = ["AddPerson.java"],
    main_class = "AddPerson",
    deps = [":addressbook_java_lite_proto"],
)

java_binary(
    name = "list_people_java_lite",
    srcs = ["ListPeople.java"],
    main_class = "ListPeople",
    deps = [":addressbook_java_lite_proto"],
)

# Python

py_proto_library(
    name = "addressbook_py_pb2",
    visibility = ["//visibility:public"],
    deps = [":addressbook_proto"],
)

py_binary(
    name = "add_person",
    srcs = ["add_person.py"],
    python_version = "PY3",
    deps = [
        ":addressbook_py_pb2",
    ],
)

py_binary(
    name = "list_people",
    srcs = ["list_people.py"],
    python_version = "PY3",
    deps = [
        ":addressbook_py_pb2",
    ],
)

build_test(
    name = "test",
    targets = [
        ":add_person_cpp",
        ":add_person_java",
        ":add_person",  # Python
    ],
)

# Files included in all source distributions
pkg_files(
    name = "dist_files",
    srcs = [
        "AddPerson.java",
        "BUILD.bazel",
        "CMakeLists.txt",
        "ListPeople.java",
        "Makefile",
        "README.md",
        "WORKSPACE",
        "add_person.cc",
        "add_person.dart",
        "add_person.py",
        "addressbook.proto",
        "go/cmd/add_person/add_person.go",
        "go/cmd/add_person/add_person_test.go",
        "go/cmd/list_people/list_people.go",
        "go/cmd/list_people/list_people_test.go",
        "go/go.mod",
        "go/go.sum",
        "list_people.cc",
        "list_people.dart",
        "list_people.py",
        "pubspec.yaml",
    ],
    prefix = "examples/",
    strip_prefix = strip_prefix.from_root(""),
    visibility = ["//visibility:public"],
)
