blob: 411809014855654e8ed2be92f4f1bd7c7e394271 [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
9import("//build/config/crypto.gni")
10import("../build/webrtc.gni")
11
12config("webrtc_base_config") {
13 include_dirs = [
14 "//third_party/jsoncpp/overrides/include",
15 "//third_party/jsoncpp/source/include",
16 ]
17
18 defines = [
19 "FEATURE_ENABLE_SSL",
20 "GTEST_RELATIVE_PATH",
21 ]
22
23 # TODO(henrike): issue 3307, make webrtc_base build without disabling
24 # these flags.
25 cflags_cc = [ "-Wno-non-virtual-dtor" ]
26}
27
28config("webrtc_base_chromium_config") {
29 defines = [
30 "NO_MAIN_THREAD_WRAPPING",
31 "SSL_USE_NSS",
32 ]
33}
34
35config("openssl_config") {
36 defines = [
37 "SSL_USE_OPENSSL",
38 "HAVE_OPENSSL_SSL_H",
39 ]
40}
41
42config("no_openssl_config") {
43 defines = [
44 "SSL_USE_NSS",
45 "HAVE_NSS_SSL_H",
46 "SSL_USE_NSS_RNG",
47 ]
48}
49
50config("android_config") {
51 defines = [ "HAVE_OPENSSL_SSL_H" ]
52}
53
54config("no_android_config") {
55 defines = [
56 "HAVE_NSS_SSL_H",
57 "SSL_USE_NSS_RNG",
58 ]
59}
60
61config("ios_config") {
62 ldflags = [
63 #"Foundation.framework", # Already included in //build/config:default_libs.
64 "Security.framework",
65 "SystemConfiguration.framework",
66 #"UIKit.framework", # Already included in //build/config:default_libs.
67 ]
68}
69
70config("mac_config") {
71 ldflags = [
72 "Cocoa.framework",
73 #"Foundation.framework", # Already included in //build/config:default_libs.
74 #"IOKit.framework", # Already included in //build/config:default_libs.
75 #"Security.framework", # Already included in //build/config:default_libs.
76 "SystemConfiguration.framework",
77 ]
78}
79
80config("mac_x86_config") {
81 libs = [
82 #"Carbon.framework", # Already included in //build/config:default_libs.
83 ]
84}
85
86config("linux_system_ssl_config") {
87 visibility = ":*" # Only targets in this file can depend on this.
88
89 # TODO(kjellander): Find out how to convert GYP include_dirs+ (i.e. insert
90 # first in the include path?).
91 include_dirs = [ "//net/third_party/nss/ssl" ]
92
93 configs = [ "//third_party/nss:system_nss_no_ssl_config" ]
94}
95
96# Provides the same functionality as the build/linux/system.gyp:ssl GYP target.
97# This cannot be in build/linux/BUILD.gn since targets in build/ are not allowed
98# to depend on targets outside of it. This could be replaced by the Chromium
99# //crypto:platform target, but as WebRTC currently don't sync src/crypto from
100# Chromium, it is not possible today.
101config("linux_system_ssl") {
102 if (use_openssl) {
103 deps = [ "//third_party/openssl" ]
104 } else {
105 deps = [ "//net/third_party/nss/ssl:libssl" ]
106
107 direct_dependent_configs = [
108 ":linux_system_ssl_config",
109 ]
110
111 if (is_clang) {
112 cflags = [
113 # There is a broken header guard in /usr/include/nss/secmod.h:
114 # https://bugzilla.mozilla.org/show_bug.cgi?id=884072
115 "-Wno-header-guard",
116 ]
117 }
118 }
119}
120
121static_library("webrtc_base") {
122 cflags = []
123 cflags_cc = []
124
125 configs -= [ "//build/config/compiler:chromium_code" ]
126 configs += [ "//build/config/compiler:no_chromium_code" ]
127 configs += [
128 "..:common_inherited_config",
129 "..:common_config",
130 ":webrtc_base_config",
131 ]
132
133 direct_dependent_configs = [
134 "..:common_inherited_config",
135 ":webrtc_base_config",
136 ]
137
138 defines = [
139 "LOGGING=1",
140 "USE_WEBRTC_DEV_BRANCH",
141 ]
142
143 sources = [
144 "asyncfile.cc",
145 "asyncfile.h",
146 "asynchttprequest.cc",
147 "asynchttprequest.h",
148 "asyncinvoker.cc",
149 "asyncinvoker.h",
150 "asyncinvoker-inl.h",
151 "asyncpacketsocket.h",
152 "asyncresolverinterface.h",
153 "asyncsocket.cc",
154 "asyncsocket.h",
155 "asynctcpsocket.cc",
156 "asynctcpsocket.h",
157 "asyncudpsocket.cc",
158 "asyncudpsocket.h",
159 "atomicops.h",
160 "autodetectproxy.cc",
161 "autodetectproxy.h",
162 "bandwidthsmoother.cc",
163 "bandwidthsmoother.h",
164 "base64.cc",
165 "base64.h",
166 "basicdefs.h",
167 "basictypes.h",
168 "bind.h",
169 "bind.h.pump",
170 "buffer.h",
171 "bytebuffer.cc",
172 "bytebuffer.h",
173 "byteorder.h",
174 "callback.h",
175 "callback.h.pump",
176 "checks.cc",
177 "checks.h",
178 "common.cc",
179 "common.h",
180 "constructormagic.h",
181 "cpumonitor.cc",
182 "cpumonitor.h",
183 "crc32.cc",
184 "crc32.h",
185 "criticalsection.h",
186 "cryptstring.h",
187 "dbus.cc",
188 "dbus.h",
189 "diskcache.cc",
190 "diskcache.h",
191 "event.cc",
192 "event.h",
193 "filelock.cc",
194 "filelock.h",
195 "fileutils.cc",
196 "fileutils.h",
197 "fileutils_mock.h",
198 "firewallsocketserver.cc",
199 "firewallsocketserver.h",
200 "flags.cc",
201 "flags.h",
202 "genericslot.h",
203 "genericslot.h.pump",
204 "gunit_prod.h",
205 "helpers.cc",
206 "helpers.h",
207 "httpbase.cc",
208 "httpbase.h",
209 "httpclient.cc",
210 "httpclient.h",
211 "httpcommon-inl.h",
212 "httpcommon.cc",
213 "httpcommon.h",
214 "httprequest.cc",
215 "httprequest.h",
216 "httpserver.cc",
217 "httpserver.h",
218 "ifaddrs-android.cc",
219 "ifaddrs-android.h",
220 "iosfilesystem.mm",
221 "ipaddress.cc",
222 "ipaddress.h",
223 "json.cc",
224 "json.h",
225 "latebindingsymboltable.cc",
226 "latebindingsymboltable.cc.def",
227 "latebindingsymboltable.h",
228 "latebindingsymboltable.h.def",
229 "libdbusglibsymboltable.cc",
230 "libdbusglibsymboltable.h",
231 "linux.cc",
232 "linux.h",
233 "linuxfdwalk.c",
234 "linuxfdwalk.h",
235 "linuxwindowpicker.cc",
236 "linuxwindowpicker.h",
237 "linked_ptr.h",
238 "logging.cc",
239 "logging.h",
240 "macasyncsocket.cc",
241 "macasyncsocket.h",
242 "maccocoasocketserver.h",
243 "maccocoasocketserver.mm",
244 "maccocoathreadhelper.h",
245 "maccocoathreadhelper.mm",
246 "macconversion.cc",
247 "macconversion.h",
248 "macsocketserver.cc",
249 "macsocketserver.h",
250 "macutils.cc",
251 "macutils.h",
252 "macwindowpicker.cc",
253 "macwindowpicker.h",
254 "mathutils.h",
255 "md5.cc",
256 "md5.h",
257 "md5digest.h",
258 "messagedigest.cc",
259 "messagedigest.h",
260 "messagehandler.cc",
261 "messagehandler.h",
262 "messagequeue.cc",
263 "messagequeue.h",
264 "multipart.cc",
265 "multipart.h",
266 "natserver.cc",
267 "natserver.h",
268 "natsocketfactory.cc",
269 "natsocketfactory.h",
270 "nattypes.cc",
271 "nattypes.h",
272 "nethelpers.cc",
273 "nethelpers.h",
274 "network.cc",
275 "network.h",
276 "nssidentity.cc",
277 "nssidentity.h",
278 "nssstreamadapter.cc",
279 "nssstreamadapter.h",
280 "nullsocketserver.h",
281 "openssl.h",
282 "openssladapter.cc",
283 "openssladapter.h",
284 "openssldigest.cc",
285 "openssldigest.h",
286 "opensslidentity.cc",
287 "opensslidentity.h",
288 "opensslstreamadapter.cc",
289 "opensslstreamadapter.h",
290 "optionsfile.cc",
291 "optionsfile.h",
292 "pathutils.cc",
293 "pathutils.h",
294 "physicalsocketserver.cc",
295 "physicalsocketserver.h",
296 "posix.cc",
297 "posix.h",
298 "profiler.cc",
299 "profiler.h",
300 "proxydetect.cc",
301 "proxydetect.h",
302 "proxyinfo.cc",
303 "proxyinfo.h",
304 "proxyserver.cc",
305 "proxyserver.h",
306 "ratelimiter.cc",
307 "ratelimiter.h",
308 "ratetracker.cc",
309 "ratetracker.h",
310 "refcount.h",
311 "referencecountedsingletonfactory.h",
312 "rollingaccumulator.h",
313 "schanneladapter.cc",
314 "schanneladapter.h",
315 "scoped_autorelease_pool.h",
316 "scoped_autorelease_pool.mm",
317 "scoped_ptr.h",
318 "scoped_ref_ptr.h",
319 "scopedptrcollection.h",
320 "sec_buffer.h",
321 "sha1.cc",
322 "sha1.h",
323 "sha1digest.h",
324 "sharedexclusivelock.cc",
325 "sharedexclusivelock.h",
326 "signalthread.cc",
327 "signalthread.h",
328 "sigslot.h",
329 "sigslotrepeater.h",
330 "socket.h",
331 "socketadapters.cc",
332 "socketadapters.h",
333 "socketaddress.cc",
334 "socketaddress.h",
335 "socketaddresspair.cc",
336 "socketaddresspair.h",
337 "socketfactory.h",
338 "socketpool.cc",
339 "socketpool.h",
340 "socketserver.h",
341 "socketstream.cc",
342 "socketstream.h",
343 "ssladapter.cc",
344 "ssladapter.h",
345 "sslconfig.h",
346 "sslfingerprint.cc",
347 "sslfingerprint.h",
348 "sslidentity.cc",
349 "sslidentity.h",
350 "sslroots.h",
351 "sslsocketfactory.cc",
352 "sslsocketfactory.h",
353 "sslstreamadapter.cc",
354 "sslstreamadapter.h",
355 "sslstreamadapterhelper.cc",
356 "sslstreamadapterhelper.h",
357 "stream.cc",
358 "stream.h",
359 "stringdigest.h",
360 "stringencode.cc",
361 "stringencode.h",
362 "stringutils.cc",
363 "stringutils.h",
364 "systeminfo.cc",
365 "systeminfo.h",
366 "task.cc",
367 "task.h",
368 "taskparent.cc",
369 "taskparent.h",
370 "taskrunner.cc",
371 "taskrunner.h",
372 "testclient.cc",
373 "testclient.h",
374 "thread.cc",
375 "thread.h",
376 "timeutils.cc",
377 "timeutils.h",
378 "timing.cc",
379 "timing.h",
380 "transformadapter.cc",
381 "transformadapter.h",
382 "unixfilesystem.cc",
383 "unixfilesystem.h",
384 "urlencode.cc",
385 "urlencode.h",
386 "versionparsing.cc",
387 "versionparsing.h",
388 "virtualsocketserver.cc",
389 "virtualsocketserver.h",
390 "win32.cc",
391 "win32.h",
392 "win32filesystem.cc",
393 "win32filesystem.h",
394 "win32regkey.cc",
395 "win32regkey.h",
396 "win32securityerrors.cc",
397 "win32socketinit.cc",
398 "win32socketinit.h",
399 "win32socketserver.cc",
400 "win32socketserver.h",
401 "win32window.cc",
402 "win32window.h",
403 "win32windowpicker.cc",
404 "win32windowpicker.h",
405 "window.h",
406 "windowpicker.h",
407 "windowpickerfactory.h",
408 "winfirewall.cc",
409 "winfirewall.h",
410 "winping.cc",
411 "winping.h",
412 "worker.cc",
413 "worker.h",
414 ]
415
416 if (build_with_chromium) {
417 sources += [
418 "../overrides/webrtc/base/basictypes.h",
419 "../overrides/webrtc/base/constructormagic.h",
420 "../overrides/webrtc/base/logging.cc",
421 "../overrides/webrtc/base/logging.h",
422 ]
423 if (is_win) {
424 sources += [ "../overrides/webrtc/base/win32socketinit.cc" ]
425 }
426 sources -= [
427 "asyncinvoker.cc",
428 "asyncinvoker.h",
429 "asyncinvoker-inl.h",
430 "asyncresolverinterface.h",
431 "atomicops.h",
432 "bandwidthsmoother.cc",
433 "bandwidthsmoother.h",
434 "basictypes.h",
435 "bind.h",
436 "bind.h.pump",
437 "buffer.h",
438 "callback.h",
439 "callback.h.pump",
440 "constructormagic.h",
441 "dbus.cc",
442 "dbus.h",
443 "filelock.cc",
444 "filelock.h",
445 "fileutils_mock.h",
446 "genericslot.h",
447 "genericslot.h.pump",
448 "httpserver.cc",
449 "httpserver.h",
450 "json.cc",
451 "json.h",
452 "latebindingsymboltable.cc",
453 "latebindingsymboltable.cc.def",
454 "latebindingsymboltable.h",
455 "latebindingsymboltable.h.def",
456 "libdbusglibsymboltable.cc",
457 "libdbusglibsymboltable.h",
458 "linuxfdwalk.c",
459 "linuxfdwalk.h",
460 "linuxwindowpicker.cc",
461 "linuxwindowpicker.h",
462 "logging.cc",
463 "logging.h",
464 #"macasyncsocket.cc",
465 #"macasyncsocket.h",
466 #"maccocoasocketserver.h",
467 #"maccocoasocketserver.mm",
468 #"macsocketserver.cc",
469 #"macsocketserver.h",
470 #"macwindowpicker.cc",
471 #"macwindowpicker.h",
472 "mathutils.h",
473 "multipart.cc",
474 "multipart.h",
475 "natserver.cc",
476 "natserver.h",
477 "natsocketfactory.cc",
478 "natsocketfactory.h",
479 "nattypes.cc",
480 "nattypes.h",
481 "openssl.h",
482 "optionsfile.cc",
483 "optionsfile.h",
484 "posix.cc",
485 "posix.h",
486 "profiler.cc",
487 "profiler.h",
488 "proxyserver.cc",
489 "proxyserver.h",
490 "refcount.h",
491 "referencecountedsingletonfactory.h",
492 "rollingaccumulator.h",
493 #"safe_conversions.h",
494 #"safe_conversions_impl.h",
495 "scopedptrcollection.h",
496 "scoped_ref_ptr.h",
497 "sec_buffer.h",
498 "sharedexclusivelock.cc",
499 "sharedexclusivelock.h",
500 "sslconfig.h",
501 "sslroots.h",
502 "stringdigest.h",
503 #"testbase64.h",
504 "testclient.cc",
505 "testclient.h",
506 #"testutils.h",
507 "transformadapter.cc",
508 "transformadapter.h",
509 "versionparsing.cc",
510 "versionparsing.h",
511 "virtualsocketserver.cc",
512 "virtualsocketserver.h",
513 #"win32regkey.cc",
514 #"win32regkey.h",
515 #"win32socketinit.cc",
516 #"win32socketinit.h",
517 #"win32socketserver.cc",
518 #"win32socketserver.h",
519 #"win32toolhelp.h",
520 "window.h",
521 "windowpickerfactory.h",
522 "windowpicker.h",
523 ]
524
525 include_dirs = [
526 "../overrides",
527 "../../openssl/openssl/include",
528 ]
529
530 direct_dependent_configs += [ ":webrtc_base_chromium_config" ]
531 } else {
532 if (is_win) {
533 sources += [
534 "diskcache_win32.cc",
535 "diskcache_win32.h",
536 ]
537 }
538
539 deps = [ "//third_party/jsoncpp" ]
540 }
541
542 # TODO(henrike): issue 3307, make webrtc_base build without disabling
543 # these flags.
544 cflags += [
545 "-Wno-extra",
546 "-Wno-all",
547 ]
548 cflags_cc += [ "-Wno-non-virtual-dtor" ]
549
550 if (use_openssl) {
551 direct_dependent_configs += [ ":openssl_config" ]
552
553 deps = [ "//third_party/openssl" ]
554 } else {
555 direct_dependent_configs += [ ":no_openssl_config" ]
556 }
557
558 if (is_android) {
559 direct_dependent_configs += [ ":android_config" ]
560
561 libs = [
562 "log",
563 "GLESv2"
564 ]
565 } else {
566 direct_dependent_configs += [ ":no_android_config" ]
567
568 sources -= [
569 "ifaddrs-android.cc",
570 "ifaddrs-android.h",
571 ]
572 }
573
574 if (is_ios) {
575 all_dependent_configs += [ ":ios_config" ]
576
577 deps = [ "//net/third_party/nss/ssl:libssl" ]
578 }
579
580 if (is_linux) {
581 libs = [
582 "crypto",
583 "dl",
584 "rt",
585 "Xext",
586 "X11",
587 "Xcomposite",
588 "Xrender",
589 ]
590 configs += [ "//third_party/nss:system_nss_no_ssl_config" ]
591 } else {
592 sources -= [
593 "dbus.cc",
594 "dbus.h",
595 "libdbusglibsymboltable.cc",
596 "libdbusglibsymboltable.h",
597 "linuxfdwalk.c",
598 "linuxfdwalk.h",
599 "linuxwindowpicker.cc",
600 "linuxwindowpicker.h",
601 ]
602 }
603
604 if (is_mac) {
605 all_dependent_configs = [ ":mac_config" ]
606
607 libs = [
608 "crypto", # $(SDKROOT)/usr/lib/libcrypto.dylib
609 "ssl", # $(SDKROOT)/usr/lib/libssl.dylib
610 ]
611 if (cpu_arch == "x86") {
612 all_dependent_configs += [ ":mac_x86_config" ]
613 }
614 } else {
615 sources -= [
616 "macasyncsocket.cc",
617 "macasyncsocket.h",
618 "maccocoasocketserver.h",
619 #"maccocoasocketserver.mm", # Seems to be excluded by default with GN.
620 "macconversion.cc",
621 "macconversion.h",
622 "macsocketserver.cc",
623 "macsocketserver.h",
624 "macutils.cc",
625 "macutils.h",
626 "macwindowpicker.cc",
627 "macwindowpicker.h",
628 ]
629 }
630
631 if (is_win) {
632 libs = [
633 "crypt32.lib",
634 "iphlpapi.lib",
635 "secur32.lib",
636 ]
637
638 cflags += [
639 # Suppress warnings about WIN32_LEAN_AND_MEAN.
640 "/wd4005",
641 "/wd4703",
642 ]
643
644 defines += [ "_CRT_NONSTDC_NO_DEPRECATE" ]
645 } else {
646 sources -= [
647 "schanneladapter.cc",
648 "schanneladapter.h",
649 "winping.cc",
650 "winping.h",
651 "winfirewall.cc",
652 "winfirewall.h",
653 # The files below were covered by a regex exclude in GYP.
654 "win32.cc",
655 "win32.h",
656 "win32filesystem.cc",
657 "win32filesystem.h",
658 "win32regkey.cc",
659 "win32regkey.h",
660 "win32securityerrors.cc",
661 "win32socketinit.cc",
662 "win32socketinit.h",
663 "win32socketserver.cc",
664 "win32socketserver.h",
665 "win32window.cc",
666 "win32window.h",
667 "win32windowpicker.cc",
668 "win32windowpicker.h",
669 ]
670 }
671
672 if (is_posix) {
673 if (is_debug) {
674 defines += [ "_DEBUG" ]
675 }
676 } else {
677 sources -= [
678 "latebindingsymboltable.cc",
679 "latebindingsymboltable.h",
680 "posix.cc",
681 "posix.h",
682 "unixfilesystem.cc",
683 "unixfilesystem.h",
684 ]
685 }
686
687 if (is_ios || (is_mac && cpu_arch != "x86")) {
688 defines += [ "CARBON_DEPRECATED=YES" ]
689 }
690
691 if (is_ios || !is_posix) {
692 sources -= [
693 "openssl.h",
694 "openssladapter.cc",
695 "openssladapter.h",
696 "openssldigest.cc",
697 "openssldigest.h",
698 "opensslidentity.cc",
699 "opensslidentity.h",
700 "opensslstreamadapter.cc",
701 "opensslstreamadapter.h",
702 ]
703 }
704
705 if (!is_linux && !is_android) {
706 sources -= [
707 "linux.cc",
708 "linux.h",
709 ]
710 }
711
712 if (is_mac || is_ios || is_win) {
713 deps += [
714 "//net/third_party/nss/ssl:libssl",
715 "//third_party/nss:nspr",
716 "//third_party/nss:nss",
717 ]
718 }
719
720 if (is_posix && !is_mac && !is_ios && !is_android) {
721 configs += [ ":linux_system_ssl" ]
722 }
723}