load("@//tools/build_rules:select.bzl", "compiler_select")

cc_library(
    name = "usrsctp",
    srcs = [
        "usrsctplib/netinet/sctp_asconf.c",
        "usrsctplib/netinet/sctp_auth.c",
        "usrsctplib/netinet/sctp_bsd_addr.c",
        "usrsctplib/netinet/sctp_callout.c",
        "usrsctplib/netinet/sctp_cc_functions.c",
        "usrsctplib/netinet/sctp_crc32.c",
        "usrsctplib/netinet/sctp_indata.c",
        "usrsctplib/netinet/sctp_input.c",
        "usrsctplib/netinet/sctp_output.c",
        "usrsctplib/netinet/sctp_pcb.c",
        "usrsctplib/netinet/sctp_peeloff.c",
        "usrsctplib/netinet/sctp_sha1.c",
        "usrsctplib/netinet/sctp_ss_functions.c",
        "usrsctplib/netinet/sctp_sysctl.c",
        "usrsctplib/netinet/sctp_timer.c",
        "usrsctplib/netinet/sctp_userspace.c",
        "usrsctplib/netinet/sctp_usrreq.c",
        "usrsctplib/netinet/sctputil.c",
        "usrsctplib/netinet6/sctp6_usrreq.c",
        "usrsctplib/user_environment.c",
        "usrsctplib/user_mbuf.c",
        "usrsctplib/user_recv_thread.c",
        "usrsctplib/user_socket.c",
    ],
    hdrs = glob(["usrsctplib/**/*.h"]),
    copts = [
        "-Wno-cast-qual",
        "-Wno-cast-align",
        "-Wno-unused-parameter",
        "-Wno-incompatible-pointer-types-discards-qualifiers",
        "-D__Userspace_os_Linux",
        "-D__Userspace__",
        "-D_GNU_SOURCE",
        "-DSCTP_DEBUG",
        "-DSCTP_SIMPLE_ALLOCATOR",
        "-DINET",
        "-DINET6",
        "-DSCTP_PROCESS_LEVEL_LOCKS",
        "-DHAVE_SYS_QUEUE_H",
        "-DHAVE_STDATOMIC_H",
        "-DHAVE_NETINET_IP_ICMP_H",
        "-DHAVE_LINUX_RTNETLINK_H",
        "-DHAVE_LINUX_IF_ADDR_H",
        "-Wno-address-of-packed-member",
    ] + compiler_select({
        "clang": [
            "-Wno-unused-but-set-variable",
        ],
        "gcc": [
            "-Wno-discarded-qualifiers",
            "-Wno-maybe-uninitialized",
        ],
    }),
    includes = [
        "usrsctplib/",
        "usrsctplib/netinet",
        "usrsctplib/netinet6",
    ],
    target_compatible_with = ["@platforms//os:linux"],
    visibility = ["//visibility:public"],
)
