diff --git a/.github/workflows/make-release.yml b/.github/workflows/make-release.yml index c8de4f8..90f3efe 100644 --- a/.github/workflows/make-release.yml +++ b/.github/workflows/make-release.yml @@ -131,16 +131,21 @@ jobs: bundleDir="sdk-out/livekit-sdk-${{ matrix.name }}-${{ steps.version.outputs.version }}" mkdir -p "$bundleDir/lib" mkdir -p "$bundleDir/include" - mkdir -p "$bundleDir/bin" + mkdir -p "$bundleDir/lib/cmake/LiveKit" - # Copy files + # Copy libs + headers (SDK) cp -r build-release/lib/* "$bundleDir/lib/" 2>/dev/null || true cp -r build-release/include/* "$bundleDir/include/" 2>/dev/null || true - cp -r build-release/bin/* "$bundleDir/bin/" 2>/dev/null || true - + + # Copy generated CMake package files + cp -f build-release/LiveKitConfig.cmake "$bundleDir/lib/cmake/LiveKit/" || true + cp -f build-release/LiveKitConfigVersion.cmake "$bundleDir/lib/cmake/LiveKit/" || true + cp -f build-release/LiveKitTargets.cmake "$bundleDir/lib/cmake/LiveKit/" || true + cp -f build-release/LiveKitTargets-*.cmake "$bundleDir/lib/cmake/LiveKit/" 2>/dev/null || true + # List bundle contents echo "Bundle contents:" - find "$bundleDir" -type f | head -50 + find "$bundleDir" -type f | head -80 # ---------- Build + Bundle (Windows) ---------- - name: Build and Bundle (Windows) @@ -152,15 +157,20 @@ jobs: # Create bundle directory with version in name $bundleDir = "sdk-out/livekit-sdk-${{ matrix.name }}-${{ steps.version.outputs.version }}" - New-Item -ItemType Directory -Force -Path $bundleDir - New-Item -ItemType Directory -Force -Path "$bundleDir/lib" - New-Item -ItemType Directory -Force -Path "$bundleDir/include" - New-Item -ItemType Directory -Force -Path "$bundleDir/bin" + New-Item -ItemType Directory -Force -Path $bundleDir | Out-Null + New-Item -ItemType Directory -Force -Path "$bundleDir/lib" | Out-Null + New-Item -ItemType Directory -Force -Path "$bundleDir/include" | Out-Null + New-Item -ItemType Directory -Force -Path "$bundleDir/lib/cmake/LiveKit" | Out-Null - # Copy files + # Copy libs + headers (SDK) Copy-Item -Recurse -Force "build-release/lib/*" "$bundleDir/lib/" Copy-Item -Recurse -Force "build-release/include/*" "$bundleDir/include/" - Copy-Item -Recurse -Force "build-release/bin/*" "$bundleDir/bin/" + + # Copy generated CMake package files (best-effort) + Copy-Item -Force "build-release/LiveKitConfig.cmake" "$bundleDir/lib/cmake/LiveKit/" -ErrorAction SilentlyContinue + Copy-Item -Force "build-release/LiveKitConfigVersion.cmake" "$bundleDir/lib/cmake/LiveKit/" -ErrorAction SilentlyContinue + Copy-Item -Force "build-release/LiveKitTargets.cmake" "$bundleDir/lib/cmake/LiveKit/" -ErrorAction SilentlyContinue + Copy-Item -Force "build-release/LiveKitTargets-*.cmake" "$bundleDir/lib/cmake/LiveKit/" -ErrorAction SilentlyContinue # ---------- Upload artifact (raw directory, no pre-compression) ---------- - name: Upload build artifact diff --git a/CMakeLists.txt b/CMakeLists.txt index 2d02bda..64588a9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -318,6 +318,7 @@ target_include_directories(livekit target_link_libraries(livekit PRIVATE livekit_ffi + PUBLIC protobuf::libprotobuf ) @@ -494,14 +495,14 @@ if(Protobuf_VERSION VERSION_GREATER_EQUAL 6.0) endif() if(absl_FOUND) - target_link_libraries(livekit PRIVATE + target_link_libraries(livekit PUBLIC absl::log absl::check absl::strings absl::base ) elseif(Abseil_FOUND) - target_link_libraries(livekit PRIVATE + target_link_libraries(livekit PUBLIC Abseil::log Abseil::check Abseil::strings diff --git a/build.sh b/build.sh index a9e2c9d..c13431a 100755 --- a/build.sh +++ b/build.sh @@ -158,21 +158,52 @@ install_bundle() { rm -rf "${PREFIX}" mkdir -p "${PREFIX}" - # Use --config for safety (works for multi-config too) - cmake --install "${BUILD_DIR}" --config "${BUILD_TYPE}" --prefix "${PREFIX}" + # Detect whether generator is multi-config (VS/Xcode) or single-config (Ninja/Unix Makefiles) + local is_multi_config=0 + if [[ -f "${BUILD_DIR}/CMakeCache.txt" ]]; then + if grep -q '^CMAKE_CONFIGURATION_TYPES:STRING=' "${BUILD_DIR}/CMakeCache.txt"; then + is_multi_config=1 + fi + fi - # Sanity checks (non-fatal, but helpful) - if [[ ! -d "${PREFIX}/include" ]]; then - echo "WARN: ${PREFIX}/include not found. Did you add install(DIRECTORY include/ ...) rules?" + # Run install + if [[ "${is_multi_config}" -eq 1 ]]; then + echo "==> cmake --install (multi-config) config=${BUILD_TYPE}" + cmake --install "${BUILD_DIR}" --config "${BUILD_TYPE}" --prefix "${PREFIX}" + else + echo "==> cmake --install (single-config)" + cmake --install "${BUILD_DIR}" --prefix "${PREFIX}" fi - if [[ ! -d "${PREFIX}/lib" && ! -d "${PREFIX}/lib64" ]]; then + + local libdir="" + if [[ -d "${PREFIX}/lib" ]]; then + libdir="${PREFIX}/lib" + elif [[ -d "${PREFIX}/lib64" ]]; then + libdir="${PREFIX}/lib64" + else echo "WARN: ${PREFIX}/lib or lib64 not found. Did you add install(TARGETS ...) rules?" fi - if [[ ! -d "${PREFIX}/lib/cmake/LiveKit" && ! -d "${PREFIX}/lib64/cmake/LiveKit" ]]; then - echo "WARN: CMake package files not found under lib/cmake/LiveKit. Did you add install(EXPORT ...) + LiveKitConfig.cmake?" + + if [[ -n "${libdir}" ]]; then + if [[ ! -d "${libdir}/cmake/LiveKit" ]]; then + echo "WARN: CMake package files not found under ${libdir}/cmake/LiveKit." + echo " Did you add install(EXPORT ...) + install(FILES LiveKitConfig*.cmake ...)?" + else + # Optional: verify that key files exist + if [[ ! -f "${libdir}/cmake/LiveKit/LiveKitConfig.cmake" ]]; then + echo "WARN: Missing ${libdir}/cmake/LiveKit/LiveKitConfig.cmake" + fi + if [[ ! -f "${libdir}/cmake/LiveKit/LiveKitTargets.cmake" ]]; then + echo "WARN: Missing ${libdir}/cmake/LiveKit/LiveKitTargets.cmake (install(EXPORT ...) didn’t run?)" + fi + if [[ ! -f "${libdir}/cmake/LiveKit/LiveKitConfigVersion.cmake" ]]; then + echo "WARN: Missing ${libdir}/cmake/LiveKit/LiveKitConfigVersion.cmake" + fi + fi fi } + archive_bundle() { if [[ "${DO_BUNDLE}" != "1" ]]; then echo "ERROR: --archive requires --bundle" diff --git a/cmake/LiveKitConfig.cmake.in b/cmake/LiveKitConfig.cmake.in index 3f53938..f5fcd4a 100644 --- a/cmake/LiveKitConfig.cmake.in +++ b/cmake/LiveKitConfig.cmake.in @@ -1,3 +1,12 @@ @PACKAGE_INIT@ +include(CMakeFindDependencyMacro) + +find_dependency(Protobuf CONFIG REQUIRED) +find_dependency(absl CONFIG QUIET) +if(NOT absl_FOUND) + find_dependency(Abseil REQUIRED) +endif() + include("${CMAKE_CURRENT_LIST_DIR}/LiveKitTargets.cmake") +