157be6f9af92c00cd119d445282fda7071432a36
[platform/framework/web/crosswalk.git] / src / third_party / webrtc / BUILD.gn
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
9 # TODO(kjellander): Rebase this to webrtc/build/common.gypi changes after r6330.
10
11 import("//build/config/arm.gni")
12 import("//build/config/crypto.gni")
13 import("//build/config/linux/pkg_config.gni")
14 import("build/webrtc.gni")
15
16 # Contains the defines and includes in common.gypi that are duplicated both as
17 # target_defaults and direct_dependent_settings.
18 config("common_inherited_config") {
19   defines = []
20   if (build_with_mozilla) {
21     defines += [ "WEBRTC_MOZILLA_BUILD" ]
22   }
23   if (build_with_chromium) {
24     defines = [
25       "WEBRTC_CHROMIUM_BUILD",
26     ]
27     include_dirs = [
28       # overrides must be included first as that is the mechanism for
29       # selecting the override headers in Chromium.
30       "overrides",
31       # Allow includes to be prefixed with webrtc/ in case it is not an
32       # immediate subdirectory of the top-level.
33       "..",
34     ]
35   }
36   if (is_posix) {
37     defines += [ "WEBRTC_POSIX" ]
38   }
39   if (is_ios) {
40     defines += [
41       "WEBRTC_MAC",
42       "WEBRTC_IOS",
43     ]
44   }
45   if (is_linux) {
46     defines += [ "WEBRTC_LINUX" ]
47   }
48   if (is_mac) {
49     defines += [ "WEBRTC_MAC" ]
50   }
51   if (is_win) {
52     defines += [ "WEBRTC_WIN" ]
53   }
54   if (is_android) {
55     defines += [
56       "WEBRTC_LINUX",
57       "WEBRTC_ANDROID",
58     ]
59     if (rtc_enable_android_opensl) {
60       defines += [ "WEBRTC_ANDROID_OPENSLES" ]
61     }
62   }
63 }
64
65 if (rtc_have_dbus_glib) {
66   pkg_config("dbus-glib") {
67     packages = [ "dbus-glib-1" ]
68   }
69 }
70
71 config("common_config") {
72   cflags = []
73   cflags_cc = []
74   if (rtc_restrict_logging) {
75     defines = [ "WEBRTC_RESTRICT_LOGGING" ]
76   }
77
78   if (rtc_have_dbus_glib) {
79     defines += [ "HAVE_DBUS_GLIB" ]
80     # TODO(kjellander): Investigate this, it seems like include <dbus/dbus.h>
81     # is still not found even if the execution of
82     # build/config/linux/pkg-config.py dbus-glib-1 returns correct include
83     # dirs on Linux.
84     all_dependent_configs = [ "dbus-glib" ]
85   }
86
87   if (rtc_enable_video) {
88     defines += [ "WEBRTC_MODULE_UTILITY_VIDEO" ]
89   }
90
91   if (build_with_chromium) {
92     defines += [ "LOGGING_INSIDE_WEBRTC" ]
93   } else {
94     if (is_posix) {
95       # -Wextra is currently disabled in Chromium"s common.gypi. Enable
96       # for targets that can handle it. For Android/arm64 right now
97       # there will be an "enumeral and non-enumeral type in conditional
98       # expression" warning in android_tools/ndk_experimental"s version
99       # of stlport.
100       # See: https://code.google.com/p/chromium/issues/detail?id=379699
101       if (cpu_arch != "arm64" || !is_android) {
102         cflags = [
103           "-Wextra",
104           # We need to repeat some flags from Chromium"s common.gypi
105           # here that get overridden by -Wextra.
106           "-Wno-unused-parameter",
107           "-Wno-missing-field-initializers",
108           "-Wno-strict-overflow",
109         ]
110         cflags_cc = [
111           "-Wnon-virtual-dtor",
112           # This is enabled for clang; enable for gcc as well.
113           "-Woverloaded-virtual",
114         ]
115       }
116     }
117
118     if (is_clang) {
119       cflags += [ "-Wthread-safety" ]
120     }
121   }
122
123   if (cpu_arch == "arm64") {
124     defines += [ "WEBRTC_ARCH_ARM" ]
125   }
126
127   if (cpu_arch == "arm") {
128     defines += [ "WEBRTC_ARCH_ARM" ]
129     if (arm_version == 7) {
130       defines += [ "WEBRTC_ARCH_ARM_V7" ]
131       if (arm_use_neon) {
132         defines += [ "WEBRTC_ARCH_ARM_NEON" ]
133       } else {
134         defines += [ "WEBRTC_DETECT_ARM_NEON" ]
135       }
136     }
137   }
138
139   if (cpu_arch == "mipsel") {
140     defines += [ "MIPS32_LE" ]
141     if (mips_fpu) {
142       defines += [ "MIPS_FPU_LE" ]
143       cflags += [ "-mhard-float" ]
144     } else {
145       cflags += [ "-msoft-float" ]
146     }
147     if (mips_arch_variant == "mips32r2") {
148       defines += [ "MIPS32_R2_LE" ]
149       cflags += [ "-mips32r2" ]
150       cflags_cc += [ "-mips32r2" ]
151     }
152     if (mips_dsp_rev == 1) {
153       defines += [ "MIPS_DSP_R1_LE" ]
154       cflags += [ "-mdsp" ]
155       cflags_cc += [ "-mdsp" ]
156     } else if (mips_dsp_rev == 2) {
157       defines += [
158         "MIPS_DSP_R1_LE",
159         "MIPS_DSP_R2_LE",
160       ]
161       cflags += [ "-mdspr2" ]
162       cflags_cc += [ "-mdspr2" ]
163     }
164   }
165
166   # TODO(kjellander): Handle warnings on Windows where WebRTC differ from the
167   # default warnings set in build/config/compiler/BUILD.gn.
168
169   if (is_android && is_clang) {
170     # The Android NDK doesn"t provide optimized versions of these
171     # functions. Ensure they are disabled for all compilers.
172     cflags += [
173       "-fno-builtin-cos",
174       "-fno-builtin-sin",
175       "-fno-builtin-cosf",
176       "-fno-builtin-sinf",
177     ]
178   }
179 }
180
181 static_library("webrtc") {
182   sources = [
183     "call.h",
184     "config.h",
185     "experiments.h",
186     "frame_callback.h",
187     "transport.h",
188   ]
189
190   configs += [ ":common_config" ]
191   public_configs = [ ":common_inherited_config"]
192
193   deps = [
194     ":webrtc_common",
195     "base:webrtc_base",
196     "common_audio",
197     "common_video",
198     "modules/audio_coding",
199     "modules/audio_conference_mixer",
200     "modules/audio_device",
201     "modules/audio_processing",
202     "modules/bitrate_controller",
203     "modules/desktop_capture",
204     "modules/media_file",
205     "modules/rtp_rtcp",
206     "modules/utility",
207     "modules/video_capture",
208     "modules/video_coding",
209     "modules/video_processing",
210     "modules/video_render",
211     "system_wrappers",
212     "tools",
213     "video",
214     "video_engine",
215     "voice_engine",
216   ]
217 }
218
219 if (!build_with_chromium) {
220   executable("webrtc_tests") {
221     testonly = true
222     deps = [
223       ":webrtc",
224       "modules/video_render:video_render_internal_impl",
225       "modules/video_capture:video_capture_internal_impl",
226       "test",
227     ]
228   }
229 }
230
231 source_set("webrtc_common") {
232   sources = [
233     "config.h",
234     "config.cc",
235   ]
236
237   if (is_clang) {
238     # Suppress warnings from Chrome's Clang plugins.
239     # See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
240     configs -= [ "//build/config/clang:find_bad_constructs" ]
241   }
242
243   configs += [ ":common_config" ]
244   public_configs = [ ":common_inherited_config" ]
245 }