# Copyright 2017 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

cmake_minimum_required (VERSION 2.8.10)

project(googleapis)

set(BIGTABLE_PROTO_FILES
  ${CMAKE_CURRENT_SOURCE_DIR}/google/api/annotations.proto
  ${CMAKE_CURRENT_SOURCE_DIR}/google/api/http.proto
  ${CMAKE_CURRENT_SOURCE_DIR}/google/bigtable/admin/v2/bigtable_instance_admin.proto
  ${CMAKE_CURRENT_SOURCE_DIR}/google/bigtable/admin/v2/bigtable_table_admin.proto
  ${CMAKE_CURRENT_SOURCE_DIR}/google/bigtable/admin/v2/common.proto
  ${CMAKE_CURRENT_SOURCE_DIR}/google/bigtable/admin/v2/instance.proto
  ${CMAKE_CURRENT_SOURCE_DIR}/google/bigtable/admin/v2/table.proto
  ${CMAKE_CURRENT_SOURCE_DIR}/google/bigtable/v2/bigtable.proto
  ${CMAKE_CURRENT_SOURCE_DIR}/google/bigtable/v2/data.proto
  ${CMAKE_CURRENT_SOURCE_DIR}/google/longrunning/operations.proto
  ${CMAKE_CURRENT_SOURCE_DIR}/google/rpc/code.proto
  ${CMAKE_CURRENT_SOURCE_DIR}/google/rpc/error_details.proto
  ${CMAKE_CURRENT_SOURCE_DIR}/google/rpc/status.proto
)
set(BIGTABLE_PB_GENERATED_FILES
  ${CMAKE_BINARY_DIR}/google/api/annotations.pb.cc
  ${CMAKE_BINARY_DIR}/google/api/annotations.pb.h
  ${CMAKE_BINARY_DIR}/google/api/annotations.grpc.pb.cc
  ${CMAKE_BINARY_DIR}/google/api/annotations.grpc.pb.h
  ${CMAKE_BINARY_DIR}/google/api/http.pb.cc
  ${CMAKE_BINARY_DIR}/google/api/http.pb.h
  ${CMAKE_BINARY_DIR}/google/api/http.grpc.pb.cc
  ${CMAKE_BINARY_DIR}/google/api/http.grpc.pb.h
  ${CMAKE_BINARY_DIR}/google/bigtable/admin/v2/bigtable_instance_admin.pb.cc
  ${CMAKE_BINARY_DIR}/google/bigtable/admin/v2/bigtable_instance_admin.pb.h
  ${CMAKE_BINARY_DIR}/google/bigtable/admin/v2/bigtable_instance_admin.grpc.pb.cc
  ${CMAKE_BINARY_DIR}/google/bigtable/admin/v2/bigtable_instance_admin.grpc.pb.h
  ${CMAKE_BINARY_DIR}/google/bigtable/admin/v2/bigtable_table_admin.pb.cc
  ${CMAKE_BINARY_DIR}/google/bigtable/admin/v2/bigtable_table_admin.pb.h
  ${CMAKE_BINARY_DIR}/google/bigtable/admin/v2/bigtable_table_admin.grpc.pb.cc
  ${CMAKE_BINARY_DIR}/google/bigtable/admin/v2/bigtable_table_admin.grpc.pb.h
  ${CMAKE_BINARY_DIR}/google/bigtable/admin/v2/common.pb.cc
  ${CMAKE_BINARY_DIR}/google/bigtable/admin/v2/common.pb.h
  ${CMAKE_BINARY_DIR}/google/bigtable/admin/v2/common.grpc.pb.cc
  ${CMAKE_BINARY_DIR}/google/bigtable/admin/v2/common.grpc.pb.h
  ${CMAKE_BINARY_DIR}/google/bigtable/admin/v2/instance.pb.cc
  ${CMAKE_BINARY_DIR}/google/bigtable/admin/v2/instance.pb.h
  ${CMAKE_BINARY_DIR}/google/bigtable/admin/v2/instance.grpc.pb.cc
  ${CMAKE_BINARY_DIR}/google/bigtable/admin/v2/instance.grpc.pb.h
  ${CMAKE_BINARY_DIR}/google/bigtable/admin/v2/table.pb.cc
  ${CMAKE_BINARY_DIR}/google/bigtable/admin/v2/table.pb.h
  ${CMAKE_BINARY_DIR}/google/bigtable/admin/v2/table.grpc.pb.cc
  ${CMAKE_BINARY_DIR}/google/bigtable/admin/v2/table.grpc.pb.h
  ${CMAKE_BINARY_DIR}/google/bigtable/v2/bigtable.pb.cc
  ${CMAKE_BINARY_DIR}/google/bigtable/v2/bigtable.pb.h
  ${CMAKE_BINARY_DIR}/google/bigtable/v2/bigtable.grpc.pb.cc
  ${CMAKE_BINARY_DIR}/google/bigtable/v2/bigtable.grpc.pb.h
  ${CMAKE_BINARY_DIR}/google/bigtable/v2/data.pb.cc
  ${CMAKE_BINARY_DIR}/google/bigtable/v2/data.pb.h
  ${CMAKE_BINARY_DIR}/google/bigtable/v2/data.grpc.pb.cc
  ${CMAKE_BINARY_DIR}/google/bigtable/v2/data.grpc.pb.h
  ${CMAKE_BINARY_DIR}/google/longrunning/operations.pb.cc
  ${CMAKE_BINARY_DIR}/google/longrunning/operations.pb.h
  ${CMAKE_BINARY_DIR}/google/longrunning/operations.grpc.pb.cc
  ${CMAKE_BINARY_DIR}/google/longrunning/operations.grpc.pb.h
  ${CMAKE_BINARY_DIR}/google/rpc/code.pb.cc
  ${CMAKE_BINARY_DIR}/google/rpc/code.pb.h
  ${CMAKE_BINARY_DIR}/google/rpc/code.grpc.pb.cc
  ${CMAKE_BINARY_DIR}/google/rpc/code.grpc.pb.h
  ${CMAKE_BINARY_DIR}/google/rpc/error_details.pb.cc
  ${CMAKE_BINARY_DIR}/google/rpc/error_details.pb.h
  ${CMAKE_BINARY_DIR}/google/rpc/error_details.grpc.pb.cc
  ${CMAKE_BINARY_DIR}/google/rpc/error_details.grpc.pb.h
  ${CMAKE_BINARY_DIR}/google/rpc/status.pb.cc
  ${CMAKE_BINARY_DIR}/google/rpc/status.pb.h
  ${CMAKE_BINARY_DIR}/google/rpc/status.grpc.pb.cc
  ${CMAKE_BINARY_DIR}/google/rpc/status.grpc.pb.h
)

