# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/toolchain/toolchain.gni")

config("usrsctp_config") {
  include_dirs = [
    "usrsctplib/usrsctplib",
    "usrsctplib/usrsctplib/netinet",
  ]
}

config("usrsctp_warnings") {
  if (is_clang) {
    cflags = [
      # atomic_init in user_atomic.h is a static function in a header.
      "-Wno-unused-function",

      # Use of deprecated OSAtomic* functions in user_atomic.h. This is
      # what they did in configure.ac. We can remove this once
      # https://github.com/sctplab/usrsctp/issues/177 is fixed.
      "-Wno-deprecated-declarations",
    ]
  }
}

static_library("usrsctp") {
  sources = [
    "usrsctplib/usrsctplib/netinet/sctp.h",
    "usrsctplib/usrsctplib/netinet/sctp_asconf.c",
    "usrsctplib/usrsctplib/netinet/sctp_asconf.h",
    "usrsctplib/usrsctplib/netinet/sctp_auth.c",
    "usrsctplib/usrsctplib/netinet/sctp_auth.h",
    "usrsctplib/usrsctplib/netinet/sctp_bsd_addr.c",
    "usrsctplib/usrsctplib/netinet/sctp_bsd_addr.h",
    "usrsctplib/usrsctplib/netinet/sctp_callout.c",
    "usrsctplib/usrsctplib/netinet/sctp_callout.h",
    "usrsctplib/usrsctplib/netinet/sctp_cc_functions.c",
    "usrsctplib/usrsctplib/netinet/sctp_constants.h",
    "usrsctplib/usrsctplib/netinet/sctp_crc32.c",
    "usrsctplib/usrsctplib/netinet/sctp_crc32.h",
    "usrsctplib/usrsctplib/netinet/sctp_header.h",
    "usrsctplib/usrsctplib/netinet/sctp_indata.c",
    "usrsctplib/usrsctplib/netinet/sctp_indata.h",
    "usrsctplib/usrsctplib/netinet/sctp_input.c",
    "usrsctplib/usrsctplib/netinet/sctp_input.h",
    "usrsctplib/usrsctplib/netinet/sctp_lock_userspace.h",
    "usrsctplib/usrsctplib/netinet/sctp_os.h",
    "usrsctplib/usrsctplib/netinet/sctp_os_userspace.h",
    "usrsctplib/usrsctplib/netinet/sctp_output.c",
    "usrsctplib/usrsctplib/netinet/sctp_output.h",
    "usrsctplib/usrsctplib/netinet/sctp_pcb.c",
    "usrsctplib/usrsctplib/netinet/sctp_pcb.h",
    "usrsctplib/usrsctplib/netinet/sctp_peeloff.c",
    "usrsctplib/usrsctplib/netinet/sctp_peeloff.h",
    "usrsctplib/usrsctplib/netinet/sctp_process_lock.h",
    "usrsctplib/usrsctplib/netinet/sctp_sha1.c",
    "usrsctplib/usrsctplib/netinet/sctp_sha1.h",
    "usrsctplib/usrsctplib/netinet/sctp_ss_functions.c",
    "usrsctplib/usrsctplib/netinet/sctp_structs.h",
    "usrsctplib/usrsctplib/netinet/sctp_sysctl.c",
    "usrsctplib/usrsctplib/netinet/sctp_sysctl.h",
    "usrsctplib/usrsctplib/netinet/sctp_timer.c",
    "usrsctplib/usrsctplib/netinet/sctp_timer.h",
    "usrsctplib/usrsctplib/netinet/sctp_uio.h",
    "usrsctplib/usrsctplib/netinet/sctp_userspace.c",
    "usrsctplib/usrsctplib/netinet/sctp_usrreq.c",
    "usrsctplib/usrsctplib/netinet/sctp_var.h",
    "usrsctplib/usrsctplib/netinet/sctputil.c",
    "usrsctplib/usrsctplib/netinet/sctputil.h",
    "usrsctplib/usrsctplib/netinet6/sctp6_usrreq.c",
    "usrsctplib/usrsctplib/netinet6/sctp6_var.h",
    "usrsctplib/usrsctplib/user_atomic.h",
    "usrsctplib/usrsctplib/user_environment.c",
    "usrsctplib/usrsctplib/user_environment.h",
    "usrsctplib/usrsctplib/user_inpcb.h",
    "usrsctplib/usrsctplib/user_ip6_var.h",
    "usrsctplib/usrsctplib/user_ip_icmp.h",
    "usrsctplib/usrsctplib/user_malloc.h",
    "usrsctplib/usrsctplib/user_mbuf.c",
    "usrsctplib/usrsctplib/user_mbuf.h",
    "usrsctplib/usrsctplib/user_queue.h",
    "usrsctplib/usrsctplib/user_recv_thread.c",
    "usrsctplib/usrsctplib/user_recv_thread.h",
    "usrsctplib/usrsctplib/user_route.h",
    "usrsctplib/usrsctplib/user_socket.c",
    "usrsctplib/usrsctplib/user_socketvar.h",
    "usrsctplib/usrsctplib/user_uma.h",
    "usrsctplib/usrsctplib/usrsctp.h",
  ]

  defines = [
    "SCTP_PROCESS_LEVEL_LOCKS",
    "SCTP_SIMPLE_ALLOCATOR",
    "SCTP_USE_OPENSSL_SHA1",
    "__Userspace__",

    # "SCTP_DEBUG", # Uncomment for SCTP debugging.
  ]

  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [
    "//build/config/compiler:no_chromium_code",

    # These must be after no_chromium_code for warning flags to be ordered
    # correctly.
    "//build/config/compiler:no_incompatible_pointer_warnings",
    ":usrsctp_warnings",
  ]

  public_configs = [ ":usrsctp_config" ]

  cflags = [
    "-UINET",
    "-UINET6",
  ]

  if (is_linux || is_android) {
    defines += [
      "__Userspace_os_Linux",
      "_GNU_SOURCE",
    ]
  } else if (is_mac || is_ios) {
    defines += [
      "HAVE_SA_LEN",
      "HAVE_SCONN_LEN",
      "__APPLE_USE_RFC_2292",
      "__Userspace_os_Darwin",
    ]
    cflags += [ "-U__APPLE__" ]
  }

  if (is_win) {
    defines += [ "__Userspace_os_Windows" ]
  } else {
    defines += [ "NON_WINDOWS_DEFINE" ]
  }

  if (is_fuchsia) {
    defines += [ "__Userspace_os_Fuchsia" ]
  }
  deps = [
    "//third_party/boringssl",
  ]
}
