blob: 68c8f453ee30c727f7737abf56535955bde60dcd [file] [log] [blame]
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +00001# 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
kjellander@webrtc.org7497fa72014-06-28 18:05:22 +00009# TODO(kjellander): Rebase this to base.gyp changes after r6438.
10
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +000011import("//build/config/crypto.gni")
henrike@webrtc.orgfb1eb432014-08-15 14:44:13 +000012import("//build/config/ui.gni")
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +000013import("../build/webrtc.gni")
14
15config("webrtc_base_config") {
16 include_dirs = [
17 "//third_party/jsoncpp/overrides/include",
18 "//third_party/jsoncpp/source/include",
19 ]
20
21 defines = [
22 "FEATURE_ENABLE_SSL",
23 "GTEST_RELATIVE_PATH",
24 ]
25
26 # TODO(henrike): issue 3307, make webrtc_base build without disabling
27 # these flags.
28 cflags_cc = [ "-Wno-non-virtual-dtor" ]
29}
30
31config("webrtc_base_chromium_config") {
32 defines = [
33 "NO_MAIN_THREAD_WRAPPING",
34 "SSL_USE_NSS",
35 ]
36}
37
38config("openssl_config") {
39 defines = [
40 "SSL_USE_OPENSSL",
41 "HAVE_OPENSSL_SSL_H",
42 ]
43}
44
45config("no_openssl_config") {
46 defines = [
47 "SSL_USE_NSS",
48 "HAVE_NSS_SSL_H",
49 "SSL_USE_NSS_RNG",
50 ]
51}
52
53config("android_config") {
54 defines = [ "HAVE_OPENSSL_SSL_H" ]
55}
56
57config("no_android_config") {
58 defines = [
59 "HAVE_NSS_SSL_H",
60 "SSL_USE_NSS_RNG",
61 ]
62}
63
64config("ios_config") {
65 ldflags = [
66 #"Foundation.framework", # Already included in //build/config:default_libs.
67 "Security.framework",
68 "SystemConfiguration.framework",
69 #"UIKit.framework", # Already included in //build/config:default_libs.
70 ]
71}
72
73config("mac_config") {
74 ldflags = [
75 "Cocoa.framework",
76 #"Foundation.framework", # Already included in //build/config:default_libs.
77 #"IOKit.framework", # Already included in //build/config:default_libs.
78 #"Security.framework", # Already included in //build/config:default_libs.
79 "SystemConfiguration.framework",
80 ]
81}
82
83config("mac_x86_config") {
84 libs = [
85 #"Carbon.framework", # Already included in //build/config:default_libs.
86 ]
87}
88
kjellander@webrtc.org4a251992014-08-18 17:56:28 +000089if (is_linux && !build_with_chromium) {
90 # Provides the same functionality as the //crypto:platform target, which
91 # WebRTC cannot use as we don't sync src/crypto from Chromium.
92 group("linux_system_ssl") {
93 if (use_openssl) {
94 deps = [ "//third_party/boringssl" ]
95 } else {
96 deps = [ "//net/third_party/nss/ssl:libssl" ]
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +000097
kjellander@webrtc.org4a251992014-08-18 17:56:28 +000098 direct_dependent_configs = [
99 "//net/third_party/nss/ssl:ssl_config",
100 "//third_party/nss:system_nss_no_ssl_config",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000101 ]
102 }
103 }
104}
105
kjellander@webrtc.org4a251992014-08-18 17:56:28 +0000106
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000107static_library("webrtc_base") {
108 cflags = []
109 cflags_cc = []
kjellander@webrtc.org7497fa72014-06-28 18:05:22 +0000110 deps= []
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000111
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000112 configs += [
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000113 "..:common_config",
114 ":webrtc_base_config",
115 ]
116
117 direct_dependent_configs = [
118 "..:common_inherited_config",
119 ":webrtc_base_config",
120 ]
121
122 defines = [
123 "LOGGING=1",
124 "USE_WEBRTC_DEV_BRANCH",
125 ]
126
127 sources = [
128 "asyncfile.cc",
129 "asyncfile.h",
130 "asynchttprequest.cc",
131 "asynchttprequest.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000132 "asyncpacketsocket.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000133 "asyncsocket.cc",
134 "asyncsocket.h",
135 "asynctcpsocket.cc",
136 "asynctcpsocket.h",
137 "asyncudpsocket.cc",
138 "asyncudpsocket.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000139 "autodetectproxy.cc",
140 "autodetectproxy.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000141 "base64.cc",
142 "base64.h",
143 "basicdefs.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000144 "bytebuffer.cc",
145 "bytebuffer.h",
146 "byteorder.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000147 "checks.cc",
148 "checks.h",
149 "common.cc",
150 "common.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000151 "cpumonitor.cc",
152 "cpumonitor.h",
153 "crc32.cc",
154 "crc32.h",
155 "criticalsection.h",
156 "cryptstring.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000157 "diskcache.cc",
158 "diskcache.h",
159 "event.cc",
160 "event.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000161 "fileutils.cc",
162 "fileutils.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000163 "firewallsocketserver.cc",
164 "firewallsocketserver.h",
165 "flags.cc",
166 "flags.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000167 "gunit_prod.h",
168 "helpers.cc",
169 "helpers.h",
170 "httpbase.cc",
171 "httpbase.h",
172 "httpclient.cc",
173 "httpclient.h",
174 "httpcommon-inl.h",
175 "httpcommon.cc",
176 "httpcommon.h",
177 "httprequest.cc",
178 "httprequest.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000179 "iosfilesystem.mm",
180 "ipaddress.cc",
181 "ipaddress.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000182 "linked_ptr.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000183 "mathutils.h",
184 "md5.cc",
185 "md5.h",
186 "md5digest.h",
187 "messagedigest.cc",
188 "messagedigest.h",
189 "messagehandler.cc",
190 "messagehandler.h",
191 "messagequeue.cc",
192 "messagequeue.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000193 "nethelpers.cc",
194 "nethelpers.h",
195 "network.cc",
196 "network.h",
197 "nssidentity.cc",
198 "nssidentity.h",
199 "nssstreamadapter.cc",
200 "nssstreamadapter.h",
201 "nullsocketserver.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000202 "pathutils.cc",
203 "pathutils.h",
204 "physicalsocketserver.cc",
205 "physicalsocketserver.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000206 "proxydetect.cc",
207 "proxydetect.h",
208 "proxyinfo.cc",
209 "proxyinfo.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000210 "ratelimiter.cc",
211 "ratelimiter.h",
212 "ratetracker.cc",
213 "ratetracker.h",
kjellander@webrtc.org7497fa72014-06-28 18:05:22 +0000214 "safe_conversions.h",
215 "safe_conversions_impl.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000216 "scoped_autorelease_pool.h",
217 "scoped_autorelease_pool.mm",
218 "scoped_ptr.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000219 "sha1.cc",
220 "sha1.h",
221 "sha1digest.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000222 "signalthread.cc",
223 "signalthread.h",
224 "sigslot.h",
225 "sigslotrepeater.h",
226 "socket.h",
227 "socketadapters.cc",
228 "socketadapters.h",
229 "socketaddress.cc",
230 "socketaddress.h",
231 "socketaddresspair.cc",
232 "socketaddresspair.h",
233 "socketfactory.h",
234 "socketpool.cc",
235 "socketpool.h",
236 "socketserver.h",
237 "socketstream.cc",
238 "socketstream.h",
239 "ssladapter.cc",
240 "ssladapter.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000241 "sslfingerprint.cc",
242 "sslfingerprint.h",
243 "sslidentity.cc",
244 "sslidentity.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000245 "sslsocketfactory.cc",
246 "sslsocketfactory.h",
247 "sslstreamadapter.cc",
248 "sslstreamadapter.h",
249 "sslstreamadapterhelper.cc",
250 "sslstreamadapterhelper.h",
251 "stream.cc",
252 "stream.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000253 "stringencode.cc",
254 "stringencode.h",
255 "stringutils.cc",
256 "stringutils.h",
257 "systeminfo.cc",
258 "systeminfo.h",
259 "task.cc",
260 "task.h",
261 "taskparent.cc",
262 "taskparent.h",
263 "taskrunner.cc",
264 "taskrunner.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000265 "thread.cc",
266 "thread.h",
267 "timeutils.cc",
268 "timeutils.h",
269 "timing.cc",
270 "timing.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000271 "urlencode.cc",
272 "urlencode.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000273 "worker.cc",
274 "worker.h",
275 ]
276
kjellander@webrtc.org7497fa72014-06-28 18:05:22 +0000277 if (is_posix) {
278 sources += [
279 "unixfilesystem.cc",
280 "unixfilesystem.h",
281 ]
282 }
283
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000284 if (build_with_chromium) {
285 sources += [
286 "../overrides/webrtc/base/basictypes.h",
287 "../overrides/webrtc/base/constructormagic.h",
288 "../overrides/webrtc/base/logging.cc",
289 "../overrides/webrtc/base/logging.h",
290 ]
kjellander@webrtc.org7497fa72014-06-28 18:05:22 +0000291
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000292 if (is_win) {
293 sources += [ "../overrides/webrtc/base/win32socketinit.cc" ]
294 }
kjellander@webrtc.org7497fa72014-06-28 18:05:22 +0000295
296 include_dirs = [
297 "../overrides",
henrike@webrtc.org6ac22e62014-08-11 21:06:30 +0000298 "../../boringssl/src/include",
kjellander@webrtc.org7497fa72014-06-28 18:05:22 +0000299 ]
300
301 direct_dependent_configs += [ ":webrtc_base_chromium_config" ]
302 } else {
303 sources += [
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000304 "asyncinvoker.cc",
305 "asyncinvoker.h",
306 "asyncinvoker-inl.h",
307 "asyncresolverinterface.h",
308 "atomicops.h",
309 "bandwidthsmoother.cc",
310 "bandwidthsmoother.h",
311 "basictypes.h",
312 "bind.h",
313 "bind.h.pump",
314 "buffer.h",
315 "callback.h",
316 "callback.h.pump",
317 "constructormagic.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000318 "filelock.cc",
319 "filelock.h",
320 "fileutils_mock.h",
321 "genericslot.h",
322 "genericslot.h.pump",
323 "httpserver.cc",
324 "httpserver.h",
325 "json.cc",
326 "json.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000327 "logging.cc",
328 "logging.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000329 "mathutils.h",
330 "multipart.cc",
331 "multipart.h",
332 "natserver.cc",
333 "natserver.h",
334 "natsocketfactory.cc",
335 "natsocketfactory.h",
336 "nattypes.cc",
337 "nattypes.h",
338 "openssl.h",
339 "optionsfile.cc",
340 "optionsfile.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000341 "profiler.cc",
342 "profiler.h",
343 "proxyserver.cc",
344 "proxyserver.h",
345 "refcount.h",
346 "referencecountedsingletonfactory.h",
347 "rollingaccumulator.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000348 "scopedptrcollection.h",
349 "scoped_ref_ptr.h",
350 "sec_buffer.h",
351 "sharedexclusivelock.cc",
352 "sharedexclusivelock.h",
353 "sslconfig.h",
354 "sslroots.h",
355 "stringdigest.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000356 "testclient.cc",
357 "testclient.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000358 "transformadapter.cc",
359 "transformadapter.h",
360 "versionparsing.cc",
361 "versionparsing.h",
362 "virtualsocketserver.cc",
363 "virtualsocketserver.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000364 "window.h",
365 "windowpickerfactory.h",
366 "windowpicker.h",
367 ]
368
kjellander@webrtc.org7497fa72014-06-28 18:05:22 +0000369 if (is_posix) {
370 sources += [
371 "latebindingsymboltable.cc",
372 "latebindingsymboltable.cc.def",
373 "latebindingsymboltable.h",
374 "latebindingsymboltable.h.def",
375 "posix.cc",
376 "posix.h",
377 ]
378 }
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000379
kjellander@webrtc.org7497fa72014-06-28 18:05:22 +0000380 if (is_linux) {
381 sources += [
382 "dbus.cc",
383 "dbus.h",
384 "libdbusglibsymboltable.cc",
385 "libdbusglibsymboltable.h",
386 "linuxfdwalk.c",
387 "linuxfdwalk.h",
henrike@webrtc.orgfb1eb432014-08-15 14:44:13 +0000388 ]
389 }
390
391 if (use_x11) {
392 sources += [
393 "x11windowpicker.cc",
394 "x11windowpicker.h",
kjellander@webrtc.org7497fa72014-06-28 18:05:22 +0000395 ]
396 }
397
398 if (is_mac) {
399 sources += [
400 "macasyncsocket.cc",
401 "macasyncsocket.h",
402 "maccocoasocketserver.h",
403 "maccocoasocketserver.mm",
404 "macsocketserver.cc",
405 "macsocketserver.h",
406 "macwindowpicker.cc",
407 "macwindowpicker.h",
408 ]
409 }
410
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000411 if (is_win) {
412 sources += [
413 "diskcache_win32.cc",
414 "diskcache_win32.h",
kjellander@webrtc.org7497fa72014-06-28 18:05:22 +0000415 "win32regkey.cc",
416 "win32regkey.h",
417 "win32socketinit.cc",
418 "win32socketinit.h",
419 "win32socketserver.cc",
420 "win32socketserver.h",
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000421 ]
422 }
423
kjellander@webrtc.org7497fa72014-06-28 18:05:22 +0000424 deps += [ "//third_party/jsoncpp" ]
425 } # !build_with_chromium
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000426
kjellander@webrtc.org62711f82014-06-29 13:37:08 +0000427 # TODO(henrike): issue 3307, make webrtc_base build with the Chromium default
428 # compiler settings.
429 configs -= [ "//build/config/compiler:chromium_code" ]
430 configs += [ "//build/config/compiler:no_chromium_code" ]
431 cflags += [ "-Wno-uninitialized" ]
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000432 cflags_cc += [ "-Wno-non-virtual-dtor" ]
433
434 if (use_openssl) {
435 direct_dependent_configs += [ ":openssl_config" ]
436
henrike@webrtc.org6ac22e62014-08-11 21:06:30 +0000437 deps += [ "//third_party/boringssl" ]
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000438 } else {
439 direct_dependent_configs += [ ":no_openssl_config" ]
440 }
441
442 if (is_android) {
kjellander@webrtc.org7497fa72014-06-28 18:05:22 +0000443 sources += [
444 "ifaddrs-android.cc",
445 "ifaddrs-android.h",
446 ]
447
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000448 direct_dependent_configs += [ ":android_config" ]
449
450 libs = [
451 "log",
452 "GLESv2"
453 ]
454 } else {
455 direct_dependent_configs += [ ":no_android_config" ]
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000456 }
457
458 if (is_ios) {
459 all_dependent_configs += [ ":ios_config" ]
460
kjellander@webrtc.org7497fa72014-06-28 18:05:22 +0000461 deps += [ "//net/third_party/nss/ssl:libssl" ]
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000462 }
463
464 if (is_linux) {
465 libs = [
466 "crypto",
467 "dl",
468 "rt",
469 "Xext",
470 "X11",
471 "Xcomposite",
472 "Xrender",
473 ]
474 configs += [ "//third_party/nss:system_nss_no_ssl_config" ]
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000475 }
476
477 if (is_mac) {
kjellander@webrtc.org7497fa72014-06-28 18:05:22 +0000478 sources += [
479 "maccocoathreadhelper.h",
480 "maccocoathreadhelper.mm",
481 "macconversion.cc",
482 "macconversion.h",
483 "macutils.cc",
484 "macutils.h",
485 ]
486
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000487 all_dependent_configs = [ ":mac_config" ]
488
489 libs = [
490 "crypto", # $(SDKROOT)/usr/lib/libcrypto.dylib
491 "ssl", # $(SDKROOT)/usr/lib/libssl.dylib
492 ]
493 if (cpu_arch == "x86") {
494 all_dependent_configs += [ ":mac_x86_config" ]
495 }
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000496 }
497
498 if (is_win) {
kjellander@webrtc.org7497fa72014-06-28 18:05:22 +0000499 sources += [
500 "schanneladapter.cc",
501 "schanneladapter.h",
502 "win32.cc",
503 "win32.h",
504 "win32filesystem.cc",
505 "win32filesystem.h",
506 "win32securityerrors.cc",
507 "win32window.cc",
508 "win32window.h",
509 "win32windowpicker.cc",
510 "win32windowpicker.h",
511 "winfirewall.cc",
512 "winfirewall.h",
513 "winping.cc",
514 "winping.h",
515 ]
516
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000517 libs = [
518 "crypt32.lib",
519 "iphlpapi.lib",
520 "secur32.lib",
521 ]
522
523 cflags += [
524 # Suppress warnings about WIN32_LEAN_AND_MEAN.
525 "/wd4005",
526 "/wd4703",
527 ]
528
529 defines += [ "_CRT_NONSTDC_NO_DEPRECATE" ]
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000530 }
531
kjellander@webrtc.org7497fa72014-06-28 18:05:22 +0000532 if (is_posix && is_debug) {
533 # Chromium's build/common.gypi defines this for all posix
534 # _except_ for ios & mac. We want it there as well, e.g.
535 # because ASSERT and friends trigger off of it.
536 defines += [ "_DEBUG" ]
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000537 }
538
539 if (is_ios || (is_mac && cpu_arch != "x86")) {
540 defines += [ "CARBON_DEPRECATED=YES" ]
541 }
542
kjellander@webrtc.org7497fa72014-06-28 18:05:22 +0000543 if (!is_ios && is_posix) {
544 sources += [
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000545 "openssl.h",
546 "openssladapter.cc",
547 "openssladapter.h",
548 "openssldigest.cc",
549 "openssldigest.h",
550 "opensslidentity.cc",
551 "opensslidentity.h",
552 "opensslstreamadapter.cc",
553 "opensslstreamadapter.h",
554 ]
555 }
556
kjellander@webrtc.org7497fa72014-06-28 18:05:22 +0000557 if (is_linux || is_android) {
558 sources += [
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000559 "linux.cc",
560 "linux.h",
561 ]
562 }
563
564 if (is_mac || is_ios || is_win) {
565 deps += [
566 "//net/third_party/nss/ssl:libssl",
567 "//third_party/nss:nspr",
568 "//third_party/nss:nss",
569 ]
570 }
571
572 if (is_posix && !is_mac && !is_ios && !is_android) {
kjellander@webrtc.org4a251992014-08-18 17:56:28 +0000573 if (build_with_chromium) {
574 deps += [ "//crypto:platform" ]
575 } else {
576 deps += [ ":linux_system_ssl" ]
577 }
kjellander@webrtc.org851a09e2014-06-17 08:54:03 +0000578 }
579}