Skip to content

Commit e35da44

Browse files
author
Duncan Po
committed
build gRPC from source code
1 parent 4bbba44 commit e35da44

File tree

3 files changed

+187
-13
lines changed

3 files changed

+187
-13
lines changed

CMakeLists.txt

Lines changed: 58 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,52 @@ if(NOT DEFINED OTEL_MATLAB_VERSION)
111111
set(OTEL_MATLAB_VERSION 0.0.0) # set to an invalid default if not defined
112112
endif()
113113

114-
project(${CLIENT_PROJECT_NAME} VERSION ${OTEL_MATLAB_VERSION} LANGUAGES CXX)
114+
project(${CLIENT_PROJECT_NAME} VERSION ${OTEL_MATLAB_VERSION} LANGUAGES CXX C)
115+
116+
if(APPLE)
117+
set(CMAKE_INSTALL_RPATH @loader_path)
118+
elseif(UNIX)
119+
set(CMAKE_INSTALL_RPATH "$ORIGIN")
120+
endif()
121+
122+
# ###########################
123+
# gRPC
124+
# ###########################
125+
if(WITH_OTLP_GRPC)
126+
set(GRPC_PACKAGE_NAME gRPC)
127+
set(GRPC_GIT_REPOSITORY "https://github.com/grpc/grpc.git")
128+
set(GRPC_GIT_TAG "4795c5e")
129+
set(GRPC_PREFIX ${CMAKE_BINARY_DIR}/gRPC)
130+
set(GRPC_INSTALL_DIR ${GRPC_PREFIX}/install)
131+
set(GRPC_INSTALL_LIB_DIR ${GRPC_INSTALL_DIR}/lib)
132+
133+
set(PATCHES_DIR ${CMAKE_SOURCE_DIR}/patches)
134+
if(APPLE)
135+
set(patch_command git apply ${PATCHES_DIR}/grpc-mac.patch)
136+
else()
137+
set(patch_command "")
138+
endif()
139+
140+
include(ExternalProject)
141+
ExternalProject_Add(
142+
${GRPC_PACKAGE_NAME}
143+
GIT_REPOSITORY ${GRPC_GIT_REPOSITORY}
144+
GIT_TAG ${GRPC_GIT_TAG}
145+
PREFIX ${GRPC_PREFIX}
146+
UPDATE_DISCONNECTED 1
147+
PATCH_COMMAND ${patch_command}
148+
CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_RPATH=${CMAKE_INSTALL_RPATH} -DBUILD_SHARED_LIBS=ON -DgRPC_INSTALL=ON -DgRPC_BUILD_TESTS=OFF -DCMAKE_CROSSCOMPILING=OFF -DgRPC_ZLIB_PROVIDER=package -DgRPC_ABSL_PROVIDER=package -DgRPC_PROTOBUF_PROVIDER=package -DgRPC_RE2_PROVIDER=package -DgRPC_SSL_PROVIDER=package -DgRPC_CARES_PROVIDER=package -DgRPC_BUILD_GRPC_CSHARP_PLUGIN=OFF -DgRPC_BUILD_GRPC_NODE_PLUGIN=OFF -DgRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN=OFF -DgRPC_BUILD_GRPC_PHP_PLUGIN=OFF -DgRPC_BUILD_GRPC_PYTHON_PLUGIN=OFF -DgRPC_BUILD_GRPC_RUBY_PLUGIN=OFF -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DVCPKG_INSTALLED_DIR=${VCPKG_INSTALLED_DIR} ${TRIPLET_DEFINITIONS}
149+
INSTALL_DIR ${GRPC_INSTALL_DIR}
150+
INSTALL_COMMAND ${CMAKE_COMMAND} --install . --prefix ${GRPC_INSTALL_DIR} --config $<CONFIG>
151+
)
152+
153+
if(UNIX AND NOT APPLE AND NOT CYGWIN)
154+
# needed for running protoc as part of the opentelemetry-cpp build
155+
set(GRPC_LD_LIBRARY_PATH_ENV "LD_LIBRARY_PATH=${GRPC_INSTALL_LIB_DIR}")
156+
endif()
157+
158+
set(GRPC_LINK_LIBRARIES ${GRPC_INSTALL_LIB_DIR}/libgrpc++${CMAKE_SHARED_LIBRARY_SUFFIX})
159+
endif()
115160

