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