set(PROTOBUF_DIR "${CMAKE_SOURCE_DIR}/third_party/protos")

# Generate cpp files.
file(GLOB_RECURSE PROTO_SRCS "${PROTOBUF_DIR}/*.proto")
generate_proto_cpp(ETCD_PROTO_SRCS ETCD_PROTO_HDRS ${CMAKE_CURRENT_BINARY_DIR}/third_party/protos
                   PROTO_FILES  ${PROTO_SRCS}
                   SOURCE_ROOT  ${PROTOBUF_DIR})

set(GRPC_PROTO_SRCS
    "${PROTOBUF_DIR}/etcd/api/etcdserverpb/rpc.proto"
    "${PROTOBUF_DIR}/etcd/v3election.proto"
    "${PROTOBUF_DIR}/etcd/v3lock.proto")

generate_grpc_cpp(ETCD_GRPC_PROTO_SRCS ETCD_GRPC_PROTO_HDRS ${CMAKE_CURRENT_BINARY_DIR}/third_party/protos
                  PROTO_FILES  ${GRPC_PROTO_SRCS}
                  SOURCE_ROOT  ${PROTOBUF_DIR})

include_directories(${CMAKE_CURRENT_BINARY_DIR}/third_party/protos)

add_library(etcdapi_proto SHARED ${ETCD_PROTO_SRCS} ${ETCD_GRPC_PROTO_SRCS})
target_link_libraries(etcdapi_proto ${PROTOBUF_LIBRARIES} gRPC::grpc++)
target_include_directories(etcdapi_proto PUBLIC ${Protobuf_INCLUDE_DIRS})