Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 52 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

############## Protobuf ################

# ---- Protobuf (FFI protos) ----
set(FFI_PROTO_DIR ${CMAKE_SOURCE_DIR}/client-sdk-rust/livekit-ffi/protocol)
set(FFI_PROTO_FILES
Expand All @@ -25,7 +27,7 @@ set(FFI_PROTO_FILES
set(PROTO_BINARY_DIR ${CMAKE_BINARY_DIR}/generated)
file(MAKE_DIRECTORY ${PROTO_BINARY_DIR})

find_package(Protobuf REQUIRED) # protobuf::libprotobuf, protoc
find_package(Protobuf REQUIRED)
find_package(absl CONFIG REQUIRED)

# Object library that owns generated .pb.cc/.pb.h
Expand All @@ -44,6 +46,44 @@ protobuf_generate(
IMPORT_DIRS ${FFI_PROTO_DIR}
)

########### auto-gen build.h #######################

# Where to place the generated header
set(GENERATED_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated")
file(MAKE_DIRECTORY "${GENERATED_INCLUDE_DIR}")

# Try to capture git commit; fall back to "unknown" if git isn't available or repo isn't present.
set(GIT_COMMIT "unknown")
find_package(Git QUIET)
if(GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git")
execute_process(
COMMAND "${GIT_EXECUTABLE}" rev-parse --short HEAD
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
OUTPUT_VARIABLE GIT_COMMIT
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
)
endif()

# Build timestamp
string(TIMESTAMP BUILD_DATE "%Y-%m-%d %H:%M:%S")

# Comment shown at the top of the generated header
set(GENERATED_COMMENT "This file was auto-generated by CMake on ${LIVEKIT_BUILD_DATE}. Do NOT edit manually. Edit build.h.in instead.")

# Generate the header from the template
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/build.h.in"
"${GENERATED_INCLUDE_DIR}/build.h"
@ONLY
)

# Include the directory for the headers
include_directories("${GENERATED_INCLUDE_DIR}")


########### Livekit Rust SDK #######################

# Find cargo
find_program(CARGO_EXECUTABLE NAMES cargo REQUIRED)

Expand Down Expand Up @@ -104,19 +144,30 @@ add_custom_target(build_rust_ffi ALL
# ---- C++ wrapper library ----
add_library(livekit
include/livekit/room.h
include/livekit/ffi_handle.h
include/livekit/ffi_client.h
include/livekit/participant.h
include/livekit/livekit.h
include/livekit/stats.h
include/livekit/track.h
src/ffi_handle.cpp
src/ffi_client.cpp
src/room.cpp
src/room_event_converter.cpp
src/room_event_converter.h
src/stats.cpp
src/track.cpp
)

# Add generated proto objects to the wrapper
target_sources(livekit PRIVATE $<TARGET_OBJECTS:livekit_proto>)

target_include_directories(livekit PUBLIC
${CMAKE_SOURCE_DIR}/include
${CMAKE_SOURCE_DIR}/src
${RUST_ROOT}/livekit-ffi/include
${PROTO_BINARY_DIR}
${GENERATED_INCLUDE_DIR}
)

target_link_libraries(livekit
Expand Down
9 changes: 8 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ curl https://sh.rustup.rs -sSf | sh
## 🛠️ Development Tips
### Update Rust version
```bash
cd client-sdk-cpp
git fetch origin
git switch -c try-rust-main origin/main

Expand All @@ -76,6 +77,7 @@ git submodule sync --recursive
git submodule update --init --recursive --checkout

# Now, in case the nested submodule under yuv-sys didn’t materialize, force it explicitly:
cd ..
git -C client-sdk-rust/yuv-sys submodule sync --recursive
git -C client-sdk-rust/yuv-sys submodule update --init --recursive --checkout

Expand All @@ -90,8 +92,13 @@ cargo build -p yuv-sys -vv
```

### Full clean (Rust + C++ build folders)

In some cases, you may need to perform a full clean that deletes all build artifacts from both the Rust and C++ folders:
```bash
./build.sh clean-all
```

### Clang format
CPP SDK is using clang C++ format
```bash
brew install clang-format
```
20 changes: 20 additions & 0 deletions build.h.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// ===============================================================
// ⚠️ @GENERATED_COMMENT@
// ===============================================================

#pragma once

#define LIVEKIT_BUILD_VERSION "0.1.0" // Manually maintained
#define LIVEKIT_BUILD_FLAVOR "cpp"

#ifdef DEBUG
#define LIVEKIT_BUILD_SUFFIX "-debug"
#else
#define LIVEKIT_BUILD_SUFFIX "-release"
#endif

// Follow params are auto generated by CMakeLists.txt
#define LIVEKIT_BUILD_DATE "@BUILD_DATE@"
#define LIVEKIT_BUILD_COMMIT "@GIT_COMMIT@"

#define LIVEKIT_BUILD_VERSION_FULL LIVEKIT_BUILD_VERSION LIVEKIT_BUILD_SUFFIX
Loading
Loading