BUILD.gn revision 325cff01b42064313b221f2c8819ce01218f5ca4
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("//build/config/arm.gni")
10import("../build/webrtc.gni")
11
12config("common_audio_config") {
13  include_dirs = [
14    "resampler/include",
15    "signal_processing/include",
16    "vad/include",
17  ]
18}
19
20source_set("common_audio") {
21  sources = [
22    "audio_util.cc",
23    "blocker.cc",
24    "blocker.h",
25    "fir_filter.cc",
26    "fir_filter.h",
27    "fir_filter_neon.h",
28    "fir_filter_sse.h",
29    "include/audio_util.h",
30    "resampler/include/push_resampler.h",
31    "resampler/include/resampler.h",
32    "resampler/push_resampler.cc",
33    "resampler/push_sinc_resampler.cc",
34    "resampler/push_sinc_resampler.h",
35    "resampler/resampler.cc",
36    "resampler/sinc_resampler.cc",
37    "resampler/sinc_resampler.h",
38    "signal_processing/include/real_fft.h",
39    "signal_processing/include/signal_processing_library.h",
40    "signal_processing/include/spl_inl.h",
41    "signal_processing/auto_corr_to_refl_coef.c",
42    "signal_processing/auto_correlation.c",
43    "signal_processing/complex_fft_tables.h",
44    "signal_processing/copy_set_operations.c",
45    "signal_processing/cross_correlation.c",
46    "signal_processing/division_operations.c",
47    "signal_processing/dot_product_with_scale.c",
48    "signal_processing/downsample_fast.c",
49    "signal_processing/energy.c",
50    "signal_processing/filter_ar.c",
51    "signal_processing/filter_ma_fast_q12.c",
52    "signal_processing/get_hanning_window.c",
53    "signal_processing/get_scaling_square.c",
54    "signal_processing/ilbc_specific_functions.c",
55    "signal_processing/levinson_durbin.c",
56    "signal_processing/lpc_to_refl_coef.c",
57    "signal_processing/min_max_operations.c",
58    "signal_processing/randomization_functions.c",
59    "signal_processing/refl_coef_to_lpc.c",
60    "signal_processing/real_fft.c",
61    "signal_processing/resample.c",
62    "signal_processing/resample_48khz.c",
63    "signal_processing/resample_by_2.c",
64    "signal_processing/resample_by_2_internal.c",
65    "signal_processing/resample_by_2_internal.h",
66    "signal_processing/resample_fractional.c",
67    "signal_processing/spl_init.c",
68    "signal_processing/spl_sqrt.c",
69    "signal_processing/spl_version.c",
70    "signal_processing/splitting_filter.c",
71    "signal_processing/sqrt_of_one_minus_x_squared.c",
72    "signal_processing/vector_scaling_operations.c",
73    "vad/include/webrtc_vad.h",
74    "vad/webrtc_vad.c",
75    "vad/vad_core.c",
76    "vad/vad_core.h",
77    "vad/vad_filterbank.c",
78    "vad/vad_filterbank.h",
79    "vad/vad_gmm.c",
80    "vad/vad_gmm.h",
81    "vad/vad_sp.c",
82    "vad/vad_sp.h",
83    "wav_header.cc",
84    "wav_header.h",
85    "wav_writer.cc",
86    "wav_writer.h",
87    "window_generator.cc",
88    "window_generator.h",
89  ]
90
91  deps = [ "../system_wrappers" ]
92
93  # TODO(ajm): Enable when GN support for openmax_dl is added.
94  # See: crbug.com/419206
95  # Not needed immediately, since nothing built by GN depends on these bits.
96  # TODO(ajm): Workaround until openmax_dl has non-Android ARM support.
97  # See: crbug.com/415393
98  #if (cpu_arch != "arm" or (cpu_arch == "arm" and is_android)) {
99  #  'sources' += [
100  #    'lapped_transform.cc',
101  #    'lapped_transform.h',
102  #    'real_fourier.cc',
103  #    'real_fourier.h',
104  #  ]
105  #
106  #  deps += [ "//third_party/openmax_dl/dl" ]
107  #}
108
109  if (cpu_arch == "arm") {
110    sources += [
111      "signal_processing/complex_bit_reverse_arm.S",
112      "signal_processing/spl_sqrt_floor_arm.S",
113    ]
114
115    if (arm_version == 7) {
116      deps += [ ":common_audio_neon" ]
117      sources += [ "signal_processing/filter_ar_fast_q12_armv7.S" ]
118    } else {
119      sources += [ "signal_processing/filter_ar_fast_q12.c" ]
120    }
121  }
122
123  if (cpu_arch == "mipsel") {
124    sources += [
125      "signal_processing/include/spl_inl_mips.h",
126      "signal_processing/complex_bit_reverse_mips.c",
127      "signal_processing/complex_fft_mips.c",
128      "signal_processing/cross_correlation_mips.c",
129      "signal_processing/downsample_fast_mips.c",
130      "signal_processing/filter_ar_fast_q12_mips.c",
131      "signal_processing/min_max_operations_mips.c",
132      "signal_processing/resample_by_2_mips.c",
133      "signal_processing/spl_sqrt_floor_mips.c",
134    ]
135    if (mips_dsp_rev > 0) {
136      sources += [ "signal_processing/vector_scaling_operations_mips.c" ]
137    }
138  } else {
139    sources += [ "signal_processing/complex_fft.c" ]
140  }
141
142  if (cpu_arch != "arm" && cpu_arch != "mipsel") {
143    sources += [
144      "signal_processing/complex_bit_reverse.c",
145      "signal_processing/filter_ar_fast_q12.c",
146      "signal_processing/spl_sqrt_floor.c",
147    ]
148  }
149
150  if (is_win) {
151    cflags = [
152      "/wd4334",  # Ignore warning on shift operator promotion.
153    ]
154  }
155
156  configs += [ "..:common_config" ]
157
158  public_configs = [
159    "..:common_inherited_config",
160    ":common_audio_config",
161  ]
162
163  if (is_clang) {
164    # Suppress warnings from Chrome's Clang plugins.
165    # See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
166    configs -= [ "//build/config/clang:find_bad_constructs" ]
167  }
168
169  if (cpu_arch == "x86" || cpu_arch == "x64") {
170    deps += [ ":common_audio_sse2" ]
171  }
172}
173
174if (cpu_arch == "x86" || cpu_arch == "x64") {
175  source_set("common_audio_sse2") {
176    sources = [
177      "fir_filter_sse.cc",
178      "resampler/sinc_resampler_sse.cc",
179    ]
180
181    cflags = [ "-msse2" ]
182
183    configs += [ "..:common_inherited_config" ]
184
185    if (is_clang) {
186      # Suppress warnings from Chrome's Clang plugins.
187      # See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
188      configs -= [ "//build/config/clang:find_bad_constructs" ]
189    }
190  }
191}
192
193if (rtc_build_armv7_neon) {
194  source_set("common_audio_neon") {
195    sources = [
196      "fir_filter_neon.cc",
197      "resampler/sinc_resampler_neon.cc",
198      "signal_processing/cross_correlation_neon.S",
199      "signal_processing/downsample_fast_neon.S",
200      "signal_processing/min_max_operations_neon.S",
201      "signal_processing/vector_scaling_operations_neon.S",
202    ]
203
204    configs += [ "..:common_config" ]
205    public_configs = [ "..:common_inherited_config" ]
206
207
208    # Enable compilation for the ARM v7 Neon instruction set. This is needed
209    # since //build/config/arm.gni only enables Neon for iOS, not Android.
210    # This provides the same functionality as webrtc/build/arm_neon.gypi.
211    # TODO(kjellander): Investigate if this can be moved into webrtc.gni or
212    # //build/config/arm.gni instead, to reduce code duplication.
213    # Remove the -mfpu=vfpv3-d16 cflag.
214    configs -= [ "//build/config/compiler:compiler_arm_fpu" ]
215    cflags = [
216      "-flax-vector-conversions",
217      "-mfpu=neon",
218    ]
219
220    # Disable LTO in audio_processing_neon target due to compiler bug.
221    if (rtc_use_lto) {
222      cflags -= [
223        "-flto",
224        "-ffat-lto-objects",
225      ]
226    }
227
228    if (is_clang) {
229      # Suppress warnings from Chrome's Clang plugins.
230      # See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
231      configs -= [ "//build/config/clang:find_bad_constructs" ]
232    }
233  }
234}
235