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