# Copyright 2021 The Pigweed 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(
    "//pw_build:pigweed.bzl",
    "pw_cc_library",
    "pw_cc_test",
)
load("@rules_cc_toolchain//cc_toolchain:cc_toolchain_import.bzl", "cc_toolchain_import")

package(default_visibility = ["//visibility:public"])

licenses(["notice"])

cc_toolchain_import(
    name = "toolchain_polyfill_overrides",
    hdrs = [
        "public_overrides/bit",
        "public_overrides/cstddef",
        "public_overrides/iterator",
        "public_overrides/type_traits",
        "standard_library_public/pw_polyfill/standard_library/bit.h",
        "standard_library_public/pw_polyfill/standard_library/cstddef.h",
        "standard_library_public/pw_polyfill/standard_library/iterator.h",
        "standard_library_public/pw_polyfill/standard_library/namespace.h",
        "standard_library_public/pw_polyfill/standard_library/type_traits.h",
    ],
    includes = [
        "public",
        "public_overrides",
        "standard_library_public",
    ],
)

pw_cc_library(
    name = "pw_polyfill",
    hdrs = [
        "public/pw_polyfill/language_feature_macros.h",
        "public/pw_polyfill/standard.h",
    ],
    includes = ["public"],
)

# TODO(pwbug/602): Deprecate this once all users have been migrated to targeted
# polyfill deps.
pw_cc_library(
    name = "overrides",
    deps = [
        ":bit",
        ":span",
    ],
)

# Provides <bit>'s std::endian.
pw_cc_library(
    name = "bit",
    hdrs = [
        "public_overrides/bit",
        "standard_library_public/pw_polyfill/standard_library/bit.h",
    ],
    includes = [
        "public_overrides",
        "standard_library_public",
    ],
    deps = [":standard_library"],
)

# Provides <cstddef>'s std::byte.
pw_cc_library(
    name = "cstddef",
    hdrs = [
        "public_overrides/cstddef",
        "standard_library_public/pw_polyfill/standard_library/cstddef.h",
    ],
    includes = [
        "public_overrides",
        "standard_library_public",
    ],
    deps = [":standard_library"],
)

# TODO(pwbug/603): Remove this polyfill.
pw_cc_library(
    name = "iterator",
    hdrs = [
        "public_overrides/iterator",
        "standard_library_public/pw_polyfill/standard_library/iterator.h",
    ],
    includes = [
        "public_overrides",
        "standard_library_public",
    ],
    deps = [
        ":standard_library",
        ":type_traits",
    ],
)

# Provides <span>.
pw_cc_library(
    name = "span",
    deps = ["//pw_span"],
)

# TODO(pwbug/603): Remove this polyfill.
pw_cc_library(
    name = "type_traits",
    hdrs = [
        "public_overrides/type_traits",
        "standard_library_public/pw_polyfill/standard_library/type_traits.h",
    ],
    includes = [
        "public_overrides",
        "standard_library_public",
    ],
    deps = [
        ":cstddef",
        ":standard_library",
    ],
)

pw_cc_library(
    name = "standard_library",
    hdrs = [
        "standard_library_public/pw_polyfill/standard_library/namespace.h",
    ],
    includes = ["standard_library_public"],
    visibility = ["//pw_span:__pkg__"],
)

pw_cc_test(
    name = "default_cpp_test",
    srcs = [
        "test.cc",
    ],
    deps = [
        ":pw_polyfill",
        ":standard_library",
        "//pw_unit_test",
    ],
)
