xref: /aosp_15_r20/external/pigweed/pw_function/BUILD.gn (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker# Copyright 2021 The Pigweed Authors
2*61c4878aSAndroid Build Coastguard Worker#
3*61c4878aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); you may not
4*61c4878aSAndroid Build Coastguard Worker# use this file except in compliance with the License. You may obtain a copy of
5*61c4878aSAndroid Build Coastguard Worker# the License at
6*61c4878aSAndroid Build Coastguard Worker#
7*61c4878aSAndroid Build Coastguard Worker#     https://www.apache.org/licenses/LICENSE-2.0
8*61c4878aSAndroid Build Coastguard Worker#
9*61c4878aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*61c4878aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11*61c4878aSAndroid Build Coastguard Worker# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12*61c4878aSAndroid Build Coastguard Worker# License for the specific language governing permissions and limitations under
13*61c4878aSAndroid Build Coastguard Worker# the License.
14*61c4878aSAndroid Build Coastguard Worker
15*61c4878aSAndroid Build Coastguard Workerimport("//build_overrides/pigweed.gni")
16*61c4878aSAndroid Build Coastguard Worker
17*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_bloat/bloat.gni")
18*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_build/module_config.gni")
19*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_build/target_types.gni")
20*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_docgen/docs.gni")
21*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_function/function.gni")
22*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_unit_test/test.gni")
23*61c4878aSAndroid Build Coastguard Worker
24*61c4878aSAndroid Build Coastguard Workerconfig("public_include_path") {
25*61c4878aSAndroid Build Coastguard Worker  include_dirs = [ "public" ]
26*61c4878aSAndroid Build Coastguard Worker  visibility = [ ":*" ]
27*61c4878aSAndroid Build Coastguard Worker}
28*61c4878aSAndroid Build Coastguard Worker
29*61c4878aSAndroid Build Coastguard Workerpw_source_set("config") {
30*61c4878aSAndroid Build Coastguard Worker  public = [ "public/pw_function/config.h" ]
31*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":public_include_path" ]
32*61c4878aSAndroid Build Coastguard Worker  public_deps = [
33*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_third_party/fuchsia:fit",
34*61c4878aSAndroid Build Coastguard Worker    pw_function_CONFIG,
35*61c4878aSAndroid Build Coastguard Worker  ]
36*61c4878aSAndroid Build Coastguard Worker  visibility = [ ":*" ]
37*61c4878aSAndroid Build Coastguard Worker}
38*61c4878aSAndroid Build Coastguard Worker
39*61c4878aSAndroid Build Coastguard Workerpw_source_set("pw_function") {
40*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":public_include_path" ]
41*61c4878aSAndroid Build Coastguard Worker  public_deps = [
42*61c4878aSAndroid Build Coastguard Worker    ":config",
43*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_third_party/fuchsia:fit",
44*61c4878aSAndroid Build Coastguard Worker    dir_pw_assert,
45*61c4878aSAndroid Build Coastguard Worker    dir_pw_preprocessor,
46*61c4878aSAndroid Build Coastguard Worker  ]
47*61c4878aSAndroid Build Coastguard Worker  public = [ "public/pw_function/function.h" ]
48*61c4878aSAndroid Build Coastguard Worker}
49*61c4878aSAndroid Build Coastguard Worker
50*61c4878aSAndroid Build Coastguard Workerconfig("enable_dynamic_allocation_config") {
51*61c4878aSAndroid Build Coastguard Worker  defines = [ "PW_FUNCTION_ENABLE_DYNAMIC_ALLOCATION=1" ]
52*61c4878aSAndroid Build Coastguard Worker  visibility = [ ":*" ]
53*61c4878aSAndroid Build Coastguard Worker}
54*61c4878aSAndroid Build Coastguard Worker
55*61c4878aSAndroid Build Coastguard Worker# Use this for pw_function_CONFIG to enable dynamic allocation.
56*61c4878aSAndroid Build Coastguard Workerpw_source_set("enable_dynamic_allocation") {
57*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":enable_dynamic_allocation_config" ]
58*61c4878aSAndroid Build Coastguard Worker}
59*61c4878aSAndroid Build Coastguard Worker
60*61c4878aSAndroid Build Coastguard Workerpw_source_set("pointer") {
61*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":public_include_path" ]
62*61c4878aSAndroid Build Coastguard Worker  public = [ "public/pw_function/pointer.h" ]
63*61c4878aSAndroid Build Coastguard Worker  sources = [ "public/pw_function/internal/static_invoker.h" ]
64*61c4878aSAndroid Build Coastguard Worker}
65*61c4878aSAndroid Build Coastguard Worker
66*61c4878aSAndroid Build Coastguard Workerpw_source_set("scope_guard") {
67*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":public_include_path" ]
68*61c4878aSAndroid Build Coastguard Worker  public = [ "public/pw_function/scope_guard.h" ]
69*61c4878aSAndroid Build Coastguard Worker}
70*61c4878aSAndroid Build Coastguard Worker
71*61c4878aSAndroid Build Coastguard Workerpw_doc_group("docs") {
72*61c4878aSAndroid Build Coastguard Worker  inputs = [ "Kconfig" ]
73*61c4878aSAndroid Build Coastguard Worker  sources = [ "docs.rst" ]
74*61c4878aSAndroid Build Coastguard Worker  report_deps = [
75*61c4878aSAndroid Build Coastguard Worker    ":callable_size",
76*61c4878aSAndroid Build Coastguard Worker    ":function_size",
77*61c4878aSAndroid Build Coastguard Worker  ]
78*61c4878aSAndroid Build Coastguard Worker}
79*61c4878aSAndroid Build Coastguard Worker
80*61c4878aSAndroid Build Coastguard Workerpw_test_group("tests") {
81*61c4878aSAndroid Build Coastguard Worker  tests = [
82*61c4878aSAndroid Build Coastguard Worker    ":function_test",
83*61c4878aSAndroid Build Coastguard Worker    ":pointer_test",
84*61c4878aSAndroid Build Coastguard Worker    ":scope_guard_test",
85*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_third_party/fuchsia:function_tests",
86*61c4878aSAndroid Build Coastguard Worker  ]
87*61c4878aSAndroid Build Coastguard Worker}
88*61c4878aSAndroid Build Coastguard Worker
89*61c4878aSAndroid Build Coastguard Workerpw_test("function_test") {
90*61c4878aSAndroid Build Coastguard Worker  deps = [
91*61c4878aSAndroid Build Coastguard Worker    ":pw_function",
92*61c4878aSAndroid Build Coastguard Worker    dir_pw_polyfill,
93*61c4878aSAndroid Build Coastguard Worker  ]
94*61c4878aSAndroid Build Coastguard Worker  sources = [ "function_test.cc" ]
95*61c4878aSAndroid Build Coastguard Worker  negative_compilation_tests = true
96*61c4878aSAndroid Build Coastguard Worker}
97*61c4878aSAndroid Build Coastguard Worker
98*61c4878aSAndroid Build Coastguard Workerpw_test("pointer_test") {
99*61c4878aSAndroid Build Coastguard Worker  deps = [
100*61c4878aSAndroid Build Coastguard Worker    ":pointer",
101*61c4878aSAndroid Build Coastguard Worker    ":pw_function",
102*61c4878aSAndroid Build Coastguard Worker  ]
103*61c4878aSAndroid Build Coastguard Worker  sources = [ "pointer_test.cc" ]
104*61c4878aSAndroid Build Coastguard Worker}
105*61c4878aSAndroid Build Coastguard Worker
106*61c4878aSAndroid Build Coastguard Workerpw_test("scope_guard_test") {
107*61c4878aSAndroid Build Coastguard Worker  sources = [ "scope_guard_test.cc" ]
108*61c4878aSAndroid Build Coastguard Worker  deps = [
109*61c4878aSAndroid Build Coastguard Worker    ":pw_function",
110*61c4878aSAndroid Build Coastguard Worker    ":scope_guard",
111*61c4878aSAndroid Build Coastguard Worker  ]
112*61c4878aSAndroid Build Coastguard Worker}
113*61c4878aSAndroid Build Coastguard Worker
114*61c4878aSAndroid Build Coastguard Workerpw_size_diff("function_size") {
115*61c4878aSAndroid Build Coastguard Worker  title = "Pigweed function size report"
116*61c4878aSAndroid Build Coastguard Worker
117*61c4878aSAndroid Build Coastguard Worker  binaries = [
118*61c4878aSAndroid Build Coastguard Worker    {
119*61c4878aSAndroid Build Coastguard Worker      target = "size_report:basic_function"
120*61c4878aSAndroid Build Coastguard Worker      base = "size_report:pointer_base"
121*61c4878aSAndroid Build Coastguard Worker      label = "Simple pw::Function vs. function pointer"
122*61c4878aSAndroid Build Coastguard Worker    },
123*61c4878aSAndroid Build Coastguard Worker  ]
124*61c4878aSAndroid Build Coastguard Worker}
125*61c4878aSAndroid Build Coastguard Worker
126*61c4878aSAndroid Build Coastguard Workerpw_size_diff("callable_size") {
127*61c4878aSAndroid Build Coastguard Worker  title = "Size comparison of callable objects"
128*61c4878aSAndroid Build Coastguard Worker
129*61c4878aSAndroid Build Coastguard Worker  binaries = [
130*61c4878aSAndroid Build Coastguard Worker    {
131*61c4878aSAndroid Build Coastguard Worker      target = "size_report:callable_size_function_pointer"
132*61c4878aSAndroid Build Coastguard Worker      base = "size_report:callable_size_base"
133*61c4878aSAndroid Build Coastguard Worker      label = "Function pointer"
134*61c4878aSAndroid Build Coastguard Worker    },
135*61c4878aSAndroid Build Coastguard Worker    {
136*61c4878aSAndroid Build Coastguard Worker      target = "size_report:callable_size_static_lambda"
137*61c4878aSAndroid Build Coastguard Worker      base = "size_report:callable_size_base"
138*61c4878aSAndroid Build Coastguard Worker      label = "Static lambda (operator+)"
139*61c4878aSAndroid Build Coastguard Worker    },
140*61c4878aSAndroid Build Coastguard Worker    {
141*61c4878aSAndroid Build Coastguard Worker      target = "size_report:callable_size_simple_lambda"
142*61c4878aSAndroid Build Coastguard Worker      base = "size_report:callable_size_base"
143*61c4878aSAndroid Build Coastguard Worker      label = "Non-capturing lambda"
144*61c4878aSAndroid Build Coastguard Worker    },
145*61c4878aSAndroid Build Coastguard Worker    {
146*61c4878aSAndroid Build Coastguard Worker      target = "size_report:callable_size_capturing_lambda"
147*61c4878aSAndroid Build Coastguard Worker      base = "size_report:callable_size_base"
148*61c4878aSAndroid Build Coastguard Worker      label = "Simple capturing lambda"
149*61c4878aSAndroid Build Coastguard Worker    },
150*61c4878aSAndroid Build Coastguard Worker    {
151*61c4878aSAndroid Build Coastguard Worker      target = "size_report:callable_size_multi_capturing_lambda"
152*61c4878aSAndroid Build Coastguard Worker      base = "size_report:callable_size_base"
153*61c4878aSAndroid Build Coastguard Worker      label = "Multi-argument capturing lambda"
154*61c4878aSAndroid Build Coastguard Worker    },
155*61c4878aSAndroid Build Coastguard Worker    {
156*61c4878aSAndroid Build Coastguard Worker      target = "size_report:callable_size_custom_class"
157*61c4878aSAndroid Build Coastguard Worker      base = "size_report:callable_size_base"
158*61c4878aSAndroid Build Coastguard Worker      label = "Custom class"
159*61c4878aSAndroid Build Coastguard Worker    },
160*61c4878aSAndroid Build Coastguard Worker  ]
161*61c4878aSAndroid Build Coastguard Worker}
162