Загрузка данных


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
)