Roll src/third_party/WebKit 3529d49:06e8485 (svn 202554:202555)
[chromium-blink-merge.git] / third_party / opus / BUILD.gn
blobcc3d3cd07cd86783aafb21e32335dcc2d75c08a0
1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
5 import("//build/config/arm.gni")
6 import("//testing/test.gni")
8 # If fixed point implementation shall be used (otherwise float).
9 use_opus_fixed_point = current_cpu == "arm" || current_cpu == "arm64"
11 # If ARM optimizations shall be used to accelerate performance.
12 use_opus_arm_optimization = current_cpu == "arm"
14 # If OPUS Run Time CPU Detections (RTCD) shall be used.
15 # Based on the conditions in celt/arm/armcpu.c:
16 # defined(_MSC_VER) || defined(__linux__).
17 use_opus_rtcd = current_cpu == "arm" && (is_win || is_android || is_linux)
19 config("opus_config") {
20   include_dirs = [ "src/include" ]
23 config("opus_test_config") {
24   include_dirs = [
25     "src/celt",
26     "src/silk",
27   ]
29   if (is_win) {
30     defines = [ "inline=__inline" ]
31   }
32   if (is_android) {
33     libs = [ "log" ]
34   }
35   if (is_clang) {
36     cflags = [ "-Wno-absolute-value" ]
37   }
40 if (use_opus_rtcd) {
41   action("convert_rtcd_assembler") {
42     script = "convert_rtcd_assembler.py"
43     outputs = [
44       "$target_gen_dir/celt_pitch_xcorr_arm_gnu.S",
45     ]
46     args = [
47       rebase_path("//third_party/opus/src/celt/arm/arm2gnu.pl", root_build_dir),
48       rebase_path("//third_party/opus/src/celt/arm/celt_pitch_xcorr_arm.s",
49                   root_build_dir),
50       rebase_path("$target_gen_dir/celt_pitch_xcorr_arm_gnu.S", root_build_dir),
51     ]
52   }
55 source_set("opus") {
56   gypi_values = exec_script("//build/gypi_to_gn.py",
57                             [ rebase_path("opus_srcs.gypi") ],
58                             "scope",
59                             [ "opus_srcs.gypi" ])
60   sources = gypi_values.opus_common_sources
62   defines = [
63     "OPUS_BUILD",
64     "OPUS_EXPORT=",
65   ]
67   include_dirs = [
68     "src/celt",
69     "src/silk",
70   ]
72   configs -= [ "//build/config/compiler:chromium_code" ]
73   configs += [ "//build/config/compiler:no_chromium_code" ]
74   public_configs = [ ":opus_config" ]
76   if (is_win) {
77     defines += [
78       "USE_ALLOCA",
79       "inline=__inline",
80     ]
82     cflags = [
83       "/wd4305",  # Disable truncation warning in celt/pitch.c .
84       "/wd4334",  # Disable 32-bit shift warning in src/opus_encoder.c .
85     ]
86   } else {
87     defines += [
88       "HAVE_LRINT",
89       "HAVE_LRINTF",
90       "VAR_ARRAYS",
91     ]
92   }
94   if (is_posix && !is_android) {
95     # Suppress a warning given by opus_decoder.c that tells us
96     # optimizations are turned off.
97     cflags = [ "-Wno-#pragma-messages" ]
98   }
100   if (!is_debug && is_posix &&
101       (current_cpu == "arm" || current_cpu == "arm64")) {
102     configs -= [ "//build/config/compiler:default_optimization" ]
103     configs += [ "//build/config/compiler:optimize_max" ]
104   }
106   if (use_opus_fixed_point) {
107     sources += gypi_values.opus_fixed_sources
109     defines += [ "FIXED_POINT" ]
111     include_dirs += [ "src/silk/fixed" ]
112   } else {
113     sources += gypi_values.opus_float_sources
115     include_dirs += [ "src/silk/float" ]
116   }
118   if (use_opus_arm_optimization) {
119     sources += [
120       "src/celt/arm/fixed_armv4.h",
121       "src/celt/arm/fixed_armv5e.h",
122       "src/celt/arm/kiss_fft_armv4.h",
123       "src/celt/arm/kiss_fft_armv5e.h",
124       "src/celt/pitch_arm.h",
125       "src/silk/arm/SigProc_FIX_armv4.h",
126       "src/silk/arm/SigProc_FIX_armv5e.h",
127       "src/silk/arm/macro_armv4.h",
128       "src/silk/arm/macro_armv5e.h",
129     ]
131     defines += [
132       "OPUS_ARM_ASM",
133       "OPUS_ARM_INLINE_ASM",
134       "OPUS_ARM_INLINE_EDSP",
135     ]
137     if (use_opus_rtcd) {
138       sources += [
139         "$target_gen_dir/celt_pitch_xcorr_arm_gnu.S",
140         "src/celt/arm/arm_celt_map.c",
141         "src/celt/arm/armcpu.c",
142         "src/celt/arm/armcpu.h",
143       ]
145       defines += [
146         "OPUS_ARM_MAY_HAVE_EDSP",
147         "OPUS_ARM_MAY_HAVE_MEDIA",
148         "OPUS_ARM_MAY_HAVE_NEON",
149         "OPUS_HAVE_RTCD",
150       ]
152       deps = [
153         ":convert_rtcd_assembler",
154       ]
155     }
156   }
159 executable("opus_compare") {
160   sources = [
161     "src/src/opus_compare.c",
162   ]
164   configs -= [ "//build/config/compiler:chromium_code" ]
165   configs += [
166     "//build/config/compiler:no_chromium_code",
167     ":opus_test_config",
168   ]
170   deps = [
171     ":opus",
172     "//build/config/sanitizers:deps",
173   ]
176 executable("opus_demo") {
177   sources = [
178     "src/src/opus_demo.c",
179   ]
181   configs -= [ "//build/config/compiler:chromium_code" ]
182   configs += [
183     "//build/config/compiler:no_chromium_code",
184     ":opus_test_config",
185   ]
187   deps = [
188     ":opus",
189     "//build/config/sanitizers:deps",
190   ]
193 test("test_opus_api") {
194   sources = [
195     "src/tests/test_opus_api.c",
196   ]
198   configs -= [ "//build/config/compiler:chromium_code" ]
199   configs += [
200     "//build/config/compiler:no_chromium_code",
201     ":opus_test_config",
202   ]
204   deps = [
205     ":opus",
206   ]
209 test("test_opus_encode") {
210   sources = [
211     "src/tests/test_opus_encode.c",
212   ]
214   configs -= [ "//build/config/compiler:chromium_code" ]
215   configs += [
216     "//build/config/compiler:no_chromium_code",
217     ":opus_test_config",
218   ]
220   deps = [
221     ":opus",
222   ]
225 test("test_opus_decode") {
226   sources = [
227     "src/tests/test_opus_decode.c",
228   ]
230   configs -= [ "//build/config/compiler:chromium_code" ]
231   configs += [
232     "//build/config/compiler:no_chromium_code",
233     ":opus_test_config",
234   ]
236   # test_opus_decode passes a null pointer to opus_decode() for an argument
237   # marked as requiring a non-null value by the nonnull function attribute,
238   # and expects opus_decode() to fail. Disable the -Wnonnull option to avoid
239   # a compilation error if -Werror is specified.
240   if (is_posix) {
241     cflags = [ "-Wno-nonnull" ]
242   }
244   deps = [
245     ":opus",
246   ]
249 test("test_opus_padding") {
250   sources = [
251     "src/tests/test_opus_padding.c",
252   ]
254   configs -= [ "//build/config/compiler:chromium_code" ]
255   configs += [
256     "//build/config/compiler:no_chromium_code",
257     ":opus_test_config",
258   ]
260   deps = [
261     ":opus",
262   ]