Skip to content

Commit face45c

Browse files
[O2-4106] Fix race condition in running protoc on RHEL8 (#1158)
* [O2-4106] Fix race condition in running protoc * Remove commented code * Fix install missing target * Increment version * Copy include files --------- Co-authored-by: Martin Boulais <31805063+martinboulais@users.noreply.github.com>
1 parent ab9d45e commit face45c

1 file changed

Lines changed: 82 additions & 104 deletions

File tree

cxx-client/CMakeLists.txt

Lines changed: 82 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
cmake_minimum_required(VERSION 3.20)
22

33
project(BookkeepingApi
4-
VERSION 0.0.1
5-
LANGUAGES CXX
4+
VERSION 0.76.0
5+
LANGUAGES CXX
66
)
77

8-
find_package(Protobuf CONFIG REQUIRED)
8+
find_package(protobuf CONFIG REQUIRED)
99
find_package(gRPC REQUIRED)
1010

11+
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
1112
set(CMAKE_INSTALL_LIBDIR lib)
1213
set(LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}/lib")
1314
set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/bin")
@@ -16,82 +17,81 @@ set(CMAKE_BUILD_TYPE "RelWithDebInfo")
1617

1718
# Generating c++ proto bindings and gRPC from proto files
1819

19-
get_filename_component(PROTO_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../proto ABSOLUTE)
20-
21-
set(PROTO_FILES "")
22-
set(PROTO_OUTPUT_NAMES "")
23-
set(PROTO_CPP_OUTPUT "")
24-
set(GRPC_CPP_OUTPUT "")
25-
set(PROTO_GENERATED_HEADERS_SRC "")
26-
27-
foreach(PROTO_NAME common flp run dplProcessExecution)
28-
set(PROTO_FILE ${PROTO_DIRECTORY}/${PROTO_NAME}.proto)
29-
get_filename_component(PROTO_OUTPUT_NAME ${PROTO_FILE} NAME_WE)
30-
list(APPEND PROTO_FILES ${PROTO_FILE})
31-
list(APPEND PROTO_OUTPUT_NAMES ${PROTO_OUTPUT_NAME}.proto)
32-
list(APPEND PROTO_CPP_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${PROTO_OUTPUT_NAME}.pb.cc)
33-
list(APPEND GRPC_CPP_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${PROTO_OUTPUT_NAME}.grpc.pb.cc)
34-
list(APPEND PROTO_GENERATED_HEADERS_SRC ${CMAKE_CURRENT_BINARY_DIR}/${PROTO_OUTPUT_NAME}.pb.h)
35-
endforeach()
36-
37-
add_custom_command(
38-
OUTPUT ${PROTO_CPP_OUTPUT} ${GRPC_CPP_OUTPUT}
39-
COMMAND protobuf::protoc
40-
ARGS --proto_path ${PROTO_DIRECTORY}
41-
--cpp_out ${CMAKE_CURRENT_BINARY_DIR}
42-
--grpc_out ${CMAKE_CURRENT_BINARY_DIR}
43-
--plugin=protoc-gen-grpc=$<TARGET_FILE:gRPC::grpc_cpp_plugin>
44-
${PROTO_OUTPUT_NAMES}
45-
DEPENDS ${PROTO_FILES}
46-
COMMENT "Running protoc on ${PROTO_FILES}"
47-
VERBATIM
20+
get_filename_component(PROTO_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../proto ABSOLUTE)
21+
set(PROTO_OUT_DIR "${CMAKE_CURRENT_BINARY_DIR}")
22+
23+
add_library(BookkeepingProtos OBJECT
24+
${PROTO_DIR}/common.proto
25+
${PROTO_DIR}/flp.proto
26+
${PROTO_DIR}/run.proto
27+
${PROTO_DIR}/dplProcessExecution.proto
28+
)
29+
30+
target_link_libraries(BookkeepingProtos
31+
PUBLIC protobuf::libprotobuf
32+
PRIVATE gRPC::grpc++
33+
)
34+
35+
target_include_directories(BookkeepingProtos PUBLIC
36+
"$<BUILD_INTERFACE:${PROTO_OUT_DIR}>"
37+
)
38+
39+
protobuf_generate(
40+
TARGET BookkeepingProtos
41+
IMPORT_DIRS "${PROTO_DIR}"
42+
PROTOC_OUT_DIR "${PROTO_OUT_DIR}"
43+
)
44+
45+
protobuf_generate(
46+
TARGET BookkeepingProtos
47+
LANGUAGE grpc
48+
GENERATE_EXTENSIONS .grpc.pb.h .grpc.pb.cc
49+
PLUGIN "protoc-gen-grpc=\$<TARGET_FILE:gRPC::grpc_cpp_plugin>"
50+
IMPORT_DIRS ${PROTO_DIR}
51+
PROTOC_OUT_DIR "${PROTO_OUT_DIR}"
4852
)
4953

5054
### LIBRARY
5155

5256
add_library(BookkeepingApi SHARED
53-
src/grpc/GrpcBkpClient.cxx
54-
src/grpc/services/GrpcFlpServiceClient.cxx
55-
src/BkpClientFactory.cxx
56-
57-
${PROTO_CPP_OUTPUT}
58-
${GRPC_CPP_OUTPUT}
57+
src/grpc/GrpcBkpClient.cxx
58+
src/grpc/services/GrpcFlpServiceClient.cxx
59+
src/BkpClientFactory.cxx
5960
)
6061

6162
target_include_directories(BookkeepingApi
62-
PUBLIC $<INSTALL_INTERFACE:include> # public header once installed
63-
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> # to build it
64-
PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}> # because of the proto generated files
65-
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src> # private headers
63+
PUBLIC $<INSTALL_INTERFACE:include> # public header once installed
64+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> # to build it
65+
PRIVATE $<BUILD_INTERFACE:${PROTO_OUT_DIR}> # because of the proto generated files
66+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src> # private headers
6667
)
6768

6869
target_link_libraries(BookkeepingApi
69-
PRIVATE protobuf::libprotobuf
70-
gRPC::grpc++
70+
PRIVATE BookkeepingProtos
71+
PRIVATE protobuf::libprotobuf
72+
PRIVATE gRPC::grpc++
7173
)
7274

7375
target_compile_features(BookkeepingApi PUBLIC cxx_std_17)
7476

7577
add_library(BookkeepingProtoApi SHARED
76-
src/BkpProtoClientFactory.cxx
77-
src/grpc/GrpcBkpProtoClient.cxx
78-
src/grpc/services/GrpcRunProtoClient.cxx
79-
src/grpc/services/GrpcDplProcessExecutionProtoClient.cxx
80-
81-
${PROTO_CPP_OUTPUT}
82-
${GRPC_CPP_OUTPUT}
78+
src/BkpProtoClientFactory.cxx
79+
src/grpc/GrpcBkpProtoClient.cxx
80+
src/grpc/services/GrpcRunProtoClient.cxx
81+
src/grpc/services/GrpcDplProcessExecutionProtoClient.cxx
8382
)
8483

8584
target_include_directories(BookkeepingProtoApi
86-
PUBLIC $<INSTALL_INTERFACE:include> # public header once installed
87-
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> # to build it
88-
PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}> # because of the proto generated files
89-
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src> # private headers
85+
PUBLIC $<INSTALL_INTERFACE:include> # public header once installed
86+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> # to build it
87+
PRIVATE $<BUILD_INTERFACE:${PROTO_OUT_DIR}> # because of the proto generated files
88+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src> # private headers
9089
)
9190

