Skip to content

Commit 35cbe10

Browse files
committed
no mac 13 build environments mean cross compilation is required.
1 parent b0482f9 commit 35cbe10

File tree

4 files changed

+52
-14
lines changed

4 files changed

+52
-14
lines changed

.github/workflows/builds.yml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,9 @@ jobs:
5454
name: macos-arm64
5555
build_cmd: ./build.sh release-examples
5656
build_dir: build-release
57-
- os: macos-13
57+
- os: macos-latest
5858
name: macos-x64
59-
build_cmd: ./build.sh release-examples
59+
build_cmd: ./build.sh release-examples --macos-arch x86_64
6060
build_dir: build-release
6161
- os: windows-latest
6262
name: windows-x64
@@ -117,6 +117,10 @@ jobs:
117117
- name: Install Rust (stable)
118118
uses: dtolnay/rust-toolchain@stable
119119

120+
- name: Install Rust cross-compilation target
121+
if: matrix.name == 'macos-x64'
122+
run: rustup target add x86_64-apple-darwin
123+
120124
# ---------- Cache Cargo ----------
121125
- name: Cache Cargo registry
122126
uses: actions/cache@v4

.github/workflows/make-release.yml

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ jobs:
3333
- os: macos-latest
3434
name: macos-arm64
3535
generator: Ninja
36-
- os: macos-13
36+
- os: macos-latest
3737
name: macos-x64
3838
generator: Ninja
3939
- os: windows-latest
@@ -128,6 +128,10 @@ jobs:
128128
- name: Install Rust (stable)
129129
uses: dtolnay/rust-toolchain@stable
130130

131+
- name: Install Rust cross-compilation target
132+
if: matrix.name == 'macos-x64'
133+
run: rustup target add x86_64-apple-darwin
134+
131135
# ---------- Cache Cargo ----------
132136
- name: Cache Cargo registry
133137
uses: actions/cache@v4
@@ -165,7 +169,11 @@ jobs:
165169
exit 1
166170
fi
167171
168-
./build.sh release-examples --version "$version" --bundle --prefix "$bundleDir"
172+
if [[ "${{ matrix.name }}" == "macos-x64" ]]; then
173+
./build.sh release-examples --version "$version" --bundle --prefix "$bundleDir" --macos-arch x86_64
174+
else
175+
./build.sh release-examples --version "$version" --bundle --prefix "$bundleDir"
176+
fi
169177
170178
# List bundle contents
171179
echo "Bundle contents:"

CMakeLists.txt

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,22 @@ find_program(CARGO_EXECUTABLE NAMES cargo REQUIRED)
163163

164164
set(RUST_ROOT ${LIVEKIT_ROOT_DIR}/client-sdk-rust)
165165

