# Copyright 2022 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_facade",
    "pw_cc_library",
    "pw_cc_test",
)
load(
    "//pw_build:selects.bzl",
    "TARGET_COMPATIBLE_WITH_HOST_SELECT",
)

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

licenses(["notice"])

pw_cc_library(
    name = "duration_unit",
    hdrs = [
        "public/pw_perf_test/internal/duration_unit.h",
    ],
    includes = ["public"],
    visibility = ["//visibility:private"],
)

pw_cc_facade(
    name = "timer_interface_facade",
    hdrs = [
        "public/pw_perf_test/internal/timer.h",
    ],
    includes = ["public"],
    visibility = ["//visibility:private"],
    deps = [
        ":duration_unit",
    ],
)

pw_cc_library(
    name = "timer",
    deps = [
        ":timer_interface_facade",
        "@pigweed_config//:pw_perf_test_timer_backend",
    ],
)

pw_cc_library(
    name = "timer_multiplexer",
    visibility = ["@pigweed_config//:__pkg__"],
    deps = select({
        "//conditions:default": [":chrono_timer"],
    }),
)

pw_cc_library(
    name = "pw_perf_test",
    srcs = ["perf_test.cc"],
    hdrs = ["public/pw_perf_test/perf_test.h"],
    includes = ["public"],
    deps = [
        ":timer",
        "//pw_assert",
        "//pw_log",
    ],
)

pw_cc_test(
    name = "perf_test_test",
    srcs = ["perf_test_test.cc"],
    deps = [":pw_perf_test"],
)

pw_cc_test(
    name = "timer_test",
    srcs = ["timer_test.cc"],
    deps = [
        ":timer",
        "//pw_chrono:system_clock",
        "//pw_thread:sleep",
    ],
)

pw_cc_test(
    name = "chrono_timer_test",
    srcs = ["chrono_test.cc"],
    deps = [
        ":chrono_timer",
        "//pw_chrono:system_clock",
        "//pw_thread:sleep",
    ],
)

pw_cc_test(
    name = "state_test",
    srcs = ["state_test.cc"],
    deps = [":pw_perf_test"],
)

# Bazel does not yet support building docs.
filegroup(
    name = "docs",
    srcs = ["docs.rst"],
)

# Chrono Implementation

pw_cc_library(
    name = "chrono_timer_headers",
    hdrs = [
        "chrono_public_overrides/pw_perf_test_timer_backend/timer.h",
        "public/pw_perf_test/internal/chrono_timer_interface.h",
    ],
    includes = [
        "chrono_public_overrides",
        "public",
    ],
    deps = [
        ":duration_unit",
        "//pw_chrono:system_clock",
    ],
)

pw_cc_library(
    name = "chrono_timer",
    target_compatible_with = select(TARGET_COMPATIBLE_WITH_HOST_SELECT),
    deps = [
        ":chrono_timer_headers",
        ":timer_interface_facade",
    ],
)
