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