# Copyright 2024 The BoringSSL Authors
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

load(
    ":gen/sources.bzl",
    "bcm_internal_headers",
    "bcm_sources",
    "bcm_sources_asm",
    "bssl_internal_headers",
    "bssl_sources",
    "crypto_headers",
    "crypto_internal_headers",
    "crypto_sources",
    "crypto_sources_asm",
    "crypto_test_data",
    "crypto_test_sources",
    "decrepit_internal_headers",
    "decrepit_sources",
    "decrepit_test_sources",
    "pki_headers",
    "pki_internal_headers",
    "pki_sources",
    "pki_test_data",
    "pki_test_sources",
    "ssl_headers",
    "ssl_internal_headers",
    "ssl_sources",
    "ssl_test_sources",
    "test_support_internal_headers",
    "test_support_sources",
    "test_support_sources_asm",
    "urandom_test_sources",
)
load(":util/util.bzl", "bssl_cc_binary", "bssl_cc_library", "bssl_cc_test")
load("@rules_license//rules:license.bzl", "license")

package(
    default_applicable_licenses = [":license"],
    # Disable the parse_headers feature. It does not work well in C right now.
    # See https://github.com/bazelbuild/bazel/issues/23460 for details. When
    # that is fixed, if enabled, we likely also need to rename some headers to
    # .inc per
    # https://google.github.io/styleguide/cppguide.html#Self_contained_Headers
    features = ["-parse_headers"],
)

license(
    name = "license",
    package_name = "BoringSSL",
    # TODO(crbug.com/364634028): Update this once we've aligned with OpenSSL's
    # new license.
    license_kinds = [
        "@rules_license//licenses/spdx:ISC",
        "@rules_license//licenses/spdx:OpenSSL",
        "@rules_license//licenses/spdx:MIT",
        "@rules_license//licenses/spdx:SSLeay-standalone",
    ],
    license_text = "LICENSE",
)

exports_files(["LICENSE"])

bssl_cc_library(
    name = "crypto",
    srcs = bcm_sources + crypto_sources,
    hdrs = crypto_headers,
    asm_srcs = bcm_sources_asm + crypto_sources_asm,
    copts = ["-DBORINGSSL_IMPLEMENTATION"],
    includes = ["include"],
    internal_hdrs = bcm_internal_headers + crypto_internal_headers,
    linkopts = select({
        "@platforms//os:windows": [
            "-defaultlib:advapi32.lib",
            "-defaultlib:ws2_32.lib",
        ],
        "//conditions:default": ["-pthread"],
    }),
    visibility = ["//visibility:public"],
)

bssl_cc_library(
    name = "ssl",
    srcs = ssl_sources,
    hdrs = ssl_headers,
    copts = ["-DBORINGSSL_IMPLEMENTATION"],
    internal_hdrs = ssl_internal_headers,
    visibility = ["//visibility:public"],
    deps = [":crypto_internal"],
)

bssl_cc_library(
    name = "test_support",
    testonly = True,
    srcs = test_support_sources,
    asm_srcs = test_support_sources_asm,
    copts = ["-DBORINGSSL_USE_BAZEL_RUNFILES"],
    internal_hdrs = test_support_internal_headers,
    deps = [
        ":crypto_internal",
        "@bazel_tools//tools/cpp/runfiles",
        "@googletest//:gtest",
    ],
)

bssl_cc_test(
    name = "crypto_test",
    size = "large",
    srcs = crypto_test_sources,
    data = crypto_test_data,
    # crypto_test references assembly symbols directly and thus must be linked
    # statically.
    linkstatic = True,
    shard_count = 32,
    deps = [
        ":crypto_internal",
        ":test_support",
        "@googletest//:gtest",
    ],
)

bssl_cc_test(
    name = "urandom_test",
    srcs = urandom_test_sources,
    deps = [
        ":crypto_internal",
        ":test_support",
        "@googletest//:gtest",
    ],
)

bssl_cc_test(
    name = "ssl_test",
    srcs = ssl_test_sources,
    deps = [
        ":crypto_internal",
        ":ssl_internal",
        ":test_support",
        "@googletest//:gtest",
    ],
)

bssl_cc_binary(
    name = "bssl",
    srcs = bssl_sources + bssl_internal_headers,
    visibility = ["//visibility:public"],
    deps = [
        ":crypto_internal",
        ":ssl_internal",
    ],
)

# Build, but do not export libdecrepit.
bssl_cc_library(
    name = "decrepit",
    srcs = decrepit_sources,
    copts = ["-DBORINGSSL_IMPLEMENTATION"],
    internal_hdrs = decrepit_internal_headers,
    deps = [
        ":crypto_internal",
        ":ssl_internal",
    ],
)

bssl_cc_test(
    name = "decrepit_test",
    srcs = decrepit_test_sources,
    deps = [
        ":crypto_internal",
        ":decrepit",
        ":test_support",
        "@googletest//:gtest",
    ],
)

# Build, but do not (yet) export libpki.
bssl_cc_library(
    name = "pki",
    srcs = pki_sources,
    hdrs = pki_headers,
    copts = ["-DBORINGSSL_IMPLEMENTATION"],
    internal_hdrs = pki_internal_headers,
    deps = [":crypto"],
)

bssl_cc_test(
    name = "pki_test",
    srcs = pki_test_sources,
    data = pki_test_data,
    deps = [
        ":crypto_internal",
        ":pki",
        ":test_support",
        "@googletest//:gtest",
    ],
)