116161
# ######################################
117162
# libmexclass
@@ -225,7 +270,8 @@ if(NOT DEFINED OTEL_CPP_INSTALLED_DIR)
225270
PREFIX ${OTEL_CPP_PREFIX}
226271
UPDATE_DISCONNECTED 1
227272
PATCH_COMMAND ${patch_command}
228-
CMAKE_ARGS -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DWITH_ABI_VERSION_1=OFF -DWITH_ABI_VERSION_2=ON -DWITH_OTLP_HTTP=${WITH_OTLP_HTTP} -DWITH_OTLP_GRPC=${WITH_OTLP_GRPC} -DWITH_OTLP_FILE=${WITH_OTLP_FILE} -DWITH_EXAMPLES=OFF -DBUILD_TESTING=OFF -DWITH_BENCHMARK=OFF -DOPENTELEMETRY_INSTALL=ON -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DCMAKE_CXX_STANDARD=${OTEL_CPP_CXX_STANDARD} -DVCPKG_INSTALLED_DIR=${VCPKG_INSTALLED_DIR} ${TRIPLET_DEFINITIONS}
273+
CMAKE_ARGS -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_RPATH=${CMAKE_INSTALL_RPATH} -DgRPC_DIR=${GRPC_INSTALL_LIB_DIR}/cmake/grpc -DWITH_ABI_VERSION_1=OFF -DWITH_ABI_VERSION_2=ON -DWITH_OTLP_HTTP=${WITH_OTLP_HTTP} -DWITH_OTLP_GRPC=${WITH_OTLP_GRPC} -DWITH_OTLP_FILE=${WITH_OTLP_FILE} -DWITH_EXAMPLES=OFF -DBUILD_TESTING=OFF -DWITH_BENCHMARK=OFF -DOPENTELEMETRY_INSTALL=ON -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DCMAKE_CXX_STANDARD=${OTEL_CPP_CXX_STANDARD} -DVCPKG_INSTALLED_DIR=${VCPKG_INSTALLED_DIR} ${TRIPLET_DEFINITIONS}
274+
BUILD_COMMAND ${CMAKE_COMMAND} -E env ${GRPC_LD_LIBRARY_PATH_ENV} ${CMAKE_MAKE_PROGRAM}
229275
BUILD_BYPRODUCTS ${OTEL_CPP_LIBRARIES}
230276
INSTALL_DIR ${OTEL_CPP_PREFIX}
231277
INSTALL_COMMAND ${CMAKE_COMMAND} --install . --prefix ${OTEL_CPP_PREFIX} --config $<CONFIG>
@@ -251,14 +297,11 @@ if(WITH_OTLP_HTTP)
251297
endif()
252298

253299
if(WITH_OTLP_GRPC)
254-
find_package(gRPC REQUIRED)
255300
find_package(absl REQUIRED)
256301
find_package(c-ares REQUIRED)
257302
find_package(re2 REQUIRED)
258303
if(WIN32)
259304
find_package(openssl REQUIRED)
260-
elseif(UNIX AND NOT APPLE AND NOT CYGWIN)
261-
find_package(upb REQUIRED)
262305
endif()
263306
endif()
264307

@@ -390,7 +433,7 @@ if(WITH_OTLP_HTTP)
390433
set(OPENTELEMETRY_PROXY_LINK_LIBRARIES ${OPENTELEMETRY_PROXY_LINK_LIBRARIES} ${CURL_LIBRARIES})
391434
endif()
392435
if(WITH_OTLP_GRPC)
393-
set(OPENTELEMETRY_PROXY_LINK_LIBRARIES ${OPENTELEMETRY_PROXY_LINK_LIBRARIES} gRPC::grpc++ absl::synchronization)
436+
set(OPENTELEMETRY_PROXY_LINK_LIBRARIES ${OPENTELEMETRY_PROXY_LINK_LIBRARIES} ${GRPC_LINK_LIBRARIES} absl::synchronization)
394437
endif()
395438

