Skip to content

Commit 4de3e9c

Browse files
authored
Merge pull request #124 from mathworks/fix_simulink_error
Fix library conflict with Simulink on Windows
2 parents 434bcb8 + 516fa0c commit 4de3e9c

File tree

2 files changed

+22
-6
lines changed

2 files changed

+22
-6
lines changed

CMakeLists.txt

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,23 @@ else()
2525
set(VCPKG_PREFIX ${CMAKE_BINARY_DIR}/vcpkg)
2626
endif()
2727

28-
# On Mac, there is a conflict between libcurl and the version in MATLAB, so
29-
# use libcurl as a shared library and load the MATLAB version at runtime
28+
# Define custom triplets for vcpkg
3029
if(APPLE)
30+
# On Mac, there is a conflict between libcurl and the version in MATLAB, so
31+
# use libcurl as a shared library and load the MATLAB version at runtime
3132
# run uname -m to determine whether arm64 or x86_64
3233
exec_program(uname ARGS -m OUTPUT_VARIABLE MAC_HOST_SYSTEM)
3334
set(VCPKG_OTEL_TRIPLET ${MAC_HOST_SYSTEM}-osx-otel-matlab)
3435
set(VCPKG_OVERLAY_TRIPLETS ${CMAKE_SOURCE_DIR}/cmake/vcpkg_triplets)
3536
set(VCPKG_TARGET_TRIPLET ${VCPKG_OTEL_TRIPLET})
37+
set(TRIPLET_DEFINITIONS -DVCPKG_OVERLAY_TRIPLETS="${VCPKG_OVERLAY_TRIPLETS}" -DVCPKG_TARGET_TRIPLET=${VCPKG_TARGET_TRIPLET})
38+
elseif(WIN32)
39+
# On Windows, there is a conflict between abseil_dll.dll and the version used by Simulink.
40+
# The shared library doesn't seem ABI stable and different versions cannot be used interchangeably.
41+
# To sidestep the problem, use static library.
42+
set(VCPKG_OVERLAY_TRIPLETS ${CMAKE_SOURCE_DIR}/cmake/vcpkg_triplets)
43+
set(VCPKG_TARGET_TRIPLET x64-windows-otel-matlab)
44+
set(TRIPLET_DEFINITIONS -DVCPKG_OVERLAY_TRIPLETS="${VCPKG_OVERLAY_TRIPLETS}" -DVCPKG_TARGET_TRIPLET=${VCPKG_TARGET_TRIPLET})
3645
endif()
3746

3847
set(VCPKG_FETCH_CONTENT_NAME vcpkg)
@@ -188,7 +197,7 @@ if(NOT DEFINED OTEL_CPP_INSTALLED_DIR)
188197
PREFIX ${OTEL_CPP_PREFIX}
189198
UPDATE_DISCONNECTED 1
190199
PATCH_COMMAND ${patch_command}
191-
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_OTLP_HTTP=${WITH_OTLP_HTTP} -DWITH_OTLP_GRPC=${WITH_OTLP_GRPC} -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}
200+
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_OTLP_HTTP=${WITH_OTLP_HTTP} -DWITH_OTLP_GRPC=${WITH_OTLP_GRPC} -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}
192201
BUILD_BYPRODUCTS ${OTEL_CPP_LIBRARIES}
193202
INSTALL_DIR ${OTEL_CPP_PREFIX}
194203
INSTALL_COMMAND ${CMAKE_COMMAND} --install . --prefix ${OTEL_CPP_PREFIX} --config $<CONFIG>
@@ -369,13 +378,11 @@ if(WIN32)
369378
endif()
370379

371380
if(WITH_OTLP_GRPC)
372-
# The TARGET_FILE generator command fails to return the DLL libraries for Abseil and OpenSSL.
381+
# The TARGET_FILE generator command fails to return the DLL libraries for OpenSSL.
373382
# As a result, we have to hardcode those library names instead.
374-
set(ABSL_DLL abseil_dll.dll)
375383
set(OPENSSL_DLL libssl-3-x64.dll)
376384
set(OPENSSL_CRYPTO_DLL libcrypto-3-x64.dll)
377385
set(OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES ${OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES}
378-
$<TARGET_FILE_DIR:c-ares::cares>/../bin/${ABSL_DLL}
379386
$<TARGET_FILE:c-ares::cares>
380387
$<TARGET_FILE_DIR:OpenSSL::SSL>/../bin/${OPENSSL_DLL}
381388
$<TARGET_FILE_DIR:OpenSSL::SSL>/../bin/${OPENSSL_CRYPTO_DLL}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
set(VCPKG_TARGET_ARCHITECTURE x64)
2+
set(VCPKG_CRT_LINKAGE dynamic)
3+
# Conflict with abseil_dll.dll used by Simulink. Use static library to avoid conflict.
4+
if(${PORT} MATCHES "abseil")
5+
set(VCPKG_LIBRARY_LINKAGE static)
6+
else()
7+
set(VCPKG_LIBRARY_LINKAGE dynamic)
8+
endif()
9+

0 commit comments

Comments
 (0)