blob: 0909a2a0ebe87840368e6075ad7b3785fcb0e475 [file] [log] [blame]
Armando Montanez1d5da9b2022-01-05 16:43:56 -08001# Copyright 2022 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/error.gni")
Ewout van Bekkum5ddc01d2022-03-08 12:50:25 -080018import("$dir_pw_build/facade.gni")
Armando Montanez1d5da9b2022-01-05 16:43:56 -080019import("$dir_pw_build/target_types.gni")
20import("$dir_pw_docgen/docs.gni")
21import("backend.gni")
22
23config("public_include_path") {
24 include_dirs = [ "public" ]
25}
26
27config("backend_config") {
28 include_dirs = [ "public_overrides" ]
29}
30
Ewout van Bekkum5ddc01d2022-03-08 12:50:25 -080031# This source set only provides pw_log's backend interface by invoking the
32# :handler facade.
Armando Montanez1d5da9b2022-01-05 16:43:56 -080033pw_source_set("pw_log_string") {
34 public_configs = [
35 ":backend_config",
36 ":public_include_path",
37 ]
38 public = [
39 "public/pw_log_string/log_string.h",
40 "public_overrides/pw_log_backend/log_backend.h",
41 ]
Ewout van Bekkum5ddc01d2022-03-08 12:50:25 -080042 public_deps = [
43 ":handler",
44 "$dir_pw_preprocessor",
45 ]
Armando Montanez1d5da9b2022-01-05 16:43:56 -080046}
47
Ewout van Bekkum5ddc01d2022-03-08 12:50:25 -080048pw_source_set("pw_log_string.impl") {
49 deps = [ ":handler.impl" ]
50}
51
52# This facade is a C API for string based logging which may be used to back
53# pw_log or for example to mix tokenized and string based logging.
54pw_facade("handler") {
55 backend = pw_log_string_HANDLER_BACKEND
56 public_configs = [ ":public_include_path" ]
57 public = [ "public/pw_log_string/handler.h" ]
58 public_deps = [ "$dir_pw_preprocessor" ]
59 sources = [ "handler.cc" ]
60
61 require_link_deps = [ ":handler.impl" ]
62}
63
64# Logging is low-level and ubiquitous. Because of this, it can often cause
65# circular dependencies. This target collects dependencies from the backend that
66# cannot be used because they would cause circular deps.
67#
68# This group ("$dir_pw_log_string:handler_impl") must be listed in
69# pw_build_LINK_DEPS if pw_log_string_HANDLER_BACKEND is set.
70#
71# pw_log_string:handler backends must provide their own "impl" target that
72# collects their actual dependencies. The backend "impl" group may be empty
73# if everything can go directly in the backend target without causing circular
74# dependencies.
75if (pw_log_string_HANDLER_BACKEND != "") {
76 pw_source_set("handler.impl") {
77 deps = [ get_label_info(pw_log_string_HANDLER_BACKEND,
78 "label_no_toolchain") + ".impl" ]
Armando Montanez1d5da9b2022-01-05 16:43:56 -080079 }
80} else {
Ewout van Bekkum5ddc01d2022-03-08 12:50:25 -080081 pw_error("handler.impl") {
82 message =
83 string_join(" ",
84 [
85 "To use pw_log_string:handler, please direct",
86 "pw_log_string_HANDLER_BACKEND to the source set that",
87 "implements the C API.",
88 ])
Armando Montanez1d5da9b2022-01-05 16:43:56 -080089 }
90}
91
92pw_doc_group("docs") {
93 sources = [ "docs.rst" ]
94}