Skip to content

Commit 5e0963d

Browse files
committed
Separate shared libraries into platform specific directories
1 parent 802216c commit 5e0963d

File tree

2 files changed

+162
-11
lines changed

2 files changed

+162
-11
lines changed
Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
name: "Test Packaging"
2+
on:
3+
push:
4+
branch:
5+
- 'separate_libraries'
6+
jobs:
7+
build-ubuntu:
8+
runs-on: ubuntu-latest
9+
container:
10+
image: ubuntu:20.04
11+
env:
12+
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
13+
steps:
14+
- name: Download OpenTelemetry-Matlab source
15+
uses: actions/checkout@v3
16+
with:
17+
path: opentelemetry-matlab
18+
- name: Install compiler and other tools
19+
env:
20+
DEBIAN_FRONTEND: "noninteractive"
21+
run: apt update && apt install -y build-essential git curl pkg-config zip python3 ninja-build
22+
- name: Install CMake
23+
env:
24+
MY_CMAKE_VERSION: 4.1.2
25+
run: |
26+
curl -LO https://github.com/Kitware/CMake/releases/download/v$MY_CMAKE_VERSION/cmake-$MY_CMAKE_VERSION-linux-x86_64.tar.gz
27+
tar -xvzf cmake-$MY_CMAKE_VERSION-linux-x86_64.tar.gz
28+
echo "$GITHUB_WORKSPACE/cmake-$MY_CMAKE_VERSION-linux-x86_64/bin" >> "$GITHUB_PATH"
29+
- name: Install MATLAB
30+
uses: matlab-actions/setup-matlab@v2
31+
with:
32+
release: R2025a
33+
products: MATLAB_Compiler
34+
- name: Build OpenTelemetry-Matlab
35+
working-directory: opentelemetry-matlab
36+
run: |
37+
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
38+
cmake --build build --config Release --target install
39+
- name: Compress into single artifact
40+
run: tar -czf otel-matlab-ubuntu.tar.gz otel_matlab_install
41+
- name: Upload artifacts
42+
uses: actions/upload-artifact@v4
43+
with:
44+
name: otel-matlab-ubuntu.tar.gz
45+
path: ./otel-matlab-ubuntu.tar.gz
46+
build-windows:
47+
runs-on: windows-latest
48+
env:
49+
OPENTELEMETRY_MATLAB_INSTALL: "${{ github.workspace }}/otel_matlab_install"
50+
steps:
51+
- name: Download OpenTelemetry-Matlab source
52+
uses: actions/checkout@v3
53+
with:
54+
path: opentelemetry-matlab
55+
- name: Install ninja-build
56+
run: choco install ninja
57+
- name: Install MATLAB
58+
uses: matlab-actions/setup-matlab@v2
59+
with:
60+
release: R2025a
61+
products: MATLAB_Compiler
62+
- name: Build OpenTelemetry-Matlab
63+
working-directory: opentelemetry-matlab
64+
shell: cmd
65+
run: |
66+
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64
67+
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 }}
68+
cmake --build build --config Release --target install
69+
- name: Compress into single artifact
70+
working-directory: ${{ github.workspace }}
71+
run: tar -czf otel-matlab-windows.tar.gz otel_matlab_install
72+
- name: Upload artifacts
73+
uses: actions/upload-artifact@v4
74+
with:
75+
name: otel-matlab-windows.tar.gz
76+
path: ${{ github.workspace }}/otel-matlab-windows.tar.gz
77+
build-macos:
78+
runs-on: ${{ matrix.os }}
79+
strategy:
80+
matrix:
81+
os: [macos-13, macos-14] # runs on Mac with both Intel (macos-13) and Apple Silicon (macos-14) processors
82+
env:
83+
OPENTELEMETRY_MATLAB_INSTALL: "${{ github.workspace }}/otel_matlab_install"
84+
steps:
85+
- name: Download OpenTelemetry-Matlab source
86+
uses: actions/checkout@v3
87+
with:
88+
path: opentelemetry-matlab
89+
- name: Install ninja-build
90+
run: brew install ninja
91+
- name: Install MATLAB
92+
uses: matlab-actions/setup-matlab@v2
93+
with:
94+
release: R2025a
95+
products: MATLAB_Compiler
96+
- name: Build OpenTelemetry-Matlab
97+
working-directory: opentelemetry-matlab
98+
env:
99+
CMAKE_POLICY_VERSION_MINIMUM: 3.5 # required by upb because its cmake requirement is not compatible with cmake 4
100+
run: |
101+
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 }}
102+
cmake --build build --config Release --target install
103+
- name: Compress into single artifact
104+
working-directory: ${{ github.workspace }}
105+
run: tar -czf otel-matlab-${{ matrix.os }}.tar.gz otel_matlab_install
106+
- name: Upload artifacts
107+
uses: actions/upload-artifact@v4
108+
with:
109+
name: otel-matlab-${{ matrix.os }}.tar.gz
110+
path: ${{ github.workspace }}/otel-matlab-${{ matrix.os }}.tar.gz
111+
package-mltbx:
112+
name: Package MATLAB Toolbox (MLTBX) Files
113+
runs-on: ubuntu-22.04
114+
permissions:
115+
contents: write
116+
needs:
117+
- build-ubuntu
118+
- build-windows
119+
- build-macos
120+
env:
121+
OPENTELEMETRY_MATLAB_INSTALL: "${{ github.workspace }}/otel_matlab_install"
122+
WITHGRPC_FOLDER: "${{ github.workspace }}/withgrpc"
123+
steps:
124+
- name: Checkout OpenTelemetry-Matlab
125+
uses: actions/checkout@v3
126+
with:
127+
path: OpenTelemetry-Matlab
128+
- name: Download Artifacts
129+
uses: actions/download-artifact@v4
130+
with:
131+
path: artifacts-downloaded
132+
- name: Decompress Artifacts
133+
run: |
134+
mkdir $WITHGRPC_FOLDER
135+
cd $WITHGRPC_FOLDER
136+
mv ../artifacts-downloaded/*/otel-matlab-ubuntu.tar.gz .
137+
mv ../artifacts-downloaded/*/otel-matlab-macos*.tar.gz .
138+
mv ../artifacts-downloaded/*/otel-matlab-windows.tar.gz .
139+
tar -xzvf otel-matlab-ubuntu.tar.gz
140+
tar -xzvf otel-matlab-macos-13.tar.gz
141+
tar -xzvf otel-matlab-macos-14.tar.gz
142+
tar -xzvf otel-matlab-windows.tar.gz
143+
- name: Compress into single artifact
144+
run: tar -czf otel-matlab-test-package.tar.gz $WITHGRPC_FOLDER
145+
- name: Upload artifacts
146+
uses: actions/upload-artifact@v4
147+
with:
148+
name: otel-matlab-test-package.tar.gz
149+
path: otel-matlab-test-package.tar.gz

CMakeLists.txt

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -507,7 +507,6 @@ endif()
507507
target_link_libraries(${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OPENTELEMETRY_PROXY_LINK_LIBRARIES})
508508

509509
# 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
511510
if(UNIX AND NOT APPLE AND NOT CYGWIN)
512511
set(OPENTELEMETRY_PROXY_LINK_OPTIONS -Wl,--whole-archive
513512
"${OTEL_CPP_PREFIX}/lib/libopentelemetry_trace.a"
@@ -516,9 +515,6 @@ if(UNIX AND NOT APPLE AND NOT CYGWIN)
516515
"${OTEL_CPP_PREFIX}/lib/libopentelemetry_otlp_recordable.a"
517516
${ABSL_LIBRARIES} -Wl,--no-whole-archive)
518517
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}")
520-
elseif(APPLE)
521-
set_target_properties(${OPENTELEMETRY_PROXY_LIBRARY_NAME} PROPERTIES INSTALL_RPATH "@loader_path;@loader_path/../../lib/${PLATFORM_NAME}")
522518
endif()
523519

524520
# Use C++17
@@ -654,27 +650,33 @@ endif()
654650
install(FILES ${OTLP_MISC_FILES} DESTINATION .)
655651

656652
# Install dependent runtime libraries
653+
set(LIBMEXCLASS_PACKAGE_DIRECTORY +libmexclass/+proxy)
657654
if(WIN32)
658655
# 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)
656+
set(DEPENDENT_RUNTIME_INSTALLED_DIR ${LIBMEXCLASS_PACKAGE_DIRECTORY})
660657
else()
661658
# On non-Windows platform, install dependent libraries in a platform specific directory so that
662659
# they won't get overwritten when packaged
663660
set(DEPENDENT_RUNTIME_INSTALLED_DIR lib/${PLATFORM_NAME})
664661
endif()
665662
install(FILES ${OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES} DESTINATION ${DEPENDENT_RUNTIME_INSTALLED_DIR})
666-
if(UNIX AND WITH_OTLP_GRPC)
667-
install(DIRECTORY ${GRPC_INSTALL_LIB_DIR}/ 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}
668666
FILES_MATCHING
669667
PATTERN "*.*"
670668
PATTERN "cmake" EXCLUDE
671669
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}\")")
672678
endif()
673679

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-
")
678680
# ##############################
679681
# Subdirectories
680682
# ##############################

0 commit comments

Comments
 (0)