• 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("@rules_python//python:proto.bzl", "py_proto_library")
16load(
17    "//pw_build:pigweed.bzl",
18    "pw_cc_test",
19    "pw_facade",
20)
21load("//pw_protobuf_compiler:pw_proto_library.bzl", "pw_proto_library")
22
23package(default_visibility = ["//visibility:public"])
24
25licenses(["notice"])
26
27cc_library(
28    name = "epoch",
29    hdrs = [
30        "public/pw_chrono/epoch.h",
31    ],
32    includes = ["public"],
33)
34
35pw_facade(
36    name = "system_clock",
37    srcs = [
38        "system_clock.cc",
39    ],
40    hdrs = [
41        "public/pw_chrono/internal/system_clock_macros.h",
42        "public/pw_chrono/system_clock.h",
43    ],
44    backend = ":system_clock_backend",
45    includes = ["public"],
46    deps = [
47        ":epoch",
48        "//pw_preprocessor",
49    ],
50)
51
52label_flag(
53    name = "system_clock_backend",
54    build_setting_default = ":system_clock_backend_multiplexer",
55)
56
57cc_library(
58    name = "system_clock_backend_multiplexer",
59    visibility = ["@pigweed//targets:__pkg__"],
60    deps = select({
61        "//pw_build/constraints/rtos:embos": ["//pw_chrono_embos:system_clock"],
62        "//pw_build/constraints/rtos:freertos": ["//pw_chrono_freertos:system_clock"],
63        "//pw_build/constraints/rtos:threadx": ["//pw_chrono_threadx:system_clock"],
64        "//conditions:default": ["//pw_chrono_stl:system_clock"],
65    }),
66)
67
68pw_facade(
69    name = "system_timer",
70    hdrs = [
71        "public/pw_chrono/system_timer.h",
72    ],
73    backend = ":system_timer_backend",
74    includes = ["public"],
75    deps = [
76        ":system_clock",
77    ],
78)
79
80label_flag(
81    name = "system_timer_backend",
82    build_setting_default = ":system_timer_backend_multiplexer",
83)
84
85cc_library(
86    name = "system_timer_backend_multiplexer",
87    visibility = ["@pigweed//targets:__pkg__"],
88    deps = select({
89        "//pw_build/constraints/rtos:embos": ["//pw_chrono_embos:system_timer"],
90        "//pw_build/constraints/rtos:freertos": ["//pw_chrono_freertos:system_timer"],
91        "//conditions:default": ["//pw_chrono_stl:system_timer"],
92    }),
93)
94
95proto_library(
96    name = "chrono_proto",
97    srcs = [
98        "chrono.proto",
99    ],
100    import_prefix = "pw_chrono_protos",
101    strip_import_prefix = "/pw_chrono",
102)
103
104py_proto_library(
105    name = "chrono_proto_pb2",
106    deps = [":chrono_proto"],
107)
108
109pw_proto_library(
110    name = "chrono_proto_cc",
111    deps = [":chrono_proto"],
112)
113
114cc_library(
115    name = "simulated_system_clock",
116    hdrs = [
117        "public/pw_chrono/simulated_system_clock.h",
118    ],
119    deps = [
120        ":system_clock",
121        "//pw_sync:interrupt_spin_lock",
122    ],
123)
124
125pw_cc_test(
126    name = "simulated_system_clock_test",
127    srcs = [
128        "simulated_system_clock_test.cc",
129    ],
130    deps = [
131        ":simulated_system_clock",
132        "//pw_unit_test",
133    ],
134)
135
136pw_cc_test(
137    name = "system_clock_facade_test",
138    srcs = [
139        "system_clock_facade_test.cc",
140        "system_clock_facade_test_c.c",
141    ],
142    deps = [
143        ":system_clock",
144        "//pw_preprocessor",
145        "//pw_unit_test",
146    ],
147)
148
149pw_cc_test(
150    name = "system_timer_facade_test",
151    srcs = [
152        "system_timer_facade_test.cc",
153    ],
154    deps = [
155        ":system_clock",
156        ":system_timer",
157        "//pw_sync:thread_notification",
158        "//pw_unit_test",
159    ],
160)
161
162py_binary(
163    name = "generate_build_time_header",
164    srcs = ["generate_build_time_header.py"],
165)
166
167genrule(
168    name = "build_time_header",
169    outs = ["build_time.h"],
170    cmd = "$(location :generate_build_time_header) $@",
171    tools = [":generate_build_time_header"],
172)
173
174cc_library(
175    name = "wrap_time_build_time",
176    srcs = [
177        "wrap_time_build_time.cc",
178        ":build_time_header",
179    ],
180)
181
182cc_library(
183    name = "wrap_time_system_clock",
184    srcs = ["wrap_time_system_clock.cc"],
185    linkopts = [
186        "-Wl,--wrap=gettimeofday",
187        "-Wl,--wrap=time",
188    ],
189    deps = [":system_clock"],
190    alwayslink = 1,
191)
192