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