From 802216ce1d07ab973b9c6b30a34cd1e09af0cc08 Mon Sep 17 00:00:00 2001 From: duncanpo Date: Mon, 3 Nov 2025 12:37:03 -0500 Subject: [PATCH 1/7] separate shared libraries into platform specific folders --- CMakeLists.txt | 44 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3a3968f..d000389 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,6 +2,20 @@ cmake_minimum_required(VERSION 3.9.0) cmake_policy(SET CMP0074 NEW) +# set a platform name variable, needed to create separate directories for storing dependent libraries +if(WIN32) + set(PLATFORM_NAME win64) +elseif(APPLE) + # run uname -m to determine whether arm64 or x86_64 + exec_program(uname ARGS -m OUTPUT_VARIABLE MAC_HOST_SYSTEM) + if(${MAC_HOST_SYSTEM} STREQUAL "arm64") + set(PLATFORM_NAME maca64) + elseif(${MAC_HOST_SYSTEM} STREQUAL "x86_64") + set(PLATFORM_NAME maci64) + endif() +else() # Linux + set(PLATFORM_NAME glnxa64) +endif() # ########################### # vcpkg @@ -54,8 +68,6 @@ endif() if(APPLE) # On Mac, there is a conflict between libcurl and the version in MATLAB, so # use libcurl as a shared library and load the MATLAB version at runtime - # run uname -m to determine whether arm64 or x86_64 - exec_program(uname ARGS -m OUTPUT_VARIABLE MAC_HOST_SYSTEM) if(${MAC_HOST_SYSTEM} STREQUAL "arm64") set(VCPKG_OTEL_TRIPLET "arm64-osx-otel-matlab") elseif(${MAC_HOST_SYSTEM} STREQUAL "x86_64") @@ -113,6 +125,7 @@ endif() project(${CLIENT_PROJECT_NAME} VERSION ${OTEL_MATLAB_VERSION} LANGUAGES CXX C) +# set RPATH to enable libraries to find their dependencies if(APPLE) set(CMAKE_INSTALL_RPATH @loader_path) elseif(UNIX) @@ -494,6 +507,7 @@ endif() target_link_libraries(${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OPENTELEMETRY_PROXY_LINK_LIBRARIES}) # On Linux, when linking with certain static libraries, need to force include entire archive to avoid the linker mistakenly leaving out symbols +# Also, set INSTALLED_RPATH such that dependencies can be found in platform specific directories if(UNIX AND NOT APPLE AND NOT CYGWIN) set(OPENTELEMETRY_PROXY_LINK_OPTIONS -Wl,--whole-archive "${OTEL_CPP_PREFIX}/lib/libopentelemetry_trace.a" @@ -502,8 +516,9 @@ if(UNIX AND NOT APPLE AND NOT CYGWIN) "${OTEL_CPP_PREFIX}/lib/libopentelemetry_otlp_recordable.a" ${ABSL_LIBRARIES} -Wl,--no-whole-archive) target_link_options(${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OPENTELEMETRY_PROXY_LINK_OPTIONS}) + set_target_properties(${OPENTELEMETRY_PROXY_LIBRARY_NAME} PROPERTIES INSTALL_RPATH "$ORIGIN;$ORIGIN/../../lib/${PLATFORM_NAME}") elseif(APPLE) - set_target_properties(${OPENTELEMETRY_PROXY_LIBRARY_NAME} PROPERTIES INSTALL_RPATH "@executable_path") + set_target_properties(${OPENTELEMETRY_PROXY_LIBRARY_NAME} PROPERTIES INSTALL_RPATH "@loader_path;@loader_path/../../lib/${PLATFORM_NAME}") endif() # Use C++17 @@ -560,6 +575,12 @@ libmexclass_client_add_mex_gateway( SOURCES ${OPENTELEMETRY_MEX_GATEWAY_SOURCES} ) +if(APPLE) + set_target_properties(${OPENTELEMETRY_MEX_GATEWAY_NAME} PROPERTIES INSTALL_RPATH "@loader_path;@loader_path/../../lib/${PLATFORM_NAME}") +elseif(UNIX) + set_target_properties(${OPENTELEMETRY_MEX_GATEWAY_NAME} PROPERTIES INSTALL_RPATH "$ORIGIN;$ORIGIN/../../lib/${PLATFORM_NAME}") +endif() + # ############################### # libmexclass Client Installation # ############################### @@ -633,16 +654,27 @@ endif() 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(WIN32) + # On Windows, install all libraries in the same directory because of the lack of a settable rpath + set(DEPENDENT_RUNTIME_INSTALLED_DIR +libmexclass/+proxy) +else() + # On non-Windows platform, install dependent libraries in a platform specific directory so that + # they won't get overwritten when packaged + set(DEPENDENT_RUNTIME_INSTALLED_DIR lib/${PLATFORM_NAME}) +endif() +install(FILES ${OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES} DESTINATION ${DEPENDENT_RUNTIME_INSTALLED_DIR}) if(UNIX AND WITH_OTLP_GRPC) - install(DIRECTORY ${GRPC_INSTALL_LIB_DIR}/ DESTINATION ${LIBMEXCLASS_PROXY_INSTALLED_DIR} + install(DIRECTORY ${GRPC_INSTALL_LIB_DIR}/ DESTINATION ${DEPENDENT_RUNTIME_INSTALLED_DIR} FILES_MATCHING PATTERN "*.*" PATTERN "cmake" EXCLUDE PATTERN "pkgconfig" EXCLUDE) endif() +if(UNIX) + 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}\") + 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}\") +") # ############################## # Subdirectories # ############################## From 5e0963d99c6c520b70dff198bca5bbe55d989334 Mon Sep 17 00:00:00 2001 From: duncanpo Date: Mon, 3 Nov 2025 19:16:37 -0500 Subject: [PATCH 2/7] Separate shared libraries into platform specific directories --- .github/workflows/test_packaging.yml | 149 +++++++++++++++++++++++++++ CMakeLists.txt | 24 +++-- 2 files changed, 162 insertions(+), 11 deletions(-) create mode 100644 .github/workflows/test_packaging.yml diff --git a/.github/workflows/test_packaging.yml b/.github/workflows/test_packaging.yml new file mode 100644 index 0000000..20fdc90 --- /dev/null +++ b/.github/workflows/test_packaging.yml @@ -0,0 +1,149 @@ +name: "Test Packaging" +on: + push: + branch: + - 'separate_libraries' +jobs: + build-ubuntu: + runs-on: ubuntu-latest + container: + image: ubuntu:20.04 + env: + OPENTELEMETRY_MATLAB_INSTALL_FOLDER: "otel_matlab_install" # not including the context github.workspace since it doesn't work inside a container due to a bug + steps: + - name: Download OpenTelemetry-Matlab source + uses: actions/checkout@v3 + with: + path: opentelemetry-matlab + - name: Install compiler and other tools + env: + DEBIAN_FRONTEND: "noninteractive" + run: apt update && apt install -y build-essential git curl pkg-config zip python3 ninja-build + - name: Install CMake + env: + MY_CMAKE_VERSION: 4.1.2 + run: | + curl -LO https://github.com/Kitware/CMake/releases/download/v$MY_CMAKE_VERSION/cmake-$MY_CMAKE_VERSION-linux-x86_64.tar.gz + tar -xvzf cmake-$MY_CMAKE_VERSION-linux-x86_64.tar.gz + echo "$GITHUB_WORKSPACE/cmake-$MY_CMAKE_VERSION-linux-x86_64/bin" >> "$GITHUB_PATH" + - name: Install MATLAB + uses: matlab-actions/setup-matlab@v2 + with: + release: R2025a + products: MATLAB_Compiler + - name: Build OpenTelemetry-Matlab + working-directory: opentelemetry-matlab + run: | + cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DWITH_OTLP_GRPC=ON -DWITH_OTLP_FILE=ON -DOTEL_MATLAB_VERSION=${{ github.ref_name }} -DCMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/$OPENTELEMETRY_MATLAB_INSTALL_FOLDER + cmake --build build --config Release --target install + - name: Compress into single artifact + run: tar -czf otel-matlab-ubuntu.tar.gz otel_matlab_install + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: otel-matlab-ubuntu.tar.gz + path: ./otel-matlab-ubuntu.tar.gz + build-windows: + runs-on: windows-latest + env: + OPENTELEMETRY_MATLAB_INSTALL: "${{ github.workspace }}/otel_matlab_install" + steps: + - name: Download OpenTelemetry-Matlab source + uses: actions/checkout@v3 + with: + path: opentelemetry-matlab + - name: Install ninja-build + run: choco install ninja + - name: Install MATLAB + uses: matlab-actions/setup-matlab@v2 + with: + release: R2025a + products: MATLAB_Compiler + - name: Build OpenTelemetry-Matlab + working-directory: opentelemetry-matlab + shell: cmd + run: | + call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64 + cmake -S . -B build -G Ninja -DCMAKE_CXX_COMPILER="cl.exe" -DCMAKE_C_COMPILER="cl.exe" -DCMAKE_BUILD_TYPE=Release -DWITH_OTLP_GRPC=ON -DWITH_OTLP_FILE=ON -DFETCH_VCPKG=ON -DOTEL_MATLAB_VERSION=${{ github.ref_name }} -DCMAKE_INSTALL_PREFIX=${{ env.OPENTELEMETRY_MATLAB_INSTALL }} + cmake --build build --config Release --target install + - name: Compress into single artifact + working-directory: ${{ github.workspace }} + run: tar -czf otel-matlab-windows.tar.gz otel_matlab_install + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: otel-matlab-windows.tar.gz + path: ${{ github.workspace }}/otel-matlab-windows.tar.gz + build-macos: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [macos-13, macos-14] # runs on Mac with both Intel (macos-13) and Apple Silicon (macos-14) processors + env: + OPENTELEMETRY_MATLAB_INSTALL: "${{ github.workspace }}/otel_matlab_install" + steps: + - name: Download OpenTelemetry-Matlab source + uses: actions/checkout@v3 + with: + path: opentelemetry-matlab + - name: Install ninja-build + run: brew install ninja + - name: Install MATLAB + uses: matlab-actions/setup-matlab@v2 + with: + release: R2025a + products: MATLAB_Compiler + - name: Build OpenTelemetry-Matlab + working-directory: opentelemetry-matlab + env: + CMAKE_POLICY_VERSION_MINIMUM: 3.5 # required by upb because its cmake requirement is not compatible with cmake 4 + run: | + cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DWITH_OTLP_GRPC=ON -DWITH_OTLP_FILE=ON -DOTEL_MATLAB_VERSION=${{ github.ref_name }} -DCMAKE_INSTALL_PREFIX=${{ env.OPENTELEMETRY_MATLAB_INSTALL }} + cmake --build build --config Release --target install + - name: Compress into single artifact + working-directory: ${{ github.workspace }} + run: tar -czf otel-matlab-${{ matrix.os }}.tar.gz otel_matlab_install + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: otel-matlab-${{ matrix.os }}.tar.gz + path: ${{ github.workspace }}/otel-matlab-${{ matrix.os }}.tar.gz + package-mltbx: + name: Package MATLAB Toolbox (MLTBX) Files + runs-on: ubuntu-22.04 + permissions: + contents: write + needs: + - build-ubuntu + - build-windows + - build-macos + env: + OPENTELEMETRY_MATLAB_INSTALL: "${{ github.workspace }}/otel_matlab_install" + WITHGRPC_FOLDER: "${{ github.workspace }}/withgrpc" + steps: + - name: Checkout OpenTelemetry-Matlab + uses: actions/checkout@v3 + with: + path: OpenTelemetry-Matlab + - name: Download Artifacts + uses: actions/download-artifact@v4 + with: + path: artifacts-downloaded + - name: Decompress Artifacts + run: | + mkdir $WITHGRPC_FOLDER + cd $WITHGRPC_FOLDER + mv ../artifacts-downloaded/*/otel-matlab-ubuntu.tar.gz . + mv ../artifacts-downloaded/*/otel-matlab-macos*.tar.gz . + mv ../artifacts-downloaded/*/otel-matlab-windows.tar.gz . + tar -xzvf otel-matlab-ubuntu.tar.gz + tar -xzvf otel-matlab-macos-13.tar.gz + tar -xzvf otel-matlab-macos-14.tar.gz + tar -xzvf otel-matlab-windows.tar.gz + - name: Compress into single artifact + run: tar -czf otel-matlab-test-package.tar.gz $WITHGRPC_FOLDER + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: otel-matlab-test-package.tar.gz + path: otel-matlab-test-package.tar.gz diff --git a/CMakeLists.txt b/CMakeLists.txt index d000389..f82b72b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -507,7 +507,6 @@ endif() target_link_libraries(${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OPENTELEMETRY_PROXY_LINK_LIBRARIES}) # On Linux, when linking with certain static libraries, need to force include entire archive to avoid the linker mistakenly leaving out symbols -# Also, set INSTALLED_RPATH such that dependencies can be found in platform specific directories if(UNIX AND NOT APPLE AND NOT CYGWIN) set(OPENTELEMETRY_PROXY_LINK_OPTIONS -Wl,--whole-archive "${OTEL_CPP_PREFIX}/lib/libopentelemetry_trace.a" @@ -516,9 +515,6 @@ if(UNIX AND NOT APPLE AND NOT CYGWIN) "${OTEL_CPP_PREFIX}/lib/libopentelemetry_otlp_recordable.a" ${ABSL_LIBRARIES} -Wl,--no-whole-archive) target_link_options(${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OPENTELEMETRY_PROXY_LINK_OPTIONS}) - set_target_properties(${OPENTELEMETRY_PROXY_LIBRARY_NAME} PROPERTIES INSTALL_RPATH "$ORIGIN;$ORIGIN/../../lib/${PLATFORM_NAME}") -elseif(APPLE) - set_target_properties(${OPENTELEMETRY_PROXY_LIBRARY_NAME} PROPERTIES INSTALL_RPATH "@loader_path;@loader_path/../../lib/${PLATFORM_NAME}") endif() # Use C++17 @@ -654,27 +650,33 @@ endif() install(FILES ${OTLP_MISC_FILES} DESTINATION .) # Install dependent runtime libraries +set(LIBMEXCLASS_PACKAGE_DIRECTORY +libmexclass/+proxy) if(WIN32) # On Windows, install all libraries in the same directory because of the lack of a settable rpath - set(DEPENDENT_RUNTIME_INSTALLED_DIR +libmexclass/+proxy) + set(DEPENDENT_RUNTIME_INSTALLED_DIR ${LIBMEXCLASS_PACKAGE_DIRECTORY}) else() # On non-Windows platform, install dependent libraries in a platform specific directory so that # they won't get overwritten when packaged set(DEPENDENT_RUNTIME_INSTALLED_DIR lib/${PLATFORM_NAME}) endif() install(FILES ${OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES} DESTINATION ${DEPENDENT_RUNTIME_INSTALLED_DIR}) -if(UNIX AND WITH_OTLP_GRPC) - install(DIRECTORY ${GRPC_INSTALL_LIB_DIR}/ DESTINATION ${DEPENDENT_RUNTIME_INSTALLED_DIR} +if(UNIX) + if(WITH_OTLP_GRPC) + install(DIRECTORY ${GRPC_INSTALL_LIB_DIR}/ DESTINATION ${DEPENDENT_RUNTIME_INSTALLED_DIR} FILES_MATCHING PATTERN "*.*" PATTERN "cmake" EXCLUDE PATTERN "pkgconfig" EXCLUDE) + endif() + + # Move any shared libraries to platform specific directories, so that they won't overwrite each other + set(LIBMEXCLASS_LIBRARY_NAME mexclass) + set(LIBMEXCLASS_LIBRARY ${LIBMEXCLASS_LIBRARY_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}) + set(OPENTELEMETRY_PROXY_LIBRARY ${OPENTELEMETRY_PROXY_LIBRARY_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}) + install(CODE "file(RENAME \"${CMAKE_INSTALL_PREFIX}/${LIBMEXCLASS_PACKAGE_DIRECTORY}/lib${LIBMEXCLASS_LIBRARY}\" \"${CMAKE_INSTALL_PREFIX}/${DEPENDENT_RUNTIME_INSTALLED_DIR}/lib${LIBMEXCLASS_LIBRARY}\")") + 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}\")") endif() -if(UNIX) - 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}\") - 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}\") -") # ############################## # Subdirectories # ############################## From 423ab7df08b48d0c7569f9de71c736a3e77badaa Mon Sep 17 00:00:00 2001 From: duncanpo Date: Mon, 3 Nov 2025 19:57:32 -0500 Subject: [PATCH 3/7] update workflows for testing --- .github/workflows/build_and_test_simple.yml | 1 + .github/workflows/test_packaging.yml | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build_and_test_simple.yml b/.github/workflows/build_and_test_simple.yml index d703e44..f863f25 100644 --- a/.github/workflows/build_and_test_simple.yml +++ b/.github/workflows/build_and_test_simple.yml @@ -6,6 +6,7 @@ on: branches-ignore: - 'main' - '[0-9]+.[0-9]+.[0-9]+' + - 'separate_libraries' env: MLM_LICENSE_TOKEN: ${{ secrets.MLM_LICENSE_TOKEN }} jobs: diff --git a/.github/workflows/test_packaging.yml b/.github/workflows/test_packaging.yml index 20fdc90..9936b16 100644 --- a/.github/workflows/test_packaging.yml +++ b/.github/workflows/test_packaging.yml @@ -34,7 +34,7 @@ jobs: - name: Build OpenTelemetry-Matlab working-directory: opentelemetry-matlab run: | - cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DWITH_OTLP_GRPC=ON -DWITH_OTLP_FILE=ON -DOTEL_MATLAB_VERSION=${{ github.ref_name }} -DCMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/$OPENTELEMETRY_MATLAB_INSTALL_FOLDER + cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DWITH_OTLP_GRPC=ON -DWITH_OTLP_FILE=ON -DCMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/$OPENTELEMETRY_MATLAB_INSTALL_FOLDER cmake --build build --config Release --target install - name: Compress into single artifact run: tar -czf otel-matlab-ubuntu.tar.gz otel_matlab_install @@ -64,7 +64,7 @@ jobs: shell: cmd run: | call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64 - cmake -S . -B build -G Ninja -DCMAKE_CXX_COMPILER="cl.exe" -DCMAKE_C_COMPILER="cl.exe" -DCMAKE_BUILD_TYPE=Release -DWITH_OTLP_GRPC=ON -DWITH_OTLP_FILE=ON -DFETCH_VCPKG=ON -DOTEL_MATLAB_VERSION=${{ github.ref_name }} -DCMAKE_INSTALL_PREFIX=${{ env.OPENTELEMETRY_MATLAB_INSTALL }} + cmake -S . -B build -G Ninja -DCMAKE_CXX_COMPILER="cl.exe" -DCMAKE_C_COMPILER="cl.exe" -DCMAKE_BUILD_TYPE=Release -DWITH_OTLP_GRPC=ON -DWITH_OTLP_FILE=ON -DFETCH_VCPKG=ON -DCMAKE_INSTALL_PREFIX=${{ env.OPENTELEMETRY_MATLAB_INSTALL }} cmake --build build --config Release --target install - name: Compress into single artifact working-directory: ${{ github.workspace }} @@ -98,7 +98,7 @@ jobs: env: CMAKE_POLICY_VERSION_MINIMUM: 3.5 # required by upb because its cmake requirement is not compatible with cmake 4 run: | - cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DWITH_OTLP_GRPC=ON -DWITH_OTLP_FILE=ON -DOTEL_MATLAB_VERSION=${{ github.ref_name }} -DCMAKE_INSTALL_PREFIX=${{ env.OPENTELEMETRY_MATLAB_INSTALL }} + cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DWITH_OTLP_GRPC=ON -DWITH_OTLP_FILE=ON -DCMAKE_INSTALL_PREFIX=${{ env.OPENTELEMETRY_MATLAB_INSTALL }} cmake --build build --config Release --target install - name: Compress into single artifact working-directory: ${{ github.workspace }} From d8f251506cc178ec2faa0cb589203946fe85580c Mon Sep 17 00:00:00 2001 From: duncanpo Date: Mon, 3 Nov 2025 22:05:57 -0500 Subject: [PATCH 4/7] update GitHub workflows --- .github/workflows/build_and_test_simple.yml | 1 - .github/workflows/test_packaging.yml | 149 -------------------- 2 files changed, 150 deletions(-) delete mode 100644 .github/workflows/test_packaging.yml diff --git a/.github/workflows/build_and_test_simple.yml b/.github/workflows/build_and_test_simple.yml index f863f25..d703e44 100644 --- a/.github/workflows/build_and_test_simple.yml +++ b/.github/workflows/build_and_test_simple.yml @@ -6,7 +6,6 @@ on: branches-ignore: - 'main' - '[0-9]+.[0-9]+.[0-9]+' - - 'separate_libraries' env: MLM_LICENSE_TOKEN: ${{ secrets.MLM_LICENSE_TOKEN }} jobs: diff --git a/.github/workflows/test_packaging.yml b/.github/workflows/test_packaging.yml deleted file mode 100644 index 9936b16..0000000 --- a/.github/workflows/test_packaging.yml +++ /dev/null @@ -1,149 +0,0 @@ -name: "Test Packaging" -on: - push: - branch: - - 'separate_libraries' -jobs: - build-ubuntu: - runs-on: ubuntu-latest - container: - image: ubuntu:20.04 - env: - OPENTELEMETRY_MATLAB_INSTALL_FOLDER: "otel_matlab_install" # not including the context github.workspace since it doesn't work inside a container due to a bug - steps: - - name: Download OpenTelemetry-Matlab source - uses: actions/checkout@v3 - with: - path: opentelemetry-matlab - - name: Install compiler and other tools - env: - DEBIAN_FRONTEND: "noninteractive" - run: apt update && apt install -y build-essential git curl pkg-config zip python3 ninja-build - - name: Install CMake - env: - MY_CMAKE_VERSION: 4.1.2 - run: | - curl -LO https://github.com/Kitware/CMake/releases/download/v$MY_CMAKE_VERSION/cmake-$MY_CMAKE_VERSION-linux-x86_64.tar.gz - tar -xvzf cmake-$MY_CMAKE_VERSION-linux-x86_64.tar.gz - echo "$GITHUB_WORKSPACE/cmake-$MY_CMAKE_VERSION-linux-x86_64/bin" >> "$GITHUB_PATH" - - name: Install MATLAB - uses: matlab-actions/setup-matlab@v2 - with: - release: R2025a - products: MATLAB_Compiler - - name: Build OpenTelemetry-Matlab - working-directory: opentelemetry-matlab - run: | - cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DWITH_OTLP_GRPC=ON -DWITH_OTLP_FILE=ON -DCMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/$OPENTELEMETRY_MATLAB_INSTALL_FOLDER - cmake --build build --config Release --target install - - name: Compress into single artifact - run: tar -czf otel-matlab-ubuntu.tar.gz otel_matlab_install - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: otel-matlab-ubuntu.tar.gz - path: ./otel-matlab-ubuntu.tar.gz - build-windows: - runs-on: windows-latest - env: - OPENTELEMETRY_MATLAB_INSTALL: "${{ github.workspace }}/otel_matlab_install" - steps: - - name: Download OpenTelemetry-Matlab source - uses: actions/checkout@v3 - with: - path: opentelemetry-matlab - - name: Install ninja-build - run: choco install ninja - - name: Install MATLAB - uses: matlab-actions/setup-matlab@v2 - with: - release: R2025a - products: MATLAB_Compiler - - name: Build OpenTelemetry-Matlab - working-directory: opentelemetry-matlab - shell: cmd - run: | - call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64 - cmake -S . -B build -G Ninja -DCMAKE_CXX_COMPILER="cl.exe" -DCMAKE_C_COMPILER="cl.exe" -DCMAKE_BUILD_TYPE=Release -DWITH_OTLP_GRPC=ON -DWITH_OTLP_FILE=ON -DFETCH_VCPKG=ON -DCMAKE_INSTALL_PREFIX=${{ env.OPENTELEMETRY_MATLAB_INSTALL }} - cmake --build build --config Release --target install - - name: Compress into single artifact - working-directory: ${{ github.workspace }} - run: tar -czf otel-matlab-windows.tar.gz otel_matlab_install - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: otel-matlab-windows.tar.gz - path: ${{ github.workspace }}/otel-matlab-windows.tar.gz - build-macos: - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [macos-13, macos-14] # runs on Mac with both Intel (macos-13) and Apple Silicon (macos-14) processors - env: - OPENTELEMETRY_MATLAB_INSTALL: "${{ github.workspace }}/otel_matlab_install" - steps: - - name: Download OpenTelemetry-Matlab source - uses: actions/checkout@v3 - with: - path: opentelemetry-matlab - - name: Install ninja-build - run: brew install ninja - - name: Install MATLAB - uses: matlab-actions/setup-matlab@v2 - with: - release: R2025a - products: MATLAB_Compiler - - name: Build OpenTelemetry-Matlab - working-directory: opentelemetry-matlab - env: - CMAKE_POLICY_VERSION_MINIMUM: 3.5 # required by upb because its cmake requirement is not compatible with cmake 4 - run: | - cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DWITH_OTLP_GRPC=ON -DWITH_OTLP_FILE=ON -DCMAKE_INSTALL_PREFIX=${{ env.OPENTELEMETRY_MATLAB_INSTALL }} - cmake --build build --config Release --target install - - name: Compress into single artifact - working-directory: ${{ github.workspace }} - run: tar -czf otel-matlab-${{ matrix.os }}.tar.gz otel_matlab_install - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: otel-matlab-${{ matrix.os }}.tar.gz - path: ${{ github.workspace }}/otel-matlab-${{ matrix.os }}.tar.gz - package-mltbx: - name: Package MATLAB Toolbox (MLTBX) Files - runs-on: ubuntu-22.04 - permissions: - contents: write - needs: - - build-ubuntu - - build-windows - - build-macos - env: - OPENTELEMETRY_MATLAB_INSTALL: "${{ github.workspace }}/otel_matlab_install" - WITHGRPC_FOLDER: "${{ github.workspace }}/withgrpc" - steps: - - name: Checkout OpenTelemetry-Matlab - uses: actions/checkout@v3 - with: - path: OpenTelemetry-Matlab - - name: Download Artifacts - uses: actions/download-artifact@v4 - with: - path: artifacts-downloaded - - name: Decompress Artifacts - run: | - mkdir $WITHGRPC_FOLDER - cd $WITHGRPC_FOLDER - mv ../artifacts-downloaded/*/otel-matlab-ubuntu.tar.gz . - mv ../artifacts-downloaded/*/otel-matlab-macos*.tar.gz . - mv ../artifacts-downloaded/*/otel-matlab-windows.tar.gz . - tar -xzvf otel-matlab-ubuntu.tar.gz - tar -xzvf otel-matlab-macos-13.tar.gz - tar -xzvf otel-matlab-macos-14.tar.gz - tar -xzvf otel-matlab-windows.tar.gz - - name: Compress into single artifact - run: tar -czf otel-matlab-test-package.tar.gz $WITHGRPC_FOLDER - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: otel-matlab-test-package.tar.gz - path: otel-matlab-test-package.tar.gz From 90a64617a20c42c828f9845c5acb23a2abd4e44e Mon Sep 17 00:00:00 2001 From: duncanpo Date: Tue, 4 Nov 2025 08:02:28 -0500 Subject: [PATCH 5/7] Update the readme and fix a sporadic test failure on Mac --- README.md | 3 +-- test/texamples.m | 3 ++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 323c4fa..2f64db4 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,7 @@ MATLAB® interface to [OpenTelemetry™](https://opentelemetry.io/), base ### Status 1. Tracing, metrics, and logs are all fully supported and tested on Windows®, Linux®, and macOS. -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. -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. +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. ### MathWorks Products (https://www.mathworks.com) diff --git a/test/texamples.m b/test/texamples.m index 4a0f4cd..ac888dd 100644 --- a/test/texamples.m +++ b/test/texamples.m @@ -268,7 +268,8 @@ function testWebread(testCase) % start the C++ server testCase.applyFixture(CppServerFixture(server, testCase)); - pause(3); % wait a little for server to start up + pause(6); % wait for server to start up. On Mac, 3 seconds is not enough + % and this test often fails. Double the wait time to 6 seconds. % run the example webread_example(); From be459f7a387373f7d3c348258f83760d4b9c2b34 Mon Sep 17 00:00:00 2001 From: duncanpo Date: Tue, 4 Nov 2025 09:30:04 -0500 Subject: [PATCH 6/7] revert previous change in testwebread --- test/texamples.m | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/texamples.m b/test/texamples.m index ac888dd..7f4fcbc 100644 --- a/test/texamples.m +++ b/test/texamples.m @@ -268,8 +268,7 @@ function testWebread(testCase) % start the C++ server testCase.applyFixture(CppServerFixture(server, testCase)); - pause(6); % wait for server to start up. On Mac, 3 seconds is not enough - % and this test often fails. Double the wait time to 6 seconds. + pause(3); % wait for server to start up % run the example webread_example(); From 9147c52283df28227021dd67273e654c05cae290 Mon Sep 17 00:00:00 2001 From: duncanpo Date: Tue, 4 Nov 2025 10:58:32 -0500 Subject: [PATCH 7/7] Update CMakeLists.txt for examples --- examples/context_propagation/CMakeLists.txt | 2 +- examples/webread/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/context_propagation/CMakeLists.txt b/examples/context_propagation/CMakeLists.txt index 647698a..47ba88c 100644 --- a/examples/context_propagation/CMakeLists.txt +++ b/examples/context_propagation/CMakeLists.txt @@ -15,7 +15,7 @@ target_link_libraries(${CONTEXTPROP_EXAMPLE_CPP_TARGET} PRIVATE ${OPENTELEMETRY_ if(UNIX AND NOT APPLE AND NOT CYGWIN) target_link_options(${CONTEXTPROP_EXAMPLE_CPP_TARGET} PRIVATE ${OPENTELEMETRY_PROXY_LINK_OPTIONS}) elseif(APPLE) - set_target_properties(${CONTEXTPROP_EXAMPLE_CPP_TARGET} PROPERTIES BUILD_RPATH "${CMAKE_INSTALL_PREFIX}/${LIBMEXCLASS_PROXY_INSTALLED_DIR}") + set_target_properties(${CONTEXTPROP_EXAMPLE_CPP_TARGET} PROPERTIES BUILD_RPATH "${CMAKE_INSTALL_PREFIX}/${DEPENDENT_RUNTIME_INSTALLED_DIR}") endif() # use the same C++ standard as OpenTelemetry-cpp if known, otherwise just use the default C++14 if(NOT DEFINED OTEL_CPP_INSTALLED_DIR) diff --git a/examples/webread/CMakeLists.txt b/examples/webread/CMakeLists.txt index 9bec4a3..5a75056 100644 --- a/examples/webread/CMakeLists.txt +++ b/examples/webread/CMakeLists.txt @@ -12,7 +12,7 @@ target_link_libraries(${WEBREAD_EXAMPLE_TARGET} PRIVATE ${OPENTELEMETRY_PROXY_LI if(UNIX AND NOT APPLE AND NOT CYGWIN) target_link_options(${WEBREAD_EXAMPLE_TARGET} PRIVATE ${OPENTELEMETRY_PROXY_LINK_OPTIONS}) elseif(APPLE) - set_target_properties(${WEBREAD_EXAMPLE_TARGET} PROPERTIES BUILD_RPATH "${CMAKE_INSTALL_PREFIX}/${LIBMEXCLASS_PROXY_INSTALLED_DIR}") + set_target_properties(${WEBREAD_EXAMPLE_TARGET} PROPERTIES BUILD_RPATH "${CMAKE_INSTALL_PREFIX}/${DEPENDENT_RUNTIME_INSTALLED_DIR}") endif() # use the same C++ standard as OpenTelemetry-cpp if known, otherwise just use the default C++14 if(NOT DEFINED OTEL_CPP_INSTALLED_DIR)