9291
target_link_libraries(BookkeepingProtoApi
93-
PUBLIC protobuf::libprotobuf
94-
PRIVATE gRPC::grpc++
92+
PUBLIC BookkeepingProtos
93+
PUBLIC protobuf::libprotobuf
94+
PRIVATE gRPC::grpc++
9595
)
9696

9797
target_compile_features(BookkeepingProtoApi PUBLIC cxx_std_17)
@@ -101,79 +101,57 @@ target_compile_features(BookkeepingProtoApi PUBLIC cxx_std_17)
101101
add_executable(exampleSpecificService example/exampleSpecificServices.cxx)
102102

103103
target_link_libraries(exampleSpecificService
104-
PUBLIC
105-
BookkeepingApi
104+
PUBLIC BookkeepingApi
106105
)
107106

108107
add_executable(exampleProtoService example/exampleProtoServices.cxx)
109108

110109
target_link_libraries(exampleProtoService
111-
PUBLIC
112-
BookkeepingProtoApi
110+
PUBLIC BookkeepingProtoApi
113111
)
114112

115-
target_include_directories(exampleProtoService PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>)
113+
target_include_directories(exampleProtoService PRIVATE $<BUILD_INTERFACE:${PROTO_OUT_DIR}>)
116114

117115
# PACKAGE INFO
118116

