diff --git a/CMakeLists.txt b/CMakeLists.txt index 895284b1..55c17e71 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,6 +52,26 @@ else() set(LIVEKIT_IS_TOPLEVEL FALSE) endif() +function(livekit_enable_strict_compile_warnings target_name) + if(MSVC) + target_compile_options(${target_name} PRIVATE /permissive- /Zc:__cplusplus /W4 /WX /wd4251 /wd4267) + else() + target_compile_options(${target_name} PRIVATE + -Wall + -Wextra + -Wpedantic + -Werror + $<$:-Wno-gnu-zero-variadic-macro-arguments> + ) + endif() +endfunction() + +function(livekit_add_system_include_dirs target_name) + if(ARGN) + target_include_directories(${target_name} SYSTEM PRIVATE ${ARGN}) + endif() +endfunction() + if(LIVEKIT_IS_TOPLEVEL) # Since we use separate build directories (build-debug/build-release), # we don't need additional platform/config subdirectories @@ -113,10 +133,31 @@ if(TARGET protobuf::libprotobuf) else() message(FATAL_ERROR "No protobuf library target found (expected protobuf::libprotobuf)") endif() -target_include_directories(livekit_proto PRIVATE + +set(LIVEKIT_PROTO_INCLUDE_DIRS "${PROTO_BINARY_DIR}" ${Protobuf_INCLUDE_DIRS} ) +if(DEFINED livekit_abseil_SOURCE_DIR) + list(APPEND LIVEKIT_PROTO_INCLUDE_DIRS "${livekit_abseil_SOURCE_DIR}") +endif() +set(LIVEKIT_EXTERNAL_SYSTEM_INCLUDE_DIRS) +foreach(_livekit_system_include_target + absl::base + spdlog::spdlog + spdlog) + if(TARGET ${_livekit_system_include_target}) + get_target_property(_livekit_system_includes + ${_livekit_system_include_target} + INTERFACE_INCLUDE_DIRECTORIES) + if(_livekit_system_includes) + list(APPEND LIVEKIT_EXTERNAL_SYSTEM_INCLUDE_DIRS ${_livekit_system_includes}) + endif() + endif() +endforeach() +list(REMOVE_DUPLICATES LIVEKIT_EXTERNAL_SYSTEM_INCLUDE_DIRS) + +target_include_directories(livekit_proto PRIVATE ${LIVEKIT_PROTO_INCLUDE_DIRS}) target_link_libraries(livekit_proto PRIVATE ${LIVEKIT_PROTOBUF_TARGET}) if(TARGET absl::base) get_target_property(_absl_inc absl::base INTERFACE_INCLUDE_DIRECTORIES) @@ -403,6 +444,10 @@ add_library(livekit SHARED src/trace/trace_event.h src/trace/tracing.cpp ) +if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + set_source_files_properties(src/trace/event_tracer.cpp + PROPERTIES COMPILE_OPTIONS "-Wno-error=type-limits") +endif() # Symbol visibility: keep liblivekit's exported ABI restricted to the public # LiveKit API. By default everything is hidden unless marked by the LIVEKIT_API # macro in code @@ -425,6 +470,10 @@ endif() target_sources(livekit PRIVATE $) +target_include_directories(livekit + BEFORE PRIVATE + ${LIVEKIT_PROTO_INCLUDE_DIRS} +) target_include_directories(livekit PUBLIC $ @@ -433,8 +482,8 @@ target_include_directories(livekit ${LIVEKIT_ROOT_DIR}/src ${LIVEKIT_ROOT_DIR}/src/trace ${RUST_ROOT}/livekit-ffi/include - ${PROTO_BINARY_DIR} ) +livekit_add_system_include_dirs(livekit ${LIVEKIT_EXTERNAL_SYSTEM_INCLUDE_DIRS}) target_link_libraries(livekit PRIVATE @@ -600,11 +649,7 @@ if(UNIX AND NOT APPLE) target_link_libraries(livekit PRIVATE OpenSSL::SSL OpenSSL::Crypto) endif() -if(MSVC) - target_compile_options(livekit PRIVATE /permissive- /Zc:__cplusplus /W4) -else() - target_compile_options(livekit PRIVATE -Wall -Wextra -Wpedantic) -endif() +livekit_enable_strict_compile_warnings(livekit) # -------------------- Install / Package (SDK bundle) -------------------- include(GNUInstallDirs) diff --git a/scripts/clang-tidy.sh b/scripts/clang-tidy.sh index fdbc43b2..11327f84 100755 --- a/scripts/clang-tidy.sh +++ b/scripts/clang-tidy.sh @@ -206,7 +206,9 @@ fi # SDK and we forward it to every clang-tidy invocation via --extra-arg. Linux # CI doesn't need this -- the system clang-tidy already finds libstdc++/libc++ # through its built-in resource dir. -extra_args=() +# Match the Clang build's variadic macro diagnostic suppression when clang-tidy +# is driven from GCC compile commands in Linux CI. +extra_args=(-extra-arg=-Wno-gnu-zero-variadic-macro-arguments) if [[ "$(uname)" == "Darwin" ]]; then sdk_path="$(xcrun --show-sdk-path 2>/dev/null || true)" if [[ -n "${sdk_path}" ]]; then diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt index 2bd0c09e..1ca7b725 100644 --- a/src/tests/CMakeLists.txt +++ b/src/tests/CMakeLists.txt @@ -67,23 +67,18 @@ if(UNIT_TEST_SOURCES) GTest::gtest_main ) + target_include_directories(livekit_unit_tests + BEFORE PRIVATE + ${LIVEKIT_PROTO_INCLUDE_DIRS} + ) target_include_directories(livekit_unit_tests PRIVATE ${LIVEKIT_ROOT_DIR}/include ${LIVEKIT_ROOT_DIR}/src ${LIVEKIT_ROOT_DIR}/src/trace - ${LIVEKIT_BINARY_DIR}/generated ${CMAKE_CURRENT_SOURCE_DIR}/benchmark - ${Protobuf_INCLUDE_DIRS} ) - if(TARGET absl::base) - get_target_property(_livekit_unit_test_absl_inc absl::base INTERFACE_INCLUDE_DIRECTORIES) - if(_livekit_unit_test_absl_inc) - target_include_directories(livekit_unit_tests PRIVATE - ${_livekit_unit_test_absl_inc} - ) - endif() - endif() + livekit_add_system_include_dirs(livekit_unit_tests ${LIVEKIT_EXTERNAL_SYSTEM_INCLUDE_DIRS}) target_compile_definitions(livekit_unit_tests PRIVATE @@ -166,22 +161,17 @@ if(INTEGRATION_TEST_SOURCES) GTest::gtest_main ) + target_include_directories(livekit_integration_tests + BEFORE PRIVATE + ${LIVEKIT_PROTO_INCLUDE_DIRS} + ) target_include_directories(livekit_integration_tests PRIVATE ${LIVEKIT_ROOT_DIR}/include ${LIVEKIT_ROOT_DIR}/src - ${LIVEKIT_BINARY_DIR}/generated ${CMAKE_CURRENT_SOURCE_DIR}/benchmark - ${Protobuf_INCLUDE_DIRS} ) - if(TARGET absl::base) - get_target_property(_livekit_test_absl_inc absl::base INTERFACE_INCLUDE_DIRECTORIES) - if(_livekit_test_absl_inc) - target_include_directories(livekit_integration_tests PRIVATE - ${_livekit_test_absl_inc} - ) - endif() - endif() + livekit_add_system_include_dirs(livekit_integration_tests ${LIVEKIT_EXTERNAL_SYSTEM_INCLUDE_DIRS}) target_compile_definitions(livekit_integration_tests PRIVATE @@ -254,13 +244,16 @@ if(STRESS_TEST_SOURCES) GTest::gtest_main ) + target_include_directories(livekit_stress_tests + BEFORE PRIVATE + ${LIVEKIT_PROTO_INCLUDE_DIRS} + ) target_include_directories(livekit_stress_tests PRIVATE ${LIVEKIT_ROOT_DIR}/include ${LIVEKIT_ROOT_DIR}/src - ${LIVEKIT_BINARY_DIR}/generated - ${Protobuf_INCLUDE_DIRS} ) + livekit_add_system_include_dirs(livekit_stress_tests ${LIVEKIT_EXTERNAL_SYSTEM_INCLUDE_DIRS}) target_compile_definitions(livekit_stress_tests PRIVATE diff --git a/src/video_source.cpp b/src/video_source.cpp index 468b900d..e173fe7b 100644 --- a/src/video_source.cpp +++ b/src/video_source.cpp @@ -63,7 +63,7 @@ void VideoSource::captureFrame(const VideoFrame& frame, const VideoCaptureOption } void VideoSource::captureFrame(const VideoFrame& frame, std::int64_t timestamp_us, VideoRotation rotation) { - captureFrame(frame, VideoCaptureOptions{timestamp_us, rotation}); + captureFrame(frame, VideoCaptureOptions{timestamp_us, rotation, {}}); } } // namespace livekit