• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2019 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
15import("//build_overrides/pigweed.gni")
16
17import("$dir_pw_build/module_config.gni")
18import("$dir_pw_build/target_types.gni")
19import("$dir_pw_cpu_exception/backend.gni")
20import("$dir_pw_docgen/docs.gni")
21import("$dir_pw_protobuf_compiler/proto.gni")
22import("$dir_pw_unit_test/test.gni")
23
24declare_args() {
25  # The build target that overrides the default configuration options for this
26  # module. This should point to a source set that provides defines through a
27  # public config (which may -include a file or add defines directly).
28  pw_cpu_exception_cortex_m_CONFIG = pw_build_DEFAULT_MODULE_CONFIG
29}
30
31pw_source_set("config") {
32  public_deps = [
33    "$dir_pw_preprocessor:arch",
34    pw_cpu_exception_cortex_m_CONFIG,
35  ]
36  public = [ "pw_cpu_exception_cortex_m_private/config.h" ]
37  visibility = [ ":*" ]
38}
39
40config("public_include_path") {
41  include_dirs = [ "public" ]
42  visibility = [ ":*" ]
43}
44
45config("backend_config") {
46  include_dirs = [ "public_overrides" ]
47  visibility = [ ":*" ]
48}
49
50pw_source_set("support") {
51  deps = [
52    ":config",
53    ":cortex_m_constants",
54    ":util",
55    "$dir_pw_cpu_exception:support.facade",
56    "$dir_pw_preprocessor:arch",
57    dir_pw_log,
58    dir_pw_span,
59    dir_pw_string,
60  ]
61  sources = [ "support.cc" ]
62}
63
64# The following targets are deprecated, use ":support" instead.
65group("support_armv7m") {
66  public_deps = [ ":support" ]
67}
68group("support_armv8m") {
69  public_deps = [ ":support" ]
70}
71
72pw_source_set("util") {
73  public_configs = [ ":public_include_path" ]
74  public = [ "public/pw_cpu_exception_cortex_m/util.h" ]
75  public_deps = [ ":cpu_state" ]
76  deps = [
77    ":config",
78    ":cortex_m_constants",
79    "$dir_pw_preprocessor:arch",
80    dir_pw_log,
81  ]
82  sources = [ "util.cc" ]
83}
84
85pw_source_set("proto_dump") {
86  public_configs = [ ":public_include_path" ]
87  public_deps = [
88    ":cpu_exception_armv7m",
89    dir_pw_protobuf,
90    dir_pw_status,
91    dir_pw_stream,
92  ]
93  public = [ "public/pw_cpu_exception_cortex_m/proto_dump.h" ]
94  deps = [
95    ":config",
96    ":cpu_state_protos.pwpb",
97  ]
98  sources = [ "proto_dump.cc" ]
99}
100
101# The following targets are deprecated, use ":proto_dump" instead.
102group("proto_dump_armv7m") {
103  public_deps = [ ":proto_dump" ]
104}
105group("proto_dump_armv8m") {
106  public_deps = [ ":proto_dump" ]
107}
108
109pw_proto_library("cpu_state_protos") {
110  sources = [ "pw_cpu_exception_cortex_m_protos/cpu_state.proto" ]
111}
112
113pw_source_set("cpu_state") {
114  public_configs = [ ":public_include_path" ]
115  public = [ "public/pw_cpu_exception_cortex_m/cpu_state.h" ]
116  public_deps = [
117    "$dir_pw_preprocessor",
118    "$dir_pw_preprocessor:arch",
119  ]
120}
121
122pw_source_set("cpu_exception") {
123  public_configs = [
124    ":backend_config",
125    ":public_include_path",
126  ]
127  public = [ "public_overrides/pw_cpu_exception_backend/state.h" ]
128  public_deps = [
129    ":cpu_state",
130    "$dir_pw_preprocessor",
131    "$dir_pw_preprocessor:arch",
132  ]
133}
134
135# The following targets are deprecated, use ":cpu_exception" instead.
136group("cpu_exception_armv7m") {
137  public_deps = [ ":cpu_exception" ]
138}
139group("cpu_exception_armv8m") {
140  public_deps = [ ":cpu_exception" ]
141}
142
143pw_source_set("cpu_exception.impl") {
144  sources = [ "entry.cc" ]
145  deps = [
146    ":config",
147    ":cortex_m_constants",
148    ":cpu_state",
149    ":util",
150    "$dir_pw_cpu_exception:entry.facade",
151    "$dir_pw_cpu_exception:handler",
152    "$dir_pw_preprocessor:arch",
153  ]
154}
155
156# The following targets are deprecated, use ":cpu_exception.impl" instead.
157group("cpu_exception_armv7m.impl") {
158  public_deps = [ ":cpu_exception.impl" ]
159}
160group("cpu_exception_armv8m.impl") {
161  public_deps = [ ":cpu_exception.impl" ]
162}
163
164pw_source_set("snapshot") {
165  public_configs = [ ":public_include_path" ]
166  public_deps = [
167    ":cpu_state",
168    ":cpu_state_protos.pwpb",
169    "$dir_pw_thread:protos.pwpb",
170    "$dir_pw_thread:snapshot",
171    dir_pw_protobuf,
172    dir_pw_status,
173  ]
174  public = [ "public/pw_cpu_exception_cortex_m/snapshot.h" ]
175  sources = [ "snapshot.cc" ]
176  deps = [
177    ":config",
178    ":cortex_m_constants",
179    ":proto_dump",
180    ":util",
181    dir_pw_log,
182  ]
183}
184
185# The following targets are deprecated, use ":snapshot" instead.
186group("snapshot_armv7m") {
187  public_deps = [ ":snapshot" ]
188}
189group("snapshot_armv8m") {
190  public_deps = [ ":snapshot" ]
191}
192
193pw_source_set("cortex_m_constants") {
194  public = [ "pw_cpu_exception_cortex_m_private/cortex_m_constants.h" ]
195  public_deps = [ "$dir_pw_preprocessor:arch" ]
196  visibility = [ ":*" ]
197}
198
199# The following targets are deprecated, use ":cortex_m_constants" instead.
200group("cortex_m_constants_armv7m") {
201  public_deps = [ ":cortex_m_constants" ]
202  visibility = [ ":*" ]
203}
204group("cortex_m_constants_armv8m") {
205  public_deps = [ ":cortex_m_constants" ]
206  visibility = [ ":*" ]
207}
208
209pw_test_group("tests") {
210  tests = [ ":cpu_exception_entry_test" ]
211}
212
213# TODO(b/234888156): Add ARMv8-M mainline coverage.
214pw_test("cpu_exception_entry_test") {
215  enable_if = pw_cpu_exception_ENTRY_BACKEND ==
216              "$dir_pw_cpu_exception_cortex_m:cpu_exception"
217  deps = [
218    ":config",
219    ":cortex_m_constants",
220    ":cpu_exception",
221    ":cpu_state",
222    "$dir_pw_cpu_exception:entry",
223    "$dir_pw_cpu_exception:handler",
224    "$dir_pw_cpu_exception:support",
225    dir_pw_span,
226  ]
227  sources = [ "exception_entry_test.cc" ]
228}
229
230pw_test("util_test") {
231  enable_if = pw_cpu_exception_ENTRY_BACKEND ==
232              "$dir_pw_cpu_exception_cortex_m:cpu_exception"
233  deps = [
234    ":cpu_state",
235    ":util",
236  ]
237  sources = [ "util_test.cc" ]
238}
239
240pw_doc_group("docs") {
241  sources = [ "docs.rst" ]
242}
243