• 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
15include($ENV{PW_ROOT}/pw_build/pigweed.cmake)
16include($ENV{PW_ROOT}/pw_chrono/backend.cmake)
17include($ENV{PW_ROOT}/pw_sync/backend.cmake)
18include($ENV{PW_ROOT}/pw_protobuf_compiler/proto.cmake)
19
20pw_add_library(pw_chrono.epoch INTERFACE
21  HEADERS
22    public/pw_chrono/epoch.h
23  PUBLIC_INCLUDES
24    public
25)
26
27pw_add_library(pw_chrono.virtual_clock INTERFACE
28  HEADERS
29    public/pw_chrono/virtual_clock.h
30  PUBLIC_INCLUDES
31    public
32)
33
34pw_add_facade(pw_chrono.system_clock STATIC
35  BACKEND
36    pw_chrono.system_clock_BACKEND
37  HEADERS
38    public/pw_chrono/internal/system_clock_macros.h
39    public/pw_chrono/system_clock.h
40  PUBLIC_INCLUDES
41    public
42  PUBLIC_DEPS
43    pw_chrono.epoch
44    pw_chrono.virtual_clock
45    pw_preprocessor
46  SOURCES
47    system_clock.cc
48)
49
50pw_add_facade(pw_chrono.system_timer INTERFACE
51  BACKEND
52    pw_chrono.system_timer_BACKEND
53  HEADERS
54    public/pw_chrono/system_timer.h
55  PUBLIC_INCLUDES
56    public
57  PUBLIC_DEPS
58    pw_chrono.system_clock
59    pw_function
60)
61
62# Dependency injectable implementation of pw::chrono::SystemClock::Interface.
63pw_add_library(pw_chrono.simulated_system_clock INTERFACE
64  HEADERS
65    public/pw_chrono/simulated_system_clock.h
66  PUBLIC_INCLUDES
67    public
68  PUBLIC_DEPS
69    pw_chrono.system_clock
70    pw_sync.interrupt_spin_lock
71)
72
73pw_proto_library(pw_chrono.protos
74  SOURCES
75    chrono.proto
76  PREFIX
77    pw_chrono_protos
78  DEPS
79    pw_tokenizer.proto
80)
81
82if((NOT "${pw_chrono.system_clock_BACKEND}" STREQUAL "") AND
83   (NOT "${pw_sync.interrupt_spin_lock_BACKEND}" STREQUAL ""))
84  pw_add_test(pw_chrono.simulated_system_clock_test
85    SOURCES
86      simulated_system_clock_test.cc
87    PRIVATE_DEPS
88      pw_chrono.simulated_system_clock
89    GROUPS
90      modules
91      pw_chrono
92  )
93endif()
94
95if(NOT "${pw_chrono.system_clock_BACKEND}" STREQUAL "")
96  pw_add_test(pw_chrono.system_clock_facade_test
97    SOURCES
98      system_clock_facade_test.cc
99      system_clock_facade_test_c.c
100    PRIVATE_DEPS
101      pw_chrono.system_clock
102      pw_preprocessor
103    GROUPS
104      modules
105      pw_chrono
106  )
107endif()
108
109if(NOT "${pw_chrono.system_timer_BACKEND}" STREQUAL "")
110  pw_add_test(pw_chrono.system_timer_facade_test
111    SOURCES
112      system_timer_facade_test.cc
113    PRIVATE_DEPS
114      pw_chrono.system_timer
115      pw_sync.thread_notification
116    GROUPS
117      modules
118      pw_chrono
119  )
120endif()
121
122function(generate_build_time_header NAME)
123  pw_parse_arguments(
124    NUM_POSITIONAL_ARGS
125      1
126  )
127
128  set(out_dir "${CMAKE_CURRENT_BINARY_DIR}/${NAME}")
129  set(output "${out_dir}/pw_chrono/build_time.h")
130  get_filename_component(output_include_path "${output}" DIRECTORY)
131
132  set(gen_header "$ENV{PW_ROOT}/pw_chrono/generate_build_time_header.py")
133  LIST(APPEND gen_header_cmd python3 "${gen_header}" ${output})
134
135  add_custom_command(
136    COMMAND
137      ${gen_header_cmd}
138    DEPENDS
139      ${gen_header}
140    OUTPUT
141      ${output})
142
143  add_custom_target("${NAME}._generate" DEPENDS ${output})
144
145  pw_add_library_generic("${NAME}" INTERFACE
146    PUBLIC_INCLUDES
147      ${out_dir}
148  )
149  add_dependencies("${NAME}" "${NAME}._generate")
150endfunction()
151
152generate_build_time_header(pw_chrono.build_time_header)
153
154pw_add_library(pw_chrono.wrap_time_build_time STATIC
155  SOURCES
156    wrap_time_build_time.cc
157  PUBLIC_DEPS
158    pw_chrono.build_time_header
159  PUBLIC_LINK_OPTIONS
160    -Wl,--wrap=time
161    -Wl,--wrap=gettimeofday
162)
163