• 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
15import("//build_overrides/pigweed.gni")
16
17import("$dir_pw_build/facade.gni")
18import("$dir_pw_docgen/docs.gni")
19import("$dir_pw_unit_test/test.gni")
20
21declare_args() {
22  # Backend for the pw_assert module.
23  pw_assert_BACKEND = ""
24}
25
26config("default_config") {
27  include_dirs = [ "public" ]
28}
29
30pw_facade("pw_assert") {
31  backend = pw_assert_BACKEND
32  public_configs = [ ":default_config" ]
33  public = [
34    "public/pw_assert/check.h",
35    "public/pw_assert/internal/check_impl.h",
36    "public/pw_assert/short.h",
37  ]
38  public_deps = [
39    dir_pw_preprocessor,
40
41    # Also expose assert.h to all users of pw_assert.
42    ":light",
43  ]
44
45  # TODO(pwbug/350): Allow assert.h to include check.h for backwards
46  #     compatibility. Remove this when projects have migrated.
47  allow_circular_includes_from = [ ":light" ]
48  deps = [ ":light" ]
49}
50
51# Provide a way include "pw_assert/light.h" without depending on the full
52# assert facade. This enables relying on light asserts from low-level headers
53# like polyfill or span that might trigger circular includes due to the
54# backend.
55#
56# See the docs for more discussion around where to use which assert system.
57pw_source_set("light") {
58  public_configs = [ ":default_config" ]
59  public = [
60    "public/pw_assert/assert.h",
61    "public/pw_assert/light.h",
62
63    # Needed for PW_ASSERT_ENABLE_DEBUG. Note that depending on :pw_assert to
64    # get options.h won't work here since it will trigger the circular include
65    # problem that light asserts are designed to solve.
66    "public/pw_assert/options.h",
67  ]
68  public_deps = [ dir_pw_preprocessor ]
69}
70
71# Note: While this is technically a test, doesn't verify any of the output and
72# is more of a compile test. The results can be visually verified if desired.
73pw_test("light_test") {
74  configs = [ ":default_config" ]
75  sources = [ "light_test.cc" ]
76  deps = [ ":pw_assert" ]
77}
78
79pw_test_group("tests") {
80  tests = [
81    ":assert_backend_compile_test",
82    ":assert_facade_test",
83    ":light_test",
84  ]
85}
86
87# The assert facade test doesn't require a backend since a fake one is
88# provided. However, since this doesn't depend on the backend it re-includes
89# the facade headers.
90pw_test("assert_facade_test") {
91  configs = [ ":default_config" ]  # For internal/assert_impl.h
92  sources = [
93    "assert_facade_test.cc",
94    "fake_backend.cc",
95    "public/pw_assert/internal/check_impl.h",
96    "pw_assert_test/fake_backend.h",
97  ]
98  deps = [
99    ":light",
100    dir_pw_status,
101  ]
102
103  # TODO(frolv): Fix this test on the QEMU target.
104  enable_if = pw_build_EXECUTABLE_TARGET_TYPE != "lm3s6965evb_executable"
105}
106
107pw_test("assert_backend_compile_test") {
108  enable_if = pw_assert_BACKEND != ""
109  deps = [
110    ":pw_assert",
111    dir_pw_status,
112    pw_assert_BACKEND,
113  ]
114  sources = [
115    "assert_backend_compile_test.cc",
116    "assert_backend_compile_test_c.c",
117  ]
118}
119
120pw_doc_group("docs") {
121  sources = [ "docs.rst" ]
122}
123