166+
# Determine Rust target triple for cross-compilation on macOS
167+
set(RUST_TARGET_TRIPLE "")
168+
if(APPLE AND CMAKE_OSX_ARCHITECTURES)
169+
if(CMAKE_OSX_ARCHITECTURES STREQUAL "x86_64")
170+
set(RUST_TARGET_TRIPLE "x86_64-apple-darwin")
171+
elseif(CMAKE_OSX_ARCHITECTURES STREQUAL "arm64")
172+
set(RUST_TARGET_TRIPLE "aarch64-apple-darwin")
173+
endif()
174+
endif()
175+
176+
if(RUST_TARGET_TRIPLE)
177+
set(RUST_TARGET_DIR "${RUST_ROOT}/target/${RUST_TARGET_TRIPLE}")
178+
else()
179+
set(RUST_TARGET_DIR "${RUST_ROOT}/target")
180+
endif()
181+
166182
set(RUN_CARGO_SCRIPT ${LIVEKIT_BINARY_DIR}/run_cargo.cmake)
167183
file(WRITE ${RUN_CARGO_SCRIPT}
168184
"if(NOT DEFINED CFG)
@@ -180,6 +196,11 @@ if(NOT CFG STREQUAL \"Debug\")
180196
list(APPEND ARGS --release)
181197
endif()
182198
199+
if(DEFINED RUST_TARGET AND NOT RUST_TARGET STREQUAL \"\")
200+
list(APPEND ARGS --target \"\${RUST_TARGET}\")
201+
message(STATUS \"[run_cargo.cmake] Cross-compiling for target: \${RUST_TARGET}\")
202+
endif()
203+
183204
message(STATUS \"[run_cargo.cmake] CFG=\${CFG} CARGO=\${CARGO} PROTOC=\${PROTOC_PATH}\")
184205
set(ENV{PROTOC} \"\${PROTOC_PATH}\")
185206
@@ -223,8 +244,8 @@ if(WIN32)
223244
elseif(APPLE)
224245
# macOS: use dynamic library (.dylib) to isolate Debug/Release ABI differences
225246
add_library(livekit_ffi SHARED IMPORTED GLOBAL)
226-
set(RUST_LIB_DEBUG "${RUST_ROOT}/target/debug/liblivekit_ffi.dylib")
227-
set(RUST_LIB_RELEASE "${RUST_ROOT}/target/release/liblivekit_ffi.dylib")
247+
set(RUST_LIB_DEBUG "${RUST_TARGET_DIR}/debug/liblivekit_ffi.dylib")
248+
set(RUST_LIB_RELEASE "${RUST_TARGET_DIR}/release/liblivekit_ffi.dylib")
228249

229250
set_target_properties(livekit_ffi PROPERTIES
230251
IMPORTED_CONFIGURATIONS "Debug;Release;RelWithDebInfo;MinSizeRel"
@@ -238,8 +259,8 @@ elseif(APPLE)
238259
else()
239260
# Linux: use dynamic library (.so) to isolate Debug/Release ABI differences
240261
add_library(livekit_ffi SHARED IMPORTED GLOBAL)
241-
set(RUST_LIB_DEBUG "${RUST_ROOT}/target/debug/liblivekit_ffi.so")
242-
set(RUST_LIB_RELEASE "${RUST_ROOT}/target/release/liblivekit_ffi.so")
262+
set(RUST_LIB_DEBUG "${RUST_TARGET_DIR}/debug/liblivekit_ffi.so")
263+
set(RUST_LIB_RELEASE "${RUST_TARGET_DIR}/release/liblivekit_ffi.so")
243264

244265
set_target_properties(livekit_ffi PROPERTIES
245266
IMPORTED_CONFIGURATIONS "Debug;Release;RelWithDebInfo;MinSizeRel"
@@ -264,6 +285,7 @@ add_custom_command(
264285
-DRUST_ROOT=${RUST_ROOT}
265286
-DCARGO=${CARGO_EXECUTABLE}
266287
-DPROTOC_PATH=${Protobuf_PROTOC_EXECUTABLE}
288+
-DRUST_TARGET=${RUST_TARGET_TRIPLE}
267289
-P "${RUN_CARGO_SCRIPT}"
268290
WORKING_DIRECTORY "${RUST_ROOT}"
269291
DEPENDS ${RUST_SOURCES}
@@ -381,8 +403,8 @@ if(LIVEKIT_IS_TOPLEVEL)
381403
)
382404
elseif(APPLE)
383405
# macOS: copy .dylib
384-
set(FFI_LIB_DEBUG "${RUST_ROOT}/target/debug/liblivekit_ffi.dylib")
385-
set(FFI_LIB_RELEASE "${RUST_ROOT}/target/release/liblivekit_ffi.dylib")
406+
set(FFI_LIB_DEBUG "${RUST_TARGET_DIR}/debug/liblivekit_ffi.dylib")
407+
set(FFI_LIB_RELEASE "${RUST_TARGET_DIR}/release/liblivekit_ffi.dylib")
386408
add_custom_command(
387409
TARGET livekit POST_BUILD
388410
COMMAND ${CMAKE_COMMAND} -E copy
@@ -404,18 +426,18 @@ if(LIVEKIT_IS_TOPLEVEL)
404426
add_custom_command(
405427
TARGET livekit POST_BUILD
406428
COMMAND /usr/bin/install_name_tool
407-
-change "${RUST_ROOT}/target/release/deps/liblivekit_ffi.dylib"
429+
-change "${RUST_TARGET_DIR}/release/deps/liblivekit_ffi.dylib"
408430
"@rpath/liblivekit_ffi.dylib"
409-
-change "${RUST_ROOT}/target/debug/deps/liblivekit_ffi.dylib"
431+
-change "${RUST_TARGET_DIR}/debug/deps/liblivekit_ffi.dylib"
410432
"@rpath/liblivekit_ffi.dylib"
411433
"$<TARGET_FILE:livekit>"
412434
COMMENT "Fix dependency path in liblivekit.dylib -> liblivekit_ffi.dylib"
413435
VERBATIM
414436
)
415437
else()
416438
# Linux: copy .so
417-
set(FFI_LIB_DEBUG "${RUST_ROOT}/target/debug/liblivekit_ffi.so")
418-
set(FFI_LIB_RELEASE "${RUST_ROOT}/target/release/liblivekit_ffi.so")
439+
set(FFI_LIB_DEBUG "${RUST_TARGET_DIR}/debug/liblivekit_ffi.so")
440+
set(FFI_LIB_RELEASE "${RUST_TARGET_DIR}/release/liblivekit_ffi.so")
419441
add_custom_command(
420442
TARGET livekit POST_BUILD
421443
COMMAND ${CMAKE_COMMAND} -E copy

build.sh

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,10 @@ configure() {
135135
echo "==> Injecting LIVEKIT_VERSION=${LIVEKIT_VERSION}"
136136
extra_args+=("-DLIVEKIT_VERSION=${LIVEKIT_VERSION}")
137137
fi
138+
if [[ -n "${MACOS_ARCH}" ]]; then
139+
echo "==> Setting CMAKE_OSX_ARCHITECTURES=${MACOS_ARCH}"
140+
extra_args+=("-DCMAKE_OSX_ARCHITECTURES=${MACOS_ARCH}")
141+
fi
138142
if ((${#extra_args[@]})); then
139143
if ! cmake --preset "${PRESET}" "${extra_args[@]}"; then
140144
echo "Warning: CMake preset '${PRESET}' failed. Falling back to traditional configure..."

0 commit comments

Comments
 (0)