• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2020 The Pigweed Authors
2#
3# Licensed under the Apache License, Version 2.0 (the "License"); you may not
4# use this file except in compliance with the License. You may obtain a copy of
5# the License at
6#
7#     https://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12# License for the specific language governing permissions and limitations under
13# the License.
14
15load("@com_google_protobuf//bazel:proto_library.bzl", "proto_library")
16load("@rules_cc//cc:cc_library.bzl", "cc_library")
17load("@rules_python//python:proto.bzl", "py_proto_library")
18load("@rules_python//sphinxdocs:sphinx_docs_library.bzl", "sphinx_docs_library")
19load("//pw_build:compatibility.bzl", "host_backend_alias", "incompatible_with_mcu")
20load("//pw_build:pw_facade.bzl", "pw_facade")
21load("//pw_build:python.bzl", "pw_py_binary")
22load("//pw_protobuf_compiler:pw_proto_library.bzl", "pwpb_proto_library")
23load("//pw_unit_test:pw_cc_test.bzl", "pw_cc_test")
24
25package(default_visibility = ["//visibility:public"])
26
27licenses(["notice"])
28
29cc_library(
30    name = "epoch",
31    hdrs = [
32        "public/pw_chrono/epoch.h",
33    ],
34    strip_include_prefix = "public",
35)
36
37cc_library(
38    name = "virtual_clock",
39    hdrs = [
40        "public/pw_chrono/virtual_clock.h",
41    ],
42    strip_include_prefix = "public",
43)
44
45pw_facade(
46    name = "system_clock",
47    srcs = [
48        "system_clock.cc",
49    ],
50    hdrs = [
51        "public/pw_chrono/internal/system_clock_macros.h",
52        "public/pw_chrono/system_clock.h",
53    ],
54    backend = ":system_clock_backend",
55    strip_include_prefix = "public",
56    tags = ["noclangtidy"],
57    deps = [
58        ":epoch",
59        ":virtual_clock",
60        "//pw_preprocessor",
61    ],
62)
63
64label_flag(
65    name = "system_clock_backend",
66    build_setting_default = ":system_clock_unspecified_backend",
67)
68
69host_backend_alias(
70    name = "system_clock_unspecified_backend",
71    backend = "//pw_chrono_stl:system_clock",
72)
73
74pw_facade(
75    name = "system_timer",
76    hdrs = [
77        "public/pw_chrono/system_timer.h",
78    ],
79    backend = ":system_timer_backend",
80    strip_include_prefix = "public",
81    tags = ["noclangtidy"],
82    deps = [
83        ":system_clock",
84    ],
85)
86
87label_flag(
88    name = "system_timer_backend",
89    build_setting_default = ":system_timer_unspecified_backend",
90)
91
92host_backend_alias(
93    name = "system_timer_unspecified_backend",
94    backend = "//pw_chrono_stl:system_timer",
95)
96
97proto_library(
98    name = "chrono_proto",
99    srcs = [
100        "chrono.proto",
101    ],
102    import_prefix = "pw_chrono_protos",
103    strip_import_prefix = "/pw_chrono",
104    deps = [
105        "//pw_tokenizer:tokenizer_proto",
106    ],
107)
108
109py_proto_library(
110    name = "chrono_proto_pb2",
111    deps = [":chrono_proto"],
112)
113
114pwpb_proto_library(
115    name = "chrono_proto_pwpb",
116    deps = [":chrono_proto"],
117)
118
119cc_library(
120    name = "simulated_system_clock",
121    hdrs = [
122        "public/pw_chrono/simulated_system_clock.h",
123    ],
124    strip_include_prefix = "public",
125    deps = [
126        ":system_clock",
127        "//pw_sync:interrupt_spin_lock",
128    ],
129)
130
131pw_cc_test(
132    name = "simulated_system_clock_test",
133    srcs = [
134        "simulated_system_clock_test.cc",
135    ],
136    deps = [":simulated_system_clock"],
137)
138
139pw_cc_test(
140    name = "system_clock_facade_test",
141    srcs = [
142        "system_clock_facade_test.cc",
143        "system_clock_facade_test_c.c",
144    ],
145    deps = [
146        ":system_clock",
147        "//pw_preprocessor",
148    ],
149)
150
151pw_cc_test(
152    name = "system_timer_facade_test",
153    srcs = [
154        "system_timer_facade_test.cc",
155    ],
156    deps = [
157        ":system_clock",
158        ":system_timer",
159        "//pw_sync:thread_notification",
160    ],
161)
162
163pw_py_binary(
164    name = "generate_build_time_header",
165    srcs = ["generate_build_time_header.py"],
166)
167
168genrule(
169    name = "build_time_header",
170    outs = ["build_time.h"],
171    cmd = "$(execpath :generate_build_time_header) --bazel $@",
172    stamp = True,
173    tools = [":generate_build_time_header"],
174)
175
176cc_library(
177    name = "wrap_time_build_time",
178    srcs = [
179        "wrap_time_build_time.cc",
180        ":build_time_header",
181    ],
182)
183
184cc_library(
185    name = "wrap_time_system_clock",
186    srcs = ["wrap_time_system_clock.cc"],
187    linkopts = [
188        "-Wl,--wrap=gettimeofday",
189        "-Wl,--wrap=time",
190    ],
191    deps = [":system_clock"],
192    alwayslink = 1,
193)
194
195filegroup(
196    name = "doxygen",
197    srcs = [
198        "public/pw_chrono/simulated_system_clock.h",
199        "public/pw_chrono/system_clock.h",
200        "public/pw_chrono/system_timer.h",
201        "public/pw_chrono/virtual_clock.h",
202    ],
203)
204
205sphinx_docs_library(
206    name = "docs",
207    srcs = [
208        "backends.rst",
209        "docs.rst",
210    ],
211    prefix = "pw_chrono/",
212    target_compatible_with = incompatible_with_mcu(),
213)
214