Skip to content

Commit ccdd0b9

Browse files
authored
Merge pull request #225 from mathworks/separate_libraries
Separate libraries
2 parents 5f05114 + 9147c52 commit ccdd0b9

File tree

5 files changed

+46
-13
lines changed

5 files changed

+46
-13
lines changed

CMakeLists.txt

Lines changed: 42 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,20 @@ cmake_minimum_required(VERSION 3.9.0)
22

33
cmake_policy(SET CMP0074 NEW)
44

5+
# set a platform name variable, needed to create separate directories for storing dependent libraries
6+
if(WIN32)
7+
set(PLATFORM_NAME win64)
8+
elseif(APPLE)
9+
# run uname -m to determine whether arm64 or x86_64
10+
exec_program(uname ARGS -m OUTPUT_VARIABLE MAC_HOST_SYSTEM)
11+
if(${MAC_HOST_SYSTEM} STREQUAL "arm64")
12+
set(PLATFORM_NAME maca64)
13+
elseif(${MAC_HOST_SYSTEM} STREQUAL "x86_64")
14+
set(PLATFORM_NAME maci64)
15+
endif()
16+
else() # Linux
17+
set(PLATFORM_NAME glnxa64)
18+
endif()
519

620
# ###########################
721
# vcpkg
@@ -54,8 +68,6 @@ endif()
5468
if(APPLE)
5569
# On Mac, there is a conflict between libcurl and the version in MATLAB, so
5670
# use libcurl as a shared library and load the MATLAB version at runtime
57-
# run uname -m to determine whether arm64 or x86_64
58-
exec_program(uname ARGS -m OUTPUT_VARIABLE MAC_HOST_SYSTEM)
5971
if(${MAC_HOST_SYSTEM} STREQUAL "arm64")
6072
set(VCPKG_OTEL_TRIPLET "arm64-osx-otel-matlab")
6173
elseif(${MAC_HOST_SYSTEM} STREQUAL "x86_64")
@@ -113,6 +125,7 @@ endif()
113125

114126
project(${CLIENT_PROJECT_NAME} VERSION ${OTEL_MATLAB_VERSION} LANGUAGES CXX C)
115127

128+
# set RPATH to enable libraries to find their dependencies
116129
if(APPLE)
117130
set(CMAKE_INSTALL_RPATH @loader_path)
118131
elseif(UNIX)
@@ -502,8 +515,6 @@ if(UNIX AND NOT APPLE AND NOT CYGWIN)
502515
"${OTEL_CPP_PREFIX}/lib/libopentelemetry_otlp_recordable.a"
503516
${ABSL_LIBRARIES} -Wl,--no-whole-archive)
504517
target_link_options(${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OPENTELEMETRY_PROXY_LINK_OPTIONS})
505-
elseif(APPLE)
506-
set_target_properties(${OPENTELEMETRY_PROXY_LIBRARY_NAME} PROPERTIES INSTALL_RPATH "@executable_path")
507518
endif()
508519

509520
# Use C++17
@@ -560,6 +571,12 @@ libmexclass_client_add_mex_gateway(
560571
SOURCES ${OPENTELEMETRY_MEX_GATEWAY_SOURCES}
561572
)
562573

574+
if(APPLE)
575+
set_target_properties(${OPENTELEMETRY_MEX_GATEWAY_NAME} PROPERTIES INSTALL_RPATH "@loader_path;@loader_path/../../lib/${PLATFORM_NAME}")
576+
elseif(UNIX)
577+
set_target_properties(${OPENTELEMETRY_MEX_GATEWAY_NAME} PROPERTIES INSTALL_RPATH "$ORIGIN;$ORIGIN/../../lib/${PLATFORM_NAME}")
578+
endif()
579+
563580
# ###############################
564581
# libmexclass Client Installation
565582
# ###############################
@@ -633,14 +650,31 @@ endif()
633650
install(FILES ${OTLP_MISC_FILES} DESTINATION .)
634651

