xref: /aosp_15_r20/external/webrtc/modules/audio_processing/agc2/rnn_vad/BUILD.gn (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1# Copyright (c) 2018 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
11rtc_library("rnn_vad") {
12  visibility = [ "../*" ]
13  sources = [
14    "features_extraction.cc",
15    "features_extraction.h",
16    "rnn.cc",
17    "rnn.h",
18  ]
19
20  defines = []
21  if (rtc_build_with_neon && current_cpu != "arm64") {
22    suppressed_configs += [ "//build/config/compiler:compiler_arm_fpu" ]
23    cflags = [ "-mfpu=neon" ]
24  }
25
26  deps = [
27    ":rnn_vad_common",
28    ":rnn_vad_layers",
29    ":rnn_vad_lp_residual",
30    ":rnn_vad_pitch",
31    ":rnn_vad_sequence_buffer",
32    ":rnn_vad_spectral_features",
33    "..:biquad_filter",
34    "..:cpu_features",
35    "../../../../api:array_view",
36    "../../../../rtc_base:checks",
37    "../../../../rtc_base:safe_compare",
38    "../../../../rtc_base:safe_conversions",
39    "//third_party/rnnoise:rnn_vad",
40  ]
41}
42
43rtc_library("rnn_vad_auto_correlation") {
44  sources = [
45    "auto_correlation.cc",
46    "auto_correlation.h",
47  ]
48  deps = [
49    ":rnn_vad_common",
50    "../../../../api:array_view",
51    "../../../../rtc_base:checks",
52    "../../utility:pffft_wrapper",
53  ]
54}
55
56rtc_source_set("rnn_vad_common") {
57  # TODO(alessiob): Make this target visibility private.
58  visibility = [
59    ":*",
60    "..:vad_wrapper",
61  ]
62  sources = [ "common.h" ]
63  deps = [
64    "../../../../rtc_base/system:arch",
65    "../../../../system_wrappers",
66  ]
67}
68
69rtc_library("rnn_vad_lp_residual") {
70  sources = [
71    "lp_residual.cc",
72    "lp_residual.h",
73  ]
74  deps = [
75    "../../../../api:array_view",
76    "../../../../rtc_base:checks",
77    "../../../../rtc_base:safe_compare",
78  ]
79}
80
81rtc_source_set("rnn_vad_layers") {
82  sources = [
83    "rnn_fc.cc",
84    "rnn_fc.h",
85    "rnn_gru.cc",
86    "rnn_gru.h",
87  ]
88
89  defines = []
90  if (rtc_build_with_neon && current_cpu != "arm64") {
91    suppressed_configs += [ "//build/config/compiler:compiler_arm_fpu" ]
92    cflags = [ "-mfpu=neon" ]
93  }
94
95  deps = [
96    ":rnn_vad_common",
97    ":vector_math",
98    "..:cpu_features",
99    "../../../../api:array_view",
100    "../../../../api:function_view",
101    "../../../../rtc_base:checks",
102    "../../../../rtc_base:safe_conversions",
103    "//third_party/rnnoise:rnn_vad",
104  ]
105  if (current_cpu == "x86" || current_cpu == "x64") {
106    deps += [ ":vector_math_avx2" ]
107  }
108  absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
109}
110
111rtc_source_set("vector_math") {
112  sources = [ "vector_math.h" ]
113  deps = [
114    "..:cpu_features",
115    "../../../../api:array_view",
116    "../../../../rtc_base:checks",
117    "../../../../rtc_base:safe_conversions",
118    "../../../../rtc_base/system:arch",
119  ]
120}
121
122if (current_cpu == "x86" || current_cpu == "x64") {
123  rtc_library("vector_math_avx2") {
124    sources = [ "vector_math_avx2.cc" ]
125    if (is_win) {
126      cflags = [ "/arch:AVX2" ]
127    } else {
128      cflags = [
129        "-mavx2",
130        "-mfma",
131      ]
132    }
133    deps = [
134      ":vector_math",
135      "../../../../api:array_view",
136      "../../../../rtc_base:checks",
137      "../../../../rtc_base:safe_conversions",
138    ]
139  }
140}
141
142rtc_library("rnn_vad_pitch") {
143  sources = [
144    "pitch_search.cc",
145    "pitch_search.h",
146    "pitch_search_internal.cc",
147    "pitch_search_internal.h",
148  ]
149
150  defines = []
151  if (rtc_build_with_neon && current_cpu != "arm64") {
152    suppressed_configs += [ "//build/config/compiler:compiler_arm_fpu" ]
153    cflags = [ "-mfpu=neon" ]
154  }
155
156  deps = [
157    ":rnn_vad_auto_correlation",
158    ":rnn_vad_common",
159    ":vector_math",
160    "..:cpu_features",
161    "../../../../api:array_view",
162    "../../../../rtc_base:checks",
163    "../../../../rtc_base:gtest_prod",
164    "../../../../rtc_base:safe_compare",
165    "../../../../rtc_base:safe_conversions",
166    "../../../../rtc_base/system:arch",
167  ]
168  if (current_cpu == "x86" || current_cpu == "x64") {
169    deps += [ ":vector_math_avx2" ]
170  }
171}
172
173rtc_source_set("rnn_vad_ring_buffer") {
174  sources = [ "ring_buffer.h" ]
175  deps = [
176    "../../../../api:array_view",
177    "../../../../rtc_base:checks",
178  ]
179}
180
181rtc_source_set("rnn_vad_sequence_buffer") {
182  sources = [ "sequence_buffer.h" ]
183  deps = [
184    "../../../../api:array_view",
185    "../../../../rtc_base:checks",
186  ]
187}
188
189rtc_library("rnn_vad_spectral_features") {
190  sources = [
191    "spectral_features.cc",
192    "spectral_features.h",
193    "spectral_features_internal.cc",
194    "spectral_features_internal.h",
195  ]
196  deps = [
197    ":rnn_vad_common",
198    ":rnn_vad_ring_buffer",
199    ":rnn_vad_symmetric_matrix_buffer",
200    "../../../../api:array_view",
201    "../../../../rtc_base:checks",
202    "../../../../rtc_base:safe_compare",
203    "../../utility:pffft_wrapper",
204  ]
205}
206
207rtc_source_set("rnn_vad_symmetric_matrix_buffer") {
208  sources = [ "symmetric_matrix_buffer.h" ]
209  deps = [
210    "../../../../api:array_view",
211    "../../../../rtc_base:checks",
212    "../../../../rtc_base:safe_compare",
213  ]
214}
215
216if (rtc_include_tests) {
217  rtc_library("test_utils") {
218    testonly = true
219    sources = [
220      "test_utils.cc",
221      "test_utils.h",
222    ]
223    deps = [
224      ":rnn_vad",
225      ":rnn_vad_common",
226      "../../../../api:array_view",
227      "../../../../api:scoped_refptr",
228      "../../../../rtc_base:checks",
229      "../../../../rtc_base:safe_compare",
230      "../../../../test:fileutils",
231      "../../../../test:test_support",
232    ]
233    absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
234  }
235
236  unittest_resources = [
237    "../../../../resources/audio_processing/agc2/rnn_vad/band_energies.dat",
238    "../../../../resources/audio_processing/agc2/rnn_vad/pitch_buf_24k.dat",
239    "../../../../resources/audio_processing/agc2/rnn_vad/pitch_lp_res.dat",
240    "../../../../resources/audio_processing/agc2/rnn_vad/pitch_search_int.dat",
241    "../../../../resources/audio_processing/agc2/rnn_vad/samples.pcm",
242    "../../../../resources/audio_processing/agc2/rnn_vad/vad_prob.dat",
243  ]
244
245  if (is_ios) {
246    bundle_data("unittests_bundle_data") {
247      testonly = true
248      sources = unittest_resources
249      outputs = [ "{{bundle_resources_dir}}/{{source_file_part}}" ]
250    }
251  }
252
253  rtc_library("unittests") {
254    testonly = true
255    sources = [
256      "auto_correlation_unittest.cc",
257      "features_extraction_unittest.cc",
258      "lp_residual_unittest.cc",
259      "pitch_search_internal_unittest.cc",
260      "pitch_search_unittest.cc",
261      "ring_buffer_unittest.cc",
262      "rnn_fc_unittest.cc",
263      "rnn_gru_unittest.cc",
264      "rnn_unittest.cc",
265      "rnn_vad_unittest.cc",
266      "sequence_buffer_unittest.cc",
267      "spectral_features_internal_unittest.cc",
268      "spectral_features_unittest.cc",
269      "symmetric_matrix_buffer_unittest.cc",
270      "vector_math_unittest.cc",
271    ]
272
273    defines = []
274    if (rtc_build_with_neon && current_cpu != "arm64") {
275      suppressed_configs += [ "//build/config/compiler:compiler_arm_fpu" ]
276      cflags = [ "-mfpu=neon" ]
277    }
278
279    deps = [
280      ":rnn_vad",
281      ":rnn_vad_auto_correlation",
282      ":rnn_vad_common",
283      ":rnn_vad_layers",
284      ":rnn_vad_lp_residual",
285      ":rnn_vad_pitch",
286      ":rnn_vad_ring_buffer",
287      ":rnn_vad_sequence_buffer",
288      ":rnn_vad_spectral_features",
289      ":rnn_vad_symmetric_matrix_buffer",
290      ":test_utils",
291      ":vector_math",
292      "..:cpu_features",
293      "../..:audioproc_test_utils",
294      "../../../../api:array_view",
295      "../../../../common_audio/",
296      "../../../../rtc_base:checks",
297      "../../../../rtc_base:logging",
298      "../../../../rtc_base:safe_compare",
299      "../../../../rtc_base:safe_conversions",
300      "../../../../rtc_base:stringutils",
301      "../../../../rtc_base/system:arch",
302      "../../../../test:test_support",
303      "../../utility:pffft_wrapper",
304      "//third_party/rnnoise:rnn_vad",
305    ]
306    if (current_cpu == "x86" || current_cpu == "x64") {
307      deps += [ ":vector_math_avx2" ]
308    }
309    absl_deps = [ "//third_party/abseil-cpp/absl/memory" ]
310    data = unittest_resources
311    if (is_ios) {
312      deps += [ ":unittests_bundle_data" ]
313    }
314  }
315
316  if (!build_with_chromium) {
317    rtc_executable("rnn_vad_tool") {
318      testonly = true
319      sources = [ "rnn_vad_tool.cc" ]
320      deps = [
321        ":rnn_vad",
322        ":rnn_vad_common",
323        "..:cpu_features",
324        "../../../../api:array_view",
325        "../../../../common_audio",
326        "../../../../rtc_base:logging",
327        "../../../../rtc_base:safe_compare",
328        "../../../../test:test_support",
329        "//third_party/abseil-cpp/absl/flags:flag",
330        "//third_party/abseil-cpp/absl/flags:parse",
331      ]
332    }
333  }
334}
335