add_custom_command(OUTPUT ${BIGTABLE_PB_GENERATED_FILES}
    COMMAND ${PROTOC} ${BIGTABLE_PROTO_FILES}
                -I ${CMAKE_CURRENT_SOURCE_DIR}
                -I ${PROTOBUF_INCLUDE_DIR}
                --cpp_out=${CMAKE_BINARY_DIR}
                --grpc_out=${CMAKE_BINARY_DIR}
                --plugin=protoc-gen-grpc=${GRPC_CPP_PLUGIN}
)

add_custom_target(build_bigtable_protos ALL
                  DEPENDS ${BIGTABLE_PB_GENERATED_FILES})

set_source_files_properties(${BIGTABLE_PB_GENERATED_FILES} PROPERTIES GENERATED TRUE)
include_directories(BEFORE SYSTEM ${PROTOBUF_INCLUDE_DIR})
include_directories(BEFORE SYSTEM ${GRPC_INCLUDE_DIR})
include_directories(BEFORE SYSTEM ${CMAKE_BINARY_DIR})
link_directories(${PROTOBUF_LIB_DIR})
add_library(bigtable_grpc_client
            ${BIGTABLE_PB_GENERATED_FILES})
target_link_libraries(bigtable_grpc_client protobuf_full_cobalt grpc grpc++)
add_dependencies(bigtable_grpc_client build_bigtable_protos)

install(TARGETS bigtable_grpc_client
        RUNTIME DESTINATION bin
        LIBRARY DESTINATION lib
        ARCHIVE DESTINATION lib)

install(DIRECTORY ${CMAKE_BINARY_DIR}/ DESTINATION include
  FILES_MATCHING
  PATTERN "*.pb.cc"
  PATTERN "*.pb.h"
)

set(GRPC_PROTO_FILES
  ${CMAKE_CURRENT_SOURCE_DIR}/google/rpc/status.proto
)

set(GRPC_PB_GENERATED_GO_FILES
  ${GO_PROTO_GEN_SRC_DIR}/google.golang.org/genproto/googleapis/rpc/status/status.pb.go
)

add_custom_command(OUTPUT ${GRPC_PB_GENERATED_GO_FILES}
  COMMAND ${PROTOC} ${GRPC_PROTO_FILES}
                -I ${CMAKE_CURRENT_SOURCE_DIR}
                -I ${PROTOBUF_INCLUDE_DIR}
                -I ${CMAKE_SOURCE_DIR}/third_party/go/src
                --go_out=${GO_PROTO_GEN_SRC_DIR}
)

add_custom_target(generate_grpc_pb_go_files ALL
                  DEPENDS ${GRPC_PB_GENERATED_GO_FILES})
