# Copyright 2024 The BoringSSL Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

load("@rules_license//rules:license.bzl", "license")
load(
    ":gen/sources.bzl",
    "bcm_internal_headers",
    "bcm_sources",
    "bcm_sources_asm",
    "bench_internal_headers",
    "bench_sources",
    "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")

package(
    default_applicable_licenses = [":license"],
    # TODO(crbug.com/399387924): Enable parse_headers feature. Not all of our
    # headers are self-contained. We may need to rename or fix some of them per
    # https://google.github.io/styleguide/cppguide.html#Self_contained_Headers
    features = ["-parse_headers"],
)

license(
    name = "license",
    package_name = "BoringSSL",
    license_kinds = [
        "@rules_license//licenses/spdx:Apache-2.0",
    ],
    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"],
    # ssl_sources also depend on :crypto's internal headers.
    implementation_deps = [":crypto_internal"],
    internal_hdrs = ssl_internal_headers,
    visibility = ["//visibility:public"],
    # ssl_headers depend on :crypto's exported headers.
    deps = [":crypto"],
)

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",
    ],
)

bssl_cc_binary(
    name = "bssl_bench",
    srcs = bench_sources + bench_internal_headers,
    visibility = ["//visibility:public"],
    deps = [
        ":crypto_internal",
        "@google_benchmark//:benchmark",
    ],
)

# 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",
    ],
)
