# 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("@rules_cc//cc:defs.bzl", "cc_binary", "cc_proto_library")
load("@rules_java//java:defs.bzl", "java_binary", "java_lite_proto_library", "java_proto_library")
load("@rules_pkg//:mappings.bzl", "pkg_files", "strip_prefix")
load("@rules_proto//proto:defs.bzl", "proto_library")

# 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 "com_google_protobuf" must be defined to use this rule.
proto_library(
    name = "addressbook_proto",
    srcs = ["addressbook.proto"],
    deps = ["@com_google_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",
        "@com_google_protobuf//:protobuf",
    ],
)

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

# 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"],
)

# 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"],
)