635652
# Install dependent runtime libraries
636-
set(LIBMEXCLASS_PROXY_INSTALLED_DIR +libmexclass/+proxy)
637-
install(FILES ${OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES} DESTINATION ${LIBMEXCLASS_PROXY_INSTALLED_DIR})
638-
if(UNIX AND WITH_OTLP_GRPC)
639-
install(DIRECTORY ${GRPC_INSTALL_LIB_DIR}/ DESTINATION ${LIBMEXCLASS_PROXY_INSTALLED_DIR}
653+
set(LIBMEXCLASS_PACKAGE_DIRECTORY +libmexclass/+proxy)
654+
if(WIN32)
655+
# On Windows, install all libraries in the same directory because of the lack of a settable rpath
656+
set(DEPENDENT_RUNTIME_INSTALLED_DIR ${LIBMEXCLASS_PACKAGE_DIRECTORY})
657+
else()
658+
# On non-Windows platform, install dependent libraries in a platform specific directory so that
659+
# they won't get overwritten when packaged
660+
set(DEPENDENT_RUNTIME_INSTALLED_DIR lib/${PLATFORM_NAME})
661+
endif()
662+
install(FILES ${OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES} DESTINATION ${DEPENDENT_RUNTIME_INSTALLED_DIR})
663+
if(UNIX)
664+
if(WITH_OTLP_GRPC)
665+
install(DIRECTORY ${GRPC_INSTALL_LIB_DIR}/ DESTINATION ${DEPENDENT_RUNTIME_INSTALLED_DIR}
640666
FILES_MATCHING
641667
PATTERN "*.*"
642668
PATTERN "cmake" EXCLUDE
643669
PATTERN "pkgconfig" EXCLUDE)
670+
endif()
671+
672+
# Move any shared libraries to platform specific directories, so that they won't overwrite each other
673+
set(LIBMEXCLASS_LIBRARY_NAME mexclass)
674+
set(LIBMEXCLASS_LIBRARY ${LIBMEXCLASS_LIBRARY_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX})
675+
set(OPENTELEMETRY_PROXY_LIBRARY ${OPENTELEMETRY_PROXY_LIBRARY_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX})
676+
install(CODE "file(RENAME \"${CMAKE_INSTALL_PREFIX}/${LIBMEXCLASS_PACKAGE_DIRECTORY}/lib${LIBMEXCLASS_LIBRARY}\" \"${CMAKE_INSTALL_PREFIX}/${DEPENDENT_RUNTIME_INSTALLED_DIR}/lib${LIBMEXCLASS_LIBRARY}\")")
677+
install(CODE "file(RENAME \"${CMAKE_INSTALL_PREFIX}/${LIBMEXCLASS_PACKAGE_DIRECTORY}/lib${OPENTELEMETRY_PROXY_LIBRARY}\" \"${CMAKE_INSTALL_PREFIX}/${DEPENDENT_RUNTIME_INSTALLED_DIR}/lib${OPENTELEMETRY_PROXY_LIBRARY}\")")
644678
endif()
645679

646680
# ##############################

README.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ MATLAB® interface to [OpenTelemetry™](https://opentelemetry.io/), base
55

66
### Status
77
1. Tracing, metrics, and logs are all fully supported and tested on Windows®, Linux®, and macOS.
8-
2. On Linux, when running MATLAB R2025a or newer releases, the gRPC library used in the gRPC exporter in this package may conflict with the same library in MATLAB, causing MATLAB to crash. To avoid this issue, install otel-matlab-nogrpc.mltbx in [version 1.10.2](https://github.com/mathworks/OpenTelemetry-MATLAB/releases/tag/1.10.2), which excludes the gRPC exporter.
9-
3. OpenTelemetry currently does not support non-ASCII characters. Defining names or attributes with non-ASCII characters will cause the telemetry data to become invalid and fail to export.
8+
2. OpenTelemetry currently does not support non-ASCII characters. Defining names or attributes with non-ASCII characters will cause the telemetry data to become invalid and fail to export.
109

1110
### MathWorks Products (https://www.mathworks.com)
1211

examples/context_propagation/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ target_link_libraries(${CONTEXTPROP_EXAMPLE_CPP_TARGET} PRIVATE ${OPENTELEMETRY_
1515
if(UNIX AND NOT APPLE AND NOT CYGWIN)
1616
target_link_options(${CONTEXTPROP_EXAMPLE_CPP_TARGET} PRIVATE ${OPENTELEMETRY_PROXY_LINK_OPTIONS})
1717
elseif(APPLE)
18-
set_target_properties(${CONTEXTPROP_EXAMPLE_CPP_TARGET} PROPERTIES BUILD_RPATH "${CMAKE_INSTALL_PREFIX}/${LIBMEXCLASS_PROXY_INSTALLED_DIR}")
18+
set_target_properties(${CONTEXTPROP_EXAMPLE_CPP_TARGET} PROPERTIES BUILD_RPATH "${CMAKE_INSTALL_PREFIX}/${DEPENDENT_RUNTIME_INSTALLED_DIR}")
1919
endif()
2020
# use the same C++ standard as OpenTelemetry-cpp if known, otherwise just use the default C++14
2121
if(NOT DEFINED OTEL_CPP_INSTALLED_DIR)

examples/webread/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ target_link_libraries(${WEBREAD_EXAMPLE_TARGET} PRIVATE ${OPENTELEMETRY_PROXY_LI
1212
if(UNIX AND NOT APPLE AND NOT CYGWIN)
1313
target_link_options(${WEBREAD_EXAMPLE_TARGET} PRIVATE ${OPENTELEMETRY_PROXY_LINK_OPTIONS})
1414
elseif(APPLE)
15-
set_target_properties(${WEBREAD_EXAMPLE_TARGET} PROPERTIES BUILD_RPATH "${CMAKE_INSTALL_PREFIX}/${LIBMEXCLASS_PROXY_INSTALLED_DIR}")
15+
set_target_properties(${WEBREAD_EXAMPLE_TARGET} PROPERTIES BUILD_RPATH "${CMAKE_INSTALL_PREFIX}/${DEPENDENT_RUNTIME_INSTALLED_DIR}")
1616
endif()
1717
# use the same C++ standard as OpenTelemetry-cpp if known, otherwise just use the default C++14
1818
if(NOT DEFINED OTEL_CPP_INSTALLED_DIR)

test/texamples.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ function testWebread(testCase)
268268

269269
% start the C++ server
270270
testCase.applyFixture(CppServerFixture(server, testCase));
271-
pause(3); % wait a little for server to start up
271+
pause(3); % wait for server to start up
272272

273273
% run the example
274274
webread_example();

0 commit comments

Comments
 (0)