diff --git a/CMakeLists.txt b/CMakeLists.txt index 04b78cc..4050294 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -111,7 +111,78 @@ if(NOT DEFINED OTEL_MATLAB_VERSION) set(OTEL_MATLAB_VERSION 0.0.0) # set to an invalid default if not defined endif() -project(${CLIENT_PROJECT_NAME} VERSION ${OTEL_MATLAB_VERSION} LANGUAGES CXX) +project(${CLIENT_PROJECT_NAME} VERSION ${OTEL_MATLAB_VERSION} LANGUAGES CXX C) + +if(APPLE) + set(CMAKE_INSTALL_RPATH @loader_path) +elseif(UNIX) + set(CMAKE_INSTALL_RPATH "$ORIGIN") +endif() + +# ########################### +# gRPC +# ########################### +if(WITH_OTLP_GRPC) + set(GRPC_PACKAGE_NAME gRPC) + set(GRPC_GIT_REPOSITORY "https://github.com/grpc/grpc.git") + set(GRPC_GIT_TAG "4795c5e") + set(GRPC_PREFIX ${CMAKE_BINARY_DIR}/gRPC) + set(GRPC_INSTALL_DIR ${GRPC_PREFIX}/install) + set(GRPC_INSTALL_LIB_DIR ${GRPC_INSTALL_DIR}/lib) + + set(PATCHES_DIR ${CMAKE_SOURCE_DIR}/patches) + if(WIN32) + set(GRPC_PATCH_CMD "") + set(GRPC_SHARED "-DBUILD_SHARED_LIBS=OFF") + elseif(APPLE) + set(GRPC_PATCH_CMD git apply ${PATCHES_DIR}/grpc-mac.patch) + set(GRPC_SHARED "-DBUILD_SHARED_LIBS=ON") + else() # Linux + set(GRPC_PATCH_CMD "") + set(GRPC_SHARED "-DBUILD_SHARED_LIBS=ON") + endif() + + include(ExternalProject) + ExternalProject_Add( + ${GRPC_PACKAGE_NAME} + GIT_REPOSITORY ${GRPC_GIT_REPOSITORY} + GIT_TAG ${GRPC_GIT_TAG} + PREFIX ${GRPC_PREFIX} + UPDATE_DISCONNECTED 1 + PATCH_COMMAND ${GRPC_PATCH_CMD} + 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} ${GRPC_SHARED} -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} + INSTALL_DIR ${GRPC_INSTALL_DIR} + INSTALL_COMMAND ${CMAKE_COMMAND} --install . --prefix ${GRPC_INSTALL_DIR} --config $ + ) + + if(UNIX AND NOT APPLE AND NOT CYGWIN) + # needed for running protoc as part of the opentelemetry-cpp build + set(GRPC_LD_LIBRARY_PATH_ENV "LD_LIBRARY_PATH=${GRPC_INSTALL_LIB_DIR}") + endif() + + if(WIN32) + set(GRPC_LINK_LIBRARIES ${GRPC_INSTALL_LIB_DIR}/address_sorting.lib + ${GRPC_INSTALL_LIB_DIR}/gpr.lib + ${GRPC_INSTALL_LIB_DIR}/grpc++.lib + ${GRPC_INSTALL_LIB_DIR}/grpc++_alts.lib + ${GRPC_INSTALL_LIB_DIR}/grpc++_error_details.lib + ${GRPC_INSTALL_LIB_DIR}/grpc++_reflection.lib + ${GRPC_INSTALL_LIB_DIR}/grpc++_unsecure.lib + ${GRPC_INSTALL_LIB_DIR}/grpc.lib + ${GRPC_INSTALL_LIB_DIR}/grpc_authorization_provider.lib + ${GRPC_INSTALL_LIB_DIR}/grpc_plugin_support.lib + ${GRPC_INSTALL_LIB_DIR}/grpc_unsecure.lib + ${GRPC_INSTALL_LIB_DIR}/grpcpp_channelz.lib + ${GRPC_INSTALL_LIB_DIR}/upb_base_lib.lib + ${GRPC_INSTALL_LIB_DIR}/upb_json_lib.lib + ${GRPC_INSTALL_LIB_DIR}/upb_mem_lib.lib + ${GRPC_INSTALL_LIB_DIR}/upb_message_lib.lib + ${GRPC_INSTALL_LIB_DIR}/upb_textformat_lib.lib + ${GRPC_INSTALL_LIB_DIR}/utf8_range_lib.lib) + else() + set(GRPC_LINK_LIBRARIES ${GRPC_INSTALL_LIB_DIR}/libgrpc++${CMAKE_SHARED_LIBRARY_SUFFIX}) + endif() +endif() # ###################################### # libmexclass @@ -204,34 +275,56 @@ if(NOT DEFINED OTEL_CPP_INSTALLED_DIR) set(PATCHES_DIR ${CMAKE_SOURCE_DIR}/patches) if(SKIP_OTEL_CPP_PATCH) - set(patch_comand "") + set(OTEL_CPP_PATCH_CMD "") elseif(WIN32) # Windows patch to add a preprocessor definition _DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR # See https://github.com/mathworks/OpenTelemetry-Matlab/issues/130 - set(patch_command git apply ${PATCHES_DIR}/otel-cpp-windows.patch) + set(OTEL_CPP_PATCH_CMD git apply ${PATCHES_DIR}/otel-cpp-windows.patch) elseif(APPLE) # Mac patch to fix a linker issue when including gRPC exporter - set(patch_command git apply ${PATCHES_DIR}/otel-cpp-mac.patch) + set(OTEL_CPP_PATCH_CMD git apply ${PATCHES_DIR}/otel-cpp-mac.patch) else() - set(patch_command "") + set(OTEL_CPP_PATCH_CMD "") + endif() + + if(WIN32 OR APPLE) + # Windows and Mac use the default build command + # Note: examples are temporarily turned off (-DWITH_EXAMPLES=OFF) due to a build issue that is now fixed in #3284 + # Renable examples after pulling in the fix + ExternalProject_Add( + ${OTEL_CPP_PROJECT_NAME} + GIT_REPOSITORY ${OTEL_CPP_GIT_REPOSITORY} + GIT_TAG ${OTEL_CPP_GIT_TAG} + PREFIX ${OTEL_CPP_PREFIX} + UPDATE_DISCONNECTED 1 + PATCH_COMMAND ${OTEL_CPP_PATCH_CMD} + 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} + BUILD_BYPRODUCTS ${OTEL_CPP_LIBRARIES} + INSTALL_DIR ${OTEL_CPP_PREFIX} + INSTALL_COMMAND ${CMAKE_COMMAND} --install . --prefix ${OTEL_CPP_PREFIX} --config $ + ) + else() + # Linux use a custom build command + # Note: examples are temporarily turned off (-DWITH_EXAMPLES=OFF) due to a build issue that is now fixed in #3284 + # Renable examples after pulling in the fix + ExternalProject_Add( + ${OTEL_CPP_PROJECT_NAME} + GIT_REPOSITORY ${OTEL_CPP_GIT_REPOSITORY} + GIT_TAG ${OTEL_CPP_GIT_TAG} + PREFIX ${OTEL_CPP_PREFIX} + UPDATE_DISCONNECTED 1 + PATCH_COMMAND ${OTEL_CPP_PATCH_CMD} + 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} + BUILD_COMMAND ${CMAKE_COMMAND} -E env ${GRPC_LD_LIBRARY_PATH_ENV} ${CMAKE_MAKE_PROGRAM} + BUILD_BYPRODUCTS ${OTEL_CPP_LIBRARIES} + INSTALL_DIR ${OTEL_CPP_PREFIX} + INSTALL_COMMAND ${CMAKE_COMMAND} --install . --prefix ${OTEL_CPP_PREFIX} --config $ + ) endif() - # Note: examples are temporarily turned off (-DWITH_EXAMPLES=OFF) due to a build issue that is now fixed in #3284 - # Renable examples after pulling in the fix - ExternalProject_Add( - ${OTEL_CPP_PROJECT_NAME} - GIT_REPOSITORY ${OTEL_CPP_GIT_REPOSITORY} - GIT_TAG ${OTEL_CPP_GIT_TAG} - PREFIX ${OTEL_CPP_PREFIX} - UPDATE_DISCONNECTED 1 - PATCH_COMMAND ${patch_command} - 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} - BUILD_BYPRODUCTS ${OTEL_CPP_LIBRARIES} - INSTALL_DIR ${OTEL_CPP_PREFIX} - INSTALL_COMMAND ${CMAKE_COMMAND} --install . --prefix ${OTEL_CPP_PREFIX} --config $ - ) endif() + # ########################### # OpenTelemetry Proxy Library # ########################### @@ -251,15 +344,10 @@ if(WITH_OTLP_HTTP) endif() if(WITH_OTLP_GRPC) - find_package(gRPC REQUIRED) find_package(absl REQUIRED) find_package(c-ares REQUIRED) find_package(re2 REQUIRED) - if(WIN32) - find_package(openssl REQUIRED) - elseif(UNIX AND NOT APPLE AND NOT CYGWIN) - find_package(upb REQUIRED) - endif() + find_package(OpenSSL REQUIRED COMPONENTS SSL Crypto) endif() set(TRACE_API_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/api/trace/include) @@ -385,12 +473,13 @@ if(WIN32) endif() # link against OpenTelemetry-cpp libraries and their dependencies -set(OPENTELEMETRY_PROXY_LINK_LIBRARIES ${OTEL_CPP_LIBRARIES} ${Protobuf_LIBRARIES} ${Matlab_MEX_LIBRARY}) +set(OPENTELEMETRY_PROXY_LINK_LIBRARIES ${OTEL_CPP_LIBRARIES} protobuf::libprotobuf ${Matlab_MEX_LIBRARY}) if(WITH_OTLP_HTTP) set(OPENTELEMETRY_PROXY_LINK_LIBRARIES ${OPENTELEMETRY_PROXY_LINK_LIBRARIES} ${CURL_LIBRARIES}) endif() if(WITH_OTLP_GRPC) - set(OPENTELEMETRY_PROXY_LINK_LIBRARIES ${OPENTELEMETRY_PROXY_LINK_LIBRARIES} gRPC::grpc++ absl::synchronization) + set(OPENTELEMETRY_PROXY_LINK_LIBRARIES ${OPENTELEMETRY_PROXY_LINK_LIBRARIES} ${GRPC_LINK_LIBRARIES} absl::synchronization + absl::random_random ZLIB::ZLIB re2::re2 c-ares::cares OpenSSL::SSL OpenSSL::Crypto) endif() target_link_libraries(${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OPENTELEMETRY_PROXY_LINK_LIBRARIES}) @@ -402,8 +491,7 @@ if(UNIX AND NOT APPLE AND NOT CYGWIN) "${OTEL_CPP_PREFIX}/lib/libopentelemetry_logs.a" "${OTEL_CPP_PREFIX}/lib/libopentelemetry_common.a" "${OTEL_CPP_PREFIX}/lib/libopentelemetry_otlp_recordable.a" - ${ABSL_LIBRARIES} - ${UPB_LIBRARIES} -Wl,--no-whole-archive) + ${ABSL_LIBRARIES} -Wl,--no-whole-archive) target_link_options(${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OPENTELEMETRY_PROXY_LINK_OPTIONS}) elseif(APPLE) set_target_properties(${OPENTELEMETRY_PROXY_LIBRARY_NAME} PROPERTIES INSTALL_RPATH "@executable_path") @@ -412,14 +500,13 @@ endif() # Use C++17 target_compile_features(${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE cxx_std_17) +# runtime dependent libraries +# gRPC runtime libraries for non-Windows are listed further below in the installation section if(WIN32) - # runtime dependent libraries - # The TARGET_FILE generator command is somehow returning the .lib file instead of .dll for Protobuf and Zlib. + # The TARGET_FILE generator command is somehow returning the .lib file instead of .dll for Zlib. # As a result, we have to hardcode those library names instead. - set(PROTOBUF_DLL $<$:libprotobufd.dll>$<$:libprotobuf.dll>) set(ZLIB_DLL $<$:zlibd1.dll>$<$:zlib1.dll>) - set(OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES $/../bin/${PROTOBUF_DLL} - $/../bin/${ZLIB_DLL}) + set(OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES $/../bin/${ZLIB_DLL}) if(WITH_OTLP_HTTP) set(OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES ${OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES} @@ -438,7 +525,7 @@ if(WIN32) else() set(OTEL_CPP_RUNTIME ${OTEL_CPP_PREFIX}/lib/libopentelemetry_proto${CMAKE_SHARED_LIBRARY_SUFFIX}) if(WITH_OTLP_GRPC) - set(OTEL_CPP_RUNTIME ${OTEL_CPP_RUNTIME} + set(OTEL_CPP_RUNTIME ${OTEL_CPP_RUNTIME} ${OTEL_CPP_PREFIX}/lib/libopentelemetry_proto_grpc${CMAKE_SHARED_LIBRARY_SUFFIX}) endif() if(APPLE) @@ -539,6 +626,13 @@ install(FILES ${OTLP_MISC_FILES} DESTINATION .) # Install dependent runtime libraries set(LIBMEXCLASS_PROXY_INSTALLED_DIR +libmexclass/+proxy) install(FILES ${OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES} DESTINATION ${LIBMEXCLASS_PROXY_INSTALLED_DIR}) +if(UNIX AND WITH_OTLP_GRPC) + install(DIRECTORY ${GRPC_INSTALL_LIB_DIR}/ DESTINATION ${LIBMEXCLASS_PROXY_INSTALLED_DIR} + FILES_MATCHING + PATTERN "*.*" + PATTERN "cmake" EXCLUDE + PATTERN "pkgconfig" EXCLUDE) +endif() # ############################## # Subdirectories diff --git a/cmake/vcpkg_triplets/x64-windows-otel-matlab.cmake b/cmake/vcpkg_triplets/x64-windows-otel-matlab.cmake index 9cb381d..35ddeae 100644 --- a/cmake/vcpkg_triplets/x64-windows-otel-matlab.cmake +++ b/cmake/vcpkg_triplets/x64-windows-otel-matlab.cmake @@ -2,7 +2,7 @@ set(VCPKG_TARGET_ARCHITECTURE x64) set(VCPKG_CRT_LINKAGE dynamic) # Conflict with abseil_dll.dll used by Simulink. cares.dll and re2.dll are also shipped with MATLAB. # Use static libraries to avoid conflict. -if(${PORT} MATCHES "(abseil|c-ares|re2)") +if(${PORT} MATCHES "(protobuf|abseil|c-ares|re2)") set(VCPKG_LIBRARY_LINKAGE static) else() set(VCPKG_LIBRARY_LINKAGE dynamic) diff --git a/patches/grpc-mac.patch b/patches/grpc-mac.patch new file mode 100644 index 0000000..0e186ec --- /dev/null +++ b/patches/grpc-mac.patch @@ -0,0 +1,119 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 0627429f49..60a86853ba 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -3588,13 +3588,13 @@ target_include_directories(upb_base_lib + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR} + ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} +- ${_gRPC_RE2_INCLUDE_DIR} +- ${_gRPC_SSL_INCLUDE_DIR} + ${_gRPC_UPB_GENERATED_DIR} + ${_gRPC_UPB_GRPC_GENERATED_DIR} + ${_gRPC_UPB_INCLUDE_DIR} + ${_gRPC_XXHASH_INCLUDE_DIR} + ${_gRPC_ZLIB_INCLUDE_DIR} ++ ${_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 ++ ${_gRPC_SSL_INCLUDE_DIR} + ) + target_link_libraries(upb_base_lib + ${_gRPC_ALLTARGETS_LIBRARIES} +@@ -3651,6 +3651,11 @@ add_library(upb_json_lib ${_gRPC_STATIC_WIN32} + + target_compile_features(upb_json_lib PUBLIC cxx_std_14) + ++# allow undefined symbols in link step, as these symbols can be resolved later ++if(APPLE) ++ target_link_options(upb_json_lib PRIVATE -Wl,-undefined,dynamic_lookup) ++endif() ++ + set_target_properties(upb_json_lib PROPERTIES + VERSION ${gRPC_CORE_VERSION} + SOVERSION ${gRPC_CORE_SOVERSION} +@@ -3672,13 +3677,13 @@ target_include_directories(upb_json_lib + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR} + ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} +- ${_gRPC_RE2_INCLUDE_DIR} +- ${_gRPC_SSL_INCLUDE_DIR} + ${_gRPC_UPB_GENERATED_DIR} + ${_gRPC_UPB_GRPC_GENERATED_DIR} + ${_gRPC_UPB_INCLUDE_DIR} + ${_gRPC_XXHASH_INCLUDE_DIR} + ${_gRPC_ZLIB_INCLUDE_DIR} ++ ${_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 ++ ${_gRPC_SSL_INCLUDE_DIR} + ) + target_link_libraries(upb_json_lib + ${_gRPC_ALLTARGETS_LIBRARIES} +@@ -3726,13 +3731,13 @@ target_include_directories(upb_mem_lib + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR} + ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} +- ${_gRPC_RE2_INCLUDE_DIR} +- ${_gRPC_SSL_INCLUDE_DIR} + ${_gRPC_UPB_GENERATED_DIR} + ${_gRPC_UPB_GRPC_GENERATED_DIR} + ${_gRPC_UPB_INCLUDE_DIR} + ${_gRPC_XXHASH_INCLUDE_DIR} + ${_gRPC_ZLIB_INCLUDE_DIR} ++ ${_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 ++ ${_gRPC_SSL_INCLUDE_DIR} + ) + target_link_libraries(upb_mem_lib + ${_gRPC_ALLTARGETS_LIBRARIES} +@@ -3788,13 +3793,13 @@ target_include_directories(upb_message_lib + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR} + ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} +- ${_gRPC_RE2_INCLUDE_DIR} +- ${_gRPC_SSL_INCLUDE_DIR} + ${_gRPC_UPB_GENERATED_DIR} + ${_gRPC_UPB_GRPC_GENERATED_DIR} + ${_gRPC_UPB_INCLUDE_DIR} + ${_gRPC_XXHASH_INCLUDE_DIR} + ${_gRPC_ZLIB_INCLUDE_DIR} ++ ${_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 ++ ${_gRPC_SSL_INCLUDE_DIR} + ) + target_link_libraries(upb_message_lib + ${_gRPC_ALLTARGETS_LIBRARIES} +@@ -3852,6 +3857,11 @@ add_library(upb_textformat_lib ${_gRPC_STATIC_WIN32} + + target_compile_features(upb_textformat_lib PUBLIC cxx_std_14) + ++# allow undefined symbols in link step, as these symbols can be resolved later ++if(APPLE) ++ target_link_options(upb_textformat_lib PRIVATE -Wl,-undefined,dynamic_lookup) ++endif() ++ + set_target_properties(upb_textformat_lib PROPERTIES + VERSION ${gRPC_CORE_VERSION} + SOVERSION ${gRPC_CORE_SOVERSION} +@@ -3873,13 +3883,13 @@ target_include_directories(upb_textformat_lib + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR} + ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} +- ${_gRPC_RE2_INCLUDE_DIR} +- ${_gRPC_SSL_INCLUDE_DIR} + ${_gRPC_UPB_GENERATED_DIR} + ${_gRPC_UPB_GRPC_GENERATED_DIR} + ${_gRPC_UPB_INCLUDE_DIR} + ${_gRPC_XXHASH_INCLUDE_DIR} + ${_gRPC_ZLIB_INCLUDE_DIR} ++ ${_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 ++ ${_gRPC_SSL_INCLUDE_DIR} + ) + target_link_libraries(upb_textformat_lib + ${_gRPC_ALLTARGETS_LIBRARIES} +@@ -15420,6 +15430,10 @@ target_link_libraries(grpc_cpp_plugin + grpc_plugin_support + ) + ++# enable protoc to find plugin on Mac ++set_target_properties(grpc_cpp_plugin PROPERTIES ++ INSTALL_RPATH "@loader_path/../lib" ++) + + + if(gRPC_INSTALL) diff --git a/vcpkg.json b/vcpkg.json index a45c1fd..7685e40 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -2,7 +2,15 @@ "name": "opentelemetry-matlab", "$schema": "https://raw.githubusercontent.com/microsoft/vcpkg-tool/main/docs/vcpkg.schema.json", "dependencies": [ - "protobuf", + { + "name":"protobuf", + "version>=":"5.26.1" + }, + { + "name":"protobuf", + "version>=":"5.26.1", + "host": true + }, "zlib", "nlohmann-json" ], @@ -16,15 +24,13 @@ "otlp-grpc": { "description": "Otlp gRPC Exporter", "dependencies": [ - "grpc", "abseil", "c-ares", "re2", { "name": "openssl", "version>=": "3.5.0" - }, - "upb" + } ] } },