Skip to content

Commit 31e9dbe

Browse files
A few features and improvements (#7)
* initial commit * some more polish * fix the build, and order of CMakeList sections * removed the un-implemented functions and added a comment to SendRequest() * added back getTrackStatsAsync which was removed by mistake
1 parent c3f3260 commit 31e9dbe

File tree

19 files changed

+3464
-288
lines changed

19 files changed

+3464
-288
lines changed

CMakeLists.txt

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ set(CMAKE_CXX_STANDARD 17)
66
set(CMAKE_CXX_STANDARD_REQUIRED ON)
77
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
88

9+
############## Protobuf ################
10+
911
# ---- Protobuf (FFI protos) ----
1012
set(FFI_PROTO_DIR ${CMAKE_SOURCE_DIR}/client-sdk-rust/livekit-ffi/protocol)
1113
set(FFI_PROTO_FILES
@@ -25,7 +27,7 @@ set(FFI_PROTO_FILES
2527
set(PROTO_BINARY_DIR ${CMAKE_BINARY_DIR}/generated)
2628
file(MAKE_DIRECTORY ${PROTO_BINARY_DIR})
2729

28-
find_package(Protobuf REQUIRED) # protobuf::libprotobuf, protoc
30+
find_package(Protobuf REQUIRED)
2931
find_package(absl CONFIG REQUIRED)
3032

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

49+
########### auto-gen build.h #######################
50+
51+
# Where to place the generated header
52+
set(GENERATED_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated")
53+
file(MAKE_DIRECTORY "${GENERATED_INCLUDE_DIR}")
54+
55+
# Try to capture git commit; fall back to "unknown" if git isn't available or repo isn't present.
56+
set(GIT_COMMIT "unknown")
57+
find_package(Git QUIET)
58+
if(GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git")
59+
execute_process(
60+
COMMAND "${GIT_EXECUTABLE}" rev-parse --short HEAD
61+
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
62+
OUTPUT_VARIABLE GIT_COMMIT
63+
OUTPUT_STRIP_TRAILING_WHITESPACE
64+
ERROR_QUIET
65+
)
66+
endif()
67+
68+
# Build timestamp
69+
string(TIMESTAMP BUILD_DATE "%Y-%m-%d %H:%M:%S")
70+
71+
# Comment shown at the top of the generated header
72+
set(GENERATED_COMMENT "This file was auto-generated by CMake on ${LIVEKIT_BUILD_DATE}. Do NOT edit manually. Edit build.h.in instead.")
73+
74+
# Generate the header from the template
75+
configure_file(
76+
"${CMAKE_CURRENT_SOURCE_DIR}/build.h.in"
77+
"${GENERATED_INCLUDE_DIR}/build.h"
78+
@ONLY
79+
)
80+
81+
# Include the directory for the headers
82+
include_directories("${GENERATED_INCLUDE_DIR}")
83+
84+
85+
########### Livekit Rust SDK #######################
86+
4787
# Find cargo
4888
find_program(CARGO_EXECUTABLE NAMES cargo REQUIRED)
4989

@@ -104,19 +144,30 @@ add_custom_target(build_rust_ffi ALL
104144
# ---- C++ wrapper library ----
105145
add_library(livekit
106146
include/livekit/room.h
147+
include/livekit/ffi_handle.h
107148
include/livekit/ffi_client.h
149+
include/livekit/participant.h
108150
include/livekit/livekit.h
151+
include/livekit/stats.h
152+
include/livekit/track.h
153+
src/ffi_handle.cpp
109154
src/ffi_client.cpp
110155
src/room.cpp
156+
src/room_event_converter.cpp
157+
src/room_event_converter.h
158+
src/stats.cpp
159+
src/track.cpp
111160
)
112161

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

116165
target_include_directories(livekit PUBLIC
117166
${CMAKE_SOURCE_DIR}/include
167+
${CMAKE_SOURCE_DIR}/src
118168
${RUST_ROOT}/livekit-ffi/include
119169
${PROTO_BINARY_DIR}
170+
${GENERATED_INCLUDE_DIR}
120171
)
121172

122173
target_link_libraries(livekit

README.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ curl https://sh.rustup.rs -sSf | sh
6868
## 🛠️ Development Tips
6969
### Update Rust version
7070
```bash
71+
cd client-sdk-cpp
7172
git fetch origin
7273
git switch -c try-rust-main origin/main
7374

@@ -76,6 +77,7 @@ git submodule sync --recursive
7677
git submodule update --init --recursive --checkout
7778

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

@@ -90,8 +92,13 @@ cargo build -p yuv-sys -vv
9092
```
9193

9294
### Full clean (Rust + C++ build folders)
93-
9495
In some cases, you may need to perform a full clean that deletes all build artifacts from both the Rust and C++ folders:
9596
```bash
9697
./build.sh clean-all
98+
```
99+
100+
### Clang format
101+
CPP SDK is using clang C++ format
102+
```bash
103+
brew install clang-format
97104
```

build.h.in

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// ===============================================================
2+
// ⚠️ @GENERATED_COMMENT@
3+
// ===============================================================
4+
5+
#pragma once
6+
7+
#define LIVEKIT_BUILD_VERSION "0.1.0" // Manually maintained
8+
#define LIVEKIT_BUILD_FLAVOR "cpp"
9+
10+
#ifdef DEBUG
11+
#define LIVEKIT_BUILD_SUFFIX "-debug"
12+
#else
13+
#define LIVEKIT_BUILD_SUFFIX "-release"
14+
#endif
15+
16+
// Follow params are auto generated by CMakeLists.txt
17+
#define LIVEKIT_BUILD_DATE "@BUILD_DATE@"
18+
#define LIVEKIT_BUILD_COMMIT "@GIT_COMMIT@"
19+
20+
#define LIVEKIT_BUILD_VERSION_FULL LIVEKIT_BUILD_VERSION LIVEKIT_BUILD_SUFFIX

0 commit comments

Comments
 (0)