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.
4
5import("//build/toolchain/toolchain.gni")
6import("//webrtc.gni")
7
8config("usrsctp_config") {
9  include_dirs = [
10    "usrsctplib/usrsctplib",
11    "usrsctplib/usrsctplib/netinet",
12  ]
13}
14
15config("usrsctp_warnings") {
16  if (is_clang) {
17    cflags = [
18      # atomic_init in user_atomic.h is a static function in a header.
19      "-Wno-unused-function",
20
21      # Use of deprecated OSAtomic* functions in user_atomic.h. This is
22      # what they did in configure.ac. We can remove this once
23      # https://github.com/sctplab/usrsctp/issues/177 is fixed.
24      "-Wno-deprecated-declarations",
25
26      # usrsctp uses timingsafe_bcmp which is not available in all
27      # versions of OS X, however this isn't actually an issue since
28      # usrsctp provides its own implementation.
29      "-Wno-unguarded-availability",
30    ]
31  }
32}
33
34static_library("usrsctp") {
35  sources = [
36    "usrsctplib/usrsctplib/netinet/sctp.h",
37    "usrsctplib/usrsctplib/netinet/sctp_asconf.c",
38    "usrsctplib/usrsctplib/netinet/sctp_asconf.h",
39    "usrsctplib/usrsctplib/netinet/sctp_auth.c",
40    "usrsctplib/usrsctplib/netinet/sctp_auth.h",
41    "usrsctplib/usrsctplib/netinet/sctp_bsd_addr.c",
42    "usrsctplib/usrsctplib/netinet/sctp_bsd_addr.h",
43    "usrsctplib/usrsctplib/netinet/sctp_callout.c",
44    "usrsctplib/usrsctplib/netinet/sctp_callout.h",
45    "usrsctplib/usrsctplib/netinet/sctp_cc_functions.c",
46    "usrsctplib/usrsctplib/netinet/sctp_constants.h",
47    "usrsctplib/usrsctplib/netinet/sctp_crc32.c",
48    "usrsctplib/usrsctplib/netinet/sctp_crc32.h",
49    "usrsctplib/usrsctplib/netinet/sctp_header.h",
50    "usrsctplib/usrsctplib/netinet/sctp_indata.c",
51    "usrsctplib/usrsctplib/netinet/sctp_indata.h",
52    "usrsctplib/usrsctplib/netinet/sctp_input.c",
53    "usrsctplib/usrsctplib/netinet/sctp_input.h",
54    "usrsctplib/usrsctplib/netinet/sctp_lock_userspace.h",
55    "usrsctplib/usrsctplib/netinet/sctp_os.h",
56    "usrsctplib/usrsctplib/netinet/sctp_os_userspace.h",
57    "usrsctplib/usrsctplib/netinet/sctp_output.c",
58    "usrsctplib/usrsctplib/netinet/sctp_output.h",
59    "usrsctplib/usrsctplib/netinet/sctp_pcb.c",
60    "usrsctplib/usrsctplib/netinet/sctp_pcb.h",
61    "usrsctplib/usrsctplib/netinet/sctp_peeloff.c",
62    "usrsctplib/usrsctplib/netinet/sctp_peeloff.h",
63    "usrsctplib/usrsctplib/netinet/sctp_process_lock.h",
64    "usrsctplib/usrsctplib/netinet/sctp_sha1.c",
65    "usrsctplib/usrsctplib/netinet/sctp_sha1.h",
66    "usrsctplib/usrsctplib/netinet/sctp_ss_functions.c",
67    "usrsctplib/usrsctplib/netinet/sctp_structs.h",
68    "usrsctplib/usrsctplib/netinet/sctp_sysctl.c",
69    "usrsctplib/usrsctplib/netinet/sctp_sysctl.h",
70    "usrsctplib/usrsctplib/netinet/sctp_timer.c",
71    "usrsctplib/usrsctplib/netinet/sctp_timer.h",
72    "usrsctplib/usrsctplib/netinet/sctp_uio.h",
73    "usrsctplib/usrsctplib/netinet/sctp_userspace.c",
74    "usrsctplib/usrsctplib/netinet/sctp_usrreq.c",
75    "usrsctplib/usrsctplib/netinet/sctp_var.h",
76    "usrsctplib/usrsctplib/netinet/sctputil.c",
77    "usrsctplib/usrsctplib/netinet/sctputil.h",
78    "usrsctplib/usrsctplib/netinet6/sctp6_usrreq.c",
79    "usrsctplib/usrsctplib/netinet6/sctp6_var.h",
80    "usrsctplib/usrsctplib/user_atomic.h",
81    "usrsctplib/usrsctplib/user_environment.c",
82    "usrsctplib/usrsctplib/user_environment.h",
83    "usrsctplib/usrsctplib/user_inpcb.h",
84    "usrsctplib/usrsctplib/user_ip6_var.h",
85    "usrsctplib/usrsctplib/user_ip_icmp.h",
86    "usrsctplib/usrsctplib/user_malloc.h",
87    "usrsctplib/usrsctplib/user_mbuf.c",
88    "usrsctplib/usrsctplib/user_mbuf.h",
89    "usrsctplib/usrsctplib/user_queue.h",
90    "usrsctplib/usrsctplib/user_recv_thread.c",
91    "usrsctplib/usrsctplib/user_recv_thread.h",
92    "usrsctplib/usrsctplib/user_route.h",
93    "usrsctplib/usrsctplib/user_socket.c",
94    "usrsctplib/usrsctplib/user_socketvar.h",
95    "usrsctplib/usrsctplib/user_uma.h",
96    "usrsctplib/usrsctplib/usrsctp.h",
97  ]
98
99  defines = [
100    "SCTP_PROCESS_LEVEL_LOCKS",
101    "SCTP_SIMPLE_ALLOCATOR",
102    "SCTP_USE_OPENSSL_SHA1",
103    "__Userspace__",
104
105    # "SCTP_DEBUG", # Uncomment for SCTP debugging.
106  ]
107
108  configs -= [ "//build/config/compiler:chromium_code" ]
109  configs += [
110    "//build/config/compiler:no_chromium_code",
111
112    # These must be after no_chromium_code for warning flags to be ordered
113    # correctly.
114    "//build/config/compiler:no_incompatible_pointer_warnings",
115    ":usrsctp_warnings",
116  ]
117
118  public_configs = [ ":usrsctp_config" ]
119
120  cflags = [
121    "-UINET",
122    "-UINET6",
123  ]
124
125  if (is_linux || is_android) {
126    defines += [
127      "__Userspace_os_Linux",
128      "_GNU_SOURCE",
129    ]
130  } else if (is_mac || is_ios) {
131    defines += [
132      "HAVE_SA_LEN",
133      "HAVE_SCONN_LEN",
134      "__APPLE_USE_RFC_2292",
135      "__Userspace_os_Darwin",
136    ]
137    cflags += [ "-U__APPLE__" ]
138  }
139
140  if (is_win) {
141    defines += [ "__Userspace_os_Windows" ]
142  } else {
143    defines += [ "NON_WINDOWS_DEFINE" ]
144  }
145
146  if (is_fuchsia) {
147    defines += [ "__Userspace_os_Fuchsia" ]
148  }
149  if (rtc_build_ssl) {
150    deps += [ "//third_party/boringssl" ]
151  } else {
152    configs += [ "//rtc_base:external_ssl_library" ]
153  }
154}
155