[PATCH] D90215: [CMake] Support inter-proto dependencies in generate_protos.
Sam McCall via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Oct 29 02:04:38 PDT 2020
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG1d773a4ff05d: [CMake] Support inter-proto dependencies in generate_protos. (authored by sammccall).
Changed prior to commit:
https://reviews.llvm.org/D90215?vs=300930&id=301540#toc
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D90215/new/
https://reviews.llvm.org/D90215
Files:
clang-tools-extra/clangd/index/remote/CMakeLists.txt
llvm/cmake/modules/FindGRPC.cmake
Index: llvm/cmake/modules/FindGRPC.cmake
===================================================================
--- llvm/cmake/modules/FindGRPC.cmake
+++ llvm/cmake/modules/FindGRPC.cmake
@@ -84,8 +84,10 @@
# Proto headers are generated in ${CMAKE_CURRENT_BINARY_DIR}.
# Libraries that use these headers should adjust the include path.
# If the "GRPC" argument is given, services are also generated.
+# The DEPENDS list should name *.proto source files that are imported.
+# They may be relative to the source dir or absolute (for generated protos).
function(generate_protos LibraryName ProtoFile)
- cmake_parse_arguments(PARSE_ARGV 2 PROTO "GRPC" "" "")
+ cmake_parse_arguments(PARSE_ARGV 2 PROTO "GRPC" "" "DEPENDS")
get_filename_component(ProtoSourceAbsolutePath "${CMAKE_CURRENT_SOURCE_DIR}/${ProtoFile}" ABSOLUTE)
get_filename_component(ProtoSourcePath ${ProtoSourceAbsolutePath} PATH)
get_filename_component(Basename ${ProtoSourceAbsolutePath} NAME_WLE)
@@ -111,4 +113,23 @@
add_clang_library(${LibraryName} ${GeneratedProtoSource}
PARTIAL_SOURCES_INTENDED
LINK_LIBS grpc++ protobuf)
+
+ # Ensure dependency headers are generated before dependent protos are built.
+ # DEPENDS arg is a list of "Foo.proto". While they're logically relative to
+ # the source dir, the generated headers we need are in the binary dir.
+ foreach(ImportedProto IN LISTS PROTO_DEPENDS)
+ # Foo.proto -> Foo.pb.h
+ STRING(REGEX REPLACE "\\.proto$" ".pb.h" ImportedHeader "${ImportedProto}")
+ # Foo.pb.h -> ${CMAKE_CURRENT_BINARY_DIR}/Foo.pb.h
+ get_filename_component(ImportedHeader "${ImportedHeader}"
+ ABSOLUTE
+ BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}")
+ # Compilation of each generated source depends on ${BINARY}/Foo.pb.h.
+ foreach(Generated IN LISTS GeneratedProtoSource)
+ # FIXME: CMake docs suggest OBJECT_DEPENDS isn't needed, but I can't get
+ # the recommended add_dependencies() approach to work.
+ set_source_files_properties("${Generated}"
+ PROPERTIES OBJECT_DEPENDS "${ImportedHeader}")
+ endforeach(Generated)
+ endforeach(ImportedProto)
endfunction()
Index: clang-tools-extra/clangd/index/remote/CMakeLists.txt
===================================================================
--- clang-tools-extra/clangd/index/remote/CMakeLists.txt
+++ clang-tools-extra/clangd/index/remote/CMakeLists.txt
@@ -1,13 +1,8 @@
if (CLANGD_ENABLE_REMOTE)
- generate_protos(RemoteIndexServiceProto "Service.proto" GRPC)
generate_protos(RemoteIndexProto "Index.proto")
- # Ensure dependency headers are generated before dependent protos are built.
- # FIXME: this should be encapsulated in generate_protos.
- # FIXME: CMake docs say OBJECT_DEPENDS isn't needed, but I can't get the
- # recommended add_dependencies() approach to work.
- set_source_files_properties(
- ${CMAKE_CURRENT_BINARY_DIR}/Service.pb.cc
- PROPERTIES OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/Index.pb.h)
+ generate_protos(RemoteIndexServiceProto "Service.proto"
+ DEPENDS "Index.proto"
+ GRPC)
include_directories(${CMAKE_CURRENT_BINARY_DIR})
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D90215.301540.patch
Type: text/x-patch
Size: 3185 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20201029/1b5ab338/attachment.bin>
More information about the cfe-commits
mailing list