396439
target_link_libraries(${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OPENTELEMETRY_PROXY_LINK_LIBRARIES})
@@ -402,8 +445,7 @@ if(UNIX AND NOT APPLE AND NOT CYGWIN)
402445
"${OTEL_CPP_PREFIX}/lib/libopentelemetry_logs.a"
403446
"${OTEL_CPP_PREFIX}/lib/libopentelemetry_common.a"
404447
"${OTEL_CPP_PREFIX}/lib/libopentelemetry_otlp_recordable.a"
405-
${ABSL_LIBRARIES}
406-
${UPB_LIBRARIES} -Wl,--no-whole-archive)
448+
${ABSL_LIBRARIES} -Wl,--no-whole-archive)
407449
target_link_options(${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OPENTELEMETRY_PROXY_LINK_OPTIONS})
408450
elseif(APPLE)
409451
set_target_properties(${OPENTELEMETRY_PROXY_LIBRARY_NAME} PROPERTIES INSTALL_RPATH "@executable_path")
@@ -438,7 +480,7 @@ if(WIN32)
438480
else()
439481
set(OTEL_CPP_RUNTIME ${OTEL_CPP_PREFIX}/lib/libopentelemetry_proto${CMAKE_SHARED_LIBRARY_SUFFIX})
440482
if(WITH_OTLP_GRPC)
441-
set(OTEL_CPP_RUNTIME ${OTEL_CPP_RUNTIME}
483+
set(OTEL_CPP_RUNTIME ${OTEL_CPP_RUNTIME}
442484
${OTEL_CPP_PREFIX}/lib/libopentelemetry_proto_grpc${CMAKE_SHARED_LIBRARY_SUFFIX})
443485
endif()
444486
if(APPLE)
@@ -539,6 +581,13 @@ install(FILES ${OTLP_MISC_FILES} DESTINATION .)
539581
# Install dependent runtime libraries
540582
set(LIBMEXCLASS_PROXY_INSTALLED_DIR +libmexclass/+proxy)
541583
install(FILES ${OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES} DESTINATION ${LIBMEXCLASS_PROXY_INSTALLED_DIR})
584+
if(WITH_OTLP_GRPC)
585+
install(DIRECTORY ${GRPC_INSTALL_LIB_DIR}/ DESTINATION ${LIBMEXCLASS_PROXY_INSTALLED_DIR}
586+
FILES_MATCHING
587+
PATTERN "*.*"
588+
PATTERN "cmake" EXCLUDE
589+
PATTERN "pkgconfig" EXCLUDE)
590+
endif()
542591

543592
# ##############################
544593
# Subdirectories

patches/grpc-mac.patch

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
diff --git a/CMakeLists.txt b/CMakeLists.txt
2+
index 0627429f49..60a86853ba 100644
3+
--- a/CMakeLists.txt
4+
+++ b/CMakeLists.txt
5+
@@ -3588,13 +3588,13 @@ target_include_directories(upb_base_lib
6+
PRIVATE
7+
${CMAKE_CURRENT_SOURCE_DIR}
8+
${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}
9+
- ${_gRPC_RE2_INCLUDE_DIR}
10+
- ${_gRPC_SSL_INCLUDE_DIR}
11+
${_gRPC_UPB_GENERATED_DIR}
12+
${_gRPC_UPB_GRPC_GENERATED_DIR}
13+
${_gRPC_UPB_INCLUDE_DIR}
14+
${_gRPC_XXHASH_INCLUDE_DIR}
15+
${_gRPC_ZLIB_INCLUDE_DIR}
16+
+ ${_gRPC_RE2_INCLUDE_DIR} # RE2 and SSL bring in all header files in vcpkg and can shadow other header files. Move them to the end
17+
+ ${_gRPC_SSL_INCLUDE_DIR}
18+
)
19+
target_link_libraries(upb_base_lib
20+
${_gRPC_ALLTARGETS_LIBRARIES}
21+
@@ -3651,6 +3651,11 @@ add_library(upb_json_lib ${_gRPC_STATIC_WIN32}
22+
23+
target_compile_features(upb_json_lib PUBLIC cxx_std_14)
24+
25+
+# allow undefined symbols in link step, as these symbols can be resolved later
26+
+if(APPLE)
27+
+ target_link_options(upb_json_lib PRIVATE -Wl,-undefined,dynamic_lookup)
28+
+endif()
29+
+
30+
set_target_properties(upb_json_lib PROPERTIES
31+
VERSION ${gRPC_CORE_VERSION}
32+
SOVERSION ${gRPC_CORE_SOVERSION}
33+
@@ -3672,13 +3677,13 @@ target_include_directories(upb_json_lib
34+
PRIVATE
35+
${CMAKE_CURRENT_SOURCE_DIR}
36+
${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}
37+
- ${_gRPC_RE2_INCLUDE_DIR}
38+
- ${_gRPC_SSL_INCLUDE_DIR}
39+
${_gRPC_UPB_GENERATED_DIR}
40+
${_gRPC_UPB_GRPC_GENERATED_DIR}
41+
${_gRPC_UPB_INCLUDE_DIR}
42+
${_gRPC_XXHASH_INCLUDE_DIR}
43+
${_gRPC_ZLIB_INCLUDE_DIR}
44+
+ ${_gRPC_RE2_INCLUDE_DIR} # RE2 and SSL bring in all header files in vcpkg and can shadow other header files. Move them to the end
45+
+ ${_gRPC_SSL_INCLUDE_DIR}
46+
)
47+
target_link_libraries(upb_json_lib
48+
${_gRPC_ALLTARGETS_LIBRARIES}
49+
@@ -3726,13 +3731,13 @@ target_include_directories(upb_mem_lib
50+
PRIVATE
51+
${CMAKE_CURRENT_SOURCE_DIR}
52+
${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}
53+
- ${_gRPC_RE2_INCLUDE_DIR}
54+
- ${_gRPC_SSL_INCLUDE_DIR}
55+
${_gRPC_UPB_GENERATED_DIR}
56+
${_gRPC_UPB_GRPC_GENERATED_DIR}
57+
${_gRPC_UPB_INCLUDE_DIR}
58+
${_gRPC_XXHASH_INCLUDE_DIR}
59+
${_gRPC_ZLIB_INCLUDE_DIR}
60+
+ ${_gRPC_RE2_INCLUDE_DIR} # RE2 and SSL bring in all header files in vcpkg and can shadow other header files. Move them to the end
61+
+ ${_gRPC_SSL_INCLUDE_DIR}
62+
)
63+
target_link_libraries(upb_mem_lib
64+
${_gRPC_ALLTARGETS_LIBRARIES}
65+
@@ -3788,13 +3793,13 @@ target_include_directories(upb_message_lib
66+
PRIVATE
67+
${CMAKE_CURRENT_SOURCE_DIR}
68+
${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}
69+
- ${_gRPC_RE2_INCLUDE_DIR}
70+
- ${_gRPC_SSL_INCLUDE_DIR}
71+
${_gRPC_UPB_GENERATED_DIR}
72+
${_gRPC_UPB_GRPC_GENERATED_DIR}
73+
${_gRPC_UPB_INCLUDE_DIR}
74+
${_gRPC_XXHASH_INCLUDE_DIR}
75+
${_gRPC_ZLIB_INCLUDE_DIR}
76+
+ ${_gRPC_RE2_INCLUDE_DIR} # RE2 and SSL bring in all header files in vcpkg and can shadow other header files. Move them to the end
77+
+ ${_gRPC_SSL_INCLUDE_DIR}
78+
)
79+
target_link_libraries(upb_message_lib
80+
${_gRPC_ALLTARGETS_LIBRARIES}
81+
@@ -3852,6 +3857,11 @@ add_library(upb_textformat_lib ${_gRPC_STATIC_WIN32}
82+
83+
target_compile_features(upb_textformat_lib PUBLIC cxx_std_14)
84+
85+
+# allow undefined symbols in link step, as these symbols can be resolved later
86+
+if(APPLE)
87+
+ target_link_options(upb_textformat_lib PRIVATE -Wl,-undefined,dynamic_lookup)
88+
+endif()
89+
+
90+
set_target_properties(upb_textformat_lib PROPERTIES
91+
VERSION ${gRPC_CORE_VERSION}
92+
SOVERSION ${gRPC_CORE_SOVERSION}
93+
@@ -3873,13 +3883,13 @@ target_include_directories(upb_textformat_lib
94+
PRIVATE
95+
${CMAKE_CURRENT_SOURCE_DIR}
96+
${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}
97+
- ${_gRPC_RE2_INCLUDE_DIR}
98+
- ${_gRPC_SSL_INCLUDE_DIR}
99+
${_gRPC_UPB_GENERATED_DIR}
100+
${_gRPC_UPB_GRPC_GENERATED_DIR}
101+
${_gRPC_UPB_INCLUDE_DIR}
102+
${_gRPC_XXHASH_INCLUDE_DIR}
103+
${_gRPC_ZLIB_INCLUDE_DIR}
104+
+ ${_gRPC_RE2_INCLUDE_DIR} # RE2 and SSL bring in all header files in vcpkg and can shadow other header files. Move them to the end
105+
+ ${_gRPC_SSL_INCLUDE_DIR}
106+
)
107+
target_link_libraries(upb_textformat_lib
108+
${_gRPC_ALLTARGETS_LIBRARIES}
109+
@@ -15420,6 +15430,10 @@ target_link_libraries(grpc_cpp_plugin
110+
grpc_plugin_support
111+
)
112+
113+
+# enable protoc to find plugin on Mac
114+
+set_target_properties(grpc_cpp_plugin PROPERTIES
115+
+ INSTALL_RPATH "@loader_path/../lib"
116+
+)
117+
118+
119+
if(gRPC_INSTALL)

vcpkg.json

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,15 @@
22
"name": "opentelemetry-matlab",
33
"$schema": "https://raw.githubusercontent.com/microsoft/vcpkg-tool/main/docs/vcpkg.schema.json",
44
"dependencies": [
5-
"protobuf",
5+
{
6+
"name":"protobuf",
7+
"version>=":"5.26.1"
8+
},
9+
{
10+
"name":"protobuf",
11+
"version>=":"5.26.1",
12+
"host": true
13+
},
614
"zlib",
715
"nlohmann-json"
816
],
@@ -16,15 +24,13 @@
1624
"otlp-grpc": {
1725
"description": "Otlp gRPC Exporter",
1826
"dependencies": [
19-
"grpc",
2027
"abseil",
2128
"c-ares",
2229
"re2",
2330
{
2431
"name": "openssl",
2532
"version>=": "3.5.0"
26-
},
27-
"upb"
33+
}
2834
]
2935
}
3036
},

0 commit comments

Comments
 (0)