xref: /aosp_15_r20/external/webrtc/common_audio/BUILD.gn (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1# Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
2#
3# Use of this source code is governed by a BSD-style license
4# that can be found in the LICENSE file in the root of the source
5# tree. An additional intellectual property rights grant can be found
6# in the file PATENTS.  All contributing project authors may
7# be found in the AUTHORS file in the root of the source tree.
8
9import("../webrtc.gni")
10
11visibility = [ ":*" ]
12
13rtc_library("common_audio") {
14  visibility += [ "*" ]
15  sources = [
16    "audio_converter.cc",
17    "audio_converter.h",
18    "audio_util.cc",
19    "channel_buffer.cc",
20    "channel_buffer.h",
21    "include/audio_util.h",
22    "real_fourier.cc",
23    "real_fourier.h",
24    "real_fourier_ooura.cc",
25    "real_fourier_ooura.h",
26    "resampler/include/push_resampler.h",
27    "resampler/include/resampler.h",
28    "resampler/push_resampler.cc",
29    "resampler/push_sinc_resampler.cc",
30    "resampler/push_sinc_resampler.h",
31    "resampler/resampler.cc",
32    "resampler/sinc_resampler.cc",
33    "smoothing_filter.cc",
34    "smoothing_filter.h",
35    "vad/include/vad.h",
36    "vad/vad.cc",
37    "wav_file.cc",
38    "wav_file.h",
39    "wav_header.cc",
40    "wav_header.h",
41    "window_generator.cc",
42    "window_generator.h",
43  ]
44
45  deps = [
46    ":common_audio_c",
47    ":sinc_resampler",
48    "../api:array_view",
49    "../rtc_base:checks",
50    "../rtc_base:gtest_prod",
51    "../rtc_base:logging",
52    "../rtc_base:safe_conversions",
53    "../rtc_base:sanitizer",
54    "../rtc_base:timeutils",
55    "../rtc_base/memory:aligned_malloc",
56    "../rtc_base/system:arch",
57    "../rtc_base/system:file_wrapper",
58    "../system_wrappers",
59    "third_party/ooura:fft_size_256",
60  ]
61  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
62
63  defines = []
64
65  if (rtc_build_with_neon) {
66    deps += [ ":common_audio_neon" ]
67  }
68
69  if (current_cpu == "x86" || current_cpu == "x64") {
70    deps += [ ":common_audio_sse2" ]
71    deps += [ ":common_audio_avx2" ]
72  }
73}
74
75rtc_source_set("mock_common_audio") {
76  visibility += webrtc_default_visibility
77  testonly = true
78  sources = [
79    "mocks/mock_smoothing_filter.h",
80    "vad/mock/mock_vad.h",
81  ]
82  deps = [
83    ":common_audio",
84    "../test:test_support",
85  ]
86}
87
88rtc_source_set("common_audio_c_arm_asm") {
89  sources = []
90  deps = []
91  if (current_cpu == "arm") {
92    sources += [ "signal_processing/complex_bit_reverse_arm.S" ]
93
94    if (arm_version >= 7) {
95      sources += [ "signal_processing/filter_ar_fast_q12_armv7.S" ]
96    } else {
97      sources += [ "signal_processing/filter_ar_fast_q12.c" ]
98    }
99    deps += [ "../rtc_base/system:asm_defines" ]
100  }
101}
102
103rtc_library("common_audio_c") {
104  visibility += webrtc_default_visibility
105  sources = [
106    "ring_buffer.c",
107    "ring_buffer.h",
108    "signal_processing/auto_corr_to_refl_coef.c",
109    "signal_processing/auto_correlation.c",
110    "signal_processing/complex_fft_tables.h",
111    "signal_processing/copy_set_operations.c",
112    "signal_processing/cross_correlation.c",
113    "signal_processing/division_operations.c",
114    "signal_processing/downsample_fast.c",
115    "signal_processing/energy.c",
116    "signal_processing/filter_ar.c",
117    "signal_processing/filter_ma_fast_q12.c",
118    "signal_processing/get_hanning_window.c",
119    "signal_processing/get_scaling_square.c",
120    "signal_processing/ilbc_specific_functions.c",
121    "signal_processing/include/real_fft.h",
122    "signal_processing/include/signal_processing_library.h",
123    "signal_processing/include/spl_inl.h",
124    "signal_processing/include/spl_inl_armv7.h",
125    "signal_processing/levinson_durbin.c",
126    "signal_processing/lpc_to_refl_coef.c",
127    "signal_processing/min_max_operations.c",
128    "signal_processing/randomization_functions.c",
129    "signal_processing/real_fft.c",
130    "signal_processing/refl_coef_to_lpc.c",
131    "signal_processing/resample.c",
132    "signal_processing/resample_48khz.c",
133    "signal_processing/resample_by_2.c",
134    "signal_processing/resample_by_2_internal.c",
135    "signal_processing/resample_by_2_internal.h",
136    "signal_processing/resample_fractional.c",
137    "signal_processing/spl_init.c",
138    "signal_processing/spl_inl.c",
139    "signal_processing/spl_sqrt.c",
140    "signal_processing/splitting_filter.c",
141    "signal_processing/sqrt_of_one_minus_x_squared.c",
142    "signal_processing/vector_scaling_operations.c",
143    "vad/include/webrtc_vad.h",
144    "vad/vad_core.c",
145    "vad/vad_core.h",
146    "vad/vad_filterbank.c",
147    "vad/vad_filterbank.h",
148    "vad/vad_gmm.c",
149    "vad/vad_gmm.h",
150    "vad/vad_sp.c",
151    "vad/vad_sp.h",
152    "vad/webrtc_vad.c",
153  ]
154
155  if (current_cpu == "mipsel") {
156    sources += [
157      "signal_processing/complex_bit_reverse_mips.c",
158      "signal_processing/complex_fft_mips.c",
159      "signal_processing/cross_correlation_mips.c",
160      "signal_processing/downsample_fast_mips.c",
161      "signal_processing/filter_ar_fast_q12_mips.c",
162      "signal_processing/include/spl_inl_mips.h",
163      "signal_processing/min_max_operations_mips.c",
164      "signal_processing/resample_by_2_mips.c",
165    ]
166    if (mips_dsp_rev > 0) {
167      sources += [ "signal_processing/vector_scaling_operations_mips.c" ]
168    }
169  } else {
170    sources += [ "signal_processing/complex_fft.c" ]
171  }
172
173  if (current_cpu != "arm" && current_cpu != "mipsel") {
174    sources += [
175      "signal_processing/complex_bit_reverse.c",
176      "signal_processing/filter_ar_fast_q12.c",
177    ]
178  }
179
180  deps = [
181    ":common_audio_c_arm_asm",
182    ":common_audio_cc",
183    "../rtc_base:checks",
184    "../rtc_base:compile_assert_c",
185    "../rtc_base:sanitizer",
186    "../rtc_base/system:arch",
187    "../system_wrappers",
188    "third_party/ooura:fft_size_256",
189    "third_party/spl_sqrt_floor",
190  ]
191}
192
193rtc_library("common_audio_cc") {
194  sources = [
195    "signal_processing/dot_product_with_scale.cc",
196    "signal_processing/dot_product_with_scale.h",
197  ]
198
199  deps = [
200    "../rtc_base:safe_conversions",
201    "../system_wrappers",
202  ]
203}
204
205rtc_source_set("sinc_resampler") {
206  sources = [ "resampler/sinc_resampler.h" ]
207  deps = [
208    "../rtc_base:gtest_prod",
209    "../rtc_base/memory:aligned_malloc",
210    "../rtc_base/system:arch",
211    "../system_wrappers",
212  ]
213}
214
215rtc_source_set("fir_filter") {
216  visibility += webrtc_default_visibility
217  sources = [ "fir_filter.h" ]
218}
219
220rtc_library("fir_filter_factory") {
221  visibility += webrtc_default_visibility
222  sources = [
223    "fir_filter_c.cc",
224    "fir_filter_c.h",
225    "fir_filter_factory.cc",
226    "fir_filter_factory.h",
227  ]
228  deps = [
229    ":fir_filter",
230    "../rtc_base:checks",
231    "../rtc_base/system:arch",
232    "../system_wrappers",
233  ]
234  if (current_cpu == "x86" || current_cpu == "x64") {
235    deps += [ ":common_audio_sse2" ]
236    deps += [ ":common_audio_avx2" ]
237  }
238  if (rtc_build_with_neon) {
239    deps += [ ":common_audio_neon" ]
240  }
241}
242
243if (current_cpu == "x86" || current_cpu == "x64") {
244  rtc_library("common_audio_sse2") {
245    sources = [
246      "fir_filter_sse.cc",
247      "fir_filter_sse.h",
248      "resampler/sinc_resampler_sse.cc",
249    ]
250
251    if (is_posix || is_fuchsia) {
252      cflags = [ "-msse2" ]
253    }
254
255    deps = [
256      ":fir_filter",
257      ":sinc_resampler",
258      "../rtc_base:checks",
259      "../rtc_base/memory:aligned_malloc",
260    ]
261  }
262
263  rtc_library("common_audio_avx2") {
264    sources = [
265      "fir_filter_avx2.cc",
266      "fir_filter_avx2.h",
267      "resampler/sinc_resampler_avx2.cc",
268    ]
269
270    if (is_win) {
271      cflags = [ "/arch:AVX2" ]
272    } else {
273      cflags = [
274        "-mavx2",
275        "-mfma",
276      ]
277    }
278
279    deps = [
280      ":fir_filter",
281      ":sinc_resampler",
282      "../rtc_base:checks",
283      "../rtc_base/memory:aligned_malloc",
284    ]
285  }
286}
287
288if (rtc_build_with_neon) {
289  rtc_library("common_audio_neon") {
290    sources = [
291      "fir_filter_neon.cc",
292      "fir_filter_neon.h",
293      "resampler/sinc_resampler_neon.cc",
294    ]
295
296    if (current_cpu != "arm64") {
297      # Enable compilation for the NEON instruction set.
298      suppressed_configs += [ "//build/config/compiler:compiler_arm_fpu" ]
299      cflags = [ "-mfpu=neon" ]
300    }
301
302    deps = [
303      ":common_audio_neon_c",
304      ":fir_filter",
305      ":sinc_resampler",
306      "../rtc_base:checks",
307      "../rtc_base/memory:aligned_malloc",
308    ]
309  }
310
311  rtc_library("common_audio_neon_c") {
312    visibility += webrtc_default_visibility
313    sources = [
314      "signal_processing/cross_correlation_neon.c",
315      "signal_processing/downsample_fast_neon.c",
316      "signal_processing/min_max_operations_neon.c",
317    ]
318
319    if (current_cpu != "arm64") {
320      # Enable compilation for the NEON instruction set.
321      suppressed_configs += [ "//build/config/compiler:compiler_arm_fpu" ]
322      cflags = [ "-mfpu=neon" ]
323    }
324
325    deps = [
326      ":common_audio_c",
327      "../rtc_base:checks",
328      "../rtc_base/system:arch",
329    ]
330  }
331}
332
333if (rtc_include_tests && !build_with_chromium) {
334  rtc_test("common_audio_unittests") {
335    visibility += webrtc_default_visibility
336    testonly = true
337
338    sources = [
339      "audio_converter_unittest.cc",
340      "audio_util_unittest.cc",
341      "channel_buffer_unittest.cc",
342      "fir_filter_unittest.cc",
343      "real_fourier_unittest.cc",
344      "resampler/push_resampler_unittest.cc",
345      "resampler/push_sinc_resampler_unittest.cc",
346      "resampler/resampler_unittest.cc",
347      "resampler/sinusoidal_linear_chirp_source.cc",
348      "resampler/sinusoidal_linear_chirp_source.h",
349      "ring_buffer_unittest.cc",
350      "signal_processing/real_fft_unittest.cc",
351      "signal_processing/signal_processing_unittest.cc",
352      "smoothing_filter_unittest.cc",
353      "vad/vad_core_unittest.cc",
354      "vad/vad_filterbank_unittest.cc",
355      "vad/vad_gmm_unittest.cc",
356      "vad/vad_sp_unittest.cc",
357      "vad/vad_unittest.cc",
358      "vad/vad_unittest.h",
359      "wav_file_unittest.cc",
360      "wav_header_unittest.cc",
361      "window_generator_unittest.cc",
362    ]
363
364    # Does not compile on iOS for arm: webrtc:5544.
365    if (!is_ios || target_cpu != "arm") {
366      sources += [ "resampler/sinc_resampler_unittest.cc" ]
367    }
368
369    deps = [
370      ":common_audio",
371      ":common_audio_c",
372      ":fir_filter",
373      ":fir_filter_factory",
374      ":sinc_resampler",
375      "../rtc_base:checks",
376      "../rtc_base:macromagic",
377      "../rtc_base:rtc_base_tests_utils",
378      "../rtc_base:stringutils",
379      "../rtc_base:timeutils",
380      "../rtc_base/system:arch",
381      "../system_wrappers",
382      "../test:fileutils",
383      "../test:rtc_expect_death",
384      "../test:test_main",
385      "../test:test_support",
386      "//testing/gtest",
387    ]
388
389    if (is_android) {
390      deps += [ "//testing/android/native_test:native_test_support" ]
391
392      shard_timeout = 900
393    }
394  }
395}
396