119117
include(CMakePackageConfigHelpers)
120118

121119
write_basic_package_version_file(${CMAKE_PROJECT_NAME}ConfigVersion.cmake
122-
VERSION ${${CMAKE_PROJECT_NAME}_VERSION}
123-
COMPATIBILITY SameMajorVersion)
120+
VERSION ${${CMAKE_PROJECT_NAME}_VERSION}
121+
COMPATIBILITY SameMajorVersion)
124122

125123
configure_package_config_file(cmake/${CMAKE_PROJECT_NAME}Config.cmake.in
126-
"${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}Config.cmake"
127-
INSTALL_DESTINATION
128-
"${CMAKE_INSTALL_LIBDIR}/cmake/${CMAKE_PROJECT_NAME}")
129-
130-
#configure_package_config_file(cmake/BookkeepingProtoApiConfig.cmake.in
131-
# "${CMAKE_CURRENT_BINARY_DIR}/BookkeepingProtoApiConfig.cmake"
132-
# INSTALL_DESTINATION
133-
# "${CMAKE_INSTALL_LIBDIR}/cmake/BookkeepingProtoApi")
124+
"${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}Config.cmake"
125+
INSTALL_DESTINATION
126+
"${CMAKE_INSTALL_LIBDIR}/cmake/${CMAKE_PROJECT_NAME}")
134127

135128
### INSTALL
136-
137-
# Install proto files
138-
install(FILES ${PROTO_GENERATED_HEADERS_SRC}
139-
DESTINATION include/BookkeepingApi
129+
install(FILES
130+
${PROTO_OUT_DIR}/common.pb.h
131+
${PROTO_OUT_DIR}/flp.pb.h
132+
${PROTO_OUT_DIR}/run.pb.h
133+
${PROTO_OUT_DIR}/dplProcessExecution.pb.h
134+
DESTINATION "include"
140135
)
141136

142-
install(TARGETS BookkeepingApi BookkeepingProtoApi
143-
EXPORT BookkeepingApiTargets
144-
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
145-
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
146-
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
137+
install(TARGETS BookkeepingProtos BookkeepingApi BookkeepingProtoApi
138+
EXPORT BookkeepingApiTargets
139+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
140+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
141+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
147142
)
148143

149-
#install(TARGETS BookkeepingProtoApi
150-
# EXPORT BookkeepingProtoApiTargets
151-
# LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
152-
# ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
153-
# RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
154-
#)
155-
156144
# Install headers
157145
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/BookkeepingApi
158-
DESTINATION "include")
146+
DESTINATION "include")
159147

160148
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}Config.cmake
161-
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}ConfigVersion.cmake
162-
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${CMAKE_PROJECT_NAME})
163-
164-
#install(FILES ${CMAKE_CURRENT_BINARY_DIR}/BookkeepingProtoApiConfig.cmake
165-
# ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}ConfigVersion.cmake
166-
# DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/BookkeepingProtoApiConfig)
149+
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}ConfigVersion.cmake
150+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${CMAKE_PROJECT_NAME})
167151

168152
# Export targets
169153
install(EXPORT BookkeepingApiTargets
170-
FILE BookkeepingApiTargets.cmake
171-
NAMESPACE AliceO2::
172-
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/BookkeepingApi
154+
FILE BookkeepingApiTargets.cmake
155+
NAMESPACE AliceO2::
156+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/BookkeepingApi
173157
)
174-
175-
#install(EXPORT BookkeepingProtoApiTargets
176-
# FILE BookkeepingProtoApiTargets.cmake
177-
# NAMESPACE AliceO2::
178-
# DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/BookkeepingProtoApi
179-
#)

0 commit comments

Comments
 (0)