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