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