@@ -2,6 +2,20 @@ cmake_minimum_required(VERSION 3.9.0)
22
33cmake_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()
5468if (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
114126project (${CLIENT_PROJECT_NAME} VERSION ${OTEL_MATLAB_VERSION} LANGUAGES CXX C)
115127
128+ # set RPATH to enable libraries to find their dependencies
116129if (APPLE )
117130 set (CMAKE_INSTALL_RPATH @loader_path)
118131elseif (UNIX )
@@ -494,6 +507,7 @@ endif()
494507target_link_libraries (${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OPENTELEMETRY_PROXY_LINK_LIBRARIES} )
495508
496509# On Linux, when linking with certain static libraries, need to force include entire archive to avoid the linker mistakenly leaving out symbols
510+ # Also, set INSTALLED_RPATH such that dependencies can be found in platform specific directories
497511if (UNIX AND NOT APPLE AND NOT CYGWIN )
498512 set (OPENTELEMETRY_PROXY_LINK_OPTIONS -Wl,--whole-archive
499513 "${OTEL_CPP_PREFIX} /lib/libopentelemetry_trace.a"
@@ -502,8 +516,9 @@ if(UNIX AND NOT APPLE AND NOT CYGWIN)
502516 "${OTEL_CPP_PREFIX} /lib/libopentelemetry_otlp_recordable.a"
503517 ${ABSL_LIBRARIES} -Wl,--no -whole-archive)
504518 target_link_options (${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OPENTELEMETRY_PROXY_LINK_OPTIONS} )
519+ set_target_properties (${OPENTELEMETRY_PROXY_LIBRARY_NAME} PROPERTIES INSTALL_RPATH "$ORIGIN;$ORIGIN/../../lib/${PLATFORM_NAME} " )
505520elseif (APPLE )
506- set_target_properties (${OPENTELEMETRY_PROXY_LIBRARY_NAME} PROPERTIES INSTALL_RPATH "@executable_path " )
521+ set_target_properties (${OPENTELEMETRY_PROXY_LIBRARY_NAME} PROPERTIES INSTALL_RPATH "@loader_path;@loader_path/../../lib/ ${PLATFORM_NAME} " )
507522endif ()
508523
509524# Use C++17
@@ -560,6 +575,12 @@ libmexclass_client_add_mex_gateway(
560575 SOURCES ${OPENTELEMETRY_MEX_GATEWAY_SOURCES}
561576)
562577
578+ if (APPLE )
579+ set_target_properties (${OPENTELEMETRY_MEX_GATEWAY_NAME} PROPERTIES INSTALL_RPATH "@loader_path;@loader_path/../../lib/${PLATFORM_NAME} " )
580+ elseif (UNIX )
581+ set_target_properties (${OPENTELEMETRY_MEX_GATEWAY_NAME} PROPERTIES INSTALL_RPATH "$ORIGIN;$ORIGIN/../../lib/${PLATFORM_NAME} " )
582+ endif ()
583+
563584# ###############################
564585# libmexclass Client Installation
565586# ###############################
@@ -633,16 +654,27 @@ endif()
633654install (FILES ${OTLP_MISC_FILES} DESTINATION .)
634655
635656# Install dependent runtime libraries
636- set (LIBMEXCLASS_PROXY_INSTALLED_DIR +libmexclass/+proxy)
637- install (FILES ${OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES} DESTINATION ${LIBMEXCLASS_PROXY_INSTALLED_DIR} )
657+ if (WIN32 )
658+ # On Windows, install all libraries in the same directory because of the lack of a settable rpath
659+ set (DEPENDENT_RUNTIME_INSTALLED_DIR +libmexclass/+proxy)
660+ else ()
661+ # On non-Windows platform, install dependent libraries in a platform specific directory so that
662+ # they won't get overwritten when packaged
663+ set (DEPENDENT_RUNTIME_INSTALLED_DIR lib/${PLATFORM_NAME} )
664+ endif ()
665+ install (FILES ${OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES} DESTINATION ${DEPENDENT_RUNTIME_INSTALLED_DIR} )
638666if (UNIX AND WITH_OTLP_GRPC)
639- install (DIRECTORY ${GRPC_INSTALL_LIB_DIR} / DESTINATION ${LIBMEXCLASS_PROXY_INSTALLED_DIR }
667+ install (DIRECTORY ${GRPC_INSTALL_LIB_DIR} / DESTINATION ${DEPENDENT_RUNTIME_INSTALLED_DIR }
640668 FILES_MATCHING
641669 PATTERN "*.*"
642670 PATTERN "cmake" EXCLUDE
643671 PATTERN "pkgconfig" EXCLUDE )
644672endif ()
645673
674+ if (UNIX )
675+ install (CODE "file(RENAME \" ${CMAKE_INSTALL_PREFIX} /+libmexclass/+proxy/libmexclass${CMAKE_SHARED_LIBRARY_SUFFIX} \" \" ${CMAKE_INSTALL_PREFIX} /lib/${PLATFORM_NAME} /libmexclass${CMAKE_SHARED_LIBRARY_SUFFIX} \" )
676+ install(CODE " file(RENAME \"${CMAKE_INSTALL_PREFIX} /+libmexclass/+proxy/libOtelMatlabProxy${CMAKE_SHARED_LIBRARY_SUFFIX} \" \"${CMAKE_INSTALL_PREFIX} /lib/${PLATFORM_NAME} /libOtelMatlabProxy${CMAKE_SHARED_LIBRARY_SUFFIX} \")
677+ ")
646678# ##############################
647679# Subdirectories
648680# ##############################
0 commit comments