1cmake_minimum_required(VERSION 3.30)
2project(audioProcessor
3 VERSION 1.0.0
4 DESCRIPTION "Audio Gain Controller using WebRTC - GainController2"
5 LANGUAGES CXX
6)
7
8set(CMAKE_CXX_STANDARD 20)
9set(CMAKE_CXX_STANDARD_REQUIRED True)
10set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)
11
12if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
13 add_compile_options(-Wall)
14elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
15 add_compile_options(/W4)
16endif()
17
18find_program(MESON_EXECUTABLE meson REQUIRED)
19find_program(NINJA_EXECUTABLE ninja REQUIRED)
20
21include(ExternalProject)
22
23set(AGC_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/agc")
24
25ExternalProject_Add(webrtc_apm
26 GIT_REPOSITORY https://gitlab.freedesktop.org/pulseaudio/webrtc-audio-processing.git
27 PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/webrtc-apm"
28 CONFIGURE_COMMAND ${MESON_EXECUTABLE} setup <BINARY_DIR> <SOURCE_DIR> -Dprefix=${AGC_PREFIX} --buildtype=release
29 BUILD_COMMAND ${NINJA_EXECUTABLE} -C <BINARY_DIR>
30 INSTALL_COMMAND ${NINJA_EXECUTABLE} -C <BINARY_DIR> install
31 BUILD_BYPRODUCTS "${AGC_PREFIX}/lib/pkgconfig/webrtc-audio-processing-2.pc"
32)
33
34ExternalProject_Get_Property(webrtc_apm SOURCE_DIR)
35
36file(GLOB ABSL_DIR "${SOURCE_DIR}/subprojects/abseil-cpp-*")
37
38add_executable(audioProcessor
39 src/main.cpp
40 src/audioProcessor.cpp
41)
42
43add_dependencies(audioProcessor webrtc_apm)
44
45target_compile_definitions(audioProcessor PRIVATE WEBRTC_APM_DEBUG_DUMP=0)
46
47target_include_directories(audioProcessor PRIVATE
48 src/
49 "${SOURCE_DIR}"
50 "${SOURCE_DIR}/webrtc"
51 "${SOURCE_DIR}/webrtc/modules/audio_processing"
52 "${ABSL_DIR}"
53)
54
55target_link_directories(audioProcessor PRIVATE "${AGC_PREFIX}/lib")
56target_link_libraries(audioProcessor PRIVATE webrtc-audio-processing-2)