1a8c51b3fSopenharmony_ciload("@rules_cc//cc:defs.bzl", "cc_library", "cc_test")
2a8c51b3fSopenharmony_ci
3a8c51b3fSopenharmony_ciplatform(
4a8c51b3fSopenharmony_ci    name = "windows",
5a8c51b3fSopenharmony_ci    constraint_values = [
6a8c51b3fSopenharmony_ci        "@platforms//os:windows",
7a8c51b3fSopenharmony_ci    ],
8a8c51b3fSopenharmony_ci)
9a8c51b3fSopenharmony_ci
10a8c51b3fSopenharmony_ciTEST_COPTS = [
11a8c51b3fSopenharmony_ci    "-pedantic",
12a8c51b3fSopenharmony_ci    "-pedantic-errors",
13a8c51b3fSopenharmony_ci    "-std=c++11",
14a8c51b3fSopenharmony_ci    "-Wall",
15a8c51b3fSopenharmony_ci    "-Wconversion",
16a8c51b3fSopenharmony_ci    "-Wextra",
17a8c51b3fSopenharmony_ci    "-Wshadow",
18a8c51b3fSopenharmony_ci    #    "-Wshorten-64-to-32",
19a8c51b3fSopenharmony_ci    "-Wfloat-equal",
20a8c51b3fSopenharmony_ci    "-fstrict-aliasing",
21a8c51b3fSopenharmony_ci]
22a8c51b3fSopenharmony_ci
23a8c51b3fSopenharmony_ci# Some of the issues with DoNotOptimize only occur when optimization is enabled
24a8c51b3fSopenharmony_ciPER_SRC_COPTS = {
25a8c51b3fSopenharmony_ci    "donotoptimize_test.cc": ["-O3"],
26a8c51b3fSopenharmony_ci}
27a8c51b3fSopenharmony_ci
28a8c51b3fSopenharmony_ciTEST_ARGS = ["--benchmark_min_time=0.01s"]
29a8c51b3fSopenharmony_ci
30a8c51b3fSopenharmony_ciPER_SRC_TEST_ARGS = {
31a8c51b3fSopenharmony_ci    "user_counters_tabular_test.cc": ["--benchmark_counters_tabular=true"],
32a8c51b3fSopenharmony_ci    "repetitions_test.cc": [" --benchmark_repetitions=3"],
33a8c51b3fSopenharmony_ci    "spec_arg_test.cc": ["--benchmark_filter=BM_NotChosen"],
34a8c51b3fSopenharmony_ci    "spec_arg_verbosity_test.cc": ["--v=42"],
35a8c51b3fSopenharmony_ci}
36a8c51b3fSopenharmony_ci
37a8c51b3fSopenharmony_cicc_library(
38a8c51b3fSopenharmony_ci    name = "output_test_helper",
39a8c51b3fSopenharmony_ci    testonly = 1,
40a8c51b3fSopenharmony_ci    srcs = ["output_test_helper.cc"],
41a8c51b3fSopenharmony_ci    hdrs = ["output_test.h"],
42a8c51b3fSopenharmony_ci    copts = select({
43a8c51b3fSopenharmony_ci        "//:windows": [],
44a8c51b3fSopenharmony_ci        "//conditions:default": TEST_COPTS,
45a8c51b3fSopenharmony_ci    }),
46a8c51b3fSopenharmony_ci    deps = [
47a8c51b3fSopenharmony_ci        "//:benchmark",
48a8c51b3fSopenharmony_ci        "//:benchmark_internal_headers",
49a8c51b3fSopenharmony_ci    ],
50a8c51b3fSopenharmony_ci)
51a8c51b3fSopenharmony_ci
52a8c51b3fSopenharmony_ci# Tests that use gtest.  These rely on `gtest_main`.
53a8c51b3fSopenharmony_ci[
54a8c51b3fSopenharmony_ci    cc_test(
55a8c51b3fSopenharmony_ci        name = test_src[:-len(".cc")],
56a8c51b3fSopenharmony_ci        size = "small",
57a8c51b3fSopenharmony_ci        srcs = [test_src],
58a8c51b3fSopenharmony_ci        copts = select({
59a8c51b3fSopenharmony_ci            "//:windows": [],
60a8c51b3fSopenharmony_ci            "//conditions:default": TEST_COPTS,
61a8c51b3fSopenharmony_ci        }) + PER_SRC_COPTS.get(test_src, []),
62a8c51b3fSopenharmony_ci        deps = [
63a8c51b3fSopenharmony_ci            "//:benchmark",
64a8c51b3fSopenharmony_ci            "//:benchmark_internal_headers",
65a8c51b3fSopenharmony_ci            "@com_google_googletest//:gtest",
66a8c51b3fSopenharmony_ci            "@com_google_googletest//:gtest_main",
67a8c51b3fSopenharmony_ci        ],
68a8c51b3fSopenharmony_ci    )
69a8c51b3fSopenharmony_ci    for test_src in glob(["*_gtest.cc"])
70a8c51b3fSopenharmony_ci]
71a8c51b3fSopenharmony_ci
72a8c51b3fSopenharmony_ci# Tests that do not use gtest.  These have their own `main` defined.
73a8c51b3fSopenharmony_ci[
74a8c51b3fSopenharmony_ci    cc_test(
75a8c51b3fSopenharmony_ci        name = test_src[:-len(".cc")],
76a8c51b3fSopenharmony_ci        size = "small",
77a8c51b3fSopenharmony_ci        srcs = [test_src],
78a8c51b3fSopenharmony_ci        args = TEST_ARGS + PER_SRC_TEST_ARGS.get(test_src, []),
79a8c51b3fSopenharmony_ci        copts = select({
80a8c51b3fSopenharmony_ci            "//:windows": [],
81a8c51b3fSopenharmony_ci            "//conditions:default": TEST_COPTS,
82a8c51b3fSopenharmony_ci        }) + PER_SRC_COPTS.get(test_src, []),
83a8c51b3fSopenharmony_ci        deps = [
84a8c51b3fSopenharmony_ci            ":output_test_helper",
85a8c51b3fSopenharmony_ci            "//:benchmark",
86a8c51b3fSopenharmony_ci            "//:benchmark_internal_headers",
87a8c51b3fSopenharmony_ci        ],
88a8c51b3fSopenharmony_ci        # FIXME: Add support for assembly tests to bazel.
89a8c51b3fSopenharmony_ci        # See Issue #556
90a8c51b3fSopenharmony_ci        # https://github.com/google/benchmark/issues/556
91a8c51b3fSopenharmony_ci    )
92a8c51b3fSopenharmony_ci    for test_src in glob(
93a8c51b3fSopenharmony_ci        ["*_test.cc"],
94a8c51b3fSopenharmony_ci        exclude = [
95a8c51b3fSopenharmony_ci            "*_assembly_test.cc",
96a8c51b3fSopenharmony_ci            "cxx03_test.cc",
97a8c51b3fSopenharmony_ci            "link_main_test.cc",
98a8c51b3fSopenharmony_ci        ],
99a8c51b3fSopenharmony_ci    )
100a8c51b3fSopenharmony_ci]
101a8c51b3fSopenharmony_ci
102a8c51b3fSopenharmony_cicc_test(
103a8c51b3fSopenharmony_ci    name = "cxx03_test",
104a8c51b3fSopenharmony_ci    size = "small",
105a8c51b3fSopenharmony_ci    srcs = ["cxx03_test.cc"],
106a8c51b3fSopenharmony_ci    copts = TEST_COPTS + ["-std=c++03"],
107a8c51b3fSopenharmony_ci    target_compatible_with = select({
108a8c51b3fSopenharmony_ci        "//:windows": ["@platforms//:incompatible"],
109a8c51b3fSopenharmony_ci        "//conditions:default": [],
110a8c51b3fSopenharmony_ci    }),
111a8c51b3fSopenharmony_ci    deps = [
112a8c51b3fSopenharmony_ci        ":output_test_helper",
113a8c51b3fSopenharmony_ci        "//:benchmark",
114a8c51b3fSopenharmony_ci        "//:benchmark_internal_headers",
115a8c51b3fSopenharmony_ci    ],
116a8c51b3fSopenharmony_ci)
117a8c51b3fSopenharmony_ci
118a8c51b3fSopenharmony_cicc_test(
119a8c51b3fSopenharmony_ci    name = "link_main_test",
120a8c51b3fSopenharmony_ci    size = "small",
121a8c51b3fSopenharmony_ci    srcs = ["link_main_test.cc"],
122a8c51b3fSopenharmony_ci    copts = select({
123a8c51b3fSopenharmony_ci        "//:windows": [],
124a8c51b3fSopenharmony_ci        "//conditions:default": TEST_COPTS,
125a8c51b3fSopenharmony_ci    }),
126a8c51b3fSopenharmony_ci    deps = ["//:benchmark_main"],
127a8c51b3fSopenharmony_ci)
128