xref: /aosp_15_r20/external/pigweed/pw_chrono/CMakeLists.txt (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker# Copyright 2020 The Pigweed Authors
2*61c4878aSAndroid Build Coastguard Worker#
3*61c4878aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); you may not
4*61c4878aSAndroid Build Coastguard Worker# use this file except in compliance with the License. You may obtain a copy of
5*61c4878aSAndroid Build Coastguard Worker# the License at
6*61c4878aSAndroid Build Coastguard Worker#
7*61c4878aSAndroid Build Coastguard Worker#     https://www.apache.org/licenses/LICENSE-2.0
8*61c4878aSAndroid Build Coastguard Worker#
9*61c4878aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*61c4878aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11*61c4878aSAndroid Build Coastguard Worker# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12*61c4878aSAndroid Build Coastguard Worker# License for the specific language governing permissions and limitations under
13*61c4878aSAndroid Build Coastguard Worker# the License.
14*61c4878aSAndroid Build Coastguard Worker
15*61c4878aSAndroid Build Coastguard Workerinclude($ENV{PW_ROOT}/pw_build/pigweed.cmake)
16*61c4878aSAndroid Build Coastguard Workerinclude($ENV{PW_ROOT}/pw_chrono/backend.cmake)
17*61c4878aSAndroid Build Coastguard Workerinclude($ENV{PW_ROOT}/pw_sync/backend.cmake)
18*61c4878aSAndroid Build Coastguard Workerinclude($ENV{PW_ROOT}/pw_protobuf_compiler/proto.cmake)
19*61c4878aSAndroid Build Coastguard Worker
20*61c4878aSAndroid Build Coastguard Workerpw_add_library(pw_chrono.epoch INTERFACE
21*61c4878aSAndroid Build Coastguard Worker  HEADERS
22*61c4878aSAndroid Build Coastguard Worker    public/pw_chrono/epoch.h
23*61c4878aSAndroid Build Coastguard Worker  PUBLIC_INCLUDES
24*61c4878aSAndroid Build Coastguard Worker    public
25*61c4878aSAndroid Build Coastguard Worker)
26*61c4878aSAndroid Build Coastguard Worker
27*61c4878aSAndroid Build Coastguard Workerpw_add_library(pw_chrono.virtual_clock INTERFACE
28*61c4878aSAndroid Build Coastguard Worker  HEADERS
29*61c4878aSAndroid Build Coastguard Worker    public/pw_chrono/virtual_clock.h
30*61c4878aSAndroid Build Coastguard Worker  PUBLIC_INCLUDES
31*61c4878aSAndroid Build Coastguard Worker    public
32*61c4878aSAndroid Build Coastguard Worker)
33*61c4878aSAndroid Build Coastguard Worker
34*61c4878aSAndroid Build Coastguard Workerpw_add_facade(pw_chrono.system_clock STATIC
35*61c4878aSAndroid Build Coastguard Worker  BACKEND
36*61c4878aSAndroid Build Coastguard Worker    pw_chrono.system_clock_BACKEND
37*61c4878aSAndroid Build Coastguard Worker  HEADERS
38*61c4878aSAndroid Build Coastguard Worker    public/pw_chrono/internal/system_clock_macros.h
39*61c4878aSAndroid Build Coastguard Worker    public/pw_chrono/system_clock.h
40*61c4878aSAndroid Build Coastguard Worker  PUBLIC_INCLUDES
41*61c4878aSAndroid Build Coastguard Worker    public
42*61c4878aSAndroid Build Coastguard Worker  PUBLIC_DEPS
43*61c4878aSAndroid Build Coastguard Worker    pw_chrono.epoch
44*61c4878aSAndroid Build Coastguard Worker    pw_chrono.virtual_clock
45*61c4878aSAndroid Build Coastguard Worker    pw_preprocessor
46*61c4878aSAndroid Build Coastguard Worker  SOURCES
47*61c4878aSAndroid Build Coastguard Worker    system_clock.cc
48*61c4878aSAndroid Build Coastguard Worker)
49*61c4878aSAndroid Build Coastguard Worker
50*61c4878aSAndroid Build Coastguard Workerpw_add_facade(pw_chrono.system_timer INTERFACE
51*61c4878aSAndroid Build Coastguard Worker  BACKEND
52*61c4878aSAndroid Build Coastguard Worker    pw_chrono.system_timer_BACKEND
53*61c4878aSAndroid Build Coastguard Worker  HEADERS
54*61c4878aSAndroid Build Coastguard Worker    public/pw_chrono/system_timer.h
55*61c4878aSAndroid Build Coastguard Worker  PUBLIC_INCLUDES
56*61c4878aSAndroid Build Coastguard Worker    public
57*61c4878aSAndroid Build Coastguard Worker  PUBLIC_DEPS
58*61c4878aSAndroid Build Coastguard Worker    pw_chrono.system_clock
59*61c4878aSAndroid Build Coastguard Worker    pw_function
60*61c4878aSAndroid Build Coastguard Worker)
61*61c4878aSAndroid Build Coastguard Worker
62*61c4878aSAndroid Build Coastguard Worker# Dependency injectable implementation of pw::chrono::SystemClock::Interface.
63*61c4878aSAndroid Build Coastguard Workerpw_add_library(pw_chrono.simulated_system_clock INTERFACE
64*61c4878aSAndroid Build Coastguard Worker  HEADERS
65*61c4878aSAndroid Build Coastguard Worker    public/pw_chrono/simulated_system_clock.h
66*61c4878aSAndroid Build Coastguard Worker  PUBLIC_INCLUDES
67*61c4878aSAndroid Build Coastguard Worker    public
68*61c4878aSAndroid Build Coastguard Worker  PUBLIC_DEPS
69*61c4878aSAndroid Build Coastguard Worker    pw_chrono.system_clock
70*61c4878aSAndroid Build Coastguard Worker    pw_sync.interrupt_spin_lock
71*61c4878aSAndroid Build Coastguard Worker)
72*61c4878aSAndroid Build Coastguard Worker
73*61c4878aSAndroid Build Coastguard Workerpw_proto_library(pw_chrono.protos
74*61c4878aSAndroid Build Coastguard Worker  SOURCES
75*61c4878aSAndroid Build Coastguard Worker    chrono.proto
76*61c4878aSAndroid Build Coastguard Worker  PREFIX
77*61c4878aSAndroid Build Coastguard Worker    pw_chrono_protos
78*61c4878aSAndroid Build Coastguard Worker)
79*61c4878aSAndroid Build Coastguard Worker
80*61c4878aSAndroid Build Coastguard Workerif((NOT "${pw_chrono.system_clock_BACKEND}" STREQUAL "") AND
81*61c4878aSAndroid Build Coastguard Worker   (NOT "${pw_sync.interrupt_spin_lock_BACKEND}" STREQUAL ""))
82*61c4878aSAndroid Build Coastguard Worker  pw_add_test(pw_chrono.simulated_system_clock_test
83*61c4878aSAndroid Build Coastguard Worker    SOURCES
84*61c4878aSAndroid Build Coastguard Worker      simulated_system_clock_test.cc
85*61c4878aSAndroid Build Coastguard Worker    PRIVATE_DEPS
86*61c4878aSAndroid Build Coastguard Worker      pw_chrono.simulated_system_clock
87*61c4878aSAndroid Build Coastguard Worker    GROUPS
88*61c4878aSAndroid Build Coastguard Worker      modules
89*61c4878aSAndroid Build Coastguard Worker      pw_chrono
90*61c4878aSAndroid Build Coastguard Worker  )
91*61c4878aSAndroid Build Coastguard Workerendif()
92*61c4878aSAndroid Build Coastguard Worker
93*61c4878aSAndroid Build Coastguard Workerif(NOT "${pw_chrono.system_clock_BACKEND}" STREQUAL "")
94*61c4878aSAndroid Build Coastguard Worker  pw_add_test(pw_chrono.system_clock_facade_test
95*61c4878aSAndroid Build Coastguard Worker    SOURCES
96*61c4878aSAndroid Build Coastguard Worker      system_clock_facade_test.cc
97*61c4878aSAndroid Build Coastguard Worker      system_clock_facade_test_c.c
98*61c4878aSAndroid Build Coastguard Worker    PRIVATE_DEPS
99*61c4878aSAndroid Build Coastguard Worker      pw_chrono.system_clock
100*61c4878aSAndroid Build Coastguard Worker      pw_preprocessor
101*61c4878aSAndroid Build Coastguard Worker    GROUPS
102*61c4878aSAndroid Build Coastguard Worker      modules
103*61c4878aSAndroid Build Coastguard Worker      pw_chrono
104*61c4878aSAndroid Build Coastguard Worker  )
105*61c4878aSAndroid Build Coastguard Workerendif()
106*61c4878aSAndroid Build Coastguard Worker
107*61c4878aSAndroid Build Coastguard Workerif(NOT "${pw_chrono.system_timer_BACKEND}" STREQUAL "")
108*61c4878aSAndroid Build Coastguard Worker  pw_add_test(pw_chrono.system_timer_facade_test
109*61c4878aSAndroid Build Coastguard Worker    SOURCES
110*61c4878aSAndroid Build Coastguard Worker      system_timer_facade_test.cc
111*61c4878aSAndroid Build Coastguard Worker    PRIVATE_DEPS
112*61c4878aSAndroid Build Coastguard Worker      pw_chrono.system_timer
113*61c4878aSAndroid Build Coastguard Worker      pw_sync.thread_notification
114*61c4878aSAndroid Build Coastguard Worker    GROUPS
115*61c4878aSAndroid Build Coastguard Worker      modules
116*61c4878aSAndroid Build Coastguard Worker      pw_chrono
117*61c4878aSAndroid Build Coastguard Worker  )
118*61c4878aSAndroid Build Coastguard Workerendif()
119*61c4878aSAndroid Build Coastguard Worker
120*61c4878aSAndroid Build Coastguard Workerfunction(generate_build_time_header NAME)
121*61c4878aSAndroid Build Coastguard Worker  pw_parse_arguments(
122*61c4878aSAndroid Build Coastguard Worker    NUM_POSITIONAL_ARGS
123*61c4878aSAndroid Build Coastguard Worker      1
124*61c4878aSAndroid Build Coastguard Worker  )
125*61c4878aSAndroid Build Coastguard Worker
126*61c4878aSAndroid Build Coastguard Worker  set(out_dir "${CMAKE_CURRENT_BINARY_DIR}/${NAME}")
127*61c4878aSAndroid Build Coastguard Worker  set(output "${out_dir}/pw_chrono/build_time.h")
128*61c4878aSAndroid Build Coastguard Worker  get_filename_component(output_include_path "${output}" DIRECTORY)
129*61c4878aSAndroid Build Coastguard Worker
130*61c4878aSAndroid Build Coastguard Worker  set(gen_header "$ENV{PW_ROOT}/pw_chrono/generate_build_time_header.py")
131*61c4878aSAndroid Build Coastguard Worker  LIST(APPEND gen_header_cmd python3 "${gen_header}" ${output})
132*61c4878aSAndroid Build Coastguard Worker
133*61c4878aSAndroid Build Coastguard Worker  add_custom_command(
134*61c4878aSAndroid Build Coastguard Worker    COMMAND
135*61c4878aSAndroid Build Coastguard Worker      ${gen_header_cmd}
136*61c4878aSAndroid Build Coastguard Worker    DEPENDS
137*61c4878aSAndroid Build Coastguard Worker      ${gen_header}
138*61c4878aSAndroid Build Coastguard Worker    OUTPUT
139*61c4878aSAndroid Build Coastguard Worker      ${output})
140*61c4878aSAndroid Build Coastguard Worker
141*61c4878aSAndroid Build Coastguard Worker  add_custom_target("${NAME}._generate" DEPENDS ${output})
142*61c4878aSAndroid Build Coastguard Worker
143*61c4878aSAndroid Build Coastguard Worker  pw_add_library_generic("${NAME}" INTERFACE
144*61c4878aSAndroid Build Coastguard Worker    PUBLIC_INCLUDES
145*61c4878aSAndroid Build Coastguard Worker      ${out_dir}
146*61c4878aSAndroid Build Coastguard Worker  )
147*61c4878aSAndroid Build Coastguard Worker  add_dependencies("${NAME}" "${NAME}._generate")
148*61c4878aSAndroid Build Coastguard Workerendfunction()
149*61c4878aSAndroid Build Coastguard Worker
150*61c4878aSAndroid Build Coastguard Workergenerate_build_time_header(pw_chrono.build_time_header)
151*61c4878aSAndroid Build Coastguard Worker
152*61c4878aSAndroid Build Coastguard Workerpw_add_library(pw_chrono.wrap_time_build_time STATIC
153*61c4878aSAndroid Build Coastguard Worker  SOURCES
154*61c4878aSAndroid Build Coastguard Worker    wrap_time_build_time.cc
155*61c4878aSAndroid Build Coastguard Worker  PUBLIC_DEPS
156*61c4878aSAndroid Build Coastguard Worker    pw_chrono.build_time_header
157*61c4878aSAndroid Build Coastguard Worker  PUBLIC_LINK_OPTIONS
158*61c4878aSAndroid Build Coastguard Worker    -Wl,--wrap=time
159*61c4878aSAndroid Build Coastguard Worker    -Wl,--wrap=gettimeofday
160*61c4878aSAndroid Build Coastguard Worker)
161