feat(3p/nix): Add protobuf & gRPC dependencies and generate sources

Adds dependencies on the gRPC & protobuf libraries, and implements Nix
code to generate the C++ sources from the included proto definitions.

This is theoretically supported via CMake, but practically doesn't
work and I don't care to debug why.

Doing it like this lets us instead add a CMake library target for our
proto definitions based on the sources generated by Nix.

Pros:
  * no need to deal with the gRPC CMake mess
  * it works!

Cons: * iteration requires nix-shell restart
Change-Id: Ie1fe9807fc96c49cb8f7161ba59d093456062b15
Reviewed-on: https://cl.tvl.fyi/c/depot/+/927
Tested-by: BuildkiteCI
Reviewed-by: isomer <isomer@tvl.fyi>
This commit is contained in:
Vincent Ambo 2020-07-05 20:02:10 +01:00 committed by tazjin
parent a6da980a0b
commit 0064e55486
4 changed files with 62 additions and 2 deletions

View file

@ -5,6 +5,7 @@
# this location and this setup mimics that (with the exception of the
# various Nix libraries).
add_subdirectory(proto)
add_subdirectory(libutil)
add_subdirectory(libstore)
add_subdirectory(libmain)

View file

@ -0,0 +1,37 @@
# -*- mode: cmake; -*-
#
# The proto generation happens outside of CMake and the path to the
# generated files is passed in via the environment variable
# $NIX_PROTO_SRCS.
#
# This configuration defines a library target that compiles these
# sources and makes the headers available.
add_library(nixproto SHARED)
set_property(TARGET nixproto PROPERTY CXX_STANDARD 17)
set(HEADER_FILES
$ENV{NIX_PROTO_SRCS}/libproto/worker.grpc.pb.h
$ENV{NIX_PROTO_SRCS}/libproto/worker.pb.h
)
target_sources(nixproto
PUBLIC
${HEADER_FILES}
PRIVATE
$ENV{NIX_PROTO_SRCS}/libproto/worker.grpc.pb.cc
$ENV{NIX_PROTO_SRCS}/libproto/worker.pb.cc
)
target_link_libraries(nixproto
gRPC::grpc++_reflection
protobuf::libprotobuf
)
target_include_directories(nixproto
INTERFACE $ENV{NIX_PROTO_SRCS}
)
INSTALL(FILES ${HEADER_FILES} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/nix/libproto)
INSTALL(TARGETS nixproto DESTINATION ${CMAKE_INSTALL_LIBDIR})