Skip to content

Commit d7cb19c

Browse files
treat external deps as system deps
1 parent cb94b0d commit d7cb19c

7 files changed

Lines changed: 160 additions & 26 deletions

File tree

CMakeLists.txt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ project(livekit VERSION ${LIVEKIT_PROJECT_VERSION} LANGUAGES C CXX)
1414
set(LIVEKIT_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR})
1515
set(LIVEKIT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
1616
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
17+
include(warnings)
1718

1819
option(LIVEKIT_BUILD_EXAMPLES "Build LiveKit examples" OFF)
1920
option(LIVEKIT_BUILD_TESTS "Build LiveKit tests" OFF)
@@ -113,15 +114,15 @@ if(TARGET protobuf::libprotobuf)
113114
else()
114115
message(FATAL_ERROR "No protobuf library target found (expected protobuf::libprotobuf)")
115116
endif()
116-
target_include_directories(livekit_proto PRIVATE
117+
target_include_directories(livekit_proto SYSTEM PRIVATE
117118
"${PROTO_BINARY_DIR}"
118119
${Protobuf_INCLUDE_DIRS}
119120
)
120121
target_link_libraries(livekit_proto PRIVATE ${LIVEKIT_PROTOBUF_TARGET})
121122
if(TARGET absl::base)
122123
get_target_property(_absl_inc absl::base INTERFACE_INCLUDE_DIRECTORIES)
123124
if(_absl_inc)
124-
target_include_directories(livekit_proto PRIVATE ${_absl_inc})
125+
target_include_directories(livekit_proto SYSTEM PRIVATE ${_absl_inc})
125126
endif()
126127
endif()
127128

@@ -432,6 +433,9 @@ target_include_directories(livekit
432433
PRIVATE
433434
${LIVEKIT_ROOT_DIR}/src
434435
${LIVEKIT_ROOT_DIR}/src/trace
436+
)
437+
438+
target_include_directories(livekit SYSTEM PRIVATE
435439
${RUST_ROOT}/livekit-ffi/include
436440
${PROTO_BINARY_DIR}
437441
)

cmake/protobuf.cmake

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
# - Target protobuf::protoc (on vendored path; on Windows we may only have an executable)
1111

1212
include(FetchContent)
13+
include(warnings)
1314

1415
option(LIVEKIT_USE_SYSTEM_PROTOBUF "Use system-installed Protobuf instead of vendoring" OFF)
1516

@@ -63,8 +64,13 @@ if(WIN32 AND NOT LIVEKIT_USE_SYSTEM_PROTOBUF)
6364
# Include dirs: prefer the imported target usage requirements.
6465
if(TARGET protobuf::libprotobuf)
6566
get_target_property(_pb_includes protobuf::libprotobuf INTERFACE_INCLUDE_DIRECTORIES)
67+
livekit_treat_as_external(protobuf::libprotobuf)
6668
elseif(TARGET protobuf::protobuf) # some protobuf builds use protobuf::protobuf
6769
get_target_property(_pb_includes protobuf::protobuf INTERFACE_INCLUDE_DIRECTORIES)
70+
livekit_treat_as_external(protobuf::protobuf)
71+
endif()
72+
if(TARGET protobuf::protoc)
73+
livekit_treat_as_external(protobuf::protoc)
6874
endif()
6975
if(NOT _pb_includes)
7076
# Best-effort fallback: Protobuf_INCLUDE_DIRS is commonly set by ProtobufConfig
@@ -89,6 +95,14 @@ if(LIVEKIT_USE_SYSTEM_PROTOBUF)
8995
if(NOT Protobuf_PROTOC_EXECUTABLE)
9096
find_program(Protobuf_PROTOC_EXECUTABLE NAMES protoc REQUIRED)
9197
endif()
98+
if(TARGET protobuf::libprotobuf)
99+
livekit_treat_as_external(protobuf::libprotobuf)
100+
elseif(TARGET protobuf::protobuf)
101+
livekit_treat_as_external(protobuf::protobuf)
102+
endif()
103+
if(TARGET protobuf::protoc)
104+
livekit_treat_as_external(protobuf::protoc)
105+
endif()
92106
message(STATUS "Using system protoc: ${Protobuf_PROTOC_EXECUTABLE}")
93107
return()
94108
endif()
@@ -146,6 +160,10 @@ endif()
146160

147161
# Make abseil available first so protobuf can find absl:: targets.
148162
FetchContent_MakeAvailable(livekit_abseil)
163+
livekit_collect_targets_in_directory(_livekit_abseil_targets "${livekit_abseil_BINARY_DIR}")
164+
foreach(_livekit_abseil_target IN LISTS _livekit_abseil_targets)
165+
livekit_treat_as_external(${_livekit_abseil_target})
166+
endforeach()
149167

150168
# Workaround for some abseil flags on Apple Silicon.
151169
if(APPLE AND (CMAKE_SYSTEM_PROCESSOR MATCHES "arm64|aarch64"))
@@ -173,6 +191,10 @@ endif()
173191

174192
# Now make protobuf available.
175193
FetchContent_MakeAvailable(livekit_protobuf)
194+
livekit_collect_targets_in_directory(_livekit_protobuf_targets "${livekit_protobuf_BINARY_DIR}")
195+
foreach(_livekit_protobuf_target IN LISTS _livekit_protobuf_targets)
196+
livekit_treat_as_external(${_livekit_protobuf_target})
197+
endforeach()
176198

177199
# Protobuf targets: modern protobuf exports protobuf::protoc etc.
178200
if(TARGET protobuf::protoc)
@@ -194,6 +216,7 @@ endif()
194216

195217
# Include dirs: prefer target usage; keep this var for your existing CMakeLists.
196218
if(TARGET protobuf::libprotobuf)
219+
livekit_treat_as_external(protobuf::libprotobuf)
197220
get_target_property(_pb_includes protobuf::libprotobuf INTERFACE_INCLUDE_DIRECTORIES)
198221
endif()
199222
if(NOT _pb_includes)

cmake/spdlog.cmake

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ endif()
4747
message(STATUS "LiveKit compile-time log level: ${_LK_LOG_LEVEL_UPPER} (SPDLOG_ACTIVE_LEVEL=${_SPDLOG_ACTIVE_LEVEL})")
4848

4949
include(FetchContent)
50+
include(warnings)
5051

5152
set(LIVEKIT_SPDLOG_VERSION "1.15.1" CACHE STRING "Vendored spdlog version")
5253

@@ -61,6 +62,9 @@ endif()
6162
# ---------------------------------------------------------------------------
6263
if(WIN32 AND LIVEKIT_USE_VCPKG)
6364
find_package(spdlog CONFIG REQUIRED)
65+
if(TARGET spdlog::spdlog)
66+
livekit_treat_as_external(spdlog::spdlog)
67+
endif()
6468
message(STATUS "Windows: using vcpkg spdlog")
6569
return()
6670
endif()
@@ -80,6 +84,13 @@ set(SPDLOG_BUILD_TESTS OFF CACHE BOOL "" FORCE)
8084
set(SPDLOG_INSTALL OFF CACHE BOOL "" FORCE)
8185

8286
FetchContent_MakeAvailable(livekit_spdlog)
87+
livekit_collect_targets_in_directory(_livekit_spdlog_targets "${livekit_spdlog_BINARY_DIR}")
88+
foreach(_livekit_spdlog_target IN LISTS _livekit_spdlog_targets)
89+
livekit_treat_as_external(${_livekit_spdlog_target})
90+
endforeach()
91+
if(TARGET spdlog::spdlog)
92+
livekit_treat_as_external(spdlog::spdlog)
93+
endif()
8394

8495
# spdlog is linked PRIVATE into liblivekit and must not leak its symbols into
8596
# the SDK's exported ABI. Force hidden visibility on the spdlog target so its

cmake/warnings.cmake

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
# Copyright 2026 LiveKit
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
# Resolves target aliases, marks their exported include directories as system includes,
16+
# and disables compiler warnings on compilable third-party targets.
17+
function(_livekit_resolve_target target out_var)
18+
if(NOT TARGET ${target})
19+
set(${out_var} "" PARENT_SCOPE)
20+
return()
21+
endif()
22+
23+
get_target_property(_aliased_target ${target} ALIASED_TARGET)
24+
if(_aliased_target)
25+
set(${out_var} "${_aliased_target}" PARENT_SCOPE)
26+
else()
27+
set(${out_var} "${target}" PARENT_SCOPE)
28+
endif()
29+
endfunction()
30+
31+
function(livekit_disable_warnings target)
32+
_livekit_resolve_target(${target} _resolved_target)
33+
if(NOT _resolved_target)
34+
return()
35+
endif()
36+
37+
get_target_property(_target_type ${_resolved_target} TYPE)
38+
get_target_property(_is_imported ${_resolved_target} IMPORTED)
39+
if(_is_imported OR _target_type STREQUAL "INTERFACE_LIBRARY")
40+
return()
41+
endif()
42+
if(NOT _target_type MATCHES "^(STATIC_LIBRARY|SHARED_LIBRARY|MODULE_LIBRARY|OBJECT_LIBRARY|EXECUTABLE)$")
43+
return()
44+
endif()
45+
46+
target_compile_options(${_resolved_target} PRIVATE
47+
$<$<COMPILE_LANG_AND_ID:C,MSVC>:/W0>
48+
$<$<COMPILE_LANG_AND_ID:CXX,MSVC>:/W0>
49+
$<$<COMPILE_LANG_AND_ID:C,AppleClang,Clang,GNU>:-w>
50+
$<$<COMPILE_LANG_AND_ID:CXX,AppleClang,Clang,GNU>:-w>
51+
)
52+
endfunction()
53+
54+
function(livekit_mark_system_includes target)
55+
_livekit_resolve_target(${target} _resolved_target)
56+
if(NOT _resolved_target)
57+
return()
58+
endif()
59+
60+
get_target_property(_interface_includes ${_resolved_target} INTERFACE_INCLUDE_DIRECTORIES)
61+
if(_interface_includes)
62+
set_property(TARGET ${_resolved_target} APPEND PROPERTY
63+
INTERFACE_SYSTEM_INCLUDE_DIRECTORIES ${_interface_includes}
64+
)
65+
endif()
66+
endfunction()
67+
68+
function(livekit_collect_targets_in_directory out_var directory)
69+
get_property(_targets DIRECTORY "${directory}" PROPERTY BUILDSYSTEM_TARGETS)
70+
get_property(_subdirectories DIRECTORY "${directory}" PROPERTY SUBDIRECTORIES)
71+
72+
set(_all_targets ${_targets})
73+
foreach(_subdirectory IN LISTS _subdirectories)
74+
livekit_collect_targets_in_directory(_subdirectory_targets "${_subdirectory}")
75+
list(APPEND _all_targets ${_subdirectory_targets})
76+
endforeach()
77+
78+
set(${out_var} ${_all_targets} PARENT_SCOPE)
79+
endfunction()
80+
81+
function(livekit_treat_as_external target)
82+
if(NOT TARGET ${target})
83+
return()
84+
endif()
85+
86+
livekit_mark_system_includes(${target})
87+
livekit_disable_warnings(${target})
88+
endfunction()

scripts/clang-tidy.sh

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,9 @@ fi
206206
# SDK and we forward it to every clang-tidy invocation via --extra-arg. Linux
207207
# CI doesn't need this -- the system clang-tidy already finds libstdc++/libc++
208208
# through its built-in resource dir.
209-
extra_args=()
209+
# Match the Clang build's variadic macro diagnostic suppression when clang-tidy
210+
# is driven from GCC compile commands in Linux CI.
211+
extra_args=(-extra-arg=-Wno-gnu-zero-variadic-macro-arguments)
210212
if [[ "$(uname)" == "Darwin" ]]; then
211213
sdk_path="$(xcrun --show-sdk-path 2>/dev/null || true)"
212214
if [[ -n "${sdk_path}" ]]; then

src/tests/CMakeLists.txt

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ cmake_minimum_required(VERSION 3.20)
55
# ============================================================================
66

77
include(FetchContent)
8+
include(warnings)
89

910
FetchContent_Declare(
1011
googletest
@@ -22,6 +23,24 @@ set(INSTALL_GTEST OFF CACHE BOOL "" FORCE)
2223
set(BUILD_GMOCK OFF CACHE BOOL "" FORCE)
2324

2425
FetchContent_MakeAvailable(googletest)
26+
livekit_collect_targets_in_directory(_livekit_googletest_targets "${googletest_BINARY_DIR}")
27+
foreach(_livekit_googletest_target IN LISTS _livekit_googletest_targets)
28+
livekit_treat_as_external(${_livekit_googletest_target})
29+
endforeach()
30+
if(TARGET GTest::gtest_main)
31+
livekit_treat_as_external(GTest::gtest_main)
32+
endif()
33+
34+
set(LIVEKIT_TEST_THIRD_PARTY_INCLUDE_DIRS
35+
${LIVEKIT_BINARY_DIR}/generated
36+
${Protobuf_INCLUDE_DIRS}
37+
)
38+
if(TARGET absl::base)
39+
get_target_property(_livekit_test_absl_inc absl::base INTERFACE_INCLUDE_DIRECTORIES)
40+
if(_livekit_test_absl_inc)
41+
list(APPEND LIVEKIT_TEST_THIRD_PARTY_INCLUDE_DIRS ${_livekit_test_absl_inc})
42+
endif()
43+
endif()
2544

2645
# Enable CTest
2746
enable_testing()
@@ -72,18 +91,11 @@ if(UNIT_TEST_SOURCES)
7291
${LIVEKIT_ROOT_DIR}/include
7392
${LIVEKIT_ROOT_DIR}/src
7493
${LIVEKIT_ROOT_DIR}/src/trace
75-
${LIVEKIT_BINARY_DIR}/generated
7694
${CMAKE_CURRENT_SOURCE_DIR}/benchmark
77-
${Protobuf_INCLUDE_DIRS}
7895
)
79-
if(TARGET absl::base)
80-
get_target_property(_livekit_unit_test_absl_inc absl::base INTERFACE_INCLUDE_DIRECTORIES)
81-
if(_livekit_unit_test_absl_inc)
82-
target_include_directories(livekit_unit_tests PRIVATE
83-
${_livekit_unit_test_absl_inc}
84-
)
85-
endif()
86-
endif()
96+
target_include_directories(livekit_unit_tests SYSTEM PRIVATE
97+
${LIVEKIT_TEST_THIRD_PARTY_INCLUDE_DIRS}
98+
)
8799

88100
target_compile_definitions(livekit_unit_tests
89101
PRIVATE
@@ -170,18 +182,11 @@ if(INTEGRATION_TEST_SOURCES)
170182
PRIVATE
171183
${LIVEKIT_ROOT_DIR}/include
172184
${LIVEKIT_ROOT_DIR}/src
173-
${LIVEKIT_BINARY_DIR}/generated
174185
${CMAKE_CURRENT_SOURCE_DIR}/benchmark
175-
${Protobuf_INCLUDE_DIRS}
176186
)
177-
if(TARGET absl::base)
178-
get_target_property(_livekit_test_absl_inc absl::base INTERFACE_INCLUDE_DIRECTORIES)
179-
if(_livekit_test_absl_inc)
180-
target_include_directories(livekit_integration_tests PRIVATE
181-
${_livekit_test_absl_inc}
182-
)
183-
endif()
184-
endif()
187+
target_include_directories(livekit_integration_tests SYSTEM PRIVATE
188+
${LIVEKIT_TEST_THIRD_PARTY_INCLUDE_DIRS}
189+
)
185190

186191
target_compile_definitions(livekit_integration_tests
187192
PRIVATE
@@ -258,8 +263,9 @@ if(STRESS_TEST_SOURCES)
258263
PRIVATE
259264
${LIVEKIT_ROOT_DIR}/include
260265
${LIVEKIT_ROOT_DIR}/src
261-
${LIVEKIT_BINARY_DIR}/generated
262-
${Protobuf_INCLUDE_DIRS}
266+
)
267+
target_include_directories(livekit_stress_tests SYSTEM PRIVATE
268+
${LIVEKIT_TEST_THIRD_PARTY_INCLUDE_DIRS}
263269
)
264270

265271
target_compile_definitions(livekit_stress_tests

src/video_source.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ void VideoSource::captureFrame(const VideoFrame& frame, const VideoCaptureOption
6363
}
6464

6565
void VideoSource::captureFrame(const VideoFrame& frame, std::int64_t timestamp_us, VideoRotation rotation) {
66-
captureFrame(frame, VideoCaptureOptions{timestamp_us, rotation});
66+
captureFrame(frame, VideoCaptureOptions{timestamp_us, rotation, {}});
6767
}
6868

6969
} // namespace livekit

0 commit comments

Comments
 (0)