Загрузка данных
cmake_minimum_required(VERSION 3.10)
project(pjsip_webrtc C CXX)
# Базовый путь к исходникам WebRTC в PJSIP
set(WEBRTC_BASE "../../webrtc/src/webrtc")
# 1. Сбор заголовков для удобства отображения в IDE (по аналогии со Speex)
file(GLOB_RECURSE WEBRTC_HEADERS "${WEBRTC_BASE}/*.h" "${WEBRTC_BASE}/*.hpp")
# 2. Список исходных файлов, строго скопированный из вашего Makefile
set(WEBRTC_SRC
${WEBRTC_HEADERS}
# modules/audio_processing/aec
${WEBRTC_BASE}/modules/audio_processing/aec/aec_core.c
${WEBRTC_BASE}/modules/audio_processing/aec/aec_rdft.c
${WEBRTC_BASE}/modules/audio_processing/aec/aec_resampler.c
${WEBRTC_BASE}/modules/audio_processing/aec/echo_cancellation.c
# modules/audio_processing/aecm
${WEBRTC_BASE}/modules/audio_processing/aecm/aecm_core.c
${WEBRTC_BASE}/modules/audio_processing/aecm/echo_control_mobile.c
# modules/audio_processing/ns
${WEBRTC_BASE}/modules/audio_processing/ns/noise_suppression.c
${WEBRTC_BASE}/modules/audio_processing/ns/noise_suppression_x.c
${WEBRTC_BASE}/modules/audio_processing/ns/ns_core.c
${WEBRTC_BASE}/modules/audio_processing/ns/nsx_core.c
# modules/audio_processing/utility
${WEBRTC_BASE}/modules/audio_processing/utility/delay_estimator_wrapper.c
${WEBRTC_BASE}/modules/audio_processing/utility/delay_estimator.c
# common_audio
${WEBRTC_BASE}/common_audio/fft4g.c
${WEBRTC_BASE}/common_audio/ring_buffer.c
# common_audio/signal_processing
${WEBRTC_BASE}/common_audio/signal_processing/complex_bit_reverse.c
${WEBRTC_BASE}/common_audio/signal_processing/complex_fft.c
${WEBRTC_BASE}/common_audio/signal_processing/copy_set_operations.c
${WEBRTC_BASE}/common_audio/signal_processing/cross_correlation.c
${WEBRTC_BASE}/common_audio/signal_processing/division_operations.c
${WEBRTC_BASE}/common_audio/signal_processing/downsample_fast.c
${WEBRTC_BASE}/common_audio/signal_processing/energy.c
${WEBRTC_BASE}/common_audio/signal_processing/get_scaling_square.c
${WEBRTC_BASE}/common_audio/signal_processing/min_max_operations.c
${WEBRTC_BASE}/common_audio/signal_processing/randomization_functions.c
${WEBRTC_BASE}/common_audio/signal_processing/real_fft.c
${WEBRTC_BASE}/common_audio/signal_processing/spl_init.c
${WEBRTC_BASE}/common_audio/signal_processing/spl_sqrt.c
${WEBRTC_BASE}/common_audio/signal_processing/spl_sqrt_floor.c
${WEBRTC_BASE}/common_audio/signal_processing/vector_scaling_operations.c
)
# ПРИМЕЧАНИЕ: Если при компиляции линкер не найдет C++ (.cc) файлы,
# вы можете раскомментировать строки ниже, так как оригинальный WebRTC часто использует расширение .cc:
# string(REPLACE ".c" ".cc" WEBRTC_SRC_CC "${WEBRTC_SRC}")
# list(APPEND WEBRTC_SRC ${WEBRTC_SRC_CC})
# 3. Пути для инклюдов (из секции $(CC_INC) вашего Makefile)
include_directories(AFTER SYSTEM
.
../../webrtc/src # Эквивалент $(CC_INC)../../webrtc/src
../../../pjlib/include # Эквивалент $(CC_INC)../../../pjlib/include
)
# 4. Базовые макросы (дефайны) для корректной работы WebRTC
# Без них исходный код WebRTC выдает ошибку компиляции #error "No platform defined"
if(WIN32)
add_definitions(-DWEBRTC_WIN -D_WIN32_WINNT=0x0601)
elseif(APPLE)
add_definitions(-DWEBRTC_MAC -DWEBRTC_POSIX)
else()
add_definitions(-DWEBRTC_POSIX)
endif()
# Дополнительные дефайны, которые часто прокидываются через $(WEBRTC_OTHER_CFLAGS)
add_definitions(-DWEBRTC_NS_FLOAT=1)
# 5. Оптимизации под процессоры (автоматическое управление ARM NEON / x86 SSE)
if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm" OR CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "ARM")
add_definitions(-DWEBRTC_ARCH_ARM)
# Если целевой процессор поддерживает NEON (например, Android/iOS)
add_definitions(-DWEBRTC_HAS_NEON)
# При необходимости сюда добавляются файлы вроде:
# list(APPEND WEBRTC_SRC ${WEBRTC_BASE}/common_audio/signal_processing/min_max_operations_neon.c)
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "x86" OR CMAKE_SYSTEM_PROCESSOR MATCHES "AMD64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "i386")
add_definitions(-DWEBRTC_ARCH_X86)
endif()
# 6. Создание OBJECT-библиотеки webrtc
add_library(webrtc OBJECT ${WEBRTC_SRC})
# 7. Задаем стандарты на случай, если в пакете активируются C++ файлы
set_target_properties(webrtc PROPERTIES
C_STANDARD 99
C_STANDARD_REQUIRED ON
CXX_STANDARD 14
CXX_STANDARD_REQUIRED ON
)